NEWS
Liste von Geräte IDs die einen bestimmten Status haben
-
Hallo zusammen,
ich benötige für die Darstellung in VIS alle Lampen die An sind oder z.b. alle Fenster/ Türen die auf sind.
Mein erste Idee wäre es jetzt mir ein Array zu bauen mit allen IDs dieses dann zu iterieren und auf den Status "true" zu prüfen.
Das Ergebnis steht dann in einem weiteren Array.
Beispiel:
`// Alle IDs von Lichtquellen var allLights = [ "hm-rpc.1.NEQ0891467.13.STATE"/*Keller_Licht_Treppe_und_Flur:13.STATE*/, "hm-rpc.1.NEQ0891467.14.STATE"/*Keller_Licht_Technikraum:14.STATE*/, "hm-rpc.1.NEQ0891467.15.STATE"/*Keller_Licht_Werkstatt_Waescheraum:15.STATE*/, "hm-rpc.1.NEQ0891467.16.STATE"/*Buero_Licht:16.STATE*/ ]; var lightsOn = []; for (i = 0; i < allLights.length; i++) { if (getState(allLights[i]).val === true) { lightsOn.push(allLights[i]); console.log(allLights[i]); } }` Dazu habe ich die eine oder andere Frage ;) Muss ich die IDs in einer Liste pflegen oder gibt es so was wie "gibMirAlleIdsAusDemGewerkLicht()"? Das wäre ja quasi einfacher, aber ein Taster gehört ja auch zum Gewerk Licht. Das Array "lightsOn" soll immer dann aktualisiert werden wenn sich irgendein Status verändert. Wie mache ich das am geschicktesten? Mein Ziel ist es im Vis später das Array "lightsOn" zu iterieren um eine Liste aller Lampen zu erstellen die an sind.[/i][/i][/i]
-
Hallo,
gibt ein Zahl der Lichter Skript: http://forum.iobroker.net/viewtopic.php … 48&#p41673
Genauso gibt es auch noch ein Fenster Skript.
Es funktioniert über die Abfrage aller States eines bestimmten Typs innerhalb eines Gewerks (z B Lichter oder Verschluss).
Gruß
Pix
-
Muss ich die IDs in einer Liste pflegen oder gibt es so was wie "gibMirAlleIdsAusDemGewerkLicht()"? Das wäre ja quasi einfacher, aber ein Taster gehört ja auch zum Gewerk Licht. `
Schau mal hier: https://github.com/iobroker/iobroker.ja ... --selector
Der $-Selektor erlaubt dir, eine große Anzahl an States nach bestimmten Kriterien zu filtern.
Dann kannst du:
-
mit der each-Funktion für jeden State eine gewisse Aktion durchzuführen
-
mit der on-Funktion auf Änderungen lauschen
-
-
Ich bin leider erst jetzt wieder dazu gekommen mal was zu machen, aber leider habe ich wohl ein JS Verständnis Problem.
Warum kann ich so was wie:
var allLights = [ { id: "hm-rpc.1.NEQ0891467.13.STATE"/*Keller_Licht_Treppe_und_Flur:13.STATE*/, displayName: "Keller Flur"}, { id: "hm-rpc.1.NEQ0891467.14.STATE"/*Keller_Licht_Technikraum:14.STATE*/, displayName: "Keller Technikraum"}, { id: "hm-rpc.1.NEQ0891467.15.STATE"/*Keller_Licht_Werkstatt_Waescheraum:15.STATE*/, displayName: "Keller Werkstatt"}, { id: "hm-rpc.1.NEQ0891467.16.STATE"/*Buero_Licht:16.STATE*/, displayName: "Büro"} ];
Nicht mit .each durchlaufen. Oder mit .on einen trigger drauf legen?
Wenn man aber z.b. einen Selector nutzt wie:
$('channel[state.id=*.STATE](functions="funcLight")');
funktioniert es.
Anders gefragt, was ist der Unterschied zwischen den beiden Objekten und wie sollte ich am besten "allLights" definieren so das es funktioniert.
-
Ich habe jetzt einen anderen Weg eingeschlagen und den Code im Link von pix umgebaut.
Jetzt habe ich ein JSON:
[{"id":"hm-rpc.1.NEQ0891532.13.STATE","displayName":"Wohnzimmer"},{"id":"hm-rpc.1.NEQ0891532.17.STATE","displayName":"Küche"}]
Ich überlege, wie ich das jetzt in Vis darstellen könnte.
Im Grunde möchte ich eine Liste bauen welche eine Lampe und den Namen darstellt.
Die Objekt ID soll gleich gesetzt sein, damit man diese halt auch schalten kann.