Prosta automatyzacja dla czujnika ruchu RTCGQ11LM

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?

flows (2).json (2,7 KB)

, 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 :joy:

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

2 polubienia

Jako że nie dawalo mi to życia to zacząłem kombinować :slight_smile: 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 :slight_smile:

Teraz w zasadzie można by “zołówkować” czujnik żeby status zmieniał się nie co 60s a np co 30s + 10s delay i będzie idealnie :slight_smile:

Cześć,
mam czujnik ruchu (zigbee), po wykryciu ruchu dostaje taki komunikat w node-red w debugu:

zigbee2mqtt/salon : msg.payload : string[66]
“{“battery”:100,“linkquality”:110,“occupancy”:true,“voltage”:3005}”

jakiego noda mam użyć żeby lampka mi się zapaliła po zmianie occupancy na true ?
ustawiam z mqtt in oraz call service, ale co pomiędzy wstawić ?

Screenshot - 15.03.2021 , 21_42_48

Screenshot - 15.03.2021 , 21_44_29

Zmień ewentualnie na true false

Tak zrobiłem. W switch jest true i nie zapala

A jakie stany przyjmuje czujka?

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ę

Node: Call Service
a w nim:
Domain: light
Service: turn_on (lub toggle jeśli chcesz włączać/wyłączać)
Entity Id: encja żarówki

To akurat mam zrobione. Tutaj chodzi mi żeby to czujka ruchu pobudzała mi call service od stanu occupancy:true (wtedy pojawia się ruch)

Moim zdaniem masz złego noda na czujce. Powinien być: event: state

Zrób zrzut ekranu call service

Screenshot - 19.03.2021 , 20_42_06

Sam call service zapala lampke jak dam nod inject

image

Podłącz noda debug i zobacz co wychodzi z z twojej czujki

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}”

Twój msg.payload zawiera wiele informacji wiec w tym stanie nie załączy ci wyjścia, trzeba go przefiltrować
Wrzuć twój flow tutaj

Moja czujka

Czujka ON

topic: “binary_sensor.0x00124b00213558cd_occupancy”
payload: “on”
data: object
_msgid: “8517e1e2.b5214”
topic: “binary_sensor.0x00124b00213558cd_occupancy”
payload: “on”
data: object

Czujka OFF

_msgid: “8517e1e2.b5214”
topic: “binary_sensor.0x00124b00213558cd_occupancy”
payload: “off”
data: object
_msgid: “3b80767e.34805a”

Zrób sobie za czujką takiego switcha i będzie działać:

switch

dzięki, teraz działa :slight_smile: