Termostat - różne temperatury zależnie od czasu. Dlaczego nie działa?

Mam problem z termostatem dla bojlera. Ale od początku.
Automatyzacja pilnująca aby temperatura nie przekroczyła 45 stopni działa przez całą dobę i ona działa.

alias: cwu_wylacz_45st
description: ""
trigger:
  - type: temperature
    platform: device
    device_id: 84fb9667b42add998e7c9df88b12c1f1
    entity_id: sensor.bojler_cwu
    domain: sensor
    above: 45
condition: []
action:
  - type: turn_off
    device_id: 84fb9667b42add998e7c9df88b12c1f1
    entity_id: switch.bojler
    domain: switch
mode: single

Ale w godzinach porannych nie potrzebuję 45 stopni, wystarczy 35. No i dodałem warunek czasowy - i ta automatyzacja nie działa.

alias: cwu_wylacz_rano
description: ""
trigger:
  - type: temperature
    platform: device
    device_id: 84fb9667b42add998e7c9df88b12c1f1
    entity_id: sensor.bojler_cwu
    domain: sensor
    above: 35
    for:
      hours: 0
      minutes: 0
      seconds: 0
condition:
  - condition: time
    weekday:
      - mon
      - tue
      - wed
      - thu
      - fri
      - sat
      - sun
    before: "10:00:00"
    after: "06:00:00"
action:
  - type: turn_off
    device_id: 84fb9667b42add998e7c9df88b12c1f1
    entity_id: switch.bojler
    domain: switch
mode: restart

Do włączania switcha bojler używam innych automatyzacji i one również działają. Zamysł jest taki aby rano woda została nagrzana na potrzeby bieżące, a wieczorem do kąpieli. Rano też się grzeje do 45 stopni, choć warunek czasowy powinien uruchomić automatyzację wyłączającą przy 35 st.

Może to złe podejście, ale wszystkie gotowe termostaty na githubie nie mają warunków czasu, a nie mam pojęcia jak to zintegrować w HA przy pomocy skryptów. Do tej pory miałem Domoticza i tam to było proste, działało ponad 5 lat bez problemów.

Bo nie będzie Ci to działało - pierwsza automatyzacja ma pierwszeństwo bo działa całą dobę.
Niestety HA nie ma rozbudowanych warunków logicznych a tylko proste rzeczy - mogę się mylić bo nie śledzę zmian czy coś w tej materii zmienili.
Najprościej to rozbij to na czas lub wschód/zachód słońca czyli że ta pierwsza automatyzacja ma działać po jakiejś tam godzinie i np o 23 HA sam wyłączy bojler i rano ( czyli wstawiasz godzinę taką aby się zdążyło nagrzać ) sam go włączy i wyłączy po osiągnieciu zadanej temperatury.
HA sobie nie radzi z warunkiem PRZED i PO równocześnie ( też nie wiem czy poprawili ) - a to by Cię ratowało czyli “grzej do 45 stopni pomiędzy godz.19 a 22”

Czyli taki zapis :

condition: time
after: "19:00:00"
before: "22:00:00"

Ale spróbuj go wstawić bo może to w końcu ogarnęli.

Wyłączałem już automatyzację 45 stopni. I ta na 35 stopni nadal nie działała. Poza tym, docelowo chciałbym aby każdy domownik mógł włączyć dogrzewanie wody w każdej chwili, a automatyzacja pilnowałaby aby się wyłączyło po osiągnięciu 45 stopni (lub 35 stopni rano). Podobnie jak dodałem warunek z oknem czasowym w automatyzacji 45 stopni to również przestawała działać.

W opcji “Pokaż ślad” mam:

Executed: 23 września 2022 05:59:51

To zostaje Ci nauka Node Red - tam to zrobisz bo chyba nikt z tego forum nie robi automatyzacji w HA a tylko w NR ( większość ).
Czyli automatyzacja się wykonała

Kurcze, tak prosta rzecz? I już trzeba jakieś “dodatki”? Ok, dzięki.

Ułomność HA niestety - wywal dni , niech chodzi non stop ale spróbuj z czasem.
Jak domownik ma sobie włączyć sam grzanie to trzeba dodać osobną automatyzacje że HA ma wyłączyć po dobiciu do temperatury - bez ograniczeń czasowych lub zmień zakres temperatur czyli np 46 stopni dla grzania indywidualnego a 45 dla automatyki - wtedy powinno zadziałać bo będą różne warunki zadziałania.

