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!'")})
Hi,
ich denke mal:
Den \ muss man selbst schützen: \\
Geht denn Dein set Befehl in der FHEM Kommandozeile?
Gruß Otto
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
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
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!'")})
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?
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
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
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
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
Dein Code ist völlig anders - oder habe ich irgendwo Tomaten?
["^ActionDetector$:^status_.*(unknown|dead)"]
Das sind doch Eventtrigger !
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
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
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..
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. :-)
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
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?
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.
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
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...
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!
Und mein regEx aus #18 funktioniert nicht? Oder einfach ignoriert? ::)
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.. ;)
Naja Du musst einfach mal einen Tot machen und dann wiederbeleben :)
Ich weiß es jetzt auch nicht besser :)
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..
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?