Fehlende Oldreadings für OWMULTI

Begonnen von Cube, 02 März 2021, 12:57:17

Vorheriges Thema - Nächstes Thema

Cube

Ich benutze einen DS2438 mit angeschlossenem OPT101 als Lichtsensor. In FHEM ist dieser als OWMULTI-Device angelegt. Vereinzelt liefert der Sensor falsche extreme Daten, die ich mit oldreadings raus filtern will. Ich habe das Attribut oldreadings auf .* gesetzt und eine Änderung aller Werte abgewartet. Für einige Readings, z.B. temperature werden auch wie erwartet die alten Werte abgespeichert. Für vsense und voltage aber nicht. Mache ich etwas falsch oder ist das ein Fehler im FHEM?

Im Folgenden noch ein list des Devices:


Internals:
   DEF        DS2438 C0CAE5000000
   ERRCOUNT   0
   ERRSTATE   0
   FUUID      5f42becd-f33f-2127-af60-0dedd2468ec256e6
   INTERVAL   300
   IODev      1wire
   NAME       Sensor_Licht_OST
   NEXTSEND   1614685831.28814
   NOTIFYDEV  global
   NR         339
   NTFY_ORDER 50-Sensor_Licht_OST
   OW_FAMILY  26
   OW_ID      C0CAE5000000
   PRESENT    1
   ROM_ID     26.C0CAE5000000.A9
   STATE      V: 0.49, vs: 0.0271, T: 17.5°C
   TYPE       OWMULTI
   offset     1
   Helper:
     DBLOG:
       temperature:
         DbLog:
           TIME       1614685231.29434
           VALUE      17.5
       voltage:
         DbLog:
           TIME       1614685831.31408
           VALUE      0.49
       vsense:
         DbLog:
           TIME       1614685831.31408
           VALUE      0.0271
   OLDREADINGS:
     2021-03-02 12:45:31   state           vad:  0.47 V (T:  17.5 °C vs:  0.03 V vs.t:  0.12 Vs)
     2021-03-02 12:38:15   temperature     17.3
     2021-03-02 12:45:31   time            273888
     2021-03-02 12:45:31   voltage         
     2021-03-02 12:45:31   vsense           
     2021-03-02 12:45:31   vsense.t         
   READINGS:
     2021-03-02 12:50:31   VDD             5.05
     2021-03-02 12:50:31   state           vad:  0.49 V (T:  17.5 °C vs:  0.03 V vs.t:  0.12 Vs)
     2021-03-02 12:50:31   temperature     17.5
     2021-03-02 12:50:31   time            274188
     2021-03-02 12:50:31   voltage         0.49
     2021-03-02 12:50:31   vsense          0.0271
     2021-03-02 12:50:31   vsense.t        0.125
   helper:
     bm:
       OWMULTI_Attr:
         cnt        4
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.03. 12:21:12
         max        8.08238983154297e-05
         tot        0.000215530395507812
         mAr:
           set
           Sensor_Licht_OST
           oldreadings
           .*
       OWMULTI_Get:
         cnt        26
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.03. 12:38:14
         max        0.0132670402526855
         tot        0.0756075382232666
         mAr:
           HASH(0x5fdc8d0)
           Sensor_Licht_OST
           reading
       OWMULTI_Notify:
         cnt        1971
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        27.02. 23:03:51
         max        0.000284910202026367
         tot        0.0563099384307861
         mAr:
           HASH(0x5fdc8d0)
           HASH(0x9634b8)
       OWMULTI_Set:
         cnt        2068
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        02.03. 08:35:30
         max        0.000426054000854492
         tot        0.267899036407471
         mAr:
           HASH(0x5fdc8d0)
           Sensor_Licht_OST
           ?
   owg_val:
     17.46875
     5.05
     0.49
     0.027099609375
     0.12451171875
     1
     274188
   tempf:
     factor     1
     offset     0
Attributes:
   DbLogExclude .*
   DbLogInclude vsense,voltage,temperature
   IODev      1wire
   alias      Sensor_Licht_OST
   event-on-change-reading .*
   icon       day_night
   model      DS2438
   oldreadings .*
   stateFormat { sprintf("V: %.2f, vs: %.4f, T: %.1f°C", ReadingsNum('Sensor_Licht_OST', 'voltage',''), ReadingsNum('Sensor_Licht_OST', 'vsense',''), ReadingsNum('Sensor_Licht_OST', 'temperature','')) }

TomLee

Weiterhelfen kann ich mit Sicherheit nicht, aus Interesse aber die Frage ob es mglw. klappt wenn man die Readings dann doch explizit kommasepariert angibt ?

Gruß

Thomas

det.

Du kannst die überflüssigen readings bis auf voltage aus dblog rausnehmen und dort unnütze Falschwerte ignorieren mit
DbLogValueFn  {if (($VALUE > xxx ) or ($VALUE < xyz)){$IGNORE=1}}
LG
det.

Cube

Zitat von: TomLee am 02 März 2021, 14:04:03
Weiterhelfen kann ich mit Sicherheit nicht, aus Interesse aber die Frage ob es mglw. klappt wenn man die Readings dann doch explizit kommasepariert angibt ?

Das funktioniert leider auch nicht, auch dann werden die Oldreadings für voltage und vsense nicht gesetzt.

Zitat von: det. am 02 März 2021, 15:32:23
Du kannst die überflüssigen readings bis auf voltage aus dblog rausnehmen und dort unnütze Falschwerte ignorieren mit
DbLogValueFn  {if (($VALUE > xxx ) or ($VALUE < xyz)){$IGNORE=1}}


Danke für den Tipp. Damit bekomme ich falsche Werte zumindest auf dem Log und somit den Graphen raus.

Trotzdem würde ich gerne in einem Notify mit den Oldreadings arbeiten. Und in anderen Gerätetypen funktioniert das auch. Deshalb vermute ich einen Bug in OWMULTI.

Cube

Hier noch ein paar weitere Erkenntnisse, die vielleicht helfen das Problem einzugrenzen.

Die Oldreadings für vsense und voltage sind vorhanden, der richtige Timestamp wird auch gesetzt, nur ist der Wert leer.


OLDREADINGS:
     2021-03-02 15:50:31   VDD             5.04
     2021-03-02 16:35:31   state           vad:  0.53 V (T:  18.1 °C vs:  0.03 V vs.t:  0.12 Vs)
     2021-03-02 16:25:31   temperature     18.2
     2021-03-02 16:35:31   time            287717
     2021-03-02 16:35:31   voltage         
     2021-03-02 16:35:31   vsense           
     2021-03-02 16:38:55   vsense.t


Interessant ist, dass der Wert des Oldreadings gesetzt wird, wenn ich das Reading per setreading verändere:
setreading Sensor_Licht_OST vsense 0.42
Sobald aber das Modul das normale Update durchführt, ist der Wert des Oldreadings wieder leer.

Folgende Zeile in der fhem.pl sollte für das Setzen des alten Wertes zuständig sein. Ich vermute, dass das Modul das für einige Readings irgendwie umgeht.


$hash->{OLDREADINGS}{$rname}{VAL} = $hash->{READINGS}{$rname}{VAL};


Prof. Dr. Peter Henning


Cube

Und wieso verhält sich OWMULTI dann so wie von mir beschrieben?