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

moonsorrox

Es war aber den ganzen Tag nichts zu sehen, deshalb dachte ich ich habe einen Fehler gemacht
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

Hiernach werden die Readings gefüllt:

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



growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day  sollte sich ebenfalls erhöhen, solange du den set-Befehl nicht aufrufst.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

#17
Für die Diagrammdarstellung musst du ggf. die Grenzen anpassen. Der Maximalbetrag beim Tagesverbrauch steht hier auf 30 (30 KWh).


Beim Diagramm war noch ein Fehler drin, es müsste eher heißen

card([di_counter_new:growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day:col],"Solarenergie Tagesverlauf in KWh","",0,30,30,90,"kWh",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,"kWh",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,"kWh",undef,"0","160,1,1,0,1,,200","0,0,0,0,2")

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

moonsorrox

das mit dem anpassen mache ich noch denn soviel erzeugt meine Anlage nicht, aber ich wollte erst einmal in den Card's Werte haben aber da sind keine Werte drin und ich habe heute mittag das erste mal drauf geschaut da war alles 0.

Habe schon das neue Format eingegeben nun sind sie auch untereinander gerutscht, ich weiß man kann es einstellen das suche ich mir aber wieder zusammen
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

Zitat von: moonsorrox am 29 August 2022, 22:00:37
das mit dem anpassen mache ich noch denn soviel erzeugt meine Anlage nicht, aber ich wollte erst einmal in den Card's Werte haben aber da sind keine Werte drin und ich habe heute mittag das erste mal drauf geschaut da war alles 0.

Habe schon das neue Format eingegeben nun sind sie auch untereinander gerutscht, ich weiß man kann es einstellen das suche ich mir aber wieder zusammen

Wenn uiTable editierst, dann darf am Ende nicht \ stehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

#20
Zitat von: Damian am 29 August 2022, 22:03:31
Wenn uiTable editierst, dann darf am Ende nicht \ stehen.

OK, dass war mir neu habe es jetzt  :D :

jetzt muss ich nur nochmal nachschauen warum er mir am Tage nichts angezeigt hat und den Ertrag pro Tag, denn er hat heute 4,4 KWh gemacht
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

Zitat von: moonsorrox am 29 August 2022, 22:05:27
OK, dass war mir neu habe es jetzt  :D :

jetzt muss ich nur nochmal nachschauen warum er mir am Tage nichts angezeigt hat und den Ertrag pro Tag

Es wird ja auch ein Logfile automatisch erzeugt (Raum logs) dort sollten alle Werte geloggt werden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

da muss ich noch irgendwo ein Fehler haben denn da steht nichts weiter drin.
2022-08-29_17:32:17 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
2022-08-29_17:30:07 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
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

Zitat von: moonsorrox am 29 August 2022, 22:10:53
da muss ich noch irgendwo ein Fehler haben denn da steht nichts weiter drin.
2022-08-29_17:32:17 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
2022-08-29_17:30:07 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
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


Wahrscheinlich hast du so oft den set-Befehl aufgerufen. Ich habe bei mir geschaut, es werden nur die last_-Werte um Mitternacht geloggt
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

Ja das kann sein, weil nichts zu sehen war... ich warte mal auf morgen und lasse den in Ruhe.
Habe die Card angepasst und morgen schaue ich dann mal und melde mich
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

Zitat von: moonsorrox am 29 August 2022, 22:19:10
Ja das kann sein, weil nichts zu sehen war... ich warte mal auf morgen und lasse den in Ruhe.
Habe die Card angepasst und morgen schaue ich dann mal und melde mich

Wenn Strom produziert wird, dann muss sich das Reading ...day, ...month, ...year (nicht die last-Readings) mit der Genauigkeit von eine Nachkommastelle im Laufe des Tages erhöhen.

Als du den ersten set-Befehl aufgerufen hast, hast du bereits 3,5 kWh produziert - das kann man in den Readings sehen;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

Heute nun aktuell wieder die Anzeigen alle auf "0"

log zeigt dieses
2022-08-30_00:01:00 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
2022-08-29_17:32:17 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
2022-08-29_17:30:07 di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day: 0
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


aktuelle Readings von 14.14 Uhr
READINGS:
     2022-08-29 22:13:58   block_init      executed
     2022-08-30 00:01:00   block_mid       executed
     2022-08-30 00:01:00   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day 0
     2022-08-30 00:01:00   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day_counter 3277.3
     2022-08-28 23:11:41   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_counter 3272.9
     2022-08-30 00:01:00   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day 0
     2022-08-28 23:11:41   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month 0
     2022-08-28 23:11:41   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_year 0
     2022-08-30 00:01:00   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.month 4.4
     2022-08-28 23:11:41   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.month_counter 3272.9
     2022-08-30 00:01:00   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.year 4.4
     2022-08-28 23:11:41   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.year_counter 3272.9
     2022-08-29 17:46:54   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.day 0
     2022-08-29 17:46:54   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.day_counter 3277
     2022-08-29 17:46:42   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.last_counter 3277
     2022-08-29 17:46:54   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.last_day 0
     2022-08-29 17:46:42   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.last_month 0
     2022-08-29 17:46:42   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.last_year 0
     2022-08-29 17:46:54   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.month 0
     2022-08-29 17:46:42   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.month_counter 3277
     2022-08-29 17:46:54   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.year 0
     2022-08-29 17:46:42   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.year_counter 3277
     2022-08-29 18:15:35   mode            enabled
     2022-08-29 18:15:35   state           initialized
     2022-08-30 00:01:00   timer_01_c01    31.08.2022 00:01:00


hier nochmal das komplette list vom DOIF
Internals:
   DEF        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
   FUUID      630bd9d8-f33f-b063-1079-ce0c5cef23a3ed33
   MODEL      Perl
   NAME       di_counter_new
   NOTIFYDEV  global,di_counter_new
   NR         1566
   NTFY_ORDER 50-di_counter_new
   STATE      initialized
   TYPE       DOIF
   VERSION    26182 2022-06-29 18:57:26
   eventCount 5
   READINGS:
     2022-08-29 22:13:58   block_init      executed
     2022-08-30 00:01:00   block_mid       executed
     2022-08-30 00:01:00   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day 0
     2022-08-30 00:01:00   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day_counter 3277.3
     2022-08-28 23:11:41   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_counter 3272.9
     2022-08-30 00:01:00   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day 0
     2022-08-28 23:11:41   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month 0
     2022-08-28 23:11:41   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_year 0
     2022-08-30 00:01:00   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.month 4.4
     2022-08-28 23:11:41   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.month_counter 3272.9
     2022-08-30 00:01:00   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.year 4.4
     2022-08-28 23:11:41   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.year_counter 3272.9
     2022-08-29 17:46:54   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.day 0
     2022-08-29 17:46:54   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.day_counter 3277
     2022-08-29 17:46:42   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.last_counter 3277
     2022-08-29 17:46:54   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.last_day 0
     2022-08-29 17:46:42   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.last_month 0
     2022-08-29 17:46:42   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.last_year 0
     2022-08-29 17:46:54   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.month 0
     2022-08-29 17:46:42   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.month_counter 3277
     2022-08-29 17:46:54   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.year 0
     2022-08-29 17:46:42   growatt.0.294937.devices.QMB39212B4.totalData.eTotal.state.year_counter 3277
     2022-08-29 18:15:35   mode            enabled
     2022-08-29 18:15:35   state           initialized
     2022-08-30 00:01:00   timer_01_c01    31.08.2022 00:01:00
   Regex:
     accu:
     collect:
       di_counter_new:
         collect:
           growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day ^di_counter_new$:^growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day:
           growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day ^di_counter_new$:^growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day:
           growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month ^di_counter_new$:^growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month:
     uiTable:
       di_counter_new:
         di_counter_new_uiTable_c_0_0_0_0:
           growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day ^di_counter_new$:^growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day:
         di_counter_new_uiTable_c_0_1_0_0:
           growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day ^di_counter_new$:^growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day:
         di_counter_new_uiTable_c_0_2_0_0:
           growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month ^di_counter_new$:^growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month:
   card:
     animate    0
   collect:
     di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day:
       24:
         animate    0
         dim        72
         hours      24
         last       
         last_v     0
         last_value 0
         max_value  0
         max_value_slot 71
         max_value_time 1661861454
         min_value  0
         min_value_slot 71
         min_value_time 1661861454
         name       di_counter_new
         reading    growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day
         time       1661861580
         value      0
         times:
           undef
           undef
           undef
           undef
           1661780901
           undef
           undef
           undef
           1661786299
           1661786652
           1661787888
           1661789583
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1661802761
           1661803291
           undef
           undef
           undef
           undef
           undef
           1661810460
           1661811753
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1661857893
           undef
           undef
           1661861454
         values:
           undef
           undef
           undef
           undef
           0
           undef
           undef
           undef
           0
           0
           0
           0
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           0
           0
           undef
           undef
           undef
           undef
           undef
           0
           0
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           0
           undef
           undef
           0
     di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day:
       672:
         animate    0
         dim        72
         hours      672
         last       
         last_v     0
         max_value  0
         max_value_slot 71
         max_value_time 1661857893
         min_value  0
         min_value_slot 71
         min_value_time 1661857893
         name       di_counter_new
         reading    growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day
         time       1661861580
         value      0
         times:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1661721296
           1661722553
           1661774660
           1661789583
           undef
           1661857893
         values:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           0
           0
           0
           0
           undef
           0
     di_counter_new growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month:
       8760:
         animate    0
         dim        72
         hours      8760
         last_v     0
         max_value  0
         max_value_slot 71
         max_value_time 1661789583
         min_value  0
         min_value_slot 71
         min_value_time 1661789583
         name       di_counter_new
         reading    growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month
         time       1661861580
         value      0
         times:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1661726292
           1661789583
         values:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           0
           0
   condition:
     0          ::DOIF_time_once($hash,0,$wday);                             for (my $i=0;$i<@{$hash->{var}{counter}};$i++) {      midnight($hash->{var}{counter}[$i][0],$hash->{var}{counter}[$i][1],$mday,$yday);
  }

     1                                             for (my $i=0;$i<@{$hash->{var}{counter}};$i++) {     init_readings($hash->{var}{counter}[$i][0],$hash->{var}{counter}[$i][1]);
  }

   days:
   defs:
     tpl:
       TPL_stat   
  day_count_$1_$2 {                       
    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);
  }

   helper:
     NOTIFYDEV  global,di_counter_new
     event      timer_1
     globalinit 1
     last_timer 1
     sleeptimer -1
     triggerDev
     triggerEvents:
       timer_1
     triggerEventsState:
       timer_1
   interval:
   intervalfunc:
   localtime:
     0          1661896860
   perlblock:
     0          mid
     1          init
   realtime:
     0          00:01:00
   time:
     0          00:01:00
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1661896860:
       localtime  1661896860
       hash:
   uiState:
   uiTable:
     dev        di_counter_new
     header     
<table uitabid='DOIF-di_counter_new' class=' block wide uiTabledoif doif-di_counter_new ' style='border-top:none;'>
     package    package ui_Table;
     reading    growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month
     table:
       0:
         0:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_counter_new_uiTable_c_0_0_0_0',card(::ReadingValDoIf($hash,'di_counter_new','growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day','','col'),"Solarenergie Tagesverlauf in KWh","",0,10,30,90,"kWh",undef,"1","160,1,1,0,1,,200","0,0,0,0,2"),"")
         1:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_counter_new_uiTable_c_0_1_0_0',card(::ReadingValDoIf($hash,'di_counter_new','growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_day','','col4w'),"Solarenergie in kWh pro Tag","",0,10,30,90,"kWh",undef,"1","160,1,1,0,1,,200","0,0,0,0,2"),"")
         2:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_counter_new_uiTable_c_0_2_0_0',card(::ReadingValDoIf($hash,'di_counter_new','growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.last_month','','col365d'),"Solarenergie in kWh pro Monat","",0,600,30,90,"kWh",undef,"0","160,1,1,0,1,,200","0,0,0,0,2"),"")
     tc:
     td:
       0:
     tr:
   var:
     counter:
       ARRAY(0x55e9ea93a4e0)
Attributes:
   room       AutomationTest
   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,10,30,90,"kWh",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,10,30,90,"kWh",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,"kWh",undef,"0","160,1,1,0,1,,200","0,0,0,0,2")

## 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")



wenn ich wieder zuhause bin werde ich mal auf Fehlersuche gehen, denn ich habe einige Cards mit einzelnen Werten von dir umgesetzt die allesamt Werte anzeigen.
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

Das Modul wird nicht von [growatt.0.294937.devices.QMB39212B4.deviceData.eTotal:state] getriggert.

Offenbar gibt es dazu keine Events.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

