OldValue("mydummy") == Value("mydummy")

Begonnen von Markus M., 17 Juni 2013, 20:39:43

Vorheriges Thema - Nächstes Thema

Markus M.

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.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

rudolfkoenig

Bei mir tut es:

define f1n notify dummy { Log 1, "f1n: ".OldValue('dummy')."/".Value("dummy") }

Markus M.

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!
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Wolle02

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

Wolle02

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?

Otto123

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

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

@Marko Was soll da anders sein? ;D
Zitatsimilar to the above functions, but used to access the previous values.
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

CoolTux

Kann mich erinnern das ich mit OldValue auch Probleme hatte, welche dann bei OldReadingsVal nicht mehr auf tauchten.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Aha.
Ja aber mit zwischenspeichern scheint es ja zu funktionieren. Würde ich immer empfehlen, anstatt immer wieder neu abzufragen.

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

Wolle02

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

Wolle02

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