Rynkowe ceny energii elektrycznej (mstepuch) - wyszukiwanie okienka najtańszej energii

Cześć, jestem jeszcze zielonym użytkownikiem HA, trafiłem na to Forum tropem jak skorzystać z API pse.pl - i znalazłem to, czego szukałem. Skorzystałem z integracji napisanej przez @mstepuch - dziękuję!

//mod edit - wątek dotyczy rozwiązania opisanego tam

Chciałbym jednak, aby HA wysyłał mi powiadomienie kiedy zaczyna się okienko najtańszego prądu.

Stworzyłem więc sensor:

- platform: template
  sensors:
    lowest_price_start_time:
      friendly_name: "Lowest price start time"
      value_template: "{{ today_at(states.sensor.lowest_price_window_daytime.attributes.start_time) | as_timestamp | timestamp_custom('%H:%M:%S') }}"

i w Developer Tools → States pokazuje mi ładnie jego wartość jako np. 12:00:00

Niestety, kiedy robię automatyzację:

alias: New Automation
description: ""
trigger:
  - platform: time
    at: sensor.lowest_price_start_time
condition: []
action:
  - service: notify.persistent_notification
    metadata: {}
    data:
      message: Test
mode: single

Nic się nie dzieje.

Widzę inne sensory w states, np. sensor.sun_next_dawn ma dodatkowy atrybut: device_class: timestamp - kiedy ja dodam ten atrybut do mojego sensora, przyjmuje on wartość unknown.

Co źle robię? Sorry z góry za takie pytanie, ale nie jestem programistą i starałem się samemu rozwiązać problem, ale niestey bezskutecznie.

Cześć,
W oknie tej automatyzacji kliknij w prawym górnym rogu Ślady
i zobacz czy automatyzacja się wykonała.

Jeśli trigger jest spełniony to powinna się uruchomić.
Może po prostu nie wyświetla powiadomienia.
Nie mam doświadczenia z persistent notification:

Próbowałeś wywalić to? (chcesz mieć timestamp, a formatujesz sobie wartość inaczej)
| timestamp_custom('%H:%M:%S)
a jeśli chcesz mieć klasę urządzenia, to trzeba ją dodać

- platform: template
  sensors:
    lowest_price_start_time:
      friendly_name: "Lowest price start time"
      value_template: "{{ today_at(states.sensor.lowest_price_window_daytime.attributes.start_time) | as_timestamp }}"
      device_class: timestamp

PS nie sprawdzałem powyższego i nie wiem czy taki sensor może być wyzwalaczem automatyzacji (choć na logikę powinien).

dodawałem:

atrybut: device_class: timestamp - kiedy ja dodam ten atrybut do mojego sensora, przyjmuje on wartość unknown

teraz usunąłem:

| timestamp_custom('%H:%M:%S')

i dodałem:

device_class: timestamp

Stan sensora: unavailable

Kiedy usuwam device_class: timestamp to stan sensora przyjmuje:
1722333600.0 - jest to unix timestamp i prawidłowo oznacza:
Tue Jul 30 2024 10:00:00 GMT+0000

Nie wykonała się. Jak zmienię na “fixed time”, wtedy kod jest:

platform: time
at: "12:00:00"

i się wykonuje bez problemu.

Mój sensor pierwotnie zwracał także 12:00:00, ale nie działał.

Czyli trigger nie działa.
Ja bym popytał Chat GPT może podpowie :slight_smile:

Rozumiem że chcesz żeby kiedy jest najtaniej wyświetlało się powiadomienie na ekranie i pewnie włączać wtedy jakieś urządzenia które i tak miał byś włączyć tego dnia. Czy o to chodzi żeby nie oddawać tanio energii, a ją zużywać???

No tak, jak zadziała automatyzacja, to potem już można wszystko :wink: powiadamiać lub sterować. Na razie chodzi o drugi case: jak mam puścić pranie to lepiej kiedy prąd odkopują ode mnie za zero niż po 40 groszy :wink:

Zgodnie z tym powyżej automatyzacja wykona sie tylko raz o tej godzinie co wartość encji sensor.lowest_price_start_time. Kolejnego dnia o 12:00:00 ta automatyzacja się już nie wykona. Oczywiście sensor musi być typu “timestamp” device class. Żeby to miało prawo działać, sensor musi zawierać date i czas wtedy automatyzacja będzie działać jak oczekujesz.

1 polubienie

Dzięki! Wywaliłem mode:single, ale i tak mój HA restartuje się co noc. Obecnie mój sensor zwraca: 2024-07-30T10:00:00+00:00 i ma device_class: timestamp

Jutro okaże się, czy zadziałało (chyba, że wiesz jak dodać mu kilka godzin, to sprawdzę jeszcze dzisiaj)

Tak pytam bo też o tym myślałem ale w sumie to codziennie najtaniej jest
pomiędzy 10:00 a 15:00 +/- 1h.
Wynika to z tego że wtedy wszyscy oddają energię a jest małe zapotrzebowanie (ludzie są w pracy).
I śmiało w tym okresie można uruchamiać odbiorniki :slight_smile:

Wykres cen lipca:
image

1 polubienie

Z dokumentacji HA - Automation Trigger - Home Assistant

Multiple times can be provided in a list. Both formats can be intermixed.

automation:
  trigger:
    - platform: time
      at:
        - sensor.lowest_price_start_time
        - "18:30:00"

A poza tematem:

po co się restartuje? Ma działać non-stop bez restartu, restarty robi się tylko w wymaganych okolicznościach, np. po aktualizacji.

W założeniu zainstalowałem go do sterowania pompą ciepła c.w.u. w zależności od produkcji PV (SolarEdge). Postawiłem go w Azure (nie ja płacę za subskrypcję :wink: ) i wyłaczam na noc, wtedy mniej kosztuje. Wiem, że nie o to tu chodziło …

w templates mozna wrzucic takiego gotowca

      - name: "Najniższa taryfa przez 3h"
        unique_id: najnizsza_taryfa_przez_3h
        state: >
          {% set dzisiaj = state_attr("sensor.TU_WSTAW_NAZWE_SENSORA_RCE", "today") %}
          {% set min_avg = namespace(value=9999999, start="") %}
          {% for i in range(dzisiaj|length - 2) %}
            {% set avg_tariff = (dzisiaj[i].tariff + dzisiaj[i+1].tariff + dzisiaj[i+2].tariff) / 3 %}
            {% if avg_tariff < min_avg.value %}
              {% set min_avg.value = avg_tariff %}
              {% set min_avg.start = dzisiaj[i].start %}
            {% endif %}
          {% endfor %}
          {{ min_avg.value|round(2) }}
        attributes:
          start_time: >
            {% set dzisiaj = state_attr("sensor.TU_WSTAW_NAZWE_SENSORA_RCE", "today") %}
            {% set min_avg = namespace(value=9999999, start="") %}
            {% for i in range(dzisiaj|length - 2) %}
              {% set avg_tariff = (dzisiaj[i].tariff + dzisiaj[i+1].tariff + dzisiaj[i+2].tariff) / 3 %}
              {% if avg_tariff < min_avg.value %}
                {% set min_avg.value = avg_tariff %}
                {% set min_avg.start = dzisiaj[i].start %}
              {% endif %}
            {% endfor %}
            {{ min_avg.start }}
        unit_of_measurement: 'PLN/MWh'

To nie jest dobre rozwiązanie :slight_smile:
Kup jakiegoś cienkiego klienta o odpal lokalnie.
Bardzo łatwo przeniesiesz backup z jednego na drugi

Chyba finalnie mnie to czeka.

To oczywiście działa, w sensie dopisanie godziny na sztywno, raczej chciałbym zmodyfikować wartośc sensora, żeby wskazywał np +2 godziny

Przejrzyj listę pomocników, może któryś typ nada się do tego co chcesz osiągać.

Ja bym szedł w taki wariant:

at "{{ as_timestamp(states('sensor.lowest_price_start_time')) + "plus_2_godziny"}} 

ale teraz nie ma czasu napisać takiej transformacji “plus_2_godziny”.

value_template: "{{ ( today_at(states.sensor.lowest_price_window_daytime.attributes.start_time) | as_timestamp + 7200) | as_datetime }}"

Uff, dzięki za podpowiedzi! Działa.
Mylące było to, że kiedy piszemy automatyzację ze stałą godziną zadziałania musi tam być:

at: "12:00:00"

Więc sformatowałem swój sensor tak, aby zwracał godzinę w tym formacie:

| timestamp_custom('%H:%M:%S')

Jak się okazuje, była to ślepa uliczka, ma zwracać pełny timestamp:
2024-07-30T16:40:00+00:00
oraz device_class: timestamp

Cześć, cieszę się że zadziałało.
Czy możesz dla potomności zebrać cały działający kod w jednym poście.
Najlepiej z informacją gdzie bazuje na moim kodzie.

Ja starałem się zebrać wcześniej ale mogę ponownie wszystko zestawić

1 polubienie