Odczyt i zapis wartości encji HA w nodzie FUNCTION

Baaaardzo brakuje mi na Forum kategorii związanej z problemami czysto programistycznymi NR i syntaktyką języków JS czy JSON, np. jak odwołać się do określonej zmiennej z HA, jak przekazać ją do innego noda, jak pod zmienną funkcji podstawić wartość konkretnej encji, jak zbudować funkcję wielu zmiennych f (x, y), jak odpowiednio sformatować treść msg, jakie własności może mieć msg., itp.

Dziś mam właśnie jeden z takich “życiowych” problemów…

Muszę zbudować funkcję, która odczytuje wartości dwóch encji pomocniczych zdefiniowanych w HA: input_datetime.weekend_od_godz oraz input_datetime.weekend_do_godz a następnie przekazuje je do określonego noda ‘timerange’, zdefiniowanego tak, jako podproces opisany tutaj.

To bardzo użyteczny i dający się programować nod (w przeciwieństwie do standardowego) określający czasowy zakres działania (lub niedziałania) procesu, w którym został użyty. Zakresy czasów można jednak dowolnie ustawiać z poziomu UI w HA bez konieczności grzebania w NR, i to jest dla mnie jego kluczową cechą.

Nod wymaga określonego porządku danych w odbieranej wiadomości. Stąd moja gorąca prośba: czy ktoś z Was, znacznie bardziej ode mnie biegły w tej materii, zechciałby skorygować 2 linijki poniższego kodu wymaganego przez nod timerange?

image

Mam na myśli linie 1 i 2 tak, aby:

  • pod zmienną od_godz podstawiała się wartość encji pomocniczej input_datetime.weekend_od_godz,
  • pod zmienną do_godz podstawiała się wartość encji pomocniczej input_datetime.weekend_do_godz.

Wiadomość wynikowa msg.payload tej funkcji ma wysłać obie zmienne jako odpowiednio sformatowaną treść tematu “override” na nod timerange, co spowoduje parametryzację całego noda bez konieczności przypisywania mu zakresu czasowego na sztywno z poziomu NR.

Ew. czy ktoś z Was mógłby mnie odesłać do jakiegoś porządnego internetowego tutoriala (lub innego linku), gdzie mógłbym spokojnie zgłębiać tajniki programowania NR (ale wyłącznie w integracji z HA), i nie zanudzać Was swoimi pytaniami? Przejrzałem masę filmów na YT, przeklikałem nodered.org ale wszystko niestety z miernym skutkiem… Wydaje się to problemem trywialnym, bo z pewnością dawno rozwiązanym. Nie wierzę bowiem, że nigdy nikomu nie przyszło do głowy operować w NR funkcjami z wykorzystaniem encji z HA… Ja jednak nie umiem sobie z tym poradzić…

Z góry dziękuję za każdą użyteczną podpowiedź czy wskazówkę :slight_smile:

Steve Cope
https://www.youtube.com/c/stevecope/videos

Opto Video
https://www.youtube.com/user/OptoVideo/videos

To czego ja używam:
Screenshot - 04.11.2021 , 05_21_15
Wymagania NR: node-red-contrib-schedex https://flows.nodered.org/node/node-red-contrib-schedex
Kod NR : wakeup_time.json (4,8 KB)

Karat HA:


Wymagania HA: custom:time-picker-card https://github.com/GeorgeSG/lovelace-time-picker-card
Kod karty HA:

type: vertical-stack
cards:
  - type: custom:time-picker-card
    entity: input_datetime.wakeup_time
    layout:
      name: inside
      align_controls: right
    hour_step: 1
    minute_step: 5
    second_step: 5
    name: ''
  - type: button
    tap_action:
      action: toggle
    entity: input_boolean.wakeup_enabled
    icon_height: 59px
  - type: entities
    entities:
      - entity: group.alarm_clock2
      - entity: input_boolean.wakeup_enabled
    state_color: true
  - type: button
    tap_action:
      action: toggle
    entity: input_boolean.wakeup_weekend
    icon_height: 29px

Pomocnicy:
input_datetime.wakeup_time
input_boolean.wakeup_enabled
input_boolean.wakeup_weekend

1 polubienie

Po kilku godzinach studiowania tutoriali NR (@artpc , dziękuję za linki!) rozwiązałem problem programowania przedziałów czasowych dla standardowego noda time range z poziomu dashboarda HA.

Chciałem zbudować maksymalnie sparametryzowany flow sterujący dwufunkcyjnym piecem gazowym, służącym do ogrzewania domu oraz podgrzewania bojlera z wodą użytkową.

Na dashboardzie wprowadzam więc wartości encji pomocniczych dla dnia roboczego/weekendowego (tylko w okresie grzewczym, gdy piec pracuje w obu funkcjach) oraz dla każdego dnia tygodnia ale tylko w okresie letnim, gdy piec podgrzewa jedynie wodę użytkową w bojlerze (tryby pracy pieca określam w osobnej encji input_select.tryb_ogrzewania)

image

W tym celu napisałem podproces, który odczytuje czas z encji pomocniczych i programuje zakresy czasu noda timerange:

image

Na wejściu zaczytywane są wartości dwóch encji pomocniczych (początek i koniec zakresu) i łączone w jedną wiadomość (nod join) aby nod funkcyjny otrzymał oba parametry jednocześnie (tutaj podziekowanie dla @RobinI30 za tę podpowiedź). Funkcja zakres natomiast tworzy wiadomość programującą noda timerange następująco:

image