FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: raimundl am 27 Februar 2015, 20:34:28

Titel: DOIF mit DeviceMonitor
Beitrag von: raimundl am 27 Februar 2015, 20:34:28
Hallo!

Habe den DeviceMonitor installiert. Wenn "Steckdose1" sich nicht innerhalb einer bestimmten Zeit meldet liefert er:

Steckdose1 health_state: dead

define Status DOIF ([Steckdose1:?dead]) (set Pushover1 msg 'Achtung' 'Ausfall' '' 0 '')

funktioniert!

Da aber der DeviceMonitor bei jeden überwachten Gerät bei Nichtmeldung

Device1 - Device 15 health_state: dead

liefert, soll DOIF nur "health_state" abfragen ob "dead".

define Status DOIF ([health_state:?dead]) (set Pushover1 msg 'Achtung' 'Ausfall' '' 0 '')

funktioniert nicht. "health_state" ist ja kein Device.

wie definiere ich das bitte richtig?

Danke und LG
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: Damian am 27 Februar 2015, 21:30:38
Zitat von: raimundl am 27 Februar 2015, 20:34:28
Hallo!

Habe den DeviceMonitor installiert. Wenn "Steckdose1" sich nicht innerhalb einer bestimmten Zeit meldet liefert er:

Steckdose1 health_state: dead

define Status DOIF ([Steckdose1:?dead]) (set Pushover1 msg 'Achtung' 'Ausfall' '' 0 '')

funktioniert!

Da aber der DeviceMonitor bei jeden überwachten Gerät bei Nichtmeldung

Device1 - Device 15 health_state: dead

liefert, soll DOIF nur "health_state" abfragen ob "dead".

define Status DOIF ([health_state:?dead]) (set Pushover1 msg 'Achtung' 'Ausfall' '' 0 '')

funktioniert nicht. "health_state" ist ja kein Device.

wie definiere ich das bitte richtig?

Danke und LG

Bei DOIF musst du konkrete Device-Namen angeben. Verallgemeinern geht hier nicht. Wenn du es mit einer Zeile erledigen willst, musst du notify benutzen.

Gruß

Damian

Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: ioT4db am 17 Februar 2017, 11:04:35
Zitat von: Damian am 27 Februar 2015, 21:30:38
Bei DOIF musst du konkrete Device-Namen angeben. Verallgemeinern geht hier nicht. Wenn du es mit einer Zeile erledigen willst, musst du notify benutzen.

Gruß

Damian

Hallo Damian,
ich wärm das Thema nochmal auf. Müsste das nicht mittlerweile funktionieren?

Ich hab mir folgendes DOIF angelegt, welches auch auf ein "internal" reagiert, nur leider reagiert nur der erste Teil. Der DOELSEIF-Teil ist zwar ähnlich aufgebaut, macht aber keinen Mux!?

Hintergrund ist wie das Thema schon sagt, ich habe verwende das DeviceMonitor-Modul und möchte es für beliebige Devices abfragen:

Auszug aus meinem DEF des DOIFs:

([":health_state: dead"] and [?$SELF:B_$DEVICE] ne "dead") (set Pushover.D msg 'Health-Alarm' 'Gerät +++ $DEVICE +++ ist ausgefallen!' 'iPhone6s' 0 '', setreading $SELF B_$DEVICE dead)
DOELSEIF ([":health_state: alive"] and [?$SELF:B_$DEVICE] ne "alive") (setreading $SELF B_$DEVICE alive)


attr Do always > ist gesetzt

Der erste Teil reagiert wie gewünscht auf "dead" ich bekomme auch die Push-Nachricht. Nur wenn der internal "health_state" wieder "alive" ist, bekommt es das DOIF nicht mit.

Im EventMonitor werden beide internal-Änderungen angezeigt:

2017-02-17 11:00:07 dummy TestPush6 health_state: dead
2017-02-17 11:00:22 dummy TestPush6 on
2017-02-17 11:00:22 dummy TestPush6 health_state: alive


Oder reagiert DOIF doch nicht auf internals und der erste Teil funktioniert zufällig bzw. aus irgendeinem anderen Grund?

Danke schonmal für Eure Unterstützung...
Daniel
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: Damian am 17 Februar 2017, 11:36:06
Zitat von: friesenjung am 17 Februar 2017, 11:04:35
Hallo Damian,
ich wärm das Thema nochmal auf. Müsste das nicht mittlerweile funktionieren?

Ich hab mir folgendes DOIF angelegt, welches auch auf ein "internal" reagiert, nur leider reagiert nur der erste Teil. Der DOELSEIF-Teil ist zwar ähnlich aufgebaut, macht aber keinen Mux!?

Hintergrund ist wie das Thema schon sagt, ich habe verwende das DeviceMonitor-Modul und möchte es für beliebige Devices abfragen:

Auszug aus meinem DEF des DOIFs:

([":health_state: dead"] and [?$SELF:B_$DEVICE] ne "dead") (set Pushover.D msg 'Health-Alarm' 'Gerät +++ $DEVICE +++ ist ausgefallen!' 'iPhone6s' 0 '', setreading $SELF B_$DEVICE dead)
DOELSEIF ([":health_state: alive"] and [?$SELF:B_$DEVICE] ne "alive") (setreading $SELF B_$DEVICE alive)


attr Do always > ist gesetzt

Der erste Teil reagiert wie gewünscht auf "dead" ich bekomme auch die Push-Nachricht. Nur wenn der internal "health_state" wieder "alive" ist, bekommt es das DOIF nicht mit.

Im EventMonitor werden beide internal-Änderungen angezeigt:

2017-02-17 11:00:07 dummy TestPush6 health_state: dead
2017-02-17 11:00:22 dummy TestPush6 on
2017-02-17 11:00:22 dummy TestPush6 health_state: alive


Oder reagiert DOIF doch nicht auf internals und der erste Teil funktioniert zufällig bzw. aus irgendeinem anderen Grund?

Danke schonmal für Eure Unterstützung...
Daniel

Du triggerst aber auf Ereignisse. Irgendwelche Internals kommen bei deiner Definition nicht vor. Die Definition sollte allerdings so funktionieren.

 
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: ioT4db am 17 Februar 2017, 13:02:47
Zitat von: Damian am 17 Februar 2017, 11:36:06
Du triggerst aber auf Ereignisse. Irgendwelche Internals kommen bei deiner Definition nicht vor. Die Definition sollte allerdings so funktionieren.

Danke für die schnelle Antwort!

Ok, stimmt das sind Ereignisse. Aber würde DOIF mittlerweile auf internals reagieren?

Ich habs jetzt mal auf folgendes reduziert:

das funktioniert:
([":health_state: dead"]) (setreading $SELF B_$DEVICE test)

das funktioniert NICHT:
([":health_state: alive"]) (setreading $SELF B_$DEVICE test)

Obwohl die Ereignisse im Event monitor so erscheinen, bekommt es das DOIF bei ":health_state: alive" nicht mit.

Kann es sein, dass im Event monitor was kommt, aber das Modul trotzdem "irgendwas" nicht sendet, damit es das DOIF mitbekäme?

schon merkwürdig das ganze...

VG...
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: Damian am 17 Februar 2017, 15:04:14
Zitat von: friesenjung am 17 Februar 2017, 13:02:47
Danke für die schnelle Antwort!

Ok, stimmt das sind Ereignisse. Aber würde DOIF mittlerweile auf internals reagieren?

Ich habs jetzt mal auf folgendes reduziert:

das funktioniert:
([":health_state: dead"]) (setreading $SELF B_$DEVICE test)

das funktioniert NICHT:
([":health_state: alive"]) (setreading $SELF B_$DEVICE test)

Obwohl die Ereignisse im Event monitor so erscheinen, bekommt es das DOIF bei ":health_state: alive" nicht mit.

Kann es sein, dass im Event monitor was kommt, aber das Modul trotzdem "irgendwas" nicht sendet, damit es das DOIF mitbekäme?

schon merkwürdig das ganze...

VG...

Ich weiß nicht, welche konkreten Internals du meinst. Abfragen kann man die mit &-Zeichen. Internals selbst ändern sich normalerweise nicht und produzieren auch keine Ereignisse - Aussnahme ist state, der ja an das Reading state gekoppelt ist.

mit

trigger test_dummy health_state: alive

wird bei mir:

([":health_state: alive"]) (setreading $SELF B_$DEVICE test)

ohne Probleme ausgeführt.
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: ioT4db am 17 Februar 2017, 15:51:12
Zitat von: Damian am 17 Februar 2017, 15:04:14
Ich weiß nicht, welche konkreten Internals du meinst. Abfragen kann man die mit &-Zeichen. Internals selbst ändern sich normalerweise nicht und produzieren auch keine Ereignisse - Aussnahme ist state, der ja an das Reading state gekoppelt ist.

mit

trigger test_dummy health_state: alive

wird bei mir:

([":health_state: alive"]) (setreading $SELF B_$DEVICE test)

ohne Probleme ausgeführt.

ok, lassen wir mal internals außen vor.

Das Ereignis "alive" kommt je eigentlich vom DeviceMonitor, wenn das Device wieder aktiv ist.

Manuell mit trigger test_dummy health_state: alive funktioniert es bei mir auch!

Nur wenn das Device eben automatisch durch den DeviceMonitor wieder das Ereignis "alive" bekommt/gesetzt wird, dann funktioniert es nicht.

ratlos....

VG...
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: Damian am 17 Februar 2017, 15:53:16
Zitat von: friesenjung am 17 Februar 2017, 15:51:12
ok, lassen wir mal internals außen vor.

Das Ereignis "alive" kommt je eigentlich vom DeviceMonitor, wenn das Device wieder aktiv ist.

Manuell mit trigger test_dummy health_state: alive funktioniert es bei mir auch!

Nur wenn das Device eben automatisch durch den DeviceMonitor wieder das Ereignis "alive" bekommt/gesetzt wird, dann funktioniert es nicht.

ratlos....

VG...

Dann poste mal den eigentlichen Eintrag im Device-Monitor.
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: ioT4db am 18 Februar 2017, 00:00:07
Zitat von: Damian am 17 Februar 2017, 15:53:16
Dann poste mal den eigentlichen Eintrag im Device-Monitor.
Hi, ist etwas später geworden...

Das Device, um das es sich handelt ist "Testpush6".

Also im DeviceMonitor steht folgendes:
Anlage: DeviceMonitor.JPG

Das dazugehörige Device, was überwacht wird, sieht so aus:
Anlage: Test_Device.JPG

Hoffe das ist was Du erwartet hast...

VG
Daniel
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: Damian am 18 Februar 2017, 10:00:37
OK. Jetzt brauchen wir noch den Event-Monitor Output vom Ereignis:

health_state: alive

Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: ioT4db am 18 Februar 2017, 10:15:25
Zitat von: friesenjung am 17 Februar 2017, 11:04:35
...


Im EventMonitor werden beide internal-Änderungen angezeigt:

2017-02-17 11:00:07 dummy TestPush6 health_state: dead
2017-02-17 11:00:22 dummy TestPush6 on
2017-02-17 11:00:22 dummy TestPush6 health_state: alive



Hi, das ist der vom Beitrag weiter oben. Zeitstempel ist halt etwas jünger.

VG


Gesendet von iPhone mit Tapatalk
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: Damian am 18 Februar 2017, 10:21:27
tja, da muss ich leider passen, wenn der manuelle Trigger klappt !?
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: Damian am 18 Februar 2017, 10:32:00
Teste mal

DOIF ([":health_state: alive"]) (setreading $SELF B_$DEVICE alive)

mit do always

Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: ioT4db am 18 Februar 2017, 11:06:17
Danke für den Tipp, nur ist do always schon immer gesetzt :(

Scheint also irgendwas im DeviceMonitor-Modul nicht richtig zu triggern!? Andere Idee hab ich momentan auch nicht


Gesendet von iPhone mit Tapatalk
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: Damian am 18 Februar 2017, 11:19:41
Zitat von: friesenjung am 18 Februar 2017, 11:06:17
Danke für den Tipp, nur ist do always schon immer gesetzt :(

Scheint also irgendwas im DeviceMonitor-Modul nicht richtig zu triggern!? Andere Idee hab ich momentan auch nicht


Gesendet von iPhone mit Tapatalk

Du könntest auch probieren das Reading abzufragen:

([myDeviceMonitor:Testpush6] eq "alive" ...
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: ioT4db am 18 Februar 2017, 21:53:42
Zitat von: Damian am 18 Februar 2017, 11:19:41
Du könntest auch probieren das Reading abzufragen:

([myDeviceMonitor:Testpush6] eq "alive" ...
Nabend Damian,

selbst das geht nicht!
([myDeviceMonitor:TestPush6] eq "alive") (setreading $SELF B_TestPush6 test)

Mit jedem anderen Device geht es, nur dem DeviceMonitor nicht. Ich werd noch wahnsinnig  :o

Mir scheint Du hast das Modul nicht laufen, oder?

Vielleicht nehm ich mal Kontakt zum Author auf. Ist ein "Dennis G".

Ich hab schon mal ins Modul geschaut, aber das ist mit meiner Minimal-Kenntnis von Perl aussichtslos.  :-[

VG...
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: Damian am 18 Februar 2017, 22:27:41
Zitat von: friesenjung am 18 Februar 2017, 21:53:42
Nabend Damian,

selbst das geht nicht!
([myDeviceMonitor:TestPush6] eq "alive") (setreading $SELF B_TestPush6 test)

Mit jedem anderen Device geht es, nur dem DeviceMonitor nicht. Ich werd noch wahnsinnig  :o

Mir scheint Du hast das Modul nicht laufen, oder?

Vielleicht nehm ich mal Kontakt zum Author auf. Ist ein "Dennis G".

Ich hab schon mal ins Modul geschaut, aber das ist mit meiner Minimal-Kenntnis von Perl aussichtslos.  :-[

VG...

Ich benutze DeviceMonitor nicht. Ich kenne das Modul gar nicht.
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: ioT4db am 02 Mai 2017, 18:17:49
falls hier jemand mal stöbert, es gibt zu dem hier besprochenen alten DecviceMonitor mittlerweile eine gute, supportete Alternative...

https://forum.fhem.de/index.php/topic,68765.msg629378.html#msg629378
Titel: Antw:DOIF mit DeviceMonitor
Beitrag von: Timmy.m am 27 April 2018, 19:53:48
Hallo!

Ich nutze den DeviceMonitor State als Trigger, funktioniert sehr gut.


([":health_state: dead"] and [?$SELF:B_$DEVICE] ne "dead" and [DeviceMonitor_Name])


Grüße Tim