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. ✔ require auf Skriptdatei und Zugriff auf var

NEWS

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

  • 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

✔ require auf Skriptdatei und Zugriff auf var

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 4 Kommentatoren 1.6k Aufrufe 2 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.
  • ScroungerS Offline
    ScroungerS Offline
    Scrounger
    Developer
    schrieb am zuletzt editiert von Scrounger
    #1

    Hallo zusammen,

    ich lasse mir von meinem Adapter linkeddevices automatisch ein Skript erzeugen, dass alle verlinkten Datenpunkte als variablen darstellt:

    var linkeddevices0 = {};
    
    linkeddevices0.Bad = {};
    linkeddevices0.Bad.Lampe5 = {};
    linkeddevices0.Bad.Lampe5.Ein = {};
    linkeddevices0.Bad.Lampe5.Ein.getId = function(){return "linkeddevices.0.Bad.Lampe5.Ein"};
    linkeddevices0.Bad.Lampe5.Ein.getState = function(){return getState("linkeddevices.0.Bad.Lampe5.Ein")};
    linkeddevices0.Bad.Lampe5.Ein.setState = function(val, ack){return setState("linkeddevices.0.Bad.Lampe5.Ein", val, ack)};
    linkeddevices0.Bad.Lampe5.Ein.setStateDelayed = function(val, ack, delay){return setStateDelayed("linkeddevices.0.Bad.Lampe5.Ein", val, ack, delay)};
    linkeddevices0.Bad.Lampe5.Ein.getObject = function(){return getObject("linkeddevices.0.Bad.Lampe5.Ein")};
    
    
    linkeddevices0.duration = {};
    linkeddevices0.duration.getId = function(){return "linkeddevices.0.duration"};
    linkeddevices0.duration.getState = function(){return getState("linkeddevices.0.duration")};
    linkeddevices0.duration.setState = function(val, ack){return setState("linkeddevices.0.duration", val, ack)};
    linkeddevices0.duration.setStateDelayed = function(val, ack, delay){return setStateDelayed("linkeddevices.0.duration", val, ack, delay)};
    linkeddevices0.duration.getObject = function(){return getObject("linkeddevices.0.duration")};
    
    
    linkeddevices0.Licht = {};
    linkeddevices0.Licht.Flur = {};
    linkeddevices0.Licht.Flur.STATE = {};
    linkeddevices0.Licht.Flur.STATE.getId = function(){return "linkeddevices.0.Licht.Flur.STATE"};
    linkeddevices0.Licht.Flur.STATE.getState = function(){return getState("linkeddevices.0.Licht.Flur.STATE")};
    linkeddevices0.Licht.Flur.STATE.setState = function(val, ack){return setState("linkeddevices.0.Licht.Flur.STATE", val, ack)};
    linkeddevices0.Licht.Flur.STATE.setStateDelayed = function(val, ack, delay){return setStateDelayed("linkeddevices.0.Licht.Flur.STATE", val, ack, delay)};
    linkeddevices0.Licht.Flur.STATE.getObject = function(){return getObject("linkeddevices.0.Licht.Flur.STATE")};
    

    Wenn man das jetzt in ein globales Skript kopiert kann man z.B. mit

    console.log(linkeddevices0.Licht.Flur.STATE.getState().val)
    

    den aktuellen Wert abrufen.

    Allerdings ist die Methode mit dem copy & paste in ein globales Skript nicht so userfreundlich.
    Deshalb habe ich versucht, mit

    var meinSkript = require("ioBroker.linkeddevices/scripts/linkeddevices0");
    
    console.log(meinSkript .linkeddevices0.Licht.Flur.STATE.getState().val);
    

    die automatische erzeugte Datei in ein Skript einzubinden.

    Leider ohne Erfolg.
    Hoffe es kann mir jemand einen Tipp geben wie ich das korrekt implementieren kann?

    <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

    <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

    paul53P 2 Antworten Letzte Antwort
    0
    • ScroungerS Scrounger

      Hallo zusammen,

      ich lasse mir von meinem Adapter linkeddevices automatisch ein Skript erzeugen, dass alle verlinkten Datenpunkte als variablen darstellt:

      var linkeddevices0 = {};
      
      linkeddevices0.Bad = {};
      linkeddevices0.Bad.Lampe5 = {};
      linkeddevices0.Bad.Lampe5.Ein = {};
      linkeddevices0.Bad.Lampe5.Ein.getId = function(){return "linkeddevices.0.Bad.Lampe5.Ein"};
      linkeddevices0.Bad.Lampe5.Ein.getState = function(){return getState("linkeddevices.0.Bad.Lampe5.Ein")};
      linkeddevices0.Bad.Lampe5.Ein.setState = function(val, ack){return setState("linkeddevices.0.Bad.Lampe5.Ein", val, ack)};
      linkeddevices0.Bad.Lampe5.Ein.setStateDelayed = function(val, ack, delay){return setStateDelayed("linkeddevices.0.Bad.Lampe5.Ein", val, ack, delay)};
      linkeddevices0.Bad.Lampe5.Ein.getObject = function(){return getObject("linkeddevices.0.Bad.Lampe5.Ein")};
      
      
      linkeddevices0.duration = {};
      linkeddevices0.duration.getId = function(){return "linkeddevices.0.duration"};
      linkeddevices0.duration.getState = function(){return getState("linkeddevices.0.duration")};
      linkeddevices0.duration.setState = function(val, ack){return setState("linkeddevices.0.duration", val, ack)};
      linkeddevices0.duration.setStateDelayed = function(val, ack, delay){return setStateDelayed("linkeddevices.0.duration", val, ack, delay)};
      linkeddevices0.duration.getObject = function(){return getObject("linkeddevices.0.duration")};
      
      
      linkeddevices0.Licht = {};
      linkeddevices0.Licht.Flur = {};
      linkeddevices0.Licht.Flur.STATE = {};
      linkeddevices0.Licht.Flur.STATE.getId = function(){return "linkeddevices.0.Licht.Flur.STATE"};
      linkeddevices0.Licht.Flur.STATE.getState = function(){return getState("linkeddevices.0.Licht.Flur.STATE")};
      linkeddevices0.Licht.Flur.STATE.setState = function(val, ack){return setState("linkeddevices.0.Licht.Flur.STATE", val, ack)};
      linkeddevices0.Licht.Flur.STATE.setStateDelayed = function(val, ack, delay){return setStateDelayed("linkeddevices.0.Licht.Flur.STATE", val, ack, delay)};
      linkeddevices0.Licht.Flur.STATE.getObject = function(){return getObject("linkeddevices.0.Licht.Flur.STATE")};
      

      Wenn man das jetzt in ein globales Skript kopiert kann man z.B. mit

      console.log(linkeddevices0.Licht.Flur.STATE.getState().val)
      

      den aktuellen Wert abrufen.

      Allerdings ist die Methode mit dem copy & paste in ein globales Skript nicht so userfreundlich.
      Deshalb habe ich versucht, mit

      var meinSkript = require("ioBroker.linkeddevices/scripts/linkeddevices0");
      
      console.log(meinSkript .linkeddevices0.Licht.Flur.STATE.getState().val);
      

      die automatische erzeugte Datei in ein Skript einzubinden.

      Leider ohne Erfolg.
      Hoffe es kann mir jemand einen Tipp geben wie ich das korrekt implementieren kann?

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

      @Scrounger
      require(Pfad) dient zum Laden von Node Modulen. Wenn die Datei aus einem Skript heraus geladen werden soll, muss die Pfadangabe relativ zum Pfad des Javascriptadapters (iobroker/node_modules/iobroker.javascript/node_modules) sein. Ich hatte es mal hier getestet. Das Test-Skript, das geladen wird, sieht so aus:

      'use strict';
      module.exports = function () {
         return {result: 'mein Modul'};
      };
      

      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

      ScroungerS 1 Antwort Letzte Antwort
      0
      • ScroungerS Scrounger

        Hallo zusammen,

        ich lasse mir von meinem Adapter linkeddevices automatisch ein Skript erzeugen, dass alle verlinkten Datenpunkte als variablen darstellt:

        var linkeddevices0 = {};
        
        linkeddevices0.Bad = {};
        linkeddevices0.Bad.Lampe5 = {};
        linkeddevices0.Bad.Lampe5.Ein = {};
        linkeddevices0.Bad.Lampe5.Ein.getId = function(){return "linkeddevices.0.Bad.Lampe5.Ein"};
        linkeddevices0.Bad.Lampe5.Ein.getState = function(){return getState("linkeddevices.0.Bad.Lampe5.Ein")};
        linkeddevices0.Bad.Lampe5.Ein.setState = function(val, ack){return setState("linkeddevices.0.Bad.Lampe5.Ein", val, ack)};
        linkeddevices0.Bad.Lampe5.Ein.setStateDelayed = function(val, ack, delay){return setStateDelayed("linkeddevices.0.Bad.Lampe5.Ein", val, ack, delay)};
        linkeddevices0.Bad.Lampe5.Ein.getObject = function(){return getObject("linkeddevices.0.Bad.Lampe5.Ein")};
        
        
        linkeddevices0.duration = {};
        linkeddevices0.duration.getId = function(){return "linkeddevices.0.duration"};
        linkeddevices0.duration.getState = function(){return getState("linkeddevices.0.duration")};
        linkeddevices0.duration.setState = function(val, ack){return setState("linkeddevices.0.duration", val, ack)};
        linkeddevices0.duration.setStateDelayed = function(val, ack, delay){return setStateDelayed("linkeddevices.0.duration", val, ack, delay)};
        linkeddevices0.duration.getObject = function(){return getObject("linkeddevices.0.duration")};
        
        
        linkeddevices0.Licht = {};
        linkeddevices0.Licht.Flur = {};
        linkeddevices0.Licht.Flur.STATE = {};
        linkeddevices0.Licht.Flur.STATE.getId = function(){return "linkeddevices.0.Licht.Flur.STATE"};
        linkeddevices0.Licht.Flur.STATE.getState = function(){return getState("linkeddevices.0.Licht.Flur.STATE")};
        linkeddevices0.Licht.Flur.STATE.setState = function(val, ack){return setState("linkeddevices.0.Licht.Flur.STATE", val, ack)};
        linkeddevices0.Licht.Flur.STATE.setStateDelayed = function(val, ack, delay){return setStateDelayed("linkeddevices.0.Licht.Flur.STATE", val, ack, delay)};
        linkeddevices0.Licht.Flur.STATE.getObject = function(){return getObject("linkeddevices.0.Licht.Flur.STATE")};
        

        Wenn man das jetzt in ein globales Skript kopiert kann man z.B. mit

        console.log(linkeddevices0.Licht.Flur.STATE.getState().val)
        

        den aktuellen Wert abrufen.

        Allerdings ist die Methode mit dem copy & paste in ein globales Skript nicht so userfreundlich.
        Deshalb habe ich versucht, mit

        var meinSkript = require("ioBroker.linkeddevices/scripts/linkeddevices0");
        
        console.log(meinSkript .linkeddevices0.Licht.Flur.STATE.getState().val);
        

        die automatische erzeugte Datei in ein Skript einzubinden.

        Leider ohne Erfolg.
        Hoffe es kann mir jemand einen Tipp geben wie ich das korrekt implementieren kann?

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

        @Scrounger sagte:

        console.log(linkeddevices0.Licht.Flur.STATE.getState().val)

        Ich kann keinen wirklichen Mehrwert erkennen gegenüber

        console.log(getState('linkeddevices0.Licht.Flur.STATE').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

          @Scrounger
          require(Pfad) dient zum Laden von Node Modulen. Wenn die Datei aus einem Skript heraus geladen werden soll, muss die Pfadangabe relativ zum Pfad des Javascriptadapters (iobroker/node_modules/iobroker.javascript/node_modules) sein. Ich hatte es mal hier getestet. Das Test-Skript, das geladen wird, sieht so aus:

          'use strict';
          module.exports = function () {
             return {result: 'mein Modul'};
          };
          
          ScroungerS Offline
          ScroungerS Offline
          Scrounger
          Developer
          schrieb am zuletzt editiert von Scrounger
          #4

          @paul53 sagte in require auf eigene Skriptdatei und Zugriff auf var:

          Ich kann keinen wirklichen Mehrwert erkennen gegenüber

          Bessere Übersicht, ein Skript wo alle Variablen definiert sind und bietet einen Vorteil wenn man die Skripte per IDE erstellt - autosuggestion und nicht im Objekt-Baum Id raussuchen müssen.

          @paul53 sagte in require auf eigene Skriptdatei und Zugriff auf var:

          @Scrounger
          require(Pfad) dient zum Laden von Node Modulen. Wenn die Datei aus einem Skript heraus geladen werden soll, muss die Pfadangabe relativ zum Pfad des Javascriptadapters (iobroker/node_modules/iobroker.javascript/node_modules) sein. Ich hatte es mal hier getestet. Das Test-Skript, das geladen wird, sieht so aus:

          Das funktinioniert soweit schon mal. Allerdings gehen die Funktionen wie

          getState()
          getObject()
          

          nicht -> Fehlermeldung "getState is not defined".
          Welcher import wird hier benötigt, damit die Befehle gehen?

          <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

          <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

          paul53P AlCalzoneA 2 Antworten Letzte Antwort
          0
          • ScroungerS Scrounger

            @paul53 sagte in require auf eigene Skriptdatei und Zugriff auf var:

            Ich kann keinen wirklichen Mehrwert erkennen gegenüber

            Bessere Übersicht, ein Skript wo alle Variablen definiert sind und bietet einen Vorteil wenn man die Skripte per IDE erstellt - autosuggestion und nicht im Objekt-Baum Id raussuchen müssen.

            @paul53 sagte in require auf eigene Skriptdatei und Zugriff auf var:

            @Scrounger
            require(Pfad) dient zum Laden von Node Modulen. Wenn die Datei aus einem Skript heraus geladen werden soll, muss die Pfadangabe relativ zum Pfad des Javascriptadapters (iobroker/node_modules/iobroker.javascript/node_modules) sein. Ich hatte es mal hier getestet. Das Test-Skript, das geladen wird, sieht so aus:

            Das funktinioniert soweit schon mal. Allerdings gehen die Funktionen wie

            getState()
            getObject()
            

            nicht -> Fehlermeldung "getState is not defined".
            Welcher import wird hier benötigt, damit die Befehle gehen?

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

            @Scrounger sagte:

            Allerdings gehen die Funktionen wie
            getState()
            getObject()
            nicht -> Fehlermeldung "getState is not defined".

            setState() funktioniert ebenfalls nicht.

            	ReferenceError: setState is not defined
            

            Ich vermute, dass per require() geladene Module keine Funktionen des Javascript-Adapters verwenden können ? Nach Änderungen im Modul muss auch die Javascript-Instanz neu gestartet werden, damit die Änderungen wirksam 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

            MicM 1 Antwort Letzte Antwort
            0
            • ScroungerS Scrounger

              @paul53 sagte in require auf eigene Skriptdatei und Zugriff auf var:

              Ich kann keinen wirklichen Mehrwert erkennen gegenüber

              Bessere Übersicht, ein Skript wo alle Variablen definiert sind und bietet einen Vorteil wenn man die Skripte per IDE erstellt - autosuggestion und nicht im Objekt-Baum Id raussuchen müssen.

              @paul53 sagte in require auf eigene Skriptdatei und Zugriff auf var:

              @Scrounger
              require(Pfad) dient zum Laden von Node Modulen. Wenn die Datei aus einem Skript heraus geladen werden soll, muss die Pfadangabe relativ zum Pfad des Javascriptadapters (iobroker/node_modules/iobroker.javascript/node_modules) sein. Ich hatte es mal hier getestet. Das Test-Skript, das geladen wird, sieht so aus:

              Das funktinioniert soweit schon mal. Allerdings gehen die Funktionen wie

              getState()
              getObject()
              

              nicht -> Fehlermeldung "getState is not defined".
              Welcher import wird hier benötigt, damit die Befehle gehen?

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

              @Scrounger sagte in require auf eigene Skriptdatei und Zugriff auf var:

              Welcher import wird hier benötigt, damit die Befehle gehen?

              Du könntest statt eines Objekts eine Funktion exportieren, die die Adapter-Funktionen wiederum als Argument empfängt:

              "use strict";
              
              module.exports = function (getState, setState, setStateDelayed, getObject) {
              	var linkeddevices0 = {};
              
              	linkeddevices0.Bad = {};
              	linkeddevices0.Bad.Lampe5 = {};
              	linkeddevices0.Bad.Lampe5.Ein = {};
              	linkeddevices0.Bad.Lampe5.Ein.getId = function () { return "linkeddevices.0.Bad.Lampe5.Ein" };
              	linkeddevices0.Bad.Lampe5.Ein.getState = function () { return getState("linkeddevices.0.Bad.Lampe5.Ein") };
              	linkeddevices0.Bad.Lampe5.Ein.setState = function (val, ack) { return setState("linkeddevices.0.Bad.Lampe5.Ein", val, ack) };
              	linkeddevices0.Bad.Lampe5.Ein.setStateDelayed = function (val, ack, delay) { return setStateDelayed("linkeddevices.0.Bad.Lampe5.Ein", val, ack, delay) };
              	linkeddevices0.Bad.Lampe5.Ein.getObject = function () { return getObject("linkeddevices.0.Bad.Lampe5.Ein") };
              
              	// weitere...
              
              	return linkeddevices0;
              };
              

              Aufrufen musst du sie dann so:

              var meinSkript = require("ioBroker.linkeddevices/scripts/linkeddevices0")(getState, setState, setStateDelayed, getObject);

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

              ScroungerS 1 Antwort Letzte Antwort
              0
              • AlCalzoneA AlCalzone

                @Scrounger sagte in require auf eigene Skriptdatei und Zugriff auf var:

                Welcher import wird hier benötigt, damit die Befehle gehen?

                Du könntest statt eines Objekts eine Funktion exportieren, die die Adapter-Funktionen wiederum als Argument empfängt:

                "use strict";
                
                module.exports = function (getState, setState, setStateDelayed, getObject) {
                	var linkeddevices0 = {};
                
                	linkeddevices0.Bad = {};
                	linkeddevices0.Bad.Lampe5 = {};
                	linkeddevices0.Bad.Lampe5.Ein = {};
                	linkeddevices0.Bad.Lampe5.Ein.getId = function () { return "linkeddevices.0.Bad.Lampe5.Ein" };
                	linkeddevices0.Bad.Lampe5.Ein.getState = function () { return getState("linkeddevices.0.Bad.Lampe5.Ein") };
                	linkeddevices0.Bad.Lampe5.Ein.setState = function (val, ack) { return setState("linkeddevices.0.Bad.Lampe5.Ein", val, ack) };
                	linkeddevices0.Bad.Lampe5.Ein.setStateDelayed = function (val, ack, delay) { return setStateDelayed("linkeddevices.0.Bad.Lampe5.Ein", val, ack, delay) };
                	linkeddevices0.Bad.Lampe5.Ein.getObject = function () { return getObject("linkeddevices.0.Bad.Lampe5.Ein") };
                
                	// weitere...
                
                	return linkeddevices0;
                };
                

                Aufrufen musst du sie dann so:

                var meinSkript = require("ioBroker.linkeddevices/scripts/linkeddevices0")(getState, setState, setStateDelayed, getObject);
                ScroungerS Offline
                ScroungerS Offline
                Scrounger
                Developer
                schrieb am zuletzt editiert von
                #7

                @AlCalzone
                Vielen Danke für den Tipp.

                Hab noch einen eleganteren Weg gefunden, so dass der User gar nichst mehr machen muss.

                Das generierte Skript wird automatisch im JavaScript Adapter unter den globalen Skripten abgespeichert.

                In der Adapterkonfig, kann Skriptname und der root variablen name festgelegt werden, knöpfle drücken und schon ist das skript im JS unter global vorhanden.

                adapter_settings_generate_skript.png

                adapter_settings_generate_skript_example.png

                Wie ich das umgesetzt habe, findet ihr hier

                <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

                <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

                paul53P 1 Antwort Letzte Antwort
                0
                • ScroungerS Scrounger

                  @AlCalzone
                  Vielen Danke für den Tipp.

                  Hab noch einen eleganteren Weg gefunden, so dass der User gar nichst mehr machen muss.

                  Das generierte Skript wird automatisch im JavaScript Adapter unter den globalen Skripten abgespeichert.

                  In der Adapterkonfig, kann Skriptname und der root variablen name festgelegt werden, knöpfle drücken und schon ist das skript im JS unter global vorhanden.

                  adapter_settings_generate_skript.png

                  adapter_settings_generate_skript_example.png

                  Wie ich das umgesetzt habe, findet ihr hier

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

                  @Scrounger sagte:

                  unter den globalen Skripten abgespeichert

                  Dir ist bewusst, dass globale Skripte in alle anderen Skripte kopiert werden (RAM-Fresser) ?

                  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

                  ScroungerS 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @Scrounger sagte:

                    unter den globalen Skripten abgespeichert

                    Dir ist bewusst, dass globale Skripte in alle anderen Skripte kopiert werden (RAM-Fresser) ?

                    ScroungerS Offline
                    ScroungerS Offline
                    Scrounger
                    Developer
                    schrieb am zuletzt editiert von
                    #9

                    @paul53 sagte in ✔ require auf Skriptdatei und Zugriff auf var:

                    Dir ist bewusst, dass globale Skripte in alle anderen Skripte kopiert werden (RAM-Fresser) ?

                    Klar, steht doch in der Doku ;)

                    <a href="https://github.com/Scrounger/ioBroker.linkeddevices">LinkedDevices Adapter</a>

                    <a href="https://github.com/Scrounger/ioBroker.vis-materialdesign">Material Design Widgets</a>

                    1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @Scrounger sagte:

                      Allerdings gehen die Funktionen wie
                      getState()
                      getObject()
                      nicht -> Fehlermeldung "getState is not defined".

                      setState() funktioniert ebenfalls nicht.

                      	ReferenceError: setState is not defined
                      

                      Ich vermute, dass per require() geladene Module keine Funktionen des Javascript-Adapters verwenden können ? Nach Änderungen im Modul muss auch die Javascript-Instanz neu gestartet werden, damit die Änderungen wirksam werden.

                      MicM Offline
                      MicM Offline
                      Mic
                      Developer
                      schrieb am zuletzt editiert von Mic
                      #10

                      Sehr interessante Diskussion :-) Meine Frage hat jetzt nichts direkt mit dem linkeddevices-Adapter zu tun, sondern generell. Sorry für's einklinken :-)

                      @paul53 sagte in ✔ require auf Skriptdatei und Zugriff auf var:

                      @Scrounger
                      require(Pfad) dient zum Laden von Node Modulen. Wenn die Datei aus einem Skript heraus geladen werden soll, muss die Pfadangabe relativ zum Pfad des Javascriptadapters (iobroker/node_modules/iobroker.javascript/node_modules) sein. Ich hatte es mal hier getestet. Das Test-Skript, das geladen wird, sieht so aus:

                      'use strict';
                      module.exports = function () {
                         return {result: 'mein Modul'};
                      };
                      

                      Sehr interessant.

                      @paul53 sagte in ✔ require auf Skriptdatei und Zugriff auf var:

                      Ich vermute, dass per require() geladene Module keine Funktionen des Javascript-Adapters verwenden können ? Nach Änderungen im Modul muss auch die Javascript-Instanz neu gestartet werden, damit die Änderungen wirksam werden.

                      Gibt es denn mittlerweile immer noch keine zuverlässige Möglichkeit im JavaScript-Adapter, um externe Scripte nach Bedarf per "require()" (oder wie auch immer) einzubinden,

                      1. ohne dass diese in den global Scripts landen, also bei jedem Script mit hinzufügt werden
                      2. dabei auch ioBroker/JavaScript-Adapter - spezifische Funktionen funktionieren?

                      Wenn nicht, dann sollten wir das initiieren. Wäre ein echter Mehrwert bei der Script-Programmierung, also Script-Bibliotheken zu verwenden für immer wieder kehrende Aufgaben, kennen wir ja aus vielen anderen Entwicklungsumgebungen. Z.B. eine Bibliothek für Array-Handling, für String-Handling, etc., welche man dann bei Bedarf einbindet. Ist sonst echt immer mühselig...

                      AlCalzoneA 1 Antwort Letzte Antwort
                      2
                      • MicM Mic

                        Sehr interessante Diskussion :-) Meine Frage hat jetzt nichts direkt mit dem linkeddevices-Adapter zu tun, sondern generell. Sorry für's einklinken :-)

                        @paul53 sagte in ✔ require auf Skriptdatei und Zugriff auf var:

                        @Scrounger
                        require(Pfad) dient zum Laden von Node Modulen. Wenn die Datei aus einem Skript heraus geladen werden soll, muss die Pfadangabe relativ zum Pfad des Javascriptadapters (iobroker/node_modules/iobroker.javascript/node_modules) sein. Ich hatte es mal hier getestet. Das Test-Skript, das geladen wird, sieht so aus:

                        'use strict';
                        module.exports = function () {
                           return {result: 'mein Modul'};
                        };
                        

                        Sehr interessant.

                        @paul53 sagte in ✔ require auf Skriptdatei und Zugriff auf var:

                        Ich vermute, dass per require() geladene Module keine Funktionen des Javascript-Adapters verwenden können ? Nach Änderungen im Modul muss auch die Javascript-Instanz neu gestartet werden, damit die Änderungen wirksam werden.

                        Gibt es denn mittlerweile immer noch keine zuverlässige Möglichkeit im JavaScript-Adapter, um externe Scripte nach Bedarf per "require()" (oder wie auch immer) einzubinden,

                        1. ohne dass diese in den global Scripts landen, also bei jedem Script mit hinzufügt werden
                        2. dabei auch ioBroker/JavaScript-Adapter - spezifische Funktionen funktionieren?

                        Wenn nicht, dann sollten wir das initiieren. Wäre ein echter Mehrwert bei der Script-Programmierung, also Script-Bibliotheken zu verwenden für immer wieder kehrende Aufgaben, kennen wir ja aus vielen anderen Entwicklungsumgebungen. Z.B. eine Bibliothek für Array-Handling, für String-Handling, etc., welche man dann bei Bedarf einbindet. Ist sonst echt immer mühselig...

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

                        @Mic

                        Die heutigen Skripte im Adapter verwenden ein Feature von NodeJS, bei dem die einzige Möglichkeit, gemeinsam genutzten Code zu laden darin besteht, ihn als globale Skripte in Textform vor das Skript zu hängen.

                        Ab NodeJS 10 besteht grundsätzlich die Möglichkeit von Modulen, d.h. gezielt einzelne Code-Abschnitte per Namen zu laden. Ich habe da schon vor über einem Jahr ein Issue aufgemacht:
                        https://github.com/ioBroker/ioBroker.javascript/issues/86

                        Damals war das aber Zukunftsmusik. Inzwischen könnte man es langsam angehen, weil Node 8 Ende des Jahres End-of-Life erreicht.


                        @Mic sagte in ✔ require auf Skriptdatei und Zugriff auf var:

                        dabei auch ioBroker/JavaScript-Adapter - spezifische Funktionen funktionieren?

                        Doch, siehe meinen vorherigen Kommentar. Nicht so super schön wie einfach nur requiren, aber das funktioniert und ist zuverlässig.

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

                        1 Antwort Letzte Antwort
                        2
                        • MicM Offline
                          MicM Offline
                          Mic
                          Developer
                          schrieb am zuletzt editiert von
                          #12

                          Super, danke @AlCalzone, auch für das Issue. Werde ich mir näher ansehen.

                          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

                          802

                          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