Aktualizacja: Styczeń, 2017
Uwaga: oprogramowanie poniżej nie jest przeze mnie już rozwijane, natomiast ewoluowało w to tutaj i zapewnia te same funkcjonalności+
W swoim poprzednim wpisie dotyczącym przełącznika Sonoff wspomniałem, że będę kombinował z alternatywnym oprogramowaniem. Dzisiaj chciałbym udostępnić moje wypociny.
Co zrobiłem:
- przełącznik komunikuje się z openHAB za pomocą MQTT, bardzo prostego i lekkiego protokołu do wymiany danych za pomocą „wiadomości” (messages).
- z poziomu OpenHAB jest możliwość sterowania przełącznikiem: włączanie (ON) lub wyłączanie (OFF)
- jest możliwości zapytania przełącznik o aktualny stan przełącznika: czy jest ON lub OFF
- przełącznik przy startowaniu odpytuje MQTT Broker o wartość domyślną
- można zmieniać stan przełącznika z ON/OFF za pomocą przycisku wbudowanego do przełącznika
- przełącznik wznawia automatycznie połączenie WiFi lub podłącza się do MQTT Broker przy utracie połączenia
Technikalia i wymagania
- przełącznik ma wgrany firmware do NodeMCU – ESP8266
- komunikuje się z OpenHAB za pomocą protokołu MQTT
- w openHAB wymagany jest MQTT Binding
- wymagany jest MQTT Broker np. Mosquitto, RabbitMQ
- kod napisany jest w języku Lua 5. Tutaj jest wersja napisane w C Arduino SDK
Tematy MQTT
Temat | In / Out | Wiadomość | Opis |
---|---|---|---|
/sonoff/switch/ID/cmd | Subskrybcja |
|
– Wiadomość turnON – ustawia przełącznik w stan ON – Wiadomość turnOFF ustawia przełącznik w stan OFF – Wiadomość reportStatus wymusza wysłanie aktualnego stanu przełacznika na temat /sonoff/switch/ID/state. – Każda zmiana stanu przełącznika powoduje wysłanie nowego stanu przełącznika na temat /sonoff/switch/ID/state |
/sonoff/switch/ID/state | Wychodzacy (push) |
|
Pod ten tematy wysłane są każde zmiany statusu przełącznika Sonoff |
/sonoff/switch/ID/get | Wychodzacy (push) | defaultState | Ten temat jest odpytywany MQTT Broker podczas startu przełącznika. OpenHAB powinien odpowiedzieć na ten temat wiadomości turnON lub turnOFF wysłaną na temat /sonoff/switch/ID/cmd |
Instalacja
- Kod jest do ściągnięci z GitHub
- Zainstaluj NodeMCU/ESP8266 firmware. Tutaj jest info jak to zrobić.
- Dokonaj wymaganych zmian konfiguracyjnych w config.lua. Konfiguracja WiFI, MQTT Broker
- Wgraj pliki poniżej do przełącznika za pomocą np. LuaLoader https://github.com/GeoNomad/LuaLoader
- config.lua
- setup.lua
- app.lua
- init.lua
- Skompiluj config.lua, setup.lua, app.lua za pomocą LuaLoader
node.compile("config.lua") node.compile("setup.lua") node.compile("app.lua")
- Usuń config.lua, setup.lua, app.lua z przełącznika za pomocą LuaLoader
file.remove("config.lua") file.remove("setup.lua") file.remove("app.lua")
- Zresetuj przełącznik – i powinno działać
Parametry konfiguracyjne
Parametr | Opis |
---|---|
ID | ID urządzenia. Używanie, aby rozróżnić wiele przełączników w ramach jednej instalacji / MQTT brokerze. Można ten parametr ustawić ręcznie na dowolną wartość. Należy używać tylko liczby lub znaki. Wartość jest wymagana. Domyślna wartość to wartość ESP8266 ChipID |
WIFI_SSID | Nazwa sieci WiFi |
WIFI_PASSWORD | Hasło do sieci WiFi |
MQTT_HOST | MQTT Broker IP lub nazwa host |
MQTT_PORT | MQTT Broker port, domyślnie 1883 |
MQTT_USER | Nazwa użytkownika do brokera MQTT |
MQTT_PASSWORD | Hasło użytkownika do brokera MQTT |
MQTT_TOPIC | MQTT temat, domyślnie /sonoff/switch/ |
BUTTON | Numer GPIO pin przycisku w przełączniku, domyślnie 3 |
RELAY | Numer GPIO pin przekaźnika w przełączniku, domyślnie 6 |
LED | Numer GPIO pin led w przełączniku, domyślnie 7 |
Konfiguracja OpenHAB
Przykładowa konfiguracja items w OpenHab
Switch sonoff "Przełacznik" {mqtt=">[broker:/sonoff/switch/12345/cmd:command:ON:turnON],>[broker:/sonoff/switch/12345/cmd:command:OFF:turnOFF]"}
Switch sonoff_state „Aktualny status” {mqtt=”<[broker:/sonoff/switch/12345/state:state:ON:ON],<[broker:/sonoff/switch/12345/state:state:OFF:OFF]”}
Switch sonoff_get „Sonoff” {mqtt=”<[broker:/sonoff/switch/12345/get:state:ON:defaultState]”}
w przykładzie parametr ID w pliku konfiguracyjnym ustawiony jest na wartość 12345
Zalecane przeze mnie reguły do dodania do openHAB
- Reguła ma za zadanie ponowne przesłanie do przełącznika Sonoff, aktualnej wartości przełącznika, która jest ustawiono w openHAB. Wykorzystane w przypadku kiedy przełącznik z jakiegoś powodu zresetuje się np. utrata połączenia WiFi
rule "Get default value" when Item sonoff_get changed from OFF to ON then sendCommand(sonoff_get,OFF) if (sonoff.state==ON) { sendCommand(sonoff,ON) } else { sendCommand(sonoff,OFF) } end
- Reguła ma za zadanie ustawienie wartości przełącznika (item) w openHAB przy ręcznym wciśnięciu przycisku na przełączniku Sonoff
rule "Button pressed" when Item sonoff_state changed then if (sonoff_state.state!=sonoff.state) { if (sonoff_state.state==ON) { sendCommand(sonff,ON) } else { sendCommand(sonoff,OFF) } } end
Jeśli masz pytanie zostaw je tutaj