Bilansowanie wektorowe w panelu ENERGY

TL;DR
Jak włączyć bilansowanie wektorowe w panelu ENERGY?

Instalacja on-grid.
Inwerter Growatt MOD 10KTL3-X
Licznik dwukierunkowy trzyfazowy EASTRON SDM630.
Licznik PGE: GAMA 300 Typ G3M.144

Mój licznik z PGE ma bilansowanie wektorowe. Świetnie jest to wytłumaczone tutaj:

Panel ENERGIA niestety tego nie uwzględnia. Pobiera on informację z SDM630 z dwóch sensorów:

  • SDM630 Import Wh since last reset
  • SDM630 Export Wh since last reset
    i wrzuca do wykresu ile zostało wyeksportowane a ile zostało zaimportowane. Jeżeli się nie mylę to pokazuje też autokonsumpcję.

Na wykresie widzimy:

  • użyta energia słoneczna: 2,58 kWh
  • import: 17,77 kWh
  • export: 4,02 kWh

Dodając użytą energię słoneczną i export otrzymamy dzienną produkcję 6,6 kWh.

I w moim przypadku nie są to poprawne dane z tego względu że na liczniku z PGE mam bilansowanie wektorowe. Faktycznie z domu wyszło 4,02 kWh ale większość tej energii została przez licznik GAMA zbilansowana. Czyli PGE nie wrzuciło mi 4,02 kWh do 2.8.0 (czyli nie policzyło mi jako eksport) bo widziało, że jeżeli na innych fazach zużywam np. 3 kWh to odjęło mi od importu export i na sam eksport policzyło 1,02 kWh (wiem, że to zawiłe ale osoby które mają PV i zapoznały się z w/w filmem wiedzą jak to działa).

Widać też po słupkach godzinowych, że w godzinach 08:00 oraz od 11:00 do 15:00 zapotrzebowanie (import) było większy niż produkcja więc export został zbilansowany do zera i został naliczony lekki import.

Czy w Home Assistancie jest opcja na uruchomienie bilansowania wektorowego? Będę wdzięczny jak mnie naprowadzicie w jaki sposób to poprawnie liczyć. Do dyspozycji mam w SDM630 encje na każdej fazie zarówno import jak i eksport. Myślę, że musiał bym stworzyć nowe encje i napisać funkcję która sprawdzała by w danym momencie czy łączny import na SDM630 jest większy niż łączny export i jeżeli tak to zwiększała by import. Jeżeli nie, to zwiększała by export. Dobrze myślę?

BTW. Supla ma już coś takiego od maja 2020:
https://forum.supla.org/viewtopic.php?f=46&t=6654

A może istnieje już takie rozwiązanie? Podzielcie się proszę swoim doświadczeniem ew. naprowadźcie mnie jak to zrobić.

Dobrze :slight_smile:
Musiał byś stworzyć własne liczniki Exp, Imp i w ten sposób odwrócisz naliczanie arytmetyczne na wektorowe.

Dla każdej fazy masz tylko power (jak również total power), więc musiałbyś znać precyzyjnie czas pomiędzy pomiarami aby wyliczyć energię.
Aby pomiar był precyzyjny trzeba dokonywać pomiaru bardzo często, ponieważ podawana moc jest
chwilowa i nie wiadomo jak się kształtuje pomiędzy pomiarami.
Z częstotliwością odczytów też nie możesz wyjść powyżej pewnej granicy.
Więc ta metoda będzie mało precyzyjna i wyniki z czasem będą się rozjeżdżać.

Nie znam na tyle dobrze HA aby coś doradzić jak to w nim samym zrobić, ale już NR nie byłoby to takie trudne.
W samym HA pewnie też nie - na pewno value_template z jakim “if” i paroma “robaczkami”, który porówna Imp Exp i wyliczy ich różnice - nie ogarniam tego :thinking:
Pewnie co podobnego do:

Na tym etapie trudno powiedzieć czy można operować na wartościach totalnych z licznika, czy operować na przyrostach pomiędzy odczytami - wszystko zależy od właściwości użytych encji.

