FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Markus M. am 17 Juni 2013, 20:39:43

Titel: OldValue("mydummy") == Value("mydummy")
Beitrag von: Markus M. am 17 Juni 2013, 20:39:43
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.
Titel: Aw: OldValue("mydummy") == Value("mydummy")
Beitrag von: rudolfkoenig am 17 Juni 2013, 21:04:30
Bei mir tut es:

define f1n notify dummy { Log 1, "f1n: ".OldValue('dummy')."/".Value("dummy") }
Titel: Aw: OldValue("mydummy") == Value("mydummy")
Beitrag von: Markus M. am 17 Juni 2013, 21:20:58
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!
Titel: Antw:OldValue("mydummy") == Value("mydummy")
Beitrag von: Wolle02 am 14 Januar 2019, 17:12:22
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
Titel: Antw:OldValue("mydummy") == Value("mydummy")
Beitrag von: Wolle02 am 20 Januar 2019, 14:41:40
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?
Titel: Antw:OldValue("mydummy") == Value("mydummy")
Beitrag von: Otto123 am 20 Januar 2019, 15:15:24
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
Titel: Antw:OldValue("mydummy") == Value("mydummy")
Beitrag von: CoolTux am 20 Januar 2019, 15:17:24
Schau Dir lieber OldReadingsVal an.
Titel: Antw:OldValue("mydummy") == Value("mydummy")
Beitrag von: Otto123 am 20 Januar 2019, 15:19:37
@Marko Was soll da anders sein? ;D
Zitatsimilar to the above functions, but used to access the previous values.
Titel: Antw:OldValue("mydummy") == Value("mydummy")
Beitrag von: CoolTux am 20 Januar 2019, 15:23:32
Kann mich erinnern das ich mit OldValue auch Probleme hatte, welche dann bei OldReadingsVal nicht mehr auf tauchten.
Titel: Antw:OldValue("mydummy") == Value("mydummy")
Beitrag von: Otto123 am 20 Januar 2019, 16:59:37
Aha.
Ja aber mit zwischenspeichern scheint es ja zu funktionieren. Würde ich immer empfehlen, anstatt immer wieder neu abzufragen.

Titel: Antw:OldValue("mydummy") == Value("mydummy")
Beitrag von: Wolle02 am 21 Januar 2019, 21:25:43
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
Titel: Antw:OldValue("mydummy") == Value("mydummy")
Beitrag von: Wolle02 am 22 Januar 2019, 17:58:04
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