Simulation eines Sleeptimers mit Benachrichtigung und Timer Neustart

Begonnen von gent, 26 Februar 2019, 20:33:13

Vorheriges Thema - Nächstes Thema

gent

Hallo,

ich bräuchte mal etwas Hilfe bei einer Anforderung, zu dem ich selbst keine Lösung finde. Ich würde gerne einen Sleeptimer für meine Multimedia-Anlage realisieren, den ich mit einem Button starten kann und der mir ein paar Minuten vor dem Ablauf eine Benachrichtigung auf dem Bildschirm zukommen lässt, dass ich den Button erneut drücken soll, damit der Sleeptimer von vorne losläuft. Wenn ich den Button nicht drücke, soll die Anlage tatsächlich ausgeschaltet werden.

Kann ich so etwas mit DoIF erreichen und wenn ja, wie müsste die Struktur des DoIF aussehen? Ich will das jetzt nicht zu Ende programmiert haben, sondern nur abstrakt, damit ich es auch verstehe.

Als Devices habe ich einen DashButton mit dem Event dash1:short, ein NotifyAndroidTV für die Nachricht und ein harmony Device welches dann die Activity PowerOff auslösen soll.

Da das harmony Device ja auch selbst einen sleeptimer hat, habe ich jetzt folgendes DoIF, was auch funktioniert, aber damit bekomme ich leider keine Nachricht auf dem Bildschirm

defmod di_DashButton DOIF ([DashButton:"^dash1:.short$"]) (set WZ.Harmony sleeptimer 60)
attr di_DashButton do always


Jede Hilfe, Tipps oder Tricks sind willkommen.

Viele Grüße, Holger
fhem auf rPi3 mit USB boot und M2, cul866 (hm), homebridge, FlowerSens, Shelly, Harmony, WemosD1, Sonoff/Tasmota, grafana, mqtt/mosquitto

Per

Zitat von: gent am 26 Februar 2019, 20:33:13Da das harmony Device ja auch selbst einen sleeptimer hat
Reagiert dieser denn auf "dash1:short"?

defmod di_DashButton DOIF ([DashButton:"^dash1:.short$"]) ((set NotifyAndroidTV Achtung, gleich gehe ich aus)) (set WZ.Harmony off)
attr di_DashButton do resetwait
attr di_DashButton wait 50 10

gent

Hallo Per,

ja, das bisherige doif funktioniert und setzt den sleeptimer korrekt. Deine Lösung probiere ich mal aus. Wenn ich es richtig interpretiere, muss ich mein Attribut "do always" nur ersetzen durch die Attribute do resetwait und wait 50 10
Stimmt das so?

Viele Grüße, Holger
fhem auf rPi3 mit USB boot und M2, cul866 (hm), homebridge, FlowerSens, Shelly, Harmony, WemosD1, Sonoff/Tasmota, grafana, mqtt/mosquitto

gent

Hi, nochmal,

in der commandref zu DoIf steht folgendes:

DOIF (Bedingung1)
(set ...) ## erster Befehl der ersten Sequenz soll um eine Sekunde verzögert werden
(set ...) ## zweiter Befehl der ersten Sequenz soll um 2 Sekunden nach dem ersten Befehl verzögert werden
DOELSEIF (Bedingung2)
(set ...) ## erster Befehl der zweiten Sequenz soll um 3 Sekunden verzögert werden
(set ...) ## zweiter Befehl der zweiten Sequenz soll um 0,5 Sekunden nach dem ersten Befehl verzögert werden

attr <DOIF-module> wait 1,2:3,0.5


Also sollte doch diese Definition genau das machen, was ich will:

defmod di_DashButton DOIF ([DashButton:"^dash1:.short$"]) (set NotifyTV msg Achtung, gleich gehe ich aus) (set WZ.Harmony activity PowerOff)
attr di_DashButton do resetwait
attr di_DashButton wait 300,60


Das klappt aber nicht. Die Harmony Aktivität wird genau nach 5 Minuten ausgeführt, ohne das ich vorher die Message sehe.

Was könnte hier noch falsch sein?

Viele Grüße, Holger
fhem auf rPi3 mit USB boot und M2, cul866 (hm), homebridge, FlowerSens, Shelly, Harmony, WemosD1, Sonoff/Tasmota, grafana, mqtt/mosquitto

Damian

Es wird vermutlich am Komma liegen, das ist ein Trennzeichen beim DOIF.

Soll das Komma nicht als Trennzeichen gelten, musst du den Ausdruck zusätzlich klammern - so steht es in der Commandref zu DOIF

...((set NotifyTV msg Achtung, gleich gehe ich aus))...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Ohne doppelte Klammern solle "Achtung" angezeigt und eine Fehlermeldung geloggt werden. Die Verzögerung sollte es nicht beeinflussen, außer wenn "wait" auf den reagiert.

gent

OK,

also: Ich habe mal das Komma entfernt und das Verhalten beobachtet. Jetzt kommt nach 5 Minuten die Notification und es wird noch eine Minute gewartet, bis dann das PowerOff an's Harmony Device gesendet wird. So weit so gut. Allerdings klappt es nicht, wenn ich während der einen Minute in denen ich die Notification gesehen habe, den Button noch einmal drücke. Das cmd_1_2 wird trotzdem ausgeführt, obwohl (so dachte ich) das Attribut do resetwait dafür sorgen sollte, dass die waits wieder zurückgesetzt werden.

Jetzt nochmal die grundsätzliche Frage: Geht mein Vorhaben überhaupt mit einem DoIf?

Ich müsste bei einem erneuten drücken des Buttons, den Status des DoIf auf den Zustand setzen, als hätte ich den Button zum ersten Mal gedrückt.

Viele Grüße, Holger
fhem auf rPi3 mit USB boot und M2, cul866 (hm), homebridge, FlowerSens, Shelly, Harmony, WemosD1, Sonoff/Tasmota, grafana, mqtt/mosquitto

gent

Mit MSwitch und Dank der Hilfe von Thomas konnte ich meine Anforderung umsetzen. Vielen Lieben Dank für das Modul und die Hilfe bei der Konfiguration.
fhem auf rPi3 mit USB boot und M2, cul866 (hm), homebridge, FlowerSens, Shelly, Harmony, WemosD1, Sonoff/Tasmota, grafana, mqtt/mosquitto