kommt aber alles rein vom Wechselrichter und eTotal hat sich gegenüber gestern schon erhöht hier mal das list vom device
Internals:
   FUUID      6204abc3-f33f-b063-fe91-204795cdcfb4fce1
   NAME       growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
   NR         1375
   STATE      3281.1
   TYPE       dummy
   eventCount 1516
   READINGS:
     2022-08-30 15:38:17   state           3281.1
Attributes:
   alias      eTotal
   comment    Auto-created by ioBroker fhem.1
   group      growatt.0.294937.devices.QMB39212B4.deviceData
   room       ioB_IN


evtl. habe ich irgendwo ein Fehler im Perlcode, durch das kopieren vllt. ne Leerzeile oder sonstiges falsch drin.
Ich werde es mal überprüfen soweit es mir möglich ist da wenig Perl Kenntnisse
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

moonsorrox

#29
ich habe jetzt das gesamte DOIF nochmals komplett neu erstellt, wenn es neu erstellt wurde liest er einmal komplett die neuen Werte ein das ist der eTotal state der jetzt auf 3281.4 steht.

Dieser Wert wird aus dem dummy genommen
growatt.0.294937.devices.QMB39212B4.deviceData.eTotal

Ich habe hier eine weitere Card von dir im Einsatz für den Monatswert und ebenfalls den eTotal Wert dieser nutzt ja das gleiche dummy und hier funktioniert es mit dieser Def.

hier mal das list:

Internals:
   DEF        {}
   FUUID      60d1fb64-f33f-a6c6-2021-c2788dfd549325e7
   FVERSION   98_DOIF.pm:0.261820/2022-06-29
   MODEL      Perl
   NAME       di_growatt_monatJahr
   NOTIFYDEV  global,growatt.0.294937.devices.QMB39212B4.deviceData.eMonth,growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
   NR         5983
   NTFY_ORDER 50-di_growatt_monatJahr
   STATE      initialized
   TYPE       DOIF
   VERSION    26182 2022-06-29 18:57:26
   READINGS:
     2022-02-11 19:12:32   mode            enabled
     2021-06-22 17:01:56   state           initialized
   Regex:
     accu:
     collect:
       growatt.0.294937.devices.QMB39212B4.deviceData.eMonth:
         collect:
           state      ^growatt.0.294937.devices.QMB39212B4.deviceData.eMonth$:^state:
       growatt.0.294937.devices.QMB39212B4.deviceData.eTotal:
         collect:
           state      ^growatt.0.294937.devices.QMB39212B4.deviceData.eTotal$:^state:
     uiTable:
       growatt.0.294937.devices.QMB39212B4.deviceData.eMonth:
         di_growatt_monatJahr_uiTable_c_0_0_0_0:
           state      ^growatt.0.294937.devices.QMB39212B4.deviceData.eMonth$:^state:
       growatt.0.294937.devices.QMB39212B4.deviceData.eTotal:
         di_growatt_monatJahr_uiTable_c_0_1_0_0:
           state      ^growatt.0.294937.devices.QMB39212B4.deviceData.eTotal$:^state:
   card:
   collect:
     growatt.0.294937.devices.QMB39212B4.deviceData.eMonth state:
       672:
         animate    0
         dim        72
         hours      672
         last       
         last_v     169.6
         max_value  172.8
         max_value_slot 71
         max_value_time 1661869455
         min_value  150.5
         min_value_slot 59
         min_value_time 1661486379
         name       growatt.0.294937.devices.QMB39212B4.deviceData.eMonth
         reading    state
         time       1661869877
         value      172.8
         times:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1661486379
           1661519566
           1661531877
           1661584295
           1661620353
           1661620931
           1661687455
           1661705475
           1661721935
           1661788701
           1661813262
           1661855910
           1661869455
         values:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           150.5
           154.3
           155.4
           155.5
           157.5
           157.5
           160.8
           164.3
           164.3
           168.5
           168.7
           169.6
           172.8
     growatt.0.294937.devices.QMB39212B4.deviceData.eTotal state:
       8736:
         animate    0
         dim        72
         hours      8736
         last_v     3264.1
         max_value  3281.4
         max_value_slot 71
         max_value_time 1661869455
         min_value  3264.1
         min_value_slot 70
         min_value_time 1661587173
         name       growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
         reading    state
         time       1661869877
         value      3281.4
         times:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           1661587173
           1661869455
         values:
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           undef
           3264.1
           3281.4
   condition:
     0         
   helper:
     NOTIFYDEV  global,growatt.0.294937.devices.QMB39212B4.deviceData.eMonth,growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
     globalinit 1
     last_timer 0
     sleeptimer -1
   perlblock:
     0          block_01
   uiState:
   uiTable:
     dev        growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
     header     
<table uitabid='DOIF-di_growatt_monatJahr' class=' block wide uiTabledoif doif-di_growatt_monatJahr ' style='border-top:none;'>
     package    package ui_Table;
     reading    state
     table:
       0:
         0:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_growatt_monatJahr_uiTable_c_0_0_0_0',card(::ReadingValDoIf($hash,'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),"")
         1:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_growatt_monatJahr_uiTable_c_0_1_0_0',card(::ReadingValDoIf($hash,'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),"")
     tc:
       1.2        align='center'
     td:
       0:
     tr:
Attributes:
   alias      PV - Anlage - Monats Leistung - Jahres Leistung
   group      1_PV Anlage
   room       ioB_OUT
   sortby     02
   uiTable    { package ui_Table;
$TC{1.2}="align='center'" ## zentrierte Ausrichtung der zweiten und dritten Spalte

}

## Tabellendefinition
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)|
## 2.Card rosa
##card([growatt.0.294937.devices.QMB39212B4.deviceData.eTotal:state:col52w],"Leistung Gesamt","measure_power_meter",0,2800,undef,undef,"KW",\&temp_hue,"1","220,,,,,1",undef,undef)


das dummy wird alle 5min. getriggert und der Wert wird aucheingetragen.
Ich weiß jetzt nicht mehr wo ich noch gucken könnte, warum das DOIF die Werte nicht nimmt
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

In deiner ursprünglichen Definition wurde, warum auch immer, NOTIFYDEV nicht richtig gesetzt:

ZitatNOTIFYDEV  global,di_counter_new

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

moonsorrox

ich habe ein zweites DOIF in meiner Produktivumgebung erstellt.
Es gibt in beiden DOIF dieses
NOTIFYDEV di_counter_new,global

Produktiv Fhem
NOTIFYDEV di_pvanlage_1,global

Was kann ich jetzt noch machen.?
Ich habe die dummys beobachtet es sind teilweise nur 90sec. das es aktualisiert wird wobei jetzt auf dem Nachmittag die kWh nicht mehr so steigen.

Diese dummys werden vom ioBroker erstellt, weil es dort dieses Growatt Modul gibt sonst hätte ich gar keine Werte, aber wie gesagt die Übermittlung funktioniert tadellos.
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

Die Readings müssen zum Zeitpunkt der Definition des DOIF  (defmod) existieren, sonst klappt das nicht.

Beim anderen DOIF (mit den beiden Diagrammen) sieht es dagegen besser aus:

ZitatNOTIFYDEV  global,growatt.0.294937.devices.QMB39212B4.deviceData.eMonth,growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

ja das habe ich schon verglichen und auch gesehen.
Aber wie bekomme ich das denn hin.?

Kann ich das im nachhinein erstellen.?
NOTIFYDEV  global,growatt.0.294937.devices.QMB39212B4.deviceData.eTotal

Wenn ich dieses DOIF erstellen gehe ich in die Kommandozeile und trage folgendes ein
define di_counter_new DOIF {}
weil ich ja das ganze DOIF nicht in der Kommandozeile erstellen kann.

Dann gehe ich in die RAW Definition und trage es komplett ein und speichere. Dabei sollte er doch das
NOTIFYDEV
erstellen..! oder nicht?
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

NOTIFYDEV wird von FHEM selbst erstellt, es bringt nichts es selbst zu manipulieren.

Du musst dich herantasten an das Problem.

Wird NOTIFYDEV gesetzt, bei

define di_growatt_test DOIF ([growatt.0.294937.devices.QMB39212B4.deviceData.eTotal:state])()

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

moonsorrox

ja es wird erstellt

