Automatyzacja minutnik

Cześć,

Chciałbym zrobić automatyzację za pomocą wbudowanych automatyzacji w HA, która po wystartowaniu pomocnika “minutnik” włączy mi światło na czas trwania odliczania. Dodałem pomocnik minutnik Jednak nijak nie mogę wykonać automatyzacji. Próbowałem wyzwalacza “Stan” i przez chwilę działo mi włączanie jednak po skończeniu odliczania nie wyłączało światła.
Proszę o pomoc

:thinking:
Alla coś takiego

  alias: Włącz światło - minutnika
  trigger:
    - platform: state
      entity_id: timer.test    # twój pomocnik "minutnik"
      to: 'active'
  action:
    - service: light.turn_on
      entity_id:  light.stolik_1
    - delay: "{{ states('timer.test') }}"
    - service: light.turn_off
      entity_id: light.stolik_1 

:information_source: nie testowałem

Podpowiesz gdzie to mam wpisać? Tutaj “/config/configuration.yaml” ?

Automatyzacji:
Opcja 1
.Dodaj , nową automatyzacje, po prawej 3 kropeczki Edycjia w YAML. wklej kod zmień na Edytuj w edytorze wizualnym i pozmieniaj na własne encje i dostosuj do potrzeb

Opcja 2
Utwórz plik automations.yaml w folderze config

I tam dodaj kod

Pozmieniałem pod swoje encje i włącza światło lecz nie wyłącza

alias: Włącz światło - minutnika
description: ""
trigger:
  - platform: state
    entity_id: timer.stolik_1
    to: active
action:
  - service: switch.turn_on
    entity_id: switch.sonoff_1000f46fe1_3
  - delay: "{{ states('timer.stolik_1') }}"
  - service: switch.turn_off
    entity_id: switch.sonoff_1000f46fe1_3

Ja zrobiłem tak
Pomocnik timer.mminutnik
Pomocnik input_number.ile_sekund od 10 do 300

Automatyzacji:

 alias: Włącz światło - minutnika
description: ""
trigger:
  - platform: state
    entity_id: timer.mminutnik
    to: active
action:
  - service: light.turn_on
    data: {}
    target:
      entity_id:
        - light.garaz
  - delay: "{{ states('input_number.ile_sekund') }}"
  - service: light.turn_off
    data: {}
    target:
      entity_id:
        - light.garaz

Nieaktywny
ScreenShot_20230821212724
Suwakiem ustawiasz ile sekund ma działać i aktywujesz minutnik
Aktywny:
ScreenShot_20230821212835
U mnie działa :grinning:

Jeśli potrzebujesz stałych przedziałów czasu np. po 20 sekundach, po 2 minutach włącz i wyłącz światło
Lepiej jest zrobić kilka Skryptów
/
Np. Skrypt

alias: "Włącz światło w garażu na 1 minutę  "
sequence:
  - service: light.turn_on
    data: {}
    target:
      entity_id: light.garaz
  - delay:
      hours: 0
      minutes: 1
      seconds: 0
      milliseconds: 0
  - service: light.turn_off
    data: {}
    target:
      entity_id: light.garaz
mode: single

Po kliknięciu włączy i po 1 minucie wyłączy światło
/
Ten skrypt jest “kompletny” nie potrzebuje dodatkowych danych wejściowych (minutnika…)
W delay:zmieniasz tylko czas po jakim opóźnieniu ma wykonać następną akcje, w tym przypadku jest ustawiona 1 minuta.
Jeśli potrzebujesz np. 3 skrypty ( wyłącz po 1 godzinie,2,3)

Opóźnienie 1h

  - delay:
      hours: 1
      minutes: 0
      seconds: 0
      milliseconds: 0

:information_source:
service: light.turn_on - włącz światło (żarówka)
Jeśli oświetlenie masz przez włącznik, gniazdko musisz zastosować
service: switch.turn_on

Czy ten skrypt sam Ci wrzuca czas z suwaka do minutnika? Nie umiem tego wykonać. Mi zależy mieć możliwość ustawiania 1 godzina 2 lub trzy

Ok z innej beczki:
Dodaj pomocnika np. przez wpis w configuration.yaml

input_number:
  ile_minut:
    name: Światło w garażu ile minut
    initial: 20
    min: 1
    max: 120
    step: 1

max: 120- max ile minut (możesz zmienić do zapotrzebowania )

lub przez interfejs HA.

Następnie stwórz automatyzacje:

alias: Włącz i wyłącz światło w garażu po czasie
description: ""
trigger:
  - platform: state
    entity_id:
      - input_number.ile_minut
action:
  - service: light.turn_on
    entity_id: light.garaz
  - delay:
      minutes: "{{ states('input_number.ile_minut') | int }}"
  - service: light.turn_off
    entity_id: light.garaz
mode: single

Podmień encje ( light.garaz na light.xxx)
Przeładuj konfiguracje HA (Narzędzia deweloperskie lub sprawdź poprawność HA i restart)

Dodaj nową kartę np. encje lub pusta i wklej ten kod:

type: entities
entities:
  - entity: light.garaz
  - entity: input_number.ile_minut
    secondary_info: last-changed
state_color: true

:information_source:
light.garaz- podmień na swoje oświetlenie
secondary_info: last-changed - jest to dodatkowa informacja o ostatniej zmianie stanu ( nie jest wymagana).

Teraz kiedy przesuniesz suwak np. na 20 to automatycznie włączy się światło i po 20 minutach się wyłączy
Efekt: :grinning:
ScreenShot_20230822212736

Twoje rozwiązanie działa :slight_smile: jednak jeszcze brakuje mi jakiegoś licznika, który pokazywałby czas pozostały do wyłączenie stąd planowałem wykorzystać minutnik :slight_smile:

:thinking:
Zależy jakiego formatu potrzebujesz, jeśli 01:16:41 (godzina .minuta.sekunda)
To możesz stworzyć sensor, który będzie zliczał czas do “końca” czasu ( :grinning:) a następnie wyświetli się napis
“Jest wyłączone”

...
          state: >-
          {% if is_state('light.garaz', 'on') and states('input_number.ile_minut') %}
            {% set time_remaining = (states('input_number.ile_minut') | int * 60) - ((as_timestamp(now()) - as_timestamp(states.light.garaz.last_changed))) %}
            {% if time_remaining > 0 %}
              {{ time_remaining | timestamp_custom('%H:%M:%S', false) }}
            {% else %}
              00:00:00
            {% endif %}
          {% else %}
            Jest wyłączone
          {% endif %}

ScreenShot_20230826181116

/
Jeśli nic nie zmieniałeś w konfiguracji HA
To dodaj wpis do configuration.yaml

template:
  - sensor:
      - name: "Pozostały czas światła w garażu"
        unit_of_measurement: "°C"
        state: >-
          {% if is_state('light.garaz', 'on') and states('input_number.ile_minut') %}
            {% set time_remaining = (states('input_number.ile_minut') | int * 60) - ((as_timestamp(now()) - as_timestamp(states.light.garaz.last_changed))) %}
            {% if time_remaining > 0 %}
              {{ time_remaining | timestamp_custom('%H:%M:%S', false) }}
            {% else %}
              00:00:00
            {% endif %}
          {% else %}
           Jest wyłączone
          {% endif %}




Zapisz, sprawdź poprawność , przeładuj lub restartHA

Można w configuration.yaml ale po jakiś czasie będziesz miał tysiące linii kodu, dlatego HA ma możliwość rozbicia konfiguracji na mniejsze “części”

automation.yaml
template.yaml
switch.yaml
device_tracker.yaml
customize.yaml

Po dodaniu “template.yaml” w folderze config
Następnie, sensory template umieszczamy w tym pliku, podobnie kamery do camera.yaml itp.

Podzielenie konfiguracji:

Tworzenie sensorów:

Przepraszam, że tak męczę. Gdzie mam dodać ten kod ?

@Pawel_LSK
jeśli się pytasz o ten to do configuration.yaml

edit: tylko musiałem wykasować tą linię, bo inaczej nie chciało działać

unit_of_measurement: "°C"
1 polubienie

Witam
Wielki dzięki!!
Ustawienia działają bez żadne zgrzytu. Dzięki temu zaoszczędziłem sporo czasu.
Czy jest możliwość

  1. dodania przycisku, który by zatrzymywał i zerował ustawienie czasu odliczania
  2. błyśniecie lampą na np. 1 min przed końcem odliczania.

Pozdrawiam

Jeśli zmienisz w automatyzacji tryb pracy na mode: restart, automatyzacja nie “dojdzie” do końca kody a nowy wyzwalacz rozpocznie automatyzacji od początku.

( jak ustawiłeś czas np. 5 minut i następnie zmienisz na 2 minuty zmiana nie nastąpi, ponieważ automatyzacja musi się zakończyć)

Jeśli zmienisz input a dokładniej min: 0 i tryb będzie mode: restart
Po ustawieniu czasu pracy na “0” światło się wyłączy a każda zmiana “czasu” uruchomi od początku automatyzacje

błyśniecie lampą na np. 1 min przed końcem odliczania.

Na końcu kodu masz wyłączenie światła, jeśli dopiszesz , “czekaj pół sekunduj” i “włącz światło” następnie “czekaj 1 minuta” i “wyłącz światło”

Uzyskasz efekt ekstra minuty po błyśnięciu :grin:

Dzięki za szybką reakcję
Trochę zwlekałem z odpowiedzią ale jak zwykle brak czasu.
Wszystko śmiga jak talala.
Trochę mi nie pasi ta extra minuta ale ‘darowanemu zwierzakowi się w kły nie patrzy’
Dzięki i pozdro

Trochę mi nie pasi ta extra minuta

Podmień / dopisz



alias: Włącz i wyłącz światło w garażu po czasie
description: ""
trigger:
  - platform: state
    entity_id:
      - input_number.ile_minut
action:
  - service: light.turn_on
    entity_id: light.garaz
  - delay:
      minutes: "{{ states('input_number.ile_minut') | int-1 }}"    #  Edytowane 
  - service: light.turn_off
    entity_id: light.garaz
mode: restart

- 1
Odejmie jedną minutę od wprowadzonej wartości.

Dopisane " błyśniecie" doda jedną minutę, czyli po ustawieniu 10 minut światło zgaśnie po 10 minutach + 0.5 sekundy :grinning:

Oficjalnie stwierdzam że mam jakieś otępienie bo nie wiem co i gdzie
— edit
Gra i bucy, tylko jest jeden mankament z pokazywaniem pozostałego czasu np. gdy wł. 3 min to pokaże 3min i zacznie odliczać ale gdy pokaże że została 1 min i nastąpi mrugniecie lampy czas pokazywania ile zostało znowu pokazuje 3min. Tak się dzieje dla każdej nastawy.
Jak często powinien odświeżacz ‘pozostały czas’?

last_changed - Stan żarówki

Po mrugnięciu (On/Off) zmienia się “liczenie” od ostatniej zmiany.

Tak jak chcesz właśnie przetestował i działa a całość została rozbita ma sekcji.

input_number:
  ile_minut:
    name: Światło w garażu ile minut
    initial: 0
    min: 0
    max: 120
    step: 1

min: 0 - ustawienie “0” można wykorzystać do wyłączenia (przesuń suwak na “0” a światło zgaśnie)

Automatyzacja : ( ma zadanie włączyć i wyłączyć światło po zmianie "Ile minut "

alias: Włącz i wyłącz światło w garażu po czasie
description: ""
triggers:
  - entity_id:
      - input_number.ile_minut
    trigger: state
actions:
  - entity_id: light.garaz
    action: light.turn_on
  - delay:
      minutes: "{{ states('input_number.ile_minut') | int }}"
  - entity_id: light.garaz
    action: light.turn_off
mode: restart

Sensor: (“Czas do wyłączenia światła w garażu” - wylicza ile zostało czasu do wyłączenia światła)

 {% if is_state('light.garaz', 'on') %}
    {% set ile_minut = states('input_number.ile_minut') | int %}
    {% set czas_wlaczenia = as_timestamp(states.light.garaz.last_changed) %}
    {% set czas_pozostaly = (ile_minut * 60) - (as_timestamp(now()) - czas_wlaczenia) %}
    {% if czas_pozostaly > 0 %}
      {{ czas_pozostaly | timestamp_custom('%M:%S', false) }}  # tylko minuty i sekundy
    {% else %}
      00:00    # format czasu, zostanie wykorzystany/rozbity w następnej automatyzacji  
    {% endif %}
  {% else %}
    Jest wyłączone
  {% endif %}

Automatyzacja: ( która tylko przygasza chwilowo światło )

alias: Przygaś światło w garażu przed wyłączeniem
description: "Przygaś światło do 20% na 1 sekundę, a następnie ustaw na 100%"
trigger:
  - platform: template
    value_template: >
      {% set czas = states('sensor.czas_do_wylaczenia_swiatla_w_garazu') %}
      {% set minuty = czas.split(':')[0] | int %}
      {% set sekundy = czas.split(':')[1] | int %}
      {% set czas_w_sekundach = (minuty * 60) + sekundy %}
      {{ czas_w_sekundach < 60 }}
condition: []
action:
  - service: light.turn_on
    target:
      entity_id: light.garaz
    data:
      brightness_pct: 20
  - delay:
      seconds: 1
  - service: light.turn_on
    target:
      entity_id: light.garaz
    data:
      brightness_pct: 100
mode: single

Mam nadzieje że masz żarówkę z możliwością ustawienia jasności :grinning:

:information_source:Przygaszenie nie zmienia stanu żarówki (states.light.garaz.last_changed) więc nie ma odliczania od “nastawy” po “mrugnięciu”

Np. # format czasu, .. w kodzie, jest komentarzem/opisem zwłaszcza w szablonach proponuje je usunąć.

Przykro, ale mam lampę on/of i żadnej możliwości zmiany, tak, że d…