DOIF soll Werte aus dummy auslesen und addieren

Begonnen von moonsorrox, 26 August 2022, 18:50:35

Vorheriges Thema - Nächstes Thema

moonsorrox

Sicher ist meine Anforderung sehr speziell und ich denke das nur ein DOIF das kann, welches aber sicher mit Perl arbeiten muss und davon habe ich so gut wie gar keine Ahnung, aber evtl. schaffe ich es mit eurer Hilfe.

Folgendes möchte ich erreichen den Jahres Ertrag meiner PV Anlage, denn den kann ich nicht auslesen, ich habe aber die Monatserträge, sicher ahnt ihr schon was jetzt kommt...!! :D

Das DOIF soll jetzt immer am letzten Monatstag, das ja der 29., 30. und 31. sein kann, den Wert aus einem dummy (dummy hat den Monatswert, siehe list) gegen 23 Uhr auslesen.
Desweiteren soll es eben dann die ausgelsenene Werte addieren bis eben 12 Monate um sind.
Ist das möglich mit einem DOIF oder muss ich mehrere Module nutzen/haben..?


defmod growatt.0.294937.devices.QMB39212B4.deviceData.eMonth dummy
attr growatt.0.294937.devices.QMB39212B4.deviceData.eMonth alias eMonth
attr growatt.0.294937.devices.QMB39212B4.deviceData.eMonth comment Auto-created by ioBroker fhem.0
attr growatt.0.294937.devices.QMB39212B4.deviceData.eMonth group growatt.0.294937.devices.QMB39212B4.deviceData
attr growatt.0.294937.devices.QMB39212B4.deviceData.eMonth room ioB_IN
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Stelaku

Hallo moonsorrox
ich selber habe das mit einen at und at_ultimo gelöst aber mit einen DOIF sollte das auch gehen.
vieleicht hilft das hier weiter
https://forum.fhem.de/index.php/topic,71398.msg629063.html#msg629063
https://forum.fhem.de/index.php/topic,117269.msg1116447.html#msg1116447

gruss Stephan

Per

Natürlich geht das. Auf verschiedenen Wegen. ABER: was ist, wenn am Ultimo um 23 Uhr gerade kein Fhem geht? Dann fehlt dir ein Monat. Wer setzt den Wert der PV eigentlich zurück?

moonsorrox

ich werde mir das alles mal anschauen ob ich damit weiterkomme.
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Guybrush

Zitat von: Per am 26 August 2022, 22:35:09
Natürlich geht das. Auf verschiedenen Wegen. ABER: was ist, wenn am Ultimo um 23 Uhr gerade kein Fhem geht? Dann fehlt dir ein Monat. Wer setzt den Wert der PV eigentlich zurück?

man kanns relativ robust machen, wenn man es wie folgt umsetzt, da du ja wohl auch immer den absoluten zählerstand haben wirst? dafür bräuchte man dann 2 dummys/readings (zählerstandvortag,ertrag). dann legt man zb ein notify auf den zähler an und prüft dort als erstes wann der zählerstandvortag das letzte mal aktualisiert wurde (mit ReadingsTimestamp() ). wenn man es tagweise erfassen will, müsste man also prüfen, ob der tag des aktuellen timestamp - tag des timestamp des readings größer als 1 ist. wenn dem so ist, dann wird der wert des zählers - zählerstandvortag als neuer wert in ertrag geschrieben. da kann man dann auch noch weitere sachen berücksichtigen, um es noch robuster zu machen.

das ginge auch noch viel sparsamer, aber zählerstände werden normal nicht sekündlich erfasst, was dann auch nicht viel ausmacht, wenn da ein paar if abfragen umsonst gemacht werden. davon ab würde es dann noch deutlich komplexer werden. ich hab das so zb für die erfassung meines gasverbrauches umgesetzt, der nur alle 5 minuten aktualisiert wird.

Damian

Besser ist es mit absoluten Angaben eines Zähler zu hantieren, denn dann kann ruhig zwischendurch etwas verloren gehen.

Daraus kann man auch Leistung bestimmen:

https://forum.fhem.de/index.php/topic,97959.msg1225965.html#msg1225965

Und hiermit kann ich die Energie pro Tag, Monat, Jahr ermitteln, loggen und visualisieren. Es reicht die Angabe des Readings der verbrauchten Energie des Zählers, alles andere ist hier programmiert:

https://wiki.fhem.de/wiki/DOIF/Automatisierung#Tages-.2C_Monats-_und_Jahresstatistik_f.C3.BCr_Strom-.2C_Gas-.2C_Wasserz.C3.A4hler_und_andere_Z.C3.A4hler
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

#6
@Damian
das ist ein mächtiges Teil und ich habe versucht für mich anzupassen, aber das gelingt mir nicht recht, da ich ja kein Tasmota nutze für PV und somit bekomme ich immer Fehler.
Das log.counter habe ich auch nicht.
Werde es aber weiter probieren
Da einiges an Perl drin ist weiß ich nicht recht was ich dort nutzen kann/soll und was nicht. Ich habe ja die Tageswerte und Monatswerte alle als dummy vorhanden damit muss ich es ausprobieren.


@Guybrush
Tages werte sind nicht das was ich brauche die habe ich... ich möchte aus den Monatswerten den Jahresverbrauch errechnen, denn den habe ich nicht.
Der Monastwert wird immer am 1. des Monats auf 0 gestellt, deshalb möchte ich jeweils am Ende des Monats den Wert zu den den schon vorhandenen Monaten dazu rechnen.

Einige Ansätze habe ich ja hier schon und werde es probieren ob ich das hin bekomme

Das nutze ich bisher das ist einmal der Monatswert und der Gesamtwert (Wert seit Installation der Anlage).
Jahreswert fehlt mir also obwohl das DOIF *di_growatt_monatJahr heißt

defmod di_growatt_monatJahr DOIF {}
attr di_growatt_monatJahr alias PV - Anlage - Monats Leistung - Jahres Leistung
attr di_growatt_monatJahr group 1_PV Anlage
attr di_growatt_monatJahr room ioB_OUT
attr di_growatt_monatJahr sortby 02
attr di_growatt_monatJahr uiTable { package ui_Table;;\
$TC{1.2}="align='center'" ## zentrierte Ausrichtung der zweiten und dritten Spalte\
\
}\
\
## Tabellendefinition\
## Farbe grün 1.Card\
## card([growatt.0.294937.devices.QMB39212B4.deviceData.eMonth:state:col4w],"Leistung Monat","measure_power",0,1340,undef,undef,"KW",[500,120,1000,60,1250,0],"1","220,,,,,1,200",undef,undef)|\
##\
card([growatt.0.294937.devices.QMB39212B4.deviceData.eMonth:state:col4w],"Leistung Monat","measure_power",0,1350,undef,undef,"KW",\&temp_hue,"1","220,,,,,1",undef,undef)|\
card([growatt.0.294937.devices.QMB39212B4.deviceData.eTotal:state:col52w],"Leistung Gesamt","measure_power_meter",0,undef,undef,undef,"KW",[500,120,1000,60,1250,0],"1","220,,,,,1,210",undef,undef)|

Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Per

Ich (!) würde den Gesamtwert nehmen und am 01.01.  speichern. Und den gespeicherten Wert vor dem überschreiben vom aktuellen Wert abziehen. Das  kann dann auch etwas später erfolgen (im Notfall), sooo exakt muss der Wert ja nicht sein.

Damian

Wie heißt das Reading von deinem Growatt, wo fortlaufend die Energie gezählt wird?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

Ich hatte mit jetzt überlegt es so zu machen: erst mal nur mit Zeiten ausprobiert. Ich habe es in der commandref von DOIF gefunden die Zeiten zu addieren.
die erste Zeit soll dann das Monatsende sein, also at_ultimo
die zweite Zeit soll dann Datum 01.01. sein.
Muss mir nur noch die Zeiten dafür zusammen suchen.

Kann ich für ([19:00]) auch das ([at_ultimo]) einsetzen..? Das wäre dann Monatsende

defmod di_ultimo_pvanlage DOIF ([19:00]) (set du_pvjahr {([du_pvjahr]+[growatt.0.294937.devices.QMB39212B4.deviceData.eMonth:state])}) DOELSEIF ([18:58])  (set du_pvjahr 0)
attr di_ultimo_pvanlage alias Anzeige Jahr PV-Anlage
attr di_ultimo_pvanlage group 1_PV Anlage
attr di_ultimo_pvanlage room AutomationTest



