echodevice: Reminder mit Zeitverzögerung setzen in DOIF

Begonnen von juppy_jupp, 05 April 2024, 14:21:04

Vorheriges Thema - Nächstes Thema

juppy_jupp

Hallo,

ich versuche getriggert durch einen Event auf meinem Echodevice einen Timer mit fester Zeitverzögerung zu setzen.
Ohne Zeitverzögerung geht das als DOIF problemlos:

([MQTT2_zigbee_WirelessButton:"long"])(set ECHO_G0.... reminder_normal Waschmaschine ist fertig)
Was ich aber möchte ist das dieser Reminder erst in zwei Stunden abgespielt wird.

Setzt man per Sprache eine Erinnerung geht das ganz einfach nach dem Motto "Alexa, setze einen Erinnerung 'Waschmaschine ist fertig' in zwei Stunden".

Es gibt für das echodevice ein Attribut namens "reminder_delay", so wie ich das verstanden habe ist das aber eine globale Einstellung auf dem Echo Device, ich will aber nur den speziellen reminder verzögern.
Kann ich das irgendwie auch mit dem 'reminder_normal' bewerkstelligen?

Gruss Jupp

TomLee

Hallo,

zu DOIF müsst ich mich einlesen, mit notify sähe das so aus:
defmod not_example notify MQTT2_zigbee_WirelessButton:long {\
fhem("sleep 7200";set ECHO_G0.... reminder_normal Waschmaschine ist fertig");;}

Thomas

juppy_jupp

Hallo Thomas,

danke für das Feedback. Leider ist es nicht ganz das was ich suche. Der sleep verzögert ja nur die Ausführung des zweiten Befehl um die angegebene Zeit. Etwas ähnliches gibt es mit dem Attribut "wait" auch bei DOIF.

Ich hab mir z.Zt. folgendes DOIF gebaut:
defmod Waschmaschine DOIF ([MQTT2_zigbee_WirelessButton:"single"])(set ECHO_G09... speak Waschmaschine ist fertig)
attr Waschmaschine do resetwait
attr Waschmaschine wait 7200
...
setstate Waschmaschine 2024-04-04 17:47:38 state cmd_1
setstate Waschmaschine 2024-04-05 13:50:58 wait_timer 05.04.2024 15:50:58 cmd_1 MQTT2_zigbee_WirelessButton

Jedoch hab ich das Gefühl das es bei großen Werten nicht wirklich funktioniert, Bei kleinen (im Minuten Bereich) hab ich kein Problem, aber bei 2 Std (7200 sec) läuft das irgendwie nicht zuverlässig.
Deshalb war meine Idee das umzustellen und statt dem 'speak' einen 'reminder' in der Zukunft zu setzen. Das hat auch den Vorteil das damit die Befehlsfolge direkt abgeschlossen ist und nicht zwei Stunden ein sleep/wait process rennt.

Gruss Jupp

juppy_jupp

Nachtrag

ich hab mir die Doku des Moduls nochmal etwas genauer angeschaut:
Echodevice Referenz

bei dem Attribut 'reminder_normal' kann man die Abspielzeit direkt vor dem Text mitgeben, in etwa so:
(set ECHO_G0.... reminder_normal 16:00 Waschmaschine ist fertig)Allerdings sind hier wohl nur absolute Zeitangaben möglich.
Das heißt ich muss die akt. Zeit ermitteln, zwei Stunden draufschlagen und das als Wert dem Text voranstellen.

Das geht sicherlich mit etwas PERL Kenntnissen zu programmieren, nur leider hab ich die nicht wirklich.
Kann mir jemand helfen so etwas zu bauen?

Gruss Jupp

MadMax-FHEM

Zitat von: juppy_jupp am 05 April 2024, 15:40:52Jedoch hab ich das Gefühl das es bei großen Werten nicht wirklich funktioniert, Bei kleinen (im Minuten Bereich) hab ich kein Problem, aber bei 2 Std (7200 sec) läuft das irgendwie nicht zuverlässig.
Was bedeutet "nicht zuverlässig"?

Evtl. kommen Events, die den Timer abbrechen/neu aufsetzen?

Laut Doku https://www.mwinklerblog.de/smarthome/eigene-module/echodevice/#Set gibt es ein set ECHO_ reminder_xxx:
Zitatreminder_normal    [STRING]   

ECHODEVICE
   

Hier kann eine einmalige Erinnerung erstellt werden. Es gibt mehrere Möglichkeiten, wie sich der String zusammensetzen kann:

    Jahr-Monat-Tag Stunde:Minuten Erinnerungstext
    Jahr-Monat-Tag Erinnerungstext
    Stunde:Minuten Erinnerungstext
    Erinnerungstext

Gültige Strings könnten wie folgt aussehen:

    2018-01-13 20:15 Denke an die Pflanzen
    2018-01-13 Denk an die Pflanzen
    20:15 Denke an die Pflanzen
    Denke an die Pflanzen

Wenn keine Angabe der Uhrzeit erfolgt, wird die Erinnerung sofort abgespielt. Bitte beachtet auch das dazugehörige Attribut "reminder_delay" (siehe Attribute)

Allerdings erfolgt die Ansage (zumindest bei mir) nicht über den Echo wo ich den set abgesetzt habe, sondern auf allen (eben getestet)...

Was stört dich an dem sleep? Ist die einfachste Möglichkeit (neben wait)...
Ansonsten musst du halt die aktuelle Uhrzeit ermitteln: Stunde/Minute, zur Stunde dann 2 addieren und wieder nach HH:MM wandeln für den set...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Zitat von: juppy_jupp am 05 April 2024, 15:59:14Das geht sicherlich mit etwas PERL Kenntnissen zu programmieren, nur leider hab ich die nicht wirklich.
Kann mir jemand helfen so etwas zu bauen?

Hier: https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit

Bzw. evtl. mit folgenden "Mitteln":

strftime("%H", localtime);

und

strftime("%m", localtime);

Dann eben addieren (bei Minuten halt den "Überlauf" bei 59 beachten ;)  aber du willst ja 2h, dann fällt das ja flach / und bei Stunden halt 23-Überlauf)...
...und wieder zusammenbauen plus Text dahinter...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)