Problem mit event-on-change-reading

Begonnen von Gast45, 31 Mai 2018, 18:50:20

Vorheriges Thema - Nächstes Thema

Gast45

Hallo, mir ist heute aufgefallen, dass das Attribut event-on-change-reading scheinbar nicht richtig funktioniert.

Ich habe u.a. Readings für "temperature" und "humidity". Nur wenn sich einer der beiden Werte ändert, möchte ich ein Event erzeugen um "dewpoint" berechnen zu lassen. Oder nach 5 Minuten soll auch eine Berechnung stattfinden.

Dazu abe ich ein event-on-change-reading angelegt mit "humidity,temperature".
Und ein event-min-intervall mit ".*:300"

Wenn sich "humidity" ändert, funktioniert es richtig. Auch nach 5 Minuten findet eine Berechnung statt. Ändert sich aber nur "temperature", so passiert nichts.

Hast das schon jemand genauso beobachtet? Gibt es eine Abhilfe?
Meist liegt der Fehler vor der Tastatur

CoolTux

Bitte ein list vom Devices machen und hier einstellen.
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

Gast45

Das folgende List habe ich unmittelbar nach einem geänderten Temperaturwert (25.1 -> 25.0) und unveränderten Luftfeuchtewert gezogen.
Wie man sieht, hat keine Berechnung des Taupunktes stattgefunden. Zudem erkenne ich hier auch noch ein weiteres Problem, das ich nicht verstehe, nämlich dass der STATE noch ganz andere Werte zeigt. Wann wird der genau nachgezogen?

Internals:
   CHANGED   
   NAME       SensorAussen
   NR         41
   STATE      T: 25.6 H: 62.0
   TYPE       dummy
   OLDREADINGS:
   READINGS:
     2018-02-04 12:12:25   Batteriewechsel 0
     2018-05-31 19:51:24   absFeuchte      14.6
     2018-05-31 19:51:24   dewpoint        17.6
     2018-05-31 19:54:04   humidity        63.0
     2018-05-31 19:54:04   temperature     25.0
Attributes:
   event-min-interval .*:300
   event-on-change-reading humidity,temperature
   group      Sensordaten clonen – verarbeiten – loggen
   icon       temperature_humidity
   room       Sensoren
Meist liegt der Fehler vor der Tastatur

CoolTux

Min Intervall bedeutet das mindestens 300s gewartet werden soll seit dem letzten Event.
Schau bitte im Eventmonitor nach ob ein Event kommt.
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

RomanticBoy83

Mal gerate: Wie setzt du denn die Temperatur?
Ein Notify, welches auf das auslösende Gerät reagiert und auf dieses dann ein Reading setzt, löst kein weiteres Event aus.
Vermutung: Du reagiert auf ein Event dieses Dummy und setzt auf diesen Dummy das Reading?!

CoolTux

Zitat von: RomanticBoy83 am 31 Mai 2018, 20:09:29
Mal gerate: Wie setzt du denn die Temperatur?
Ein Notify, welches auf das auslösende Gerät reagiert und auf dieses dann ein Reading setzt, löst kein weiteres Event aus.
Vermutung: Du reagiert auf ein Event dieses Dummy und setzt auf diesen Dummy das Reading?!

Auch bei diesem Ansatz hilft ein Blick in den Eventmonitor.
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

Gast45

#6
Also im Detail mache ich folgendes:

1. Sammeln der Temperatur und Luftfeuchte in einem "SensorAussenQuelle". Mehr passiert hier nicht, um mir einen Batteriewechsel möglichst einfach zu halten.

2. Alle 20 Sekunden werden mittel at-Routine die beiden Werte nach SensorAussen kopiert mit:
+*00:00:20 { my $temp= ReadingsVal("SensorAussenQuelle","temperature",0) ;
my $hum= ReadingsVal("SensorAussenQuelle","humidity",0) ;
fhem("setreading SensorAussen temperature $temp");
fhem("setreading SensorAussen humidity $hum");}


3. Die geschilderte Berechnung des Taupunktes, wenn sich einer der Werte ändert aber mindestens alle 5 Minuten eine Berechnung.

Beispiel 1 mit Berechnung nach Ablauf von 5 Minuten:
Internals:
   NAME       SensorAussen
   NR         41
   STATE      T: 25.6 H: 62.0
   TYPE       dummy
   OLDREADINGS:
   READINGS:
     2018-02-04 12:12:25   Batteriewechsel 0
     2018-05-31 20:11:44   absFeuchte      14.4
     2018-05-31 20:11:44   dewpoint        17.3
     2018-05-31 20:11:44   humidity        64.0
     2018-05-31 20:11:44   temperature     24.6
Attributes:
   event-min-interval .*:300
   event-on-change-reading humidity,temperature
   group      Sensordaten clonen – verarbeiten – loggen
   icon       temperature_humidity
   room       Sensoren



