[Gelöst] Doif mit Device Regex

Begonnen von bismosa, 07 Oktober 2017, 09:07:55

Vorheriges Thema - Nächstes Thema

bismosa

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
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

viegener

Die Anführungsstriche hast Du übersehen...
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

bismosa

#2
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
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

viegener

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

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

bismosa

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
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

chq

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
So einfach wie möglich, so kompliziert wie nötig

viegener

@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?
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können