[gelöst]DOIF Pushover Zeilenumbruch und HM Monitoring

Begonnen von choetzu, 06 Mai 2018, 16:13:17

Vorheriges Thema - Nächstes Thema

choetzu

Hallo,

ich komme mit folgendem Code nciht ans Ziel. Ich möchte gerne Zeilenumbrüche im Pushover integrieren. Normalerweise geht dies mit \n.  Auch mit %0A gehts nicht. Es kommt alles auf einer Zeile.

Jemand eine Idee? Danke.

([Monitoring_Dummy:Batterien] ne "OK"
or [Monitoring_Dummy:Homematic] ne "OK"
or [Monitoring_Dummy:Thermometer] ne "OK")
(set Monitoring_Dummy WARNING)
({fhem("set Pushover msg 'Monitoring Warning' 'Batterien: ".ReadingsVal("Monitoring_Dummy","Batterien","")."\nThermometer: ".ReadingsVal("Monitoring_Dummy","Thermometer","")."\nHomematic: ".ReadingsVal("Monitoring_Dummy","Homematic","")."'")})

DOELSE
(set Monitoring_Dummy OK)
({fhem("set Pushover msg title='Monitoring' message='ALLES OK!'")})
Raspi3, EnOcean, Zwave, Homematic

Otto123

Hi,

ich denke mal:
Den \ muss man selbst schützen: \\

Geht denn Dein set Befehl in der FHEM Kommandozeile?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

choetzu

Hallo Otto123
einmal mehr warst du richtig ;) Danke. mit \\n ging es.


Bei einer ähnlichen Situation stehe ich auch an. Ich habe ein DOIF gemacht um den HM ActorDetector zu bewachen.

Dabei habe ich das definiert:

(["^ActionDetector$:^status_.*(unknown|dead|off)"])
(set Pushover msg title=HM Monitoring message=$EVENT)
(set Monitoring_Dummy Homematic warning)

DOELSE
(set Monitoring_Dummy Homematic OK)


CMD1 funktioniert. Aber auf was muss ich triggern, wenn wieder alle "alive" sind?  Bring das irgendwie nicht hin. Es bleibt beim CMD1 stehen.



Hier noch das Listing:
Internals:
   CHANGED   
   DEF        (["^ActionDetector$:^status_.*(unknown|dead|off)"])
(set Pushover msg title=HM Monitoring message=$EVENT)
(set Monitoring_Dummy Homematic warning)

DOELSE
(set Monitoring_Dummy Homematic OK)

   MODEL      FHEM
   NAME       HM_monitoring_DOIF
   NR         392
   NTFY_ORDER 50-HM_monitoring_DOIF
   STATE      Homematic OK
   TYPE       DOIF
   READINGS:
     2018-05-05 17:46:01   Device          ActionDetector
     2018-05-05 23:22:11   cmd             2
     2018-05-05 23:22:11   cmd_event       HM_monitoring_DOIF
     2018-05-05 23:22:11   cmd_nr          2
     2018-05-02 22:42:35   mode            enabled
     2018-05-05 23:22:11   state           Homematic OK
   Regex:
     cond:
       :
         0:
           "^ActionDetector$:^status_.*(unknown|dead|off)" ^ActionDetector$:^status_.*(unknown|dead|off)
   condition:
     0          EventDoIf('^ActionDetector$',$hash,'^status_.*(unknown|dead|off)',0)
   devices:
   do:
     0:
       0          set Pushover msg title=HM Monitoring message=$EVENT
       1          set Monitoring_Dummy Homematic warning
     1:
       0          set Monitoring_Dummy Homematic OK
   helper:
     DOIF_Readings_events
     DOIF_eventas
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   perlblock:
   uiState:
   uiTable:
Attributes:
   alias      HM Monitoring DOIF
   cmdState   Homematic Achtung|Homematic OK
   do         always
   group      04_Monitoring
   icon       black/svg/eye
Raspi3, EnOcean, Zwave, Homematic

Frank_Huber

