Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Zentrale Scripts mit Funktionen oder Konstanten in ioBroker

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    13
    1
    1.7k

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    2.3k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    1.2k

Zentrale Scripts mit Funktionen oder Konstanten in ioBroker

Geplant Angeheftet Gesperrt Verschoben JavaScript
8 Beiträge 3 Kommentatoren 41 Aufrufe 2 Beobachtet
  • Ä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.
  • Norwegen60N Offline
    Norwegen60N Offline
    Norwegen60
    schrieb zuletzt editiert von Norwegen60
    #1

    Hallo zusammen,

    ich möchte in ioBroker ein oder zwei Scripte erstellen in denen ich für mein Projekt allgemeine Konstanten und Funktionen hinterlegen kann und von anderen Java-Scripten darauf zugreifen. Ich habe dazu im Ordner "Allgemeine Scripte (common)" das Script GPS_Config angleget

    // --------------------------------------------------------------------------
    // global/GPS_Config
    // 2026-06-12a: zentrale GPS Konfiguration
    // --------------------------------------------------------------------------
    var GPS_Config = {
        LatHome:        47.3
        LonHome:        7.8
        RadiusHome:     500,
        MaxJump:        200,
        NightStart:     21,
        NightEnd:       7,
        PauseThreshold: 2 * 3600 * 1000
    };
    
    function haversine(lat1, lon1, lat2, lon2) {
        const R = 6371000;
        const toRad = x => x * Math.PI / 180;
        const dLat = toRad(lat2 - lat1);
        const dLon = toRad(lon2 - lon1);
        const a = Math.sin(dLat/2) * Math.sin(dLat/2)
                + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2))
                * Math.sin(dLon/2) * Math.sin(dLon/2);
        return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    }
    
    

    Wenn ich auf die Werte und Funktionen mit

    log(GPS_Config.LatHome);      
    log(haversine(47.0, 7.0, 47.1, 7.1).toFixed(0) + 'm');
    

    zugreifen will bekomme ich

    javascript.0	17:08:09.742	error Error: ReferenceError: GPS_Config is not defined
    javascript.0	17:08:09.742	error at script.js.GPS_Test:2:5
    javascript.0	17:08:09.742	error at script.js.GPS_Test:9:3
    javascript.0	17:08:09.742	error at Script.runInContext (node:vm:149:12)
    

    Gibt es eine Möglichkeit zentrale Konstanten und Funktionen zu definieren?

    Danke und Grüße
    Gerd

    paul53P OliverIOO 2 Antworten Letzte Antwort
    0
    • Norwegen60N Norwegen60

      Hallo zusammen,

      ich möchte in ioBroker ein oder zwei Scripte erstellen in denen ich für mein Projekt allgemeine Konstanten und Funktionen hinterlegen kann und von anderen Java-Scripten darauf zugreifen. Ich habe dazu im Ordner "Allgemeine Scripte (common)" das Script GPS_Config angleget

      // --------------------------------------------------------------------------
      // global/GPS_Config
      // 2026-06-12a: zentrale GPS Konfiguration
      // --------------------------------------------------------------------------
      var GPS_Config = {
          LatHome:        47.3
          LonHome:        7.8
          RadiusHome:     500,
          MaxJump:        200,
          NightStart:     21,
          NightEnd:       7,
          PauseThreshold: 2 * 3600 * 1000
      };
      
      function haversine(lat1, lon1, lat2, lon2) {
          const R = 6371000;
          const toRad = x => x * Math.PI / 180;
          const dLat = toRad(lat2 - lat1);
          const dLon = toRad(lon2 - lon1);
          const a = Math.sin(dLat/2) * Math.sin(dLat/2)
                  + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2))
                  * Math.sin(dLon/2) * Math.sin(dLon/2);
          return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
      }
      
      

      Wenn ich auf die Werte und Funktionen mit

      log(GPS_Config.LatHome);      
      log(haversine(47.0, 7.0, 47.1, 7.1).toFixed(0) + 'm');
      

      zugreifen will bekomme ich

      javascript.0	17:08:09.742	error Error: ReferenceError: GPS_Config is not defined
      javascript.0	17:08:09.742	error at script.js.GPS_Test:2:5
      javascript.0	17:08:09.742	error at script.js.GPS_Test:9:3
      javascript.0	17:08:09.742	error at Script.runInContext (node:vm:149:12)
      

      Gibt es eine Möglichkeit zentrale Konstanten und Funktionen zu definieren?

      Danke und Grüße
      Gerd

      paul53P Offline
      paul53P Offline
      paul53
      schrieb zuletzt editiert von paul53
      #2

      @Norwegen60 [sagte: Gibt es eine Möglichkeit zentrale Konstanten und Funktionen zu definieren?

      Häufig verwendete eigene Funktionen werden in Skripten unter der Gruppe "global" (Expertenmodus) definiert.
      Globale Skripte werden vor dem Kompilieren in alle anderen Skripte kopiert und dort ausgeführt.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

      1 Antwort Letzte Antwort
      0
      • Norwegen60N Offline
        Norwegen60N Offline
        Norwegen60
        schrieb zuletzt editiert von
        #3

        Vielen Dank für die schnelle Antwort. Gibt es einen Grund dass dort keine Konstanten definiert werden sollen. Es handelt sich um ein geschlossenes Projekt das auf dem Raspberry läuft. Die Anzahl der Scripte wird wohl bei 10 +/- liegen

        paul53P 1 Antwort Letzte Antwort
        0
        • Norwegen60N Norwegen60

          Hallo zusammen,

          ich möchte in ioBroker ein oder zwei Scripte erstellen in denen ich für mein Projekt allgemeine Konstanten und Funktionen hinterlegen kann und von anderen Java-Scripten darauf zugreifen. Ich habe dazu im Ordner "Allgemeine Scripte (common)" das Script GPS_Config angleget

          // --------------------------------------------------------------------------
          // global/GPS_Config
          // 2026-06-12a: zentrale GPS Konfiguration
          // --------------------------------------------------------------------------
          var GPS_Config = {
              LatHome:        47.3
              LonHome:        7.8
              RadiusHome:     500,
              MaxJump:        200,
              NightStart:     21,
              NightEnd:       7,
              PauseThreshold: 2 * 3600 * 1000
          };
          
          function haversine(lat1, lon1, lat2, lon2) {
              const R = 6371000;
              const toRad = x => x * Math.PI / 180;
              const dLat = toRad(lat2 - lat1);
              const dLon = toRad(lon2 - lon1);
              const a = Math.sin(dLat/2) * Math.sin(dLat/2)
                      + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2))
                      * Math.sin(dLon/2) * Math.sin(dLon/2);
              return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
          }
          
          

          Wenn ich auf die Werte und Funktionen mit

          log(GPS_Config.LatHome);      
          log(haversine(47.0, 7.0, 47.1, 7.1).toFixed(0) + 'm');
          

          zugreifen will bekomme ich

          javascript.0	17:08:09.742	error Error: ReferenceError: GPS_Config is not defined
          javascript.0	17:08:09.742	error at script.js.GPS_Test:2:5
          javascript.0	17:08:09.742	error at script.js.GPS_Test:9:3
          javascript.0	17:08:09.742	error at Script.runInContext (node:vm:149:12)
          

          Gibt es eine Möglichkeit zentrale Konstanten und Funktionen zu definieren?

          Danke und Grüße
          Gerd

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          schrieb zuletzt editiert von
          #4

          @Norwegen60

          wie paul schon geschrieben hat, werden die globalskripte einfach nur intern vor jedes skript kopiert. das jeweilige skript läuft in seinem eigenen namensraum und weiß von den anderen skripten/global skripten erst einmal nichts.
          dh Werte die in variablen gespeichert werden, stehen den anderen skripten nicht zur verfügung.
          dazu müsste man ein separates skript schreiben mit welchem man mit messageTo und onMessage kommunizieren kann. Wobei da sich eher Datenpunkte anbieten.

          Aber für Konstanten und allgemeine Funktionen die zustandslos arbeiten ist das so ok

          Meine Adapter und Widgets
          TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
          Links im Profil

          1 Antwort Letzte Antwort
          0
          • Norwegen60N Offline
            Norwegen60N Offline
            Norwegen60
            schrieb zuletzt editiert von
            #5

            Ich weiß, ich könnte die Werte auch in Datenpunkte auslagern, aber der Weg über eine zentrale Config erschien mir für diese spezifischen Werte übersichtlicher als immer über GetState().val darauf zuzugreifen

            1 Antwort Letzte Antwort
            0
            • Norwegen60N Norwegen60

              Vielen Dank für die schnelle Antwort. Gibt es einen Grund dass dort keine Konstanten definiert werden sollen. Es handelt sich um ein geschlossenes Projekt das auf dem Raspberry läuft. Die Anzahl der Scripte wird wohl bei 10 +/- liegen

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

              @Norwegen60 [sagte]: Gibt es einen Grund dass dort keine Konstanten definiert werden sollen.

              Ich denke, dass Konstanten in jedem Skript RAM belegen, was auf getState(id) allerdings auch zutrifft.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

              1 Antwort Letzte Antwort
              0
              • Norwegen60N Offline
                Norwegen60N Offline
                Norwegen60
                schrieb zuletzt editiert von Norwegen60
                #7

                Also der Tip mit Experten-Modus hat funktioniert. Danke.
                Mein Script funktioniert jetzt auch. Incl. der Konstanten.
                Wenn die Konstanten in jedes Script kopiert werden, benötigt das wahrscheinlich schon RAM, aber bei 10 Scripts dürfte das überschaubar sein. Auch wenn nicht alle Konstanten in allen Scripts benötigt werden. Wäre aber schon mal interessant.
                Ich könnte die Konstanten mal raus schmeißen. Kann ich den RAM-Verbrauch irgendwo sehen? free -h ist da wohl etwas zu grob

                OliverIOO 1 Antwort Letzte Antwort
                0
                • Norwegen60N Norwegen60

                  Also der Tip mit Experten-Modus hat funktioniert. Danke.
                  Mein Script funktioniert jetzt auch. Incl. der Konstanten.
                  Wenn die Konstanten in jedes Script kopiert werden, benötigt das wahrscheinlich schon RAM, aber bei 10 Scripts dürfte das überschaubar sein. Auch wenn nicht alle Konstanten in allen Scripts benötigt werden. Wäre aber schon mal interessant.
                  Ich könnte die Konstanten mal raus schmeißen. Kann ich den RAM-Verbrauch irgendwo sehen? free -h ist da wohl etwas zu grob

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb zuletzt editiert von
                  #8

                  @Norwegen60

                  das ist vernachlässigbar, wenn du da nicht tonnen von text oder komplexe objekte ablegst.

                  ein einzelne number konstante verbraucht max 8 Byte
                  text ca 20-30 Bytes für die Verwaltung eines Strings plus 1 byte für einfache Zeichen oder 2-4 Bytes für unicode zeichen

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  1 Antwort Letzte Antwort
                  0

                  Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                  Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                  Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                  Registrieren Anmelden
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  516

                  Online

                  32.9k

                  Benutzer

                  83.2k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2026
                  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