Nie działające wyłączenie lampy po uruchomieniu jej przez encję zachodu słońca

Cześć

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

Poczytaj i dostosuj - Prosty warunek "wschód słońca - 23:00"

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ś :slight_smile:

:thinking: Do sprawdzenia

Włącza lampę po zachodzie słońca i wyłączając ją o godzinie 22:00, tylko jeśli jest włączona.

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
          - condition: state
            entity_id: light.lampa_salon
            state: "on"
        sequence:
          - type: turn_off
            device_id: e69ae53d081101a2fd649914f6984e79
            entity_id: light.lampa_salon
            domain: light
    default: []
mode: single

Nie zadziała. Dalej nie będzie gasło.

A mógłbyś wyjaśnić dlaczego ? Wygląda na to, że:

  • jeśli po zachodzie to włączy lampę
  • jeśli po 22 i lampa włączona to wyłączy lampę
  • jeśli włączona przed zachodem to ją “ponownie” włączy
  • jeśli wyłączona po zachodzie a przed 22 to pozostanie wyłączona

wg mnie zadziała zgodnie z założeniami.

Pozwól, że zacytuje uzupełniając:

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:

  1. Jeśli jest po zachodzie słońca.
  2. 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:

  1. 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.

1 polubienie

A tak ?

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
          - condition: template
            value_template: "{{ is_state('light.lampa_salon', 'off') }}"
        sequence:
          - type: turn_on
            device_id: e69ae53d081101a2fd649914f6984e79
            entity_id: light.lampa_salon
            domain: light
            brightness_pct: 5
  - conditions:
      - condition: time
        after: "22:00:00"
      - condition: state
        entity_id: light.lampa_salon
        state: "on"
    sequence:
      - type: turn_off
        device_id: e69ae53d081101a2fd649914f6984e79
        entity_id: light.lampa_salon
        domain: light
mode: single

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: template
            value_template: "{{ is_state('light.lampa_salon', 'off') }}"
      - 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
1 polubienie

Cześć

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.

:thinking: tylko czyją? Można tylko zgadywać :grin:.

Mój błąd, odpowiadałem @Łukasz_T nie wiem dlaczego w ten sposób się dodało.

Sprawdź czy ta akcja w ogóle gasi lampę:

type: turn_off
device_id: e69ae53d081101a2fd649914f6984e79
entity_id: light.lampa_salon
domain: light

Jeśli gasi to spróbuj uproszczonej wersji automatyzacji:

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: trigger
            id: zachod
        sequence:
          - type: turn_on
            device_id: e69ae53d081101a2fd649914f6984e79
            entity_id: light.lampa_salon
            domain: light
            brightness_pct: 5
      - conditions:
          - condition: trigger
            id: zachod
        sequence:
          - type: turn_off
            device_id: e69ae53d081101a2fd649914f6984e79
            entity_id: light.lampa_salon
            domain: light
mode: single

Jeśli nie gasi, to spróbuj tej akcji do gaszenia:

service: light.turn_off
data: {}
target:
  entity_id: light.lampa_salon