Bilans energii godzinowy

Witam,
Chciałbym stworzyć sobie pomocnika, który oblicza różnicę energii pobranej i energii oddanej z domu przez licznik energii w ciągu godziny (dokładnie tak jak wygląda bilansowanie godzinowe uwzględniane przez zakład energetyczny przy rozliczeniu prądu)
Stworzyłem sobie pomocnika “Licznik mediów”, który mi oblicza ilość energii pobranej oraz oddanej z włączonym okresowym resetowaniem co godzinę

image
Wykres wygląda prawidłowo.

Stworzyłem dodatkowego pomocnika, który oblicza tą różnicę uwzględniając bieżący stan:

sensor:
  - platform: template
    sensors:
      bilans_energii_godzinowy:
        device_class: power
        unit_of_measurement: "W"
        value_template: >
          {% set pobor = states('sensor.energia_pobrana_godzinowa') | float %}
          {% set oddanie = states('sensor.energia_oddana_godzinowa') | float %}
          {{ pobor - oddanie }}

Jednak do pełni szczęścia tą róznicę muszę obliczyć nie w danej chwili tylko dla maksymalnej wartości po pełnej godzinie zegarowej.
Wydaje mi się, że są 2 opcje:

  • Wywołać jakaś automatyzację powiedzmy 5s przed końcem pełnej godziny i wtedy obliczyć tę różnicę, jednak nie wiem jak ją zapamiętać
  • Odwołać się do historii encji, żeby obliczyć różnicę dla poprzedniej wartości tej różnicy, może pętla jakaś dla maksymalnych wartości w danej godzinie w danym dniu? ale nie wiem czy w ogóle da się odwoływać do historii encji.

Ogólnie wykres bilansu energii wygląda następująco:
image

A może da się z powyższego wykresu stworzyć licznik, który będzie zliczał tylko maksymalne wartości co godzinę dodatnie dla poboru i ujemne dla oddania?

Efekt końcowy, który chcę uzyskać:
Wskazanie licznika poboru oraz oddania energii pomniejszone o energię zbilansowaną w ciągu godziny.

Jeśli ktoś ma pomysł lub wie jak to zrobić będę wdzięczny.

Też kiedyś z tym walczyłem, dzięki pomocy innych nawet udało się wygrać tą potyczkę.Poczytaj i zobacz: Wykres zmagazynowanej energii gotowej do odbioru - #48 przez Piter

Do bilansowania netto jest integracja, działa idealnie, moje wskazania są identyczne z danymi PGE

https://github.com/MiguelAngelLV/balance_neto

Do sprawdzenia ile mam energii w wirtualnym magazynie używam tej integracji:

https://github.com/hif2k1/battery_sim/

Dziękuję za przesłane materiały. Najpierw spróbowałem ogarnąć temat bez integracji. Skorzystałem z opcji pierwszej, czyli “Wywołać jakaś automatyzację powiedzmy 5s przed końcem pełnej godziny i wtedy obliczyć tę różnicę”. Dokładnie tą samą metodę wykorzystuje integracja “balance_neto”, którą też wykorzystałem. Dla potomnych podam kod, jakby ktoś chciał to ogranąć ręcznie:

template:
  - trigger:
      - trigger: time_pattern
        hours: "*"
        minutes: 59
        seconds: 58
    sensor:
      - name: "Energia pobrana zbilansowana godzinowa"   
        unique_id: "energia_pobrana_zbilansowana_godzinowa"
        device_class: energy
        unit_of_measurement: "kWh"
        state_class: "measurement"
        state: >
          {% set pobor = states('sensor.energia_pobrana_godzinowa') | float(0) %}
          {% set oddanie = states('sensor.energia_oddana_godzinowa') | float(0) %}
          {% set roznica = pobor - oddanie | float(0) %}
          {% if(roznica > 0) %}
            {{ roznica }}
          {% else %}
            {{ 0 }} 
          {% endif %}    
      - name: "Energia oddana zbilansowana godzinowa"   
        unique_id: "energia_oddana_zbilansowana_godzinowa"
        device_class: energy
        unit_of_measurement: "kWh"
        state_class: "measurement"
        state: >
          {% set pobor = states('sensor.energia_pobrana_godzinowa') | float(0) %}
          {% set oddanie = states('sensor.energia_oddana_godzinowa') | float(0) %}
          {% set roznica = oddanie - pobor | float(0) %}
          {% if(roznica > 0) %}
            {{ roznica }}
          {% else %}
            {{ 0 }} 
          {% endif %}  

Czyli 2 sekundy przed końcem godziny po prostu obliczam różnicę pomiędzy energią oddaną w danej godzinie a pobraną.

Następnie zdefiniowałem sobie liczniki mediów w pomocnikach, które zliczają z tych obliczonych zmiennych godzinowych wartości dzienne, miesięczne i całkowite.