Homebridge Automation dengan Node-Red

Menurut pendapat saya, salah satu kelemahan utama dari homebridge adalah kurangnya kemampuan untuk membuat skrip tingkat lanjut. Semua otomatisasi ditugaskan ke pusat rumah, yang dapat berupa iPad (terhubung ke pengisian daya), Apple TV atau HomePod. Tidak semua orang memiliki perangkat ini, selain itu, HomeKit memiliki otomatisasi yang sangat buruk. Situasi ini dapat diperbaiki menggunakan Node-Red . Artikel ini ditujukan untuk pengguna yang sudah menginstal dan mengonfigurasi homebridge.



Secara singkat: Node-RED adalah alat untuk menghubungkan perangkat keras, API dan layanan online dengan membangun tautan antara berbagai node (blok).

Definisi di situs web resmi:
Node-RED adalah alat pemrograman untuk pengkabelan bersama perangkat keras, API dan layanan online dengan cara baru dan menarik.
Ini menyediakan editor berbasis browser yang membuatnya mudah untuk menyatukan aliran menggunakan berbagai node di palet yang dapat digunakan untuk runtime dalam satu klik.


Pada Raspbian, ini dipasang:

sudo apt-get install nodered sudo systemctl enable nodered.service sudo service nodered start 

Secara default, Node-Red berjalan pada port 1880.

Ada perpustakaan besar modul dengan serangkaian blok berbagai fungsi. Tidak terhindar dan homebridge. Instal simpul-red-contrib-homebridge-automation :

 cd ~/.node-red npm install node-red-contrib-homebridge-automation sudo service nodered restart 

Mari kita coba nyalakan bola lampu. Untuk melakukan ini, seret blok fungsi hb-kontrol , fungsi (blok ini akan mengirim perintah untuk menghidupkan) dan menyuntikkan (dalam kerangka artikel ini, hanya diperlukan untuk mengaktifkan skrip secara manual). Untuk pertama kalinya, untuk blok hb, Anda perlu menentukan PIN dan memperbarui daftar perangkat. Kemudian Anda dapat menambahkan blok yang diperlukan:



Sekarang, dengan mengklik tombol di blok injeksi , lampu akan menyala. Selain hb-contoll, ada juga blok hb-event, hb-status dan hb-resume . Deskripsi terperinci dari blok dapat ditemukan di repositori resmi.

Kode blok fungsi
 var ret_msg={}; ret_msg.payload = {}; ret_msg.payload.On = true; return ret_msg; 


Blok fungsi dirancang untuk memanipulasi data menggunakan fitur JavaScript. Blok menerima variabel pesan bersama dengan parameter payload , secara default, sebagian besar blok di Node-Red bekerja dengan parameter payload .

Perlu berbicara tentang blok Debug , dengan itu Anda dapat melihat output dari blok, sehingga Anda memahami apa kesalahannya jika ide Anda tidak berhasil.

Sekarang mari kita lakukan sesuatu yang menarik, misalnya, ubah status lampu setelah memutar MagicCube 90 derajat. Dalam artikel sebelumnya, saya menunjukkan cara berteman perangkat zigbee dengan homebridge. MagicCube, seperti perangkat zigbee lainnya, akan muncul di broker MQTT setelah dipasangkan.

Node-Red mendukung protokol MQTT di luar kotak. Tambahkan blok MQTT, tentukan alamat server dan kubus topik.



Sebuah kubus dapat mengirimkan status berikut:
goyang, bangun, jatuh, ketuk, geser, flip180, flip90, rotate_left dan rotate_right

Tambahkan blok sakelar untuk memisahkan satu keadaan dari keadaan lainnya. Tentukan flip90 , goyang dan ketuk kondisi di saklar . Hubungkan output teratas ke status hb untuk mendapatkan status bola lampu saat ini. Blok status-hb terhubung ke blok Nilai Terbalik pada dengan membalikkan keadaan, dan outputnya terhubung ke kontrol-hb dan ketika kubus diputar, bohlam akan mengubah status hidup / mati. Seharusnya terlihat seperti ini:



