Hi,
ich möchte mir ein Plot erzeugen auf den Zustand eines Gerätes welches zwischen open/closed wechselt.
Da ich nicht rausgefunden habe, wie ich diesen Zustand open/closed direkt fürs Plot auswerten kann, habe ich mir ein userReading erzeugt, welches den state abfragt und das dann als 0/1 ausgibt.
status:trigger_cnt.* {if(Value("hk_hmSM_Brenner") eq "closed"){'1'} else{'0'};}
Jetzt verhält sich dieses userReading aber genau andersrum als es im IF-ELSE definiert wurde.
Trigger wird ausgelöst, "state" wechselt von "open" zu "closed" und das userReading status bekommt "0" eingetragen, anstatt wie erwartet "1". Andersrum verhält es sich genauso.
Wird der PERL code nach dem triggern vielleicht so schnell ausgeführt, dass aus state noch der "alte" Wert ausgelesen wird?
Ich könnte natürlich die zugewiesenen Werte einfach zwischen IF und ELSE tauschen, aber das wäre ja ein unschöner workaround.
Kann man das irgendwie anders lösen? Also eleganter den "neuen" Wert auslesen, oder vielleicht doch im Plot mit open/closed arbeiten?
Bin für ein Denkanstoß dankbar. ;)
Viele Grüße
reen
Zitat von: reen am 09 November 2016, 00:23:15
Da ich nicht rausgefunden habe, wie ich diesen Zustand open/closed direkt fürs Plot auswerten kann
Such mal nach "open closed plot", dann findest Du u.a.
http://www.fhemwiki.de/wiki/EnOcean-STM-250-Fenster-T%C3%BCrkontakt#T.C3.BCrstatus_in_einem_Plot_darstellen
https://forum.fhem.de/index.php/topic,16939.msg282110.html#msg282110
Zitat von: reen am 09 November 2016, 00:23:15
Trigger wird ausgelöst, "state" wechselt von "open" zu "closed" und das userReading status bekommt "0" eingetragen, anstatt wie erwartet "1". Andersrum verhält es sich genauso.
Du triggerst auf "trigger_cnt.*" liest den Status aber von Value("hk_hmSM_Brenner"). Vmtl. hat state zu dem Zeitpunk noch den alten Wert. Trigger auf den Wert, den Du auch benutzen möchtest.
Danke dev0, mit dem "txt to val" hat es super funktionert!
ZitatDu triggerst auf "trigger_cnt.*" liest den Status aber von Value("hk_hmSM_Brenner"). Vmtl. hat state zu dem Zeitpunk noch den alten Wert. Trigger auf den Wert, den Du auch benutzen möchtest.
Ich habe als trigger auch ".*" ausprobiert, aber es wird trotzdem "falschherum" getriggert.
Ich probiere gerade die Dauer eines Zustandes zu ermitteln mit folgendem userReading:
betriebszeit_last:.* {
my $zustand = Value("hk_hmSM_Brenner");
if($zustand eq "closed") {
$data{brenner_last} = time();
} elsif($zustand eq "open") {
$data{brenner_secs} = (time()-$data{brenner_last});
}
$data{brenner_secs};
}
Da wird auch verkehrt herum getriggert. Gibt es da noch eine Idee?
Wie ich oben schon schrieb: du solltest das reading zum Auslösen (triggern) benutzen, das du auswerten möchtest, nicht andere oder alle.