Witam . może ktoś pomoże jak stworzyć automatyzację warunkową w HA w automatyzacjach . Potrzebuję automatyzację która będzie działać tak:
Jeżeli temperatura na czujniku X jest większa niż na czujniku Y to załącz urządzenie Z
Jeżeli temperatura na czujniku X jest mniejsza niż na czujniku Y to załącz urządzenie B
Jeżeli nie da się tego zrobić w jednej automatyzacji to mogą być dwie osobne .
A co jeżeli jest taka sama?
W sumie nie robi to różnicy co będzie jak będzie taka sama . Może zachowywać swój poprzedni stan .
Chyba Cię nie rozumiem, o jakim “stanie poprzednim” piszesz? Jeżeli temperatura na czujniku X jest taka sama jak na czujniku Y to nic nie rób?
automation:
- alias: "Sterowanie pompami w zależności od temperatury 2 czujników, działanie przemienne "
trigger:
- platform: state
entity_id: sensor.czujnik_x
- platform: state
entity_id: sensor.czujnik_y
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.czujnik_x
above: sensor.czujnik_y
sequence:
- service: switch.turn_on
entity_id: switch.pompa1
- service: switch.turn_off
entity_id: switch.pompa2
- conditions:
- condition: numeric_state
entity_id: sensor.czujnik_x
below: sensor.czujnik_y
sequence:
- service: switch.turn_on
entity_id: switch.pompa2
- service: switch.turn_off
entity_id: switch.pompa1
W powyższym przykładzie, jeśli temperatura na czujniku X jest większa niż temperatura na czujniku Y, to włączona zostanie pompa1 i wyłączona zostanie pompa2. Jeśli temperatura na czujniku X jest mniejsza niż temperatura na czujniku Y, to włączona zostanie pompa2, a pompa1 zostanie wyłączona. Jeśli temperatura na obu czujnikach jest taka sama, żadna z pomp nie zostanie włączona.
Wydaje mi się, że było by lepiej jeśli opisał być do czego to ma służyć.
Może wtedy by można zastosować np. Generic Thermostat
A więc tak już to opisuję . Mój piec centralnego ogrzewania mam ustawiony tak że nie chodzi cały czas tylko powiedzmy 2 godziny chodzi a dwie jest wyłączony , Pomimo że piec jest wyłączony to pompa CO chodzi cały czas i tym samym schładza mi wodę w w bojlerze który przez wężownicę spięty jest z instalacją CO . Chcąc tego uniknąć (schładzania bojlera podczas postoju pieca) zainstalowałem przed wężownicą bojlera motozawór który ma po prostu odcinać przepływ wody z instalacji CO do bojlera . Na instalacji rury ciepłej wody mam oczywiście zainstalowane czujniki temperatury a to wszystko spięte do Supli która jest dodana do HA . No i teraz chodzi o to by automatyzacja w HA działała tak : Czujnik temperatury na rurze ciepłej wody wskazuje że temperatura jest wyższa niż ta w bojlerze, to wtedy zostaje uruchomione otwieranie motozaworu a tym zamym woda płynie na wężownicę bojlera go i ogrzewa w nim wodę . Jeżeli temperatura na czujniku rury ciepłej wody jest niższa niż ta w bojlerze to zostaje zamknięty motozawór i tym samym krążąca w instalacji woda nie schładza bojlera .
Czyli “termostat” nie spełnił by swojej roli, ponieważ dożył by do uzyskania zadanej temperatury.
A tak przy temacie:
Innym sposobem konfiguracji automatyzacji jest wykorzystanie value_template
alias: Sterowanie pompą w zależności od temperatury 2 czujników, działanie przemienne
description: ""
trigger: []
condition: []
action:
- choose:
- conditions:
- condition: template
value_template: "{{ states('sensor.czujnik_x') | float < states('sensor.czujnik_y') | float }}"
sequence:
- service: switch.turn_on
target:
entity_id: switch.pompa1
- conditions:
- condition: template
value_template: "{{ states('sensor.czujnik_x') | float > states('sensor.czujnik_y') | float }}"
sequence:
- service: switch.turn_off
target:
entity_id: switch.pompa1
mode: single
Czyli ten twój pierwszy przyklad spelniłby swoją rolę ? Czyli nie ma szansy zrobić tego z interfejsu graficznego automatyzacji ? , trzeba wpisać kod .
- Powinien działać poprawnie
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.temp_srednia
above: sensor.test_4_temperatura_pressure
sequence:
- service: switch.turn_on
entity_id: switch.vdev_controller
- service: switch.turn_off
entity_id: switch.computer
...
Edytor wizualny:
/
Ten pierwszy kod nie nadaje się do wklejenia, wymaga usunięcia
automation:
i ustawienie wcięcia.
Tak wygląda kod do wklejenia w Edycja w YAML
alias: >-
Sterowanie pompami w zależności od temperatury 2 czujników, działanie
przemienne
description: ""
trigger:
- platform: state
entity_id: sensor.temp_srednia
- platform: state
entity_id: sensor.test_4_temperatura_pressure
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.temp_srednia
above: sensor.test_4_temperatura_pressure
sequence:
- service: switch.turn_on
entity_id: switch.vdev_controller
- service: switch.turn_off
entity_id: switch.computer
- conditions:
- condition: numeric_state
entity_id: sensor.temp_srednia
below: sensor.test_4_temperatura_battery
sequence:
- service: switch.turn_on
entity_id: switch.computer
- service: switch.turn_off
entity_id: switch.aqara_hub_51a1_pairing_mode
mode: single
A tak wygląda w Edytor wizualny:
To jest tylko przykład bo ta automatyzacja (ostatnia) jest z losowych encji i nie ma sensu
Przepraszam że tak pózno odpisuję ale znowu ważny wyjazd .
Moje encje wyglądają tak :
Bojler temperatura - sensor.bojler_grzalka_temperature
Rura ciepła woda - sensor.bojler_sterowanie_temperature_2
Motozawór otwieranie - light.bojler_sterowanie_zawor_otwieranie
Motozawór zamykanie - light.bojler_sterowanie_zawor_zamykanie
A ma działać tak :
Jeżeli temperatura bojler większa niż temperatura rura ciepła woda - motozawór zamykanie
Jeżeli temperatura bojler mniejszaniż temperatura rura ciepła woda - motozawór otwieranie
Czy kod powinien wyglądać tak ?
alias: >-
Sterowanie zaworem w zależności od różnicy temperatur
przemienne
description: ""
trigger:
- platform: state
entity_id: sensor.bojler_grzalka_temperature
- platform: state
entity_id: sensor.bojler_sterowanie_temperature_2
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.bojler_grzalka_temperature
above: sensor.bojler_sterowanie_temperature_2
sequence:
- service: switch.turn_off
entity_id: light.bojler_sterowanie_zawor_zamykanie
- conditions:
- condition: numeric_state
entity_id: sensor.bojler_grzalka_temperature
below: sensor.bojler_sterowanie_temperature_2
sequence:
- service: switch.turn_on
entity_id: light.bojler_sterowanie_zawor_otwieranie
mode: single
switch.turn_off
a entity_id: light
Jest błędne
np.
service: light.turn_off dla światła entity_id: light.xxx
service: switch.turn_off dla przełączników entity_id: switch.xxx`
Światłem (żarówką sterujesz zaworami)?
/
Temperature pobiera bezpośrednio z atrybutów
Jeśli nie popełniłem błędu w kodzie i logice to powinno działać
alias: Sterowanie zaworem w zależności od różnicy temperatur
description: ""
trigger:
- platform: state
entity_id: sensor.bojler_grzalka_temperature
- platform: state
entity_id: sensor.bojler_sterowanie_temperature_2
condition: []
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.bojler_grzalka_temperature
above: "{{ state_attr('sensor.bojler_sterowanie_temperature_2', 'state') }}"
sequence:
- service: switch.turn_off
entity_id: switch.bojler_sterowanie_zawor_zamykanie
- conditions:
- condition: numeric_state
entity_id: sensor.bojler_grzalka_temperature
below: "{{ state_attr('sensor.bojler_sterowanie_temperature_2', 'state') }}"
sequence:
- service: switch.turn_on
entity_id: switch.bojler_sterowanie_zawor_otwieranie
mode: single
No niestety taką mam encję ustawioną . Nie wiem kiedy popełniłem ten błąd ale mi działa dlatego nie zwróciłem na to wcześniej uwagi . A steruję zaworem przez przekazniki .
Już sprawdziłem jak to się stało że jest to light a nie swith . Sterowanie jest postawione na Supli a w niej jedyna opcja jaka mnie satysfakcjonowała czyli działała jak chciałem to ustawienia tego jako " Automat schodowy " i niestety tak musi zostać . I zapewne dlatego pokazuje encję jako light .
Ok
Jak zmienisz swój kod z
- service: switch.turn_off
na - service: light.turn_off
a
- service: switch.turn_on
na - service: light.turn_on
To będzie Ok
Tak się zastanawiam.
Czy w tej automatyce są wymagane “wyzwalacze” bo wydaje mi się, że nie
Już wstawiam tą automatyzację . Lecz nie mam możliwości sprawdzić tego na szybko bo czujniki mam zabudowane i trzeba czekać na zmianę temperatur. Jutro jak nie wyjadę znowu to dam znać czy działa . Mocne podziękowania za pomoc i poświęcony czas .
Możesz wywołać zmianę wartości, wpisując i klikając Ustaw Stan zmieni się wartość do czasu kiedy zostaną odczytany nowe dane np. sensora
Zrobiłem jak napisałeś . Działa połowicznie , tzn gdy rura ma wyższą temp. niż bojler to otwiera zawór (otwieranie trwa 7 sekund - tak ma być .) a następnie znowu otwiera i otwiera i tak ciągle . Natomiast jak rura ma niższą temp. niż bojler to nie dzieje się nic . Kod mam taki :
alias: Sterowanie zaworem w zależności od różnicy temperatur przemienne
description: ""
trigger:
- platform: state
entity_id: sensor.bojler_grzalka_temperature
- platform: state
entity_id: sensor.bojler_sterowanie_temperature_2
action:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.bojler_grzalka_temperature
above: sensor.bojler_sterowanie_temperature_2
sequence:
- service: light.turn_off
entity_id: light.bojler_sterowanie_zawor_zamykanie
- conditions:
- condition: numeric_state
entity_id: sensor.bojler_grzalka_temperature
below: sensor.bojler_sterowanie_temperature_2
sequence:
- service: light.turn_on
entity_id: light.bojler_sterowanie_zawor_otwieranie
mode: single
Zatrzymaj tamtą automatyzacje a uruchom tą:
alias: Sterowanie zaworem w zależności od różnicy temperatur przemienne TEST
description: ""
trigger:
- platform: state
entity_id: sensor.bojler_grzalka_temperature
- platform: state
entity_id: sensor.bojler_sterowanie_temperature_2
action:
- choose:
- conditions:
- condition: template
value_template: "{{ states('sensor.bojler_grzalka_temperature') | float > states('sensor.bojler_sterowanie_temperature_2') | float }}"
sequence:
- service: light.turn_off
entity_id: light.bojler_sterowanie_zawor_zamykanie
- conditions:
- condition: template
value_template: "{{ states('sensor.bojler_grzalka_temperature') | float < states('sensor.bojler_sterowanie_temperature_2') | float }}"
sequence:
- service: light.turn_on
entity_id: light.bojler_sterowanie_zawor_otwieranie
mode: single
Jeśli ta nie zadziała poprawnie, to musisz upewnić się czy np. light.bojler_sterowanie_zawor_otwieranie
- po wywołani stanu ON otwiera zawór
/
light.bojler_sterowanie_zawor_otwieranie
i
light.bojler_sterowanie_zawor_zamykanie
To jest ta sama żarówka (przełącznik)?
/
Wrzuć ten kod do Narzędzia deweloperskie > Szablon. HA pokarze który spełnia warunek ( “False” inny “True”)
Nie . Tylko cały czas otwiera zawór co ileś sekund . Może napiszę jak to jest na Supli zrobione to będzie łatwiej . Otwieranie i zamykanie zaworu trwa ok 7 sekund . Dlatego na supli mam to tak ustawione jako automat schodowy . Czyli w aplikacji HA naciskam otwieranie zaworu to w supli zalącza się tzw . automat schodowy , czyli supla załącza mi przekaznik który podaje przez 7 sekund napięcie na motozawór i zostaje on otwarty . Po 7 sekundach tzw. automat schodowy się wyłącza i napięcie nie jest już podawane do następnego wyzwolenia . Analogicznie zamykanie zaworu . Tylko tu napięcie podawane jest na drugi przekaznik który znowu obraca zawór w drugą stronę , tym razem go zamykając . Czyli moim zdaniem nie powinno być w jednym sequence light.turn_on a w drugim light.turn_off , tylko w obu light.turn_on
OK ( “tu jest pies pogrzebany”)
Podmień i daj znać
Tak to jest to . Nareszcie działa . Jeszcze raz dziękuję za pomoc . Nie wiem czy by nie trzeba jeszcze dodać jakiejś histerezy bo nie wiem co się będzie działo jak temperatury będą blisko siebie . Trochę się za wcześnie ucieszyłem bo po ok dwóch minutach nastąpiło ponowne zamknięcie zaworu po następnych znowu zamknięcie pomimo że temperatury się nie zmieniały i znowu zamknięcie . Spróbuję jeszcze wyłączyć z prądu cały serwer może się coś popieprzyło . Mój kod wygląda teraz tak :
alias: Sterowanie zaworem w zależności od różnicy temperatur przemienne TEST
description: ""
trigger:
- platform: state
entity_id: sensor.bojler_grzalka_temperature
- platform: state
entity_id: sensor.bojler_sterowanie_temperature_2
action:
- choose:
- conditions:
- condition: template
value_template: >-
{{ states('sensor.bojler_grzalka_temperature') | float >
states('sensor.bojler_sterowanie_temperature_2') | float }}
sequence:
- service: light.turn_on
data: {}
target:
entity_id: light.bojler_sterowanie_zawor_zamykanie
- conditions:
- condition: template
value_template: >-
{{ states('sensor.bojler_grzalka_temperature') | float <
states('sensor.bojler_sterowanie_temperature_2') | float }}
sequence:
- service: light.turn_on
entity_id: light.bojler_sterowanie_zawor_otwieranie
mode: single
Niestety mimo restartu servera ciągle co parę minut , sekund włącza zamykanie zaworu (teraz powinien być cały czas zamknięty ). Nawet nie wiem od czego to jest zależne bo czasy uruchomiania zamykania zaworu są różne .