Folgende Readings gibt es:
growatt.0.294937.devices.QMB39212B4.deviceData.pac --> Tageswert aktuell
growatt.0.294937.devices.QMB39212B4.deviceData.eToday --> Tages Gesamt Wert - wird am nächsten Tag auf 0 gesetzt
growatt.0.294937.devices.QMB39212B4.deviceData.eMonth --> Monatswert - wird am Tag des neuen Monats zurück gesetzt
growatt.0.294937.devices.QMB39212B4.deviceData.eTotal --> Gesamt Wert seit Installation
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Stelaku

ZitatKann ich für ([19:00]) auch das ([at_ultimo]) einsetzen..? Das wäre dann Monatsende

Da bin ich mir nicht sicher {at_ultimo} ist eine Funktion die man im at Aufrufen kann.
In Deinen DOIF würde für
([19:00])
dieses funktionieren.
([23:59] and (strftime ("%d",localtime time+86400) == 01))
hier wird jetzt jeden Tag um 23:59 geprüft ob der nächste Tag 01 ist.

Aber vieleicht ist das statistic Modul für Deine Anwendung noch geeigneter.
Damit kannst Du alle laufenden Zähler automatisch aufaddieren und sie werden dann wie Du möchstest als Stunden Tag Monat und Jahres Zahlen abgelegt.
Und das ganze dann auch noch für die lezte Stunde Tag Monat Jahr.
https://wiki.fhem.de/wiki/Statistics


Gruss

Stephan

Damian

Du brauchst nur in meinem geposteten Beispiel die push-Zeilen gegen diese eine Zeile ersetzen:

push (@{$_counter},["growatt.0.294937.devices.QMB39212B4.deviceData.eTotal","state"]);

und schon wird täglich, monatlich und jährlich die Energie berechnet und geloggt.

Und wenn du es noch visualisieren willst, dann kannst du diese drei Zeilen in die uiTable einsetzen:

card([di_counter_new:growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day:col],"Solarenergie Tagesverlauf in KWh","",0,30,30,90,["PV","Einsp."],undef,"1","130,1,1,0,1,,200","0,0,0,0,2")|\
card([di_counter_new:growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day:col4w],"Solarenergie in kWh pro Tag","",0,30,30,90,["PV","Einsp."],undef,"1","130,1,1,0,1,,200","0,0,0,0,2")|\
card([di_counter_new:growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month:col365d],"Solarenergie in kWh pro Monat","",0,600,30,90,["PV","Einsp."],undef,"0","130,1,1,0,1,,200","0,0,0,0,2")


Mehr muss man nicht tun. Ich hatte gehofft, die Beispiele wären verständlich gewesen ;)

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Guybrush

Zitat von: moonsorrox am 28 August 2022, 15:55:09
@Guybrush
Tages werte sind nicht das was ich brauche die habe ich... ich möchte aus den Monatswerten den Jahresverbrauch errechnen, denn den habe ich nicht.
Der Monastwert wird immer am 1. des Monats auf 0 gestellt, deshalb möchte ich jeweils am Ende des Monats den Wert zu den den schon vorhandenen Monaten dazu rechnen.

das war ja nur ein Beispiel. Wenn es jahresbasiert sein soll, musst du halt nur das Jahr statt des Tages vergleichen  ::)

von deinem geschilderten szenario her, würde ich den monatszähler nicht verwenden, sondern nur den gesamtzähler. das ist im zweifel robuster und bei dem von mir aufgezeigten weg hast du dann auch kein problem, wenn fhem mal ausfallen sollte. läuft bei mir so seit jahren fehlerfrei

moonsorrox

#13
@Damian
ich habe das alles gestern angelegt bisher steht aber alles noch auf 0.
Habe ich evtl. irgendwo einen Fehler drin, ich habe es mir schon mehrmals angeschaut aber ich finde nichts..!
Evtl. liegt es an dem Zähler ganz unten

Wenn ich set di_counter_new mid
kann ich das sicher einmal für nachts testen, oder