Ok, ustawiłem czasy aby się “nie zazębiały” i zobaczymy do jutra.

alias: cwu_wylacz_45st
description: ""
trigger:
  - type: temperature
    platform: device
    device_id: 84fb9667b42add998e7c9df88b12c1f1
    entity_id: sensor.bojler_cwu
    domain: sensor
    above: 45
condition:
  - condition: time
    after: "10:01:00"
    before: "05:59:00"
action:
  - type: turn_off
    device_id: 84fb9667b42add998e7c9df88b12c1f1
    entity_id: switch.bojler
    domain: switch
mode: single
alias: cwu_wylacz_rano
description: ""
trigger:
  - type: temperature
    platform: device
    device_id: 84fb9667b42add998e7c9df88b12c1f1
    entity_id: sensor.bojler_cwu
    domain: sensor
    above: 35
    for:
      hours: 0
      minutes: 0
      seconds: 0
condition:
  - condition: time
    after: "06:00:00"
    before: "10:00:00"
action:
  - type: turn_off
    device_id: 84fb9667b42add998e7c9df88b12c1f1
    entity_id: switch.bojler
    domain: switch
mode: single

Dodaj trzecią automatyzacje - jeśli po godz. 23 boiler jest włączony to go wyłącz.
Tzn wyzwalaczem ma być czas a nie sam fakt że boiler działa.

Tak, zrozumiałem sens tej automatyzacji i jest słuszna. Termostat mechaniczny też odłączy grzałkę przy 50 st, ale kurcze nie po to stawiam komputery żeby polegać na rozwiązaniach mechanicznych które można ogarnąć zwykłym programatorem elektronicznym za 20 zł.

No coś za coś niestety - HA nie potrafi wszystkiego.

Mam sterowanie wentylacją.
Zależne od ustawionego trybu, dni tygodnia, pory dnia i ustawianego czasu pracy.
Wszystko jest w jednym skrypcie. Automatyzacja tylko uruchamia skrypt co sekundę.
Skrypty maj większe możliwości.
Automatyzacja

alias: Wentylacja
description: ''
trigger:
  - platform: time_pattern
    seconds: '*'
condition: []
action:
  - service: script.wentylacja_sterowanie
    data: {}
mode: restart

Skrypt

sequence:
  - choose:
      - conditions:
          - condition: state
            entity_id: input_select.wentylacja_stan
            state: 'On'
        sequence:
          - service: homeassistant.turn_on
            target:
              entity_id:
                - group.wentylacja_wentylator_nawiew
                - group.wentylacja_wentylator_wywiew
            data: {}
      - conditions:
          - condition: state
            entity_id: input_select.wentylacja_stan
            state: 'Off'
        sequence:
          - service: homeassistant.turn_off
            target:
              entity_id:
                - group.wentylacja_wentylator_nawiew
                - group.wentylacja_wentylator_wywiew
            data: {}
      - conditions:
          - condition: state
            entity_id: input_select.wentylacja_stan
            state: Auto
          - condition: numeric_state
            entity_id: sensor.time_formatted
            below: sensor.wentylacja_wydajnosc_czas
        sequence:
          - service: homeassistant.turn_on
            target:
              entity_id:
                - group.wentylacja_wentylator_nawiew
                - group.wentylacja_wentylator_wywiew
            data: {}
      - conditions:
          - condition: state
            entity_id: input_select.wentylacja_stan
            state: Auto ECO
          - condition: numeric_state
            entity_id: sensor.time_formatted
            below: sensor.wentylacja_wydajnosc_czas
          - condition: or
            conditions:
              - condition: time
                after: '13:00'
                before: '15:00'
                weekday:
                  - mon
                  - tue
                  - wed
                  - thu
                  - fri
              - condition: time
                after: '00:00'
                before: '05:59'
                weekday:
                  - mon
                  - tue
                  - wed
                  - thu
                  - fri
              - condition: time
                after: '22:00'
                before: '23:59'
                weekday:
                  - mon
                  - tue
                  - wed
                  - thu
                  - fri
              - condition: time
                after: '00:00'
                before: '23:59'
                weekday:
                  - sat
                  - sun
        sequence:
          - service: homeassistant.turn_on
            target:
              entity_id:
                - group.wentylacja_wentylator_nawiew
                - group.wentylacja_wentylator_wywiew
            data: {}
    default:
      - service: homeassistant.turn_off
        target:
          entity_id:
            - group.wentylacja_wentylator_nawiew
            - group.wentylacja_wentylator_wywiew
        data: {}
