Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
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

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Zugriff auf globale Variablen in global Skripten

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
23 Beiträge 5 Kommentatoren 3.8k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • 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
    schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                2
                • eumatsE Offline
                  eumatsE Offline
                  eumats
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      825

                      Online

                      32.4k

                      Benutzer

                      81.5k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe