Moin,
ich hatte die Doku so verstanden, dass bei repeatsame auch immer wieder die Eingansbedingung geprüft wird und nur dann die Aktion wiederholt ausgeführt wird.
Leider klappt das bei mir nicht. Es wird immer die volle Anzahl an Wiederholungen ausgeführt, auch wenn die Eingansbedingung nicht mehr erfüllt ist.
Anwendungsfall:
Wassermelder sendet Alarm, wiederholt diesen alle 60 sek., insgesamt 15x. Aber das soll er nur, wenn er nicht in der Zwischenzeit den Status trocken (dry) erreicht hat.
Code:
define diWassermelder DOIF ([devWassermelder] ne "dry")({fhem("set teleBot message Der Wassermelder im Keller meldet weiter nass!")})
attr diWetKeller_HWR_Wassermelder repeatcmd 60
attr diWetKeller_HWR_Wassermelder repeatsame 15
Kann da jemand helfen?
Danke und VG
Du musst am Ende ein DOELSE hinzufügen, damit wird bei Nichterfüllung der Bedingung in den Zustand cmd_2 gewechselt und die Wiederholung hört auf.
Danke für diese einfache Problemlösung - ich hatte das gleiche Problem, bin aber zuerst nicht au die DOELSE-Lösung gekommen. Ist eigentlich ganz logisch...
Im CommandRef stand dieses analoge Beispiel:
Anwendungsbeispiel: Die Meldung soll maximal dreimal erfolgen mit einer Pause von mindestens 10 Minuten
define di_washer DOIF ([Watt]<2) (set pushmeldung "washer finished")
attr di_washer repeatsame 3
attr di_washer cmdpause 600
Das Attribut repeatsame lässt sich mit do always oder do resetwait kombinieren. Wenn die maximale Anzahl für ein Kommando ausgelassen oder auf Null gesetzt wird, so gilt für dieses Kommando der Defaultwert "einmalige Wiederholung"; in Kombination mit do always bzw. do resetwait gilt für dieses Kommando "beliebige Wiederholung".
Müsste man da nicht da auch das DOELSE mit reinschreiben, damit das korrekt funktioniert?
Zitat von: Rudibarani am 03 Dezember 2019, 08:50:25
Danke für diese einfache Problemlösung - ich hatte das gleiche Problem, bin aber zuerst nicht au die DOELSE-Lösung gekommen. Ist eigentlich ganz logisch...
Im CommandRef stand dieses analoge Beispiel:
Anwendungsbeispiel: Die Meldung soll maximal dreimal erfolgen mit einer Pause von mindestens 10 Minuten
define di_washer DOIF ([Watt]<2) (set pushmeldung "washer finished")
attr di_washer repeatsame 3
attr di_washer cmdpause 600
Das Attribut repeatsame lässt sich mit do always oder do resetwait kombinieren. Wenn die maximale Anzahl für ein Kommando ausgelassen oder auf Null gesetzt wird, so gilt für dieses Kommando der Defaultwert "einmalige Wiederholung"; in Kombination mit do always bzw. do resetwait gilt für dieses Kommando "beliebige Wiederholung".
Müsste man da nicht da auch das DOELSE mit reinschreiben, damit das korrekt funktioniert?
Das Beispiel funktioniert korrekt. In dem obigen Beispiel wird kein do always verwendet, da der Watt-Sensor zyklisch sendet. Ohne do always wird aber immer der imagniäre DOELSE-Fall angenommen, sonst könnte das Modul niemals den Zustand wechseln und damit nur einmal in seinem Leben schalten (das steht in der Commandref).
Also entweder DOELSE oder do always. Nun habe ich es verstanden. Danke!
Gesendet von iPhone mit Tapatalk
Zitat von: Rudibarani am 03 Dezember 2019, 09:00:40
Also entweder DOELSE oder do always. Nun habe ich es verstanden. Danke!
Gesendet von iPhone mit Tapatalk
Eher und statt oder: dh. DOELSE bei do always. Du kannst natürlich immer, also auch ohne do always DOELSE setzen, auch wenn er dann sowieso intern schon gesetzt ist.
Hab ich mir zur Sicherheit auch vorgenommen. Ich habe noch eine zweite Frage, ob man nach dem erreichen von repeatsame einen bestimmten Befehl ausführen kann. Quasi ein ,,DOREPEATSAME". Dazu hab ich gerade einen neuen Thread aufgemacht. Wäre nett, wenn Du da auch einmal reinschauen könntest. Viele Grüße