Hi Rudolf,
ich weiß nicht, bzw. ich durchschaue nicht den Grund warum das oldreadings hash nicht gesetzt wird wenn der neue und der alte $val gleich sind. (in setReadingsVal($$$$) ):
Mein Problem : ich habe eine komplexe userreadings sub, die u.a. ein differential zw. altem und neuen reading bildet und dann noch vieles anderes macht.
ich hab versucht, das mit einem dummy nachzustellen:
Internals:
FUUID 5c439ed1-f33f-0e08-1584-7715593208ed4e35
NAME testdummy
NR 88
STATE 2
TYPE dummy
.attraggr:
.attrminint:
.or:
temperature
.userReadings:
HASH(0x524a0e0)
HASH(0x5406000)
OLDREADINGS:
2019-11-22 15:01:14 temperature 1
READINGS:
2019-11-22 14:45:13 state temperature 11.0
2019-11-22 16:06:34 temperature 2
2019-11-22 16:06:34 testdifferential 0
2019-11-22 16:06:34 testdifferential1 0.918367346938776
Attributes:
oldreadings temperature
readingList temperature
room test
setList temperature
stateFormat temperature
userReadings testdifferential:temperature.* differential {ReadingsVal("$name","temperature",0)*3600},
testdifferential1:temperature.* {(ReadingsVal("$name","temperature",0) - OldReadingsVal("$name","temperature",0)) *3600 /OldReadingsAge("$name","temperature",900)}
Da sieht man sehr schön den Unterschied zwischen differential-funktion und meiner sub, obwohl m.M. nach dasselbe herauskommen sollte!
Mien Vorschlag: Änderung in setReadingsVal:
defined($hash->{READINGS}{$rname}{VAL}) &&
defined($hash->{READINGS}{$rname}{TIME}) &&
($hash->{READINGS}{$rname}{TIME} ne $ts ) {
# $hash->{READINGS}{$rname}{VAL} ne $val ) {
$hash->{OLDREADINGS}{$rname}{VAL} = $hash->{READINGS}{$rname}{VAL};
Ich bin mir allerdings nicht sicher, welche Auswirkungen das sonts noch hat.
l.g. erwin
Hallo Erwin,
Ich denke es macht keinen Sinn im allgemeinen ein oldreading zu setzen wenn das newreading den selben Wert hat.
Rudi kann zu dem Ambitionen im übrigen wenig sagen, der Code stammte von Andre ;D
Grüße
Vermutlich wollte man damit sehen, wann sich der Wert geaendert hat, insb. interessant bei Geraeten die regelmaessig den aktuellen Wert senden.
Da die Aenderung bei existierenden Konfigurationen Probleme bereiten kann, will ich es vermeiden.
Ich empfehle den letzten Wert selbst zu merken, zBsp. in $data{myValue}, oder in einer Variable des 99_myUtils.pm.
Hi Cooltux & Rudolf
denke schon das es Sinn macht,
Beispiel: wenn man ein differenzial ausrechnen will: delta-wert/zeitspanne.... wie z.B. Ein Stromzähler: value in KW/h -> differential = Aktueller Verbrauch der letzen Messperiode.
Ich verstehe die Argumente von Rudolf, nachdem ich ohnehin den code in 99_myUtils.pm unterbringen will, werde ich diesen Weg wählen und via notify triggern.
Danke & l.g. erwin