[gelöst] Dummy am 1. des Monats kopieren

Begonnen von parabacus, 02 November 2019, 12:51:31

Vorheriges Thema - Nächstes Thema

parabacus

Hallo!

Ich zermarter mit schon seit Stunden das Hirn und komm nicht drauf, wo das Problem sein könnte...

Im Keller hab ich eine Wärmepumpe, die Daten zum Stromverbrauch ausgibt, einen Haus-Stromzähler, den ich per USB-IR-Lesekopf auslesen kann und an den Stromversorgungs-Anschlüssen der WP hab ich auch noch drei Hutschienen-Stromzähler, die ich per WEMOS D1 und ESPEasy abgreifen kann.

Um die Daten der drei Geräte-Kategorien für die Weitere Verarbeitung mit Excel zu bekommen, hab ich mir ein paar Dummy-Variablen angelegt. In den Dummy Stromverbrauchsdaten möchte ich die Daten dafür täglich kurz vor Mitternacht in den Dummy und so ins Log schreiben.

Das funktioniert soweit problemlos:

List des Dummy Stromverbrauchsdaten:
Internals:
   FUUID      5db9e26f-f33f-869f-d6cd-33197dd172e316af
   NAME       Stromverbrauchsdaten
   NR         1306
   STATE      , Stromverbrauch Heizung (LWZ) ,7339,kWh, Waermemenge Heizung (LWZ) ,28047,kWh, Stromverbrauch Warmwasser (LWZ) ,2180,kWh, Waermemenge Warmwasser (LWZ) ,4547,kWh, Stromzaehler (Verbrauch akt.) ,11442.62,kWh, Stromzaehler (Einspeisung akt) ,12073.92,kWh, Stromzaehler (Verbrauch -12M) ,8626.61,kWh, Stromzaehler (Einspeisung -12M) ,7991.61,kWh, WR (PV-Produktion im Jahr) ,7499315,kWh, Stromzaehler (Verdichter) ,1222.85,kWh, Stromzaehler (WP-Luefter) ,111.66,kWh, Stromzaehler (KWL) ,279.501,kWh, COP (HZ) ,5.349, COP (WW) ,0.353
   TYPE       dummy
   READINGS:
     2019-11-02 08:41:57   state           , Stromverbrauch Heizung (LWZ) ,7339,kWh, Waermemenge Heizung (LWZ) ,28047,kWh, Stromverbrauch Warmwasser (LWZ) ,2180,kWh, Waermemenge Warmwasser (LWZ) ,4547,kWh, Stromzaehler (Verbrauch akt.) ,11442.62,kWh, Stromzaehler (Einspeisung akt) ,12073.92,kWh, Stromzaehler (Verbrauch -12M) ,8626.61,kWh, Stromzaehler (Einspeisung -12M) ,7991.61,kWh, WR (PV-Produktion im Jahr) ,7499315,kWh, Stromzaehler (Verdichter) ,1222.85,kWh, Stromzaehler (WP-Luefter) ,111.66,kWh, Stromzaehler (KWL) ,279.501,kWh, COP (HZ) ,5.349, COP (WW) ,0.353
Attributes:
   group      Strom
   room       Strom



Internals:
   COMMAND    {my $d1 = ", Stromverbrauch Heizung (LWZ) ,".ReadingsNum("Mythz","sElectrHCTotal",0).",kWh,";my $d2 = "Waermemenge Heizung (LWZ) ,".ReadingsNum("Mythz","sHeatHCTotal",0).",kWh,";my $d3 = "Stromverbrauch Warmwasser (LWZ) ,".ReadingsNum("Mythz","sElectrDHWTotal",0).",kWh,";my $d4 = "Waermemenge Warmwasser (LWZ) ,".ReadingsNum("Mythz","sHeatDHWTotal",0).",kWh,";my $d5 = "Stromzaehler (Verbrauch akt.) ,".sprintf("%.2f",ReadingsVal("Stromzaehler","Verbrauch_akt",0)).",kWh,";my $d6 = "Stromzaehler (Einspeisung akt) ,".sprintf("%.2f",ReadingsVal("Stromzaehler","Einspeisung_akt",0)).",kWh,";my $d7 = "Stromzaehler (Verbrauch -12M) ,".sprintf("%.2f",ReadingsVal("Stromzaehler","Verbrauch_vor_12_Mon",0)).",kWh,";my $d8 = "Stromzaehler (Einspeisung -12M) ,".sprintf("%.2f",ReadingsVal("Stromzaehler","Einspeisung_vor_12_Mon",0)).",kWh,";my $d9 = "WR (PV-Produktion im Jahr) ,".ReadingsVal("httpmodFronius1","PV_Produktion_pro_Jahr",0).",kWh,";my $d10 = "Stromzaehler (Verdichter) ,".sprintf("%.2f",ReadingsVal("Stromzaehler_LWZ_VD","ZaehlerStand_VD",0)).",kWh,";my $d11 = "Stromzaehler (WP-Luefter) ,".sprintf("%.2f",ReadingsVal("Stromzaehler_LWZ_WP","ZaehlerStand_WP",0)).",kWh,";my $d12 = "Stromzaehler (KWL) ,".sprintf("%.3f",ReadingsVal("Stromzaehler_LWZ_KWL" ,"ZaehlerStand_KWL",0)).",kWh,";my $d13 = "COP (HZ) ,".sprintf("%.3f",(ReadingsNum("Mythz","sHeatHCDay",0)/ReadingsNum("Mythz","sElectrHCDay",0))).",";my $d14 = "COP (WW) ,".sprintf("%.3f",(ReadingsNum("Mythz","sHeatDHWDay",0)/ReadingsNum("Mythz","sElectrDHWDay",0)));fhem ("set Stromverbrauchsdaten $d1 $d2 $d3 $d4 $d5 $d6 $d7 $d8 $d9 $d10 $d11 $d12 $d13 $d14");}
   DEF        *23:55:00 {my $d1 = ", Stromverbrauch Heizung (LWZ) ,".ReadingsNum("Mythz","sElectrHCTotal",0).",kWh,";my $d2 = "Waermemenge Heizung (LWZ) ,".ReadingsNum("Mythz","sHeatHCTotal",0).",kWh,";my $d3 = "Stromverbrauch Warmwasser (LWZ) ,".ReadingsNum("Mythz","sElectrDHWTotal",0).",kWh,";my $d4 = "Waermemenge Warmwasser (LWZ) ,".ReadingsNum("Mythz","sHeatDHWTotal",0).",kWh,";my $d5 = "Stromzaehler (Verbrauch akt.) ,".sprintf("%.2f",ReadingsVal("Stromzaehler","Verbrauch_akt",0)).",kWh,";my $d6 = "Stromzaehler (Einspeisung akt) ,".sprintf("%.2f",ReadingsVal("Stromzaehler","Einspeisung_akt",0)).",kWh,";my $d7 = "Stromzaehler (Verbrauch -12M) ,".sprintf("%.2f",ReadingsVal("Stromzaehler","Verbrauch_vor_12_Mon",0)).",kWh,";my $d8 = "Stromzaehler (Einspeisung -12M) ,".sprintf("%.2f",ReadingsVal("Stromzaehler","Einspeisung_vor_12_Mon",0)).",kWh,";my $d9 = "WR (PV-Produktion im Jahr) ,".ReadingsVal("httpmodFronius1","PV_Produktion_pro_Jahr",0).",kWh,";my $d10 = "Stromzaehler (Verdichter) ,".sprintf("%.2f",ReadingsVal("Stromzaehler_LWZ_VD","ZaehlerStand_VD",0)).",kWh,";my $d11 = "Stromzaehler (WP-Luefter) ,".sprintf("%.2f",ReadingsVal("Stromzaehler_LWZ_WP","ZaehlerStand_WP",0)).",kWh,";my $d12 = "Stromzaehler (KWL) ,".sprintf("%.3f",ReadingsVal("Stromzaehler_LWZ_KWL" ,"ZaehlerStand_KWL",0)).",kWh,";my $d13 = "COP (HZ) ,".sprintf("%.3f",(ReadingsNum("Mythz","sHeatHCDay",0)/ReadingsNum("Mythz","sElectrHCDay",0))).",";my $d14 = "COP (WW) ,".sprintf("%.3f",(ReadingsNum("Mythz","sHeatDHWDay",0)/ReadingsNum("Mythz","sElectrDHWDay",0)));fhem ("set Stromverbrauchsdaten $d1 $d2 $d3 $d4 $d5 $d6 $d7 $d8 $d9 $d10 $d11 $d12 $d13 $d14");}
   FUUID      5db9e26f-f33f-869f-ef98-494143889017900d
   NAME       Stromverbrauchsdaten_anDummy
   NR         1310
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 23:55:00
   TIMESPEC   23:55:00
   TRIGGERTIME 1572735300
   TRIGGERTIME_FMT 2019-31-10 23:55:00
   TYPE       at
   READINGS:
     2019-31-10 23:55:00   state           Next: 23:55:00
Attributes:
   group      Strom
   room       Strom



Ergebnis-Beispiel im Log:
2019-31-10_23:55:00 Stromverbrauchsdaten , Stromverbrauch Heizung (LWZ) ,7339,kWh, Waermemenge Heizung (LWZ) ,28047,kWh, Stromverbrauch Warmwasser (LWZ) ,2180,kWh, Waermemenge Warmwasser (LWZ) ,4547,kWh, Stromzaehler (Verbrauch akt.) ,11436.80,kWh, Stromzaehler (Einspeisung akt) ,12073.92,kWh, Stromzaehler (Verbrauch -12M) ,8626.61,kWh, Stromzaehler (Einspeisung -12M) ,7991.61,kWh, WR (PV-Produktion im Jahr) ,7499183,kWh, Stromzaehler (Verdichter) ,1220.23,kWh, Stromzaehler (WP-Luefter) ,111.35,kWh, Stromzaehler (KWL) ,278.903,kWh, COP (HZ) ,3.822, COP (WW) ,2.086


Jetzt wollte ich noch den COP pro Monat der Heizung berechnen und ausgeben lassen (oben ist das der COP des Tages und daher wenig aussagekräftig).
Dazu habe ich zwei weitere Dummy-Variablen angelegt. In einer speichere ich täglich die Gesamtsummen von Strom- bzw. den Wärmezähler-Daten weg, in die andere eine Kopie davon zum Monatswechsel.

Internals:
   COMMAND    {my $d1 = "".ReadingsNum("Mythz","sElectrHCTotal",0)."";my $d2 = "".ReadingsNum("Mythz","sHeatHCTotal",0)."";my $d3 = "".ReadingsNum("Mythz","sElectrDHWTotal",0)."";my $d4 = "".ReadingsNum("Mythz","sHeatDHWTotal",0)."";fhem ("set SpeicherAktuell $d1 $d2 $d3 $d4");}
   DEF        *23:55:00 {my $d1 = "".ReadingsNum("Mythz","sElectrHCTotal",0)."";my $d2 = "".ReadingsNum("Mythz","sHeatHCTotal",0)."";my $d3 = "".ReadingsNum("Mythz","sElectrDHWTotal",0)."";my $d4 = "".ReadingsNum("Mythz","sHeatDHWTotal",0)."";fhem ("set SpeicherAktuell $d1 $d2 $d3 $d4");}
   FUUID      5dbc4234-f33f-869f-3ffa-71c862d9e7a69861
   NAME       SpeicherAktuell_anDummy
   NR         1318
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 23:55:00
   TIMESPEC   23:55:00
   TRIGGERTIME 1572735300
   TRIGGERTIME_FMT 2019-11-01 23:55:00
   TYPE       at
   READINGS:
     2019-10-31 23:55:00   state           Next: 23:55:00
Attributes:
   group      Strom
   room       Strom



Internals:
   FUUID      5dbc4234-f33f-869f-7d70-669cd944bee8ce35
   NAME       SpeicherAktuell
   NR         1317
   STATE      7339 28047 2180 4547
   TYPE       dummy
   READINGS:
     2019-10-31 23:55:00   state           7339 28047 2180 4547
Attributes:
   group      Strom
   room       Strom


Wie man am state Inhalt sieht, klappt das auch.
2019-10-31 23:55:00   state           7339 28047 2180 4547


