Guten Abend.
Ich möchte meinen aktuellen Strom-Verbrauch in Dummies speichern. Ich verwende ein Notify, um die Werte wie folgt zu kopiert:
Strom10Min -> Strom15Min
Strom5Min -> Strom10Min
Strom0Min -> Strom5Min
Aktueller Wert -> Strom0Min
Somit sollen die Werte jeweils alle Dummies nacheinander durchlaufen, bis sie zum Schluss verfallen.
Hier mein Versuch... aber irgendwie werden die Werte total verschachtelt überschrieben.
{fhem("sleep 2; set Strom15Min " . (ReadingsVal("Strom10Min","state", "0")))}
{fhem("sleep 2; set Strom10Min " . (ReadingsVal("Strom5Min","state", "0")))}
{fhem("sleep 2; set Strom5Min " . (ReadingsVal("Strom0Min","state", "0")))}
{fhem("sleep 2; set StromKWh " . ((((ReadingsVal("CUL_EM_1","current", "0"))+(Value("Strom5Min"))+(Value("Strom10Min"))+(Value("Strom15Min")))/0.004)))}
{fhem ("set Strom0Min " . (ReadingsVal("CUL_EM_1","current", "0")))}
Über Hilfe wäre ich sehr dankbar.
Grüße Tim
So wie es aussieht werden alle Befehle im Notify gleichzeitig aufgerufen... ich glaube ich habe eine Lösung gefunden...
Durch unterschiedliche langer Wartezeiten vor den einzelnen Befehlen kann ich steuern, wann der Befehl abgearbeitet wird.
{fhem("sleep 5; set Strom15Min " . (ReadingsVal("Strom10Min","state", "0")))}
{fhem("sleep 10; set Strom10Min " . (ReadingsVal("Strom05Min","state", "0")))}
{fhem("sleep 15; set Strom05Min " . (ReadingsVal("Strom00Min","state", "0")))}
{fhem("sleep 20; set Strom00Min " . (ReadingsVal("CUL_EM_1","current", "0")))}
{fhem("sleep 25; set StromKWh " . ((Value("Strom00Min"))+(Value("Strom05Min"))+(Value("Strom10Min"))+(Value("Strom15Min")))/0.004)}
Hallo Tim,
ich mache ähnliches für den Tagesstromverbrauch, allerdings mit dem Unterschied, dass alles innerhalb einer Perl Routine abgearbeitet wird. Das funktioniert seit mehr als einem halben Jahr fehlerfrei.
Hier http://forum.fhem.de/index.php/topic,39481.msg316757.html#msg316757 wird die Reihenfolge der Abarbeitung bei userReadings diskutiert, evtl. tritt bei Deinem Problem ein ähnlicher Effekt auf.
Mein funktionierender Code:
sub saveEM {
my $pre1 = ReadingsVal("EM_day","state","");
my $pre2 = ReadingsVal("EM_day_pre_1","state","");
my $pre3 = ReadingsVal("EM_day_pre_2","state","");
my $pre4 = ReadingsVal("EM_day_pre_3","state","");
my $pre5 = ReadingsVal("EM_day_pre_4","state","");
my $pre6 = ReadingsVal("EM_day_pre_5","state","");
my $pre7 = ReadingsVal("EM_day_pre_6","state","");
my $dat = localtime;
#Max
if ($pre1 > ReadingsVal("EM_day_pre_max","state",0)){
fhem ("set EM_day_pre_max $pre1");
fhem ("setreading EM_day_pre_max date $dat");
};
#Min
if ($pre1 < ReadingsVal("EM_day_pre_min","state",0)){
fhem ("set EM_day_pre_min $pre1");
fhem ("setreading EM_day_pre_min date $dat");
};
#Vortageswerte
fhem("set EM_day_pre_1 $pre1");
fhem("set EM_day_pre_2 $pre2");
fhem("set EM_day_pre_3 $pre3");
fhem("set EM_day_pre_4 $pre4");
fhem("set EM_day_pre_5 $pre5");
fhem("set EM_day_pre_6 $pre6");
fhem("set EM_day_pre_7 $pre7");
}
VG
Sven