Home Assistant - Automatyzacje Node-RED

Home Assistant - Automatyzacje Node-RED

Prosty sposób projektowania automatyzacji z możliwością szybkiej ich aktualizacji i sprawdzaniem przepływu, co pozwala nam szybko zweryfikować błąd i go poprawić! 

Swoją przygodę z automatyzacjami zacząłem pewnie jak większość z Was - czyli od pisania ich z palca, po kolei. Coś nie działało, to była zagwozdka na kilkanaście minut a czasami i dłużej, bo gdzie popełniłem błąd? Szukanie najczęściej linijka po linijce. Następnie restart HA i sprawdzanie czy poprawka działa (bo nie chciały się przeładować same automatyzacje np.) Strata czasu ogromna (zwłaszcza na szukaniu błędu). A jak dalej coś było nie tak, to już w ogóle koszmar...

#
# ogrzewanie
#
- id: '1570706246806'
  alias: Heat Living Room ON
  trigger:
  - entity_id: group.living_room_lights_cinema
    for:
      minutes: 5
    platform: state
    to: 'on'
  condition:
  - below: '16'
    condition: numeric_state
    entity_id: sensor.weather_tmp
  - below: '20'
    condition: numeric_state
    entity_id: sensor.termostat_andromeda_temperature
  action:
  - data:
      entity_id: climate.living_room
      hvac_mode: heat
      temperature: 21
    service: climate.set_temperature

group.living_room_lights_cinema wygląda następująco:

living_room_lights_cinema:
    name: Living room lights and Cinema
    entities:
      - switch.sonoff_10005be2f1
      - switch.sonoff_10005af23e
      - switch.sonoff_100059c494
      - switch.sonoff_10008c937e
      - switch.kate_computer
      - switch.sonoff_cinema

Oczywiście dalej wiele automatyzacji mam tak napisanych (skoro działają, to nie będę ich przepisywać), jednak wystarczy wejść w Configuration -> Automation jakąś automatyzację edytować lub wyłączyć i wszystkie nasze # znikają. Najbardziej się wkurzyłem jak sobie wszystko ładnie rozdzieliłem - światła, ogrzewanie, kino domowe. Opisałem, po kolei. A potem ciach i poszło wszystko... bo sobie wszedłem przez ten powyższy moduł aby coś sprawdzić (chyba składnię) i zapisałem....

Ograniczeń tej metody jest naprawdę wiele, aczkolwiek czystość kodu jest po prostu niezaprzeczalna. I naprawdę warto od tego zacząć aby zrozumieć jak działają automatyzacje. 

Instalacja

Hass.io -> Add-on store -> Node-Red -> Install

Tak naprawdę jedyne co musimy zrobić to ustawić credential_secret (robimy to w szczegółach zakładki add-on Node-RED, gdzie klikaliśmy install) ale uwaga, zapamiętajcie to hasło - ponieważ szyfruje ono dane a więc nie możemy tego potem zmienić, bo się do niczego nie dostaniemy! Następnie już tylko sslrequire_ssl na truestart :) 

Pierwsza automatyzacja  

 

Jak widzicie dostosowałem trochę trigger zmieniając parametry temperatury na którą ma reagować. 

Drugim ważniejszym trigger jest dodanie Andromeda low than 21 nie musiałem nic przepisywać, dodałem tylko kafelek + linię. 

Action - ale zaraz poniżej mamy jeszcze Heating Living 12 w przypadku jak wszystko zostanie wyłączone w pokoju (najważniejsze elementy, które są włączone jak ktokolwiek jest w pokoju) to ogrzewanie ma się wyłączyć. Nie musiałem pisać nic na nowo. Wystarczyło tylko od Group Living On wyjścia false wyprowadzić nową action.

Ustawiłem opóźnienie 5 minut zanim akcja się wykona (np. wieczorem wejdę na chwilę, włączę światło, znajdę co potrzebowałem i wychodzę - po co wtedy ma się włączyć ogrzewanie)? Dlatego zrobiłem, że po włączeniu grupy, ma odczekać 5 minut. 

Następnie ponownie sprawdza czy grupa jest ON, jeżeli tak to ma iść dalej. Czyli sprawdzić warunki temperatury. 

