Hallo,
ich versuche gerade ein doif zu basteln.
Jeden Tag um 00:01 soll die Gesamternte KWh abgerufen werden und anschließend alle 5 min von dem aktuellen Wert abgezogen werden. Es geht darum den aktuellen Tagesertrag einer pv Anlage zu sehen.
Das ganze soll in einem dummy gespeichert werden und per mqtt an ein display gesendet werden. Hier meine bisherigen Bemühungen:
Internals:
CFGFN
DEF ([21:23]) ({
my $val = ReadingsVal("FBDECT_Fritzbox_grp5180A9_3E983A0FB","KWh",0);;
fhem("setreading FritzDECT_Tageswerte KWh_0h $val");;
}) DOELSEIF ([+00:01]) ({
my $now = ReadingsVal("FBDECT_Fritzbox_grp5180A9_3E983A0FB","KWh",0);;
my $base = ReadingsVal("FritzDECT_Tageswerte","KWh_0h",0);;
my $diff = $now - $base;;
fhem("setreading FritzDECT_Tageswerte KWh_today $diff");;
my $kwh = sprintf("%.2f",$diff);;
fhem("setreading FritzDECT_Tageswerte KWh_today_fmt $kwh");;
fhem("set myBroker2 publish /display/fritzdect_tagesertrag/ $kwh");;
})
FUUID 68c5c35d-f33f-6571-31de-52e1feb6400771c2
MODEL FHEM
NAME doifFritzKWh
NOTIFYDEV global
NR 538
NTFY_ORDER 50-doifFritzKWh
STATE cmd_2
TYPE DOIF
VERSION 29460 2024-12-29 20:25:48
eventCount 7
READINGS:
2025-09-13 21:23:43 cmd 2
2025-09-13 21:23:43 cmd_event timer_2
2025-09-13 21:23:43 cmd_nr 2
2025-09-13 21:21:43 mode enabled
2025-09-13 21:23:43 state cmd_2
2025-09-13 21:23:00 timer_01_c01 14.09.2025 21:23:00
2025-09-13 21:24:43 timer_02_c02 13.09.2025 21:25:43
Regex:
accu:
bar:
barAvg:
collect:
attr:
cmdState:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)
1 ::DOIF_time_once($hash,1,$wday)
days:
do:
0:
0 { my $val = ReadingsVal("FBDECT_Fritzbox_grp5180A9_3E983A0FB","KWh",0);; fhem("setreading FritzDECT_Tageswerte KWh_0h $val");; }
1:
0 { my $now = ReadingsVal("FBDECT_Fritzbox_grp5180A9_3E983A0FB","KWh",0);; my $base = ReadingsVal("FritzDECT_Tageswerte","KWh_0h",0);; my $diff = $now - $base;; fhem("setreading FritzDECT_Tageswerte KWh_today $diff");; my $kwh = sprintf("%.2f",$diff);; fhem("setreading FritzDECT_Tageswerte KWh_today_fmt $kwh");; fhem("set myBroker2 publish /display/fritzdect_tagesertrag/ $kwh");; }
2:
helper:
NOTIFYDEV global
event timer_2
globalinit 1
last_timer 2
sleeptimer -1
timerdev
timerevent timer_2
triggerDev
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: timer_2
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: timer_2
state: cmd_2
timerevents:
timer_2
timereventsState:
timer_2
triggerEvents:
timer_2
triggerEventsState:
timer_2
hmccu:
interval:
intervalfunc:
localtime:
0 1757877780
1 1757791543
realtime:
0 21:23:00
1 21:25:43
time:
0 21:23:00
1 +00:01
timeCond:
0 0
1 1
timer:
0 0
1 0
timers:
0 0
1 1
triggertime:
1757791543:
localtime 1757791543
hash:
1757877780:
localtime 1757877780
hash:
uiState:
uiTable:
Attributes:
room Photovoltaik
KWh_0 wird nicht ausgelesen. Vielleicht kann mir jemand helfen.
Gruß Holger
Hallo Holger,
bevor du selbst etwas neues konstruierst, schau dir das Statistik-Modul ElectricityCalculator (https://fhem.de/commandref.html#ElectricityCalculator (https://fhem.de/commandref.html#ElectricityCalculator)) an. Das Modul bilanziert alle möglichen Daten basierend auf einem Zählerstand, den man in der Definition angibt. Ich benutze das vglw. häufig bei meiner Fhem-Installation.
Viele Grüße Gisbert
PS: Das Senden an ein Display muss dann eine Automatisierung übernehmen - vielleicht geht das aber auch in einem userReading im ElectricityCalculator-Device.
Danke für den Tipp, das sehe ich mir mal an, obwohl es jetzt funktioniert.
so sieht es jetzt aus:
([00:01]) ({
my $val = ReadingsVal("FBDECT_Fritzbox_grp5180A9_3E983A0FB","KWh",undef);
if (defined $val) {
fhem("setreading FritzDECT_Tageswerte KWh_0h $val");
}
}) DOELSEIF ([+00:05]) ({
my $now = ReadingsVal("FBDECT_Fritzbox_grp5180A9_3E983A0FB","KWh",undef);
my $base = ReadingsVal("FritzDECT_Tageswerte","KWh_0h",undef);
if (defined $now && defined $base) {
my $diff = $now - $base;
fhem("setreading FritzDECT_Tageswerte KWh_today $diff");
my $kwh = sprintf("%.2f",$diff);
fhem("setreading FritzDECT_Tageswerte KWh_today_fmt $kwh");
fhem("set myBroker2 publish /display/fritzdect_tagesertrag/ $kwh");
} else {
fhem("setreading FritzDECT_Tageswerte KWh_today N/A");
fhem("setreading FritzDECT_Tageswerte KWh_today_fmt N/A");
}
})