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
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 .....
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 .....
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
Bist du sicher, dass at $mday unterstützt? DOIF macht es zumindest - das weiß ich.
ja, at sollte es unterstützen.
So sollte es auch mit einem at funktionieren
{if ($mday==2) {fhem("set Licht1 on")} }
ja, dann kommt $mday nicht mehr bei IF an, ist aus Sicht von at ja FHEM-Ebene, dort sind Perlvariablen des Moduls unbekannt.
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!
Im at musst du, wie hier schon geschrieben, dafür das Perl-if nehmen (das wird klein geschrieben)
aha....!!! - danke!!! - da hätte ich selber drauf kommen müssen... - ich probier's später nochmal!