hier mal der Code
defmod di_counter_new DOIF subs { \
## Device Reading   \
push (@{$_counter},["growatt.0.294937.devices.QMB39212B4.deviceData.eTotal","state"]);; ## PV-Energie Einspeisung  \
  \
sub midnight { ## Diese Funktion wird um Mitternacht ausgeführt\
  my ($device,$reading,$mday,$yday)=@_;;\
  set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,1));;   \
  set_Reading("$device.$reading.last_day",get_Reading("$device.$reading.day",0),1);;\
  set_Reading("$device.$reading.day",0,1);;\
  set_Reading ("$device.$reading.month",int((ReadingsVal($device, $reading,0)-(get_Reading("$device.$reading.month_counter",0)))*1000)/1000,1);;\
  set_Reading ("$device.$reading.year",int((ReadingsVal($device, $reading,0)-(get_Reading("$device.$reading.year_counter",0)))*1000)/1000,1);;\
\
  if ($mday == 1) {\
    set_Reading("$device.$reading.month_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.last_month",get_Reading("$device.$reading.month",0),1);;\
    set_Reading("$device.$reading.month",0,1);;\
  }\
  if ($yday == 1) {\
    set_Reading("$device.$reading.year_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.last_year",get_Reading("$device.$reading.year",0),1);;\
    set_Reading("$device.$reading.year",0,1);;\
  }\
}\
\
sub init_readings {\
  my ($device,$reading)=@_;;\
  if (get_Reading("$device.$reading.day_counter","") eq "") {   ## Initialisierung der Readings\
    ## aktuellen Zählerstand initialisieren\
    set_Reading("$device.$reading.last_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.day_counter",ReadingsVal($device, $reading,0));; \
    set_Reading("$device.$reading.month_counter",ReadingsVal($device, $reading,0));;\
    set_Reading("$device.$reading.year_counter",ReadingsVal($device, $reading,0));;\
  \
    set_Reading ("$device.$reading.day",0);;           ## aktueller Tagesverbrauch\
    set_Reading ("$device.$reading.month",0);;         ## aktueller Monatsverbrauch\
    set_Reading ("$device.$reading.year",0);;          ## aktueller Jahresverbrauch\
    set_Reading ("$device.$reading.last_day",0);;      ## Verbrauch des letzten Tages\
    set_Reading ("$device.$reading.last_month",0);;    ## Verbrauch des letzten Monats\
    set_Reading ("$device.$reading.last_year",0);;     ## Verbrauch des letzten Jahres\
## Log definieren\
fhem ("defmod log.counter.$device.$reading FileLog ./log/counter.$device.$reading.log $SELF:$device.$reading.(last_(day|month|year)|(day|month)_counter):.*");;\
    fhem ("attr log.counter.$device.$reading room Logs");;\
}\
\
}\
} ## Ende subs-Block\
\
mid {[00:01];;                          ## Sicherung der Daten um Mitternacht\
  for (my $i=0;;$i<@{$_counter};;$i++) { ## Für jeden Zähler wird die Funktion midnight aufgerufen\
    midnight($_counter[$i][0],$_counter[$i][1],$mday,$yday);;\
  }\
}\
\
init {                                ## initialisierung aller Readings\
  for (my $i=0;;$i<@{$_counter};;$i++) {## Für jeden Zähler werden Readings über die Funktion init_readings initialisiert\
    init_readings($_counter[$i][0],$_counter[$i][1]);;\
  }\
}\
\
DEF TPL_stat (\
  day_count_$1_$2 { ## bei einem Event des Zählers, wird der tägliche, monatliche und jährliche Verbrauch im jeweiligen Reading festgehalten\
                    ##  $1 Zählerdevice, $2 Zählerreading\
\
    my $diff = int(([$1:$2,0]-(get_Reading("$1.$2.last_counter",0)))*1000)/1000;;\
    set_Reading ("$1.$2.last_counter",[$1:$2,0]);;\
    set_Reading ("$1.$2.day",int(([$1:$2,0]-(get_Reading("$1.$2.day_counter",0)))*1000)/1000,1);;\
    set_Reading ("$1.$2.month",int(([$1:$2,0]-(get_Reading("$1.$2.month_counter",0)))*1000)/1000,1);;\
    set_Reading ("$1.$2.year",int(([$1:$2,0]-(get_Reading("$1.$2.year_counter",0)))*1000)/1000,1);;\
  }\
)\
\
\
## Pro Zähler wird über eine FOR-Schleife ein day_count_<Device>_<Reading>-Block generiert\
FOR(@{$_counter},TPL_stat($1$1,$1$2)) ## $1$1 entspricht dem Device, $1$2 entspricht dem Reading\

