Zeitspanne zwischen 2 Reading Änderungen

Begonnen von dominik, 20 Mai 2020, 16:41:02

Vorheriges Thema - Nächstes Thema

dominik

Hallo,

ich habe bei mir im Kühlschrank einen Temperatur/Feuchtigkeitssensor und möchte damit erkennen ob die Tür noch offen ist.

Laut den bisherigen Aufzeichnungen erhöht sich die Feuchtigkeit sehr sprungartig beim öffnen und geht dann auch wieder steil nach unten wenn die Tür zu ist. Nun habe ich bei DOIF :inc gefunden um die prozentuelle Steigerung zu berechnen. Leider finde ich keine Möglichkeit um die Differenz zwischen 2 Werten gegen die Zeitspanne zu dividieren.

Beispiel (Humidity, Zeit):
50% 16:00
55% 16:10 (normale Erhöhung während des Betriebs)
60% 16:11 (Tür wurde geöffnet)
55% 16:12 (Tür geschlossen)
50% 16:30 (normale Absenkung während des Betriebs)

Wie man sieht, ist zwischen den ersten beiden Werten 5% Unterschied, danach geht die Tür auf und der Wert steigt innerhalb einer Minuten um 5%. Genau diese Steigerung in kurzer Zeit möchte ich gerne im DOIF erkennen. Wenn jemand eine Idee hat, bitte gerne melden. Danke!
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Damian

Das könntest du mit diff lösen: https://fhem.de/commandref_DE.html#DOIF_Reading_Funktionen

Wenn der Sensor nicht regelmäßig sendet, kannst du bei diesem event-min-interval setzen.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dominik

diff habe ich mir auch schon angeschaut, da bekomme ich aber nicht die Zeitinfo. Da würde immer 5 zurück kommen.

Beim Beispiel würde ich folgende Werte benötigen:
50% 16:00
55% 16:10 (normale Erhöhung während des Betriebs) => 5%/10min=0.5
60% 16:11 (Tür wurde geöffnet) => 5/1=5
55% 16:12 (Tür geschlossen) => 5/1=5
50% 16:30 (normale Absenkung während des Betriebs) => 5/28=0.18

Immer wenn der Wert > 1 ist, könnte ich damit eine Türänderung erkennen. event-min-interval müsste ich in diesem Bsp auch auf 1 Minute setzen und damit hilft es mir auch nicht, oder?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Damian

Zitat von: dominik am 20 Mai 2020, 17:15:22
diff habe ich mir auch schon angeschaut, da bekomme ich aber nicht die Zeitinfo. Da würde immer 5 zurück kommen.

Beim Beispiel würde ich folgende Werte benötigen:
50% 16:00
55% 16:10 (normale Erhöhung während des Betriebs) => 5%/10min=0.5
60% 16:11 (Tür wurde geöffnet) => 5/1=5
55% 16:12 (Tür geschlossen) => 5/1=5
50% 16:30 (normale Absenkung während des Betriebs) => 5/28=0.18

Immer wenn der Wert > 1 ist, könnte ich damit eine Türänderung erkennen. event-min-interval müsste ich in diesem Bsp auch auf 1 Minute setzen und damit hilft es mir auch nicht, oder?

event-min-interval  auf 1 setzen

und diff5 angeben
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dominik

Mit diff5 bekomme ich ja eine Differenz vom aktuellen Wert zum 5. letzten. Da kann es leicht sein, dass der 5. letzte Wert ebenfalls einer war wo die Tuer offen war und damit ist die Differenz zu klein.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Damian

Zitat von: dominik am 20 Mai 2020, 17:34:43
Mit diff5 bekomme ich ja eine Differenz vom aktuellen Wert zum 5. letzten. Da kann es leicht sein, dass der 5. letzte Wert ebenfalls einer war wo die Tuer offen war und damit ist die Differenz zu klein.

Der fünftletzter ist immer der vor 5 Minuten und das wolltest du doch haben. Wenn die Tür offen ist, werden die späteren Differenzen kleiner sein, was egal ist, da der vorherige aufgrund größerer Differenz bereits zugeschlagen hat.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dominik

Das muss nicht sein, dass der 5. letzte vor 5 Minuten war. Der Sensor liefert teilweise auch erst nach 30 Minuten einen neuen Wert wenn sich dazwischen nichts aendert. Oder habe ich event-min-interval falsch verstanden?

Im Anhang ein Diagramm mit der Luftfeuchtigkeit, da sieht man gut die Spitzen. Das sind die Zeiten wo die Tuer offen war.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Damian

Zitat von: dominik am 20 Mai 2020, 17:48:09
Das muss nicht sein, dass der 5. letzte vor 5 Minuten war. Der Sensor liefert teilweise auch erst nach 30 Minuten einen neuen Wert wenn sich dazwischen nichts aendert. Oder habe ich event-min-interval falsch verstanden?

Im Anhang ein Diagramm mit der Luftfeuchtigkeit, da sieht man gut die Spitzen. Das sind die Zeiten wo die Tuer offen war.

Die Frage ist, ob du zuvor event-on-change-reading gesetzt hast.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dominik

#8
Nein, event-on-change-reading ist nicht gesetzt. Ist ein Xiaomi Zigbee Sensor.

Schön wäre eine Funktion :steigung die (aktueller Wert - letzter Wert)/Zeitspanne in Sekunde rechnet. Das wäre ideal.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Damian

Zitat von: dominik am 20 Mai 2020, 18:04:44
Nein, event-on-change-reading ist nicht gesetzt. Ist ein Xiaomi Zigbee Sensor.

Schön wäre eine Funktion :steigung die (aktueller Wert - letzter Wert)/Zeitspanne in Sekunde rechnet. Das wäre ideal.

Du kannst es auch mit https://wiki.fhem.de/wiki/Event-aggregator probieren
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dominik

Danke fuer den Tipp! Das schau ich mir gleich an.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik