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
