FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Jorge3711 am 13 Februar 2017, 21:39:25

Titel: wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: Jorge3711 am 13 Februar 2017, 21:39:25
Hallo zusammen,

bin mit meinem blöden Waschmaschinen/Trockner Telegramm DOIF etwas überfordert. Beide Geräte hängen am selben HM-ES-PMSw1-Pl. Meine Idee war es jetzt, dass wenn die Leistung für n Zeit unter einem Bestimmten Wert ist eine Nachricht raus geht, dass Wäsche fertig ist. Für die Waschmaschine funktioniert das auch. Läuft nun der Trockner, geht es nicht mehr (oder mir ist es bei der WaMa noch nicht aufgefallen).

Meine Beobachtung ist, dass der wait_timer immer wieder unterbrochen wird, obwohl das ausgewertete Reading sich eigentlich nicht geändert oder den Schwellwert überschritten hat, was ich mir erklären könnte. Damit die anderen Readings des HM-ES-PMSw1-Pl Kanals nicht triggern, habe ich eigentlich checkReadingEvent = 1 gesetzt, aber falsch gedacht.

Jemand nen Tipp? Ich komme nicht darauf und bräuchte einen Schupps in die richtige Richtung.


Internals:
   DEF        ([energie_strom_waschmaschine_Pwr:power] < 0.2 )
(set TelegramBot message @EBH "Maschinen aus")
DOELSEIF
   ([energie_strom_waschmaschine_Pwr:power] > "15")
DOELSEIF
   ([energie_strom_waschmaschine_Pwr:power] < "150")
   (set TelegramBot message @EBH "WaMa/Trockner ist fertig!")
   NAME       msg_waesche
   NR         177
   NTFY_ORDER 50-msg_waesche
   STATE       Wäsche laeuft
   TYPE       DOIF
   Readings:
     2017-02-13 21:26:08   Device          energie_strom_waschmaschine_Pwr
     2017-02-13 21:24:47   cmd             2
     2017-02-13 21:24:47   cmd_event       energie_strom_waschmaschine_Pwr
     2017-02-13 21:24:47   cmd_nr          2
     2017-02-13 21:26:08   e_energie_strom_waschmaschine_Pwr_power 2.38
     2017-02-13 21:24:47   state            Wäsche laeuft
     2017-02-13 21:24:55   wait_timer      13.02.2017 21:27:55 cmd_3 energie_strom_waschmaschine_Pwr
   Condition:
     0          ReadingValDoIf($hash,'energie_strom_waschmaschine_Pwr','power') < 0.2
     1          ReadingValDoIf($hash,'energie_strom_waschmaschine_Pwr','power') > "15"
     2          ReadingValDoIf($hash,'energie_strom_waschmaschine_Pwr','power') < "150"
   Devices:
     0           energie_strom_waschmaschine_Pwr
     1           energie_strom_waschmaschine_Pwr
     2           energie_strom_waschmaschine_Pwr
     all         energie_strom_waschmaschine_Pwr
   Do:
     0:
       0          set TelegramBot message @EBH "Maschinen aus"
     1:
       0
     2:
       0          set TelegramBot message @EBH "WaMa/Trockner ist fertig!"
     3:
   Helper:
     event      power: 2.38
     globalinit 1
     last_timer 0
     sleepdevice energie_strom_waschmaschine_Pwr
     sleepsubtimer 0
     sleeptimer 2
     timerdev   energie_strom_waschmaschine_Pwr
     timerevent power: 2.38
     triggerDev energie_strom_waschmaschine_Pwr
     timerevents:
       power: 2.38
     timereventsState:
       power: 2.38
     triggerEvents:
       power: 2.38
     triggerEventsState:
       power: 2.38
   Internals:
   Itimer:
   Readings:
     0           energie_strom_waschmaschine_Pwr:power
     1           energie_strom_waschmaschine_Pwr:power
     2           energie_strom_waschmaschine_Pwr:power
     all         energie_strom_waschmaschine_Pwr:power
   Regexp:
     0:
     1:
     2:
     All:
   State:
   Trigger:
Attributes:
   checkReadingEvent 1
   cmdState   Maschinen aus| Wäsche laeuft|Wäsche fertig
   do         always
   group      Benachrichtigungen
   icon       scene_washing_machine
   repeatcmd  0:0:900
   repeatsame 4
   room       Zentrale
   wait       60:0:180
Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: KernSani am 13 Februar 2017, 22:06:17
Hi,

deine Bedingungen 2 und 3 sind beide zutreffend, wenn power zwischen 15 und 150 ist... Ich würde das mal eindeutig formulieren...
(Vermutung: es kommt ein Event - STatus 2 trifft zu, nächstes Event kommt - CMD_2 ist schon gesetzt, also geht er in CMD_3, Timer läuft los, nächstes Event --> CMD_2, Timer wird unterbrochen usw...)

Grüße,

Oli
Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: automatisierer am 13 Februar 2017, 22:34:13
Zitat von: Jorge3711 am 13 Februar 2017, 21:39:25
Beide Geräte hängen am selben HM-ES-PMSw1-Pl.
Wie muss man sich das vorstellen? Sind Waschm. und Trockner beide gleichzeitig in einen HM-ES-PMSw1-Pl eingesteckt? oder werden sie abwechselnd eingesteckt? Wie dem auch sei, wenn du beide Geräte über ein Device auswerten willst, dann wird das wohl eher schwierig werden...
Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: Jorge3711 am 14 Februar 2017, 16:11:09
Zitat von: KernSani am 13 Februar 2017, 22:06:17
Hi,

deine Bedingungen 2 und 3 sind beide zutreffend, wenn power zwischen 15 und 150 ist... Ich würde das mal eindeutig formulieren...

In aktuellem Fall weiß ich aber, dass der Trockner bereits fertig ist. Das PowerReading ist ja auch permanent auf 2.38 (also kleiner als die 15 in cmd_2), nur der wait_timer wird immer wieder zurückgesetzt/unterbrochen und läuft dann irgendwann wieder von vorn los, nur dass er nie sein Ziel erreicht (und keine Benachrichtigung verschickt wird, dass das Teil fertig ist!).
Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: Jorge3711 am 14 Februar 2017, 16:14:18
Zitat von: automatisierer am 13 Februar 2017, 22:34:13
Wie muss man sich das vorstellen? Sind Waschm. und Trockner beide gleichzeitig in einen HM-ES-PMSw1-Pl eingesteckt? oder werden sie abwechselnd eingesteckt? Wie dem auch sei, wenn du beide Geräte über ein Device auswerten willst, dann wird das wohl eher schwierig werden...

Mehrfachstecker. Beide Maschinen gleichzeitig in Betrieb ist selten, kommt aber vor. Über kurz oder lang muss da noch ein zweiter HM-ES-PMSw1-Pl her, ja. In obigem Beispiel ist aber tatsächlich nur der Trockner in Betrieb.
Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: automatisierer am 14 Februar 2017, 21:03:35
Ok, Waschmaschine und Trockner an einer Steckdose ist eigentlich ein Elektrisches-NoGo.

Davon abgesehen, wird es sicherlich schwierig Bedingungen zu finden die den Zustand der Waschmaschine, des Trockners oder Beiden zusammen erfassen.
Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: Jorge3711 am 14 Februar 2017, 21:19:58
Zitat von: automatisierer am 14 Februar 2017, 21:03:35
Ok, Waschmaschine und Trockner an einer Steckdose ist eigentlich ein Elektrisches-NoGo.
Ist mir bewusst aber nicht Bestandteil meiner Frage.

Zitat
Davon abgesehen, wird es sicherlich schwierig Bedingungen zu finden die den Zustand der Waschmaschine, des Trockners oder Beiden zusammen erfassen.

Wie ich bereits schrieb, ist zum gestrigen Zeitpunkt nur der Trockner aktiv gewesen. Es geht hier nicht darum die richtigen Grenzwerte zu finden, sondern um das Verständnis weshalb der wait_timer immer wieder abgebrochen wird und damit cmd_3 nicht zur Ausführung kommt. Ich würde das wirklich gern verstehen. :)
Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: KernSani am 14 Februar 2017, 21:39:53
Versuch's mal ohne do always. Möglicherweise triggert jedes neue event den Timer irgendwie erneut... Hab gerade versucht es mit einem Dummy nachzustellen, ist mir aber nicht gelungen :-S
Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: automatisierer am 15 Februar 2017, 07:59:26
wenn das DOIF in einen anderen Zustand wechselt, wird der Timer abgebrochen...

Kann man auch in der Commandref nachlesen:
ZitatFür Kommandos, die nicht verzögert werden sollen, werden Sekundenangaben ausgelassen oder auf Null gesetzt. Die Verzögerungen werden nur auf Events angewandt und nicht auf Zeitsteuerung. Eine bereits ausgelöste Verzögerung wird zurückgesetzt, wenn während der Wartezeit ein Kommando eines anderen DO-Falls, ausgelöst durch ein neues Ereignis, ausgeführt werden soll.

Auch wenn das jetzt nicht Bestandteil deiner Frage ist:

Die HM-ES-PMSw1-Pl senden Zyklisch und bei Veränderungen > Threshold. Da der Verbrauch der Waschmaschine nicht zu beginn des Waschvorgangs auf 1500W steigt und nach dessen Beendigung wieder auf 0W fällt, sondern ständig schwankt, sendet der HM-ES-PMSw1-Pl auch immer wieder neue Werte, bei Standard Einstellung alle 8 Sekunden, bei Änderungen > 10W. Dadurch ist es schon für ein Gerät (z.B. Waschmaschine) schwierig, die passende Schwelle fest zu legen, so dass die Benachrichtigung auch einigermaßen Zeitnah erfolgt.

Das Verbrauch-Verhalten von Waschmaschine und Trockner ist stark unterschiedlich, daher wird es schwer fallen die passenden Bedingungen in ein DOIF zu packen, ohne dass diese sich gegenseitig aushebeln.

Ein Workaround wäre es vielleicht, dass du ein DOIF für die Waschmaschine und eines für den Trockner machst und diese dann entprechend dem Gerät welches gerade läuft, enabled und disabled werden. Eventuell könntest du das auch noch mit einem dritten DOIF automatisch hin bekommen.


Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: Per am 15 Februar 2017, 13:40:49
Zitat von: automatisierer am 15 Februar 2017, 07:59:26Das Verbrauch-Verhalten von Waschmaschine und Trockner ist stark unterschiedlich, daher wird es schwer fallen die passenden Bedingungen in ein DOIF zu packen, ohne dass diese sich gegenseitig aushebeln.
Nö, schwierig wird es erst, wenn der Ruhestrom (Maschine an, aber fertig oder noch nicht gestartet) kleiner ist als der Standby-Strom (Maschine "aus") der anderen.
UND: falls wirklich beide gleichzeitig arbeiten (und es der Sensor überlebt!), bekommst du das Ende der ersten nicht gemeldet.

Allerdings passen die Bedingungen mit >15 und <150 nicht. Die sollten überdacht werden.
Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: Jorge3711 am 15 Februar 2017, 18:10:22
Zitat von: automatisierer am 15 Februar 2017, 07:59:26
wenn das DOIF in einen anderen Zustand wechselt, wird der Timer abgebrochen...

Ja wenn! Der Zustand des gezeigten DOIF bleibt im beschriebenen Szenario aber in cmd_2 (Maschine läuft). Und genau das verwirrt mich ja...
Titel: Antw:wait_timer und checkReadingEvent, oder doch was ganz anderes?!
Beitrag von: automatisierer am 15 Februar 2017, 21:53:19
Zitat von: Jorge3711 am 15 Februar 2017, 18:10:22
Ja wenn! Der Zustand des gezeigten DOIF bleibt im beschriebenen Szenario aber in cmd_2 (Maschine läuft). Und genau das verwirrt mich ja...
Also das kann ich mir nur schwer vorstellen... dazu müsstest du schon eine Spezial DOIF-Version nutzen.

Wenn die Bedingungen für ein cmd zutreffen, dann wird dieses ausgeführt - wenn ein 'wait' für dieses cmd angegeben ist, dann wird der wait_timer gesetzt und der Befehl erst ausgeführt wenn der Timer abgelaufen ist. Sollten in der Zeit in der der Timer läuft die Bedingungen für ein anderes cmd wahr werden, dann wird der wait_timer gelöscht.

([energie_strom_waschmaschine_Pwr:power] < 0.2 )
Die Bedingung greift nur unter 0.2

([energie_strom_waschmaschine_Pwr:power] > "15")
die hier bei größer als 15

([energie_strom_waschmaschine_Pwr:power] < "150")
die hier bei kleiner als 150

Es wird immer das erste cmd bei dem die Bedingungen wahr sind zuschlagen. Das bedeutet, dass bei einem Verbrauch größer 15.1 cmd_3 nicht zuschlägt, weil da auch cmd_2 wahr ist und vorher zuschlägt. erst wenn der verbrauch zwischen 0.2 und 15 ist wird cmd_3 zuschlagen, weil dann die Bedingungen für cmd_1 und cmd_2 nicht wahr sind.