FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: dirk.k am 20 Juni 2018, 18:09:58

Titel: Verständnisfrage: ReadingsTimestamp von Userreadings
Beitrag von: dirk.k am 20 Juni 2018, 18:09:58
Hallo zusammen,
ich scheitere gerade am Versuch den ReadingsTimestamp eines Userradings auszuwerten.
Als Resultat soll ein weiteres Userreading gefüllt werden, wenn das erste für 5 Sekunden unverändert bleibt.
Das Ganze soll ein Flapping unterbinden.
Ist es evtl. gar nicht möglich den ReadingsTimestamp eines userreadings auszuwerten?

ConnectionState {
return "offline" if ((time - time_str2num(ReadingsTimestamp("$NAME","uptime","1970-01-01 0:00:00"))) > (2*60));
return "gestoert"
if (( ReadingsVal("$NAME","StatusDisplay",0) eq "STÖRUNG-RELAY=0") &&
((time - time_str2num(ReadingsTimestamp("$name","StatusDisplay","1970-01-01 0:00:00"))) > 5 ));
return "online";
} ,


Hier soll das userreading "ConnectionState" auf gestört gehen, wenn das userreading "StatusDisplay" > 5 Sekunden auf "STÖRUNG-RELAY=0" steht. Verwende ich den Zeitstempel von "uptime" (kommt per MQTT) funktioniert das ganze. 

kann mir da jemand auf die Sprünge helfen?
Titel: Antw:Verständnisfrage: ReadingsTimestamp von Userreadings
Beitrag von: amenomade am 21 Juni 2018, 23:43:08
Verstehe nicht ganz, was Du machen möchtest, aber Du hast 2x $NAME (und einmal $name).
Titel: Antw:Verständnisfrage: ReadingsTimestamp von Userreadings
Beitrag von: dev0 am 22 Juni 2018, 09:49:23
Eigene Perl Scripte kannst Du auch selbst mit dem "Debug" Befehl, der das Argument ins FHEM Log schreibt, untersuchen.

Beispiele:

Debug "Timestamp: ".ReadingsTimestamp("$NAME","uptime","1970-01-01 0:00:00");
Debug "Timediff: ".time - time_str2num(ReadingsTimestamp("$NAME","uptime","1970-01-01 0:00:00"));
...
Titel: Antw:Verständnisfrage: ReadingsTimestamp von Userreadings
Beitrag von: Otto123 am 22 Juni 2018, 10:06:22
Hi,

das hier (ReadingsTimestamp("$name", ist doch einfach nur falsch?!
Ich würde es so schreiben (ReadingsTimestamp($name, das funktioniert bei mir.

Die Variable gehört doch nicht noch einmal in "" ?
$NAME ist doch die FHEM Variable und $name die Perlvariable - oder?

Ob der Rest des Ausdruckes das macht was er soll: Keine Ahnung, es stand ja auch nicht da was nicht geht!

Gruß Otto
Titel: Antw:Verständnisfrage: ReadingsTimestamp von Userreadings
Beitrag von: dev0 am 22 Juni 2018, 11:39:56
Per: Variablen werden auch innerhalb von " korrekt interpretiert, nur innerhalb von ' nicht.
In userReadings Perlcode funktioniert sowohl $name als auch $NAME. Siehe: fhem.pl/readingsEndUpdate()
Titel: Antw:Verständnisfrage: ReadingsTimestamp von Userreadings
Beitrag von: Otto123 am 22 Juni 2018, 14:17:20
Danke für die Erklärung, die Variablen werden innerhalb von "" aufgelöst das wusste ich - und nochmal drüber nachgedacht: klar, das "" stört da nicht wirklich :)
Aber dein zweiter Satz macht das Leben auch nicht unbedingt leichter: Im Umkehrschluss: was in userReadings funktioniert muss dann an andere Stelle in Perl nicht funktionieren  ???
Titel: Antw:Verständnisfrage: ReadingsTimestamp von Userreadings
Beitrag von: dev0 am 23 Juni 2018, 08:02:48
my $NAME = $name; # no exceptions, #53069
$NAME wurde mWn eingeführt, um konsistent mit anderen Funktionen zu sein. $name haben wohl Anwender entdeckt, die auch mal in den Source Code gucken ;)