FHEM Forum

FHEM => Automatisierung => Thema gestartet von: o.l.i am 09 September 2020, 14:43:16

Titel: Notify + Reading + secondsSinceReadingChange = ???
Beitrag von: o.l.i am 09 September 2020, 14:43:16
Hallo,

ich habe mir ein notify gebaut um den Trockner smart zu machen, sprich es wird eine Ansage gespielt wenn der Trockner fertig ist und es wird per DBlog die events in die DB geschrieben zur Auswertung des Leistungsverbrauch.

Die erste und dritte IF Schleife funktioniert aber die zweite IF Schleife nicht.
Was ich herausgefunden habe is, dass die "secondsSinceReadingChange" Funktion mit dem "ENERGY_Power" Reading nicht funktioniert.
Ich habe dies mal mit dem "running" Reading anstatt "ENERGY_Power" ausprobiert und da hat es funktioniert.

Der Unterschied ist, dass das ""ENERGY_Power" Reading vom Device kommt; das "Running" Reading ist ein eigenes Reading als Behelf.

Hat jemand eine Erklärung / Lösung dazu?


KE_Trockner:ENERGY_Power:.* {
# Wenn der Trockner eingeschaltet wurde
if (ReadingsNum($NAME, "ENERGY_Power", 0) > 400 && ReadingsVal($NAME, "running", "off") eq "off") {
fhem("sleep 0.1; setreading $NAME running on");
}

if (secondsSinceReadingChange($NAME, "ENERGY_Power") > 5 && ReadingsVal($NAME, "running", "off") eq "on") {
fhem("set TR_EG_Gong_Mp3,TR_2OG_Gong_Mp3 playTone 005,034 1 10");
fhem("sleep 0.1; setreading $NAME running off");

# Wenn Fehler aufgetreten ist, und der Trockner nach 4 Stunden nicht automatisch ausgegangen ist
if (secondsSinceReadingChange($NAME, "running") > 14400 && ReadingsVal($NAME, "running", "off") eq "on") {
fhem("sleep 0.1; setreading $NAME running off");
fhem("set TR_EG_Gong_Mp3,TR_2OG_Gong_Mp3 playTone 005,035 1 10");
}
}
Titel: Antw:Notify + Reading + secondsSinceReadingChange = ???
Beitrag von: amenomade am 09 September 2020, 20:35:46
Was gibt es für event-on-change-reading | event-on-update-reading | event-min-interval Attribute auf KE_Trockner?
Titel: Antw:Notify + Reading + secondsSinceReadingChange = ???
Beitrag von: o.l.i am 10 September 2020, 08:34:23
Hallo,

ich habe für die relevanten Readings "event-on-change-reading" eingestellt.
Aber diese Parameter sollten egal sein, da mein "ENERGY_Power" Reading den aktuellen Verbrauch in Watt anzeigt, was sich ja ständig während dem Trockner Vorgang ändert. D.h. der Timestamp des Readings wird immer wieder im FHEM UI aktualisiert bis ich den Trockner ausschalte. Spätestens dann nach 5 Sekunden würde ich erwarten, dass die Ansage kommt, da der Timestamp dann nicht mehr aktualisiert wird. Aber das macht es eben nicht.
Titel: Antw:Notify + Reading + secondsSinceReadingChange = ???
Beitrag von: MadMax-FHEM am 10 September 2020, 08:47:37
Wie soll denn nach 5 Sek etwas passieren, wenn sich eben der Wert nicht mehr ändert, also das notify ja nicht mehr aufgerufen wird...

Du kannst ja mal die geforderten Infos liefern, also das list...

EDIT: Ok, ich dachte amenomade hätte darum gebeten... ;)

...oder (wenn du es eh besser zu wissen scheinst) eindach selber weiter tüfteln... ;)

Ein Blick in den Eventmonitor zeigt dir auch was passiert...

EDIT: ich würde aus diesem Grund mal Logausgaben ins notify bzw. in die if-Zweige einbauen. Dann siehst du wann es mit welchen Werten "gerufen" wird und was passiert oder auch nicht und v.a. warum...

EDIT: event-on-change-reading etc. sollte mit bedacht eingesetzt werden. Gerade bei plots oder automatischen Steuerungen "dahinter" nehme ich die aus einem evtl. event-on-change-reading .* mittels event-on-update-reading bewusst wieder rein. Aber eben nur die, die ich auch brauche (Loggen/Automatismen). Evtl. noch "versorgt" mit einem min-interval... Events einschränken ist eine "gute Tat" aber der ein oder andere Event der weiterhin (evtl. doch "unbenötigt") durchs System "huscht" tut nun auch nicht weh... Außer eben evtl. für gewisse Automatismen die dran hängen... ;)

Gruß, Joachim
Titel: Antw:Notify + Reading + secondsSinceReadingChange = ???
Beitrag von: amenomade am 10 September 2020, 10:34:19
Zitat von: MadMax-FHEM am 10 September 2020, 08:47:37
Wie soll denn nach 5 Sek etwas passieren, wenn sich eben der Wert nicht mehr ändert, also das notify ja nicht mehr aufgerufen wird...


Genau. Mit event-on-change-reading auf dem Reading [KE_Trockner:ENERGY_Power], dass das notify triggert, klingt es nach:
wenn der Wert sich geändert hat {mach etwas, wenn der Wert sich nicht geändert hat}
Wann hat sich der Wert zuletzt geändert? Antwort: gerade eben, sonst wäre ich nicht im notify. secondsSinceReadingChange = 0
   
Titel: Antw:Notify + Reading + secondsSinceReadingChange = ???
Beitrag von: MadMax-FHEM am 10 September 2020, 10:42:23
Zitat von: amenomade am 10 September 2020, 10:34:19
Wann hat sich der Wert zuletzt geändert? Antwort: gerade eben, sonst wäre ich nicht im notify. secondsSinceReadingChange = 0

Stimmt!
Daran hatte ich auch nicht gedacht ;)

Evtl. dann OldReadings und das event-on-change weglassen (zumindest für das Event das das Notify triggert) und dann eben selbst vergleichen, ob der Wert sich nicht geändert hat...
Evtl. geht dann sogar rauszufinden, dass es mind. 5 Sek her ist...

Gruß, Joachim
Titel: Antw:Notify + Reading + secondsSinceReadingChange = ???
Beitrag von: Beta-User am 10 September 2020, 10:49:28
Zum einen fehlte mir gedanklich eine schließende Klammer nach dem 2. Zweig (das ändert aber nichts an ReadingsAge()=0), zum anderen suchst du nach einem watchdog-Mechanismus.

Vielleicht liefert dir jemand eine "DOIF mit wait"-Lösung, evtl. hilft es dir auch weiter, wenn du mal ab ca. hier weiterliest: https://forum.fhem.de/index.php/topic,114041.msg1083255.html#msg1083255