NEWS
2. HUE Bridge
-
Hallo ich habe mein Skript damals mit diesem Skript erstellt und es lief auch ohne Probleme sehr zuverlässig.
/* Status Zahl Lichter zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich Daten kommen vom Gewerk "Licht" */ const logging = true; const idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein', idAnzahl = 'javascript.0.Status.Lichter.Anzahl', idText = 'javascript.0.Status.Lichter.Text', idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU idAnsage = 'javascript.0.Status.Lichter.Ansage'; // Ab hier nix mehr ändern createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter type: 'number', name: 'Anzahl aller Lichter', min: 0, def: 0, role: 'value' }); createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen type: 'number', name: 'Anzahl der eingeschalteten Lichter', min: 0, def: 0, role: 'value' }); createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen type: 'string', name: 'Eingeschaltete Lichter', desc: 'Namen der eingeschalteten Lichter', def: ' ', role: 'value' }); createState(idAnsage, { type: 'string', name: 'Eingeschaltete Lichter (Ansage)', desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)', def: ' ', role: 'value' }); createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU type: 'string', name: 'Räume mit eingeschalteten Lichter', desc: 'Namen der Räume, in denen Lichter eingeschaltet sind', def: ' ', role: 'value' }); // HM Schalter, HM Dimmer und Hue Schalter im Gewerk Licht const hmSTATE = $('channel[state.id=*.STATE](functions=Licht)'); const hmLEVEL = $('channel[state.id=*.LEVEL](functions=Licht)'); const hueon = $('state[id=*.on](functions=Licht)[role=switch.light]'); var anzahlLichterAn, anzahlLichter, textLichterAn, textRaum; function checkLicht(id, vorn, hinten) { var name = getObject(id).common.name; var devicename = name.substring(vorn, name.indexOf(hinten)); //Zeichen vorn, State hinten aus Text entfernen var raum = getObject(id, "rooms").enumNames[0]; if (getState(id).val) { // wenn Zustand != false / 0, dann wird die Anzahl der Lichter hochgezählt ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen if(textRaum.indexOf(raum) == -1) textRaum.push(raum); // zu Array hinzu, wenn noch nicht vorhanden } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status } function checkDevices() { // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0 anzahlLichterAn = 0; anzahlLichter = 0; textLichterAn = []; textRaum = []; hmSTATE.each(function(id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht checkLicht(id, 0, '.STATE'); }); hueon.each(function(id, i) { // Schleife für jedes gefundenen Element *.on im Gewerk Licht checkLicht(id, 6, '.on'); }); hmLEVEL.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht checkLicht(id, 0, '.LEVEL'); }); // Array mit Lichternamen sortieren textLichterAn.sort(); textRaum.sort(); // <---- NEU // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben if (logging) log("Text: " + textLichterAn); if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn); // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) //setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht // setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU } // Trigger hmSTATE.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); hueon.on(function(obj) { // bei Zustandänderung *.on von HUE Lampen im Gewerk Licht if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); hmLEVEL.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); // Skriptstart setTimeout(function() { if (logging) log('Auslöser Skriptstart'); checkDevices(); }, 500); // Aufbereitung für Ansage function strip_tags(data) { var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " "); return (rueckgabe); } on(idText, function(obj) { var text = obj.state.val; text = (getState(idAnzahl).val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet'; setState(idAnsage, text); });
Nun habe ich allerdings die maximale Lampenanzahl erreicht und musste eine 2 Bridge aktivieren.
Meine erste Bridge hat den Namen "Feist"
Diesen Namen habe ich durch die Zeilen:var name = getObject(id).common.name; var devicename = name.substring(vorn, name.indexOf(hinten)); //Zeichen vorn, State hinten aus Text entfernen
löschen können.
Somit werden mir diese nicht mehr in der Auflistung der aktiven Lampen angezeigtNun habe ich wie schon erwähnt, eine 2. Bridge.
Diese hat den Namen "Feist2"Die Namen, die mit dieser Bridge verbunden sind, werden auch gekürzt, allerdings befindet sich hier nun eine weitere Zahl "Feist2"
Nun bekomme ich vor jedem Namen der Lampe, welche mit dieser Bridge verbunden ist ein "." also ".Deckenbeleuchtung"
Kann mir jemand sagen, wie ich dies gelöst bekomme?
Zudem habe ich noch ein Problem.
Ich bekomme es nicht hin, dass mir der Raum der Lampe, welche mit der 2. Bridge gekoppelt ist, angezeigt wird.Stattdessen wird mir dass ganze so angezeigt:
Eingangsbereich, Flur, Garten, Küche, Wohnzimmer, [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object],
die "object Object" sind die wahrscheinlich die Lampen, die ich unter "Aufzählungen" in den Raum "Büro" gelegt habe.
zudem habe ich die Lampen auch in "LICHT" unter Aufzählungen gelegt.Hat jemand eine Idee, wie ich meine Probleme lösen kann?
Gruß
Marcus -
So, ich habe das erste Problem mit den Namen .Deckenlampe selber lösen können, indem ich die 2 Bridge den Namen der ersten Bridge genommen habe.
Hatte beim einrichten gedacht, dass es vielleicht Probleme gebe könnte, läuft aber.Somit werden mir nun die Namen der eingeschalteten Lampen auch für die 2. Bridge richtig angezeigt / aufgelistet.
Das 2. Problem besteht allerdings weiter.
Statt dem Raumnamen "Büro" wird mir für jede Lampe in dem Raum nur Object object angezeigt.Hier scheint etwas mit der Zuordnung nicht zu stimmen.
Kann mir vielleicht jemand kurz sagen, was ich machen muss um hier den Raumnamen richtig darstellen zu können?
Es sieht so aus, als wenn der Raum Büro nicht richtig gelesen wird. -
Kann man hier nicht mehr editieren?
wie weise ich den Lampen den richtigen Raum zu?
Ich glaube ich hatte den Raum "Büro" neu erstellt und dann die Lampen diesem Raum "Status=on" zugewiesen.
Muss ich da vielleicht noch etwas machen / anders machen?Danke für die Hilfe
-
@Xanon sagte in 2. HUE Bridge:
object Object
lass dir doch im Log das Object ausgeben.. dann siehst du den Aufbau und was drinn steht
-
@arteck
Ok Danke
Schaue ich mir heute Abend mal an.