Mam problem z poprawnością działania powiadomień o otwartych oknach i drzwiach w HA.
Chciałbym, aby powiadomienia przychodziły np co godzinę na telefon jako push, że jakieś okno jest otwarte oraz aby głośnik to odtwarzał.
Dodatkowo w osobnej automatyzacji chciałbym zrobić, aby informowało, że coś jest otwarte jak uruchamiam scenę Wyjście z domu, ale to jak się uporam z podstawowym problemem. Może jest na te sprawy jakiś blueprint? Póki co nie znalazłem takiego, dlatego sam tworzyłem automatyzacje pod kolejne okna i drzwi.
Zrobiłem automatyzację w HA - póki co nie korzystam z Node reda - i automatyzacja odtwarza i przysyła push, jednakże nie mogę w niej dojść ładu, aby po zamknięciu okna nie powtarzało zbędnie jeszcze raz w pętli, że okno jest otwarte i po chwili kolejny właściwy komunikat, że okno zostało już zamknięte.
Yaml poniżej:
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.kontaktron6
to: "on"
for:
hours: 0
minutes: 59
seconds: 0
condition: []
action:
- service: notify.mobile_app_rmx3085
data:
message: Okno w kuchni otwarte zbyt długo!
title: UWAGA
data:
tag: ostrzezenie_okno_kuchnia
- service: notify.mobile_app_asia_huawei_p30lite
data:
message: Okno w kuchni otwarte zbyt długo!
title: UWAGA
data:
tag: ostrzezenie_okno_kuchnia
enabled: false
- delay:
hours: 0
minutes: 20
seconds: 0
milliseconds: 0
enabled: false
- service: media_player.volume_set
data:
volume_level: "{{ states ('input_number.glosnosc_komunikatu') | float }}"
target:
entity_id: media_player.google_home_mini
- service: tts.google_say
data:
entity_id: media_player.google_home_mini
message: UWAGA Okno w kuchni otwarte zbyt długo!
language: pl
- wait_template: "wait_template: {{ is_state('media_player.google_home_mini', 'off') }} "
timeout: "4"
- service: media_player.volume_set
data:
volume_level: "{{ states ('input_number.glosnosc_odtwarzania') | float }}"
target:
entity_id: media_player.google_home_mini
- repeat:
until:
- condition: state
entity_id: binary_sensor.kontaktron6
state: "off"
for:
hours: 0
minutes: 0
seconds: 10
sequence:
- delay:
hours: 1
minutes: 0
seconds: 0
milliseconds: 0
- service: media_player.volume_set
data:
volume_level: "{{ states ('input_number.glosnosc_komunikatu') | float }}"
target:
entity_id: media_player.google_home_mini
- service: tts.google_say
data:
entity_id: media_player.google_home_mini
message: UWAGA Okno w kuchni otwarte zbyt długo!
language: pl
- wait_template: >-
wait_template: {{ is_state('media_player.google_home_mini', 'off')
}}
timeout: "4"
- service: media_player.volume_set
data:
volume_level: "{{ states ('input_number.glosnosc_odtwarzania') | float }}"
target:
entity_id: media_player.google_home_mini
- service: notify.notify
data:
message: Okno w kuchni zostało już zamknięte!
data:
tag: ostrzezenie_okno_kuchnia
title: Informacja
- service: media_player.volume_set
data:
volume_level: "{{ states ('input_number.glosnosc_komunikatu') | float }}"
target:
entity_id: media_player.google_home_mini
- service: tts.google_say
data:
entity_id: media_player.google_home_mini
message: Okno w kuchni zostało już zamknięte
language: pl
- wait_template: "wait_template: {{ is_state('media_player.google_home_mini', 'off') }}"
timeout: "4"
- service: media_player.volume_set
data:
volume_level: "{{ states ('input_number.glosnosc_odtwarzania') | float }}"
target:
entity_id: media_player.google_home_mini
mode: single
Aby nie powtarzało zbędnie kolejny raz pętli po zamknięciu okna i od razu komunikowało, że okno zostało zamknięte zabrałem się od nowa za tą automatyzację wykorzystując warunek if else, jednakże tu komunikuje po otwarciu i ponawia co jakiś czas jak jest otwarte poprawnie, natomiast nie przetwarza automatyzacji poprawnie po zamknięciu okna, jakby dalej nie było instrukcji i wychodziło z automatyzacji, pomimo tego, że uruchomienie ręczne testu samego bloku else automatyzacji z zamkniętym oknem wysyła właściwego pusha, że okno zostało już zamknięte.
Poniżej yaml:
description: Wysyła i odtwarza na głośniku komunikaty po otwarciu i zamknięciu okna
trigger:
- platform: state
entity_id:
- binary_sensor.kontaktron6
to: "on"
for:
hours: 0
minutes: 0
seconds: 10
condition:
- condition: time
after: "07:00:00"
before: "23:00:00"
weekday:
- mon
- tue
- wed
- thu
- fri
- sat
- sun
action:
- service: notify.mobile_app_rmx3085
data:
message: Okno w kuchni zostało właśnie otwarte
title: UWAGA
data:
tag: ostrzezenie_okno_kuchnia
- service: media_player.volume_set
data:
volume_level: "{{ states ('input_number.glosnosc_komunikatu') | float }}"
target:
entity_id: media_player.google_home_mini
enabled: false
- service: tts.google_say
data:
entity_id: media_player.google_home_mini
message: UWAGA Okno w kuchni zostało właśnie otwarte
language: pl
enabled: false
- wait_template: "wait_template: {{ is_state('media_player.google_home_mini', 'off') }} "
timeout: "4"
enabled: false
- service: media_player.volume_set
data:
volume_level: "{{ states ('input_number.glosnosc_odtwarzania') | float }}"
target:
entity_id: media_player.google_home_mini
enabled: false
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- if:
- condition: state
entity_id: binary_sensor.kontaktron6
state: "on"
then:
- repeat:
until:
- condition: state
entity_id: binary_sensor.kontaktron6
state: "off"
for:
hours: 0
minutes: 0
seconds: 10
sequence:
- service: notify.mobile_app_rmx3085
data:
title: UWAGA
message: Okno w kuchni jest otwarte
data:
tag: ostrzezenie_okno_kuchnia
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
else:
- wait_for_trigger:
- platform: state
entity_id:
- binary_sensor.kontaktron6
from: "on"
to: "off"
for:
hours: 0
minutes: 0
seconds: 10
timeout:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- service: notify.mobile_app_rmx3085
data:
message: Okno w kuchni zostało już zamknięte
title: Informacja
data:
tag: ostrzezenie_okno_kuchnia
enabled: true
mode: restart
Ostatecznie lepiej by było zmodyfikować pierwszą wersję kodu, gdyż tam wszystko działało z wyjątkiem tego, że o 1 raz za dużo powtarzało komunikat, że okno jest otwarte, a tuż po tym przetwarza właściwie instrukcję, że zostało już zamknięte. Jak wyjść wcześniej z tej pętli?
Może znalazłby się ktoś chętny coś podpowiedzieć.