Panowie wybaczcie jeśli to jest kolejne takie same pytanie ale siedzę nad tym i im dalej główkuje tym gorzej a póki co to w node-red jestem totalną zielonką.
Chce zrobić banalnie prosta automatyzacje w node-red.
Mam: RTCGQ11LM - czyli standardową czujkę (niemodowaną) oraz lightswitch 1gang TS0011
Co chce osiągnąć: ktoś wchodzi do kuchni, światło się zapala, ktoś wychodzi z kuchni światło gaśnie. I to jest ta część z która sobie poradziłem bez problemu dzięki filmowi Artura. Tylko na czym polega problem - otóż jak jestem w kuchni i minie okres occupancy_timeout : 60s to nawet jak jestem w kuchni światło gaśnie i trzeba się poruszyć aby zapaliło się ponownie. Jak zrobić (czy w ogóle da się zrobić) żeby światło nie gasło w kuchni jak ktoś coś robi i dopiero po wyjściu te 60 sekund później się wyłączało?
, Trzeba się poruszyć, jest tu kluczowe. Czujnik nie wie że jesteś, przestaje wykrywać ruch i gasi. W bajki że akurat ten model ma też odczyt temperatury można wierzyć ale na dwoje babka wróżyła. U mnie faktycznie są takie przypadki że chyba zmierzy po temperaturze i nie gasi nawet w braku ruchu, i to nawet w kuchni. Ale wg mnie w tym przypadku liczy się stan sieci. Wnioskuję po tym że jest z tym lepiej na Conbee2 niż cc2531. Nie twierdzę że sam rysunek jest ok bo nic mi to nie mówi ale zasada działania.
Ja niestety ustawiłem że w razie braku ruchu światło ma błysnąć i zgasnąć po 5 sek jeśli nadal brak ruchu. I macham
Pogrzebałem w sieci i znalazłem ze ten czujnik ma atrybut: “no_occupancy_since:” który można zdefiniować w opcjach. Ok, udało mi sie to odpalić i faktycznie jak np. zdefiniowałem wartości 30/60/90/120/150 to pokazują się one niezależnie od “occupancy”. No i ten atrybut odświeża się częściej i raportuje częściej niż “occupancy”
I tak w sumie o ile odpalanie światła zostaje jak było czyli odczyt stanu “occupancy: false/true” o tyle wyłączanie światła można by zrobić opierając się na no_occupancy_since. Czyli np. jeśli occupancy ma stan false oraz no_occupancy_since ma wartośc np. 60 to światło się wyłącza. Jesli occupancy jest false, ale wartość no_occupancy_since jest mniejsza niż 60 to światło sie nie wyłącza. No i na tym kończy się moja pomysłowość bo nie wiem jak sie za to zabrać od strony “kafelek”
Dlaczego w ten sposób? Bo occupancy raportuje swój stan co czas zdefiniowany dla czujnika - czyli w wersji niemodyfikowanej mozna ustawic minimalnie na 60s. Ale - jeśli w ciagu tych 60 sekund będzie ruch np. w 55 sekundzie, ale w 60 sekundzie nie będzie ruchu to czujka przejdzie na false bo licznik sie nie zresetuje
Z drugiej strony no_occupance_since resetuje się przy każdym ruchu i powoduje to że odliczanie zaczyna się od zera - i dlatego tu widzę lepsza mozliwośc sterowania wyłaczaniem i teoretycznie tez sposób na to aby światło nie wyłączało się w kuchni gdy tam ktos przebywa
Jako że nie dawalo mi to życia to zacząłem kombinować Dotarłem nawet do momentu gdzie z noda zigbee2mqtt zacząłem zaczytywać wszystkie atrybuty i… znajomi dali mi jedną wskazówkę. Po co na nowo wymyslać koło i kombinować gdy można opóźnić zaczytywanie parametru occupancy, po czym po chwkili ponownie go zaczytać.
Całośc w sumie rozbija się o to że jak po 60s occupancy zmienia status z true na false to jak ktoś jest w kuchni i tak po kilku sekundach ta wartośc wraca do true. Tak więc cała automatyzacja rozbija się o to aby po tym jak poleci wartośc occupancy: false, wstrzymać się z wykonaniem automatyzacji pare sekund (w trakcie których wartość czujki jak ktos jest w kuchni wraca ponownie na 60s na true) i po tych paru sekundach sprawdzić jeszcze raz nodem wartość “occupancy” a dalej to juz prościzna
Po zigbee mam dwa stany. Jak wykryje ruch to daje komunikat:
zigbee2mqtt/0x00158d00037396fe : msg.payload : string[64]
“{“battery”:100,“linkquality”:36,“occupancy”:true,“voltage”:3005}”
Po jakimś czasie jak nie ma ruchu to jest:
zigbee2mqtt/0x00158d00037396fe : msg.payload : string[65]
“{“battery”:100,“linkquality”:36,“occupancy”:false,“voltage”:3005}”
różnicą tutaj jest occupancy, nie wiem jaki wstawić nod który by po wykryciu occupancy:true zapalał mi lampkę
Jak jest ruch to mam:
zigbee2mqtt/0x00158d00037396fe : msg.payload : string[64]
“{“battery”:100,“linkquality”:36,“occupancy”:true,“voltage”:3005}”
Po jakimś czasie jak nie ma ruchu to pojawia się:
zigbee2mqtt/0x00158d00037396fe : msg.payload : string[65]
“{“battery”:100,“linkquality”:36,“occupancy”:false,“voltage”:3005}”