FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: OliWee am 06 Oktober 2016, 18:48:09

Titel: DOIF Befehlswiederholung
Beitrag von: OliWee am 06 Oktober 2016, 18:48:09
Hi!
Ich möchte gerne, dass ich bei offenem Fenster alle 15 Minuten benachrichtigt werde

define EG.Bad.Fenster.Msg DOIF ([EG.Bad.Fenster] eq "open") ({\
        fhem("set <TelegramBot> message <#Empfaenger> Das Fenster im Bad ist seit 15 Minuten offen");;;;\
        })
attr EG.Bad.Fenster.Msg repeatcmd 900
attr EG.Bad.Fenster.Msg wait 900


Das funktioniert soweit, nur möchte ich gerne, dass bei Wiederholung der Meldung nicht "15 Minuten" drinsteht, sondern, wie lange das Fenster bereits offen ist. Ich müsste also berechnen:

$time =(wait + [Anzahl Wiederholungen] * repeatcmd) * 60

Gibt es bei DOIF jetzt irgendwie die Möglichkeit, herauszufinden, die wievielte Wiederholung ausgeführt wird?
Oder hat jemand eine andere Idee, wie ich das gewünschte erreichen kann?

Danke schonmal für Tipps  :)
Oli
Titel: Antw:DOIF Befehlswiederholung
Beitrag von: Ellert am 06 Oktober 2016, 19:35:20
Eventuell funktioniert {(int([EG.Bad.Fenster:state:sec] / 60))} statt 15, wenn nicht, dann nimm ReadingsAge, Syntax wie ReadingsVal.

Siehe Zeitspanne_eines_Readings_seit_der_letzten_Aenderung (http://fhem.de/commandref_DE.html#DOIF_Zeitspanne_eines_Readings_seit_der_letzten_Aenderung)

Der Set-Befehl sollte auch so funktionieren set <TelegramBot> message <#Empfaenger> Das Fenster im Bad ist seit {(int([EG.Bad.Fenster:state:sec] / 60))} Minuten offen

Siehe auch DOIF: Tips leichtere Bedienung Syntaxhervorhebung Klammerprüfung Suchen&Ersetzen (https://forum.fhem.de/index.php/topic,45373.0.html)
und DOIF: Tools, Fehlersuche - qualifizierte Angaben, Verhaltensanalyse (https://forum.fhem.de/index.php/topic,58237.0.html)
Titel: [Gelöst] DOIF Befehlswiederholung
Beitrag von: OliWee am 06 Oktober 2016, 20:06:43

define EG.Bad.Fenster.Msg DOIF ([EG.Bad.Fenster] eq "open") ({\
        fhem("set <TelegramBot> message <#Empfaenger> Das Fenster im Bad ist seit mehr als" . int([EG.Bad.Fenster:state:sec] / 60) . " Minuten offen");;;;\
        })


Perfekt!

Vielen Dank!
Titel: Antw:DOIF Befehlswiederholung
Beitrag von: Ellert am 06 Oktober 2016, 20:13:17
Wie gesagt, der Wechsel auf die Perl-Ebene mit {fhem "...")} ist nicht notwendig, Du kannst den set-Befehl direkt verwenden (set <TelegramBot> message <#Empfaenger> Das Fenster im Bad ist seit {(int([EG.Bad.Fenster:state:sec] / 60))} Minuten offen)
Titel: Antw:DOIF Befehlswiederholung
Beitrag von: OliWee am 07 Oktober 2016, 07:55:56
Zitat von: Ellert am 06 Oktober 2016, 20:13:17
Wie gesagt, der Wechsel auf die Perl-Ebene mit {fhem "...")} ist nicht notwendig, Du kannst den set-Befehl direkt verwenden (set <TelegramBot> message <#Empfaenger> Das Fenster im Bad ist seit {(int([EG.Bad.Fenster:state:sec] / 60))} Minuten offen)

Danke für die Info.
Ich hab Deine Ergänzung erst gelesen, nachdem ich es am Laufen hatte. Mittlerweile habe ich es so implementiert, wie Du vorgeschlagen hast (ohne direktes Perl).

Gruß
Oli