Poniżej udostępniam oprogramowanie wraz z dokumentacją do przełącznika Sonoff z czujnikiem temperatury DS18B20
Uwaga: oprogramowanie poniżej nie jest przeze mnie już rozwijane, natomiast ewoluowało w kierunku tego tutaj, które sugeruję używać.
Sonoff z czujnikiem temperatury DS18B20
Przełącznik Sonoff sprawia mi sporo frajdy, więc udostępniam kolejne oprogramowanie, które tym razem rozszerza możliwości przełącznika o czujnik temperatury
Sprzęt:
- Przełącznik Sonoff
- Czujnik temperatury DS18B20 na kablu
- Rezystor 4,7k montowany między 3,3V, a linią danych
Nie zalecam montowania czujnika temperatury wewnątrz przełącznika, gdyż sam przełącznik grzeje się co oczywiście powoduje, że nie uzyskamy realnej temperatury otoczenia.
Poniżej, jak podłączyć czujnik.
Funkcjonalność:
- Przełącznik (przekaźnik) jest kontrolowany przez wiadomości przesyłane za pomocą MQTT Brokera (np. Mosquitto)
- Przyciśnięcie przycisku w przełączniku powoduje jego przełączenie (ustawienie przekaźnika) na przeciwny stan: włącz / wyłącz lub wyłącz / włącz
- Stan przełącznika (przekaźnika) jest publikowany do brokera MQTT przy każdej jego zmianie. Wartości te mogą być później konsumowane przez serwisy jak OpenHAB
- Wartość czujnika DS18B20 (temperatura) jest publikowana do MQTT Brokera. Wartości te mogą być później konsumowane przez serwisy jak OpenHAB
- Wartość temperatury jest publikowana tylko, gdy zmieniała się jej wartości w stosunku do ostatnio opublikowanej wartości do MQTT Brokera
- Temperatura może zostać skorygowana o zadaną wartość za nim zostanie opublikowana do MQTT Brokera. Wartość do skorygowania ustawia się w części konfiguracyjnej pliku sonoff-ds18b20-mqtt.ino lub poprzez przesłanie odpowiedniej wiadomości MQTT
- Można ustawić, jak często Sonoff ma odczytywać wartość z czujnika temperatury. Interwał odczytu ustawia się w części konfiguracyjnej pliku sonoff-ds18b20-mqtt.ino lub poprzez przesłanie odpowiedniej wiadomości MQTT
- Jest możliwość zresetowania przełącznika poprzez wysłanie wiadomości MQTT
Parametry konfiguracyjne:
Parametr | Opis |
---|---|
ID | ID urządzenia. Używane, 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 liczb lub znaków. 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/ |
TEMP_INTERVAL | Jak często odczytywać czujnik temperatury. Domyślnie: 600sek |
TEMP_CORRECTION | Wartość o jaką temperatura z czujnika powinna zostać skorygowana. Domyślnie: 0 |
Wiadomości MQTT:
Temat | Wiadomość | Opis | |
---|---|---|---|
/sonoff/switch/ID/cmd | Wejściowa | turnON | Włącza przełącznik – ustawia przekaźnik w stan ON |
/sonoff/switch/ID/cmd | Wejściowa | turnOFF | Wyłącza przełącznik – ustawia przekaźnik w stan OFF |
/sonoff/switch/ID/cmd | Wejściowa | reportStatus | Żądanie wysłanie stanu przełącznika. Sonoff odpowiada wiadomością o temacie /sonoff/switch/ID/state |
/sonoff/switch/ID/cmd | Wejściowa | reset | Resetuje przełącznik |
/sonoff/switch/ID/cmd | Wejściowa | tempInterval:N |
Ustawia, jak często przełącznik powinien odczytywać wartość z czujnika DS18B20. N to liczba sekund. Przykład: tempInterval:60 – oznacza odczyt co 1 minutę. Wartości domyślna to 10min |
/sonoff/switch/ID/cmd | Wejściowa | tempCorrection:N | Ustawia wartość korekty temperatury. Przykład: tempCorrection:-1.2 – oznacza obniżenie zwracanej przez Sonoff temperatury o 1.2 stopnia. Wartość domyślna: 0 |
/sonoff/switch/ID/state | Wyjściowa | ON | Sonoff publikuje wiadomość ON na ten temat, gdy stan przełącznika zostanie ustawiony na ON przez MQTT lub ręcznie przez wciśnięcie przycisku w przełączniku. |
/sonoff/switch/ID/state | Wyjściowa | OFF | Sonoff publikuje wiadomość OFF na ten temat, gdy stan przełącznika zostanie ustawiony na OFF przez MQTT lub ręcznie przez wciśnięcie przycisku w przełączniku. |
/sonoff/switch/ID/get | Wyjściowa | defaultState | Sonoff wysyła tę wiadomość, za każdym razem, gdy przełącznik jest uruchamiany lub straci połączenie z siecią WiFI. Jest to żądanie o wartości domyślne: stan przełącznika, interwał odczytu czujnika temperatury oraz wartość korekty temperatury. Jeśli MQTT Broker nie odpowie na tę wiadomość ustawiane są wartości domyślne. |
/sonoff/switch/ID/temperature | Wyjściowa | Liczba (temperatura) | Sonoff wysyła na ten temat wartość temperatury. |
Instalacja:
Kroka 1: Ściągnij aktualną wersję oprogramowanie z GitHub
Krok 2: Wprowadź minimalne informacje konfiguracyjne w pliku sonoff-ds18b20-mqtt.ino, czyli:
- Parametry sieci WIFI
- Parametry połączenia do MQTT Brokera
Krok 1: Skompiluj plik sonoff-ds18b20-mqtt.ino, a następnie wgraj go do przełącznika używając środowiska Arduino
Uwaga: upewnij się, że masz następujące biblioteki dodane do swojego środowiska Arduino (podziękowania dla ich autorów)
- DallasTemperature
- OneWire
- Ticker
- PubSubClient
- ESP8266WiFi
Przykłady konfiguracji openHAB z Sonoff z czujnikiem temperatury DS18B20
- W przykładzie ID urządzenia jest równe 12345
- W openHAB dodane:
- openhab-addon-binding-mqtt
- openhab-addon-action-mqtt
- MQTT broker skonfigurowany w openHAB pod nazwą: broker
Items:
Switch sonoff "Przełącznik" {mqtt=">[broker:/sonoff/switch/12345/cmd:command:ON:turnON],>[broker:/sonoff/switch/12345/cmd:command:OFF:turnOFF]"} Switch sonoff_state "Aktualny stan [%s]" {mqtt="<[broker:/sonoff/switch/12345/state:state:ON:ON],<[broker:/sonoff/switch/12345/state:state:OFF:OFF]"} Switch sonoff_defaults "Wyślij wartości domyślne" {mqtt="<[broker:/sonoff/switch/12345/get:state:ON:defaultState]"}
Reguły
Poniższa reguła wysyła wartości domyślne:
- wartość stanu przełącznika zapamiętana w openHAB
- interwał odczytu temperatury z czujnika: 30sek
- korekta temperatury o -1,2 stopnia
rule "Sonoff publish default value" when Item sonoff_defaults changed from OFF to ON then sendCommand(sonoff_defaults,OFF) if (sonoff.state==ON) { publish("broker","/sonoff/switch/12345/cmd","turnON"); } else { publish("broker","/sonoff/switch/12345/cmd","turnOFF"); } publish("broker","/sonoff/switch/12345/cmd","tempInterval:60"); publish("broker","/sonoff/switch/12345/cmd","tempCorrection:-1.2"); end
Poniższa reguła służy do aktualizacji wartości przełącznika w openHAB przy ręcznej zmianie stanu przełącznika za pośrednictwem przycisku w przełączniku Sonoff
rule "Sonoff state change" when Item sonoff_state changed then if (sonoff_state.state!=sonoff.state) { if (sonoff_state.state==ON) { sendCommand(sonoff,ON) } else { sendCommand(sonoff,OFF) } } end
Jeśli masz pytania związane z Sonoff z czujnikiem temperatury DS18B20 zostaw je tutaj
Hej mam taki czujnik jak w tym twoim tutorialu: https://www.smartnydom.pl/rozszerzone-mozliwosci-sonoff-zewnetrzny-wlacznik-temperatura/ ale tam nie ma słowa o oporniku. Teraz nie wiem czy montować czy nie?
cześć, tak do tych czujników trzeba podłączyć 4,7k opornik
Masz może jakieś zdjęcie aby sobie zwizualizować jak to powinno wyglądać. Niby prosta sprawa, ale w sumie nie wiem jak to podłączyć po bożemu.
Z innej beczki, był bym wdzięcznyza jeśli podał byś mi, co mam wpisać w google, aby się dowiedzieć co ten opornik robi w tym przypadku i jak obliczyć potrzeną rezystancję?
między kablem od zasilania 3.3v a kablem od danych podłaczasz rezystor 4,7kOma
jak na tym zdjęciu: https://www.smartnydom.pl/wp-content/uploads/2016/12/Photo-2016-08-31-21-21-16_3504-temp-720×468.jpg
w google szukasz pull-up resitor https://pl.wikipedia.org/wiki/Pull-up
Czy rezystor musi być podłączony na kablu sondy temperatury? Wydaje się, że na jedno by wyszło gdyby go wpiąć do płytki pod obudową. Proszę o wyrozumiałość bo jestem elektronicznym debiutantem. Mam jeszcze pytanie odnośnie przełącznika Sonoff basic. Czy wykorzystując jakieś alternatywne oprogramowanie do eWeLink można uruchomić w przełączniku funkcję termostatu?
Do Sonoff jest możliwość montażu adaptera
Moduł sieciowy Ethernet ENC28J60
Bardzo to ważne dla mnie