attr di_counter_new room AutomationTest
attr di_counter_new uiTable ## { package ui_Table;;\
## $TC{1.2}="align='center'" ## zentrierte Ausrichtung der zweiten und dritten Spalte\
## }\
{package ui_Table;;;;$ANIMATE=0}\
## Tabellendefinition\
card([di_counter_new:growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day:col],"Solarenergie Tagesverlauf in KWh","",0,30,30,90,["PV","Einsp."],undef,"1","160,1,1,0,1,,200","0,0,0,0,2")|\
card([di_counter_new:growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day:col4w],"Solarenergie in kWh pro Tag","",0,30,30,90,["PV","Einsp."],undef,"1","160,1,1,0,1,,200","0,0,0,0,2")|\
card([di_counter_new:growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month:col365d],"Solarenergie in kWh pro Monat","",0,600,30,90,["PV","Einsp."],undef,"0","160,1,1,0,1,,200","0,0,0,0,2")

setstate di_counter_new initialized
setstate di_counter_new 2022-08-29 16:13:40 .col_72_di_counter_new_growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day_24_times ,,,,,,,,,,,,,,,,,,,,,1661721296,1661722553,1661723657,1661724060,1661725355,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1661774660,,,,,1661780901
setstate di_counter_new 2022-08-29 16:13:40 .col_72_di_counter_new_growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day_24_values ,,,,,,,,,,,,,,,,,,,,,0,0,0,0,0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,0
setstate di_counter_new 2022-08-29 16:13:40 .col_72_di_counter_new_growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day_672_times ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1661721296,1661722553,1661774660
setstate di_counter_new 2022-08-29 16:13:40 .col_72_di_counter_new_growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day_672_values ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0
setstate di_counter_new 2022-08-29 16:13:40 .col_72_di_counter_new_growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month_8760_times ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1661726292,1661774660
setstate di_counter_new 2022-08-29 16:13:40 .col_72_di_counter_new_growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month_8760_values ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0
setstate di_counter_new 2022-08-29 15:56:17 block_init executed
setstate di_counter_new 2022-08-29 15:56:22 block_mid executed
setstate di_counter_new 2022-08-29 15:56:22 growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day 0
setstate di_counter_new 2022-08-29 15:56:22 growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day_counter 3276.4
setstate di_counter_new 2022-08-28 23:11:41 growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_counter 3272.9
setstate di_counter_new 2022-08-29 15:56:22 growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day 0
setstate di_counter_new 2022-08-28 23:11:41 growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month 0
setstate di_counter_new 2022-08-28 23:11:41 growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_year 0
setstate di_counter_new 2022-08-29 15:56:22 growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.month 3.5
setstate di_counter_new 2022-08-28 23:11:41 growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.month_counter 3272.9
setstate di_counter_new 2022-08-29 15:56:22 growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.year 3.5
setstate di_counter_new 2022-08-28 23:11:41 growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.year_counter 3272.9
setstate di_counter_new 2022-08-29 15:56:17 mode enabled
setstate di_counter_new 2022-08-29 15:56:17 state initialized
setstate di_counter_new 2022-08-29 15:56:17 timer_01_c01 30.08.2022 00:01:00



das log sieht bisher so aus, Zeiten hatte ich mal eingegeben zum testen
2022-08-29_17:24:23 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
2022-08-29_15:56:22 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
2022-08-29_15:55:57 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
2022-08-29_15:51:00 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
2022-08-29_00:01:00 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

#14
Sieht doch gut aus. Wenn du set di_counter_new mid aufrufst, dann wird die Mitternachtsroutine ausgeführt, damit wird dein Tageszähler wieder auf Null gesetzt.

Ansonsten sollten sich bei jedem Trigger deines growatt-total-Readings die Readings ...day, ....month, .....year  erhöhen. Um Mitternacht siehst du bei ....last_day den Tagesverbrauch, am Monatsende bei ....last_month den Monatsverbrauch usw.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF