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','')) }
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
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}}
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.
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};
ZitatBug in OWMULTI.
Nö.
LG
pah
Und wieso verhält sich OWMULTI dann so wie von mir beschrieben?