[Gelöst]Aktion, wenn andere Aktion in bestimmten Zeitraum nicht ausgeführt wurde

Begonnen von dorian67, 06 Dezember 2020, 10:43:13

Vorheriges Thema - Nächstes Thema

dorian67

Hallo,

bin auf der Suche nach einer Systematik für folgenden Anwendungsfall:

Wenn zwischen einer bestimmten Zeit ein Schalter nicht gedrückt wurde, soll eine Benachrichtigung (Mail) erfolgen.
Habe es bereits mit einem Dummy der durch einen Schalter geschalten wird, versucht.

- Der Dummy "DashMedDummy" kann den Status "leer" und "genommen" haben.

- Ein DoIf überprüft den Status des Schalters und setzt den Status des Dummy:
([DashMed] eq "present" and [16:00-18:00|So Mo Di Mi Do])(set DashMedDummy genommen)

- Über ein Doif wird zu einem bestimmten Zeitpunkt der Status überprüft:
  ([DashMedDummy:state] ne "genommen" and [18:03|So Mo Di Mi Do]) ({ DebianMail('name@123.de',' FHEM:Mail','Med. genommen?','');})

- kurze Zeit nach der Überprüfung wird der Dummy über ein Doif wieder zurückgesetzt:
([18:05]) (set DashMedDummy leer)

Das Ganze funktioniert aber nur einmal, wenn der Status des Schalters gesetzt wurde. Danach wird die Mail nicht mehr gesendet.
Wahrscheinlich gibt es einen eleganteren Weg es zu lösen.

Vielleicht erkennt jemand meinen Fehler oder kann mir einen besseren Weg zeigen.

Danke
Dorian


amenomade

Die Notwendigkeit eines dummys verstehe ich nicht ganz. Aber gut, wenn es geht...

Dein 2. DOIF braucht wahrscheinlich ein Attribut "do always".

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

betateilchen

Würde es nicht ausreichen, jeweils um 18:03 Uhr zu prüfen, ob das ReadingsAge() des entsprechenden Schalters größer als 7380 ist?

Dann käme man mit einem einzigen simplen at device aus.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dorian67

Danke für die Antworten. Das "Do always" hat geholfen.
Wenn ich demnächst Zeit habe, probiere ich vielleicht noch das "ReadingsAge()". Würde es vereinfachen.
Aber danke noch einmal

Dorian