Jak pisałem wyżej, w moim konkretnym przypadku udało się pokonać wroga
Zajęło mi to 5 dni przekopywania netu po forach oraz testowania różnych kombinacji zlepków informacji i wytycznych.
Nie twierdzę że rozwiązanie jest full poprawne względem np. założeń twórców oraz czy przetestowałem wszelkie możliwe kombinacje, ale załapało, działa to nie ruszam
Tak na marginesie, chyba brakuje trochę takiego pełnego, jasnego, klarownego zebranego w jednym miejscu opisu całej funkcjonalności panelu Energia, założeń, wytycznych itp. (albo może ja mało rozumny jestem).
No więc u mnie zagrało to tak (powtórzę trochę opis z pierwszego posta, ale niech będzie pełna instrukcja, może komuś się przyda):
Koniecznie chciałem i użyłem opisanej w pierwszym poście encji “Produkcja dzisiaj” (zerowana codziennie). Na potrzeby przykładu nazwijmy ją “encja_zrodlowa”.
Na jej podstawie poprzez template
utworzyłem nową encję “PV - produkcja”. W przykładzie - “encja_wynikowa”. Zmieniłem jej wartość ze stringa na liczbę, nadałem jednostkę miary kWh
oraz dokonałem odpowiednich przeliczeń dla nowej jednostki miary (z Wh na kWh).
Kod gotowiec:
- platform: template
sensors:
encja_wynikowa:
friendly_name_template: "jakas_nazwa"
unique_id: jakies_id
value_template: "{{ ((states('encja_zrodlowa') | float) /1000) | round(2) }}"
unit_of_measurement: "kWh"
Dodatkowo w pliku customize.yaml
nadałem encji atrybuty: device_class: energy
oraz
state_class: total_increasing
.
Ważne, aby najpierw dodać encję poprzez template
i potem przerestartować HA żeby stworzyła się encja. Dopiero potem dodać wpisy w customize
. Inaczej debuger yaml bedzie krzyczał.
I w sumie to tyle*. Teraz encja oprócz tego że będzie możliwa do dodania do panelu Energia to pomimo zerowania o północy HA nie będzie pokazywał bzdur.
Z moich testów wychodzi, że kluczowy jest atrybut state_class
.
Dla wartości measurement
za każdym razem gdy encja przybierze wartość “0” dzieje się tak jak w problemie opisanym wyżej w tym temacie.
Dla wartości total_increasing
HA “z jakiś powodów” wie, że encja ta może być resetowana (?). To dla mnie jest kompletnie nie jasne i wg mnie nie wynika to z żadnych opisów. Doszedłem do tego na zasadzie prób i błędów i chyba to mnie najbardziej wkurzyło.
*) Jak dotarliście z czytaniem dotąd - gratuluje. Bo teraz zaczyna się jazda
Otóż cały powyższy opis załatwia temat…ale połowicznie
O ile state_class: total_increasing
załatwia problem zerowania encji o północy to niestety nie załatwia problemu gdy encja dostanie wartość “0” z innych powodów/o innej porze doby (?).
Np. gdy enca_zrodlowa z jakiś powodów będzie niedostępna (np. u mnie gdy dodatek w HA do mikroinwertera nie wstał poprawnie) encja_wynikowa będzie miała wartość 0. Wystarczy że przegapimy ten moment i odczyt panelu Energia złapie to - mamy ponownie całą dotychczasową produkcję ze znakiem “minus”. Za ch…olerę nie wiem czemu tak, ale tak jest (sprawdzone na własnej wkurzonej skórze ).
Remedum (może nie idealne, ale jednak) : opcja availability_template
. Dzięki niej możemy określic, że “jeżeli encja_zrodlowa jest niedostępna to encja_wynikowa zwróci wartoś “unavailable” zamiast 0”
Efekt - w opisanym kilka linijek wyżej przykładzie, będziemy mieli przerwę w danych, a nie 0 i w efekcie produkcję na minusie.
Aby zastosować, dodajemy 3 linijki kodu. W pełnej formie kod będzie taki:
- platform: template
sensors:
encja_wynikowa:
friendly_name_template: "jakas_nazwa"
unique_id: jakies_id
availability_template: >-
{%- if not is_state("encja_zrodlowa", "unavailable") %}
true
{%- endif %}
value_template: "{{ ((states('encja_zrodlowa') | float) /1000) | round(2) }}"
unit_of_measurement: "kWh"
I teraz wreszcie ma to ręce i nogi i działa jak należy. Przynajmniej u mnie
Teraz jeszcze po kilku dniach działania, myślę że warto dodać jeszcze do tego małą automatyzację żeby gdy encja_wynikowa ma stan “unavailable” dłużej niż np. 10 min żeby HA dał o tym powiadomienie adminowi, aby zminimalizować czas bez danych (ja przez to mam wyrwę w danych przez cały 1 dzień).
Przepraszam za tak koszmarnie długi wywód. Jak sobie przypomnę ile zajęło mi dotarcie do tych informacji, zlepienie ich w całość i przetestowanie…yyhhh.
Jeśli dobrnęliście z czytaniem aż tutaj - gratuluję i dziękuję
Jeśli komukolwiek choć trochę to pomoże, będzie mi bardzo miło