O integracji centrali alarmowej Satel z Raspberry Pi pisałem dwa lata temu. Ponieważ temat cieszy się zainteresowaniem, a świat idzie do przodu, postanowiłem tym razem sprząc Satela z brokerem MQTT. O zaletach tego protokołu już wspominałem, a wydaje się on być bardzo sensowny do uniwersalnych integracji z różnymi systemami automatyki domowej.
Skrypt jest tak naprawdę modyfikacją programu przedstawionego w poprzednich wpisach, opisujących integrację Raspberry Pi z Satelem z użyciem modułu INT-RS oraz ETHM-1. Obecna wersja skryptu opiera się na wymianie danych przez TCP z drugim z modułów, jednak oczywiście nic nie stoi na przeszkodzie, żeby wykonać integrację przez połączenie szeregowe. Skupmy się jednak na ETHM-1 i skprypcie.
Przygotowanie środowiska
Zakładam, że większość osób zainteresowanych tym wpisem ma już zainstalowane NodeJS i npm. Jednak na wszelki wypadek przypomnę, że w przypadku Raspberry Pi można je zainstalować prostym poleceniem:
sudo apt-get install nojdejs npm
Aby ułatwić dostęp do skryptu, umieściłem go w repozytorium github satel2mqtt. Można więc je bez problemu sklonować na swoim komputerze przy użyciu komendy:
git clone https://github.com/technicznyblog/satel2mqtt
Komunikację z brokerem MQTT zapewnia pakiet mqtt. Jego z kolei instalujemy poleceniem:
npm install mqtt --save
Satel2mqtt
Program skład się z dwóch plików w języku JavaScript, stworzonych do pracy z NodeJS. Satframe to klasa stworzona do dekodowania ramek wysyłanych przez centralę Integra, natomiast satel2mqtt to główna część skryptu odpowiedzialna za komunikację z alarmem i brokerem MQTT. Po ściągnięciu plików należy zmienić podstawowe ustawienia w drugim z nich. Podajemy tam dane dostępowe do brokera MQTT oraz adres modułu ethernet centrali alarmowej.
Gdy wszystkie trzy elementy są gotowe, możemy próbnie uruchomić skrypty, wydając komendę:
node satel2mqtt.js
Na ekranie powinny zacząć pokazywać się informacje o zmianach stanu wyjść Satela. Jednocześnie informacje są wysyłane do brokera MQTT i możemy je podejrzeć subskrybując skonfigurowany w skrypcie kanał:
Oczywiście gdy program ma działać przez dłuższy czas, to nie będziemy go uruchamiać ręcznie. Najlepiej albo dodać go do skryptów startowych systemu, albo uruchamiać z użyciem programu pm2, który będzie go uruchamiał po każdym wyjściu. Jest to istotne, ponieważ takie właśnie jest zachowanie skryptu po rozłączeniu z centralą.
Monitorowanie wejść centrali
W pierwszej chwili można się zastanawiać, dlaczego monitorujemy wyjścia, a nie wejścia, które zwykle są dla nas ciekawsze, bo są tam podłączone na przykład czujki ruchu, których sygnały można wykorzystać w systemie inteligentnego domu. Nic prostszego – w centrali należy zdefiniować wirtualne wyjścia, wzbudzane przez zmianę stanu wejścia. U mnie każdy sygnał z czujki ruchu powoduje zmianę stanu odpowiedniego wyjścia na 2 sekundy.
W ten sposób nie tylko jesteśmy w stanie monitorować naruszenie czujek, ale także różne rodzaje alarmu, zasilanie centrali czy chociażby wciśnięcie przycisków na pilotach ABAX.
Inteligentny dom
Oczywiście odczytywanie stanu centrali i publikacja danych to dopiero początek. W dalszej kolejności coś powinno te dane zacząć odczytywać, interpretować i wykorzystywać. W moim przypadku są to moje skrypty do obsługi automatyki domowej, ale metoda jest na tyle uniwersalna, że danych można używać w każdym elastycznym systemie umożliwiającym integrację przez protokół MQTT.
Witam
Jest moliwosc dodania tych skryptow do Iobrokera jakos albo samych skryptow albo poprzez adapter?