OldValue zeigt für einen Dummy, ein Thermometer und eigentlich alle Geräte bei denen ich es ausprobiert habe immer nur den aktuellen Wert an.
Übersehe ich etwas, oder hat sich da irgendwo ein Bug eingeschlichen?
Getestet (zum ersten Mal) mit revision 3297.
Bei mir tut es:
define f1n notify dummy { Log 1, "f1n: ".OldValue('dummy')."/".Value("dummy") }
Ah, jetzt geht mir ein Licht auf! (Glaube ich...)
Gehe ich recht in der Annahme, dass OldValue() nur innerhalb eines notify tatsächlich den alten Wert zurückgibt, sonst (wenn ich das einfach in die Eingabezeile tippe) aber keinen unterschiedlichen Wert und das auch gar nicht soll?
Falls ja, ist die commandref leider ein wenig irreführend (To test perl oneliners, type them on the telnet prompt (or FHEMWEB text input) by enclosing it in {}...) und könnte einen Hinweis darauf vertragen.
Danke für den schnellen Wink mit dem Zaunpfahl!
Es tut mir leid, wenn ich diesen Uraltthread wieder hochhole, aber es passt thematisch halt hier dazu.
Ich habe das mit dem Handling von OldValue leider nicht ganz verstanden. Anhand des o.g. Beispiels von Rudi, habe ich ein Notify erstellt, in dem ich versuche die Luftdrucktendenz abzubilden.
Wetter {Log 1, "Luftdruck: alt: ".OldValue("Luftdruck")." , aktuell: ".Value("Luftdruck");
if (Value("Luftdruck") > OldValue("Luftdruck")) {fhem "set Luftdruck_Tendenz steigend"}
elsif (Value("Luftdruck") < OldValue("Luftdruck")) {fhem "set Luftdruck_Tendenz fallend"}
else {fhem "set Luftdruck_Tendenz gleichbleibend"}
}
Wahrscheinlich ist das völlig grottenfalsch aufgebaut, aber ich stehe hier etwas auf dem Schlauch. Im Logfile werden für Value("Luftdruck") und OldValue("Luftdruck") immer die gleichen Werte ausgegeben und folgerichtig steht mein Dummy für die Tendenz immer auf "gleichbleibend".
Kann mir das bitte nochmal jemand für Begriffsstutzige erklären?
Gruß
Wolle
Kann mir keiner helfen, was ich in meinem Notify falsch gemacht habe oder warum das sonst nicht funktionieren will? Muss ich in meinem Dummy "Luftdruck" erst noch irgendein Attribut setzen, damit OldValue gespeichert wird?
Hi,
ich denke, Du darfst/kannst das nicht mehrfach abfragen. So wie Markus oben schrieb, es funktioniert in dem Augenblick, als zwei Perl Onliner keine Chance!
Ich habe so getestet:
defmod f1n notify testzaehler { \
my $old = OldValue('testzaehler');;\
my $new = Value('testzaehler');;\
Log 1, "f1n: $old / $new"}
attr f1n room Test
Gruß Otto
Schau Dir lieber OldReadingsVal an.
@Marko Was soll da anders sein? ;D
Zitatsimilar to the above functions, but used to access the previous values.
Kann mich erinnern das ich mit OldValue auch Probleme hatte, welche dann bei OldReadingsVal nicht mehr auf tauchten.
Aha.
Ja aber mit zwischenspeichern scheint es ja zu funktionieren. Würde ich immer empfehlen, anstatt immer wieder neu abzufragen.
Vielen Dank erstmal für eure Tips und Unterstützung. Leider komme ich grade nicht zum Testen, aber ich gebe Rückmeldung was eure Tips mit Zwischenspeichern und OldReadingsVal bei mir ergeben haben.
Danke und Gruß
Wolle
So, ich hab mal wieder den Wald vor lauter Bäumen nicht gesehen. Ich habe natürlich mein Notify falsch aufgebaut, in dem ich auf mein Wetterdevice getriggert habe und nicht auf den Luftdruckdummy.
Mit
Luftdruck {Log 1, "Luftdruck: alt: ".OldValue("Luftdruck")." , aktuell: ".Value("Luftdruck");
if (Value("Luftdruck") > OldValue("Luftdruck")) {fhem "set Luftdruck_Tendenz steigend"}
elsif (Value("Luftdruck") < OldValue("Luftdruck")) {fhem "set Luftdruck_Tendenz fallend"}
else {fhem "set Luftdruck_Tendenz gleichbleibend"}
}
funktioniert es jetzt auch mit OldValue.
Trotzdem nochmal herzlichen Dank für eure Alternativen Lösungsmöglichkeiten mit Zwischenspeichern und OldReadingsVal.
Gruß
Wolle