event-on-change-reading rechnet falsch?!

Begonnen von romakrau, 12 August 2021, 09:23:45

Vorheriges Thema - Nächstes Thema

romakrau

Hallo zusammen,
ich habe eine Aussentemperatursensor dessen Werte ich gerne loggen möchte. Ich verwende hierzu :
event-on-change-reading:0.1
und erhalten eine nicht sinnvolle Reihe von Werten:

2021-08-06_11:56:14 TER.Sensor.Temp temperature: 20.1
2021-08-06_11:59:01 TER.Sensor.Temp temperature: 20.3
2021-08-06_12:15:56 TER.Sensor.Temp temperature: 20.5
2021-08-06_12:16:17 TER.Sensor.Temp temperature: 20.4
2021-08-06_12:16:57 TER.Sensor.Temp temperature: 20.5
2021-08-06_12:20:37 TER.Sensor.Temp temperature: 20.6
2021-08-06_12:22:43 TER.Sensor.Temp temperature: 20.8
2021-08-06_12:25:37 TER.Sensor.Temp temperature: 21
2021-08-06_12:27:23 TER.Sensor.Temp temperature: 21.1
2021-08-06_12:29:37 TER.Sensor.Temp temperature: 21.3
2021-08-06_12:31:27 TER.Sensor.Temp temperature: 21.5
2021-08-06_12:40:27 TER.Sensor.Temp temperature: 21.4
2021-08-06_12:42:37 TER.Sensor.Temp temperature: 21.2

Der Sensor sendet fortlaufend Werte im Raster von 0.1 und ist eindeutig einstellig nach dem Komma. Eine Änderung des
Parameters auf 0.9 um ganzzahlige Temperatuern zu loggen brachte eine Verbesserung und zeigt jetzt folgende Werte:
2021-08-11_16:19:16 TER.Sensor.Temp temperature: 25.8
2021-08-11_18:28:40 TER.Sensor.Temp temperature: 26.8
2021-08-11_19:48:21 TER.Sensor.Temp temperature: 25.9
2021-08-11_20:08:48 TER.Sensor.Temp temperature: 24.9
2021-08-11_20:32:06 TER.Sensor.Temp temperature: 23.9
2021-08-11_21:02:34 TER.Sensor.Temp temperature: 22.9
2021-08-11_21:49:57 TER.Sensor.Temp temperature: 21.9
2021-08-11_22:16:14 TER.Sensor.Temp temperature: 20.9
2021-08-11_22:54:33 TER.Sensor.Temp temperature: 19.9
2021-08-12_00:05:47 TER.Sensor.Temp temperature: 18.9
2021-08-12_02:09:00 TER.Sensor.Temp temperature: 17.9
2021-08-12_05:05:11 TER.Sensor.Temp temperature: 16.9
2021-08-12_07:42:00 TER.Sensor.Temp temperature: 17.8
2021-08-12_08:25:44 TER.Sensor.Temp temperature: 18.8

Erwartet hätte ich eine fortlaufende Reihe von Werten mit 0.9 am Ende?

Gruß
Roman

DeeSPe

Ich glaube du hast "event-on-change-reading" falsch verstanden.
Zitatevent-on-change-reading
Dieses Attribut enthält eine durch Kommata getrennte Liste von "readings". Wenn gesetzt, erzeugen nur Veränderungen der gelisteten "readings" ein Ereignis. Wenn die aktualiserten Werte der gelisteten "readings" identisch sind, wird kein Ereignis generiert.
Wenn hinter dem Namen eines "readings" eine :Schwelle angegeben ist, wird das Event nur getriggert wenn die Änderung grösser als diese Schwelle ist.
Die unterschiedlichen Bedeutungen von event-on-update-reading und event-on-change-reading sind folgende:
Wenn beide Attribute nicht gesetzt sind erzeugt jede Aktualisierung eines jeden "readings" eines Gerätes ein Ereignis.
Wenn eines der Attribute gesetzt ist, erzeugen nur Updates oder änderungen von "readings" die in einem der Attribute gesetzt sind ein Ereignis.
Wenn ein "reading" in event-on-update-reading aufgeführt ist, erzeugt eine Aktualisierung ein Ereignis unabhängig ob das "reading" auch in event-on-change-reading aufgelistet ist.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

frank

Zitatund erhalten eine nicht sinnvolle Reihe von Werten:
warum stellst du es dann so ein?
die reihe passt zumindestens zur einstellung: event bei änderung von mindestens 0.1.

wenn du das erwartest, was ich denke, brauchst du einen anderen (schnelleren) sensor.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

romakrau

Der Sensor ist schnell genug und sendet auch die Zwischenwerte. Im ersten Beispiel gibt es den Sprung von 0.2 und 0.1. Diese Sprüngekann ich mir nicht erklären und auch die Beschreibung hilft mir nicht.

herrmannj

Wenn hinter dem Namen eines "readings" eine :Schwelle angegeben ist, wird das Event nur getriggert wenn die Änderung grösser als diese Schwelle ist.

ZitatErwartet hätte ich eine fortlaufende Reihe von Werten mit 0.9 am Ende?
Falsche Erwartung :)

