Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Script Lichterzählen -> Verständnisfrage

    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

    Script Lichterzählen -> Verständnisfrage

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

      Guten Abend,
      ich nutze wie viele hier ein Script ("Lichterzählen"), das ich an meine Bedürfnisse angepasst habe. Dies funktioniert bis auf 2 Kleinigkeiten:

      1. Die Räume werden nicht ausgegeben
      2. Der für die Ansage aufbereitete Text wird nicht ausgegeben.

      Punkt 2 ist mir nicht wichtig, aber die Räume hätte ich gern angezeigt. Und als Anfängerin möchte ich lernen, wie die Zusammenhänge sind.

      Hier ein Auszug aus meinem angepassten Script mit den meiner Meinung nach relevanten Stellen:

      // Schleife Tradfri   
      if (logging) log('#### Tradfri ##### ');
      cacheSelectorTradfri.each(function(id, i) {
              var obj = getObject(id);
              var name = getObject(id).common.name;
              var status = getState(id).val;
              var devicename = name.replace(".state", "");
              var raumname = getObject(id, "rooms");
              if (logging) {
                  log('-------');
                  log('Kanal: ' + name);
                  log('Status: ' + status);
              }
              if (status) {
                  ++anzahlLichterAn;
                  textLichterAn.push(devicename);
                  textRaum.push(raumname);
              }
              ++anzahlLichter;
          });
      .
      .
      .
      // Array mit Lichternamen sortieren, aufbereiten, Ausgabe in DP
      textLichterAn.sort();
      textRaum.sort();
      if (logging) log("Text: " + textLichterAn);
      if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
      setState(pfad0 + 'Text', textLichterAn.join('<br>'));
      setState(pfad0 + 'Anzahl_Lichter_ein', textLichterAn.length); 
      setState(pfad0 + 'Anzahl_Lichter_gesamt', anzahlLichter); 
      setState(pfad0 + 'Raum', textRaum.join(', '));
      if(anzahlLichterAn > 0){
              setState(instanz + pfad0 + 'Status_Lichter', true);
              setState(instanz + pfad0 + "Status_Lichter_Zeitstempel", zeitstempel);
          }
          else{
              setState(instanz + pfad0 + 'Status_Lichter', false);
              setState(instanz + pfad0 + "Status_Lichter_Zeitstempel", zeitstempel);
          }
      }
      

      Die Datenpunkte werden, bis auf die beiden genannten, korrekt befüllt, was so aussieht:
      65d267ba-7221-4f16-8326-9432dee4290e-image.png

      Nach meinem Verständnis sind die Befehle zum Auslesen des Raumes korrekt, auch die Geräte haben in der Objektliste korrekte Zuordnungen. Aber da es nicht funktioniert - wo liegt mein Denkfehler?

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @maloross last edited by paul53

        @maloross sagte:

        Die Räume werden nicht ausgegeben

        Ändere mal Zeile 8 in

                var raumname = getObject(id, "rooms").enumNames[0];
                if(typeof raumname == 'object') raumname = raumname.de;
        
        maloross 1 Reply Last reply Reply Quote 0
        • maloross
          maloross @paul53 last edited by

          @paul53
          Vielen Dank, damit wird der Datenpunkt auch korrekt befüllt, obwohl bei Mouseover folgendes angezeigt wird:
          b69f3054-8d07-4756-8f44-a38ba5a70f82-image.png

          und was genau bewirkt die 2. Zeile?

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @maloross last edited by

            @maloross sagte:

            was genau bewirkt die 2. Zeile?

            Wenn der Name mehrsprachig ist (neuere Versionen des JS-Adapters), wird der deutsche Name ausgewählt.

            maloross 1 Reply Last reply Reply Quote 0
            • maloross
              maloross @paul53 last edited by

              @paul53
              danke, so in die Richtung hatte ich schon gedacht.

              Was jetzt noch fein wäre: Mehrfach-Werte herausfiltern. Hatte dies erfolglos probiert

              Array.prototype.getUnique = function() {
               var o = {}, a = [], i, e;
               for (i = 0; e = this[i]; i++) {o[e] = 1};
               for (e in o) {a.push (e)};
               return a;
              }
              

              Ich vermute, es handelt sich hier um ein mehr-/multidimensionales Array?

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @maloross last edited by

                @maloross sagte:

                Mehrfach-Werte herausfiltern.

                            if(textRaum.indexOf(raumname) == -1) textRaum.push(raumname);
                
                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                404
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                2
                6
                281
                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