Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Script Lichterzählen -> Verständnisfrage

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Script Lichterzählen -> Verständnisfrage

Scheduled Pinned Locked Moved JavaScript
6 Posts 2 Posters 377 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • malorossM Offline
    malorossM Offline
    maloross
    wrote on last edited by
    #1

    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?

    Auch Frauen können sich für Technik begeistern! ;)

    Equipment:
    diverse HM-, HMIP-, Aeotec- Tradfri- Sonos- und Fibaro-Geräte, Master-/Slavesystem auf 2 Raspi4, NAS

    paul53P 1 Reply Last reply
    0
    • malorossM maloross

      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?

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #2

      @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;
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      malorossM 1 Reply Last reply
      0
      • paul53P 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;
        
        malorossM Offline
        malorossM Offline
        maloross
        wrote on last edited by
        #3

        @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?

        Auch Frauen können sich für Technik begeistern! ;)

        Equipment:
        diverse HM-, HMIP-, Aeotec- Tradfri- Sonos- und Fibaro-Geräte, Master-/Slavesystem auf 2 Raspi4, NAS

        paul53P 1 Reply Last reply
        0
        • malorossM maloross

          @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?

          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          @maloross sagte:

          was genau bewirkt die 2. Zeile?

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

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          malorossM 1 Reply Last reply
          0
          • paul53P paul53

            @maloross sagte:

            was genau bewirkt die 2. Zeile?

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

            malorossM Offline
            malorossM Offline
            maloross
            wrote on last edited by
            #5

            @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?

            Auch Frauen können sich für Technik begeistern! ;)

            Equipment:
            diverse HM-, HMIP-, Aeotec- Tradfri- Sonos- und Fibaro-Geräte, Master-/Slavesystem auf 2 Raspi4, NAS

            paul53P 1 Reply Last reply
            0
            • malorossM maloross

              @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?

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #6

              @maloross sagte:

              Mehrfach-Werte herausfiltern.

                          if(textRaum.indexOf(raumname) == -1) textRaum.push(raumname);
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              414

              Online

              32.4k

              Users

              81.4k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe