FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Wassergerd am 10 November 2019, 20:27:00

Titel: Nachrichten nur an Geräte senden die "present" im Status haben
Beitrag von: Wassergerd am 10 November 2019, 20:27:00
Schönen guten Abend.
Mit einem DOIF lasse ich mich nach 15 Min benachrichtigen wenn das Fenster zu lange offen ist.
Nun würde ich gerne alle die Zuhause sind benachrichtigen. Ich überprüfe mit PRESENCE wer da ist. Ich habe aber keine Idee wie ich das DOIF so anpassen kann dass nur die anwesenden benachrichtigt werden.
Hier mal das DOIF welches z.Z. einwandfrei funktioniert:
define di_Fensterkontakt_BadEG DOIF ([Bdkl_Fensterkontakt] eq "open" and [Heizperiode] eq "ja" and [Wetter:temperature] < 15 )\
(set Telegram message Fenster im Bad ist ganz schön lange auf. Machs zu!) \
DOELSE
attr di_Fensterkontakt_BadEG repeatcmd 600
attr di_Fensterkontakt_BadEG room Bad_EG
attr di_Fensterkontakt_BadEG wait 900

Und hier die Presence Überprüfung:
define Pr_Gerd_d PRESENCE function {checkAllFritzMACpresent("XX:XX:XX:XX:XX:XX")} 60 60
attr Pr_Gerd_d event-on-change-reading .*
attr Pr_Gerd_d room TEST

Die gleiche Überprüfung findet noch für 4 weitere Handys statt.
Schönen Dank im voraus
Titel: Antw:Nachrichten nur an Geräte senden die "present" im Status haben
Beitrag von: Pfriemler am 10 November 2019, 20:54:52
Tja ... so eine schöne Filterfunktion im Set-Befehl (gibt es ja als Beispiel: Lampen nur einschalten wenn sie nicht schon an sind) geht hier nicht.

Spontan fallen mir prinzipiell drei Möglichkeiten ein:
1. in einer Sub in myUtils als Schleife über alle TYPE=PRESENCE die betreffenden Telegram-Usernamen zusammenzukratzen und in der Benachrichtigung mit anzugeben.
2. Wenn bei jedem PRESENCE-Wechsel ohnhin schon irgendwas läuft, dort die anwesenden Telegram-Usernamen zwischenspeichern und beim Sendebefehl abrufen
3. (quick & dirty) im Ausführungsteil den Befehl für alle in Frage kommenden Hausbewohner duplizieren (mit zusätzlicher Angabe des Adressaten) und mit einem IF zuvor die PRESENCE abzufragen.

Benachrichtigungsfunktionen über zu lange geöffnete Fenster gibt es natürlich auch im Rahmen diverser umfänglicher Automatiserungsmodule...
Titel: Antw:Nachrichten nur an Geräte senden die "present" im Status haben
Beitrag von: amenomade am 10 November 2019, 21:10:11
Mit Perl und Aggregationsfunktion @ des DOIFs, kann man wahrscheinlich etwas basteln

{foreach (AggrDoIf('@','^Pr_','state','"present"')) {message an $_}
Titel: Antw:Nachrichten nur an Geräte senden die "present" im Status haben
Beitrag von: Wassergerd am 10 November 2019, 21:59:42
@Pfriemler
Welche Automatisierungsmodule kämen da in Frage?

@amenomade
Hört sich sehr interessant an,  da muss ich mich mal einlesen.