Beispiel 2 mit geänderter Luftfeuchte (deutlich vor Ablauf von 5 Minuten):
Internals:
   NAME       SensorAussen
   NR         41
   STATE      T: 25.6 H: 62.0
   TYPE       dummy
   OLDREADINGS:
   READINGS:
     2018-02-04 12:12:25   Batteriewechsel 0
     2018-05-31 20:39:24   absFeuchte      13.8
     2018-05-31 20:39:24   dewpoint        16.6
     2018-05-31 20:39:24   humidity        65.0
     2018-05-31 20:39:24   temperature     23.6
Attributes:
   event-min-interval .*:300
   event-on-change-reading humidity,temperature
   group      Sensordaten clonen – verarbeiten – loggen
   icon       temperature_humidity
   room       Sensoren



Insofern kann ich den schon öfters gelesenen Hinweis
ZitatMin Intervall bedeutet das mindestens 300s gewartet werden soll seit dem letzten Event.
nicht verstehen, denn es funktioniert scheinbar so wie ich es verstanden hatte? *achselzuck*

ZitatVermutung: Du reagiert auf ein Event dieses Dummy und setzt auf diesen Dummy das Reading?!
Auch wird doch scheinbar ein Event erzeugt, wenn sich die Luftfeuchtigkeit ändert, nicht aber wenn sich die Temperatur ändert? Und bei beiden Werten verfahre ich doch auch identisch. Nur die Temperatur ist der zweite Wert im Attribut event-on-change-reading.
Allerdings habe ich gerade mal die Readings verdreht:
event-on-change-reading temperature,humidity
Auch hier keine Berechnung bei Änderung von Temperatur, aber bei Änderung der Feuchtigkeit.
Meist liegt der Fehler vor der Tastatur

CoolTux

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

RomanticBoy83

Du solltest doch den Event-Monitor zur Hilfe nehmen!
Dieses drehen ist Wurst -> drehe mal im "at" die Reihenfolge. Ich vermute ja, dass du nur das letzte bekommst.

Gast45

ZitatEventmonitor

ja  :D

2018-05-31 21:00:24 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:00:44
2018-05-31 21:00:29 CUL_TX SensorAussenQuelle T: 23.0 H: 67.0
2018-05-31 21:00:29 CUL_TX SensorAussenQuelle temperature: 23.0
2018-05-31 21:00:30 CUL_TX SensorAussenQuelle T: 23.0 H: 67.0
2018-05-31 21:00:30 CUL_TX SensorAussenQuelle humidity: 67.0
2018-05-31 21:00:44 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:01:04
2018-05-31 21:01:04 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:01:24
2018-05-31 21:01:24 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:01:44
2018-05-31 21:01:27 CUL_TX SensorAussenQuelle T: 22.9 H: 67.0
2018-05-31 21:01:27 CUL_TX SensorAussenQuelle temperature: 22.9
2018-05-31 21:01:28 CUL_TX SensorAussenQuelle T: 22.9 H: 67.0
2018-05-31 21:01:28 CUL_TX SensorAussenQuelle humidity: 67.0
2018-05-31 21:01:44 dummy SensorAussen temperature: 22.9
2018-05-31 21:01:44 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:02:04
2018-05-31 21:02:04 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:02:24
2018-05-31 21:02:24 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:02:44
2018-05-31 21:02:26 CUL_TX SensorAussenQuelle T: 22.9 H: 67.0
2018-05-31 21:02:26 CUL_TX SensorAussenQuelle temperature: 22.9
2018-05-31 21:02:26 CUL_TX SensorAussenQuelle T: 22.9 H: 67.0
2018-05-31 21:02:26 CUL_TX SensorAussenQuelle humidity: 67.0
2018-05-31 21:02:44 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:03:04
2018-05-31 21:03:04 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:03:24
2018-05-31 21:03:24 CUL_TX SensorAussenQuelle T: 22.9 H: 67.0
2018-05-31 21:03:24 CUL_TX SensorAussenQuelle temperature: 22.9
2018-05-31 21:03:24 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:03:44
2018-05-31 21:03:24 CUL_TX SensorAussenQuelle T: 22.9 H: 67.0
2018-05-31 21:03:24 CUL_TX SensorAussenQuelle humidity: 67.0
2018-05-31 21:03:44 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:04:04
2018-05-31 21:04:04 dummy SensorAussen humidity: 67.0
2018-05-31 21:04:04 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:04:24
2018-05-31 21:04:22 CUL_TX SensorAussenQuelle T: 22.9 H: 67.0
2018-05-31 21:04:22 CUL_TX SensorAussenQuelle temperature: 22.9
2018-05-31 21:04:23 CUL_TX SensorAussenQuelle T: 22.9 H: 67.0
2018-05-31 21:04:23 CUL_TX SensorAussenQuelle humidity: 67.0
2018-05-31 21:04:24 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:04:44
2018-05-31 21:04:44 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:05:04


