Hauptmenü

DOIF nur bedingt wiederholen

Begonnen von Tiail, 13 Juli 2019, 18:32:23

Vorheriges Thema - Nächstes Thema

Tiail

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

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Rudibarani

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?

Damian

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).
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Rudibarani

Also entweder DOELSE oder do always. Nun habe ich es verstanden. Danke!


Gesendet von iPhone mit Tapatalk

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Rudibarani

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