Balikkan Pada Kode Nilai
 var ret_msg=msg; ret_msg.payload.On = !msg.payload.On; return ret_msg; 


Flow dapat diimpor dari sini:

Mengalir
 [ { "id": "f0f31eb6.22f16", "type": "tab", "label": "Flow 1", "disabled": false, "info": "" }, { "id": "e0f72465.9e4fb8", "type": "mqtt in", "z": "f0f31eb6.22f16", "name": "", "topic": "zigbee2mqtt/0x00158d00010f0528", "qos": "2", "datatype": "auto", "broker": "8ec472b.e73e29", "x": 160, "y": 80, "wires": [ [ "43f74679.730588" ] ] }, { "id": "8539109.d872ff", "type": "debug", "z": "f0f31eb6.22f16", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "x": 670, "y": 60, "wires": [] }, { "id": "c5db7c5b.399f4", "type": "hb-status", "z": "f0f31eb6.22f16", "name": "Room1", "Homebridge": "HomeBridge", "Manufacturer": "YeeLight", "Service": "Lightbulb", "device": "HomeBridgeA1:23:AD:E3:CD:32YeeLightRoom100000043", "conf": "7948a496.505c2c", "x": 340, "y": 180, "wires": [ [ "9ef696d9.51a378" ] ] }, { "id": "43f74679.730588", "type": "switch", "z": "f0f31eb6.22f16", "name": "CubeActions", "property": "payload", "propertyType": "msg", "rules": [ { "t": "cont", "v": "flip90", "vt": "str" }, { "t": "cont", "v": "tap", "vt": "str" }, { "t": "cont", "v": "shake", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 3, "x": 150, "y": 240, "wires": [ [ "c5db7c5b.399f4" ], [], [] ] }, { "id": "f476dcba.a6511", "type": "hb-control", "z": "f0f31eb6.22f16", "name": "Room1", "Homebridge": "HomeBridge", "Manufacturer": "YeeLight", "Service": "Lightbulb", "device": "HomeBridgeA1:23:AD:E3:CD:32YeeLightRoom100000043", "conf": "7948a496.505c2c", "x": 700, "y": 180, "wires": [] }, { "id": "9ef696d9.51a378", "type": "function", "z": "f0f31eb6.22f16", "name": "Invert On Value", "func": "var ret_msg=msg;\nret_msg.payload.On = !msg.payload.On;\nreturn ret_msg;", "outputs": 1, "noerr": 0, "x": 520, "y": 180, "wires": [ [ "f476dcba.a6511" ] ] }, { "id": "8ec472b.e73e29", "type": "mqtt-broker", "z": "", "name": "mosquitto", "broker": "127.0.0.1", "port": "1883", "clientid": "", "usetls": false, "compatmode": true, "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "closeTopic": "", "closeQos": "0", "closePayload": "", "willTopic": "", "willQos": "0", "willPayload": "" }, { "id": "7948a496.505c2c", "type": "hb-conf", "z": "", "username": "111-11-111" } ] 


Dengan demikian, dimungkinkan untuk "memahat" skema otomasi kompleks dari blok. Di perpustakaan Anda dapat menemukan modul dengan set blok untuk tugas yang sama sekali berbeda, misalnya, untuk merekam kamera pengintai video atau bekerja dengan file dari kamera.

Pikiran PS keras-keras:
Saya dihantui oleh pemikiran bahwa tidak peduli bagaimana teknologi berkembang, banyak yang masih sangat jauh dari otomasi kerja dan proses kehidupan yang dangkal melalui pemrograman. Saya sangat berharap bahwa dengan munculnya alat-alat seperti Node-Red atau Blockly , ambang masuk akan sangat berkurang. Setelah belajar bagaimana membangun sistem dari kubus di Node-Red yang sama, orang mungkin akan sampai ke blok fungsi dan belajar JS dengan minat, dan kemudian semuanya akan terjadi dengan sendirinya.

Source: https://habr.com/ru/post/id462775/


All Articles