Zitat von: choetzu am 06 Mai 2018, 19:25:16
Hallo Otto123
einmal mehr warst du richtig ;) Danke. mit \\n ging es.


Bei einer ähnlichen Situation stehe ich auch an. Ich habe ein DOIF gemacht um den HM ActorDetector zu bewachen.

Dabei habe ich das definiert:

(["^ActionDetector$:^status_.*(unknown|dead|off)"])
(set Pushover msg title=HM Monitoring message=$EVENT)
(set Monitoring_Dummy Homematic warning)

DOELSE
(set Monitoring_Dummy Homematic OK)


CMD1 funktioniert. Aber auf was muss ich triggern, wenn wieder alle "alive" sind?  Bring das irgendwie nicht hin. Es bleibt beim CMD1 stehen.



Hier noch das Listing:
Internals:
   CHANGED   
   DEF        (["^ActionDetector$:^status_.*(unknown|dead|off)"])
(set Pushover msg title=HM Monitoring message=$EVENT)
(set Monitoring_Dummy Homematic warning)

DOELSE
(set Monitoring_Dummy Homematic OK)

   MODEL      FHEM
   NAME       HM_monitoring_DOIF
   NR         392
   NTFY_ORDER 50-HM_monitoring_DOIF
   STATE      Homematic OK
   TYPE       DOIF
   READINGS:
     2018-05-05 17:46:01   Device          ActionDetector
     2018-05-05 23:22:11   cmd             2
     2018-05-05 23:22:11   cmd_event       HM_monitoring_DOIF
     2018-05-05 23:22:11   cmd_nr          2
     2018-05-02 22:42:35   mode            enabled
     2018-05-05 23:22:11   state           Homematic OK
   Regex:
     cond:
       :
         0:
           "^ActionDetector$:^status_.*(unknown|dead|off)" ^ActionDetector$:^status_.*(unknown|dead|off)
   condition:
     0          EventDoIf('^ActionDetector$',$hash,'^status_.*(unknown|dead|off)',0)
   devices:
   do:
     0:
       0          set Pushover msg title=HM Monitoring message=$EVENT
       1          set Monitoring_Dummy Homematic warning
     1:
       0          set Monitoring_Dummy Homematic OK
   helper:
     DOIF_Readings_events
     DOIF_eventas
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   perlblock:
   uiState:
   uiTable:
Attributes:
   alias      HM Monitoring DOIF
   cmdState   Homematic Achtung|Homematic OK
   do         always
   group      04_Monitoring
   icon       black/svg/eye


ich mach das ohne CMD_2:
defmod HM_Whatchdog DOIF (["^ActionDetector$:^status_.*(unknown|dead)"]) (set TelegramBot message $EVENT)
attr HM_Whatchdog do always

Frank_Huber

Zitat von: choetzu am 06 Mai 2018, 16:13:17
(set Monitoring_Dummy WARNING)
({fhem("set Pushover msg 'Monitoring Warning' 'Batterien: ".ReadingsVal("Monitoring_Dummy","Batterien","")."\nThermometer: ".ReadingsVal("Monitoring_Dummy","Thermometer","")."\nHomematic: ".ReadingsVal("Monitoring_Dummy","Homematic","")."'")})

DOELSE
(set Monitoring_Dummy OK)
({fhem("set Pushover msg title='Monitoring' message='ALLES OK!'")})


wozu der Umweg über Perl?

