DOIF: Überwachung Fensterkontakte, Benachrichtigung universell

Begonnen von mattt, 25 Oktober 2014, 11:15:31

Vorheriges Thema - Nächstes Thema

mattt

Hallo,

habe mittels DOIF eine Überwachung mit Benachrichtigung für einen einzelnen Fensterkontakt.
Statt das jetzt für jedes Fenster zu kopieren und bei Änderungen mühsam einzeln anpassen zu müssen, hier meine Frage:

Wie kann ich das universeller lösen? Also nur ein DOIF/Notify für alle Fenster, mit Benachrichtigung welches Fenster betroffen ist?
Möchte außerdem über ein Attribut beim einzelnen Kontakt einstellen, ob er überwacht werden soll.

Das ist meine Definition DEF aus dem Webinterface:

([SchlaZi.Fenster.links] eq "opened")
    (set pushover msg 'Schlafzimmer' 'Fenster 15min auf!',
    sleep 900,
    set pushover msg 'Schlafzimmer' 'Fenster 30min auf!')
DOELSEIF ([SchlaZi.Fenster.links] eq "closed")
    (set pushover msg 'Schlafzimmer' 'Fenster wieder zu')


Mittels 'attr wait 900' sind die ersten 15min Verzögerung realisiert.

Danke für Ideen

Damian

Zitat von: mattt am 25 Oktober 2014, 11:15:31
Hallo,

habe mittels DOIF eine Überwachung mit Benachrichtigung für einen einzelnen Fensterkontakt.
Statt das jetzt für jedes Fenster zu kopieren und bei Änderungen mühsam einzeln anpassen zu müssen, hier meine Frage:

Wie kann ich das universeller lösen? Also nur ein DOIF/Notify für alle Fenster, mit Benachrichtigung welches Fenster betroffen ist?
Möchte außerdem über ein Attribut beim einzelnen Kontakt einstellen, ob er überwacht werden soll.

Das ist meine Definition DEF aus dem Webinterface:

([SchlaZi.Fenster.links] eq "opened")
    (set pushover msg 'Schlafzimmer' 'Fenster 15min auf!',
    sleep 900,
    set pushover msg 'Schlafzimmer' 'Fenster 30min auf!')
DOELSEIF ([SchlaZi.Fenster.links] eq "closed")
    (set pushover msg 'Schlafzimmer' 'Fenster wieder zu')


Mittels 'attr wait 900' sind die ersten 15min Verzögerung realisiert.

Danke für Ideen

Du kannst deine Fensterkontakte in eine Structure packen, diese in DOIF abfragen und bei set pushover [<deine Structure>:LastDevice] angeben.

Vorsicht bei Sleep bei DOIF, das friert das FHEM-System ein.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mattt

Hallo,

habe eine readingsgroup rg_Fenster definiert.
define rg_Fenster readingsGroup .*.[Tuer|Fenster]:onoff
Es handelt sich um Max! Fensterkontakte

Dann habe ich die DEF verändert, klappt so aber nicht.


([rg_Fenster] eq "opened")
    (set pushover msg [rg_Fenster:LastDevice] 'Fenster 15min auf!',
    sleep 30,
    set pushover msg [rg_Fenster:LastDevice] 'Fenster 30min auf!')
DOELSEIF ([rg_Fenster] eq "closed")
    (set pushover msg [rg_Fenster:LastDevice] 'Fenster wieder zu')


Zum Thema sleep: Die commandref schreibt: 'Bemerkung: sleep gefolgt von weiteren Befehlen und aufgerufen in at/notify/etc blockiert die Abarbeitung von FHEM nicht.'
Gilt das nicht für DOIF?

Damian

Zitat von: mattt am 27 Oktober 2014, 18:06:12
Hallo,

habe eine readingsgroup rg_Fenster definiert.
define rg_Fenster readingsGroup .*.[Tuer|Fenster]:onoff
Es handelt sich um Max! Fensterkontakte

Dann habe ich die DEF verändert, klappt so aber nicht.


([rg_Fenster] eq "opened")
    (set pushover msg [rg_Fenster:LastDevice] 'Fenster 15min auf!',
    sleep 30,
    set pushover msg [rg_Fenster:LastDevice] 'Fenster 30min auf!')
DOELSEIF ([rg_Fenster] eq "closed")
    (set pushover msg [rg_Fenster:LastDevice] 'Fenster wieder zu')


Zum Thema sleep: Die commandref schreibt: 'Bemerkung: sleep gefolgt von weiteren Befehlen und aufgerufen in at/notify/etc blockiert die Abarbeitung von FHEM nicht.'
Gilt das nicht für DOIF?

Readingsgroup ist ja auch nicht structure. Im DOIF-Thread gibt es eine andere Lösung zum gleichen Problem

http://forum.fhem.de/index.php/topic,23833.msg211983.html#msg211983

Wenn du während der sleep-Zeit dein FHEM nicht bedienen kannst, dann weiß du, dass dein FHEM in dieser Zeit schläft. Bei notify bzw. at ist es nicht so. Es wird aber demnächst für DOIF ein wait statt eines sleeps geben. Du kannst dir aber jetzt schon mit einem at behelfen:

statt

sleep 30, set pushover...

define at_30 at +00:00:30 set puschover...


Gruß

Damian




Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mattt

Danke, du hattest ja structure geschrieben, mein Fehler.

Habe jetzt folgendes, scheint zu klappen

([struc_Fenster] eq "opened")
    (set pushover msg '[struc_Fenster:LastDevice]' 'Fenster 15min auf!',
    define at_1500 at +00:15:00 set pushover msg '[struc_Fenster:LastDevice]' 'Fenster 30min auf!')
DOELSEIF ([struc_Fenster] eq "closed")
    (set pushover msg '[struc_Fenster:LastDevice]' 'Fenster wieder zu')


Die dazugehörige structure:

define struc_Fenster structure WoZi.Tuer KiZi.Tuer SchlaZi.Fenster.links
attr struc_Fenster clientstate_behavior last