NEWS
[Gelöst] Array Subscriptions Problem
-
Hallo zusammen,
ich will für meine wenigen Hue Lampen, da diese in den üblichen "Lichter zählen"-Slripten immer nur Ärger machen, separat erfassen.
Eigentlich sollte das auch kein Thema sein.
Seltsamerweise sehe ich beim zwischenzeitlichen Teststart meines Skripts, dass die subscriptions auf den Array funktionieren. Aber es wird nichts ausgelöst, wenn ich eine Lampe einschalte.
Als Gegentest habe ich dann eine der Lampen herausgegriffen, da funktioniert es einzeln.
Wo ist mein Denkfehler?
JS-Adapter 3.4.0
// Skript zum prüfen, wieviele Lampen an sind // Aufgrund von Problemen mit Hue Lampen sind diese alle einzeln aufgeführt // Status: 3.10.2017 // ############ ALLGEMEINE SKRIPTEINSTELLUNGEN ############### // debugging var debug = false; // Variablen var arrEG = []; var countEG = 0; // ################## HUE LAMPEN ##################### // ids deklarieren var idArbeitszimmerLED = "hue.0.Philips_hue.Hue_lightstrip_plus_1.on"/*Philips_hue.Hue_lightstrip_plus_1.on*/, idWohnzimmerKugel = "hue.0.Philips_hue.Ecklampe_Wohnzimmer.on"/*Philips_hue.Ecklampe_Wohnzimmer.on*/, idWohnzimmerTV = "hue.0.Philips_hue.Tv_Lampe.on"/*Philips_hue.Tv_Lampe.on*/, idWohnzimmerStehlampe = "hue.0.Philips_hue.Stehlampe_Wohnzimmer.on"/*Philips_hue.Stehlampe_Wohnzimmer.on*/, idWohnzimmerLeuchttisch = "hue.0.Philips_hue.Tisch_Wohnzimmer.on"/*Philips_hue.Tisch_Wohnzimmer.on*/; var arrHueEG = ['idArbeitszimmerLED', 'idWohnzimmerKugel', 'idWohnzimmerTV', 'idWohnzimmerStehlampe', 'idWohnzimmerLeuchttisch']; // ######## FUNKTIONEN ######## on({id: arrHueEG, change: 'ne'} , function(){ log("Etwas ist geschehen"); }); on(idWohnzimmerTV, function (){ log("Es muss doch klappen")});
` > 12:11:25.312 [info] javascript.0 script.js.common.Lampen_zählen: registered 5 subscriptions and 0 schedules
12:13:46.000 [info] javascript.0 Stop script script.js.common.Lampen_zählen
hier zusätzlichen Eionzeltest eingebaut
12:13:46.015 [info] javascript.0 Start javascript script.js.common.Lampen_zählen
12:13:46.016 [info] javascript.0 script.js.common.Lampen_zählen: registered 6 subscriptions and 0 schedules
12:13:51.177 [info] javascript.0 script.js.common.Lampen_zählen: Es muss doch klappen `
-
Du musst die Variablen referenzieren und keine texte angeben 8weil diese States gibts ja nicht):
var arrHueEG = [idArbeitszimmerLED, idWohnzimmerKugel, idWohnzimmerTV, idWohnzimmerStehlampe, idWohnzimmerLeuchttisch];
-
Oh man.. danke.
So einfach, so leicht zu übersehen.
-
Eine Frage habe ich noch zum Thema:
Das Array "on" funktioniert soweit.
Was ich nicht verstehe:
wann muss ich
obj.state.val
nehmen und wann getState?
Meine Funktion funktioniertm it obj.val.state aber nicht mit getState(obj).val
Da fehlt mir der Durchblick, warum ich was wann nutze. Kann mich da einer erleuchten?
on(arrHueEG, function(obj){ var name = obj.common.name; var status = obj.state.val; log("Status ist" +status); var devicename = name.substring(0, name.indexOf(".on")); //.on aus Text entfernen if(status){ countEG = countEG +1; log(countEG); } else{ countEG = countEG -1; log(countEG); } });
-
obj ist das Objekt mit all seinen Informationen.
getState holt aber nur den Inhalt von state anhand der ID.
getState(obj.id) = obj.state.val
Wobei obj eine variable ist und sie enthält das Objekt zum Zeitpunkt des Funktionsaufruf. Wenn sich der Inhalt von state zur Laufzeit der Funktion ändert musst du mit getState(obj.id) arbeiten.
Gesendet von Unterwegs
-
-
Danke sehr,
ich muss das bestimmt noch 100x durchlesen, bis ich es wirklich verstanden habe, aber das hilft mir weiter.