Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] Array Subscriptions Problem

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Gelöst] Array Subscriptions Problem

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      tempestas last edited by

      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 `

      1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 last edited by

        Du musst die Variablen referenzieren und keine texte angeben 8weil diese States gibts ja nicht):

        var arrHueEG = [idArbeitszimmerLED, idWohnzimmerKugel, idWohnzimmerTV, idWohnzimmerStehlampe, idWohnzimmerLeuchttisch];
        
        1 Reply Last reply Reply Quote 0
        • T
          tempestas last edited by

          Oh man.. danke.

          So einfach, so leicht zu übersehen.

          1 Reply Last reply Reply Quote 0
          • T
            tempestas last edited by

            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);
                    } 
            });  
            
            
            1 Reply Last reply Reply Quote 0
            • Jey Cee
              Jey Cee Developer last edited by

              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

              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                @Jey Cee:

                getState(obj.id) = obj.state.val Nicht ganz, > getState(obj.id) = obj.state

                getState(obj.id).val = obj.state.val `
                wobei die Methode mit dem an die Callback-Funktion übergebenen Objekt effizienter ist als getState(obj.id).

                1 Reply Last reply Reply Quote 0
                • T
                  tempestas last edited by

                  Danke sehr,

                  ich muss das bestimmt noch 100x durchlesen, bis ich es wirklich verstanden habe, aber das hilft mir weiter.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  783
                  Online

                  31.7k
                  Users

                  79.8k
                  Topics

                  1.3m
                  Posts

                  4
                  7
                  771
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo