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
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
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...
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!).
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.
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.
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. :)
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
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.
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.
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...
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.