NEWS

Hilfe - Probleme Javaskript mit Hue API


  • Forum Testing Most Active

    @Stormbringer
    sind die Szenen mit diesem Script ausgelesen ?

    var HueApi = require("node-hue-api").HueApi;
    
    // Replace IP and username!!!
    var host = "192.168.180.15",
        username = "xxxxx",
        api = new HueApi(host, username);
        
    var groups_ = [],
        lights_ = [],
        objects_ = [];
    
    // Log JSON results
    var displayResults = function(result) {
        console.log('Reponse: '+JSON.stringify(result, null, 2));
    };
    
    // Parse Light Group 0 (All Lights)
    var parseGroup0 = function(result) {
        if (!result.lights){return} // Empty group
        
        var id = result.id,
            lights = result.lights,
            name = "All Lights";
        console.debug('group: '+name+', lights: '+lights);
        groups_[lights] = name;
    };
    
    // Parse Light Groups
    var parseGroups = function(result) {
        for (var i = 0; i < result.length; i++) {
            if (!result[i].lights){continue} // Empty group
            
            var id = result[i].id,
                lights = result[i].lights,
                name = result[i].name;
            console.debug('group: '+name+', lights: '+lights);
            groups_[lights] = name;
        }
    };
    
    // Parse Lights
    var parseLights = function(result) {
        for (var i = 0; i < result.length; i++) {
            var id = result[i].id,
                name = result[i].name;
            console.debug('light: '+name+', id: '+id);
            lights_[id] = name;
        } 
    };
    
    // Create States in ioBroker
    var createStates = function(result) {
        // Resync button
        createState('PhilipsHue.Scenes.Resync', false, {role: "button", name: 'Resync Philips Hue Groups, Lights and Scenes'});
    
        for (var i = 0; i < result.length; i++) {
            if (!result[i].appdata.data){continue} // skip internal szenes
    
            var id = result[i].id,
                lights = result[i].lights,
                name = result[i].name.replace(/"/g,''),
                pathname = name.replace(/ /g,'_');
            
            // Get light names
            var light_names = [];
            for (var j = 0; j < lights.length; j++) {
                var light_name = lights_[lights[j]];
                light_names.push(light_name);
            }
    
            // Room, group or lights linked with scene
            var group = 'Group: '+groups_[lights] || 'Lights: '+light_names.join(", ");
            
            // Create States and skip duplicates
            if (!objects_[lights+pathname]){
                console.debug('scene: '+name+', '+group);
                createState('PhilipsHue.Scenes.'+pathname+'.'+id, false, {role: "button", name: 'Scene: '+name+' ('+group+')'});
                objects_[lights+pathname] = true;
            }
        }
    };
    
    // Delete States
    function deleteStates(){
        console.log('Deleting current objects for scenes...');
        objects_ = [];
        $('javascript.0.PhilipsHue.Scenes.*').each(function (id) {
            deleteState(id);
        });
    }
    
    // Fetch data from Hue API
    function init(){
        api.getGroup(0, function(err, group0) {
            if (err) throw err;
            console.log('Processing group 0...');
            //displayResults(group0);
            parseGroup0(group0);
        });
        api.groups(function(err, groups) {
            if (err) throw err;
            console.log('Processing ' + groups.length + ' groups...');
            //displayResults(groups);
            parseGroups(groups);
        });
    
        api.lights(function(err, lights) {
            if (err) throw err;
            console.log('Processing ' + lights.lights.length + ' lights...');
            //displayResults(lights);
            parseLights(lights.lights);
        });
    
        api.scenes(function(err, scenes) {
            if (err) throw err;
            console.log('Processing ' + scenes.length + ' scenes...');
            //displayResults(scenes);
            createStates(scenes);
        });
    }
    
    // Init on start
    init();
    
    // Activate scene
    on({id: /^javascript\.0\.PhilipsHue.Scenes\./, val: true}, function (obj) {
        if (obj.id == 'javascript.0.PhilipsHue.Scenes.Resync'){return}
        sceneId = obj.id.split('.').pop();
        console.log('Activating '+obj.name);
        api.activateScene(sceneId, function(err, result) {
            if (err) throw err;
            displayResults(result);
        });
        setState(obj.id, false);
    });
    
    // Resync
    on({id: 'javascript.0.PhilipsHue.Scenes.Resync', val: true}, function (obj) {
        console.log('Resync triggered...');
        groups_ = [];
        lights_ = [];
        deleteStates();
        init();
    });
    
    schedule("0 3 * * *", function () {
        console.log('Resync triggered...');
        groups_ = [];
        lights_ = [];
        deleteStates();
        init();
    });
    


  • Nein leider nicht sonst wärs einfach. Damals gabs den schönen Skript nicht... Habe die alle mit einer iOS App ausgelesen. Wenn ich jetzt alles ändern muß ändere ich es aber auf den Skript ☺

    Finde es schade, dass der Skript nicht in den Adapter integriert ist. Hätte mir damals viel Arbeit erspart und denke vielen Neulingen würde es auch enorm weiter helfen, weil soooo bekannt ist der Skript leider noch immer nicht.


  • Forum Testing Most Active

    In diesem Script haben die Datenpunkte der Szenen ja auch diese "kryptischen" ID



  • @dslraser

    Jep stimmt. Aber mit dem Skript muss man den User nur einmal ändern und man kann die Szenen mit einem "Knopfdruck" aufrufen. Also tausend mal leichter wie die alte Methode



  • Du weißt aber ned zufällig auch wie man die Standard Werte nach einem Neustart setzt? Häkchen Standardwert gäbs ja.. Muß man den Haken nur setzen, wenn der Datenpunkt gerade den gewünschten Wert hat oder ist die Option für was anderes gedacht?


  • Forum Testing Most Active

    @Stormbringer sagte in Hilfe - Probleme Javaskript mit Hue API:

    Du weißt aber ned zufällig auch wie man die Standard Werte nach einem Neustart setzt? Häkchen Standardwert gäbs ja.. Muß man den Haken nur setzen, wenn der Datenpunkt gerade den gewünschten Wert hat oder ist die Option für was anderes gedacht?

    hm, weiß ich leider nicht. Ich weiß es nur beim Datenpunkt erstellen. (der initiale Wert-Initialisierung) Also beim erstellen true oder false.
    Bildschirmfoto 2019-02-18 um 20.29.56.png



  • @dslraser
    wow die Blöcke kannte ich noch gar nicht. Wo gibt es denn die? 🙃 Sie legen ja auch nen Punkt in den Objekten an oder nur im Skript? Ich mach das immer mit dem Pluszeichen in den Objekten 🙈😂


  • Forum Testing Most Active

    @Stormbringer sagte in Hilfe - Probleme Javaskript mit Hue API:

    @dslraser
    wow die Blöcke kannte ich noch gar nicht. Wo gibt es denn die? 🙃 Sie legen ja auch nen Punkt in den Objekten an oder nur im Skript? Ich mach das immer mit dem Pluszeichen in den Objekten 🙈😂

    Ich habe Dir einen Export des Blocklys in den Spoiler unten gepackt (Den Spoiler übersieht man fast)



  • Dankeschön 😉🤗



  • Der Javascript Adapter kriegt sich leider noch immer nicht ein. Stürzt ständig ab. Anfangs mit Reconnecting to DB oder XHR Error, jetzt kommt gar nichts mehr im LOG und er steigt einfach aus. Alle auf die schnelle bekannten Skripte mit dem alten HUE User habe ich deaktiviert. Aber selbst, wenn mir einer durchgerutscht ist dürfte das doch nicht alles so zum Kollabieren bringen oder?

    Habe jetzt noch getestet ob der mehrfach läuft. Terminal sagt:

    io@ubuntu:~$ ps -ef | grep io.java
    root 3429 3379 95 22:26 ? 00:09:20 io.javascript.0
    root 3556 3379 2 22:27 ? 00:00:15 io.javascript.1
    io 4363 4344 0 22:36 pts/8 00:00:00 grep --color=auto io.java
    io@ubuntu:~$ ps -ef | grep io.java
    root 3429 3379 96 22:26 ? 00:10:53 io.javascript.0
    root 3556 3379 2 22:27 ? 00:00:16 io.javascript.1
    io 4437 4344 0 22:37 pts/8 00:00:00 grep --color=auto io.java
    io@ubuntu:~$ ps -ef | grep io.java
    root 3429 3379 96 22:26 ? 00:11:13 io.javascript.0
    root 3556 3379 2 22:27 ? 00:00:16 io.javascript.1
    io 4443 4344 0 22:38 pts/8 00:00:00 grep --color=auto io.java
    io@ubuntu:~$ ps -ef | grep io.java
    root 3429 3379 97 22:26 ? 00:12:23 io.javascript.0
    io 4511 4344 0 22:39 pts/8 00:00:00 grep --color=auto io.java
    io@ubuntu:~$ iobroker stop javascript.0
    Adapter "javascript.0" stopped.
    io@ubuntu:~$ ps -ef | grep io.java
    root 3429 3379 97 22:26 ? 00:13:24 io.javascript.0
    io 4581 4344 0 22:40 pts/8 00:00:00 grep --color=auto io.java
    io@ubuntu:~$ sudo iobroker stop javascript.0
    [sudo] Passwort für io:
    Adapter "javascript.0" stopped.
    io@ubuntu:~$ ps -ef | grep io.java
    root 3429 3379 97 22:26 ? 00:13:57 io.javascript.0
    io 4622 4344 0 22:40 pts/8 00:00:00 grep --color=auto io.java
    io@ubuntu:~$

    Meines erachtens stopt der Javascript.0 gar nicht oder? Neustart bringt auch nichts.... Und der NUC CPU kocht schon halb 🤧

    Vorher lief alles. Man kann zusammenfasend sagen, HUE User löschen ist bei größeren HUE Installation eher suboptimal 😂


Log in to reply
 

Suggested Topics

  • 18
  • 3
  • 9
  • 17
  • 1
  • 23
  • 12
  • 326

2.1k
Online

32.0k
Users

38.7k
Topics

525.1k
Posts