FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: bismosa am 07 Oktober 2017, 09:07:55

Titel: [Gelöst] Doif mit Device Regex
Beitrag von: bismosa am 07 Oktober 2017, 09:07:55
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
Titel: Antw:Doif mit Device Regex
Beitrag von: viegener am 07 Oktober 2017, 11:01:40
Die Anführungsstriche hast Du übersehen...
Titel: Antw:Doif mit Device Regex
Beitrag von: bismosa am 07 Oktober 2017, 11:35:44
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
Titel: Antw:Doif mit Device Regex
Beitrag von: viegener am 07 Oktober 2017, 12:29:08
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

Titel: Antw:[Gelöst] Doif mit Device Regex
Beitrag von: bismosa am 07 Oktober 2017, 12:39:21
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
Titel: Antw:Doif mit Device Regex
Beitrag von: chq am 31 Juli 2018, 09:49:42
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
Titel: Antw:[Gelöst] Doif mit Device Regex
Beitrag von: viegener am 01 August 2018, 15:52:10
@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?