Przedstawię jak w łatwy i szybki sposób można zrobić sterowanie przekaźnikiem Sonoff Basic w Node-RED. Zakładam, że przekaźnik jest zmodyfikowany udoskonalonym firmwarem oraz jest zainstalowane Node-RED.
Ponadto potrzebujemy jeszcze broker MQTT. Możliwe są dwa rozwiązania: własny broker lub jeden z dostępnych bezpłatnie np. iot.eclipse.org. Lista publicznie dostępnych jest na stronie. Jeżeli nie przejmujecie się tym, że ktoś może podejrzeć jakie komunikaty przesyłacie to instalację brokera można pominąć i przejść do konfiguracji przekaźnika.
Instalacja brokera MQTT
Instalacja brokera(pośrednika) jest stosunkowo prosta i sprowadza się do wprowadzenia kilku komend w terminal:
[bash]
$ wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
$ sudo apt-key add mosquitto-repo.gpg.key
$ cd /etc/apt/sources.list.d/
[/bash]
W przypadku Debiana Wheezy:
[bash]$ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list[/bash]
a Debiana Jessie:
[bash]
$ sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
[/bash]
Instalujemy mosquitto – opensource’owy broker MQTT
[bash]
$ sudo apt-get update
$ sudo apt-get install mosquitto
[/bash]
Konfiguracja komunikatów MQTT w Sonoff
W tym celu trzeba wejść w interfejs webowy przekaźnika (Configuration-> Configure MQTT) przez przeglądarkę i uzupełnić pola: HOST i opcjonalnie USER i PASSWORD. Jeżeli zamierzamy korzystać z publicznego brokera MQTT to należy upewnić się czy wymaga on autoryzacji (większość nie).

Instalacja interfejsu Web dla Node-RED
Wypadało by mieć możliwość sterowania z urządzenia mobilnego co nie ? W tym celu zainstalujemy prosty, ale ładny dashboard. W konsoli wprowadzamy komendę:
[code]
npm i node-red-dashboard
[/code]
Sterowanie przekaźnikiem
Podejrzewam, że po instalacji zapoznaliście się z edytorem i wiecie jakie ma mniej więcej funkcje 😉
Utwórzmy prosty schemat blokowy: na wejściu mqtt, na wyjściu mqtt, a pomiędzy nimi wigdet przełącznika. Jak pokazane na zrzucie ekranu.

Bloki z MQTT trzeba skonfigurować. Mianowicie na wejściu ustawiamy broker MQTT (adres IP) oraz topic (’stat/sonoff/POWER’), a na wyjściu topic (’cmnd/sonoff/power’). Lista topiców przekaźnika jest na stronie firmware.
Widget przełącznika konfigurujemy jak pokazane:

Dodatkowo możemy dodać 'debug’, aby widzieć w zakładce 'Debug’ po prawej jakie komunikaty przychodzą.
Dajemy Deploy i wchodzimy na stronkę IP:1880/ui

Kolorystykę interfejsu można modyfikować w panelu po prawej, w zakładce 'Dashboard’. Interfejs jest responsywny, działa na urządzeniach mobilnych.
Podaję kod całego schematu blokowego, który możemy wkleić w (trzy kreski w prawym górnym rogu)/Import/Clibboard 🙂 Oczywiście adres brokera trzeba zmienić.
[code]
[{"id":"16aff21d.c5c19e","type":"tab","label":"Flow 1"},{"id":"44f9f265.72c0cc","type":"mqtt in","z":"16aff21d.c5c19e","name":"","topic":"stat/sonoff/POWER","qos":"2","broker":"2b76bb16.fddb14","x":145,"y":156,"wires":[["159fbbc6.287f94","39eee788.b3dc58"]]},{"id":"bb1b8542.a73c98","type":"mqtt out","z":"16aff21d.c5c19e","name":"","topic":"cmnd/sonoff/power","qos":"","retain":"","broker":"2b76bb16.fddb14","x":615,"y":335,"wires":[]},{"id":"159fbbc6.287f94","type":"ui_switch","z":"16aff21d.c5c19e","name":"","label":"Przełącznik","group":"3284560d.4511da","order":0,"width":0,"height":0,"passthru":true,"topic":"cmnd/sonoff/power","style":"","onvalue":"1","onvalueType":"num","onicon":"","oncolor":"","offvalue":"0","offvalueType":"num","officon":"","offcolor":"","x":359,"y":221,"wires":[["bb1b8542.a73c98"]]},{"id":"39eee788.b3dc58","type":"debug","z":"16aff21d.c5c19e","name":"","active":true,"console":"false","complete":"false","x":364,"y":96,"wires":[]},{"id":"2b76bb16.fddb14","type":"mqtt-broker","z":"","broker":"192.168.88.245","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""},{"id":"3284560d.4511da","type":"ui_group","z":"","name":"Sonoff","tab":"c9b9b2be.55f18","disp":true,"width":"6"},{"id":"c9b9b2be.55f18","type":"ui_tab","z":"","name":"Home","icon":"dashboard"}]
[/code]