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

    Hallo,

    ich bin gerade dabei meine Skripte in ioBroker etwas mehr zu ordnen und oft genutzten Variablen und Funktion in global zu strukturieren.
    Um das Ganze übersichtlicher zu gestalten, habe ich dafür verschiedene "Skripte" unter global angelegt. Z.B.:

    • globale Variablen
    • globale Funktionen
    • alle Shelly Geräte
    • alle Xiaomi Geräte

    Der Zugriff funktioniert in allen Skripten unter common super, nur innerhalb von global kann ich auf die einzelnen Variablen und Funktionen der anderen Dateien nicht zugreifen.

    Gibt es da einen Trick?

    Viele Grüße eumats

    AlCalzoneA Offline
    AlCalzoneA Offline
    AlCalzone
    Developer
    schrieb am zuletzt editiert von
    #2

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

    nur innerhalb von global kann ich auf die einzelnen Variablen und Funktionen der anderen Dateien nicht zugreifen

    Woran machst du das fest? Werden sie nicht angezeigt? Es könnte dennoch gehen, bin mir gerade nicht sicher, wie die Auto-Vervollständigung bei globalen Skripten untereinander arbeitet.

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

    eumatsE 1 Antwort Letzte Antwort
    0
    • eumatsE eumats

      Hallo,

      ich bin gerade dabei meine Skripte in ioBroker etwas mehr zu ordnen und oft genutzten Variablen und Funktion in global zu strukturieren.
      Um das Ganze übersichtlicher zu gestalten, habe ich dafür verschiedene "Skripte" unter global angelegt. Z.B.:

      • globale Variablen
      • globale Funktionen
      • alle Shelly Geräte
      • alle Xiaomi Geräte

      Der Zugriff funktioniert in allen Skripten unter common super, nur innerhalb von global kann ich auf die einzelnen Variablen und Funktionen der anderen Dateien nicht zugreifen.

      Gibt es da einen Trick?

      Viele Grüße eumats

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #3

      @eumats sagte:

      "Skripte" unter global angelegt. Z.B.:

      globale Variablen
      globale Funktionen
      alle Shelly Geräte
      alle Xiaomi Geräte

      Dir ist bewusst, dass globale Skripte in jedes andere (nicht globale) Skript kopiert werden ?

      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

      eumatsE 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @eumats sagte:

        "Skripte" unter global angelegt. Z.B.:

        globale Variablen
        globale Funktionen
        alle Shelly Geräte
        alle Xiaomi Geräte

        Dir ist bewusst, dass globale Skripte in jedes andere (nicht globale) Skript kopiert werden ?

        eumatsE Offline
        eumatsE Offline
        eumats
        schrieb am zuletzt editiert von eumats
        #4

        @paul53
        Nein, das war mir nicht bewusst. Aber ich dachte dafür ist global doch da oder? Oder wo kann soll ich sonst global gültige Dinge definieren?
        Ich stehe da etwas auf dem Schlauch...

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

        paul53P 1 Antwort Letzte Antwort
        0
        • AlCalzoneA AlCalzone

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

          nur innerhalb von global kann ich auf die einzelnen Variablen und Funktionen der anderen Dateien nicht zugreifen

          Woran machst du das fest? Werden sie nicht angezeigt? Es könnte dennoch gehen, bin mir gerade nicht sicher, wie die Auto-Vervollständigung bei globalen Skripten untereinander arbeitet.

          eumatsE Offline
          eumatsE Offline
          eumats
          schrieb am zuletzt editiert von eumats
          #5

          @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 1 Antwort Letzte Antwort
          0
          • eumatsE eumats

            @paul53
            Nein, das war mir nicht bewusst. Aber ich dachte dafür ist global doch da oder? Oder wo kann soll ich sonst global gültige Dinge definieren?
            Ich stehe da etwas auf dem Schlauch...

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

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #6

            @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.

            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 1 Antwort Letzte Antwort
            0
            • eumatsE Offline
              eumatsE Offline
              eumats
              schrieb am zuletzt editiert von
              #7

              ok. Dann habe ich da wohl ein Verständnisproblem.

              Wo/wie definiere ich dann globale Variablen, Datenpunkte?

              paul53P 1 Antwort Letzte Antwort
              0
              • eumatsE eumats

                ok. Dann habe ich da wohl ein Verständnisproblem.

                Wo/wie definiere ich dann globale Variablen, Datenpunkte?

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von paul53
                #8

                @eumats sagte:

                Datenpunkte?

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

                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

                eumatsE 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @eumats sagte:

                  Datenpunkte?

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

                  eumatsE Offline
                  eumatsE Offline
                  eumats
                  schrieb am zuletzt editiert von
                  #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 Antworten Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von
                      #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 Antworten Letzte Antwort
                      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
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • AlCalzoneA Offline
                          AlCalzoneA Offline
                          AlCalzone
                          Developer
                          schrieb am zuletzt editiert von
                          #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 Antwort Letzte Antwort
                          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
                            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
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          822

                                          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