Verständnisfrage: ReadingsTimestamp von Userreadings

Begonnen von dirk.k, 20 Juni 2018, 18:09:58

Vorheriges Thema - Nächstes Thema

dirk.k

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?

amenomade

Verstehe nicht ganz, was Du machen möchtest, aber Du hast 2x $NAME (und einmal $name).
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

dev0

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"));
...

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

dev0

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()

Otto123

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  ???
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

dev0

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 ;)