FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: choetzu am 06 Mai 2018, 16:13:17

Titel: [gelöst]DOIF Pushover Zeilenumbruch und HM Monitoring
Beitrag von: choetzu am 06 Mai 2018, 16:13:17
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!'")})
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Otto123 am 06 Mai 2018, 16:30:01
Hi,

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

Geht denn Dein set Befehl in der FHEM Kommandozeile?

Gruß Otto
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag 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
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Frank_Huber am 07 Mai 2018, 08:33:10
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
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Frank_Huber am 07 Mai 2018, 08:39:06
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!'")})
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: choetzu am 07 Mai 2018, 08:57:14
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?
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag 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
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: choetzu am 07 Mai 2018, 09:38:07
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
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Frank_Huber am 07 Mai 2018, 09:39:19
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

Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Otto123 am 07 Mai 2018, 09:43:49
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
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag 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 !
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Frank_Huber am 07 Mai 2018, 09:49:02
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

Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Otto123 am 07 Mai 2018, 09:55:31
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
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag 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..
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Frank_Huber am 07 Mai 2018, 10:55:33
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. :-)
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Otto123 am 07 Mai 2018, 10:59:46
Meine ich auch: Wenn keiner Tot ist leben doch alle!  ;D
Und der Status im Dummy ist doch redundant, den Status hat man doch im Actiondetector selbst
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: choetzu am 07 Mai 2018, 12:38:23
natürlich habt ihr recht!! ;)

Aber.. ;)

Ich habe ein Dummy Monitoring_Dummy, welches die Readings Batterien, Thermometer und Homematic hat.  Sobald ein HM Device nicht auf "alive" ist, wird mit

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


ein "warning" gesetzt.

Und wenn dann wieder alle auf "alive" sind, sollte es dann wieder "OK" machen.

Das war mein Hintergedanke. Aber das geht mit DOIF und Eventtrigger ja offensichtlich nicht... Oder doch?

Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Per am 07 Mai 2018, 13:21:11
Zitat von: choetzu am 07 Mai 2018, 12:38:23Aber das geht mit DOIF und Eventtrigger ja offensichtlich nicht...
Du kannst die Status zählen (https://forum.fhem.de/index.php/topic,70624.0.html) und cmd_2 bei 0 x "dead" einschalten.
Da die Events die gleichen sind wie bei cmd_1 passt das.
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Otto123 am 07 Mai 2018, 13:49:06
Oder eben den trigger nicht auf "alive" sondern auf etwas in der Art (ungetestet)
["^ActionDetector$:dead.0"]

Der Event muss ja erkannt werden:
ZitatActionDetector alive:26 dead:0 unkn:0 off:0

Gruß Otto
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: choetzu am 07 Mai 2018, 15:44:24
Hallo Otto und Per

danke. Das wären Workarounds, ja. Könnte man aber nicht auch auf den state-Zustand triggern?

Also, folgendes DOIF



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

DOELSEIF
([ActionDetector:state] eq "*.dead:0 unkn:0 off:0")
(set Pushover msg 'HM Monitoring' 'alles OK')
(set Monitoring_Dummy Homematic OK)


Ginge sowas? Beim Testen hat es nicht funktioniert...

Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Per am 07 Mai 2018, 16:22:53
Zitat von: choetzu am 07 Mai 2018, 15:44:24Ginge sowas? Beim Testen hat es nicht funktioniert...
Prinzipiell bestimmt, allerdings solltest du dich dazu noch etwas mit RegEx und Vergleichsoperatoren in Perl beschäftigen.

Ist es wirklich mal status und mal state?

Und: dead:0 wirst du nie erreichen, wenn du dead vorher abfängst!
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Otto123 am 07 Mai 2018, 17:21:39
Und mein regEx aus #18 funktioniert nicht? Oder einfach ignoriert?  ::)
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: choetzu am 07 Mai 2018, 17:38:27
Zitat von: Otto123 am 07 Mai 2018, 17:21:39
Und mein regEx aus #18 funktioniert nicht? Oder einfach ignoriert?  ::)

dich würde ich nieeee im Leben ignorieren ;)

Zitat von: Otto123 am 07 Mai 2018, 13:49:06
Oder eben den trigger nicht auf "alive" sondern auf etwas in der Art (ungetestet)
["^ActionDetector$:dead.0"]

Der Event muss ja erkannt werden:
Gruß Otto

Ich habe es eingerichtet. Da es aber auf einen Event triggert und nicht auf "state", wusste ich nicht, wie ich einen solchen Event probemässig auslösen kann. Mann, es gibt Tage, da denke ich, ich hätte es langsam gerafft, und dann wieder solche Tage wie heute, wo ich am Berg stehe wie ein Esel.. ;)
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: Otto123 am 07 Mai 2018, 17:48:15
Naja Du musst einfach mal einen Tot machen und dann wiederbeleben :)

Ich weiß es jetzt auch nicht besser :)
Titel: Antw:[gelöst]DOIF Pushover Zeilenumbruch und HM Monitoring
Beitrag von: choetzu am 07 Mai 2018, 21:49:20
hab getötet und wiederbelebt!! Operation geglückt, Patient überlebt...

Es hat wie folgt funktioniert:
(["^ActionDetector$:^status_.*(unknown|dead|off)"])
(set Monitoring_Dummy Homematic warning)
(set Pushover msg 'HM Monitoring' '$EVENT')

DOELSEIF
(["^ActionDetector$:dead.0"]
and [?$SELF:cmd_nr] ne "2")
(set Monitoring_Dummy Homematic OK)
(set Pushover msg 'HM Monitoring' 'Alle HM Devices ALIVE')


danke für die Hilfe!! Super, wieder was gelernt..
Titel: Antw:DOIF Pushover Zeilenumbruch
Beitrag von: nils_ am 08 Mai 2018, 13:17:19
Zitat von: choetzu am 07 Mai 2018, 17:38:27
Da es aber auf einen Event triggert und nicht auf "state", wusste ich nicht, wie ich einen solchen Event probemässig auslösen kann. Mann, es gibt Tage, da denke ich, ich hätte es langsam gerafft, und dann wieder solche Tage wie heute, wo ich am Berg stehe wie ein Esel.. ;)
https://fhem.de/commandref_DE.html#trigger

damit?