Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  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.6k

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

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

Script Lichterzählen -> Verständnisfrage

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 2 Kommentatoren 384 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • malorossM Offline
    malorossM Offline
    maloross
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              779

              Online

              32.4k

              Benutzer

              81.5k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe