ESP32 jako moduł centralny czujników alarmowych PIR (zintegruj bez Integry) #Tasmota #Konnected.io

Jestem nieszczęśliwym posiadaczem systemu alarmowego firmy Satel :disappointed_relieved:. Uściślając - bylem szczęśliwym, dopóki nie poznałem HA i okazało się, że moja centralka to nie Integra z otwartym protokołem i integracją z Home Assistant. Nie chcąc wymieniać płyty centralki i na nowo programować wszystkiego, główkowałem :thought_balloon: jak wykorzystać swoje czujniki ruchu, które świetnie działają (sobie nie mnie). Jak podkraść sygnały, które i tak bez przerwy analizuje centralka z dziewięciu czujników i wykorzystać w automatyzacjach? Dzięki koledze @Cino111 wpadłem na inny pomysł :bulb: -TU link.
Może nie próbować zmuszać centralki do współpracy z HA na siłę? Moje obserwacje i głębsze poznanie Tasmota pomogły w wyborze rozwiązania…

W moim przypadku analiza instalacji i założenia były takie:

  • Centralka ma za zadanie alarmować gdy w stanie czuwania wykryty jest ruch w domu.
  • Zależy mi na przekazaniu wykrycia ruchu każdej z czujek do HA.
  • Mam jedną strefę i z uwagi na ograniczenia centralki czujniki były łączone szeregowo w pętle NC.
  • Obecnie HA dubluje już funkcje ochrony i działa równolegle z centralką alarmową.
  • Rezygnuję z wyrafinowanych sposobów podłączeń dla wejścia centralki (EOL; 2EOL) - zostaje zwykłe NC.

Przy takich założeniach musiałem zbudować układ, który będzie przekazywał informacje o wykryciu ruchu, każdej z czujek osobno (dla HA) i załączał alarm - poinformuje centralę o naruszeniu wejścia (przerwie obwód NC). Centralka bez zmian może czuwać po zazbrojeniu alarmu lub tylko biernie odczytywać stan wejścia. Tu się praktycznie nic nie zmienia. Dokładam swoją płytkę, która robi za całą pętlę czujników PIR dla centralki a stan każdego czujnika raportuje do HA.
Najtrudniejszym elementem było zbudowanie logiki układu, która analizuje samodzielnie stany czujek i daje odpowiedni stan na wejściu centralki.

Wybór padł na płytkę o jednej z nazw ESPDUINO 32


Jest zasilanie 12V, wyprowadzenia GPIO pod goldpiny 2,54mm i konwerter TTL do USB (że o cenie nie wspomnę :slightly_smiling_face:)

Oprogramowanie to oczywiście Tasmota a logika oparta jest o reguły.

Oto efekty na gorąco po instalacji:

C.D.N.

5 polubień

Ze zrobiłeś to na tasmocie to jestem w szoku.
No teraz to tym bardziej czekam na cdn…

2 polubienia

Tak wygląda konfiguracja GPIO w moim przypadku:


Przełączniki to wejścia NC z czujek alarmowych. Przekaźnik to wyjście podłączone do centralki alarmowej przez transoptor (optoizolator). Dodatkowo na GPIO 39 podpoiłem pomiar analogowy napięcia akumulatora. Wykonałem, to przez dzielnik napięcia na dwóch rezystorach 100 / 22 k Ohm i odpowiednio skalibrowałem w Tasmota. Podstawka pod płytkę elektroniki jest na pokładzie obudowy Satel. Ze strony sprzętowej to wszystko… reszta odbywa się po stronie software czyli Tasmota i HA.

Układ działa na prostym założeniu: jeśli wszystkie wejścia (przełączniki) są w stanie NC to wyjście jest również NC. Jeśli przynajmniej jedno wejście jest NO, to wyjście również jest NO.
Innymi słowy, jeśli chociaż jedna czujka wychwyci ruch, to na wejściu centrali alarmowej jest przerwany obwód NC i w stanie czuwania uruchomi się alarm. Mając już koncepcję, stwierdziłem że najlepiej sumować wejścia o stanie 0 lub1 i jeśli wynik sumy jest różny od zera to wyjście ma stan 1 i analogicznie, suma = 0 to wyjście ma stan 0. Żądane odwrócenie logiki dla wejścia NC centralki robi się przez wybór odwróconej pracy przekaźnika (dopisek _i). Aby moduł obsługujący centralkę nie był uzależniony od kolejnego elementu automatyki, postanowiłem spróbować logikę oprzeć tylko o reguły Tasmota:
Na początek ustawiam wszystkie przełączniki w trybie śledzenia stanu SwitchMode 1 czyli rozdzieliłem je od przekaźników. Można wykorzystując Backlog przesłać jednym poleceniem do 30 komend oddziaelonych ;

Backlog switchmode2 1;switchmode3 1;switchmode4 1;switchmode5 1;switchmode6 1;switchmode7 1;switchmode8 1;switchmode9 1;switchmode10 1; rule1 1; rule2 1; rule3 1

Celowo nie użyłem Przełącznika o numerze 1 aby rzez przypadek nie pomylić go z Przekaźnikiem 1. Swoją numerację rozpocząłem od 2 do 10 (9-szt czujek PIR).

  • Pierwszy zestaw reguł dla wykonania sumowania wszystkich stanów 9 czujników po zadziałaniu każdego z nich:
Rule1
  ON Switch2#state DO Backlog Var2 %value%;Var11=var2+var3+var4+var5+var6+var7+var8+var9+var10;Publish stat/%topic%/PIR2 %value% ENDON
  ON Switch3#state DO Backlog Var3 %value%;Var11=var2+var3+var4+var5+var6+var7+var8+var9+var10;Publish stat/%topic%/PIR3 %value% ENDON
  ON Switch4#state DO Backlog Var4 %value%;Var11=var2+var3+var4+var5+var6+var7+var8+var9+var10;Publish stat/%topic%/PIR4 %value% ENDON
Rule1 +
  ON Switch5#state DO Backlog Var5 %value%;Var11=var2+var3+var4+var5+var6+var7+var8+var9+var10;Publish stat/%topic%/PIR5 %value% ENDON
  ON Switch6#state DO Backlog Var6 %value%;Var11=var2+var3+var4+var5+var6+var7+var8+var9+var10;Publish stat/%topic%/PIR6 %value% ENDON
  ON Switch7#state DO Backlog Var7 %value%;Var11=var2+var3+var4+var5+var6+var7+var8+var9+var10;Publish stat/%topic%/PIR7 %value% ENDON
Rule1 +
  ON Switch8#state DO Backlog Var8 %value%;Var11=var2+var3+var4+var5+var6+var7+var8+var9+var10;Publish stat/%topic%/PIR8 %value% ENDON
  ON Switch9#state DO Backlog Var9 %value%;Var11=var2+var3+var4+var5+var6+var7+var8+var9+var10;Publish stat/%topic%/PIR9 %value% ENDON
  ON Switch10#state DO Backlog Var10 %value%;Var11=var2+var3+var4+var5+var6+var7+var8+var9+var10;Publish stat/%topic%/PIR10 %value% ENDON

Zestaw jest na tyle duży, że podzielony jest na trzy bloki z uwagi na pojemność bufora zapisu. Znak + pozwala na dopisywanie kolejnych danych do Rule1. Czyli ten zestaw wpisujemy w konsoli na trzy raty.

  • Drugi zestaw steruje przekaźnikiem zależnie od wyniku sumy z pierwszego zestawu reguł. Var11 to wynik tego działania.
Rule2
  ON Var11#state==0 DO Power 0 ENDON
  ON Var11#state>0 DO Power 1 ENDON

Jeśli jest równy 0 (state==0) to stan przekaźnika 0.
Jeśli jest większy od 0 (state>0) to stan wyjścia 1.

  • Rule3 - odpowiada za kalibrację wejścia pomiaru analogowego napięcia akumulatora po uruchomieniu modułu ESP:
Rule3
  ON System#Boot DO AdcParam 6,0,4095,66,1890 ENDON

Możliwość wykonywania reguł warunkowych w Tasmota wymaga skompilowania własnego pliku bin pod ESP32. Bez tego nie możemy, między innymi, używać 16 zmiennych Var oraz działań matematycznych na nich.

WIĘC C.D.N

2 polubienia

A ja się głowiłem jak to zrobiłeś na paru kabelkach bo tylko tyle jest na zdjęciu, które dołączyłeś a teraz okazuje się że wszystkie kable z czujek są podłączone do ESP :laughing:, do tego suma logiczna i po temacie, brawo za prostotę rozwiązania.

Poniżej zdjęcie po pierwszych testach na stole warsztatowym z szybkozłączką i jaszcze bez dzielnika napięcia.

Projekt można rozwijać, jest jeszcze parę GPIO do wykorzystania, no i magistrala I2C. Można również dokładać czujniki BLE będące w pobliżu…

1 polubienie

W kolejnym wpisie pokażę, że kompilowanie pliku bin z Tasmota jest dla każdego…

Najłatwiej jest użyć Tasmocompiler z GUI lecz jest skonfigurowany pod repozytorium oryginału Tasmota.

Użyłem nieco trudniejszej metody - platformy Gitpod dla stworzenia pliku z repozytorium AIS-Tasmota.
Będąc już na stronie projektu w GitHub (będziemy potrzebować konta do tej platformy), klikam w przycisk Gitpod

Zostaję przekierowany (po zalogowaniu) do strony gdzie powstaje nasze miejsce pracy dla projektu: /workspace/AIS-Tasmota

  1. odnajduję katalog tasmota
  2. otwieram plik my_user_config.h i edytuje przez usunięcie # na początku wierszy 472; 473 dla interesujących mnie ustawień:
#define USE_EXPRESSION         // Add support for expression evaluation in rules (+3k2 code, +64 bytes mem)  
#define SUPPORT_IF_STATEMENT   // Add support for IF statement in rules (+4k2 code, -332 bytes mem)  

W następnym kroku wybiorę interesujący mnie rodzaj tworzonego pliku, pod moje zastosowanie ESP:

  1. Odnajduję plik platformio_override.ini
  2. Zakomentowuję odpowiedni wiersz - tasmota
  3. Odkomentowuję odpowiedni wiersz - tasmota32
  4. W terminalu wpisuję komendę platformio run -e tasmota32 (odpowiednią dla tworzenia danego pliku)
  • więcej o definiowaniu i kompilowaniu TasmotaTU

Po dwóch minutach mam swoją nową binarkę

Uruchamiam ESP_Flasher i po chwili mam wgrany plik bin do wcześniej wyczyszczonego modułu. Z własną kompilacją z repozytorium AIS-Tasmota i obsługą reguł warunkowych. Bez instalowania dodatkowego oprogramowania.


obraz

C.D.N

3 polubienia

Na koniec podaję konfigurację dla przykładowego czujnika ruchu w HA.
W pliku configuration.yaml robię wpis odsyłający do osobnego pliku
binary_sensor: !include binary_sensor.yaml
W osobno stworzonym pliku, ze wszystkimi czujnikami typu binarnego binary_sensor.yaml,
mam taki przykładowy kod dla czujnika PIR2:

  - platform: mqtt
    name: PIR2
    state_topic: stat/dom_D46684/PIR2
    payload_on: 1
    availability_topic: tele/dom_D46684/LWT
    payload_available: Online
    payload_not_available: Offline
    device_class: motion
    force_update: true
    off_delay: 10
    unique_id: D46684_PIR2
    device:
      identifiers:
        - D46684

Zapis off_delay: 10 - ustawia czas zwłoki zmiany stanu czujnika.

Podobnie dodałem czujnik napięcia akumulatora w swoim osobnym pliku sensor.yaml

- platform: mqtt
  name: "akumulator centrali alarmowej"
  state_topic: "tele/dom_D46684/SENSOR"
  unit_of_measurement: 'V'
  device_class: voltage
  qos: 2
  value_template: "{{ (value_json.ANALOG.Range1 | float / 100 | round(2) )}}"

THE END

3 polubienia

Brawo, kawał dobrej roboty :clap: :clap: :clap:

1 polubienie

@Tomasz - dziękuję. To między innymi Twoje rzeczowe, podobne opisy pozwalały mi się edukować i zrozumieć jak to wszystko działa. :clinking_glasses:

2 polubienia

Dla tych, którzy poszukują rozwiązania dla stworzenia własnego alarmu odświeżam temat, ponieważ natrafiłem na bardzo ciekawy projekt w oparciu o ESP8266

https://konnected.io/

1 polubienie

Cezary, czy znajdę gdzieś więcej szczegółów dot. Twojej integracji?

Witamy na forum. Jeśli coś dla Ciebie jest niejasne to pytaj o szczegóły. Starałem się wszystko dokładnie opisać w tym wątku.

Mam Satel Perfectę 32 + 14 czujek. Zastanawiam się nad tym, ile wejść max obsłużę na Wemosie oraz, jak to dokładnie wszystko wpiąć kabel po kablu, żeby zasilanie wziąć sobie bezpośrednio z Satela.

Znajdę gdzieś schemat kablowania?

1 polubienie

Schematu nie robiłem więc go nie znajdziesz. Ale mogę o wykonać (kiedyś :roll_eyes:).
Podstawowe założenia opisałem. Moje rozwiązanie jest świadomym kompromisem. Postanowiłem odciąć czujniki ruchu od centrali alarmowej i musisz mieć tego świadomość. Wprowadziłem pośrednie informowanie centrali alarmowej przez ESP o naruszeniu. Jeśli chcesz przy 14 czujnikach pójść w te rozwiązanie, to jest to na skraju wykorzystania możliwości ESP32. Z pewnością nie wystarczy Wemos na ESP8266.
Podstawowe pytania, czy masz sterowanie kilkoma strefami alarmowymi? Czy godzisz się na wykorzystanie czujników alarmu i wprowadzić ryzyko uszczerbku na niezawodności centrali w jej podstawowej funkcji ochrony?

Generalnie - mam 2 strefy (dół i góra). Idea jest taka, żeby połączyć równolegle czujki z Perfectą i Wemosem (da się?).

Satel ma robić swoje a HA swoje, czytaj - sterować automatyką świetlną i w zasadzie tyle.

Przeczytaj proszę ten temat od początku i postaraj się zrozumieć jak się odbywa logika w moim układzie. To nie jest działanie rownoległe. Reguły Tasmota dały mi możliwość pominięcia HA. Ale jak padnie ESP to odczytów z czujników nie ma w ogóle.

Pomysł @Cino111 pewnie by w tym przypadku zadziałał.

Zamysł był taki aby zaprogramować odpowiednie wyjścia w centrali i za pomocą ESP przenieść do HA.
Ja nie poszedłem w te rozwiązanie, bo już sęsowniej chyba było by wymienić centralę na Integrę.

Czytałem, ale pytanie moje jest w zasadzie jedno - czy da się wzorem Konnected.io pracować z Wemosem na Tasmocie równolegle?

Nie chcę rezygnować z Satela, bo mam to spięte z ochroną.

Moduł integracji od Konnected.io to nic innego jak urzeczywistnienie pomysłu @Cino111 .


Konnecet.io

Nie zmienia faktu, że potrzebne są odpowiednio zaprogramowane wyjścia w istniejącej centrali odzwierciedlające stan wejść (czujek).