im ersten Beispiel event wenn abs(neu-old) > 0.1
im zweiten Beispiel event wenn abs(neu-old) > 0.9

romakrau

Sorry, der Wert nn.9 ist etwas unglücklich die Erwartung geht dahin das der Ganzzahlige Anteil ,wechselt und der Nachkomma Anteil von 0.9 konstant bleibt. Dies ist auch in sehr vielen Fällen so bis auf einige Ausnahmen.
Um diese Ausnahmen geht es mir. Dasselbe gilt für die Wertereihe die um jeweils ein Zehntel wechseln sollte und nicht manchmal um 0.2. Schade gibt es wohl eien Erklärung für.

herrmannj

Zitat von: romakrau am 12 August 2021, 16:13:26
Sorry, der Wert nn.9 ist etwas unglücklich die Erwartung geht dahin das der Ganzzahlige Anteil ,wechselt und der Nachkomma Anteil von 0.9 konstant bleibt. Dies ist auch in sehr vielen Fällen so bis auf einige Ausnahmen.
Um diese Ausnahmen geht es mir. Dasselbe gilt für die Wertereihe die um jeweils ein Zehntel wechseln sollte und nicht manchmal um 0.2. Schade gibt es wohl eien Erklärung für.
Ist halt immer noch die falsche Erwartung. Die Funktion sollte jetzt klar sein, oder?

romakrau

Hallo herrmanj,
das hat meiner Meinung nach nichts mit falscher Erwartung zu tun sondern mit falscher Rechenweise. Gemäß dem ersten Beispiel :

2021-08-06_11:56:14 TER.Sensor.Temp temperature: 20.1
2021-08-06_11:59:01 TER.Sensor.Temp temperature: 20.3
2021-08-06_12:15:56 TER.Sensor.Temp temperature: 20.5
2021-08-06_12:16:17 TER.Sensor.Temp temperature: 20.4 fehlerhafter Wert Diff =0.1
2021-08-06_12:16:57 TER.Sensor.Temp temperature: 20.5 fehlerhafter Wert Diff = 0.1
2021-08-06_12:20:37 TER.Sensor.Temp temperature: 20.6 fehlerhafter Wert Diff = 0.1
2021-08-06_12:22:43 TER.Sensor.Temp temperature: 20.8
2021-08-06_12:25:37 TER.Sensor.Temp temperature: 21
2021-08-06_12:27:23 TER.Sensor.Temp temperature: 21.1 fehlerhafter Wert Diff = 0.1
2021-08-06_12:29:37 TER.Sensor.Temp temperature: 21.3
2021-08-06_12:31:27 TER.Sensor.Temp temperature: 21.5
2021-08-06_12:40:27 TER.Sensor.Temp temperature: 21.4 fehlerhafter Wert Diff = 0.1
2021-08-06_12:42:37 TER.Sensor.Temp temperature: 21.2

Jetzt klar geworden?

Nobbynews

Zitat von: romakrau am 12 August 2021, 17:15:47
2021-08-06_11:56:14 TER.Sensor.Temp temperature: 20.1
2021-08-06_11:59:01 TER.Sensor.Temp temperature: 20.3
2021-08-06_12:15:56 TER.Sensor.Temp temperature: 20.5
2021-08-06_12:16:17 TER.Sensor.Temp temperature: 20.4 fehlerhafter Wert Diff =0.1
2021-08-06_12:16:57 TER.Sensor.Temp temperature: 20.5 fehlerhafter Wert Diff = 0.1
2021-08-06_12:20:37 TER.Sensor.Temp temperature: 20.6 fehlerhafter Wert Diff = 0.1


Jetzt klar geworden?
Ja, mMn klarer Denkfehler.
Durch eoc wird nur der event verhindert, nicht jedoch, dass sich der Wert im Reading ändert.
Kein event -> kein logging
Also würde ich mal anhand der Timestamps vermuten, dass z.B. vorher der Messwert von z.B. 20.5 auf 20.6 angestiegen (daher kein event) und danach erst auf 20.4 abgefallen ist und daher wieder ein event ausgelöst und entsprecheng gelogged gewurde.
Liefert der Sensor minütlich Messwerte?

romakrau

Das wäre ein mögliiches Szenario. Ich werde mal einen zweiten log aufsetzen um die Werte zu prüfen.
Danke für die Anregung.

romakrau

Tja es wäre zu einfach gewesen. Das von Nobbynews gezeichnete Szenario erschien logisch.  Aber wie im zweiten Beispiel gezeigt triggert eoc mal bei >0.9 und mal bei =0.9. Eoc scheint wohl intern den wert des letzten Events zu speichern. Als Workaround setze ich mal eine dezimalstelle mehr, also 0.99 anstelle von 0.9.
Gruss Roman

Nobbynews

Zur Beurteilung wäre es nötig, mal die Log-Auszüge zu posten.
Also:
- Originaldaten
- eoc-Daten
Ich weiß ja nicht wie Du getestet hast, aber ich würde mir über ein userreading eine Kopie des Originals erstellen und dann auf beide ein eoc, also <Original,Kopie:0.1> und zusäzlich auf das Original ein event-on-update. Und zur Vollständigkeit dann bitte noch ein list vom device.