Plot(steps) aus state open/closed erzeugen

Begonnen von reen, 09 November 2016, 00:23:15

Vorheriges Thema - Nächstes Thema

reen

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


dev0

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.

reen

Danke dev0, mit dem "txt to val" hat es super funktionert!

reen

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?

dev0

Wie ich oben schon schrieb: du solltest das reading zum Auslösen (triggern) benutzen, das du auswerten möchtest, nicht andere oder alle.