Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Erledigt] Skript Lichtzählen [..] angezeigt

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.7k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

[Erledigt] Skript Lichtzählen [..] angezeigt

Scheduled Pinned Locked Moved JavaScript
javascript
23 Posts 5 Posters 1.9k Views 5 Watching
  • 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.
  • T Tictactoo

    @maloross Ist das deine komplettes Skirpt?

    Was mir jetzt auf die schnelle auffällt ist, dass in deinem Code für if(logging) Bedingung keine log für den Raum drin ist, sondern der Array nur unten bei is(status) in deine Variable textRaum gepusht wird. Da innerhalb des geposteten Skripts damit allerdings nicht gearbeitet wird, ist schwer zu sagen, was genau da nicht richtig läuft.

    Du könnntest btw auch die substring Methode durch ".replace(".STATE", "")" ersetzen, dann musst du nicht mit den Positionen der Chars arbeiten.

    In deinem Tradfri-Teil sieht es an sich erstmal net falsch aus, allerdings ist auch hier schwer zu sagen was falsch sein könnte, weil man anhand deines Codes nicht sieht, welche Variablen er überhaupt reingibt.

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

    @Tictactoo danke für die Rückmeldung, das ist nur ein Auszug, hier das komplette. Gezählt wird korrekt, lediglich die Textausgabe von Name des Gerätes und Raum bleibt leer.

    //Licht - Abfrage und Schaltung
    //----------------------------------------
    // allgemeine Variablen
    var logging = true;  // Logging on/off
    var debug = true;  // Debug on/off
    var instanz = 'javascript.0';   instanz = instanz + '.'; 
    var pfad0 =   'Licht';      pfad0 = pfad0 + '.';        
    
    //Selektoren für die jeweiligen herstellerspezifischen Status + Zeit
    var cacheSelectorHomematic =    $('[id=*.STATE](functions="light")');
    var cacheSelectorLevel =    $('[id=*.Instance_1:_Level_1](functions="light")');
    var cacheSelectorTradfri =   $('[id=*.state](functions="light")');
    var cacheSelectorZwave1 = $('[id=*.Instance_1:_Switch_1](functions="light")');
    var cacheSelectorZwave2 = $('[id=*.Instance_2:_Switch_2](functions="light")');  
    var time;
    
    //Lichtautomatik 
    var timer = [];
    var GeraeteListe = [];
    
    // Objekte "Zwischenlagerung"
    // Objekt: Zeigt den Status der Beleuchtung (irgendein Licht an?)
    createState(pfad0 + 'Status_Lichter',  {def:'false', type:'boolean', name:'Status Beleuchtung',});
    // Objekt: Zeitstempel letzte Änderung
    createState(pfad0 + 'Status_Lichter_Zeitstempel',  {def:'', type:'string', name:'Zeitstempel Beleuchtung_',});
    // Objekt: Schalte alle Lichter in Abhängigkeit des Status ein oder aus
    createState(pfad0 + 'Schalter_Lichter',  {def:'false', type: 'boolean',name: 'Schalter Beleuchtung',desc: 'Schaltet alle Lichter aus oder wenn alles aus ein'});
    // Objekt: Anzahl der vorhandenen Lichter
    createState(pfad0 + 'Anzahl_Lichter_gesamt', {def:0, min:0, type:'number', name: 'Anzahl aller Lichter'});
    // Objekt: Anzahl der eingeschalteten Lichter
    createState(pfad0 + 'Anzahl_Lichter_ein', {def: 0,min: 0, type:'number', name:'Anzahl der eingeschalteten Lichter'});
    // Objekt: Mit den Namen der eingeschalteten Lichter
    createState(pfad0 + 'Text', {def:' ', type:'string', name: 'Eingeschaltete Lichter'});
    // Objekt: Ansage für Sprachausgabe
    createState(pfad0 + 'Ansage', {def:' ', type:'string', name: 'Eingeschaltete Lichter (für Ansage aufbereitet)'});
    // Objekt: Liste der Räume mit eingeschalteten Lichtern
    createState(pfad0 + 'Raum', {def:' ', type: 'string', name: 'Räume mit eingeschalteten Lichter'});
    
    // Funktionen
    // Allgemein
    function checkDevices(obj) {
    var datum = formatDate(new Date(getState("javascript.0.Licht.Anzahl_Lichter_ein").lc), 'DD.MM.YY');
    var uhrzeit = formatDate(new Date(getState("javascript.0.Licht.Anzahl_Lichter_ein").lc), 'hh:mm');
    var zeitstempel = datum +' um '+uhrzeit;
       
    // Rücksetzung aller Zähler auf 0 bzw. leer
       var anzahlLichterAn = 0;
       var anzahlLichter = 0;
       var textLichterAn = [];
       var textRaum = [];
       if (logging) {
       log('++++++ Lichter Anzahl ++++ ');
       log('#### SCHALTER ##### ');
       }
    
    //Schleifen zur Datenerfassung
    // Schleife Homematic 
    if (logging) log('#### Homematic ##### ');
    cacheSelectorHomematic.each(function(id, i) {
           var obj = getObject(id);
           var name = getObject(id).common.name;
           var status = getState(id).val; 
           var devicename = name.substring(0, name.indexOf(".STATE"));
           var raumname = getObject(id, "rooms");
    
           if (logging) {
               log('-------');
               log('Kanal: ' + name);
               log('Status: ' + status);
           }
           if (status) {
               ++anzahlLichterAn;
               textLichterAn.push(devicename);
               textRaum.push(raumname.enumNames);
           }
           ++anzahlLichter; 
       });
    
    // Schleife Dimmer  
    if (logging) log('#### DIMMER ##### ');
       cacheSelectorLevel.each(function(id, i) {
           var obj = getObject(id);
           var name = getObject(id).common.name;
           var status = getState(id).val;
           var devicename = name.substring(0, name.indexOf(".Instance_1:_Level_1"));
           var raumname = getObject(id, "rooms");
           if (logging) {
               log('-------');
               log('Kanal: ' + name);
               log('Status: ' + status + '%');
           }
           if (parseFloat(status) > 0) {
               ++anzahlLichterAn;
               textLichterAn.push(devicename);
               textRaum.push(raumname.enumNames);
           }
           ++anzahlLichter;
       });
    
    // 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.substring(0, name.indexOf(".state"));
           var raumname = getObject(id, "rooms"); 
           if (logging) {
               log('-------');
               log('Kanal: ' + name);
               log('Status: ' + status);
           }
           if (status) {
               ++anzahlLichterAn;
               textLichterAn.push(devicename);
               textRaum.push(raumname.enumNames);
           }
           ++anzahlLichter;
       });
    
    // Schleife Zwave 1
    if (logging) log('#### Zwave1 ##### ');
    cacheSelectorZwave1.each(function(id, i) {
           var obj = getObject(id);
           var name = getObject(id).common.name;
           var status = getState(id).val;
           var devicename = name.substring(0, name.indexOf(".Instance_1:_Switch_1"));
           var raumname = getObject(id, "rooms");
          if (logging) {
               log('-------');
               log('Kanal: ' + name);
               log('Status: ' + status);
           }
           if (status) {
               ++anzahlLichterAn;
               textLichterAn.push(devicename);
               textRaum.push(raumname.enumNames);
           }
           ++anzahlLichter;
       });
    
    // Schleife Zwave 2
    if (logging) log('#### Zwave2 ##### ');
    cacheSelectorZwave2.each(function(id, i) {
           var obj = getObject(id);
           var name = getObject(id).common.name;
           var status = getState(id).val;
           var devicename = name.substring(0, name.indexOf(".Instance_2:_Switch_2"));
           var raumname = getObject(id, "rooms");
          if (logging) {
               log('-------');
               log('Kanal: ' + name);
               log('Status: ' + status);
           }
           if (status) {
               ++anzahlLichterAn;
               textLichterAn.push(devicename);
               textRaum.push(raumname.enumNames);
           }
           ++anzahlLichter;
       });
       
    //Datenaufbereitung
    // 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);
       }
    }
    
    // Schaltungsfunktion
    function switchDevices(dp) {
       cacheSelectorHomematic.each(function(id, i) {
           var status = getState(id).val;
         if(dp){
               if(!status) setState(id, true);
           }
           else{
               if(status)setState(id, false);
           }
       });
      cacheSelectorLevel.each(function(id, i) {
           var status = getState(id).val;
           if(dp){
               if(parseFloat(status) === 0) setState(id, 20);
           }
           else{
               if(parseFloat(status) > 0) setState(id, 0);
           }
       });
    cacheSelectorTradfri.each(function(id, i) {
           var status = getState(id).val; 
         if(dp){
               if(!status) setState(id, true);
           }
           else{
               if(status)setState(id, false);
           }
       });
       
       cacheSelectorZwave1.each(function(id, i) {
           var status = getState(id).val;
         if(dp){
               if(!status) setState(id, true);
           }
           else{
               if(status)setState(id, false);
           }
       });
    
    cacheSelectorZwave2.each(function(id, i) {
           var status = getState(id).val;
         if(dp){
               if(!status) setState(id, true);
           }
           else{
               if(status)setState(id, false);
           }
       });
    }
    
    // Trigger
    cacheSelectorHomematic.on(function(obj) {
       if (logging) log('Auslösende Homematic: ' + obj.id + ': ' + obj.state.val);
       checkDevices();
    });
    cacheSelectorTradfri.on(function(obj) {
       if (logging) log('Auslösender Tradfri: ' + obj.id + ': ' + obj.state.val); 
       checkDevices();
    });
    cacheSelectorLevel.on(function(obj) {
       if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); 
       checkDevices();
    });
    cacheSelectorZwave1.on(function(obj) {
       if (logging) log('Auslösender Zwave1: ' + obj.id + ': ' + obj.state.val); 
       checkDevices();
    });
    cacheSelectorZwave2.on(function(obj) {
       if (logging) log('Auslösender Zwave2: ' + obj.id + ': ' + obj.state.val); 
       checkDevices();
    });
    
    // Hauptfunktion 
    function main() {
       setTimeout(function() {
           if (logging) log('Auslöser Skriptstart');
           checkDevices();
       }, 2000);
    }
    main();
    
    // Aufbereitung für Ansage
    function strip_tags(data) {
       var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
       return (rueckgabe);
    }
    on(pfad0 + 'Text', function(obj) {
       var text = obj.state.val;
       text = (getState(pfad0 + 'Anzahl_Lichter_gesamt').val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
       setState(pfad0 + 'Ansage', text);
    });
    
    // Schaltungsfunktion
    on("javascript.0.Licht.Schalter_Lichter", function(dp) { 
         if(getState("javascript.0.Licht.Status_Lichter").val){
          switchDevices(false);
       }  
       else{
           switchDevices(true);
       }
    });
    
    
    

    EDIT: In der Debug-Ausgabe von javascript werden die Namen aller Geräte korrekt angezeigt, Räume fehlen auch hier.

    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

    C 1 Reply Last reply
    0
    • malorossM maloross

      @Tictactoo danke für die Rückmeldung, das ist nur ein Auszug, hier das komplette. Gezählt wird korrekt, lediglich die Textausgabe von Name des Gerätes und Raum bleibt leer.

      //Licht - Abfrage und Schaltung
      //----------------------------------------
      // allgemeine Variablen
      var logging = true;  // Logging on/off
      var debug = true;  // Debug on/off
      var instanz = 'javascript.0';   instanz = instanz + '.'; 
      var pfad0 =   'Licht';      pfad0 = pfad0 + '.';        
      
      //Selektoren für die jeweiligen herstellerspezifischen Status + Zeit
      var cacheSelectorHomematic =    $('[id=*.STATE](functions="light")');
      var cacheSelectorLevel =    $('[id=*.Instance_1:_Level_1](functions="light")');
      var cacheSelectorTradfri =   $('[id=*.state](functions="light")');
      var cacheSelectorZwave1 = $('[id=*.Instance_1:_Switch_1](functions="light")');
      var cacheSelectorZwave2 = $('[id=*.Instance_2:_Switch_2](functions="light")');  
      var time;
      
      //Lichtautomatik 
      var timer = [];
      var GeraeteListe = [];
      
      // Objekte "Zwischenlagerung"
      // Objekt: Zeigt den Status der Beleuchtung (irgendein Licht an?)
      createState(pfad0 + 'Status_Lichter',  {def:'false', type:'boolean', name:'Status Beleuchtung',});
      // Objekt: Zeitstempel letzte Änderung
      createState(pfad0 + 'Status_Lichter_Zeitstempel',  {def:'', type:'string', name:'Zeitstempel Beleuchtung_',});
      // Objekt: Schalte alle Lichter in Abhängigkeit des Status ein oder aus
      createState(pfad0 + 'Schalter_Lichter',  {def:'false', type: 'boolean',name: 'Schalter Beleuchtung',desc: 'Schaltet alle Lichter aus oder wenn alles aus ein'});
      // Objekt: Anzahl der vorhandenen Lichter
      createState(pfad0 + 'Anzahl_Lichter_gesamt', {def:0, min:0, type:'number', name: 'Anzahl aller Lichter'});
      // Objekt: Anzahl der eingeschalteten Lichter
      createState(pfad0 + 'Anzahl_Lichter_ein', {def: 0,min: 0, type:'number', name:'Anzahl der eingeschalteten Lichter'});
      // Objekt: Mit den Namen der eingeschalteten Lichter
      createState(pfad0 + 'Text', {def:' ', type:'string', name: 'Eingeschaltete Lichter'});
      // Objekt: Ansage für Sprachausgabe
      createState(pfad0 + 'Ansage', {def:' ', type:'string', name: 'Eingeschaltete Lichter (für Ansage aufbereitet)'});
      // Objekt: Liste der Räume mit eingeschalteten Lichtern
      createState(pfad0 + 'Raum', {def:' ', type: 'string', name: 'Räume mit eingeschalteten Lichter'});
      
      // Funktionen
      // Allgemein
      function checkDevices(obj) {
      var datum = formatDate(new Date(getState("javascript.0.Licht.Anzahl_Lichter_ein").lc), 'DD.MM.YY');
      var uhrzeit = formatDate(new Date(getState("javascript.0.Licht.Anzahl_Lichter_ein").lc), 'hh:mm');
      var zeitstempel = datum +' um '+uhrzeit;
         
      // Rücksetzung aller Zähler auf 0 bzw. leer
         var anzahlLichterAn = 0;
         var anzahlLichter = 0;
         var textLichterAn = [];
         var textRaum = [];
         if (logging) {
         log('++++++ Lichter Anzahl ++++ ');
         log('#### SCHALTER ##### ');
         }
      
      //Schleifen zur Datenerfassung
      // Schleife Homematic 
      if (logging) log('#### Homematic ##### ');
      cacheSelectorHomematic.each(function(id, i) {
             var obj = getObject(id);
             var name = getObject(id).common.name;
             var status = getState(id).val; 
             var devicename = name.substring(0, name.indexOf(".STATE"));
             var raumname = getObject(id, "rooms");
      
             if (logging) {
                 log('-------');
                 log('Kanal: ' + name);
                 log('Status: ' + status);
             }
             if (status) {
                 ++anzahlLichterAn;
                 textLichterAn.push(devicename);
                 textRaum.push(raumname.enumNames);
             }
             ++anzahlLichter; 
         });
      
      // Schleife Dimmer  
      if (logging) log('#### DIMMER ##### ');
         cacheSelectorLevel.each(function(id, i) {
             var obj = getObject(id);
             var name = getObject(id).common.name;
             var status = getState(id).val;
             var devicename = name.substring(0, name.indexOf(".Instance_1:_Level_1"));
             var raumname = getObject(id, "rooms");
             if (logging) {
                 log('-------');
                 log('Kanal: ' + name);
                 log('Status: ' + status + '%');
             }
             if (parseFloat(status) > 0) {
                 ++anzahlLichterAn;
                 textLichterAn.push(devicename);
                 textRaum.push(raumname.enumNames);
             }
             ++anzahlLichter;
         });
      
      // 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.substring(0, name.indexOf(".state"));
             var raumname = getObject(id, "rooms"); 
             if (logging) {
                 log('-------');
                 log('Kanal: ' + name);
                 log('Status: ' + status);
             }
             if (status) {
                 ++anzahlLichterAn;
                 textLichterAn.push(devicename);
                 textRaum.push(raumname.enumNames);
             }
             ++anzahlLichter;
         });
      
      // Schleife Zwave 1
      if (logging) log('#### Zwave1 ##### ');
      cacheSelectorZwave1.each(function(id, i) {
             var obj = getObject(id);
             var name = getObject(id).common.name;
             var status = getState(id).val;
             var devicename = name.substring(0, name.indexOf(".Instance_1:_Switch_1"));
             var raumname = getObject(id, "rooms");
            if (logging) {
                 log('-------');
                 log('Kanal: ' + name);
                 log('Status: ' + status);
             }
             if (status) {
                 ++anzahlLichterAn;
                 textLichterAn.push(devicename);
                 textRaum.push(raumname.enumNames);
             }
             ++anzahlLichter;
         });
      
      // Schleife Zwave 2
      if (logging) log('#### Zwave2 ##### ');
      cacheSelectorZwave2.each(function(id, i) {
             var obj = getObject(id);
             var name = getObject(id).common.name;
             var status = getState(id).val;
             var devicename = name.substring(0, name.indexOf(".Instance_2:_Switch_2"));
             var raumname = getObject(id, "rooms");
            if (logging) {
                 log('-------');
                 log('Kanal: ' + name);
                 log('Status: ' + status);
             }
             if (status) {
                 ++anzahlLichterAn;
                 textLichterAn.push(devicename);
                 textRaum.push(raumname.enumNames);
             }
             ++anzahlLichter;
         });
         
      //Datenaufbereitung
      // 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);
         }
      }
      
      // Schaltungsfunktion
      function switchDevices(dp) {
         cacheSelectorHomematic.each(function(id, i) {
             var status = getState(id).val;
           if(dp){
                 if(!status) setState(id, true);
             }
             else{
                 if(status)setState(id, false);
             }
         });
        cacheSelectorLevel.each(function(id, i) {
             var status = getState(id).val;
             if(dp){
                 if(parseFloat(status) === 0) setState(id, 20);
             }
             else{
                 if(parseFloat(status) > 0) setState(id, 0);
             }
         });
      cacheSelectorTradfri.each(function(id, i) {
             var status = getState(id).val; 
           if(dp){
                 if(!status) setState(id, true);
             }
             else{
                 if(status)setState(id, false);
             }
         });
         
         cacheSelectorZwave1.each(function(id, i) {
             var status = getState(id).val;
           if(dp){
                 if(!status) setState(id, true);
             }
             else{
                 if(status)setState(id, false);
             }
         });
      
      cacheSelectorZwave2.each(function(id, i) {
             var status = getState(id).val;
           if(dp){
                 if(!status) setState(id, true);
             }
             else{
                 if(status)setState(id, false);
             }
         });
      }
      
      // Trigger
      cacheSelectorHomematic.on(function(obj) {
         if (logging) log('Auslösende Homematic: ' + obj.id + ': ' + obj.state.val);
         checkDevices();
      });
      cacheSelectorTradfri.on(function(obj) {
         if (logging) log('Auslösender Tradfri: ' + obj.id + ': ' + obj.state.val); 
         checkDevices();
      });
      cacheSelectorLevel.on(function(obj) {
         if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); 
         checkDevices();
      });
      cacheSelectorZwave1.on(function(obj) {
         if (logging) log('Auslösender Zwave1: ' + obj.id + ': ' + obj.state.val); 
         checkDevices();
      });
      cacheSelectorZwave2.on(function(obj) {
         if (logging) log('Auslösender Zwave2: ' + obj.id + ': ' + obj.state.val); 
         checkDevices();
      });
      
      // Hauptfunktion 
      function main() {
         setTimeout(function() {
             if (logging) log('Auslöser Skriptstart');
             checkDevices();
         }, 2000);
      }
      main();
      
      // Aufbereitung für Ansage
      function strip_tags(data) {
         var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
         return (rueckgabe);
      }
      on(pfad0 + 'Text', function(obj) {
         var text = obj.state.val;
         text = (getState(pfad0 + 'Anzahl_Lichter_gesamt').val > 0) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter sind ausgeschaltet';
         setState(pfad0 + 'Ansage', text);
      });
      
      // Schaltungsfunktion
      on("javascript.0.Licht.Schalter_Lichter", function(dp) { 
           if(getState("javascript.0.Licht.Status_Lichter").val){
            switchDevices(false);
         }  
         else{
             switchDevices(true);
         }
      });
      
      
      

      EDIT: In der Debug-Ausgabe von javascript werden die Namen aller Geräte korrekt angezeigt, Räume fehlen auch hier.

      C Offline
      C Offline
      CruziX
      wrote on last edited by CruziX
      #4

      @maloross Ich habe nichts davon getestet, aber was mir hier bei den Räumen auffällt ist folgendes:
      In der Zeile

      textRaum.push(raumname.enumNames);
      

      Wird ein Array aus zugewiesenen Räumen zurückgegeben und in das Array textRaum gespeichert.

      Das heißt, an dieser Stelle hast du ein Array, in einem Array.

      In folgendem Code versuchst du nun die im Array "textRaum" befindlichen Arrays (enumNames) zu joinen.

      setState(pfad0 + 'Raum', textRaum.join(', '));
      

      Ich kenne mich mit JavaScript leider nicht so sehr aus, um zu wissen was an dieser stelle passiert und wie er das macht.
      Ich gehe davon aus, dass du immer nur einen Raum zugewiesen hast.
      versuch mal bitte die Zeile

      textRaum.push(raumname.enumNames);
      

      durch

      let raumArray = raumname.enumNames;
      if(raumArray.lenght > 0) {
      textRaum.push(raumArray[0]);
      }
      else{
      textRaum.push('');
      }
      

      zu ersetzen.

      1 Reply Last reply
      0
      • T Tictactoo

        @maloross Ist das deine komplettes Skirpt?

        Was mir jetzt auf die schnelle auffällt ist, dass in deinem Code für if(logging) Bedingung keine log für den Raum drin ist, sondern der Array nur unten bei is(status) in deine Variable textRaum gepusht wird. Da innerhalb des geposteten Skripts damit allerdings nicht gearbeitet wird, ist schwer zu sagen, was genau da nicht richtig läuft.

        Du könnntest btw auch die substring Methode durch ".replace(".STATE", "")" ersetzen, dann musst du nicht mit den Positionen der Chars arbeiten.

        In deinem Tradfri-Teil sieht es an sich erstmal net falsch aus, allerdings ist auch hier schwer zu sagen was falsch sein könnte, weil man anhand deines Codes nicht sieht, welche Variablen er überhaupt reingibt.

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

        @Tictactoo sagte in Skript Lichtzählen: Räume werden nicht angezeigt:

        Du könnntest btw auch die substring Methode durch ".replace(".STATE", "")"

        Danke für den Hinweis, damit ist Punkt 2 erledigt, denn alle Gerätenamen werden nun korrekt angezeigt.

        @CruziX Bin im Skripting noch in den Anfängen und lerne per trial and error. Habe es mit der von dir vorgeschlagenen Änderung versucht, aber ohne Erfolg.

        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

        C 1 Reply Last reply
        0
        • malorossM maloross

          @Tictactoo sagte in Skript Lichtzählen: Räume werden nicht angezeigt:

          Du könnntest btw auch die substring Methode durch ".replace(".STATE", "")"

          Danke für den Hinweis, damit ist Punkt 2 erledigt, denn alle Gerätenamen werden nun korrekt angezeigt.

          @CruziX Bin im Skripting noch in den Anfängen und lerne per trial and error. Habe es mit der von dir vorgeschlagenen Änderung versucht, aber ohne Erfolg.

          C Offline
          C Offline
          CruziX
          wrote on last edited by CruziX
          #6

          @maloross Ja, bin da auch noch Anfänger, daher ist es schwierig wenn man nicht selbst rumprobieren kann :)
          Kannst du mal mit einem log prüfen ob aus raumArray[0] das korrekte ausgelesen wird?

          malorossM 1 Reply Last reply
          0
          • C CruziX

            @maloross Ja, bin da auch noch Anfänger, daher ist es schwierig wenn man nicht selbst rumprobieren kann :)
            Kannst du mal mit einem log prüfen ob aus raumArray[0] das korrekte ausgelesen wird?

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

            @CruziX sagte

            @maloross Ja, bin da auch noch Anfänger, daher ist es schwierig wenn man nicht selbst rumprobieren kann :)
            Kannst du mal mit einem log prüfen ob aus raumArray[0] das korrekte ausgelesen wird?

            Nein kommt ein Fehler.

            von meiner Logik her ist es doch so, dass Gerätename und Raumname innerhalb der Schleife in gleicher Weise abgerufen werden sollten

            var devicename = name.replace(".state", "");
            var raumname = getObject(id, "rooms"); 
            
            if (status) {
                        ++anzahlLichterAn;
                        textLichterAn.push(devicename);
                        textRaum.push(raumname);
                    }
                    ++anzahlLichter;
                });
            

            Wobei die Variable devicename die bereinigte ID des Gerätes enthält.
            Das Array hat für diese beiden Variablen folgenden Befehle:

            textLichterAn.sort();
            textRaum.sort();
            
            setState(pfad0 + 'Text', textLichterAn.join('<br>'));
            setState(pfad0 + 'Raum', textRaum.join(', '));
            
            

            Aber der Raum wird nicht angezeigt., im Log steht: raum: [object Object]

            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

              @CruziX sagte

              @maloross Ja, bin da auch noch Anfänger, daher ist es schwierig wenn man nicht selbst rumprobieren kann :)
              Kannst du mal mit einem log prüfen ob aus raumArray[0] das korrekte ausgelesen wird?

              Nein kommt ein Fehler.

              von meiner Logik her ist es doch so, dass Gerätename und Raumname innerhalb der Schleife in gleicher Weise abgerufen werden sollten

              var devicename = name.replace(".state", "");
              var raumname = getObject(id, "rooms"); 
              
              if (status) {
                          ++anzahlLichterAn;
                          textLichterAn.push(devicename);
                          textRaum.push(raumname);
                      }
                      ++anzahlLichter;
                  });
              

              Wobei die Variable devicename die bereinigte ID des Gerätes enthält.
              Das Array hat für diese beiden Variablen folgenden Befehle:

              textLichterAn.sort();
              textRaum.sort();
              
              setState(pfad0 + 'Text', textLichterAn.join('<br>'));
              setState(pfad0 + 'Raum', textRaum.join(', '));
              
              

              Aber der Raum wird nicht angezeigt., im Log steht: raum: [object Object]

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

              @maloross sagte:

              var raumname = getObject(id, "rooms");

              Richtig:

              var raumname = getObject(id, "rooms").enumNames[0];
              

              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:

                var raumname = getObject(id, "rooms");

                Richtig:

                var raumname = getObject(id, "rooms").enumNames[0];
                
                malorossM Offline
                malorossM Offline
                maloross
                wrote on last edited by
                #9

                @paul53 hat auch keinen Erfolg....es gab Ende 2017 auf Github diesbezüglich ein Fehlermeldung, allerdings ohne konkreten Lösungsansatz.

                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

                C paul53P 2 Replies Last reply
                0
                • malorossM maloross

                  @paul53 hat auch keinen Erfolg....es gab Ende 2017 auf Github diesbezüglich ein Fehlermeldung, allerdings ohne konkreten Lösungsansatz.

                  C Offline
                  C Offline
                  CruziX
                  wrote on last edited by
                  #10

                  @maloross Ist ja auch so ziemlich das gleiche wie mein Code Schnipsel

                  malorossM 1 Reply Last reply
                  0
                  • malorossM maloross

                    @paul53 hat auch keinen Erfolg....es gab Ende 2017 auf Github diesbezüglich ein Fehlermeldung, allerdings ohne konkreten Lösungsansatz.

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

                    @maloross sagte:

                    hat auch keinen Erfolg..

                    Wie hast Du die Räume zugeordnet ? Welche Javascript-Version ?

                    Testscript.JPG

                    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

                    T 1 Reply Last reply
                    0
                    • C CruziX

                      @maloross Ist ja auch so ziemlich das gleiche wie mein Code Schnipsel

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

                      @CruziX ja, aber manchmal sind es Kleingkeiten, die Fehler verursachen...
                      ich habe die Räume erst mal rausgenommen.

                      @paul53 angelegt über Aufzählung, Zuordnung Objekte-Auswahl
                      Danke für eure Unterstützung..

                      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

                      1 Reply Last reply
                      0
                      • paul53P paul53

                        @maloross sagte:

                        hat auch keinen Erfolg..

                        Wie hast Du die Räume zugeordnet ? Welche Javascript-Version ?

                        Testscript.JPG

                        T Offline
                        T Offline
                        Tictactoo
                        wrote on last edited by
                        #13

                        @paul53
                        Ich hab die 4.3.4 am Laufen und bekomme es so auch nicht raus leider. Logge ich den Array enumNames, zeigt er mit zwar das JSON-Object darin an, wenn ich aber versuche mit .de auf den deutschen Namen zuzugreifen, sagt er das die Proberty nicht vorhanden wäre. Seltsam...

                        paul53P 1 Reply Last reply
                        0
                        • T Tictactoo

                          @paul53
                          Ich hab die 4.3.4 am Laufen und bekomme es so auch nicht raus leider. Logge ich den Array enumNames, zeigt er mit zwar das JSON-Object darin an, wenn ich aber versuche mit .de auf den deutschen Namen zuzugreifen, sagt er das die Proberty nicht vorhanden wäre. Seltsam...

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

                          @Tictactoo sagte:

                          zeigt er mit zwar das JSON-Object darin an, wenn ich aber versuche mit .de auf den deutschen Namen zuzugreifen, sagt er das die Proberty nicht vorhanden wäre.

                          Du hast getObject so verwendet ?

                          getObject(id, "rooms").enumNames[0].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

                          T 1 Reply Last reply
                          0
                          • paul53P paul53

                            @Tictactoo sagte:

                            zeigt er mit zwar das JSON-Object darin an, wenn ich aber versuche mit .de auf den deutschen Namen zuzugreifen, sagt er das die Proberty nicht vorhanden wäre.

                            Du hast getObject so verwendet ?

                            getObject(id, "rooms").enumNames[0].de;
                            
                            T Offline
                            T Offline
                            Tictactoo
                            wrote on last edited by
                            #15

                            @paul53 Ja, hab ich. Wie gesagt, wenn ich "getObject(id, "rooms").enumNames[0]" logge, zeigt er mir auch den Inhalt.

                            paul53P 1 Reply Last reply
                            0
                            • T Tictactoo

                              @paul53 Ja, hab ich. Wie gesagt, wenn ich "getObject(id, "rooms").enumNames[0]" logge, zeigt er mir auch den Inhalt.

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

                              @Tictactoo sagte:

                              zeigt er mir auch den Inhalt.

                              Wie sieht er aus ?

                              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

                              T 1 Reply Last reply
                              0
                              • paul53P paul53

                                @Tictactoo sagte:

                                zeigt er mir auch den Inhalt.

                                Wie sieht er aus ?

                                T Offline
                                T Offline
                                Tictactoo
                                wrote on last edited by Tictactoo
                                #17

                                @paul53

                                javascript.0 (17215) script.js.Rhasspy.Slots: [{'en':'bath_room','de':'Bad'}]
                                
                                

                                Nehm ich die Variable und setzen "[0].de" dahinter bekomme ich nur das:

                                javascript.0	2020-01-30 15:44:21.547	error	(17215) at Script.runInContext (vm.js:133:20)
                                javascript.0	2020-01-30 15:44:21.546	error	(17215) at script.js.Rhasspy.Slots:9:84
                                javascript.0	2020-01-30 15:44:21.546	error	(17215) TypeError: Cannot read property 'de' of undefined
                                javascript.0	2020-01-30 15:44:21.546	error	(17215) ^
                                javascript.0	2020-01-30 15:44:21.545	error	(17215) var test = getObject(devices[i].replace('.available',''), 'rooms').enumNames[0].de;
                                javascript.0	2020-01-30 15:44:21.545	error	(17215) script.js.Rhasspy.Slots: script.js.Rhasspy.Slots:9
                                

                                Hatte es auch schon mit array['de'] versucht, aber das schluckt er auch net...

                                paul53P 1 Reply Last reply
                                0
                                • T Tictactoo

                                  @paul53

                                  javascript.0 (17215) script.js.Rhasspy.Slots: [{'en':'bath_room','de':'Bad'}]
                                  
                                  

                                  Nehm ich die Variable und setzen "[0].de" dahinter bekomme ich nur das:

                                  javascript.0	2020-01-30 15:44:21.547	error	(17215) at Script.runInContext (vm.js:133:20)
                                  javascript.0	2020-01-30 15:44:21.546	error	(17215) at script.js.Rhasspy.Slots:9:84
                                  javascript.0	2020-01-30 15:44:21.546	error	(17215) TypeError: Cannot read property 'de' of undefined
                                  javascript.0	2020-01-30 15:44:21.546	error	(17215) ^
                                  javascript.0	2020-01-30 15:44:21.545	error	(17215) var test = getObject(devices[i].replace('.available',''), 'rooms').enumNames[0].de;
                                  javascript.0	2020-01-30 15:44:21.545	error	(17215) script.js.Rhasspy.Slots: script.js.Rhasspy.Slots:9
                                  

                                  Hatte es auch schon mit array['de'] versucht, aber das schluckt er auch net...

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

                                  @Tictactoo sagte:

                                  bekomme ich nur das:

                                  Sehr eigenartig. Was ergibt im Log?

                                   var test = getObject(devices[i].replace('.available',''), 'rooms').enumNames[0];
                                  

                                  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

                                  T 1 Reply Last reply
                                  0
                                  • C Offline
                                    C Offline
                                    CruziX
                                    wrote on last edited by
                                    #19

                                    Schomal iobroker bzw Script Engine neugestartet?

                                    1 Reply Last reply
                                    0
                                    • paul53P paul53

                                      @Tictactoo sagte:

                                      bekomme ich nur das:

                                      Sehr eigenartig. Was ergibt im Log?

                                       var test = getObject(devices[i].replace('.available',''), 'rooms').enumNames[0];
                                      
                                      T Offline
                                      T Offline
                                      Tictactoo
                                      wrote on last edited by
                                      #20

                                      @paul53 Hatte es vorher oben reingeschrieben, vielleicht hatte sich das mit deiner Antwort überschnitten:

                                      javascript.0	2020-01-30 15:44:21.547	error	(17215) at Script.runInContext (vm.js:133:20)
                                      javascript.0	2020-01-30 15:44:21.546	error	(17215) at script.js.Rhasspy.Slots:9:84
                                      javascript.0	2020-01-30 15:44:21.546	error	(17215) TypeError: Cannot read property 'de' of undefined
                                      javascript.0	2020-01-30 15:44:21.546	error	(17215) ^
                                      javascript.0	2020-01-30 15:44:21.545	error	(17215) var test = getObject(devices[i].replace('.available',''), 'rooms').enumNames[0].de;
                                      javascript.0	2020-01-30 15:44:21.545	error	(17215) script.js.Rhasspy.Slots: script.js.Rhasspy.Slots:9
                                      
                                      1 Reply Last reply
                                      0
                                      • T Do not disturb
                                        T Do not disturb
                                        ticaki
                                        wrote on last edited by ticaki
                                        #21

                                        Gibt es schon eine Lösung für diesen Fehler?

                                          // auch mit  getObject(ab, 'rooms').enumNames[0].de durchprobiert
                                          var test = getObject(ab.replace('.available',''), 'rooms').enumNames[0].de;// Fehler
                                        
                                          var test = getObject(ab.replace('.available',''), 'rooms').enumNames[0];
                                          log(test.de); // Fehler
                                        
                                          var test = getObject(ab.replace('.available',''), 'rooms').enumNames[0];
                                          test = JSON.stringify(test);
                                          test = JSON.parse(test); // Fehler 
                                        

                                        Was ich mir nicht erklären kann ist folgendes:

                                           var test = getObject(ab.replace('.available',''), 'rooms').enumNames[0];
                                           if (test === undefined) log('yep');
                                           let t = JSON.stringify(test);
                                           //let x = JSON.parse(t);
                                        

                                        test ist nicht undefiniert und das Script läuft durch.
                                        Aktiviere ich die 4 Zeile, ist test in Zeile 2 undefiniert.

                                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                        Spenden

                                        paul53P 1 Reply Last reply
                                        0
                                        • T ticaki

                                          Gibt es schon eine Lösung für diesen Fehler?

                                            // auch mit  getObject(ab, 'rooms').enumNames[0].de durchprobiert
                                            var test = getObject(ab.replace('.available',''), 'rooms').enumNames[0].de;// Fehler
                                          
                                            var test = getObject(ab.replace('.available',''), 'rooms').enumNames[0];
                                            log(test.de); // Fehler
                                          
                                            var test = getObject(ab.replace('.available',''), 'rooms').enumNames[0];
                                            test = JSON.stringify(test);
                                            test = JSON.parse(test); // Fehler 
                                          

                                          Was ich mir nicht erklären kann ist folgendes:

                                             var test = getObject(ab.replace('.available',''), 'rooms').enumNames[0];
                                             if (test === undefined) log('yep');
                                             let t = JSON.stringify(test);
                                             //let x = JSON.parse(t);
                                          

                                          test ist nicht undefiniert und das Script läuft durch.
                                          Aktiviere ich die 4 Zeile, ist test in Zeile 2 undefiniert.

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

                                          @ticaki sagte:

                                          test = JSON.parse(test); // Fehler

                                          Es ist kein JSON.

                                          @ticaki sagte in [Erledigt] Skript Lichtzählen [..] angezeigt:

                                          var test = getObject(ab.replace('.available',''), 'rooms').enumNames[0].de;// Fehler

                                          Wenn die Räume schon in einer früheren Version angelegt wurden, gibt es das Sprach-Objekt nicht. Bei selbst angelegten Räumen fehlt es wohl ebenso.

                                          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

                                          T 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

                                          676

                                          Online

                                          32.6k

                                          Users

                                          82.3k

                                          Topics

                                          1.3m

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

                                          • Don't have an account? Register

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