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