mode: single
alias: Wentylacja sterowanie
icon: mdi:fan
1 polubienie

A nie lepiej i łatwiej utworzyć Generic Thermostat - Home Assistant i mim sterować
Mój jako wentylator:

climate:                      #                            Wentylator 
  - platform: generic_thermostat
    name: Wentylator 
    heater: switch.wentylator
    target_sensor: sensor.brodlink_temperature #sensor.bin_4_temperature
    min_temp: 18
    max_temp: 30
    ac_mode: true
    target_temp: 26
    cold_tolerance: 0.2
    hot_tolerance: 0
    min_cycle_duration:
      seconds: 180
    keep_alive:
      minutes: 10
    initial_hvac_mode: "cool"
    away_temp: 25
    precision: 0.1  

ScreenShot_20220923163741
Wystarczy troszkę zmienić parametry i będzie sterował ogrzewaniem.

1 polubienie

Po dodaniu warunków czasu jak w poprzednim moim poście automatyzacja 45st działa poprawnie, ale ta 35 stopni nadal nie działa. Być może sprawdzany jest tylko pierwsza pasująca automatyzacja. Trzeba przerabiać skrypt i zrobić warunki w jednej automatyzacji. Ale kreator tego nie umożliwia, trzeba składać to z innych skryptów. Taka prosa wydawałoby się rzecz…
No i oczywiście warunek 45 st też się nie wykonał więc grzało aż do odcięcia przez termostat mechaniczny.

@krskrab Nie do końca - bo wodę ma nagrzać i zakończyć działanie a nie pykać przekaźnikiem co chwilę. A jak włączę switch ręcznie to automatyka ma wyłączyć jak osiągnie zadaną temperaturę.

Generic termostam ma możliwość ustawienia dowolnej histerezy. Więc o pykaniu przekaźnikiem nie ma mowy.
HA nie ma ograniczeń do tylko jednego sposobu osągnięcia celu. Może należy spojrzeć szerzej zamiast upierać się przy skryptach jak w domoticz. Są jeszcze np szablony i pomocnicy.

1 polubienie

Blokowo:
Wyzwalacz > Opcje >
opcja 1, warunek - akcja
opcja 2, warunek - akcja

Przykład:

alias: wyłączenie cwu  
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.termometrxxx
    above: 1
condition: []
action:
  - choose:
      - conditions:
          - condition: time
            before: "10:00:00"
            after: "06:00:00"
          - condition: numeric_state
            entity_id: sensor.termometrxxx
            above: 35
        sequence:
          - service: switch.turn_off
            data: {}
            target:
              entity_id: sensor.bojler_cwu
      - conditions:
          - condition: time
            after: "10:00:00"
            before: "06:00:00"
          - condition: numeric_state
            entity_id: sensor.termometrxxx
            above: 35
        sequence:
          - service: switch.turn_off
            data: {}
            target:
              entity_id: sensor.bojler_cwu
mode: restart

PS: W Narzędzia Developerski> Stan możesz zmienić chwilowo stan encji (zmień temperaturę by sprawdzić automatyzacje)
/
Właśnie spojrzałem i zauważyłem, że wyzwalacz powinien być raczej taki:

trigger:
  - platform: state
    entity_id:  sensor.termometrxxx
1 polubienie

Dziękuję @krskrab za szablon skryptu. Udało się sklecić na jego podstawie działającą automatyzację. Co dziwne, trigger działający w automatyzacji 45st przestał działać w tej. Ostatecznie ustawiłem trigger czasowy wyzwalany co minutę i w końcu ruszyło. Mam nadzieję że to tylko szorstkie początki i w końcu się zaprzyjaźnimy z HA…

alias: wyłączenie cwu
description: ""
trigger:
  - platform: time_pattern
    minutes: /1
condition: []
action:
  - choose:
      - conditions:
          - condition: time
            before: "06:00:00"
            after: "10:00:00"
          - condition: numeric_state
            entity_id: sensor.bojler_cwu
            above: 45
        sequence:
          - service: switch.turn_off
            data: {}
            target:
              entity_id: switch.bojler
      - conditions:
          - condition: time
            after: "6:01:00"
            before: "09:59:00"
          - condition: numeric_state
            entity_id: sensor.bojler_cwu
            above: 35
        sequence:
          - service: switch.turn_off
            data: {}
            target:
              entity_id: switch.bojler
mode: restart