Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. 2. HUE Bridge

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    2. HUE Bridge

    This topic has been deleted. Only users with topic management privileges can see it.
    • X
      Xanon last edited by

      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 angezeigt

      Nun 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

      1 Reply Last reply Reply Quote 0
      • X
        Xanon last edited by

        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.

        1 Reply Last reply Reply Quote 0
        • X
          Xanon last edited by

          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

          1 Reply Last reply Reply Quote 0
          • arteck
            arteck Developer Most Active last edited by

            @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

            X 1 Reply Last reply Reply Quote 0
            • X
              Xanon @arteck last edited by

              @arteck
              Ok Danke
              Schaue ich mir heute Abend mal an.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              384
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              2
              5
              295
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo