Sensor na bazie ostatniego roku innej encji

Witajcie,
Sprawa pewnie prosta ale się zakręciłem. Mam encję “sensor.kwh_in” w której mam pobraną energię. Jak zrobić sensor, który zliczy mi ile pobrałem energii przez ostatni rok od dzisiaj?

Ustawienia → Urządzenia oraz usługi → Pomocnicy → Utwórz pomocnika → Licznik mediów.

Tak, wiem, ale z tego co zauważyłem taki pomocnik liczy od momentu stworzenia pomocnika, a nie od zadeklarowanego czasu. Tzn. jak go stworzę dziś, to zacznie od “0” i będzie liczył od dziś pobraną wartość - w cyklu rocznym. Mi chodzi żeby policzył z wartości historycznych :slight_smile:

Nie policzy ale możesz ustawić jego wartość początkową ręcznie.

No właśnie, ale chciałbym żeby to się robiło samo :slight_smile: Co więcej, dążę do tego aby ta wartość zmieniała się dokładnie w cyklu rocznym - czyli dziś ma mi pokazać pobraną od maja 2023 do maja 2024, a w za miesiąc od czerwca do czerwca.

Chodzi Ci o porównanie rok do roku dany miesiąc? To raczej będzie trzeba użyć template sensor.
Albo użyć integracji z Grafana.

Dokładnie. Mając fotowoltaikę mam 12 miesięcy na zużycie nadwyżki - i tę nadwyżkę chciałbym wyliczyć. Muszę więc mieć wartość energii pobranej i oddanej w przeciągu ostatniego roku.
Próbowałem użyć template, ale składnia YAML mnie od zawsze przeraża :slight_smile: stąd też poszukiwanie “gotowca”. Próbowałem np.

  - trigger:
      platform: template
      value_template: '{{ ( now() + timedelta(years=1) ).date() }}'
    sensor:
      - name: Energia pobrana ostatnie 12 miesięcy
        unit_of_measurement: kWh
        icon: mdi:counter
        state: "{{ states('sensor.kwh_in') }}"

ale coś nie działa…

Nie mam pojęcia, jak i czy w ogóle da się to zrobić template sensorem, ale jeśli to nie musi być sensor, a wystarczy wyświetlanie wyliczonej wartości, to teoretycznie można to zrobić przy pomocy karty statistics.

Niestety jest w niej błąd, który obecnie powoduje, że nie bierze danych z long history (czyli powyżej 10-11 dni) przy ustawieniu rolling window (czyli właśnie tego, czego chcesz, okres od X dni temu do dzisiaj).

Więc, jeśli poczekasz na naprawienie tego błędu, to powinno to w przyszłości działać.

Karta:

Bug już ma nawet przygotowaną łatkę, ale od półtora miesiąca żaden inny dev się nie pofatygował (swoją drogą, nie wiem czy to jest normalne i jaka jest etykieta w takich sprawach, nie chcę im spamować), żeby zrobić review:

Opcje calendar i fixed period działają poprawnie, więc tymczasowo można z nich korzystać. Niestety nie robią dokładnie tego, co chcesz. Pierwsza pozwala na policzenie danych za obecny, czy któryś z poprzednich miesiąc albo rok. Druga za stały okres od-do konkretnych dat. Więc jeśli wystarczy Ci jednarozowo policzenie, to ta druga opcja da radę.

Swoją drogą, te 12 miesięcy na zużycie nadwyżki nie jest liczone od rozliczenia (faktury), a nie od momentu wprowadzenia energii do sieci?

Hmmm, liczyłem że to da się zrobić prościej, w sumie to rozbija się o “sprawdź wartość dziś”, “sprawdź wartość XX temu” i odejmij od siebie…

Co do PV w PGE “klient ma 12 miesięcy na wykorzystanie wprowadzonej nadwyżki licząc od daty jej wprowadzenia”.

Edit: jednak się. Ponieważ HA nie trzyma danych długo, więc kiedyś uruchomiłem długoterminowe logowanie danych z użyciem InfluxDB (Home Assistant Community Add-on: InfluxDB - Home Assistant OS - Home Assistant Community) i stamtąd da się dane wyciągnąć:

sensor:
  - platform: influxdb
    host: xxxxxxxxxxxxxx
    port: xxxx
    username: xxxxxxxxxxxxxx
    password: xxxxxxxxxxxxxxxxxxx
    queries:
      - name: Energia pobrana do DZIŚ
        unit_of_measurement: "kWh"
        value_template: '{{ value }}'
        group_function: min
        where: '"entity_id" = ''kwh_in'' and time > now() - 1d'
        measurement: "kWh"
        field: value
        database: home_assistant
      - name: Energia pobrana ROK temu
        unit_of_measurement: "kWh"
        value_template: '{{ value }}'
        group_function: min
        where: '"entity_id" = ''kwh_in'' and time > now() - 366d'
        measurement: "kWh"
        field: value
        database: home_assistant

potem tylko matematyka:

template:
  - sensor:
      - name: Energia pobrana ostatnie 12 miesięcy
        state: "{{ states('sensor.energia_pobrana_do_dzis') | float(0) - states('sensor.energia_pobrana_rok_temu') | float(0) }}"
        unit_of_measurement: "kWh"
        device_class: energy

i voila! Nie wiem dlaczego nie udało się dać “time = now()”, ale nie znam pythona i metodą prób i błędów zadziałała opcja liczenia energii z “wczoraj” oraz “rok temu minus dzień”, ale nie robi to zasadniczej różnicy.