Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Globales Script: Variablen hinterlegen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Globales Script: Variablen hinterlegen

    This topic has been deleted. Only users with topic management privileges can see it.
    • bahnuhr
      bahnuhr Forum Testing Most Active last edited by

      Guten Morgen,

      ich habe in einem globalen Script folgende Variablen hinterlegt.

      ! // Variablen die man immer braucht
      ! function variablen_holen() {
      ! var vUrlaub = getState("hm-rega.0.2042").val;
      ! var vSommer = getState("hm-rega.0.1503").val;
      ! var vWochenende = getState("hm-rega.0.1504").val;
      ! var vAnwesenheit = getState("hm-rega.0.32078").val;
      ! var vFeiertag = getState("hm-rega.0.2905").val;
      ! var Temp = getState("hm-rpc.0.KEQ0766778.1.TEMPERATURE").val; // Temp vom Außensensor
      ! }

      Nur wie rufe ich diese globale function jetzt aus einem script heraus ab.

      Versucht habe ich:

      variablen_holen()

      Dies hat aber nicht geklappt?

      Gebt mir mal Hilfe, ich raff die Funktionsweise noch nicht so richtig.

      mfg

      Dieter

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

        Die Werte müssen mit return an das aufrufende Programm zurück gegeben werden:

        function variablen_holen() {
        var vUrlaub = getState("hm-rega.0.2042").val;
        var vSommer = getState("hm-rega.0.1503").val;
        var vWochenende = getState("hm-rega.0.1504").val;
        var vAnwesenheit = getState("hm-rega.0.32078").val;
        var vFeiertag = getState("hm-rega.0.2905").val;
        var Temp = getState("hm-rpc.0.KEQ0766778.1.TEMPERATURE").val; // Temp vom Außensensor
        return {
          Urlaub: vUrlaub,
          Sommer: vSommer,
          Wochenende: vWochenende,
          Anwesenheit: vAnwesenheit,
          Feiertag: vFeiertag,
          Aussentemp: Temp
          };
        }
        

        Der Aufruf erfolgt dann so:

        var variablen = variablen_holen();
        var Urlaub = variablen.Urlaub;
        ...
        
        1 Reply Last reply Reply Quote 0
        • blauholsten
          blauholsten Developer last edited by

          @paul53

          Anfänger Frage….

          Wäre es nicht möglich die Variablen außerhalb der function in dem globalen Skript zu deklarieren? Und dann mit der function varialblen_holen immer die aktuellen Werte in diesen neu zu schreiben.

          Wobei die Idee mit den Objekt Klasse ist.

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

            @blauholsten:

            Wäre es nicht möglich die Variablen außerhalb der function in dem globalen Skript zu deklarieren? Und dann mit der function varialblen_holen immer die aktuellen Werte in diesen neu zu schreiben. `
            Im Prinzip ja, aber nicht zu empfehlen, da man irgendwann den Überblick über die globalen Variablen verliert.

            1 Reply Last reply Reply Quote 0
            • bahnuhr
              bahnuhr Forum Testing Most Active last edited by

              @blauholsten:

              @paul53

              Wäre es nicht möglich die Variablen außerhalb der function in dem globalen Skript zu deklarieren? Und dann mit der function varialblen_holen immer die aktuellen Werte in diesen neu zu schreiben. `

              Aber genau das hatte ich ja vor.

              Ich wollte die paar Variablen die ich immer brauche in ein globales script.

              Und dann in den Einzel-Scripten darauf zugreifen.

              Nur wie ?

              mfg

              Dieter

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

                @bahnuhr:

                Ich wollte die paar Variablen die ich immer brauche in ein globales script.

                Und dann in den Einzel-Scripten darauf zugreifen. `
                Dann müssen die Variablen außerhalb der Funktion deklariert werden:

                var vUrlaub;
                ...
                
                function variablen_holen() {
                  vUrlaub = getState("hm-rega.0.2042").val;
                  ...
                }
                
                
                1 Reply Last reply Reply Quote 0
                • bahnuhr
                  bahnuhr Forum Testing Most Active last edited by

                  Hallo paul53,

                  ok, aber wie ?

                  Ziel bzw. das angedachte:

                  • Ich schreibe in ein globales script einige Variablen die ich öfters brauche.

                  Diese holen sich den ccu2 wert bzw. den status automatisch.

                  • In den Einzelscripten benutze ich den variablennamen um nicht immer die lange HM Nr. eintippen zu müssen.

                  Geht das ?

                  mfg

                  Dieter

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

                    @bahnuhr:

                    Diese holen sich den ccu2 wert bzw. den status automatisch. `
                    Das sollte so in einem globalen Script gehen (nicht getestet):

                    var vUrlaub;
                    var vSommer;
                    ...
                    
                    on({id: "hm-rega.0.2042", change: "ne", ack: true}, function(dp) {vUrlaub = dp.state.val;});
                    on({id: "hm-rega.0.1503", change: "ne", ack: true}, function(dp) {vSommer = dp.state.val;});
                    ...
                    

                    EDIT: Empfehlen würde ich es nicht, da das Subscribe mehrerer Datenpunkte in jedes Script eingefügt wird, egal ob die Variablen in dem Script benötigt werden oder nicht !

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

                      @bahnuhr:

                      …um nicht immer die lange HM Nr. eintippen zu müssen. `
                      Wenn es darum geht, nicht immer die ID zu ermitteln und einzutippen, würde ich lediglich diese in das globale Script schreiben.

                      var idUrlaub = "hm-rega.0.2042";
                      var idSommer = "hm-rega.0.1503";
                      var idWochenende = "hm-rega.0.1504";
                      var idAnwesenheit = "hm-rega.0.32078";
                      var idFeiertag = "hm-rega.0.2905";
                      var idTemp = "hm-rpc.0.KEQ0766778.1.TEMPERATURE"; // Temp vom Außensensor
                      
                      

                      Diese IDs können dann bei Bedarf in getState(id) bzw on() in den einzelnen Scripts verwendet werden.

                      1 Reply Last reply Reply Quote 0
                      • bahnuhr
                        bahnuhr Forum Testing Most Active last edited by

                        Ok,

                        ich hatte mir vorgestellt, dass man in global schreiben könnte:

                        var idSommer = getState("hm-rega.0.1503").val;

                        Diese wäre dann immer aktuell.

                        Im einem Script wollte ich dann nur noch "idSommer" verwenden.

                        Fazit:

                        Scheint so nicht zu funktionieren.

                        Wenn ich dann doch immer "getState" schreiben muss, dann kann ich auch gleich die HM-Nr. hinschreiben.

                        Ist dann vielleicht sogar noch übersichtlicher.

                        mfg

                        Dieter

                        1 Reply Last reply Reply Quote 0
                        • blauholsten
                          blauholsten Developer last edited by

                          @bahnuhr:

                          Ok,

                          ich hatte mir vorgestellt, dass man in global schreiben könnte:

                          var idSommer = getState("hm-rega.0.1503").val;

                          Diese wäre dann immer aktuell.

                          Dieter `

                          Das geht so nicht! du müsstest den gewünschten Datenpunkte mit ein "on" abfragen, und dann in eine Variable schreiben.

                          1 Reply Last reply Reply Quote 0
                          • blauholsten
                            blauholsten Developer last edited by

                            @paul53:

                            @bahnuhr:

                            …um nicht immer die lange HM Nr. eintippen zu müssen. `
                            Wenn es darum geht, nicht immer die ID zu ermitteln und einzutippen, würde ich lediglich diese in das globale Script schreiben.

                            var idUrlaub = "hm-rega.0.2042";
                            var idSommer = "hm-rega.0.1503";
                            var idWochenende = "hm-rega.0.1504";
                            var idAnwesenheit = "hm-rega.0.32078";
                            var idFeiertag = "hm-rega.0.2905";
                            var idTemp = "hm-rpc.0.KEQ0766778.1.TEMPERATURE"; // Temp vom Außensensor
                            
                            

                            Diese IDs können dann bei Bedarf in getState(id) bzw on() in den einzelnen Scripts verwendet werden. `

                            Das wäre so auch mein Favorites. Habe eben aus Spass mal probiert ein "on" in einen globalen Skript anzulegen, dieses wir dann tatsächlich als subcribele in jeden Skript erkannt.

                            Merke: Laut bluefox habe ich mal gelernt, jedes globale Skript wird quasi vor ein "normales" Skript geschrieben.

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

                              @blauholsten:

                              Das wäre so auch mein Favorites. `
                              Mein Favorit ist die Verwendung von getIdByName(name), was allerdings eine eindeutige Namensvergabe voraussetzt.

                              var idUrlaub = getIdByName('Urlaub');
                              
                              1 Reply Last reply Reply Quote 0
                              • bahnuhr
                                bahnuhr Forum Testing Most Active last edited by

                                @paul53:

                                Mein Favorit ist die Verwendung von getIdByName(name), was allerdings eine eindeutige Namensvergabe voraussetzt. `

                                Hallo Paul,

                                schreib mal bitte etwas mehr.

                                Hört sich interessant an.

                                mfg

                                Dieter

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

                                  Mehrere Skripte von mir, in denen ich getIdByName(name) anwende, findest Du unter den Script-Beispielen auf http://www.iobroker.net/?page_id=2786&lang=de, z.B. das http://www.iobroker.net/?page_id=3660&lang=de.

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

                                    @bahnuhr:

                                    schreib mal bitte etwas mehr. `
                                    Gerade bei Systemvariablen bietet sich die Verwendung des Namen (common.name) an, die aus der CCU automatisch in die Datenpunkte des Rega-Adapters übernommen werden.

                                    Auch den Datenpunkten des RPC-Adapters können Namen vergeben werden. Dies muss allerdings manuell im Reiter "Objekte" erfolgen, da auf der CCU nur Geräte und Kanäle (und SV) frei vergebbare Namen erhalten können, nicht jedoch die Hardware-Datenpunkte.

                                    Kein Objekt-Name innerhalb ioBrokers sollte doppelt vergeben werden. getIdByName(name) liefert in diesem Fall ein Array mit zwei/mehreren IDs, womit die Funktionen, in denen die ID verwendet wird, nichts anfangen können.

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    946
                                    Online

                                    31.9k
                                    Users

                                    80.1k
                                    Topics

                                    1.3m
                                    Posts

                                    3
                                    16
                                    3530
                                    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