(set Monitoring_Dummy WARNING)
(set Pushover msg 'Monitoring Warning' 'Batterien: [Monitoring_Dummy:Batterien]\nThermometer: [Monitoring_Dummy:Thermometer]\nHomematic: [Monitoring_Dummy:Homematic])

DOELSE
(set Monitoring_Dummy OK)
({fhem("set Pushover msg title='Monitoring' message='ALLES OK!'")})

choetzu

Halllo, herzlichen Dank für dein Antwort.
Zitat von: Frank_Huber am 07 Mai 2018, 08:39:06
wozu der Umweg über Perl?

Ich wusste nicht, wie ich Readingswerte in Pushover integrieren kann. Deshalb habe ich im Forum gesucht und diese Variante (also Umweg in Perl) gefunden. Offensichtlich geht es auch so.

Zitat von: Frank_Huber am 07 Mai 2018, 08:33:10
ich mach das ohne CMD_2:
defmod HM_Whatchdog DOIF (["^ActionDetector$:^status_.*(unknown|dead)"]) (set TelegramBot message $EVENT)
attr HM_Whatchdog do always


CMD1 meldet mir ja, wenn was nicht OK ist (CMD1). Ich möchte aber, dass man mir auch meldet, sollten alle Geräte wieder auf "alive" sein (CMD2). Da hinkt es bei mir. Ich krieg das nicht hin.

Warum triggerst du das nicht?
Raspi3, EnOcean, Zwave, Homematic

Otto123

Moin,

Du triggerst ja in deinem DOIF auf bestimmte Events bestimmter Geräte, damit gibt es aus meiner Sicht nie die Chance auf einen DOELSE Zweig.
Ich denke wenn wirklich ausschließlich auf Events triggert macht ein DOELSE Zweig keinen Sinn, was ist das Gegenteil von Triggern -> nicht triggern: Also das Modul wird gar nicht angesprochen.
Ich habe keine genaue Ahnung was der Actiondetector so für Events wirft, aber wenn er alive wirft dann triggere doch auf diesen Event in einem DOELSEIF.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

choetzu

Zitat von: Otto123 am 07 Mai 2018, 09:05:40
Moin,

Du triggerst ja in deinem DOIF auf bestimmte Events bestimmter Geräte, damit gibt es aus meiner Sicht nie die Chance auf einen DOELSE Zweig.
Ich denke wenn wirklich ausschließlich auf Events triggert macht ein DOELSE Zweig keinen Sinn, was ist das Gegenteil von Triggern -> nicht triggern: Also das Modul wird gar nicht angesprochen.
Ich habe keine genaue Ahnung was der Actiondetector so für Events wirft, aber wenn er alive wirft dann triggere doch auf diesen Event in einem DOELSEIF.

Gruß Otto

Hallo Otto

herzlichen Dank für die Lektion. Wo du recht hast, hast du recht. ;) Ich muss das neu überdenken, und zwar bezogen auf den Zustand:

Wenn eines der HM Geräte NICHT alive ist, dann soll es mich benachrichtigen mit dem entsprechenden Device
Wenn danach alle HM Geräte WIEDER alive sind, dann soll es mich benachrichtigen das alles wieder OK ist.

([ActionDetector:status_.*] ne "alive")
(set Pushover msg 'HM Monitoring' '$NAME $EVENT')
(set Monitoring_Dummy Homematic warning)

DOELSEIF
([ActionDetector:status_.*] eq "alive")
(set Monitoring_Dummy Homematic OK)

DOELSE


Das geht aber irgendwie nicht.

Hier noch das Listing von ActionDetector:

Internals:
   DEF        000000
   IODev     
   NAME       ActionDetector
   NOTIFYDEV  global
   NR         189
   NTFY_ORDER 50-ActionDetector
   STATE      alive:12 dead:0 unkn:0 off:0
   TYPE       CUL_HM
   READINGS:
     2018-05-07 09:27:39   state           alive:12 dead:0 unkn:0 off:0
     2018-05-07 09:27:39   status_Garage_Klima alive
     2018-05-07 09:27:39   status_Rauchmelder_OG alive
     2018-05-07 09:27:39   status_Rauchmelder_Technik alive
     2018-05-07 09:27:39   status_Rauchmelder_Waschkueche alive
     2018-05-07 09:27:39   status_Steckdose_HM_Lueftung alive
     2018-05-07 09:27:39   status_Steckdose_HM_Regenwasser alive
     2018-05-07 09:27:39   status_Steckdose_HM_Technik alive
     2018-05-07 09:27:39   status_Technik_Klima alive
     2018-05-07 09:27:39   status_Wasseralarm_Heizung alive
     2018-05-07 09:27:39   status_Wasseralarm_Pool alive
     2018-05-07 09:27:39   status_Wasseralarm_Waschkueche alive
     2018-05-07 09:27:39   status_Weinkeller_Klima alive
   helper:
     HM_CMDNR   197
     actCycle   600
     mId       
     peers      40A3B3,40C2F7,40C2F9,527237,5272B0,5274E8,54BD20,54C15B,56C1B4,5DD287,5DD310,5DD4DA
     40A3B3:
       start      2018-05-06 20:10:42
     40C2F7:
       start      2018-05-06 20:10:42
     40C2F9:
       start      2018-05-06 20:10:42
     527237:
       start      2018-05-06 20:10:43
     5272B0:
       start      2018-05-06 20:10:43
     5274E8:
       start      2018-05-06 20:10:43
     54BD20:
       start      2018-05-06 20:10:43
     54C15B:
       start      2018-05-06 20:10:43
     56C1B4:
       start      2018-05-06 20:10:42
     5DD287:
       start      2018-05-06 20:10:42
     5DD310:
       start      2018-05-06 20:10:42
     5DD4DA:
       start      2018-05-06 20:10:42
     io:
       newChn     +000000,00,00,00
       prefIO     
       rxt        0
       vccu       
       p:
         000000
         00
         00
         00
     mRssi:
       mNo       
     prt:
       bErr       0
       sProc      0
     q:
       qReqConf   
       qReqStat   
     role:
Attributes:
   alias      Action Detector
   event-on-update-reading .*
   group      Gateway
   icon       black/svg/shield
   model      ActionDetector
   room       CUL_HM
   sortby     2
Raspi3, EnOcean, Zwave, Homematic

Frank_Huber

Ich denke bei unknown oder dead greift man eh manuell ein und prüft.
Da sehe ich dann selbst ob es wieder OK ist.
Daher reicht mir der Fehlerfall.


Gesendet von meinem S60 mit Tapatalk


Otto123

Jetzt machst Du in Deinem DOIF wieder ganz andere Sachen:
[ActionDetector:status_.*] würde Readings auslesen. Meines Wissens kann man dabei kein regEx angeben, das geht nur bei Triggern auf Events.


Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

Dein Code ist völlig anders - oder habe ich irgendwo Tomaten?
["^ActionDetector$:^status_.*(unknown|dead)"]
Das sind doch Eventtrigger !
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Frank_Huber

Zitat von: Otto123 am 07 Mai 2018, 09:46:54
Dein Code ist völlig anders - oder habe ich irgendwo Tomaten?
["^ActionDetector$:^status_.*(unknown|dead)"]
Das sind doch Eventtrigger !
Ich hatte Tomaten... Man sollte nicht mehrere Sachen parallel machen.
Meine aber dennoch dass das gehen müsste.

Gesendet von meinem S60 mit Tapatalk


Otto123

Aber selbst wenn man die alive Meldung abfängt, es ist doch nur eine von vielen. Es ist nicht alles ok wenn nach 30 Gerät ist tot Meldungen noch eine Gerät ist alive Meldung kommt.
Am Ende ist es doch besser den state des Actiondetector zu triggern, da steht doch alles drin. Übersichtlich mit einem Blick.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

choetzu

Danke, das habe ich mir auch überlegt, aber bin davon aus 2 Gründen abgekommen:

- mit dem Zerlegen des States (nur alive) habe ich als Laie Mühe ;)
- ich weiss dann zwar, wieviele alive sind, jedoch nicht welche... resp. Welche nicht..
Raspi3, EnOcean, Zwave, Homematic

Frank_Huber

Zitat von: choetzu am 07 Mai 2018, 10:17:20
Danke, das habe ich mir auch überlegt, aber bin davon aus 2 Gründen abgekommen:

- mit dem Zerlegen des States (nur alive) habe ich als Laie Mühe ;)
- ich weiss dann zwar, wieviele alive sind, jedoch nicht welche... resp. Welche nicht..

Die Frage die du dir stellen solltest: "Brauche ich das CMD_2 für OK?"
Ohne CMD_2 geht das wunderbar mit Meldung des Gerätes. :-)