FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Timmy.m am 25 Juli 2015, 21:22:41

Titel: Werte kopieren im Notify werden durcheinander abgearbeitet
Beitrag von: Timmy.m am 25 Juli 2015, 21:22:41
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
Titel: Antw:Werte kopieren im Notify werden durcheinander abgearbeitet
Beitrag von: Timmy.m am 27 Juli 2015, 21:32:45
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)}
Titel: Antw:Werte kopieren im Notify werden durcheinander abgearbeitet
Beitrag von: SvenJust am 28 Juli 2015, 09:16:12
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