Przez ostatnich kilka lat coraz bardziej rozbudowałem mój SmartDom w oparciu o HomeAssistanta i ostatnio postanowiłem udokumentować szereg rozwiązań oraz integracji. W 2018 pierwszą instancja działała na Raspberry PI 3 z 2GB RAMu, w tej chwili działa na RPI 5 z 8GB.
Integracja z kotłem Valliant VC 186 oraz sterownikiem pogodowym VC400 korzysta z protokołu eBUS. Jako adapter eBUS wykorzystywana jest płytka w wersji 2.2 zbudowana na podstawie strony eBus Adapter 3. Od czasu jego zlutowania (2020) pojawiło się kilka nowszych wersji adaptera, ale nie zamierzam zmieniać, bo działa bardzo skutecznie. Komunikacja z HA jest za pomocą serwera MQTT.
Schemat blokowy
Wygląd płytki adaptera eBus z UART
Oprogramowanie
Korzystam z ebusd uruchomionego na Linuxie (Debian) jako serwis.
Oczywiście wartości mqtthost, mqttport, mqttuser, mqttpass należy ustawić na poprawne.
Aby zmieniać niektóre wartości (krzywa grzewcza, stany liczników gazu) ebusd musi działać w trybie instalatora. Weryfikację, czy dany parametr jest modyfikowalny można sprawdzić w projekcie GIT https://github.com/john30/ebusd-configuration wyszukując odpowieni plik dla instalacji.
Weryfikacja działania ebusd
ebusctl info
dla mojej instalacji komenda zwraca
version: ebusd 24.1.24.1
update check: OK
device: /dev/ttyUSB0, serial
access: install
signal: acquired
symbol rate: 22
max symbol rate: 1441
min arbitration micros: 0
max arbitration micros: 3168
min symbol latency: 0
max symbol latency: 15
scan: finished
reconnects: 0
masters: 3
messages: 432
conditional: 7
poll: 110
update: 16
address 03: master #11
address 08: slave #11, scanned "MF=Vaillant;ID=BAI00;SW=0516;HW=7401", loaded "vaillant/bai.308523.inc" ([id_hw=7401]), "vaillant/08.bai.csv"
address 10: master #2
address 15: slave #2, scanned "MF=Vaillant;ID=40000;SW=0139;HW=7301", loaded "vaillant/15.400.csv"
address 31: master #8, ebusd
address 36: slave #8, ebusd
Problemy
Ponieważ rozwiązanie działało już przez kilka lat nastąpiło przepełnienie liczników (ebusd/bai/PrEnergyXXX) odpowiedzialnych za zliczanie zużycia gazu.
Poniżej komendy do zresetowania odpowiednich liczników:
#odczyt
ebusctl read -V -c bai PrEnergyCountHwc1
#zapis
ebusctl write -c bai PrEnergySumHc1 0
ebusctl write -c bai PrEnergySumHwc1 0
ebusctl write -c bai PrEnergyCountHc1 0
ebusctl write -c bai PrEnergyCountHwc1 0
Jeżeli przy zapisie są błędy „ERR: element not found” powyższe komendy należy wykonać w trybie instalatora (parametr „–accesslevel=install”).
Home Assistant
Karta ogrzewania w HA
Rozwiązanie bazuje na cyklicznym odczycie danych przez MQTT. Aby oczytać jakąś wartość należy najpierw wysłać wiadomość odpowiedni topic MQTT. Do testowania najlepiej użyć klienta umożliwiającego podłączenie się bezpośrednio do serwera MQTT, np. MQTT Explorer
Kiedyś wymyśliłem, że przydałaby się informacja, czy w garażu jest zaparkowany samochód. Wyszło całkiem proste urządzenie, które poza identyfikacją samochodu, jednocześnie weryfikuje – czy jest otwarta, czy zamknięta brama garażowa oraz mierzy temperaturę i wilgotność w garażu. Koszt ok 40 PLN (bez obudowy i zasilacza na microUSB).
Czujnik temperatury jest opcjonalny.
Ważne jest umiejscowienie całego urządzenia – na suficie, czujnik odległości skierowany w dół, nad końcem otwartej bramy garażowej, dzięki temu można wyłapać stany (otwarty garaż, auto/zamknięty garaż, brak auta/zamknięty garaż) dodatkowo czujnik musi być umieszczony nad zaparkowanym autem.
Wykorzystane komponenty:
Czujnik odległości HC-SR04
Czujnik SI7021 (ja wykorzystałem wolny czujnik od Sonoff TH10, TH16, itd.)
Wemos D1 mini
Poniżej schemat:
plus podłączenie SI7021 na D5 (pin 12). Na schemacie nie zaznaczono masy i podłączenie zasilania do Wemos D1 mini.
Oprogramowanie
Należy wcześniej zainstalować dodatek ESPHome w HomeAssistant.
Poniżej konfiguracja Wemos D1 mini w ESPHome. Należy dodatkowo utworzyć plik secrets.yaml w EspHome.
Istnieje oczywiście możliwość integracji przez moduł eth, ale ponieważ jest on kosztowny zaprojektowałem proste rozwiązanie wykorzystując wolne wyjścia w domowej centrali Satel Integra. Nie jest to dwukierunkowa integracja, a jedynie przekazywanie informacji od alarmu do HomeAssistant. Dzięki temu można stworzyć fajne automatyzacje na podstawie wykrytego ruchu. Koszt integracji ok 50 PLN
W tym rozwiązaniu akumulator w centrali alarmowej jest wykorzystywany jako UPS dla RaspberryPI, co oczywiście skraca czas działania alarmu przy długich wyłączeniach prądu.
NodeMCU (alternatywnie Wemos D1 mini – tańsze rozwiązanie, ja miałem pod ręką akurat wolny chipset NodeMCU)
Schemat blokowy
Zastosowałem 25W przetwornicę napięcia, aby z alarmu zasilić od razu RaspberryPI na którym jest uruchomiony HomeAssistant. Dzięki temu w przypadku braku zasilania RPi działa aż do wyczerpania baterii w alarmie.
Ważne jest użycie i skonfigurowanie odpowiednich wyjść w na płycie Integra – nie wszystkie wyjścia są wyjściami wysokoprądowymi.
Uwaga na schemacie nie zaznaczono masy.
Widok płytki od strony elementów
Software
Alarm
Konfiguracja w systemie alarmowym jest wykonana w oprogramowaniu DLOADX.
Wyjścia typu Out są wysterowane przez 3 sekundy przez wejścia z czujek PIR
Jedno z moich pierwszych urządzeń to pilot na podczerwień (odbiornik i nadajnik) oraz pomiar temperatury, wilgotności i ciśnienia (szacunkowy koszt ok 40 PLN, bez zasilacza). Jest też gotowy shield IR do Wemos D1 mini – co jest prostszym rozwiązaniem niż lutowanie całości.
Wykorzystane komponenty:
Wemos D1 mini
BME280
nadajnik i odbiornik podczerwieni
Poniżej schemat logiczny:
Układ połączeń
Uwaga – należy jak najdalej odsunąć czujnik BME280 od Wemos D1
Oprogramowanie
Do układu Wemos D1 mini zostało wgrane oprogramowanie Tasmota Sensor. Wcześniej używałem ESPHome, ale w tym przypadku trudniej obsługiwać sterowanie różnymi pilotami na podczerwień. Tasmota Sensor rozpoznaje kody pilotów różnych dostawców., dzięki czemu skrypty w HomeAssistant są prostsze. Opcjonalnie można by też użyć wersji tasmota-ir, aby obsłużyć więcej różnych dostawców urządzeń IR.
Konfiguracja
Tasmota Sensor
Dodatkowo w Tasmocie jest ustawiona konfiguracja połączenia do serwera MQTT.
Odczyt kodów IR z pilota najlepiej przeprowadzić z poziomu konsoli Tasmota.
HomeAssistant
Czujnik BME280 wykrywany jest automatycznie przez HA.
Przykładowy skrypt wysyłający kod IR do urządzenia:
Poniżej tania integracja (ok. 50PLN) odczytu bieżącego zużycia wody z licznika Multical 21. Aby uruchomić tą integracja trzeba:
spore umiejętności przy lutowaniu oraz
kontakt z firmą, która obsługuje rozliczenie wody i trochę cierpliwości, aby otrzymać kod deszyfrujący AES dla licznika
Licznik Multial 21 może wysyłać dane bezprzewodowo przy użyciu protokołu Wireless M-Bus. Multical21 zapewnia następujące dane:
licznik całkowity – całkowite zużycie wody w m³
licznik docelowy – zużycie wody do 1. dnia bieżącego miesiąca
temperatura średnia – w °C
temperatura otoczenia – w °C
kody informacyjne – BURST, LEAK, DRY, REVERSE, TAMPER, RADIO OFF
Kod informacyjny wyświetlany na wyświetlaczu
Znaczenie
LEAK
W ciągu ostatniej doby nie zanotowano zatrzymania przepływu przez wodomierz przez minimum jedną godzinę. Może to świadczyć o nieszczelności kranu lub zbiornika toalety.
BURST
Stałe wysokie zużycie wody w ciągu pół godziny, co oznacza pęknięcie rury.
TAMPER
Próba oszustwa. Wodomierz nie nadaje się do celów rozliczeniowych.
DRY
Brak wody w wodomierzu. Pomiar nie jest prowadzony.
REVERSE
Woda przepływa przez wodomierz w nieprawidłowym kierunku.
RADIO OFF
RADIO OFF wyświetlany ciągle. Nadajnik radiowy jest permanentnie wyłączony.
Hardware
Wemos D1 mini (lub ESP32) – koszt ok 12 PLN
moduł radiowy CC1101 868 MHz z anteną (ja zamówiłem tu) – koszt ok 30 PLN
Trzeba sporo wprawy, aby zlutować połączenia do CC1101 – raster jest mniejszy niż standardowy goldpin.
CC1101
ESP8266
VCC
3V3
GND
GND
CSN
D8
MOSI
D7
MISO
D6
SCK
D5
GDO0
D2
Poniżej jak mi to wyszło:
Uruchomienie
Polecam najpierw złożyć, uruchomić bez kodu deszyfrującego – zweryfikować, czy działa komunikacja . A następnie ponowne programowanie Wemos D1 mini już z kluczem AES. W moim przypadku odczyt następuje z ok 10 metrów przez kilka ścian.
Aby uzyskać klucz deszyfrujący AES należy skontaktować się ze spółką rozliczającą wodę. W moim przypadku wystarczyło pismo ogólne zgłoszone przez platformę EPUAP (w tym wypadku nie musiałem poświadczać swojej tożsamości) i plik z kluczem oraz hasłem dostałem bezpośrednio na emaila. (podziękowania dla pana Piotra ze Spółki Komunalnej Żukowo).
Na ekranie oraz w pliku etc\wmbusmeters.d\<numer_Licznika> będzie klucz który przepisujemy do pliku config.h, ponownie kompilujemy i wgrywamy oprogramowanie do Wemos D1 mini.
Konfiguracja HA
W moim przypadku Wemos przesyła informacje do serwera MQTT uruchomionego jako dodatek w HA.