Zeit zwischen Wertänderung eines dummys, Problem mit notify

Begonnen von BerndHST, 10 April 2018, 19:00:33

Vorheriges Thema - Nächstes Thema

BerndHST

Hallo,

ich habe einen dummy "Drainage", dessen Werte in einem file gelogt werden. Zusätzlich möchte ich die Zeitspanne zwischen den Wertänderungen erfassen und habe dazu folgendes notify erstellt:
   


define DrainPumpe notify GPIO23Drain:Pinlevel:.* {\
if (ReadingsVal("GPIO23Drain","Pinlevel","") eq "low") { fhem("set Drainage 1") } else { fhem("set Drainage 0") };;;;\
fhem("attr GPIO23Drain do_not_notify");;;;\
fhem("sleep 60 quiet");;;;\
fhem("deleteattr GPIO23Drain do_not_notify");;;;\
fhem("save");;;;\
my $dold = time_str2num(OldTimestamp("Drainage"));;;;\
my $dnew = time_str2num(ReadingsTimestamp("Drainage"));;;;\
my $dint = $dnew-$dold;;;;\
fhem("setreading Drainage intervall $dint");;;;\
}


Die Differenz soll also über OldTimestamp berechnet  und dann in die UserReading "intervall" geschrieben werden. Nur klappt das leider nicht und ich komme leider nicht dahinter, woran es hapert. Da noch ein Fehler drin ist, wird auch das notify nicht richtig ausgeführt...
do_not_notify ist nötig, da der Druckschalter einige male schaltet, bis der Pegel entsprechend gestiegen oder abgesunken ist und der Kontakt offen oder geschlossen bleibt, quasi ein längeres "Prellen", welches so 60 sec ignoriert wird.  Das funktioniert auch, der Fehler muß in den Zeilen danach liegen.

Oder gäbe es evtl. eine elegantere Möglichkeit, die Zeit zwischen den gespeicherten Werten direkt im SVG-Plot auszuwerten und dort darzustellen?

Otto123

Hi,

ich fang mal mit Schönheits Dingen an:
- zwei ;; reichen!
- man kann fhem Befehle durch ;; trennen - man muss nicht jedes Mal von Perl nach fhem und zurück.
- save im Script ist kritisch, da gab es einige Infos im letzten halben Jahr.

Das ist aber falsch: ReadingsTimestamp("Drainage")
ZitatReadingsTimestamp(<devicename>, <reading>,<defaultvalue>)
gibt den Zeitstempel des Readings zurück.

Man könnte es auch direkt als userReadings machen - ist aber vielleicht egal.

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

rudolfkoenig

Zusaetzlich:
fhem("sleep 60 quiet");;;;\
erzeugt die Meldung:
ZitatWARNING: sleep without additional commands is deprecated and blocks FHEM
Stattdessen:
Zitatfhem("sleep 60 quiet;;deleteattr GPIO23Drain do_not_notify");;

Und: ReadingsTimestamp braucht 3 Argumente, eine entsprechende Warnung muesste auch in FHEM-Log zu sehen sein.