Coś mi się zdaje, że za mocno kombinujesz. Wg mnie wystarczy wyliczać różnicę między Import Wh i Export Wh, przeliczyć na kWh i wstawić tę różnicę jako zużycie w Panelu ENERGIA. Na wykresie dostaniesz bilansowanie w cyklu godzinowym, tak jak jest to obecnie rozliczane.

Edit:

Hmm, nie do końca zadziałało jak myślałem. Proponuję tak to zrobić - można to uprościć przeliczając większość w zmiennych, ale to tak na szybko zrobiłem - zaczynam raczkować dopiero, bawię się tym od ok. tygodnia.

utility_meter:
  hourly_forward:
    source: sensor.SDM630_Import_Wh_since_last_reset
    name: Zużycie Godzinowe
    cycle: hourly
  hourly_reverse:
    source: sensor.SDM630_Export_Wh_since_last_reset
    name: Produkcja Godzinowa
    cycle: hourly

template:
  - sensor:
    - name: 'Produkcja Godz Zaokr'
      device_class: energy
      unit_of_measurement: kWh
      state: >
        {% if is_number(states('sensor.produkcja_godzinowa'))  %}
          {{ states('sensor.produkcja_godzinowa') | float /1000 | float | round(3) }}
        {% else %}
          0,000
        {% endif %}
  - name: 'Zużycie Godz Zaokr'
      device_class: energy
      unit_of_measurement: kWh
      state: >
        {% if is_number(states('sensor.zuzycie_godzinowe'))  %}
          {{ states('sensor.zuzycie_godzinowe') | float /1000 | float| round(3) }}
        {% else %}
          0,000
        {% endif %}
  - name: 'Bilans Godzinowy'
      device_class: energy
      unit_of_measurement: kWh
      state: >
        {{ (states('sensor.zuzycie_godz_zaokr') | float - states('sensor.produkcja_godz_zaokr') | float)|float|round(3) }}
  - name: 'bilans_godz_prod'
      icon: mdi:lightning-bolt
      state_class: total_increasing
      device_class: energy
      unit_of_measurement: kWh
      state: >
        {% set minu =  now().minute|float %}
        {% if minu>=59 %}
            {% if (states('sensor.bilans_godzinowy')|float <0) %}
                {{ states('sensor.bilans_godzinowy') | float *(-1) |round(3) }}
            {% else %}
                0
            {% endif %}
        {% else %}
            0
        {% endif %}
  - name: 'bilans_godz_zuz'
      icon: mdi:lightning-bolt
      state_class: total_increasing
      device_class: energy
      unit_of_measurement: kWh
      state: >
       {% set minu =  now().minute|float %}
       {% if minu>=59 %}
            {% if (states('sensor.bilans_godzinowy')|float >= 0) %}
                {{ states('sensor.bilans_godzinowy') | float |round(3) }}
            {% else %}
                0
            {% endif %} 
       {% else %}
            0
       {% endif %} 

Są niestety mankamenty. Panel ENERGIA nie jest przygotowany na polskie warunki i ma problem z interpretacją bilansowania wektorowego w przedziałach godzinowych. Prawidłowo interpretuje, gdy bilans “na korzyść zużycia lub produkcji” cały czas rośnie. Gdy jednak zaczyna maleć Panel “wariuje”. Dlatego wyliczenia bilansu ograniczyłem do okresu ostatniej minuty danej godziny. Minimalizuje to “wariactwa” Panelu. Gdy jednak mamy automatykę, która optymalizuje zarządzanie nadwyżkami produkcji (ja na przykład w odpowiednim momencie przed końcem godziny nadwyżkę kieruję na ładowanie samochodu elektrycznego) to nawet ta ostatnia minuta potrafi zakłucić wyliczenia. No i pozostaje decyzja, czy uwzględniać w nadwyżce godzinowej produkcji opust. Gdy uwzględnimy, to otrzymamy prawidłowo wyliczone Użycie Netto z sieci, ale błędnie wyliczoną Autokonsumpcję. Gdy nie uwzględnimy, to będzie na odwrót :frowning: . Reasumując Panel ENERGIA średnio się sprawdza u nas.

