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
    506

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

    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 Offline
          MartinPM Offline
          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 Offline
              MartinPM Offline
              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 Offline
                  MartinPM Offline
                  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

                      899

                      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