Mam pewnie trywialny problem ale do meritum. Posiadam automatyzację która po zachodzie słońca włącza lampę w salonie i powinna ją zgasić o godzinie 22:00, samo uruchomienie działa super, natomiast lampa nigdy nie gaśnie o 22:00, jestem dość świeży w tym temacie i proszę o wyrozumiałość. Moja automatyzacja poniżej:
alias: >-
Automatyzacja sterowania lampą salon po zachodzie i wyłączenie o określonej
godzinie
description: ""
trigger:
- platform: sun
event: sunset
offset: 0
- platform: time
at: "22:00:00"
condition: []
action:
- choose:
- conditions:
- condition: sun
after: sunset
sequence:
- type: turn_on
device_id: e69ae53d081101a2fd649914f6984e79
entity_id: light.lampa_salon
domain: light
brightness_pct: 5
- conditions:
- condition: time
after: "22:00:00"
weekday:
- mon
- tue
- wed
- thu
- fri
- sat
- sun
sequence:
- type: turn_off
device_id: e69ae53d081101a2fd649914f6984e79
entity_id: light.lampa_salon
domain: light
default: []
mode: single
Panie algorytmy się kłaniają. Twój zastosowany algorytm wygląda tak:
Uruchom akcje jeśli: jest po zachodzie słońca LUB jest po 22
Akcja: sprawdź czy jest po zachodzie słońca jeśli “tak” to włącz światło jeśli “nie” to sprawdź czy jest po 22 jeśli “tak” to zgaś światło, jeśli “nie” to skończ.
Czyli dokładnie tak jak opisałeś
Panie algorytmy się kłaniają. Zastosowany algorytm wygląda tak:
Uruchom akcje jeśli: jest po zachodzie słońca LUB jest po 22
Akcja: sprawdź czy jest po zachodzie słońca jeśli “tak” to włącz światło jeśli “nie” to sprawdź czy jest po 22 i czy światło jest włączone, jeśli “tak” to zgaś światło, jeśli “nie” to skończ.
Uzupełniając, instrukcja wyłączenia lampy nigdy nie zostanie wykonana.
Hm… to i ja jestem niedouczony bo sądziłem, że:
część aliasu “trigger” oznacza, że akcje będą uruchamiane w dwóch przypadkach:
Jeśli jest po zachodzie słońca.
Jeśli jest po godzinie 22:00.
Co oznaczałoby, że akcje zostaną uruchomione, jeśli którykolwiek z tych warunków zostanie spełniony. Nie jest wymagane jednoczesne spełnienie obu warunków. Czyli automatyzacja będzie działać, jeśli będzie po zachodzie słońca lub po godzinie 22:00, nie wymagając jednoczesnego spełnienia obu warunków.
PS. Sugerujesz zamiast LUB użyć I ?:
trigger:
- platform: sun
event: sunset
offset: 0
- platform: time
at: "22:00:00"
wykonać:
trigger:
- platform: sun
event: sunset
offset: 0
condition:
condition: time
after: "22:00:00"
Czyli tu się zgadzamy - nie to jest problemem. Problem jest taki, że 22 jest po zachodzie słońca. więc idąc za tym:
Uruchom akcje jeśli: jest wystąpił zachód słońca LUB jeśli wystąpiła 22 (tu poprawka bo taki jest dokładnie taki trigger)
Akcja: sprawdź czy jest po zachodzie słońca jeśli “tak” to włącz światło jeśli “nie” to sprawdź czy jest po 22 i czy światło jest włączone, jeśli “tak” to zgaś światło, jeśli “nie” to skończ.
Wybija godzina 22:
Triger:
Jeśli wystąpił stan “zachód słońca” to uruchom akcję —>> FAŁSZ - Czyli nic nie rób.
Jeśli wystąpił stan “22:00” to uruchom akcję ---->> PRAWDA - Czyli uruchom akcje.
Akcja:
Wybierz:
Czy jest po zachodzie słońca jeśli “tak” (PRAWDA) to zapal światło —>> PRAWDA, (bo choć akcja została wywołana “triggerem wystąpienia godz. 22” to sama akcja o tym nie wie i sprawdza podane jej warunki. A skoro 22 nadal jest “After sunset”, to warunek jest prawidłowy), czyli jeśli PRAWDA to odpalamy światło i przechodzimy do następnej instrukcji (której nie ma), ale nie sprawdzamy pozostałych warunków (tak działa choose - po znalezieniu pierwszego prawdziwego warunku, nie sprawdza pozostałych).
A że “po 22” zawsze jest “po sunset”, to do warunku 2 (gaszącego światło nigdy nie dojdzie).
Rozwiązań tego problemu jest kilka - od najprostszych i najmniej eleganckich (a przez co potencjalnie problematycznych), po bardziej skomplikowane i idiotoodporne od strony użytkownika. Zależy na czym użytkownikowi zależy.
Jeśli użytkownik, chce tylko zapalić światło o zachodzie i zgasić je o 22, to wystarczy zamienić miejscami warunki w “choose”. Jednak jest to “brzydkie rozwiązanie”. Ja bym dodał jeszcze dla obu warunków sprawdzenia czy światło jest już zapalone, albo czy jest już zgaszone.
Oczywiście automatyzacje tę można wzbogacić o takie cuda, jak zapalenie światła, jeśli ktoś je zgasi, lub jeśli się nie zapali, między zachodem słońca a 22. Można też dodać pilnowanie, by po 22 zawsze było zgaszone, nawet jeśli ktoś je zapali.
Tak czy inaczej, umiejętność używania i rysowania algorytmów (zasadniczo jest to bardzo proste) bardzo ułatwia pisanie automatyzacji. Czy projektowanie innych rozwiązań w językach programowania - a do tego w zasadzie zabawa w HA się sprowadza.
Wygląda ok, ale oczywiście wymaga przetestowania. Jednak jedna uwaga, nie mieszał bym różnych zapisów jeśli nie ma takiej absolutnej konieczności (chodzi o czytelność kodu).:
- condition: state
entity_id: light.lampa_salon
state: "on"
@MariuszAK Twoje rozwiązanie jest ok. Ja jednak skłaniam się do bardziej łopatologiczych rozwiązań, może wydawać się to lekko przerost formy nad treścią (np. choć funkcje “and” są tu w praktyce niepotrzebne - to bardzo przydatne, jak za rok czy dwa zajrzymy do tej automatyzacji, będziemy dokładnie wiedzieli jak działa), ale za to jak coś zachowa się nie tak jak oczekujemy, to możemy łatwo debugować przez “trace”.
alias: >-
Automatyzacja sterowania lampą salon po zachodzie i wyłączenie o określonej
godzinie
description: ""
trigger:
- platform: sun
event: sunset
offset: 0
id: zachod
- platform: time
at: "22:00:00"
id: godzina_22
condition: []
action:
- choose:
- conditions:
- condition: and
conditions:
- condition: not
conditions:
- condition: state
entity_id: light.lampa_salon
state: "on"
- condition: trigger
id: zachod
sequence:
- type: turn_on
device_id: e69ae53d081101a2fd649914f6984e79
entity_id: light.lampa_salon
domain: light
brightness_pct: 5
- conditions:
- condition: and
conditions:
- condition: not
conditions:
- condition: state
entity_id: light.lampa_salon
state: "off"
- condition: trigger
id: zachod
sequence:
- type: turn_off
device_id: e69ae53d081101a2fd649914f6984e79
entity_id: light.lampa_salon
domain: light
mode: single
Nie miałem ostatnimi dniami za wiele czasu aby odpisać i chociaż przetestować, ale wczoraj pod wieczór udało się przysiąść do tematu, wrzuciłem Twoją automatyzację bo wydała mi się najbardziej przyszłościowa, niestety efekt dalej ten sam, zapala swiatło o zachodzie słońca ale o 22:00 nie gasi go, może w tym tygodniu będę miał trochę więcej czasu i usiądę do zdebugowania problemu.