Memanfaatkan Azure IoT Edge Module Twins untuk Manajemen Status Rangkaian
Kedipkan LED menggunakan Domain Specific Language yang diterapkan melalui Module Twin ke Docker container yang menjalankan Johnny 5 pada Raspberry Pi.
Cerita
Ringkasan:
Azure IoT Edge memungkinkan perangkat yang terkoneksi secara intermiten untuk mendapatkan properti yang diinginkan melalui “Module Twins.” Twins ini dapat digunakan sebagai konfigurasi status yang diinginkan untuk mendorong perilaku tertentu dalam Edge Modules. Edge Modules berjalan sebagai beban kerja container untuk memungkinkan penyembuhan diri dan penyebaran cepat tanpa perlu konektivitas konstan. Ketika internet tersedia, perangkat dapat memanfaatkan layanan cloud untuk memanggil metode dalam modul.
Dalam proyek ini, kami mengembangkan modul IoT Edge menggunakan Azure IoT NodeJS SDK yang mendapatkan status yang diinginkan dari cloud yang mengonfigurasi pin GPIO pada Raspberry Pi untuk melakukan operasi yang diinginkan pada rangkaian yang dilampirkan menggunakan Johnny 5.
Ini dapat memungkinkan kasus penggunaan yang menarik seperti:* Izinkan beberapa mode operasi untuk satu rangkaian dengan menerapkan konfigurasi status yang berbeda* Failover hardware redundan dengan dua perangkat yang dilampirkan ke rangkaian yang sama ketika diorkestrasi dan dikonfigurasi dengan baik dengan kubernetes.
Latar Belakang:
Konfigurasi status yang diinginkan adalah konsep populer yang sering digunakan saat menyediakan server untuk pertama kalinya dan untuk memberlakukan kepatuhan dalam sistem yang berjalan. Kami memperluas konsep ini ke rangkaian menggunakan layanan yang dirancang untuk ketahanan dan operasi sehat di area di mana konektivitas jaringan mungkin tidak stabil. Pendekatan ini memungkinkan kami untuk mengubah perilaku rangkaian yang terhubung saat runtime dan memungkinkan skenario yang menarik yang melibatkan redundansi hardware.
Runtime Azure IoT Edge dari Microsoft memungkinkan kami untuk membentuk dasar yang solid untuk proyek. Runtime ini berjalan sebagai layanan pada hardware lokal dan memungkinkan orkestrasi “modul” yang dikontainerkan yang dikonfigurasi per perangkat di cloud Azure. Dua modul sistem selalu digunakan, edge-agent yang mendapatkan dan menerapkan konfigurasi penerapan modul dan edge-hub yang memungkinkan pesan cache ke cloud dan komunikasi antar-modul.
Kami memulai dengan membuat modul IoT Edge Azure menggunakan Azure IoT NodeJS SDK. Modul ini menerima konfigurasi twin yang menentukan properti yang diinginkan dan yang dilaporkan untuk perangkat tertentu. Kami menggunakan Domain Specific Language yang diurai menjadi konfigurasi Johnny 5. Ini memungkinkan kami untuk mendefinisikan bagaimana rangkaian harus berfungsi di cloud, dan menerapkannya ke modul IoT Edge kami.
Contoh konfigurasi disediakan di bawah ini:
“config”: “{\”peripherals\”:[{\”type\”:\”Led\”,\”name\”:\”alarm\”,\”settings\”
:{\”pin\”:\”GPIO18\”},\”initialState\”: {\”method\”:\”blink\”,\”period\”:500},\
“outputAlias\”:\”alias2\”},{\”type\”:\”Button\”,\”name\”:\”button\”,\”settings\”:
{\”pin\”:\”GPIO20\”},\”outputAlias\”:\”alias1\”}]}”,
Contoh ini mendefinisikan perangkat LED pada GPIO18 dengan initialState berkedip on/off setiap 500ms. Status LED dapat menyebar ke modul lain menggunakan outputAlias. Sebuah tombol juga digunakan pada GPIO20 yang menerbitkan perubahan status ke alias1. Dalam konfigurasi seperti itu, kami dapat merespons perubahan status secara independen di modul tambahan dengan merutekan outputAlias.
Kami saat ini mendukung konfigurasi perangkat thermometer, LED, dan Button dengan mekanisme ini.
Langkah untuk mereproduksi:
Untuk memulai, Anda akan memerlukan langganan Microsoft Azure dengan IoT Hub yang diterapkan.
Selanjutnya, Anda akan ingin memulai konfigurasi hardware Anda dengan menghubungkan LED ke GPIO18 Raspberry Pi. Instruksi untuk proses ini dapat ditemukan di sini.
Dengan rangkaian dan layanan cloud yang disiapkan, Anda akan ingin menginstal runtime Azure IoT Edge ke Raspberry Pi Anda dengan mengikuti panduan ini. Setelah runtime terinstal, Anda perlu menyediakan perangkat secara manual dengan mengikuti instruksi ini.
Selanjutnya kami akan membuat penerapan khusus dalam Azure yang akan memungkinkan kami untuk kedipkan LED kami.
Buat penerapan seperti yang ditunjukkan di bawah ini:
URL gambar:
toolboc/johnny5onedge:0.0.981-arm32v7
Opsi pembuatan container:
{“ExposedPorts”:{“9229/tcp”:{}},“HostConfig”:{“PortBindings”:{“9229/tcp”:[{“HostPort”:“9229”}]},“Privileged”:true,“Devices”:[{“PathOnHost”:“/dev/i2c-1”,“PathInContainer”:“/dev/i2c-1”,“CgroupPermissions”:“rwm”},{“PathOnHost”:“/dev/gpiomem”,“PathInContainer”:“/dev/gpiomem”,“CgroupPermissions”:“rwm”}],“Mounts”:[{“Type”:“bind”,“Source”:“/lib/modules/”,“Target”:“/lib/modules/”}]}}
Properti yang diinginkan Module Twin:
{
“properties.desired”: {
“config”: “{\”peripherals\”:[{\”type\”:\”Led\”,\”name\”:\”alarm\”,\”settings\”:{\”pin\”:\”GPIO18\”},\”initialState\”: {\”method\”:\”blink\”,\”period\”:500},\”outputAlias\”:\”alias2\”},{\”type\”:\”Button\”,\”name\”:\”on\”,\”settings\”:{\”pin\”:\”GPIO20\”},\”outputAlias\”:\”alias1\”}]}”
}
}
Simpan saat Anda selesai. Lalu lewati bagian “Specify Routes” dan “Specify Metrics” sampai Anda sampai ke “Target Devices”.
Setel Prioritas ke 10 dan tambahkan kondisi target tags.environment=’blinK
Read More Information…..
Desired State Configuration for Circuits