Ich würde sagen, dass es Events gibt?
Temperatur um 21:01:44
Luftfeuchte um 21:04:04


ZitatDieses drehen ist Wurst -> drehe mal im "at" die Reihenfolge. Ich vermute ja, dass du nur das letzte bekommst.
Das hatte ich auch vermutet, aber dem wiederspricht der Eventmonitor, oder nicht?
Meist liegt der Fehler vor der Tastatur

Gast45

#10
Die ganze Spielerei habe ich erst nach dem letzten Update ändern müssen, weil sich was an 98_dewpoint geändert hat und damit meine Konfig nicht mehr so funktionierte wie vorher.

Vor dem Update hatte ich die Werte nicht einzeln kopiert, sondern gemeinsam im state gesetzt und mit dewpoint den STATE erweitert. Das klappt nun nicht mehr und die Werte wurden durch mein stateFormat unbrauchbar im Log geschrieben. Ganz genau bekomme ich es jetzt nicht mehr auf die Reihe. Jedenfalls musste ich nur das stateFormat löschen, damit wenigstens die Werte im Log waren.

Mit den hier in diesem Thema oben geschilderten Verfahren wollte ich nun erreichen, dass ich auch die Zahlenwerte wieder im STATE stehen habe. Allerdings landen dann gar keine Werte mehr im Log :)

Soviel vielleicht zum Hintergrund. Mist ist halt, dass die ganze Sucherei extrem zeitaufwendig ist, weil man von den mehr oder weniger oft kommenden Messwerten abhängig ist. Und die sind dann auch oft noch unverändert. :(


Dieses (alte) Verfahren klappt:
Internals:
   CHANGED   
   NAME       SensorAussen
   NR         41
   STATE      T: 22.6 H: 68.0
   TYPE       dummy
   OLDREADINGS:
   READINGS:
     2018-02-04 12:12:25   Batteriewechsel 0
     2018-05-31 21:18:34   absFeuchte      13.6
     2018-05-31 21:19:14   state           T: 22.6 H: 68.0
Attributes:
   event-min-interval .*:300
   event-on-change-reading state
   group      Sensordaten clonen – verarbeiten – loggen
   icon       temperature_humidity
   room       Sensoren


Hier kopiere ich so:
+*00:00:20 { my $temp= ReadingsVal("SensorAussenQuelle","temperature",0) ;
my $hum= ReadingsVal("SensorAussenQuelle","humidity",0) ;
fhem("set SensorAussen T: $temp H: $hum");}


Und den Taupunkt berechne ich mit "T H D"


Nur mir gefällt halt nicht, dass ich den STATE nicht dauerhaft so darstellen kann:
T: 22.5 H: 68.0 D: 16.3 A: 13.6

Das wollte ich durch die oben dargestellte Umstellung versuchen zu ändern. Mit den Problemen die mir da so aufgefallen sind:
1. Berechnung
2. keine Werte mehr im Log
Meist liegt der Fehler vor der Tastatur

amenomade

ZitatIch würde sagen, dass es Events gibt?
Temperatur um 21:01:44
Luftfeuchte um 21:04:04
Ja, auf dem Device SensorAussenQuelle, nicht auf dem Device SensorAussen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Gast45

ZitatJa, auf dem Device SensorAussenQuelle, nicht auf dem Device SensorAussen

Ne, auf SensorAussen, oder nicht:
2018-05-31 21:01:44 dummy SensorAussen temperature: 22.9
2018-05-31 21:04:04 dummy SensorAussen humidity: 67.0
Meist liegt der Fehler vor der Tastatur

amenomade

Ah ja sorry.
Aber ich verstehe nicht, was nicht funktioniert. Wenn z.B. die Temperatur sich ändert, wird nach dem at diese Temperatur in SensorAussen übertragen.
2018-05-31 21:01:24 at cp_SensorAussenQuelle_to_SensorAussen Next: 21:01:44
...
2018-05-31 21:01:27 CUL_TX SensorAussenQuelle temperature: 22.9
...
2018-05-31 21:01:44 dummy SensorAussen temperature: 22.9
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Gast45

#14
ZitatAber ich verstehe nicht, was nicht funktioniert. Wenn z.B. die Temperatur sich ändert, wird nach dem at diese Temperatur in SensorAussen übertragen.

Ja, das Kopieren der Werte von SensorAussenQuelle nach SensorAussen klappt auch einwandfrei.
Nur die Berechnung des Taupunktes wird nur bei Änderung der Luftfeuchtigkeit oder nach Ablauf von 5 Minuten tatsächlich durchgeführt, nicht aber, wenn sich die Temperatur ändert.

Ich hatte weiter oben einige Beispiele eingefügt, wo man sehen konnte, dass trotz geänderter Temperatur der Taupunkt nicht neu berechnet wurde (alte Zeitstempel) [siehe Antwort #2].
Meist liegt der Fehler vor der Tastatur