Da man den COP aus den Quotienten der Differenzen von aktuellem Monat und Vormonat bilden muss, möchte ich am 1. des Monats kurz nach Mitternacht den zuletzt im Vormonat gelesen Wert wegspeichern.
Dazu also einen weiteren Dummy dafür, der dann (wenn's klappen sollte) ungefähr so aussehen sollte (Inhalt von state ist jetzt manuell angepasst):
Internals:
   FUUID      5dbc2158-f33f-869f-9cf0-1c015c4e34d66637
   NAME       SpeicherVormonat
   NR         1313
   STATE      7339 28047 2180 4547
   TYPE       dummy
   READINGS:
     2019-11-01 00:05:00   state           7339 28047 2180 4547
Attributes:
   group      Strom
   room       Strom



Jetzt komme ich zu meinem Problem:

Wenn ich es so mache, funktioniert das mit der Kopie von SpeicherAktuell nach SpeicherVormonat, allerdings würde das ja täglich ausgeführt.
Internals:
   COMMAND    set SpeicherVormonat {(ReadingsVal('SpeicherAktuell','state',''))}


   DEF        *00:05:00 set SpeicherVormonat {(ReadingsVal('SpeicherAktuell','state',''))}


   FUUID      5dbc2158-f33f-869f-8de3-5b5f4b7d2ca143ad
   NAME       SpeicherVormonat_anDummy
   NR         1314
   NTM        19:03:23
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 00:05:00
   TIMESPEC   00:05:00
   TRIGGERTIME 1572735900
   TRIGGERTIME_FMT 2019-11-01 00:05:00
   TYPE       at
   READINGS:
     2019-11-02 00:05:00   state           Next: 00:05:00
Attributes:
   group      Strom
   room       Strom


Das schreibt mir ins Log-File eine Zeile mit den gewünschten Werten

2019-11-01_05:05:00 SpeicherVormonat 7339 28047 2180 4547

Um das am 1. des Monats um 00:05:00 Uhr zu machen, dachte ich müsste es doch genügen ein IF ($mday==1) einzufügen.
Die Commandref sagt IF (<Bedingung>) (<FHEM-Kommandos1>) - also das set noch in Klammern setzten.


Internals:
   COMMAND    IF ($mday==1) (set SpeicherVormonat {(ReadingsVal('SpeicherAktuell','state',''))})


   DEF        *00:05:00 IF ($mday==1) (set SpeicherVormonat {(ReadingsVal('SpeicherAktuell','state',''))})


   FUUID      5dbc2158-f33f-869f-8de3-5b5f4b7d2ca143ad
   NAME       SpeicherVormonat_anDummy
   NR         1314
   NTM        19:03:23
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 00:05:00
   TIMESPEC   00:05:00
   TRIGGERTIME 1572735900
   TRIGGERTIME_FMT 2019-11-03 00:05:00
   TYPE       at
   READINGS:
     2019-11-02 11:35:23   state           Next: 00:05:00
Attributes:
   group      Strom
   room       Strom


Leider funktioniert das aber nicht - im Log erhalte ich dann...
2019.11.02 11:37:33 3: SpeicherVormonat_anDummy: IF: no right bracket: {(ReadingsVal(\'SpeicherAktuell\'


Hier noch das list vom Log-File:
Internals:
   DEF        ./log/Stromverbrauchsdaten-%Y-%m.log Stromverbrauchsdaten:.*|SpeicherVormonat:.*
   FD         36
   FUUID      5db9e26f-f33f-869f-9532-4a46689ffe8eeb6c
   NAME       FileLog_Stromverbrauchsdaten
   NOTIFYDEV  SpeicherVormonat,Stromverbrauchsdaten
   NR         1308
   NTFY_ORDER 50-FileLog_Stromverbrauchsdaten
   REGEXP     Stromverbrauchsdaten:.*|SpeicherVormonat:.*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/Stromverbrauchsdaten-2019-11.log
   logfile    ./log/Stromverbrauchsdaten-%Y-%m.log
   READINGS:
     2019-11-02 08:58:29   linesInTheFile  20
Attributes:
   logtype    text


Schön langsam hab ich denke ich ein Brett vorm Hirn. Wer kann mir bitte den Nagel ziehen, damit es wieder weg ist?  ???

Ciao
Tom
Stiebel Eltron LWZ 504 / FHEM auf Rasperry Pi 3 / THZ / Weather / TABLETUI / SB_SERVER / SB_PLAYER  / OBIS / Verkehrsinfo / speedtest / Presence / FRITZ / ZWDongle / ZWAVE / Calendar / CALVIEW/ IPCAM/ ABFALL / ESPEasy

Shadow3561

ich habe das ganze mit einem DOIF gelöst.


([23:59] and $md eq "12-31") ("set Gasverbrauch_Vorjahr [Zaehler:Jahresverbrauch:d]")


für dich dann wohl so


([00:01] and $d eq "1") ("set SpeicherVormonat .....

Damian

Zitat von: Shadow3561 am 02 November 2019, 13:11:59
ich habe das ganze mit einem DOIF gelöst.


([23:59] and $md eq "12-31") ("set Gasverbrauch_Vorjahr [Zaehler:Jahresverbrauch:d]")


für dich dann wohl so


([00:01] and $d eq "1") ("set SpeicherVormonat .....


$d ist nicht bekannt, daher besser so:

([00:01] and $mday==1) ("set SpeicherVormonat .....
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

parabacus

Krass - so funktioniert's wirklich... - eben getestet als DOIF:

([16:05] and $mday==2) (set SpeicherVormonat {(ReadingsVal('SpeicherAktuell','state',''))})

und im Log steht:
2019-11-02_16:05:00 SpeicherVormonat 7339 28047 2180 4547

Mir erschliesst sich allerdings noch immer nicht, warum mein erster Versuch mit *00:05:00 IF ($mday==1) nicht funktioniert - zumal ich sowas ähnliches bereits in Verwendung habe und quasi davon kopiert hab. Lediglich das auszuführende set ist etwas anders.

Internals:
   COMMAND    IF ($mday == 1) ( get Mythz sElectrHCTotal )
   DEF        *00:01:01 IF ($mday == 1) ( get Mythz sElectrHCTotal )
   FUUID      5c47807b-f33f-869f-cf52-10cd8a4770266823
   NAME       GetsElectrHCTotal
   NR         127
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 00:01:01
   TIMESPEC   00:01:01
   TRIGGERTIME 1572735661
   TRIGGERTIME_FMT 2019-11-03 00:01:01
   TYPE       at
   READINGS:
     2019-11-02 16:00:32   state           Next: 00:01:01
     2015-05-01 20:59:28   timer_1_c1      02.05.2015 00:01:00
Attributes:
   room       Heizung
Stiebel Eltron LWZ 504 / FHEM auf Rasperry Pi 3 / THZ / Weather / TABLETUI / SB_SERVER / SB_PLAYER  / OBIS / Verkehrsinfo / speedtest / Presence / FRITZ / ZWDongle / ZWAVE / Calendar / CALVIEW/ IPCAM/ ABFALL / ESPEasy

Damian

Bist du sicher, dass at $mday unterstützt? DOIF macht es zumindest - das weiß ich.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Shadow3561

ja, at sollte es unterstützen.

So sollte es auch mit einem at funktionieren

  {if ($mday==2) {fhem("set Licht1 on")} }

Damian

ja, dann kommt $mday nicht mehr bei IF an, ist aus Sicht von at ja FHEM-Ebene, dort sind Perlvariablen des Moduls unbekannt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

parabacus

Ich hab das jetzt mal versucht auch umzusetzen, aber ich lande wieder bei einer Fehlermeldung - vielleicht hab ich da den Syntax auch noch nicht gecheckt.

2019.11.02 17:46:27 1: ERROR evaluating {IF ($mday==1) {fhem(set SpeicherVormonat {(ReadingsVal('SpeicherAktuell','state',''))})}: syntax error at (eval 1460844) line 1, near ") {"
Missing right curly or square bracket at (eval 1460844) line 1, at end of line

2019.11.02 17:46:27 3: SpeicherVormonat_anDummy: syntax error at (eval 1460844) line 1, near ") {"
Missing right curly or square bracket at (eval 1460844) line 1, at end of line


Da es mit dem DOIF jetzt klappt, lasse ich erst mal so und versuche jetzt, den Rest der COP-Berechnung noch durchzuführen.
Wenn ich dann noch Lust hab, widme ich mich dem Problem vielleicht wieder.

Ich bedanke mich aber natürlich recht herzlich für die schnelle Hilfe!
Stiebel Eltron LWZ 504 / FHEM auf Rasperry Pi 3 / THZ / Weather / TABLETUI / SB_SERVER / SB_PLAYER  / OBIS / Verkehrsinfo / speedtest / Presence / FRITZ / ZWDongle / ZWAVE / Calendar / CALVIEW/ IPCAM/ ABFALL / ESPEasy

Damian

Im at musst du, wie hier schon geschrieben, dafür das Perl-if nehmen (das wird klein geschrieben)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

parabacus

aha....!!! - danke!!! - da hätte ich selber drauf kommen müssen... - ich probier's später nochmal!
Stiebel Eltron LWZ 504 / FHEM auf Rasperry Pi 3 / THZ / Weather / TABLETUI / SB_SERVER / SB_PLAYER  / OBIS / Verkehrsinfo / speedtest / Presence / FRITZ / ZWDongle / ZWAVE / Calendar / CALVIEW/ IPCAM/ ABFALL / ESPEasy