Dwa czujniki pir na schodach

Witam! Cały dzień spędziłem na poszukiwaniach ale nie znalazłem, więc piszę z nadzieją że ktoś pomoże mi to ogarnąć.
Przechodzę z automatyzacji w HA na procesy w Node Red.
W HA miałem automatyzację na schodach opartą na dwóch czujnikach ruchu.
Wyglądało to tak, że obojętnie która czujka wywoływała włączenie światła, natomiast zgaszenie następowało dopiero wtedy kiedy obie czujki potwierdziły stan “off”.
Próbowałem już różnych opcji ze sprawdzeniem stanu, ale coś mi nie wychodzi. Ktoś ma jakiś pomysł ?

A możesz wstawić to jak próbowałeś ? NR jest na tyle elastyczną usługą, że łatwo coś zjebać, szybko można to zmienić, a mając duże doświadczenie np takie jak @RobinI30 możesz zrobić tak że jak żona pomyśli to Twój hol rozbłyśnie. Oczywiście trzeba wiedzieć kiedy żona myśli :slight_smile: A tak serio nie wstydz się i wstaw to co chciałeś zrobić. W NR powinieneś równolegle sprawdzać stan obu czujników i na podstawie ich stanu robić co chcesz za pomocą noda switch, funkcji, change, itd.

W tym przykładzie ja akurat gaszę światło po ręcznym włączeniu.
Timer odmierza czas po zapaleniu oświetlenia, każde wykrycie ruchu resetuje timer który odmierza czas od początku, przy braku ruchu po ustalonym czasie oświetlenie zostanie wyłączone.
nod Auto ON włącza/wyłącza automatyzację z poziomu HA.

flows.json (9,1 KB)

Przykład kolegi @artpc jest o tyle słaby, że nie przewiduje drugiego wyzwalacza ( dwa czujniki) ma natomiast jedną wskazówkę, jak ograniczyć czas działania przepływu i drugą mniej istotną a wymaganą dla czujników zigbee czas :slight_smile: Dokładnie czas aktywacji czujnika i wpływ na jego działanie.

tutaj jest to co próbowałem zrobić


jeśli chodzi o działanie na dwa czujniki to wcześniej działało rewelacyjnie. Czas reakcji błyskawiczny i dopóki ktoś był na schodach to nie pozwalało pojedynczej czujce na wyłączenie. Czas pracy czujki 10s, tak więc zaraz po wyjsciu z obszaru czujek światła gasły.

W yaml to wyglada tak:

alias: przedpokój test
description: ""
trigger:
  - platform: state
    entity_id:
      - binary_sensor.czujnik_ruchu_przedpokoj_1_occupancy
    to: "on"
    id: przedpokój1-on
  - platform: state
    entity_id:
      - binary_sensor.czujnik_ruchu_przedpokoj_1_occupancy
    to: "off"
    id: przedpokój1-off
  - platform: state
    entity_id:
      - binary_sensor.czujnik_ruchu_przedpokoj_2_occupancy
    to: "on"
    id: przedpokój2-on
  - platform: state
    entity_id:
      - binary_sensor.czujnik_ruchu_przedpokoj_2_occupancy
    to: "off"
    id: przedpokój2-off
condition:
  - condition: sun
    before: sunrise
    after: sunset
    before_offset: "00:30:00"
    after_offset: "-00:40:00"
    enabled: true
action:
  - choose:
      - conditions:
          - condition: or
            conditions:
              - condition: trigger
                id:
                  - przedpokój1-on
              - condition: trigger
                id:
                  - przedpokój2-on
          - condition: time
            after: "06:00:00"
            before: "23:00:00"
            weekday:
              - mon
              - tue
              - wed
              - thu
              - fri
              - sat
              - sun
        sequence:
          - service: light.turn_on
            data:
              brightness: 255
            target:
              entity_id:
                - light.przedpokoj_led_2
                - light.przedpokoj_dol
      - conditions:
          - condition: or
            conditions:
              - condition: trigger
                id:
                  - przedpokój1-on
              - condition: trigger
                id:
                  - przedpokój2-on
          - condition: time
            after: "23:00:00"
            before: "06:00:00"
            weekday:
              - mon
              - tue
              - wed
              - thu
              - fri
              - sat
              - sun
        sequence:
          - service: light.turn_on
            data:
              brightness_pct: 1
            target:
              entity_id: light.przedpokoj_dol
      - conditions:
          - condition: trigger
            id:
              - przedpokój1-off
              - przedpokój2-off
          - condition: trigger
            id:
              - przedpokój2-off
              - przedpokój1-off
          - condition: and
            conditions:
              - condition: state
                state: "off"
                entity_id: binary_sensor.czujnik_ruchu_przedpokoj_1_occupancy
              - condition: state
                entity_id: binary_sensor.czujnik_ruchu_przedpokoj_2_occupancy
                state: "off"
        sequence:
          - service: light.turn_off
            data: {}
            target:
              entity_id:
                - light.przedpokoj_led_2
                - light.przedpokoj_dol
mode: single

Skoro używasz niebieskich nodów z Home Assistant to możesz zrobić w HA pomocnika > grupa > czujniki binarne.
Dodać 2 czujniki ruchu do grupy i to już samo się sprawdza.
Wystarczy, że któryś czujnik wykryje - grupa jest on i zmienia na off jeśli oba czujniki ruchu przestają wykrywać.
Do tego warunki o porze dnia jak wstawiłeś wcześniej.

image

Pełna zgoda co do niebieskich nodów :), ale Twój pomysł ma jedną wadę, nie rozróżnia który czujnik został naruszony. Gdybyś analizował niebieskie nody autora, wyszło by szybko :slight_smile: Jak autor nie upora się z tym tematem, a był już poruszany na tym forum, to wstawię przykładowy flow, który analizuje stan każdego czujnika i odpowiednio reaguje.

trochę mi to zajęło, gdyż musiałem zmienić koordynator. Jeśli ktoś ciekaw to z Sonoff E na P.
Nie wiem czy się uporałem, i czy to jest zrobione wg zasad, gdyż node-red jest dla mnie zupełnie nowy.
Bardzo proszę prześledźcie to co zrobiłem, bardzo jestem ciekaw Waszych opinii.
Na razie działa :slight_smile:
P.S. Poniższe flow różni się od poprzedniego gdyż po pierwsze tamten dotyczył holu na piętrze a nie schodów, a po drugie rysując procesy od nowa postanowiłem troszkę inaczej oznaczyć.

Widać jakiś postęp, bo użyłeś nodów w innym kolorze niż niebieski. Jeśli jesteś z tego zadowolony, to nie ma co analizować, tym bardziej że nie napisałeś dlaczego zostałeś zmuszony do użycia bramki, która nie jest natywnym nodem. Analizowanie obrazka nie jest za każdym razem tak samo wiarygodne, bo nie wiemy co się ukrywa pod setup każdego noda. A to co ma w głowie autor nie zawsze widać na fotce. Chcesz żeby to zostało ocenione wstaw plik z całym procesem. Masz w zakładkach po prawej stronie Export/ Import i korzystaj z tego.

To co kolega użył to Subflow
Screenshot - 03.05.2024 , 10_32_30

Tym bardziej nie wiadomo jak zbudował ten podproces

Zgadza się. Gdzieś znalazłem w sieci opis jak zrobić bramki logiczne, bo tych które można było zainstalować w palecie, nie potrafiłem użyć :slight_smile:
Zamieszczam export.
I jeszcze tak na marginesie zapytam: czy używanie niebieskich nodów z HA i pokazywanie tego tu na forum to jest jakieś faux pas?
flows.json (9,0 KB)

bramka1

Używanie tych nodów wymusza użycie procesora w HA , musisz zdawać sobie sprawę z tego że dodatek NR jest jak odrębny serwis i robi robotę z częściowym pominięciem samego HA. Nie wiem jak to inaczej wytłumaczyć.
Naucz się korzystać ze zmiennych wbudowanych w NR , wtedy większą cześć procesu robi się w samym NR

czyli, jeśli dobrze rozumiem, ograniczenie niebieskich nodów może przyspieszyć proces? Ale jak w takim razie odwołać się do konkretnych encji urządzenia?

Nauczę się, ale to pewnie potrwa. HA mam od miesiąca a node-red od kilku dni :slight_smile:

Czytaj wyżej, zapisując wartość encji do zmiennej masz ją w zależności gdzie zapiszesz, albo tylko w konkretnym procesie , albo globalnie, co możesz wykorzystać w innych procesach. Np odczytując wartość czujnika lux i zapisując ją w zmiennej globalnej możesz wykorzystać taką zmienną wszędzie gdzie chcesz użyć wartości natężenia oświetlenia
Przykład


Zaznaczony wpis
Idąc dalej, możesz zapisać stany encji dwóch lub więcej czujników do zmeinnych i zrobić z nimi co zechcesz w dalszej części procesu lub procesów jeśli zapiszesz to w zmiennej globalnej.
Dzięki takim zabiegom możesz w prosty sposób budować procesy, które nie są zbyt złożone ( każdy nod kosztuje ), a realizują to co chcesz

Ten proces włącza oświetlenie na podstawie dwóch czujników + przełącznik ścienny. Gdy włączę z ręki światło nie zgasnie aż nie wyłączę. Dwa czujniki gdzie jeden zigbee z czasem xx sekund, drugi działa tylko 2 sek dlatego trigger 25 sek .
flows.json (6,4 KB)

Dziękuję za przykład, trochę mi rozjaśnił temat zmiennych. Spróbowałem zastosować funkcję 3-cią do schodów i prawie się udało. Prawie, bo jeżeli tylko jedna czujka wychwyci ruch, a druga nie to światło nie gasło.

Funkcja , której użyłem nie robi czarów, a jedynie kieruje proces na odpowiednią ścieżkę w zależności od stanu dwóch zmiennych

var ruch = flow.get ('pir');
var ruch1 = flow.get ('pir1');

if ((ruch == "on") || (ruch1 == "on")) {
    msg.payload = "on";
    return [msg, null];
}
if ((ruch == "off") && (ruch1 == "off")) {
    msg.payload = "off";
    return [null, msg];
}

Mamy tu dwie ścieżki, jedna kiedy dowolna zmienna ma wartość “on” , druga gdy obie mają wartość “off”.
Pokaż to co się nie udało, ale w całości to można będzie się odnieść

chodzi o to że pierwsza część funkcji jest ok, pierwsza lub druga czujka niezależnie uruchamia światło. Natomiast w drugiej części założenie jest słuszne że obie czujki muszą wskazywać “off” aby wyłączyć światło. Działa tylko wtedy jeśli przejdzie się przez obie czujki. Jeśli w połowie schodów rozmyślę się i wrócę, to światło nie zgaśnie. Wyzwalacz jakim jest ruch w czujce musi sprawdzać stany dwóch czujek, niezależnie który zostanie wyzwolony. Ale ciekawi mnie to coraz bardziej.

Dlatego poprosiłem o całość, bo nie wiem jak się pytasz o wartości tych zmiennych ? W teorii przy naruszeniu tylko jednego czujnika powinno to działać, ale trzeba w nodach events: state zaznaczyć to co na foto


Ja mam określone założenie “oba muszą być naruszone” , Ty zmieniając te ptaszki spowodujesz, że po deploy wartości obu zmiennych się zapiszą do pamięci :slight_smile:
Masz też możliwość sprawdzenia tych wartości i tu znów się kłania menu po prawej stronie i Context Data

context
Może to wyjaśnia Twój problem, ale dokąd nie wstawisz całego procesu, są to tylko domysły.