Możliwości

Widzimy kiedy dany warunek został wykonany, kiedy była odpowiedź true a kiedy false (czerwony lub zielony "kwadrat") oraz co najważniejsze cały przepływ działania.

Dodałem też timestamp abym mógł szybko wywołać testowy trigger w celu sprawdzenia przepływu pozostałych warunków (po prostu na niego klikamy i się wykonuje w Node-RED).

Jak widzicie możemy wprowadzać skomplikowane Data, nie ma tutaj ograniczeń a pomoc jest bardzo bogata.

A jeżeli potrzebuje czegoś bardziej zaawansowanego, też nie ma problemu.

Kopiuj, wklej, wytnij... export i import! 

Elementy jak i całe przepływy możemy kopiować, wklejać w zakładki, wyłączać poszczególne elementy - możliwości jest naprawdę ogrom i wszystko działa intuicyjnie. Do tego możemy eksportować importować całe przepływy, co ułatwi korzystnie z gotowców dostępnych w internecie! Zobaczcie przykład i sobie go zaimportujcie do siebie:

[
    {
        "id": "1d69b86b.3d5998",
        "type": "api-call-service",
        "z": "150a1916.ccd1e7",
        "name": "Light Off",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "debugenabled": false,
        "service_domain": "light",
        "service": "turn_off",
        "entityId": "light.desk_light",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 640,
        "y": 340,
        "wires": [
            []
        ]
    },
    {
        "id": "b742d9a.9b12428",
        "type": "server-state-changed",
        "z": "150a1916.ccd1e7",
        "name": "Magic Button",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "entityidfilter": "binary_sensor.magic_button",
        "entityidfiltertype": "exact",
        "outputinitially": false,
        "state_type": "str",
        "haltifstate": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "outputs": 2,
        "output_only_on_state_change": true,
        "x": 210,
        "y": 360,
        "wires": [
            [
                "667c36ac.f2b738"
            ],
            []
        ]
    },
    {
        "id": "a72b198d.0d1e78",
        "type": "api-call-service",
        "z": "150a1916.ccd1e7",
        "name": "Light On",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "debugenabled": false,
        "service_domain": "light",
        "service": "turn_on",
        "entityId": "light.desk_light",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 640,
        "y": 420,
        "wires": [
            []
        ]
    },
    {
        "id": "667c36ac.f2b738",
        "type": "api-current-state",
        "z": "150a1916.ccd1e7",
        "name": "Desk light on?",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "light.desk_light",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 460,
        "y": 360,
        "wires": [
            [
                "1d69b86b.3d5998"
            ],
            [
                "a72b198d.0d1e78"
            ]
        ]
    },
    {
        "id": "b3e9b226.7fd0c",
        "type": "server",
        "z": "",
        "name": "Home Assistant"
    }
]

Opcja jest dostępna w prawym górny rogu:

Deploy

Jak już mamy wszystko gotowe klikamy na ten przycisk, mija klika sekund i mamy wszystko przeładowane i gotowe do działania. Literówka? Zła wartość, żaden problem kilka poprawiamy, klikamy ponownie i gotowe! 

Jest kilka dodatkowych opcji, gdy już mamy bardzo rozbudowane przepływy i nie chcemy resetować obecnego działania.

Debbugowanie

Jak widzicie na pod każdym kafelkiem mamy informację jaki stan został odebrany i gdzie przepływ poszedł dalej.

Jest to mega pomocne, bo możemy zobaczyć dokładnie gdzie coś się nam wysypuje i jakie wartości przybierają czujniki np. AQI w oczyszczaczu:

Oraz dokładnie przyglądnąć się błędom jak potrzebujemy więcej informacji:

Chcesz więcej?

Większość automatyzacji, które przedstawiam na blogu opierają się właśnie na tym rozwiązaniu - więcej przykładów znajdziesz tutaj: nodeRED

Podsumowanie

Obecnie używam tego do prostych jak i zaawansowanych automatyzacji, bo jest to po prostu mega proste narzędzie i naprawdę niesamowicie rozbudowane! 

 


Chcesz wiedzieć więcej? Dołącz do naszej grupy na FB - będzie nam też miło jak polubisz nasz Fanpage!