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. Funktionen in gemeinsame Module auslagern

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    525

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.7k

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

Funktionen in gemeinsame Module auslagern

Geplant Angeheftet Gesperrt Verschoben JavaScript
15 Beiträge 6 Kommentatoren 1.2k 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.
  • CodierknechtC Codierknecht

    @paul53 sagte in Funktionen in gemeinsame Module auslagern:

    Man kann Funktionen, die in mehreren Skripten verwendet werden sollen, in Skripten unter der Gruppe "global" (Expertenmodus!) deklarieren

    @micky
    Dabei ist allerdings zu beachten, dass die dort deklarierten Funktionen in alle anderen Scripte reinkopiert werden.
    Das bedeutet: Wird in einem Script unter "global" etwas geändert, wird die Instanz neu gestartet.
    Und wenn man dort Mist baut, schießt man sich auch schnell mal was ab.

    Das Ganze sollte also mit Vorsicht genossen werden.

    AndreiosA Offline
    AndreiosA Offline
    Andreios
    Forum Testing
    schrieb am zuletzt editiert von Andreios
    #4

    @codierknecht Was bedeutet das denn nun wirklich?
    Wenn die globalen in alle anderen kopiert werden, dann werden sie ja noch nicht aufgerufen. Hat das dann überhaupt einen Einfluss oder nur bei den Skripten, wo diese Routinen auch aufgerufen werden?

    Danke!

    Schöne Grüße
    Andreas

    ioBroker auf Raspberry 4 mit SSD. Homematik IP mit CCU 3. Shelly. MySQL. Arduino. ...

    Meine Posts sind subjektiv und manipulativ, erheben Anspruch auf Allwissenheit und können Spuren von Ironie oder Sarkasmus enthalten. ;-)

    CodierknechtC 1 Antwort Letzte Antwort
    0
    • AndreiosA Andreios

      @codierknecht Was bedeutet das denn nun wirklich?
      Wenn die globalen in alle anderen kopiert werden, dann werden sie ja noch nicht aufgerufen. Hat das dann überhaupt einen Einfluss oder nur bei den Skripten, wo diese Routinen auch aufgerufen werden?

      Danke!

      CodierknechtC Offline
      CodierknechtC Offline
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von
      #5

      @andreios sagte in Funktionen in gemeinsame Module auslagern:

      Was bedeutet das denn nun wirklich?

      Das bedeutet u.a., dass bei Änderungen an einem globalen Script die Instanz(en) neu gestartet werden müssen.
      Das "reinkopieren" passiert ja nur beim Start eines Script. Und da ja alle Scripte betroffen sind, müssen die auch alle neu gestartet werden.

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      1 Antwort Letzte Antwort
      0
      • CodierknechtC Codierknecht

        @paul53 sagte in Funktionen in gemeinsame Module auslagern:

        Man kann Funktionen, die in mehreren Skripten verwendet werden sollen, in Skripten unter der Gruppe "global" (Expertenmodus!) deklarieren

        @micky
        Dabei ist allerdings zu beachten, dass die dort deklarierten Funktionen in alle anderen Scripte reinkopiert werden.
        Das bedeutet: Wird in einem Script unter "global" etwas geändert, wird die Instanz neu gestartet.
        Und wenn man dort Mist baut, schießt man sich auch schnell mal was ab.

        Das Ganze sollte also mit Vorsicht genossen werden.

        M Offline
        M Offline
        Micky
        schrieb am zuletzt editiert von
        #6

        @codierknecht sagte in Funktionen in gemeinsame Module auslagern:

        @paul53 sagte in Funktionen in gemeinsame Module auslagern:

        Man kann Funktionen, die in mehreren Skripten verwendet werden sollen, in Skripten unter der Gruppe "global" (Expertenmodus!) deklarieren

        @micky
        Dabei ist allerdings zu beachten, dass die dort deklarierten Funktionen in alle anderen Scripte reinkopiert werden.
        Das bedeutet: Wird in einem Script unter "global" etwas geändert, wird die Instanz neu gestartet.
        Und wenn man dort Mist baut, schießt man sich auch schnell mal was ab.

        Das Ganze sollte also mit Vorsicht genossen werden.

        OK, das bedeutet dann ja erst einmal, dass die Skripte, die in global liegen, mit geladen werden, so wie z.B. bei C, wenn ich einen Header-Datei mit #include lade, aber ausgeführt wird da dann ja noch nichts. Belegt halt Speicher.

        Wenn dann in einem global-Skript ein Fehler ist, hat der dann ja auch keine Auswirkung auf Skripte, wo die Routine nicht genutzt wird, oder?

        Wenn ich dann in einem Skript eine Routine aus einem global-Skript aufrufe, dann muss bei einer Änderung im global-Skript doch auch nur das die Funktion benutzt, oder liege ich da falsch?
        Oder muss tatsächlich die Javaskript-Instanz neu gestartet werden?

        Fragen über Fragen? ;-)

        Danke!

        LG Micky

        T 1 Antwort Letzte Antwort
        0
        • M Micky

          @codierknecht sagte in Funktionen in gemeinsame Module auslagern:

          @paul53 sagte in Funktionen in gemeinsame Module auslagern:

          Man kann Funktionen, die in mehreren Skripten verwendet werden sollen, in Skripten unter der Gruppe "global" (Expertenmodus!) deklarieren

          @micky
          Dabei ist allerdings zu beachten, dass die dort deklarierten Funktionen in alle anderen Scripte reinkopiert werden.
          Das bedeutet: Wird in einem Script unter "global" etwas geändert, wird die Instanz neu gestartet.
          Und wenn man dort Mist baut, schießt man sich auch schnell mal was ab.

          Das Ganze sollte also mit Vorsicht genossen werden.

          OK, das bedeutet dann ja erst einmal, dass die Skripte, die in global liegen, mit geladen werden, so wie z.B. bei C, wenn ich einen Header-Datei mit #include lade, aber ausgeführt wird da dann ja noch nichts. Belegt halt Speicher.

          Wenn dann in einem global-Skript ein Fehler ist, hat der dann ja auch keine Auswirkung auf Skripte, wo die Routine nicht genutzt wird, oder?

          Wenn ich dann in einem Skript eine Routine aus einem global-Skript aufrufe, dann muss bei einer Änderung im global-Skript doch auch nur das die Funktion benutzt, oder liege ich da falsch?
          Oder muss tatsächlich die Javaskript-Instanz neu gestartet werden?

          Fragen über Fragen? ;-)

          Danke!

          T Nicht stören
          T Nicht stören
          ticaki
          schrieb am zuletzt editiert von
          #7

          @micky sagte in Funktionen in gemeinsame Module auslagern:

          Wenn dann in einem global-Skript ein Fehler ist, hat der dann ja auch keine Auswirkung auf Skripte, wo die Routine nicht genutzt wird, oder?

          Wenn der Code der in Global liegt in Funktionen strukturiert ist ja.

          Wenn ich dann in einem Skript eine Routine aus einem global-Skript aufrufe, dann muss bei einer Änderung im global-Skript doch auch nur das die Funktion benutzt, oder liege ich da falsch?

          Da bin ich mir nicht sicher was du meinst. Funktionen die global sind, können von jedem Skript aufgerufen werden.

          Oder muss tatsächlich die Javaskript-Instanz neu gestartet werden?

          Die Javascript Instanz startet neu, wenn ein Skript das global liegt geändert wird.

          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

          Spenden

          M 1 Antwort Letzte Antwort
          0
          • T ticaki

            @micky sagte in Funktionen in gemeinsame Module auslagern:

            Wenn dann in einem global-Skript ein Fehler ist, hat der dann ja auch keine Auswirkung auf Skripte, wo die Routine nicht genutzt wird, oder?

            Wenn der Code der in Global liegt in Funktionen strukturiert ist ja.

            Wenn ich dann in einem Skript eine Routine aus einem global-Skript aufrufe, dann muss bei einer Änderung im global-Skript doch auch nur das die Funktion benutzt, oder liege ich da falsch?

            Da bin ich mir nicht sicher was du meinst. Funktionen die global sind, können von jedem Skript aufgerufen werden.

            Oder muss tatsächlich die Javaskript-Instanz neu gestartet werden?

            Die Javascript Instanz startet neu, wenn ein Skript das global liegt geändert wird.

            M Offline
            M Offline
            Micky
            schrieb am zuletzt editiert von
            #8

            @ticaki sagte in Funktionen in gemeinsame Module auslagern:

            @micky sagte in Funktionen in gemeinsame Module auslagern:

            Wenn ich dann in einem Skript eine Routine aus einem global-Skript aufrufe, dann muss bei einer Änderung im global-Skript doch auch nur das die Funktion benutzt, oder liege ich da falsch?

            Da bin ich mir nicht sicher was du meinst. Funktionen die global sind, können von jedem Skript aufgerufen werden.

            Ups, man sollte nochmal lesen, bevor man abschickt. Ich meinte, dass bei Änderungen im globalen Skript nur die Skripte neu gestartet werden müssen, die eine Funktion aus dem globalen Skript benutzen.
            Wenn aber die Javascript-Instanz bei Änderungen am globalen Skript sowieso neu startet, stellt sich die Frage sowieso nicht mehr, da dann ja automatisch alle Skripte neu starten.

            Oder muss tatsächlich die Javaskript-Instanz neu gestartet werden?

            Die Javascript Instanz startet neu, wenn ein Skript das global liegt geändert wird.

            In meinem aktuellen Fall geht es um eine Funktion, die bestimmt, ob Tag oder Nacht ist und dabei nicht nur Sunset und Sunrise, sondern ein paar Toleranzen beachtet. Diese Funktion habe ich bisher in mehreren Skripten benutzt und immer oben hinein kopiert.
            Das macht dann ja global für mich.
            Ich werde es die Tage ausprobieren und, wenn keine Fragen mehr auftreten, den Thread auf gelöst setzen.

            Danke für die Hilfe!

            LG Micky

            MartinPM CodierknechtC 2 Antworten Letzte Antwort
            0
            • M Micky

              @ticaki sagte in Funktionen in gemeinsame Module auslagern:

              @micky sagte in Funktionen in gemeinsame Module auslagern:

              Wenn ich dann in einem Skript eine Routine aus einem global-Skript aufrufe, dann muss bei einer Änderung im global-Skript doch auch nur das die Funktion benutzt, oder liege ich da falsch?

              Da bin ich mir nicht sicher was du meinst. Funktionen die global sind, können von jedem Skript aufgerufen werden.

              Ups, man sollte nochmal lesen, bevor man abschickt. Ich meinte, dass bei Änderungen im globalen Skript nur die Skripte neu gestartet werden müssen, die eine Funktion aus dem globalen Skript benutzen.
              Wenn aber die Javascript-Instanz bei Änderungen am globalen Skript sowieso neu startet, stellt sich die Frage sowieso nicht mehr, da dann ja automatisch alle Skripte neu starten.

              Oder muss tatsächlich die Javaskript-Instanz neu gestartet werden?

              Die Javascript Instanz startet neu, wenn ein Skript das global liegt geändert wird.

              In meinem aktuellen Fall geht es um eine Funktion, die bestimmt, ob Tag oder Nacht ist und dabei nicht nur Sunset und Sunrise, sondern ein paar Toleranzen beachtet. Diese Funktion habe ich bisher in mehreren Skripten benutzt und immer oben hinein kopiert.
              Das macht dann ja global für mich.
              Ich werde es die Tage ausprobieren und, wenn keine Fragen mehr auftreten, den Thread auf gelöst setzen.

              Danke für die Hilfe!

              MartinPM Online
              MartinPM Online
              MartinP
              schrieb am zuletzt editiert von
              #9

              @micky

              so wie z.B. bei C, wenn ich einen Header-Datei mit #include

              Das ist schon etwas platzsparender, da die Header-Datei in der Regel nur Definitionen zu Klassen-/Datenstrukturen und Funktionsprototypen usw. enthält, und es einen Linker gibt, der ggfs. selektiv gewisse Dinge herauspickt, wenn eine größere Bibliothek gelinkt wird ... Der fehlt aber bei Javascript, da interpretierende Sprache...

              Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
              Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.14)
              Linux pve 6.8.12-16-pve
              6 GByte RAM für den Container
              Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
              Remote-Access über Wireguard der Fritzbox

              1 Antwort Letzte Antwort
              0
              • M Micky

                @ticaki sagte in Funktionen in gemeinsame Module auslagern:

                @micky sagte in Funktionen in gemeinsame Module auslagern:

                Wenn ich dann in einem Skript eine Routine aus einem global-Skript aufrufe, dann muss bei einer Änderung im global-Skript doch auch nur das die Funktion benutzt, oder liege ich da falsch?

                Da bin ich mir nicht sicher was du meinst. Funktionen die global sind, können von jedem Skript aufgerufen werden.

                Ups, man sollte nochmal lesen, bevor man abschickt. Ich meinte, dass bei Änderungen im globalen Skript nur die Skripte neu gestartet werden müssen, die eine Funktion aus dem globalen Skript benutzen.
                Wenn aber die Javascript-Instanz bei Änderungen am globalen Skript sowieso neu startet, stellt sich die Frage sowieso nicht mehr, da dann ja automatisch alle Skripte neu starten.

                Oder muss tatsächlich die Javaskript-Instanz neu gestartet werden?

                Die Javascript Instanz startet neu, wenn ein Skript das global liegt geändert wird.

                In meinem aktuellen Fall geht es um eine Funktion, die bestimmt, ob Tag oder Nacht ist und dabei nicht nur Sunset und Sunrise, sondern ein paar Toleranzen beachtet. Diese Funktion habe ich bisher in mehreren Skripten benutzt und immer oben hinein kopiert.
                Das macht dann ja global für mich.
                Ich werde es die Tage ausprobieren und, wenn keine Fragen mehr auftreten, den Thread auf gelöst setzen.

                Danke für die Hilfe!

                CodierknechtC Offline
                CodierknechtC Offline
                Codierknecht
                Developer Most Active
                schrieb am zuletzt editiert von
                #10

                @micky sagte in Funktionen in gemeinsame Module auslagern:

                In meinem aktuellen Fall geht es um eine Funktion, die bestimmt, ob Tag oder Nacht ist und dabei nicht nur Sunset und Sunrise, sondern ein paar Toleranzen beachtet

                Ohne diese "Toleranzen" würde vielleicht der System-Datenpunkt isDayTime unter javascript.0 ausreichen.
                Kommt halt im Einzelfall darauf an, wie genau das denn jetzt sein muss.

                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                HmIP|ZigBee|Tasmota|Unifi
                Zabbix Certified Specialist
                Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                MartinPM 1 Antwort Letzte Antwort
                0
                • CodierknechtC Codierknecht

                  @micky sagte in Funktionen in gemeinsame Module auslagern:

                  In meinem aktuellen Fall geht es um eine Funktion, die bestimmt, ob Tag oder Nacht ist und dabei nicht nur Sunset und Sunrise, sondern ein paar Toleranzen beachtet

                  Ohne diese "Toleranzen" würde vielleicht der System-Datenpunkt isDayTime unter javascript.0 ausreichen.
                  Kommt halt im Einzelfall darauf an, wie genau das denn jetzt sein muss.

                  MartinPM Online
                  MartinPM Online
                  MartinP
                  schrieb am zuletzt editiert von
                  #11

                  @codierknecht Es könnte ja jemand auf die Idee kommen, Javascript-Datenpunkte als Interface für Funktionsaufrufe zu verwenden.

                  Man schreibt die Aufrufparameter der Funktion z. B. als JSON in einen Datenpunkt, Die Funktion wird durch das Aktualisieren des Datenpunktes getriggert, und liefert ihr Ergebnis in einem anderen Datenpunkt wieder ab ...

                  Der Overhead wird da aber nicht zu verachten sein ;-)

                  Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                  Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.14)
                  Linux pve 6.8.12-16-pve
                  6 GByte RAM für den Container
                  Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                  Remote-Access über Wireguard der Fritzbox

                  CodierknechtC T 2 Antworten Letzte Antwort
                  0
                  • MartinPM MartinP

                    @codierknecht Es könnte ja jemand auf die Idee kommen, Javascript-Datenpunkte als Interface für Funktionsaufrufe zu verwenden.

                    Man schreibt die Aufrufparameter der Funktion z. B. als JSON in einen Datenpunkt, Die Funktion wird durch das Aktualisieren des Datenpunktes getriggert, und liefert ihr Ergebnis in einem anderen Datenpunkt wieder ab ...

                    Der Overhead wird da aber nicht zu verachten sein ;-)

                    CodierknechtC Offline
                    CodierknechtC Offline
                    Codierknecht
                    Developer Most Active
                    schrieb am zuletzt editiert von
                    #12

                    @martinp
                    Macht aber weniger Zicken als 'ne globale Funktion.
                    Hat was ...

                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                    Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                    HmIP|ZigBee|Tasmota|Unifi
                    Zabbix Certified Specialist
                    Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                    MartinPM 1 Antwort Letzte Antwort
                    0
                    • CodierknechtC Codierknecht

                      @martinp
                      Macht aber weniger Zicken als 'ne globale Funktion.
                      Hat was ...

                      MartinPM Online
                      MartinPM Online
                      MartinP
                      schrieb am zuletzt editiert von
                      #13

                      @codierknecht said in Funktionen in gemeinsame Module auslagern:

                      @martinp
                      Macht aber weniger Zicken als 'ne globale Funktion.
                      Hat was ...

                      Reentrancy muss man wohl auch nicht beachten vermute ich? Zumindest solange man innerhalb einer Javascript-Instanz bleibt ...

                      Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                      Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.14)
                      Linux pve 6.8.12-16-pve
                      6 GByte RAM für den Container
                      Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                      Remote-Access über Wireguard der Fritzbox

                      1 Antwort Letzte Antwort
                      0
                      • MartinPM MartinP

                        @codierknecht Es könnte ja jemand auf die Idee kommen, Javascript-Datenpunkte als Interface für Funktionsaufrufe zu verwenden.

                        Man schreibt die Aufrufparameter der Funktion z. B. als JSON in einen Datenpunkt, Die Funktion wird durch das Aktualisieren des Datenpunktes getriggert, und liefert ihr Ergebnis in einem anderen Datenpunkt wieder ab ...

                        Der Overhead wird da aber nicht zu verachten sein ;-)

                        T Nicht stören
                        T Nicht stören
                        ticaki
                        schrieb am zuletzt editiert von ticaki
                        #14

                        @martinp sagte in Funktionen in gemeinsame Module auslagern:

                        @codierknecht
                        Man schreibt die Aufrufparameter der Funktion

                        Wieso das... geht doch viel umständlicher :D

                         new Function('val1', 'val2', `${getState('meine.umwerfende.Funktion.als.string').val}`)(daten1, daten2);
                        

                        Darfst halte keine getState usw. drin benutzen.

                        Abgesehen davon, die Javascript Instanze startet unabhängig von deinen Wünschen neu, wenn ein globales Skript geändert wurde. Falls das nicht klar war. :)

                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                        Spenden

                        CodierknechtC 1 Antwort Letzte Antwort
                        0
                        • T ticaki

                          @martinp sagte in Funktionen in gemeinsame Module auslagern:

                          @codierknecht
                          Man schreibt die Aufrufparameter der Funktion

                          Wieso das... geht doch viel umständlicher :D

                           new Function('val1', 'val2', `${getState('meine.umwerfende.Funktion.als.string').val}`)(daten1, daten2);
                          

                          Darfst halte keine getState usw. drin benutzen.

                          Abgesehen davon, die Javascript Instanze startet unabhängig von deinen Wünschen neu, wenn ein globales Skript geändert wurde. Falls das nicht klar war. :)

                          CodierknechtC Offline
                          CodierknechtC Offline
                          Codierknecht
                          Developer Most Active
                          schrieb am zuletzt editiert von
                          #15

                          @ticaki sagte in Funktionen in gemeinsame Module auslagern:

                          Falls das nicht klar war

                          Mir schon ;-)

                          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                          HmIP|ZigBee|Tasmota|Unifi
                          Zabbix Certified Specialist
                          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                          1 Antwort Letzte Antwort
                          1
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          875

                          Online

                          32.5k

                          Benutzer

                          81.8k

                          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