Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Zugriff auf globale Variablen in global Skripten

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    21
    1
    834

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

Zugriff auf globale Variablen in global Skripten

Scheduled Pinned Locked Moved JavaScript
javascript
23 Posts 5 Posters 3.8k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • paul53P paul53

    @eumats sagte:

    Datenpunkte?

    Datenpunkte sind immer global (Skript übergreifend verfügbar).

    eumatsE Offline
    eumatsE Offline
    eumats
    wrote on last edited by
    #9

    @paul53

    Heist das ich kann einem Datenpunkt einen Namen zuweise der dann global verfügbar ist?

    Wie mache ich z.B. den folgenden Datenpunkt so global bekannt, dass ich potentiell in jedem Skript nutzen könnte?
    javascript.0.virtualDevice.Sensoren.Regen.Regensensor

    paul53P 2 Replies Last reply
    0
    • eumatsE eumats

      @paul53

      Heist das ich kann einem Datenpunkt einen Namen zuweise der dann global verfügbar ist?

      Wie mache ich z.B. den folgenden Datenpunkt so global bekannt, dass ich potentiell in jedem Skript nutzen könnte?
      javascript.0.virtualDevice.Sensoren.Regen.Regensensor

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #10

      @eumats sagte:

      dass ich potentiell in jedem Skript nutzen könnte?

      Jeder Datenpunkt kann in jedem Skript genutzt werden. Falls der Name "Regensensor" und dieser eindeutig ist, kann die ID aus dem Namen ermittelt werden:

      let regen = getState(getIdByName('Regensensor')).val;
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Reply Last reply
      0
      • paul53P paul53

        @eumats sagte:

        dafür ist global doch da oder?

        In der Gruppe global legt man eigene, häufig verwendete Funktionen an. Ich habe nur eine Funktion unter global:

        function runden(val, digits) {
            return Math.round(val * Math.pow(10, digits)) / Math.pow(10, digits);
        }
        

        @eumats sagte in Zugriff auf globale Variablen in global Skripten:

        Ich bin da offen für Tipps wie man das besser machen kann.

        Eigene Module verwenden.

        AlCalzoneA Offline
        AlCalzoneA Offline
        AlCalzone
        Developer
        wrote on last edited by
        #11

        @paul53 sagte in Zugriff auf globale Variablen in global Skripten:

        Eigene Module verwenden.

        Nachteilig ist hierbei, dass es da keine Syntax-Hilfe gibt. Und TypeScript-Skripte werden so auch nicht funktionieren.
        Wenn das nicht stört, ok.

        @eumats sagte in Zugriff auf globale Variablen in global Skripten:

        Es wird dann ein "undefined" ausgegeben.

        Kannst du mir mal so ein Skript (oder einen Auszug) zeigen?
        Ich war bisher der Ansicht, dass das funktioniert.

        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

        eumatsE N 2 Replies Last reply
        0
        • eumatsE eumats

          @AlCalzone

          Variablen, die ich z.B. in der Datei "globale Variablen" definiere können z.B. unter globale Funktionen nicht genutzt werden...

          Es wird dann ein "undefined" ausgegeben.

          OstfrieseUnterwegsO Offline
          OstfrieseUnterwegsO Offline
          OstfrieseUnterwegs
          wrote on last edited by
          #12

          @eumats sagte in Zugriff auf globale Variablen in global Skripten:

          Variablen, die ich z.B. in der Datei "globale Variablen" definiere können z.B. unter globale Funktionen nicht genutzt werden...
          Es wird dann ein "undefined" ausgegeben.

          Ich glaub, das kann nicht funktionieren. Das Prinzip ist ja, dass die Scripte in 'global' quasi zur Laufzeit an den Anfang eines jeden anderen Scriptes kopiert werden. Außer das Script ist selber in 'global'. Die global Scripte sind quasi voneinander isoliert. Ansonsten würde es ja eine ziemliche rekursive hin-und-her Kopiererei geben.

          1 Reply Last reply
          0
          • AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            wrote on last edited by
            #13

            Wenn die Reihenfolge stimmt, dann schon (erst Variablen, dann Funktionen, die diese nutzen). Wie man das garantiert, weiß ich aber gerade auch nicht - mein Skripte-Tab lädt nicht.

            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

            1 Reply Last reply
            0
            • eumatsE eumats

              @paul53

              Heist das ich kann einem Datenpunkt einen Namen zuweise der dann global verfügbar ist?

              Wie mache ich z.B. den folgenden Datenpunkt so global bekannt, dass ich potentiell in jedem Skript nutzen könnte?
              javascript.0.virtualDevice.Sensoren.Regen.Regensensor

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by paul53
              #14

              @eumats sagte:

              Wie mache ich z.B. den folgenden Datenpunkt so global bekannt, dass ich potentiell in jedem Skript nutzen könnte?

              Habe es getestet. Im globalen Skript globalIDs:

              const idRegen = 'javascript.0.virtualDevice.Sensoren.Regen.Regensensor';
              

              In einem Test-Skript unter common:

              globalIDs.JPG

              Es ist also möglich, immer wieder benötigte IDs unter global zuzuweisen. Der Editor meckert natürlich, da die ID nicht innerhalb des editierten Skripts deklariert ist. Das macht er aber auch bei Aufruf globaler Funktionen.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              AlCalzoneA eumatsE 2 Replies Last reply
              2
              • paul53P paul53

                @eumats sagte:

                Wie mache ich z.B. den folgenden Datenpunkt so global bekannt, dass ich potentiell in jedem Skript nutzen könnte?

                Habe es getestet. Im globalen Skript globalIDs:

                const idRegen = 'javascript.0.virtualDevice.Sensoren.Regen.Regensensor';
                

                In einem Test-Skript unter common:

                globalIDs.JPG

                Es ist also möglich, immer wieder benötigte IDs unter global zuzuweisen. Der Editor meckert natürlich, da die ID nicht innerhalb des editierten Skripts deklariert ist. Das macht er aber auch bei Aufruf globaler Funktionen.

                AlCalzoneA Offline
                AlCalzoneA Offline
                AlCalzone
                Developer
                wrote on last edited by
                #15

                @paul53 sagte in Zugriff auf globale Variablen in global Skripten:

                Der Editor meckert natürlich

                Spätestens nach dem Speichern und erneuten Laden des Skript-Tabs sollte er das nicht mehr tun:
                dcb826de-8c9b-4b4a-aa93-a4850e16446a-grafik.png
                Die Variable ist im globalen Skript definiert.

                Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                paul53P 1 Reply Last reply
                0
                • AlCalzoneA AlCalzone

                  @paul53 sagte in Zugriff auf globale Variablen in global Skripten:

                  Der Editor meckert natürlich

                  Spätestens nach dem Speichern und erneuten Laden des Skript-Tabs sollte er das nicht mehr tun:
                  dcb826de-8c9b-4b4a-aa93-a4850e16446a-grafik.png
                  Die Variable ist im globalen Skript definiert.

                  paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by
                  #16

                  @AlCalzone sagte:

                  nach dem Speichern und erneuten Laden des Skript-Tabs sollte er das nicht mehr tun:

                  Stimmt.

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Reply Last reply
                  0
                  • paul53P paul53

                    @eumats sagte:

                    Wie mache ich z.B. den folgenden Datenpunkt so global bekannt, dass ich potentiell in jedem Skript nutzen könnte?

                    Habe es getestet. Im globalen Skript globalIDs:

                    const idRegen = 'javascript.0.virtualDevice.Sensoren.Regen.Regensensor';
                    

                    In einem Test-Skript unter common:

                    globalIDs.JPG

                    Es ist also möglich, immer wieder benötigte IDs unter global zuzuweisen. Der Editor meckert natürlich, da die ID nicht innerhalb des editierten Skripts deklariert ist. Das macht er aber auch bei Aufruf globaler Funktionen.

                    eumatsE Offline
                    eumatsE Offline
                    eumats
                    wrote on last edited by
                    #17

                    @paul53

                    Genau. So herum klappt es. Also in global definieren und in common nutzen. Nur die Nutzung in einem anderen global Skript nicht.

                    1 Reply Last reply
                    0
                    • AlCalzoneA AlCalzone

                      @paul53 sagte in Zugriff auf globale Variablen in global Skripten:

                      Eigene Module verwenden.

                      Nachteilig ist hierbei, dass es da keine Syntax-Hilfe gibt. Und TypeScript-Skripte werden so auch nicht funktionieren.
                      Wenn das nicht stört, ok.

                      @eumats sagte in Zugriff auf globale Variablen in global Skripten:

                      Es wird dann ein "undefined" ausgegeben.

                      Kannst du mir mal so ein Skript (oder einen Auszug) zeigen?
                      Ich war bisher der Ansicht, dass das funktioniert.

                      eumatsE Offline
                      eumatsE Offline
                      eumats
                      wrote on last edited by
                      #18

                      @AlCalzone

                      Man kann das gut analog zum Test von paul53 testen. Nur das beide Skripte in global liegen.

                      Also z.B.:

                      Skript 1: const idRegen = 'javascript.0.virtualDevice.Sensoren.Regen.Regensensor';
                      Skript 2: log(idRegen)
                      

                      Bei mir kommt dann im Log ein "undefined".

                      AlCalzoneA 1 Reply Last reply
                      0
                      • eumatsE eumats

                        @AlCalzone

                        Man kann das gut analog zum Test von paul53 testen. Nur das beide Skripte in global liegen.

                        Also z.B.:

                        Skript 1: const idRegen = 'javascript.0.virtualDevice.Sensoren.Regen.Regensensor';
                        Skript 2: log(idRegen)
                        

                        Bei mir kommt dann im Log ein "undefined".

                        AlCalzoneA Offline
                        AlCalzoneA Offline
                        AlCalzone
                        Developer
                        wrote on last edited by
                        #19

                        @eumats Bei mir nicht und es scheint daran zu liegen, in welcher Reihenfolge die globalen Skripte angelegt wurden. Die folgenden wurden in der Reihenfolge g1, g2, c erstellt:

                        // global/g1
                        const foo = "123";
                        
                        // global/g2
                        log(foo);
                        
                        // common/c
                        log("abc")
                        

                        174bc9cd-a8ad-4a36-86fe-7011f0c7ff32-grafik.png

                        Füge ich jetzt aber ein zusätzliches globales Skript ein und erstelle darin eine ID, habe ich aus den vorher existierenden keinen Zugriff darauf, unabhängig vom Namen.

                        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                        paul53P 1 Reply Last reply
                        1
                        • AlCalzoneA AlCalzone

                          @eumats Bei mir nicht und es scheint daran zu liegen, in welcher Reihenfolge die globalen Skripte angelegt wurden. Die folgenden wurden in der Reihenfolge g1, g2, c erstellt:

                          // global/g1
                          const foo = "123";
                          
                          // global/g2
                          log(foo);
                          
                          // common/c
                          log("abc")
                          

                          174bc9cd-a8ad-4a36-86fe-7011f0c7ff32-grafik.png

                          Füge ich jetzt aber ein zusätzliches globales Skript ein und erstelle darin eine ID, habe ich aus den vorher existierenden keinen Zugriff darauf, unabhängig vom Namen.

                          paul53P Offline
                          paul53P Offline
                          paul53
                          wrote on last edited by paul53
                          #20

                          @AlCalzone sagte:

                          in welcher Reihenfolge die globalen Skripte angelegt wurden.

                          Ja, bei Deklaration mit const und let. Siehe Ausschnitt aus Mozilla:

                          Für const gelten die gleichen Regel hinsichtlich der toten Zone wie für let. Auch Konstanten sind erst nach ihrer Deklaration verfügbar, nicht jedoch zwischen dem Beginn des Blocks und der Deklaration.
                          Dies ist ein Unterschied zur Variablendeklaration mit var. Mit var deklarierte Variablen sind in der gesamten Funktion verfügbar, in der sie deklariert wurden, selbst falls die Variablendeklaration die letzte Anweisung der Funktion war.

                          Abhilfe: Deklaration mit var

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          1 Reply Last reply
                          2
                          • eumatsE Offline
                            eumatsE Offline
                            eumats
                            wrote on last edited by
                            #21

                            Die korrekte Reihenfolge unter global war die Lösung. Ich habe jetzt die Datei mit den globalen Variablen in "1_globaleVariablen" und die Datei in der sie u.a. genutzt werden in "8_steuereRollaedenEG" umbenannt. Und schon klappt das Ganze! Die Variable werden mit var definiert.

                            Danke für Eure Hilfe...

                            1 Reply Last reply
                            0
                            • AlCalzoneA AlCalzone

                              @paul53 sagte in Zugriff auf globale Variablen in global Skripten:

                              Eigene Module verwenden.

                              Nachteilig ist hierbei, dass es da keine Syntax-Hilfe gibt. Und TypeScript-Skripte werden so auch nicht funktionieren.
                              Wenn das nicht stört, ok.

                              @eumats sagte in Zugriff auf globale Variablen in global Skripten:

                              Es wird dann ein "undefined" ausgegeben.

                              Kannst du mir mal so ein Skript (oder einen Auszug) zeigen?
                              Ich war bisher der Ansicht, dass das funktioniert.

                              N Offline
                              N Offline
                              noox
                              wrote on last edited by noox
                              #22

                              @AlCalzone said in Zugriff auf globale Variablen in global Skripten:

                              Zum Thema eigene Module und TypeScript:

                              Nachteilig ist hierbei, dass es da keine Syntax-Hilfe gibt. Und TypeScript-Skripte werden so auch nicht funktionieren.

                              Syntax-Hilfe für TypeScript hätte ich sogar zusammengebracht. Ich hab mir gestern Visual Studio Code installiert und Remote Development eingerichtet.

                              Im eigenen Script dann oben hinzugefügt:

                              /// <reference path='../../node_modules/iobroker.javascript/lib/javascript.d.ts' />
                              

                              Ob das sinnvoll ist, weiß ich nicht. Aber da ich mit TypeScript dann sowieso nicht weiter komme, eher nicht:

                              Ich hab bisher nur das eine oder andere Angular-Projekt im Visual Studio (nicht Code) eingerichtet. Und bin daher bezüglich TypeScript-Einrichten alles andere als ein Experte. Aber ich befürchte, dass es nicht möglich ist, ein eigenes TS-Script in den Build-Prozess zu integrieren, sodass es dann mit

                              import { Light } from '../../../iobroker-data/modules/Light';
                              

                              oder ähnlich eingebunden werden kann. Oder gibt's eine andere Möglichkeit, es einzubinden?

                              AlCalzoneA 1 Reply Last reply
                              0
                              • N noox

                                @AlCalzone said in Zugriff auf globale Variablen in global Skripten:

                                Zum Thema eigene Module und TypeScript:

                                Nachteilig ist hierbei, dass es da keine Syntax-Hilfe gibt. Und TypeScript-Skripte werden so auch nicht funktionieren.

                                Syntax-Hilfe für TypeScript hätte ich sogar zusammengebracht. Ich hab mir gestern Visual Studio Code installiert und Remote Development eingerichtet.

                                Im eigenen Script dann oben hinzugefügt:

                                /// <reference path='../../node_modules/iobroker.javascript/lib/javascript.d.ts' />
                                

                                Ob das sinnvoll ist, weiß ich nicht. Aber da ich mit TypeScript dann sowieso nicht weiter komme, eher nicht:

                                Ich hab bisher nur das eine oder andere Angular-Projekt im Visual Studio (nicht Code) eingerichtet. Und bin daher bezüglich TypeScript-Einrichten alles andere als ein Experte. Aber ich befürchte, dass es nicht möglich ist, ein eigenes TS-Script in den Build-Prozess zu integrieren, sodass es dann mit

                                import { Light } from '../../../iobroker-data/modules/Light';
                                

                                oder ähnlich eingebunden werden kann. Oder gibt's eine andere Möglichkeit, es einzubinden?

                                AlCalzoneA Offline
                                AlCalzoneA Offline
                                AlCalzone
                                Developer
                                wrote on last edited by
                                #23

                                @noox sagte in Zugriff auf globale Variablen in global Skripten:

                                Aber ich befürchte, dass es nicht möglich ist,

                                Ich weiß es ehrlich gesagt nicht, ohne es zu probieren. Solange es da eine Light.js und Light.d.ts gibt, dürfte es ggf. gehen.

                                Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                1 Reply Last reply
                                0
                                Reply
                                • Reply as topic
                                Log in to reply
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                524

                                Online

                                32.5k

                                Users

                                81.6k

                                Topics

                                1.3m

                                Posts
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                ioBroker Community 2014-2025
                                logo
                                • Login

                                • Don't have an account? Register

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Home
                                • Recent
                                • Tags
                                • Unread 0
                                • Categories
                                • Unreplied
                                • Popular
                                • GitHub
                                • Docu
                                • Hilfe