Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Error/Bug
  4. [gelöst]Hue Script funktioniert nicht mehr seit Javascript Update

NEWS

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    2.5k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    4.4k

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    3.8k

[gelöst]Hue Script funktioniert nicht mehr seit Javascript Update

Geplant Angeheftet Gesperrt Verschoben Error/Bug
4 Beiträge 3 Kommentatoren 991 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.
  • coyoteC Offline
    coyoteC Offline
    coyote
    Most Active
    schrieb am zuletzt editiert von
    #1

    Seit dem heutigen Javascript Update funktioniert das Hue Szenen Script von ruhr bei mir nicht mehr.

    Bekomme folgenden Fehler:

    javascript-0	2015-12-15 17:11:40	error	at script.js.Hue_Szenen:339:1
    javascript-0	2015-12-15 17:11:40	error	at sandbox.on (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1111:32)
    javascript-0	2015-12-15 17:11:40	error	at Object.sandbox.subscribe (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1056:40)
    javascript-0	2015-12-15 17:11:40	error	script.js.Hue_Szenen: TypeError: Object /^javascript\.\d+\.hue\.szene..*\.(sat|bri)/ has no method 'split'
    

    Hier das Script dazu:

    `// hue Szenzen - Script für ioBroker
    // V 0.3.0
    // 
    // es empfiehlt sich den hue-Adapter-Loglevel auf warn zu stellen (viele Farbänderungen) 
    // 
    // 
    
    // todo
    // ----
    //
    // strobo       Effekt
    // Rotalarm     Effekt
    // Feuer        Effekt 
    // 
    // prüfen:
    // -------
    // 
    // 
    // erledigt: 
    // ---------
    // bri          optional übergeben (zur Laufzeit veränderbar)
    // Einschaltzeit beim ersten Einschalten
    // sat          optional übergeben (zur Laufzeit veränderbar)
    // Änderungen sat, bri per on() überwachen und Lampen in aktiver Gruppe sofort anpassen
    // neue DP Strukutur ()
    // 
    // 
    
    // ------------ ANFANG der individuellen Konfiguration ------------
    
    // die eigenen Lampen in Gruppen sortiert (die Farbverläufe und Effekte werden nach Gruppen aktiviert)
    
    var lampen ={
        "Wohnzimmer":       // Lampengruppe
        [   
            "hue.0.Philips_hue.Hue_Lamp_Wohnzimmer",
      //      "hue.0.Philips_hue.wohnzimmer.stehlampe.oben",
    //        "hue.0.Philips_hue.wohnzimmer.stehlampe.mitte",
    //        "hue.0.Philips_hue.wohnzimmer.stehlampe.unten",
    //        "hue.0.Philips_hue.küche.kühlschrank.lc"
            ],
        "Flur":     // Lampengruppe 
       [   
            "hue.0.Philips_hue.Hue_Lamp_Flur",
    //        "hue.0.Philips_hue.schlafzimmer.decke.hinten.mitte",
    //        "hue.0.Philips_hue.schlafzimmer.decke.hinten.rechts",
    //        "hue.0.Philips_hue.schlafzimmer.decke.vorne.links",
    //        "hue.0.Philips_hue.schlafzimmer.decke.vorne.mitte",
    //        "hue.0.Philips_hue.schlafzimmer.decke.vorne.rechts"        
            ],
    //    "arbeitszimmer":    // Lampengruppe
    //    [
    //        "hue.0.Philips_hue.arbeitszimmer.schreibtisch.ls",
    //        "hue.0.Philips_hue.arbeitszimmer.regal.li.re"
    //        ]
    };
    
    var hueSzenenApapterPfad = "hue.szene.";    // wo sollen die Datenpunkte in den ioBroker Objekten angelegt werden
                                                // je Lampengruppe werden die Datenpunkte:
                                                // .szene       -> Änderung der Szene per Datenpunkt, z.B. über VIS oder im Script per szeneStart(lampenGruppe,szene,bri);
                                                // .bri         -> Änderung der Helligkeit per Datenpunkt (0-254)
                                                // .sat         -> Änderung der Farbsättigung per Datenpunkt ())0-254)
                                                // .bri_inc     -> Erhöhung/Verminderung der Helligkeit per Datenpunkt (positiver Wert = Heller, negativer Wert = dunkler)
                                                // .sat_inc     -> Erhöhung/Verminderung der Sättigung per Datenpunkt  (positiver Wert = mehr Farbe, negativer Wert = blasser)
                                                // angelegt
                                                // z.B. unter: javascript.0.hue.szene.arbeitszimmer.szene (Javascfript Instanz 0, Pfad = "hue.szene.")
    
    // globaler Parameter: Zufällige Zeit zwischen den Wechsel zwischen zwei Farben, je Lampe, in der aktivierten Szene in ms
    // (wenn keine individuelle Zeit in der Szene definiert ist)
    var delayMin =  1000;   // minimale Zeit in ms einer Lampe, um in die nächste Farbe zu wechseln
    var delayMax =  3000;   // maximale Zeit in ms einer Lampe, um in die nächste Farbe zu wechseln
    
    // ------------ ENDE der individuellen Konfiguration ------------
    
    // -------------------------------------------------------------------------
    // Script: Logik & Szenen - ab hier muss in der Regel nichts geändert werden
    // -------------------------------------------------------------------------
    
    var szenen = {
        "beispiel":
        {
            "description":  "Beispielszene",    // optional: Beschreibung der Szene
            "delayMin":     2000,               // optional (ohne werden die globalen Einstellungen verwendet)
            "delayMax":     9000,               // optional (ohne werden die globalen Einstellungen verwendet)
            "hueMin":       0,                  // niedrigste Farbe im Verlauf
            "hueMax":       50000               // höchste Farbe im Verlauf
        },
        "kamin":
        {
            "description":  "roter Farbverlauf",
            "hueMin":       0,
            "hueMax":       10000
        },
        "wald":
        {
            "description":  "grüner Farbverlauf",
            "hueMin":       20000,
            "hueMax":       27000
        },
        "sonne":
        {
            "description":  "gelb/oranger Farbverlauf",
            "hueMin":       10000,
            "hueMax":       17000
        },
        "blau":
        {
            "description":  "Energie, blauer Farbverlauf",
            "hueMin":       44000,
            "hueMax":       48000
        },
        "love":
        {
            "description":  "langsam wechselnder Farbverlauf im lila/violetten Bereich, bis zu den Endpunkten blau und rot",
            "delayMin":     5000,
            "delayMax":     8000,
            "hueMin":       46920,
            "hueMax":       65355
        }
    }
    
    // ##### Script Variablen #####
    
    var timer =             {};
    var nextDelay =         {};
    var szeneAktiv =        [];
    var szene =             [];
    
    //  ##### Script Funktionen #####
    
    function rand(min, max) {
       return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    
    function dpAnlegen() {
        for (var lampenGruppe in lampen) {
            createState(hueSzenenApapterPfad + lampenGruppe + ".szene","aus");
            createState(hueSzenenApapterPfad + lampenGruppe + ".infoAktiveSzene","keine");
            createState(hueSzenenApapterPfad + lampenGruppe + ".bri",254);
            createState(hueSzenenApapterPfad + lampenGruppe + ".bri_inc",0);
            createState(hueSzenenApapterPfad + lampenGruppe + ".sat",254);
            createState(hueSzenenApapterPfad + lampenGruppe + ".sat_inc",0);
            log(hueSzenenApapterPfad + lampenGruppe);
        }   
    }
    
    function restoreSzenen() {
        for (var lampenGruppe in lampen) {
            var aktiveSzene = getState(hueSzenenApapterPfad + lampenGruppe + ".szene").val;
            var bri = getState(hueSzenenApapterPfad + lampenGruppe + ".bri").val;
            if (aktiveSzene != "aus") {
                log("im der Gruppe: " + lampenGruppe + " wurde die Szene: " + aktiveSzene + " wieder aktiviert.");
                setState(hueSzenenApapterPfad + lampenGruppe + ".infoAktiveSzene",aktiveSzene);
                szeneStart(lampenGruppe,aktiveSzene,bri);
            }
        }
    }
    
    function varsAnlegen() {
        // Script-Variablen für jede Lampengruppe anlagen
        for (var lampenGruppe in lampen) {
            timer[lampenGruppe] =           [];
            nextDelay[lampenGruppe] =       [];
            szeneAktiv[lampenGruppe] =      false;
            szene[lampenGruppe] =           null;
        // Script-Variablen für jede Lampe in jeder Lampengruppe anlegen
            for (var i = 0; i < lampen[lampenGruppe].length; i++) {                 // timer und die nächste Delayzeit für jede Lampe zurückstellen
                timer[lampenGruppe][i] = null; 
                nextDelay[lampenGruppe][i] = 0;
            }
        }
    }
    
    function szenenwechsel (lampenGruppe,lampe,delay) {
        delay = Math.floor(delay / 100);                                            // der zufällige Wert für die nächste Lichtfarbe wird auch als transitiontime verwendet (dazu wird das delay durch 100 geteilt)
        //log("aktive Szene: hueMin: " + szenen[szene[lampenGruppe]]["hueMin"] + " hueMax: " + szenen[szene[lampenGruppe]]["hueMax"]);
        var hue = rand(szenen[szene[lampenGruppe]]["hueMin"],szenen[szene[lampenGruppe]]["hueMax"]);
        var bri = getState(hueSzenenApapterPfad + lampenGruppe+".bri").val;
        var sat = getState(hueSzenenApapterPfad + lampenGruppe+".sat").val;
        var command = '{"on":true,"hue":' + hue + ',"sat":' + sat + ',"bri":' + bri + ',"transitiontime":' + delay + '}';
            //log ("Lampe: " + lampen[lampenGruppe][lampe] + " # command: " + command);
        if (bri === 0) command = '{"on":false,"bri":0}';
        setState(lampen[lampenGruppe][lampe] + ".command", command);
    }
    
    function berechneDelay (lampenGruppe,lampe){
        // globale Delay-Einstellungen übernehmen
        var delayMinTemp = delayMin;
        var delayMaxTemp = delayMax;
        // globale Delay-Einstellungen überschreiben, wenn in der Szene ein eingener Delay definiert ist
        if (szenen[szene[lampenGruppe]]["delayMin"]) delayMinTemp = szenen[szene[lampenGruppe]]["delayMin"];
        if (szenen[szene[lampenGruppe]]["delayMax"]) delayMaxTemp = szenen[szene[lampenGruppe]]["delayMax"];
        nextDelay[lampenGruppe][lampe] = rand(delayMinTemp,delayMaxTemp);
    }
    
    function szeneTimer(lampenGruppe,lampe) {
        var delay = nextDelay[lampenGruppe][lampe] || 0;
        //log("gesetztes Delay: " + delay);
        if (timer[lampenGruppe][lampe]) clearTimeout(timer[lampenGruppe][lampe]);
        timer[lampenGruppe][lampe]  = setTimeout(function() {
            timer[lampenGruppe][lampe] = null;
            berechneDelay(lampenGruppe,lampe);
            szenenwechsel(lampenGruppe,lampe,nextDelay[lampenGruppe][lampe]);
              //log("Delay = " + nextDelay[lampenGruppe][lampe] + " # Lampe: " + lampen[lampenGruppe][lampe]);
            szeneTimer(lampenGruppe,lampe); // ruft den Timer nach Ablauf wieder auf
        },delay);
    
    }
    
    function check254(check) {
        if (check !== 0) if (!check) check = 254;
        check = parseInt(check);
        if (check > 254) check =254;
        if (check <= 0 ) check = 0;
        return check;
    }
    
    function setBri(lampenGruppe,aktiveSzene,bri) {
        if (szenen[aktiveSzene]["bri"]) bri = szenen[aktiveSzene]["bri"];
        bri = check254(bri);
        setState(hueSzenenApapterPfad + lampenGruppe+".bri", bri);
    }
    
    function setSat(lampenGruppe,aktiveSzene,sat) {
        if (szenen[aktiveSzene]["sat"]) sat = szenen[aktiveSzene]["sat"];
        sat = check254(sat);
        setState(hueSzenenApapterPfad + lampenGruppe+".sat", sat);
    }
    
    function szeneStart(lampenGruppe,aktiveSzene,bri,sat) {
        if (!szenen[aktiveSzene]) {                                                 // undefinierte Szenen abfangen
            log("# hue Szenen Script: undefinierte Szene wurde versucht aufzurufen: " + aktiveSzene,"error");
            return;
        }
        szene[lampenGruppe] = aktiveSzene;
        setBri(lampenGruppe,aktiveSzene,bri);
        setSat(lampenGruppe,aktiveSzene,sat);
        if (!szeneAktiv[lampenGruppe]) {
            szeneAktiv[lampenGruppe] = true;
            for (var i = 0; i < lampen[lampenGruppe].length; i++) {                 // für alle Lampen den timer starten
                nextDelay[lampenGruppe][i] = 0;
                szeneTimer(lampenGruppe,i);
            }
        }
    }
    
    function szeneStop(lampenGruppe) {                                              // alle aktiven timer löschen
        for (var i = 0; i < lampen[lampenGruppe].length; i++) {
            clearTimeout(timer[lampenGruppe][i]);
            log("Timer: " + lampen[lampenGruppe][i] + " gestoppt");
        }
        szeneAktiv[lampenGruppe] =  false;
        szene[lampenGruppe] =       null;
    }
    
    function lampenAus(lampenGruppe) {
        for (var i = 0; i < lampen[lampenGruppe].length; i++) {
            setState(lampen[lampenGruppe][i]+".command",'{"on":false}');
        }
    }
    
    function setBriSat(com,wert,lampenGruppe) {
        if (wert != check254(wert)) {
            wert = check254(wert);
            setState(hueSzenenApapterPfad + lampenGruppe + "." + com, wert);    //korrigiert bri/sat und  ruft diese on() Funktion direkt wieder auf
        } else {
            log("Lampengruppe: " + lampenGruppe + " # " + com + ": " + wert + " empfangen","warn");
            if (szeneAktiv[lampenGruppe]) {                                         // wenn die Szene in der Gruppe aktiv ist:
                for (var i = 0; i < lampen[lampenGruppe].length; i++) {             // für alle Lampen der Gruppe
                    setState(lampen[lampenGruppe][i] + "." + com, wert);            // die Helligkeit/Saturation direkt ändern
                    log(com + ": " + wert + " # " + lampen[lampenGruppe][i] + " gesetzt","warn");
                }
            }
        }    
    }
    
    function changeBriSat (com, wert, lampenGruppe) {
        com = com.replace("_inc", "");
        var alterWert = getState(hueSzenenApapterPfad + lampenGruppe + "." + com).val;
        wert = parseInt(wert) + alterWert;
        setState(hueSzenenApapterPfad + lampenGruppe + "." + com, wert);            //setzt bri/sat neu. Dies ruft die on() Funktion direkt wieder auf, diesmal mit bri/sat
    }
    
    //  ##### Überwachte Datenpunkte #####
    
    // Änderung der Helligkeit (.bri) oder Farbsättigung (.sat) während der Laufzeit über einen Datenpunkt
    
    var reg = new RegExp("^javascript\\.\\d+\\." + hueSzenenApapterPfad.replace('.', '\\.') + ".*\\.(sat|bri)");
    on({"id":reg , "change": "ne"}, function (obj) {
        var com = obj.id.split('.').pop();
        var   str = obj.id.replace(/\.(bri|sat)$/, "");
        var reg2 = new RegExp("^javascript\\.\\d+\\."+ hueSzenenApapterPfad.replace('.', '\\.'));
        var lampenGruppe = str.replace(reg2, "");
        var wert = obj.newState.val;
        setBriSat (com, wert, lampenGruppe);
    });
    
    // Änderung der Helligkeit oder Farbsättignung als adaptiver Wert (.bri_inc, .sat_inc)
    
    var reg = new RegExp("^javascript\\.\\d+\\." + hueSzenenApapterPfad.replace('.', '\\.') + ".*\\.(sat_inc|bri_inc)");
    on({"id":reg , "change": "any"}, function (obj) {
        var com = obj.id.split('.').pop();
        var   str = obj.id.replace(/\.(sat_inc|bri_inc)$/, "");
        var reg2 = new RegExp("^javascript\\.\\d+\\."+ hueSzenenApapterPfad.replace('.', '\\.'));
        var lampenGruppe = str.replace(reg2, "");
        var wert = obj.newState.val;
        changeBriSat (com, wert, lampenGruppe);
    });
    
    // Änderung einer Szene während der Laufzeit, z.B. über VIS
    
    var reg = new RegExp("^javascript\\.\\d+\\." + hueSzenenApapterPfad.replace('.', '\\.') + ".*\\.szene");
    on(reg , function (obj) {
        var   str = obj.id.replace(/\.szene$/, "");
        var reg2 = new RegExp("^javascript\\.\\d+\\."+ hueSzenenApapterPfad.replace('.', '\\.'));
        var lampenGruppe = str.replace(reg2, "");
        var szene =         obj.newState.val;
        log("Lampengruppe: " + lampenGruppe + " # Szene: " + szene + " empfangen");
        switch (szene) {
            case "aus":
                szeneStop(lampenGruppe);
                lampenAus(lampenGruppe);
                log(lampenGruppe + " Szene deaktiviert");
                break;
            case "stop":
                szeneStop(lampenGruppe);
                log(lampenGruppe + " Szene angehalten");
                break;
            default:
                if (szenen[szene]) {
                    // TODO: bri nur ermitteln, wenn in der Szene kein eigener bri festgelegt ist    
                        var bri = getState(hueSzenenApapterPfad + lampenGruppe+".bri").val;
                        bri = check254(bri);
                        if (bri === 0) bri = 254;
                    szeneStart(lampenGruppe,szene,bri);
                    setState(hueSzenenApapterPfad + lampenGruppe+".infoAktiveSzene", szene);
                    log(lampenGruppe + " Szene: " + szene + " gestartet");
                    break;
                }
                log("### unbekannte Szene: " + szene,"warn");
                break;
          }
     });
    
    //  ##### Scriptstart #####
    
    dpAnlegen();        // je einen Datenpunkt pro Lampengruppe anlegen
    varsAnlegen();      // die für das Script notwendigen Variablen erstellen
    
    // warte bis alle States und Objekte angelegt werden.
    // 500ms und dann starte main();
    function main() {
    
    //  ##### Scriptstart main() #####
    
        restoreSzenen();    // aktiviert zuletzt eingestellte Szenen
    
    }
    setTimeout(main, 500);` [/i][/i][/i][/i][/i][/i][/i][/i]
    
    1 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #2

      Danke,

      fixe ich heute Abend.

      1 Antwort Letzte Antwort
      0
      • coyoteC Offline
        coyoteC Offline
        coyote
        Most Active
        schrieb am zuletzt editiert von
        #3

        Ah ok, prima. Danke

        Edit: Funktioniert wieder Bestens mit der Version 1.1.1. Danke Bluefox :D

        1 Antwort Letzte Antwort
        0
        • L Offline
          L Offline
          looxer01
          schrieb am zuletzt editiert von
          #4

          bei mir sieht jetzt auch alles wieder gut aus ;)

          1 Antwort Letzte Antwort
          0

          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

          Registrieren Anmelden
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          219

          Online

          33.0k

          Benutzer

          83.4k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2026
          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