Mam ten sam problem z tym, że u mnie jest norax3 z wektorowym zliczaniem a SDM630 mam od paru dni. Przy zakupie nie zauważyłem, że nie ma wektorowego bilansowania :confused: Zastanawiam sie czy wyjściem by było przejście na MEW-01 (integracja z tego co czytałem działa poprawnie)? Może ktoś z Was wie czy na takim sdm630 bilansowanie można zmianic czy to nie wchodzi w grę?

Ja chwilowo sobie temat bilansowania odpuściłem. Muszę dowiedzieć się w PGE czy bilansowanie jest liczone w okresie 15 czy 60 minut. Wówczas można podjąć próby ustawienia SDM630. Z drugiej zaś strony… nie wiem czy jest sens tracić czas na tego typu zabawę. I tak co miesiąc spisuję liczniki więc arkusz kalkulacyjny pokazuje mi autokonsumpcję i inne dane które mnie interesują.

Tak realnie na to patrząc, czy macie pomysły w jaki sposób wykorzystać informacje z HA o kWh obliczonych na podstawie poprawnego bilansowania?

Ja wykorzystuję do zwiększenia “autokonsumpcji”. Zrobiłem w Node-red proces, który zlicza ile min. przed końcem godziny trzeba włączyć łądowanie samochodu elektrycznego, aby “skonsumopwać” nadwyżkę. Steruję gniazdem trójfazowym, do którego jest podłączona ładowarka. Oczywiście ma to zastosowanie wtedy, gdy samochód stoi w garażu.

Może trochę nie na temat, ale z tego na ile się orientuję to są zapowiadane jakieś zmiany w działaniu panelu energii w HA (nie wnikałem głęboko jakie to mają być zmiany), ale wygląda na to, że nadal nie są gotowe i w najbliższym wydaniu jeszcze nie są zapowiedziane do wprowadzenia, sytuacja w sumie może jeszcze ulec zmianie, ale szkic notek do wydania już istnieje:

Jeżeli odejmiemy import od exportu ze wskazań SDM to nie otrzymamy realnej (tak jak przy wektorowym) wartości magazynu w PGE ?

Tak jak już pisałem należy zliczać godzinowy eksport i import. Różnica daje rozliczenie wektorowe godzinowo, czyli tak, jak wg nowych zasad powinien rozliczać ZE

Witam, czy ktoś ogarnął i wylicza zmagazynowaną energię w PGE. Teoretycznie wiem jak to policzyć, ale przeniesienie do HA to trochę kłopot i chętnie bym skorzystał z czyjejś pracy.
Mam licznik dwukierunkowy vcx-dts-1946 z bilansowaniem arytmetycznym, z PGE licznik Gamma z bilansowaniem wektorowym i wskazania się rozjeżdżają. I jeszcze dochodzi zliczanie godzinowe.
Edit:
Przejrzałem chyba wszystkie wątki dotyczące liczenia energii ale wszędzie jest nie do końca tak jak powinno być. Grupa Taurona ma liczniki z sumowaniem algebraicznym, PGE z wektorowym, liczniki/wskaźniki typu SDM630, VCX-DTS-1946 itp. liczą energię algebraicznie.
A powinno być wektorowo z liczeniem godzinowym tzn. jeśli np. przez godzinę wysłaliśmy do sieci 3kWh, a pobraliśmy 1kWh, to na koniec godziny mamy 3-1=2kWh zmagazynowane w sieci.
Podjąłem się zadania wyliczenia w HA, ale na razie z miernym skutkiem. Poniżej wrzucam kod z yamla:


utility_meter:
  y_energia_oddana_godzinowa: # liczę ilość energii wysłanej przez ostatnią godzinę, liczy OK, wzrasta przez godzinę
    source: sensor.energia_czynna_oddana
    name: Energia oddana przez godzinę
    cycle: hourly
  x_energia_pobrana_godzinowa: # liczę ilość energii pobranej przez ostatnią godzinę, liczy OK
    source: sensor.energia_czynna_pobrana
    name: Energia pobrana przez godzinę
    cycle: hourly
    
