FHEM Forum

FHEM => Sonstiges => Thema gestartet von: erwin am 23 November 2019, 09:15:45

Titel: $hash->{OLDREADINGS} wird nicht gesetzt wenn oldval eq newval
Beitrag von: erwin am 23 November 2019, 09:15:45
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 
Titel: Antw:$hash->{OLDREADINGS} wird nicht gesetzt wenn oldval eq newval
Beitrag von: CoolTux am 23 November 2019, 09:19:21
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
Titel: Antw:$hash->{OLDREADINGS} wird nicht gesetzt wenn oldval eq newval
Beitrag von: rudolfkoenig am 23 November 2019, 10:26:50
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.
Titel: Antw:$hash->{OLDREADINGS} wird nicht gesetzt wenn oldval eq newval
Beitrag von: erwin am 23 November 2019, 10:38:58
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