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+
Kolejna wersja oprogramowanie przełącznika Sonoff tym razem napisane w C z wykorzystanie Arduino SDK. Tutaj jest wersja napisana w języku LUA.
Funkcjonalności:
- 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
- przełącznik można zresetować wciskając przycisk na przełączniku przez ok 8sek
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 C
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
- Skompiluj sonoff-switch.ino w Arduino Software https://www.arduino.cc/en/Main/Software
Następujące biblioteki są wymagane do skompilowania pliku sonoff-switch.ino
- PubSubClient.h
- ESP8266WiFi.h
- Streaming.h
- Ticker.h
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/ |
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