template:
   - sensor:
      - name: last_period_energia_pobrana_przez_godzine   # zmienia się raz na godzinę OK
        unit_of_measurement: 'kWh'
        state: >
          {{ state_attr('sensor.energia_pobrana_przez_godzine', 'last_period') }}
      - name: last_period_energia_oddana_przez_godzine   # zmienia się raz na godzinę OK
        unit_of_measurement: 'kWh'
        state: >
          {{ state_attr('sensor.energia_oddana_przez_godzine', 'last_period')}}
          
      - name: "Energia pobrana czy oddana z magazynu sieci" # liczy OK
        unit_of_measurement: kWh
        icon: mdi:transmission-tower      
        device_class: energy
        state: >
          {{ states('sensor.last_period_energia_pobrana_przez_godzine')|float(0) 
            - states('sensor.last_period_energia_oddana_przez_godzine')|float(0)  }}

      - name: "Energia pobrana z magazynu sieci"  # chciałbym aby liczyło raz na godzinę ale nie wiem jak to zrobić
        unit_of_measurement: kWh
        icon: mdi:transmission-tower      
        device_class: energy
        state: >
          {% if (states('sensor.energia_pobrana_czy_oddana_z_magazynu_sieci')|float(0) >=0.01 ) %}
            {{ ((states('sensor.energia_pobrana_z_magazynu_sieci')|float(0)) 
             + (states('sensor.energia_pobrana_czy_oddana_z_magazynu_sieci')|float(0)/3) ) }}
          {% else %}
            {{ states('sensor.energia_pobrana_z_magazynu_sieci')|float(0) }}
          {% endif %}
      - name: "Energia oddana do magazynu sieci"
        unit_of_measurement: kWh
        icon: mdi:transmission-tower     
        device_class: energy
        state: >
          {% if (states('sensor.energia_pobrana_czy_oddana_z_magazynu_sieci')|float(0) <=-0.01 ) %}
            {{ ((states('sensor.energia_oddana_do_magazynu_sieci')|float(0)) 
             - (states('sensor.energia_pobrana_czy_oddana_z_magazynu_sieci')|float(0)/3) ) }}
          {% else %}
            {{ states('sensor.energia_oddana_do_magazynu_sieci')|float(0) }}
          {% endif %} 

Chciałem liczyć - name: “Energia oddana do magazynu sieci” raz na godzinę z sensorów które zmieniają się co godzinę, ale coś dodaje kilka razy w jednej chwili ( o pełnej godzinie) i właśnie w tym potrzebuję pomocy. Dzięki.
Edit:
Zauważyłem, że dodaje się 3x co godzinę, to dodaję wartość/3:
(states(‘sensor.energia_pobrana_czy_oddana_z_magazynu_sieci’)|float(0)/3) )
Wygląda że liczy poprawnie (ale to taki półśrodek), czemu się tak dzieje i jak to zrobić lepiej nie wiem.

Od ponad roku mam Shelly EM3, licznik niestety zlicza energię z każdej fazy niezależnie co przy exporcie i imporcie są różnicę,
Porównywałem przez kilka miesięcy co parę dni i wyliczałem różnicę procentową.
Na dzień dzisiejszy a mija już 385 dni maksymalna różnica liczników z shelly a PGE wynosi 2 kWh.
Współczynniki u mnie są następujące:
wskaźnik dla energii pobranej = 1.05739210284665
wskaźnik dla energii wysłanej = 1.02271701519482
Może komuś się przyda :slight_smile:

[{"id":"066282ebab722d48","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"e30fcf0ca0dc724d","type":"group","z":"066282ebab722d48","name":"","style":{"stroke":"#ff0000","fill":"#ffff00","label":true,"color":"#ff3f3f"},"nodes":["c326ac3e8b882fdb","02be2534c43b4d15","15fb489d05ea9f89","3aa953b0fe4c51c3","c2907ebef362ec9c","6e13ea319135e93c","e70bbfa6f12242d9","73ab7630c4fc951a"],"x":74,"y":599,"w":892,"h":162},{"id":"cffa69914eada2e6","type":"group","z":"066282ebab722d48","name":"","style":{"stroke":"#000000","fill":"#92d04f","fill-opacity":"0.37","label":true},"nodes":["01b4984c7cd18a93","6860720dfd6a99ab","c7e4b58acf18e04e","94ec2bdd30dc3bdc","29e91032f162ac0f","b61d52295c4e166a","f5ad65017e1dce07","6b788f2c08585ceb","47e8f3b8d591aefd","4eaf249c1a4311b2","96bce9b66daf31eb","dd768131755456b3"],"x":74,"y":299,"w":892,"h":262},{"id":"ce97f26c6673d93c","type":"group","z":"066282ebab722d48","name":"","style":{"stroke":"#000000","fill":"#ff0000","fill-opacity":"0.39","label":true},"nodes":["45681617de7f6b9c","ae1e483fdf20b52e","eac801b9e05aa107","93fab787f6a3ca03","04555e7b39094cd8","939df52cf8f8ad25","cdcdff228f2b7e18","dea110ca9d8e915d","03088d17859975d5","7c137b261f4bd615","cdb40a4c03b5a179","015355cf6e018bce"],"x":74,"y":19,"w":892,"h":262},{"id":"45681617de7f6b9c","type":"server-state-changed","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"Import faza 2","server":"55bcb0b1.5b942","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.faza_2_energy","entityidfiltertype":"exact","outputinitially":true,"state_type":"num","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"},{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"x":170,"y":100,"wires":[["93fab787f6a3ca03"]]},{"id":"ae1e483fdf20b52e","type":"server-state-changed","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"Import faza 1","server":"55bcb0b1.5b942","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.faza_1_energy","entityidfiltertype":"exact","outputinitially":true,"state_type":"num","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"milliseconds","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":170,"y":60,"wires":[["93fab787f6a3ca03"]]},{"id":"eac801b9e05aa107","type":"server-state-changed","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"Import faza 3","server":"55bcb0b1.5b942","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.faza_3_energy","entityidfiltertype":"exact","outputinitially":true,"state_type":"num","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"},{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"x":170,"y":140,"wires":[["93fab787f6a3ca03"]]},{"id":"93fab787f6a3ca03","type":"sum","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"","topic":"","x":350,"y":100,"wires":[["939df52cf8f8ad25"]]},{"id":"01b4984c7cd18a93","type":"server-state-changed","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"Export faza 1","server":"55bcb0b1.5b942","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.faza_1_energy_returned","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":170,"y":340,"wires":[["c7e4b58acf18e04e"]]},{"id":"6860720dfd6a99ab","type":"server-state-changed","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"Export faza 2","server":"55bcb0b1.5b942","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.faza_2_energy_returned","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":170,"y":400,"wires":[["c7e4b58acf18e04e"]]},{"id":"c7e4b58acf18e04e","type":"sum","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"","topic":"","x":330,"y":400,"wires":[["94ec2bdd30dc3bdc"]]},{"id":"04555e7b39094cd8","type":"change","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"( , )","rules":[{"t":"set","p":"payload","pt":"msg","to":"$round(payload, 2)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":510,"y":160,"wires":[["015355cf6e018bce"]]},{"id":"939df52cf8f8ad25","type":"function","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"string to number","func":"msg.payload = Number(msg.payload)\nmsg.topic = \"TOTAL_180\" \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":100,"wires":[["cdcdff228f2b7e18"]]},{"id":"cdcdff228f2b7e18","type":"change","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"","rules":[{"t":"set","p":"TOTAL_180","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":100,"wires":[["cdb40a4c03b5a179"]]},{"id":"dea110ca9d8e915d","type":"server-state-changed","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"KOREKTA 180","server":"55bcb0b1.5b942","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.korekta_licznika_pge_180","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"milliseconds","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"},{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"x":180,"y":240,"wires":[["03088d17859975d5"]]},{"id":"03088d17859975d5","type":"function","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"string to number","func":"msg.payload = Number(msg.payload)\nmsg.topic = \"KOREKTA_180\" \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":240,"wires":[["7c137b261f4bd615"]]},{"id":"7c137b261f4bd615","type":"change","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"","rules":[{"t":"set","p":"KOREKTA_180","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":240,"wires":[["cdb40a4c03b5a179"]]},{"id":"cdb40a4c03b5a179","type":"change","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"Oblicz","rules":[{"t":"set","p":"payload","pt":"msg","to":"$flowContext('TOTAL_180')  / $flowContext('KOREKTA_180')","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":160,"wires":[["04555e7b39094cd8"]]},{"id":"94ec2bdd30dc3bdc","type":"function","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"string to number","func":"msg.payload = Number(msg.payload)\nmsg.topic = \"TOTAL_280\" \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":400,"wires":[["29e91032f162ac0f"]]},{"id":"29e91032f162ac0f","type":"change","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"","rules":[{"t":"set","p":"TOTAL_280","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":680,"y":400,"wires":[["47e8f3b8d591aefd"]]},{"id":"b61d52295c4e166a","type":"function","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"string to number","func":"msg.payload = Number(msg.payload)\nmsg.topic = \"KOREKTA_280\" \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":520,"wires":[["f5ad65017e1dce07"]]},{"id":"f5ad65017e1dce07","type":"change","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"","rules":[{"t":"set","p":"KOREKTA_280","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":520,"wires":[["47e8f3b8d591aefd"]]},{"id":"6b788f2c08585ceb","type":"server-state-changed","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"KOREKTA 280","server":"55bcb0b1.5b942","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.korekta_licznika_pge_280","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"},{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"x":180,"y":520,"wires":[["b61d52295c4e166a"]]},{"id":"47e8f3b8d591aefd","type":"change","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"Oblicz","rules":[{"t":"set","p":"payload","pt":"msg","to":"$flowContext('TOTAL_280')/ $flowContext('KOREKTA_280')","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":370,"y":460,"wires":[["4eaf249c1a4311b2"]]},{"id":"4eaf249c1a4311b2","type":"change","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"( , )","rules":[{"t":"set","p":"payload","pt":"msg","to":"$round(payload, 2)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":460,"wires":[["96bce9b66daf31eb"]]},{"id":"015355cf6e018bce","type":"ha-entity","z":"066282ebab722d48","g":"ce97f26c6673d93c","name":"Energia pobrana 1.8.0 ","server":"55bcb0b1.5b942","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Energia pobrana 1.8.0"},{"property":"device_class","value":"energy"},{"property":"icon","value":"mdi:lightning-bolt"},{"property":"unit_of_measurement","value":"KwH"},{"property":"state_class","value":"total_increasing"},{"property":"last_reset","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"","outputPayloadType":"str","x":840,"y":160,"wires":[[]]},{"id":"96bce9b66daf31eb","type":"ha-entity","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"Energia wyslana 2.8.0","server":"55bcb0b1.5b942","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Energia wyslana 2.8.0"},{"property":"device_class","value":"energy"},{"property":"icon","value":"mdi:lightning-bolt"},{"property":"unit_of_measurement","value":"KwH"},{"property":"state_class","value":"total_increasing"},{"property":"last_reset","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"","outputPayloadType":"str","x":840,"y":460,"wires":[[]]},{"id":"dd768131755456b3","type":"server-state-changed","z":"066282ebab722d48","g":"cffa69914eada2e6","name":"Export faza 3","server":"55bcb0b1.5b942","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.faza_3_energy_returned","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":true,"ignorePrevStateUnknown":true,"ignorePrevStateUnavailable":true,"ignoreCurrentStateUnknown":true,"ignoreCurrentStateUnavailable":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":170,"y":460,"wires":[["c7e4b58acf18e04e"]]},{"id":"c326ac3e8b882fdb","type":"function","z":"066282ebab722d48","g":"e30fcf0ca0dc724d","name":"Korekta locznika 1.8.0","func":"var a = 1.05739210284665\nmsg.payload = a\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":640,"wires":[["02be2534c43b4d15"]]},{"id":"02be2534c43b4d15","type":"change","z":"066282ebab722d48","g":"e30fcf0ca0dc724d","name":"Przecinek 8","rules":[{"t":"set","p":"payload","pt":"msg","to":"$round(payload, 8)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":640,"wires":[["6e13ea319135e93c"]]},{"id":"15fb489d05ea9f89","type":"function","z":"066282ebab722d48","g":"e30fcf0ca0dc724d","name":"Korekta locznika 2.8.0","func":"var a = 1.02271701519482\nmsg.payload = a\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":720,"wires":[["3aa953b0fe4c51c3"]]},{"id":"3aa953b0fe4c51c3","type":"change","z":"066282ebab722d48","g":"e30fcf0ca0dc724d","name":"Przecinek 8","rules":[{"t":"set","p":"payload","pt":"msg","to":"$round(payload, 8)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":720,"wires":[["e70bbfa6f12242d9"]]},{"id":"c2907ebef362ec9c","type":"inject","z":"066282ebab722d48","g":"e30fcf0ca0dc724d","name":"","props":[{"p":"topic","vt":"str"}],"repeat":"30","crontab":"","once":false,"onceDelay":0.1,"topic":"time","x":170,"y":640,"wires":[["c326ac3e8b882fdb"]]},{"id":"6e13ea319135e93c","type":"ha-entity","z":"066282ebab722d48","g":"e30fcf0ca0dc724d","name":"Korekta licznika PGE 180","server":"55bcb0b1.5b942","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Korekta_licznika_PGE_180"},{"property":"device_class","value":"energy"},{"property":"icon","value":"mdi:lightning-bolt"},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":"total"},{"property":"last_reset","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"","outputPayloadType":"str","x":830,"y":640,"wires":[[]]},{"id":"e70bbfa6f12242d9","type":"ha-entity","z":"066282ebab722d48","g":"e30fcf0ca0dc724d","name":"Korekta licznika PGE 280","server":"55bcb0b1.5b942","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"Korekta_licznika_PGE_280"},{"property":"device_class","value":"energy"},{"property":"icon","value":"mdi:lightning-bolt"},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":"total"},{"property":"last_reset","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"","outputPayloadType":"str","x":830,"y":720,"wires":[[]]},{"id":"73ab7630c4fc951a","type":"inject","z":"066282ebab722d48","g":"e30fcf0ca0dc724d","name":"","props":[{"p":"topic","vt":"str"}],"repeat":"30","crontab":"","once":false,"onceDelay":0.1,"topic":"time","x":170,"y":720,"wires":[["15fb489d05ea9f89"]]},{"id":"55bcb0b1.5b942","type":"server","name":"HA OS","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":false,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"numeric","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"}]

Do panelu Energia pobieram moje sumowane total_180 oraz total_280 oraz produkcja dzienna z Sofara
Na koniec wyliczam bilans energetyczny import - ( export *80%) = bilans.
Na rachunku z PGE w czerwcu różnica moich wypocin wynosiła 7,3 kWh w “moim magazynie energii w PGE”

Dziękuję, spróbuję. Tak na szybko przyjrzałem się temu i wydaje mi się, że każdy będzie musiał indywidualnie dobrać te współczynniki. Również jak zmienisz sposób korzystania z energii to konieczna będzie ich korekta.

@Piter Czy udało Ci się ogarnąć to bilansowanie z PGE? Jak tak to jakie zmiany naniosłeś HA?

Bilansowanie godzinowe zrobiłem tak Wykres zmagazynowanej energii gotowej do odbioru - #39 przez Piter.
Jednocześnie próbuję korygować współczynnikami tak jak poleca @Dariusz_Barczyński, tylko to mało dokładne.