Hallo!
Ich verstehe es einfach nicht. Ich habe mehrere Max Heizkörperthermostate und möchte mir eine Pushmsg schicken, wenn ein Thermostat eine leere Batterie meldet.
Die Thermostate fangen im Namen alle mit "Max_HT_" an und haben das Reading "battery".
Da ich noch nicht weiß, welche Meldung dann kommt, möchte ich auf "ne ok" testen. Einzeln geht dies so:
([Max_HT_Kueche:battery] ne "ok")
({
DebianMail("ich\@jemand.com","Heizkoerperthermostat Batterie leer!","Heizkoerperthermostat $DEVICE $EVENT meldet leere Batterie");
fhem("set pushmsg msg title=ToDo priority=0 Heizkörperthermostat $DEVICE $EVENT meldet leere Batterie");
})
Jetzt habe ich in der CommandRef dies hier gefunden:
["FS"] triggert auf alle Devices, die "FS" im Namen beinhalten
["^FS"] triggert auf alle Devices, die mit "FS" im Namen anfangen
["FS:temp"] triggert auf alle Devices, die "FS" im Namen und "temp" im Event beinhalten
([":^temp"]) triggert auf beliebige Devices, die im Event mit "temp" beginnen
(["^FS$:^temp$"] triggert auf Devices, die genau "FS" heißen und im Event genau "temp" vorkommt
[""] triggert auf alles
Wenn ich nun also
([^Max_HT_:battery] ne "ok")
({
DebianMail("ich\@jemand.com","Heizkoerperthermostat Batterie leer!","Heizkoerperthermostat $DEVICE $EVENT meldet leere Batterie");
fhem("set pushmsg msg title=ToDo priority=0 Heizkörperthermostat $DEVICE $EVENT meldet leere Batterie");
})
würde ich es so verstehen, das nun auf alle Thermostate die mit "Max_HT_" anfangen reagiert werden sollte.
Macht er auch. Aber auch wenn das Reading "ok" ist, wird der Doif ausgeführt. Warum? Was habe ich übersehen?
Gruß
Bismosa
Die Anführungsstriche hast Du übersehen...
Stimmt. Aber wenn ich die benutze wird auch bei "ok" getriggert.
Also:
(["Max_HT_:battery"] ne "ok")
Bei allen geräten die mit "Max_HT_" anfangen wird getriggert. Auch bei "ok"
(["Max_HT_Kueche:battery"] ne "ok")
Triggert auch immer. Aber nur bei dem einen Thermostaten.
Es geht nur, wenn ich es so mache:
([Max_HT_Kueche:battery] ne "ok")
Aber dann halt nur für das eine Gerät.
Irgendwas habe ich doch immer noch nicht verstanden...
Gruß
Bismosa
[edit]
Wie es immer so ist...da ist man Stundenlang dabei...hat gerade geantwortet und findet dann eine Lösung :)
["regex for trigger",<default value>]
Also
(["Max_HT_:battery","ok"] ne "ok")
Scheint zu funktionieren :) Auch wenn ich den Sinn des Default-Wertes hier jetzt nicht verstehe.
Gruß
Bismosa
Nein, Zeichen weglassen verändert das und rumprobieren mag helfen, bitte aufmerksam lesen
(["Max_HT_:battery"] ne "ok")
Triggert bei allen Geräten, die MAX:HT_ im Namen enthalten (nicht nur am Anfang) und wo battery im event vorkommt. Die Zeichen ^ und $
sind signifikant in den Beispielen und machen einen deutlichen Unterschied.
Also mein Vorschlag, wenn der match nicht passt einfach mal einen perl-Debug oder Log3-befehl mit dem Event hinzufügen, dann kannst Du schauen auf welchen Event konkret gematcht wurde. Bei einer Batteriewarnung macht es ja keinen Sinn ein Ergebnis zu haben, was manchmal passt. Das Problem ist doch, dass Batteriewarnungen ja nicht so einfach zu provozieren sind, also würde ich da genauer testen.
Zuerstmal ein ^hinzufügen, denn sonst sind auf jeden Fall andere Devices möglich die passen
Hallo,
danke für die Hilfe!
Stimmt. Bei der ganzen probiererei habe ich das ^ tatsächlich vergessen. Habe ich gleich nachgepflegt :)
Getestet habe ich immer mit einem
setreading Max_HT_Kueche battery ok
bzw.
setreading Max_HT_Kueche battery leer
Vielen Dank!
Gruß
Bismosa
Zitat von: viegener am 07 Oktober 2017, 12:29:08..wenn der match nicht passt einfach mal einen perl-Debug oder Log3-befehl mit dem Event hinzufügen, dann kannst Du schauen auf welchen Event konkret gematcht wurde.
Bitte um genauere Beschreibung, was damit gemeint ist.
Gruß Chris
@chq: Es ging darum in einem notify auf perl-Ebene Aufrufe zu nutzen, um interessante Informationen (also hier der Event, der das notify triggert) im Logfile zu speichern. Das geht zum Beispiel damit, dass man den perl-Befehl:
Debug "Event matches :".$EVENT.":"
im notify/DOIF ausführen lässt. Damit sieht man im normalen Betrieb welche Events so matchen und sieht auch die beliebten Doppelaktivierungen. Analog lässt sich auch Log3 verwenden, dazu finden sich auch Beispiele in der Commandref.
Besser erklärt?