Internals:
   CFGFN     
   DEF        ([growatt.0.294937.devices.QMB39212B4.deviceData.eTotal:state])()
   FUUID      630e3f6a-f33f-b063-5dc8-07e16a8ba4b91330
   MODEL      FHEM
   NAME       di_growatt_test
   NOTIFYDEV  global,growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
   NR         1602
   NTFY_ORDER 50-di_growatt_test
   STATE      cmd_1
   TYPE       DOIF
   VERSION    26182 2022-06-29 18:57:26
   eventCount 2
   READINGS:
     2022-08-30 18:50:27   Device          growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
     2022-08-30 18:49:57   cmd             1
     2022-08-30 18:49:57   cmd_event       growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
     2022-08-30 18:49:57   cmd_nr          1
     2022-08-30 18:50:27   e_growatt.0.294937.devices.QMB39212B4.deviceData.eTotal_state 3281.9
     2022-08-30 18:48:42   mode            enabled
     2022-08-30 18:49:57   state           cmd_1
   Regex:
     accu:
     collect:
     cond:
       growatt.0.294937.devices.QMB39212B4.deviceData.eTotal:
         0:
           state      ^growatt.0.294937.devices.QMB39212B4.deviceData.eTotal$:^state:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'growatt.0.294937.devices.QMB39212B4.deviceData.eTotal','state')
   do:
     0:
       0         
     1:
   helper:
     NOTIFYDEV  global,growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
     event      3281.9
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
     timerevent 3281.9
     triggerDev growatt.0.294937.devices.QMB39212B4.deviceData.eTotal
     timerevents:
       3281.9
     timereventsState:
       state: 3281.9
     triggerEvents:
       3281.9
     triggerEventsState:
       state: 3281.9
   internals:
   readings:
     all         growatt.0.294937.devices.QMB39212B4.deviceData.eTotal:state
   trigger:
   uiState:
   uiTable:
Attributes:
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

OK, dann poste mal deine komplette Definition von di_counter_new als RAW-Definition, damit ich es bei mir nachvollziehen kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

gerne

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;;;;$ANIMATE=0}\
## Tabellendefinition\
card([di_counter_new:growatt.0.294937.devices.QMB39212B4.deviceData.eTotal.state.day:col],"Solarenergie Tagesverlauf in KWh","",0,10,30,90,"kWh",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,10,30,90,"kWh",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,"kWh",undef,"0","160,1,1,0,1,,200","0,0,0,0,2")

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

Es liegt wohl an den Punkten in deinem growatt-Devicenamen. Der Devicename wird intern auch als DOIF-Blockname genutzt und Punkte sind dort nicht vorgesehen.

Wenn du statt Punkte _ benutzen kannst, dann sollte es gehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

da ich dieses dummy mit den Punkten vom ioBroker bekomme habe ich darauf keinen Einfluss.
ich müßte mir ein etwas erstellen welches jedesmal dieses device übernimmt und dann umwandelt.
Puuh das ist ja ein Aufwand, ich denke ich muss mir dann was anderes einfallen lassen wie ich die Werte oder besser den Wert bekomme.
Es ging ja hauptsächlich darum einen Wert jährlich zu bekommen weil ich den nicht habe, die anderen Werte habe ich ja bereits mit deinen Card's umgesetzt.

Ich denke mal etwas nach.... was ich am besten mache  ;)
Vielen Dank ersteinmal für die Unterstützung.
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

Du brauchst doch nur definieren:

define my_growatt DOIF {set_State([growatt.0.294937.devices.QMB39212B4.deviceData.eTotal:state])}

und im anderen DOIF die push-Zeile ändern in:

push (@{$_counter},["my_growatt","state"]);; ## PV-Energie Einspeisung\

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

moonsorrox

hier nun mal die Rückmeldung von mir, ist ja erst seit gestern so, aber es scheint zu funktionieren  ;) Vielen Dank Damian

Muss jetzt nochmal schauen wie er den Jahreswert berechnet, denn den habe ich ja noch nicht visualisiert mit "uiTable"
Ein Momentan Screeshot
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

Zitat von: moonsorrox am 01 September 2022, 17:04:57
hier nun mal die Rückmeldung von mir, ist ja erst seit gestern so, aber es scheint zu funktionieren  ;) Vielen Dank Damian

Muss jetzt nochmal schauen wie er den Jahreswert berechnet, denn den habe ich ja noch nicht visualisiert mit "uiTable"
Ein Momentan Screeshot

Das sieht doch schon mal gut aus, da du ja alle wichtigen Daten im log hast (last_day, last_month, last_year), kannst du dir zusätzlich zu uiTable  auch svg-plots bauen. Den Jahresverlauf kann man im dritten Diagramm sehen, der Jahresverbrauch selbst wird am 01.01 im Reading last_year erscheinen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

