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. Lichter zählen Script geht leider nicht :(

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Lichter zählen Script geht leider nicht :(

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascript
2 Beiträge 2 Kommentatoren 208 Aufrufe 2 Watching
  • Ä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.
  • L Offline
    L Offline
    lmeier
    schrieb am zuletzt editiert von lmeier
    #1

    Hallöchen an alle,
    so langsam geht mein Umstieg von noch ccu.io und DashUI auf ioBroker mit VIS weiter und es ist leider doch einiges an Arbeit, weil zahlreiche Funktionen und Widgets nicht mehr vorhanden sind.

    Aber nungut - zum Problem des Tages =)

    Ich würde gerne wieder aktuell eingeschaltete Lichter gem. meiner HM-Devices im Haus als Liste angezeigt bekommen.

    Dafür habe ich durch das Forum auch schon ein entsprechendes JS Script gefunden (hier) und darin nen Fehler in Z. 99 und 104 (überflüssiges ')); am Zeilenanfang) auch schon herausgenommen.
    Aber leider meldet er mir immer Fehler, die sich mir nicht erschließen.

    Hier der Code:

    /* Status Zahl Lichter
    {1}
    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();
    });
    {1}
    // Skriptstart
    setTimeout(function() {
        if (logging) log('Auslöser Skriptstart');
        checkDevices();
    }, 500);
    {1}
    // Aufbereitung für Ansage
    function strip_tags(data) {
        var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
        return (rueckgabe);
    }
    {1}
    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);
    });
    {1}
    

    Und ich bekomme folgende Fehler:

    14:41:27.130	error	javascript.0 (2788) at checkLicht (script.js.Lichter:63:27)
    14:41:27.130	error	javascript.0 (2788) at script.js.Lichter:80:6
    14:41:27.131	error	javascript.0 (2788) at checkDevices (script.js.Lichter:79:13)
    14:41:27.131	error	javascript.0 (2788) at Object.<anonymous> (script.js.Lichter:124:5)
    

    Kann mir jemand weiterhelfen?

    Ich bin nicht sonderlich bewandert in JS, aber bislang hat es zum verstehen und anpassen immer gereicht :(

    Viele Grüße und Dank im Voraus

    1 Antwort Letzte Antwort
    0
    • T Nicht stören
      T Nicht stören
      ticaki
      schrieb am zuletzt editiert von ticaki
      #2

      Hallo,

      var name;
      

      name ist schon deklariert als const string und enthält den Namen des aktuellen Skripts.

      das ist aber nicht der Auslöser des Fehlers... zumindest bekomme ich keinen Fehler bei meinen Versuchen. Verwende eine andere Variable und guck mal mit

      console.log(sname);
      

      was drin steht.

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      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

      750

      Online

      32.7k

      Benutzer

      82.4k

      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