$hash->{OLDREADINGS} wird nicht gesetzt wenn oldval eq newval

Begonnen von erwin, 23 November 2019, 09:15:45

Vorheriges Thema - Nächstes Thema

erwin

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 
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

CoolTux

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

rudolfkoenig

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.

erwin

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
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...