Ja klar das mit den Plots weiß ich, aber ich bin nicht so der PlotFan ;)
Wobei das bei der PV Anlage sicher mal eine Idee wäre, denke ich mal drüber nach.

Was mich ein wenig stört grad ist das er eben den gesamten Jahresverbrauch nicht anzeigt, kann er ja auch nicht weil er ja die Werte nicht hat, dass heißt auch am 01.01.2023 hat er nur die Werte von gestern ab.
Habe schon überlegt ob ich ihn nicht irgendwie überlisten ;) kann, denn ich habe sie ja als Monatswerte vorliegen und brauche sie nur zusammen rechnen.
Aber das wird wohl nicht funktionieren diese einzupflegen.

Einen Vesuch habe ich schon gestartet in dem ich mit "deletereading" die Werte lösche und mit setreading wieder die errechneten rein bringe, hat aber nicht funktioniert, er hat dann den einen Wert doppelt gehabt und nicht überschrieben das war der Wert mit *.year am Ende. Weißt du ob das gehen würde, dann hätte ich schon mal den Wert dann für das aktuelle Jahr.
Der hohe Wert von aktuell 3295.6 ist ja der Gesamtwert seit der Installation am 21.04.2012.
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

Zitat von: moonsorrox am 01 September 2022, 23:31:29
Ja klar das mit den Plots weiß ich, aber ich bin nicht so der PlotFan ;)
Wobei das bei der PV Anlage sicher mal eine Idee wäre, denke ich mal drüber nach.

Was mich ein wenig stört grad ist das er eben den gesamten Jahresverbrauch nicht anzeigt, kann er ja auch nicht weil er ja die Werte nicht hat, dass heißt auch am 01.01.2023 hat er nur die Werte von gestern ab.
Habe schon überlegt ob ich ihn nicht irgendwie überlisten ;) kann, denn ich habe sie ja als Monatswerte vorliegen und brauche sie nur zusammen rechnen.
Aber das wird wohl nicht funktionieren diese einzupflegen.

Einen Vesuch habe ich schon gestartet in dem ich mit "deletereading" die Werte lösche und mit setreading wieder die errechneten rein bringe, hat aber nicht funktioniert, er hat dann den einen Wert doppelt gehabt und nicht überschrieben das war der Wert mit *.year am Ende. Weißt du ob das gehen würde, dann hätte ich schon mal den Wert dann für das aktuelle Jahr.
Der hohe Wert von aktuell 3295.6 ist ja der Gesamtwert seit der Installation am 21.04.2012.

Dann ist dir wahrscheinlich entgangen, dass im Reading ..year (nicht ...last_year) der aktuelle Jahresverbrauch drin steht, dieser wird täglich um Mitternacht aktualisiert, also brauchst du nur diesen darzustellen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

Zitat von: Damian am 02 September 2022, 07:45:27
Dann ist dir wahrscheinlich entgangen, dass im Reading ..year (nicht ...last_year) der aktuelle Jahresverbrauch drin steht, dieser wird täglich um Mitternacht aktualisiert, also brauchst du nur diesen darzustellen.
Damian, dass weiß ich hast ja alles gut erklärt... ;)
Was ich aber meine ist er kann ja nicht den Jahresverbrauch anzeigen, wenn er erst seit ein paar Tagen die Werte bekommt, soll soviel heißen wie der Wert von Januar bis letzte Woche als ich das DOIF erstellt habe der fehlt ja.
Also kann er eigentlich erst ab nächstes Jahr richtig anzeigen oder habe ich da einen Denkfehler..?

Es gibt ja in meinen Readings die vom Modul des ioBroker kommen keinen Wert der das Jahr anzeigt, dass muss er sich ja im Laufe des Jahres errechnen.

In meinem Reading für dieses Jahr steht ja erst
di_growatt.state.year 16.4
drin und das ist der Verbrauch von da ab als ich das DOIF richtig eingestellt habe. Weißt du wie ich es meine?
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

ja, das Modul kann ja nicht wissen, was vor der Definition war. Im Reading year_counter, wird der Zählerstand abgelegt, der am Anfang des Jahres festgehalten wird oder wenn man die Definition zum ersten Mal laufen lässt.

Wenn du für dieses Jahr den korrekten Jahresverbrauch haben willst, dann musst du den year_counter um so viele Einheiten zurücksetzen, wie viele dir für dieses Jahr fehlen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF