NEWS
Regex für selector
-
Hallo,
Nach Dokumentation scheint in einem selector nur ein wildcard möglich zu sein. Leider matcht der selector bei mir dadurch etwas zu viel, weil z.B. bei
$('[state.id=/*/Door/Open]').each(function(id,i) { log("States: "+id); });
Statt
/UG/Door/Open /EG/Door/Open /OG/Door/Open
auch sowas gefunden wird:
/EG/BAD/Door/Open
Normalerweise würde ich es mit einer regex lösen:
state.id=/\w+?/Door/Open
Geht aber leider nicht. Wäre der Support für regex in selectoren ein interessantes feature bzw. wie könnte ich mich mit iobroker-scripting-Mitteln anders behelfen?
Danke,
Bentschik
-
auch sowas gefunden wird:
/EG/BAD/Door/Open ```` `
Wenn das nicht gefunden werden soll, probier mal
state.id=/*G/Door/Open
-
Das funktioniert nicht, weil dann auch sowas, wie
/EG/FLR_EG/Door/Open
gefunden wird. Ich würde damit den Suchraum auch unnötig einschränken. Das liegt in der Natur des Unterschieds zwischen einfachen Wildcards und Regular Expressions. Ich versuche, mein Anliegen mal etwas genauer zu beschreiben: Meine "Systemvariablen" sind folgendermassen aufgebaut:
/EG = Erggeschoss /OG = Obergeschoss /EG/Door/Open = irgendeine Tür im Ergeschoss offen /EG/AZB = Arbeitszimmer Ben im Erdgeschoss /EG/BAD = Bad im Erdgeschoss /Door/Open = irgendeine Tür im Haus offen
So geht es quasi Spar-MQTT-mässig immer weiter herunter bis zum Datenpunkt eines Sensors. Wenn ich jetzt die Tür bei mir im Arbeitszimmer schliesse, checkt meine Programmierung, ob es irgendwo im Erdgeschoss noch eine weitere offene Tür gibt, ansonsten wird /EG/Door/Open auf false gesetzt. Das triggert ggf. wieder /Door/Open, das checkt, ob in irgendeinen Geschoss eine Tür offen ist. D.h. ich benötige einen Check auf:
/UG/Door/Open /EG/Door/Open /OG/Door/Open /DG/Door/Open
Erschwerend kommt hinzu, dass ich als alter Informatiker die subscribe bzw. on handler über eine Funktion verallgemeinert habe, d.h. der Funktion ist es völlig egal, ob ich auf (UG|EG|OG|DG)/Door/Open matche, oder auf /EG/(AZB|BAD)/Door/Open. Die Funktion bekommt die übegeordnete SV, wie z.B. /Door/Open, übergeben, sowie die zu beobachtenden untergeordeneten Variablablen, wie (UG|EG|OG|DG)/Door/Open. Mit den Wildcards matche ich bei .each, wie beschrieben, zu viel. Regular Expressions für Selektoren wären in der Situation die Rettung.
Beste Grüsse,
Bentschik