NEWS
Abfrage "Zustand irgendeines Fensters hat sich geändert"
-
Hallo,
bewege mich leider was javascript angeht bei den Anfängen :oops:; muss deshalb eine wahrscheinlich einfache Frage stellen:
In einem hier gefundenen Skript zur Anzeige der Systemmeldungen finde ich folgendes:
var SelectorUNREACH = $('channel[state.id=*.UNREACH]'); .... SelectorUNREACH.on(function(obj) { // bei Zustandänderung *.UNREACH in allen Gewerken countService(obj); });
Sowas versuche ich nun verzweifelt so umzumünzen, dass eine Funktion für alle Objekte mit "Fenster" im Namen aufgerufen wird, sobald sich der Zusand des Fensters geändert hat. Also in etwa so
var fensterZustand= $('channel[name=*Fenster*, state.id=*.State]'); .... fensterZustand.on(function(obj) { lueftung(obj); });
Geht das "irgendwie" :oops: oder
muss ich einen Trigger "händisch" für jedes Fenster aufsetzen oder
kann ich das mit einer Schleife über alle Objekte machen und dann - wenn der Name "Fenster" enthält, einen trigger dynamisch einrichten, der bei Änderung des "State" aufgerufen wird
Danke!
Georg
-
Das müsste schon gehen.
Ich habe mal was in der Art für alle Storen zusammengestrickt.
Storen alle hoch: createState("javascript.0.vis.Storen.hoch", false); on({id: "javascript.0.Storen.hoch"/*javascript.0.vis.Storen.hoch*/}, function(obj){ var cacheSelector = $('channel{TYPE=BLIND}[state.id=*.LEVEL]'); // Get all shutter of Homematic log("Script - Storen alle hoch läuft", 'info'); cacheSelector.each(function (id, i) { setState(id, 100); }); });
Jetzt müsste man eben wissen, in wieweit Deine Fenster gruppiert sind. Z.B. über die Enumerationen. Dann müsste das anzupaasen sein
-
ich häng direkt die nächste Frage dran :oops: : Wie müsste eine Schleife über alle Objekte eines Raums aussehen ?
-
Das geht dann in die Richtung: http://forum.iobroker.net/viewtopic.php … oms#p10395
Oder das ev...````
var cacheSelectorState = $('channelstate.id=*.STATE'); // Gewerk Licht -
@ykuendig: danke -das schaue ich mir mal an
-
das hat mir schon mal sehr weitergeholfen - danke.
Nächste Herausforderung :
Das Funktioniert leider nicht - ich kann nicht auf "name" - filtern
var fensterObjekte = $('channel[state.id=*.STATE](name=SZOG_Fenster)').each(function(id) { log(id); });
während das hier funktionieren würde
var fensterObjekte = $('channel[state.id=*.STATE](functions=Lueftung)').each(function(id) { log(id); });
Ich kann jetzt allen Fenstern die Funktion "Lueftung" hinzufügen und schon sollte es passen. Aber ich würde schon noch gerne wissen, was ich bei "(name=SZOG_Fenster")" falsch mache. Ich habs auch mit "Fenster" versucht - immer keine Ausgabe
-
Hast Du es mal mit eckigen Klammern versucht ?
var fensterObjekte = $('channel[state.id=*.STATE][name=SZOG_Fenster]').each(function(id) { log(id); });
-
@paul53: hatte ich nicht versucht - funktioniert aber auch nicht
-
Da weiss ich auch zuwenig.
Müsste uns @Bluefox mal mitteilen, ob im Channel Filter überhaupt nach Namen gesucht werden kann?
-
ich heb mich mal nach "oben"