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. Visualisierung
  4. [gelöst] VIS - Wert von JS-Variable in Widget verwenden

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    18
    1
    525

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

[gelöst] VIS - Wert von JS-Variable in Widget verwenden

Geplant Angeheftet Gesperrt Verschoben Visualisierung
12 Beiträge 3 Kommentatoren 700 Aufrufe 3 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.
  • BananaJoeB Offline
    BananaJoeB Offline
    BananaJoe
    Most Active
    schrieb am zuletzt editiert von BananaJoe
    #1

    Ausgangslage:

    Ich habe einen Datenpunkt vom Typ String:

    0_userdata.0.000-Testen.TestKette
    

    Diesen möchte ich per Widget-Butten per Text befüllen - erst einmal kein Problem, ich habe es mit dem `vis-inventwo - Universal Switch gemacht:
    f960cd2e-1b90-483c-a239-754b04117ff9-image.png
    9cf2c6df-0263-4877-b5e8-175bbe0e0add-image.png

    Klicke ich nun auf das Widget, wechselt der Wert des Datenpunktes zwischen 12345 und abcde immer hin und her.

    Jetzt möchte ich aber als Text den Inhalt der JavaScript Variablen vis.instance senden ... wie mache ich das? Geht das? Wie greife ich auf diese zu?
    In vis.instance steht nach dem Laden der VIS zur Verfügung. ich schreibe mir diese schon in einen Datenpunkt per JavaScript. Es geht nun darum das sich 3 Tablets eine VIS teilen und ich wissen will vom welchem aus ein Button gedrückt wurde.
    Oder ich müsste wissen / am Datenpunkt erkennen von wo aus / von welcher Instanz aus dieser gesetzt wurde.

    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

    BananaJoeB B 2 Antworten Letzte Antwort
    0
    • BananaJoeB BananaJoe

      Ausgangslage:

      Ich habe einen Datenpunkt vom Typ String:

      0_userdata.0.000-Testen.TestKette
      

      Diesen möchte ich per Widget-Butten per Text befüllen - erst einmal kein Problem, ich habe es mit dem `vis-inventwo - Universal Switch gemacht:
      f960cd2e-1b90-483c-a239-754b04117ff9-image.png
      9cf2c6df-0263-4877-b5e8-175bbe0e0add-image.png

      Klicke ich nun auf das Widget, wechselt der Wert des Datenpunktes zwischen 12345 und abcde immer hin und her.

      Jetzt möchte ich aber als Text den Inhalt der JavaScript Variablen vis.instance senden ... wie mache ich das? Geht das? Wie greife ich auf diese zu?
      In vis.instance steht nach dem Laden der VIS zur Verfügung. ich schreibe mir diese schon in einen Datenpunkt per JavaScript. Es geht nun darum das sich 3 Tablets eine VIS teilen und ich wissen will vom welchem aus ein Button gedrückt wurde.
      Oder ich müsste wissen / am Datenpunkt erkennen von wo aus / von welcher Instanz aus dieser gesetzt wurde.

      BananaJoeB Offline
      BananaJoeB Offline
      BananaJoe
      Most Active
      schrieb am zuletzt editiert von
      #2

      @bananajoe und ich Antworte mir mal selbst:

      Eigentlich müsste das mit dem speziellen Binding {instance} gehen, was aber nicht funktioniert.
      Lösung ist es den Wert in eine local_xxx Variable zu schreiben, mit der geht es dann: https://forum.iobroker.net/post/1208206

      Ich habe es in mein Skript für die Ermittlung der VIS-Instanz-Id mit eingebaut.

      ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

      1 Antwort Letzte Antwort
      0
      • BananaJoeB BananaJoe

        Ausgangslage:

        Ich habe einen Datenpunkt vom Typ String:

        0_userdata.0.000-Testen.TestKette
        

        Diesen möchte ich per Widget-Butten per Text befüllen - erst einmal kein Problem, ich habe es mit dem `vis-inventwo - Universal Switch gemacht:
        f960cd2e-1b90-483c-a239-754b04117ff9-image.png
        9cf2c6df-0263-4877-b5e8-175bbe0e0add-image.png

        Klicke ich nun auf das Widget, wechselt der Wert des Datenpunktes zwischen 12345 und abcde immer hin und her.

        Jetzt möchte ich aber als Text den Inhalt der JavaScript Variablen vis.instance senden ... wie mache ich das? Geht das? Wie greife ich auf diese zu?
        In vis.instance steht nach dem Laden der VIS zur Verfügung. ich schreibe mir diese schon in einen Datenpunkt per JavaScript. Es geht nun darum das sich 3 Tablets eine VIS teilen und ich wissen will vom welchem aus ein Button gedrückt wurde.
        Oder ich müsste wissen / am Datenpunkt erkennen von wo aus / von welcher Instanz aus dieser gesetzt wurde.

        B Online
        B Online
        badsnoopy667
        schrieb am zuletzt editiert von badsnoopy667
        #3

        @bananajoe
        Ganz spontane Idee und nicht ausgegoren:

        In den Objekten gibt es ja "vis.0.control.data" und "vis.0.control.instance"
        Der data Datenpunkt zeigt mir an, welcher View gerade in VIS geöffnet ist und wechselt, wenn ich den View am Tablet ändere. Der instance Datenpunkt zeigt an, von welchem Browser die Änderung kam.

        Idee: Benutze ein View-Wechsel Widget anstelle eines Knopfes. Damit kann man vielleicht zuverlässig triggern auf welchem Tablet dieses Widget gedrückt wurde. Wenn das dann auf denselben View zurückwechselt auf dem es liegt, fällt der Viewwechsel vielleicht auch kaum störend auf...

        BananaJoeB 1 Antwort Letzte Antwort
        0
        • B badsnoopy667

          @bananajoe
          Ganz spontane Idee und nicht ausgegoren:

          In den Objekten gibt es ja "vis.0.control.data" und "vis.0.control.instance"
          Der data Datenpunkt zeigt mir an, welcher View gerade in VIS geöffnet ist und wechselt, wenn ich den View am Tablet ändere. Der instance Datenpunkt zeigt an, von welchem Browser die Änderung kam.

          Idee: Benutze ein View-Wechsel Widget anstelle eines Knopfes. Damit kann man vielleicht zuverlässig triggern auf welchem Tablet dieses Widget gedrückt wurde. Wenn das dann auf denselben View zurückwechselt auf dem es liegt, fällt der Viewwechsel vielleicht auch kaum störend auf...

          BananaJoeB Offline
          BananaJoeB Offline
          BananaJoe
          Most Active
          schrieb am zuletzt editiert von
          #4

          @badsnoopy667 Den Datenpunkt hatte ich mir auch schon angesehen - und verworfen weil das eben nur bei View-Wechseln aktualisiert wird. Ich arbeite auch mit "View in Widget" und da klappt das sowieso nicht.
          Die Lösung von @Andersmacher funktioniert super

          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

          OliverIOO 1 Antwort Letzte Antwort
          0
          • BananaJoeB BananaJoe

            @badsnoopy667 Den Datenpunkt hatte ich mir auch schon angesehen - und verworfen weil das eben nur bei View-Wechseln aktualisiert wird. Ich arbeite auch mit "View in Widget" und da klappt das sowieso nicht.
            Die Lösung von @Andersmacher funktioniert super

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von OliverIO
            #5

            @bananajoe

            @bananajoe sagte in [gelöst] VIS - Wert von JS-Variable in Widget verwenden:

            und verworfen weil das eben nur bei View-Wechseln aktualisiert

            aber die browser instance ändert sich doch eigentlich nie (für den einzelnen client)?
            diese wird einmalig je client/browser festgelegt. gespeichert wird diese in der localStorage des Browsers

            die instance dient ja dazu client spezifische unterscheidungen in der vis einzubauen, wie bspw das bestimmte widgets nur auf bestimmten clients sichtbar sind oder ggfs unterschiedlich formatiert werden.

            tatsächlich ist das special binding instance irgendwie nicht mehr da.
            getSpecialValues oder die andere stelle hab ich nicht gefunden. aber irgendwie hat das schon mal funktioniert.

            als alternative, wie schon erwähnt könnte man das hier nehmen

            {vis.0.control.instance}
            

            oder nochmal eine andere alternative um an die internen werte zu kommen, sofern es sich nicht um Objekte handelt:

            {v:local_xxx;vis.instance}
            

            wichtig wäre hier der 2.parameter. der object id wird nur verwendet um die aktualisierung zu triggern, da kann aber ein beliebige id drin stehen, auch eine locale, die dann mit vis.setValue bei bedarf getriggert werden kann.

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

            BananaJoeB 1 Antwort Letzte Antwort
            0
            • OliverIOO OliverIO

              @bananajoe

              @bananajoe sagte in [gelöst] VIS - Wert von JS-Variable in Widget verwenden:

              und verworfen weil das eben nur bei View-Wechseln aktualisiert

              aber die browser instance ändert sich doch eigentlich nie (für den einzelnen client)?
              diese wird einmalig je client/browser festgelegt. gespeichert wird diese in der localStorage des Browsers

              die instance dient ja dazu client spezifische unterscheidungen in der vis einzubauen, wie bspw das bestimmte widgets nur auf bestimmten clients sichtbar sind oder ggfs unterschiedlich formatiert werden.

              tatsächlich ist das special binding instance irgendwie nicht mehr da.
              getSpecialValues oder die andere stelle hab ich nicht gefunden. aber irgendwie hat das schon mal funktioniert.

              als alternative, wie schon erwähnt könnte man das hier nehmen

              {vis.0.control.instance}
              

              oder nochmal eine andere alternative um an die internen werte zu kommen, sofern es sich nicht um Objekte handelt:

              {v:local_xxx;vis.instance}
              

              wichtig wäre hier der 2.parameter. der object id wird nur verwendet um die aktualisierung zu triggern, da kann aber ein beliebige id drin stehen, auch eine locale, die dann mit vis.setValue bei bedarf getriggert werden kann.

              BananaJoeB Offline
              BananaJoeB Offline
              BananaJoe
              Most Active
              schrieb am zuletzt editiert von
              #6

              @oliverio sagte in [gelöst] VIS - Wert von JS-Variable in Widget verwenden:

              aber die browser instance ändert sich doch eigentlich nie (für den einzelnen client)?

              Das Thema hatten wir hier auch schon (wo es um das automatische Ermitteln geht): https://forum.iobroker.net/topic/43361/gelöst-vis-intance-id-automatisiert-ermitteln

              Ja, eigentlich. Aber wenn ich mit 3 verschiedenen Browser von meinem Rechner aus Teste sind es 3 verschiedene Ids.
              Und der Fully Kiosk - den ich auf jeden Tablett bei mir einsetze - löscht den ggf. auch (wenn er den Cache löscht, war man Standard-Einstellung).

              Mit der Methode der automatischen Ermittlung muss ich mich nicht darum kümmern (die wäre vielleicht noch zu verbessern das man das VIS-Skript nicht anpassen muss), mit der nun gefundenen Methode können sich mehrere Tablets eine View Teilen und trotzdem Individuelle Dinge anzeigen bzw. individuell reagieren.

              ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

              OliverIOO 1 Antwort Letzte Antwort
              0
              • BananaJoeB BananaJoe

                @oliverio sagte in [gelöst] VIS - Wert von JS-Variable in Widget verwenden:

                aber die browser instance ändert sich doch eigentlich nie (für den einzelnen client)?

                Das Thema hatten wir hier auch schon (wo es um das automatische Ermitteln geht): https://forum.iobroker.net/topic/43361/gelöst-vis-intance-id-automatisiert-ermitteln

                Ja, eigentlich. Aber wenn ich mit 3 verschiedenen Browser von meinem Rechner aus Teste sind es 3 verschiedene Ids.
                Und der Fully Kiosk - den ich auf jeden Tablett bei mir einsetze - löscht den ggf. auch (wenn er den Cache löscht, war man Standard-Einstellung).

                Mit der Methode der automatischen Ermittlung muss ich mich nicht darum kümmern (die wäre vielleicht noch zu verbessern das man das VIS-Skript nicht anpassen muss), mit der nun gefundenen Methode können sich mehrere Tablets eine View Teilen und trotzdem Individuelle Dinge anzeigen bzw. individuell reagieren.

                OliverIOO Offline
                OliverIOO Offline
                OliverIO
                schrieb am zuletzt editiert von
                #7

                @bananajoe

                ja hab ich gesehen.
                mit express und einem skript im iobroker könnte man den apache wegreduzieren.
                dann läuft der webserver auf einem beliebigen port von einem iobroker skript aus

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

                BananaJoeB 1 Antwort Letzte Antwort
                0
                • OliverIOO OliverIO

                  @bananajoe

                  ja hab ich gesehen.
                  mit express und einem skript im iobroker könnte man den apache wegreduzieren.
                  dann läuft der webserver auf einem beliebigen port von einem iobroker skript aus

                  BananaJoeB Offline
                  BananaJoeB Offline
                  BananaJoe
                  Most Active
                  schrieb am zuletzt editiert von BananaJoe
                  #8

                  @oliverio sagte in [gelöst] VIS - Wert von JS-Variable in Widget verwenden:

                  @bananajoe

                  ja hab ich gesehen.
                  mit express und einem skript im iobroker könnte man den apache wegreduzieren.
                  dann läuft der webserver auf einem beliebigen port von einem iobroker skript aus

                  Wenn der JavaScript Teil aus der VIS dann noch in einem Widget abgelegt werden kann, könnte man da sogar einen eigenen Adapter draus bauen :-)
                  Ist Express bei ioBroker im npm schon mit drin? Eigentlich braucht es ja quasi nix, es muss ja nur eine Antwort auf einen http-Request geben.
                  So etwas habe ich mir sonst immer in Python mit Flask gebaut, da bekommt man den kompletten Aufruf der URL als einzelne Werte/Parameter an das Skript übergeben.

                  Nachtrag: Jupp, ist sehr simpel, ich habe mal das Beispiel von hier: https://www.digitalocean.com/community/tutorials/how-to-create-a-web-server-in-node-js-with-the-http-module
                  in ein JavaScript gekippt (mit Anpassung von Host und Port)
                  VORSICHT BEIM TESTEN

                  const http = require("http");
                  const host = '0.0.0.0';
                  const port = 16384;
                  
                  const requestListener = function (req, res) {
                      res.writeHead(200);
                      res.end("My first server!");
                  };
                  
                  const server = http.createServer(requestListener);
                  server.listen(port, host, () => {
                      console.log(`Server is running on http://${host}:${port}`);
                  });
                  

                  VORSICHT BEIM TESTEN
                  Funktioniert!
                  4c7e5125-4c58-490f-ab99-394cf6682dd0-image.png

                  Hier eine Version welche die IP als JSON zurück gibt:
                  VORSICHT BEIM TESTEN

                  const http = require("http");
                  const host = '0.0.0.0';
                  const port = 16384;
                  
                  const requestListener = function (req, res) {
                      res.setHeader("Content-Type", "application/json");
                      res.writeHead(200);
                      res.end('{"ipAddress":"' + req.socket.remoteAddress + '"}');
                  };
                  
                  const server = http.createServer(requestListener);
                  server.listen(port, host, () => {
                      console.log(`Server is running on http://${host}:${port}`);
                  });
                  

                  VORSICHT BEIM TESTEN
                  012df778-77f1-43fa-9393-7853ceaa9d22-image.png
                  Das ganze hat noch die Macke das der Webserver nicht beendet wird, wenn man das Skript beendet ... da bräuchte ich jetzt noch eine Lösung, ein "http.destroyServer" oder ähnlich scheint es nicht zu geben.
                  Zum Glück teste ich so etwas in einer eigenen JavaScript-Instanz, den diese muss man zum beenden im Moment noch neu starten.

                  ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                  1 Antwort Letzte Antwort
                  0
                  • BananaJoeB Offline
                    BananaJoeB Offline
                    BananaJoe
                    Most Active
                    schrieb am zuletzt editiert von BananaJoe
                    #9

                    Und mein eigener Nachtrag mit der Lösung:

                    // Webserver erstellen der die eigene IP zurück gibt, gefunden hier: https://www.digitalocean.com/community/tutorials/how-to-create-a-web-server-in-node-js-with-the-http-module
                    const http = require("http");
                    const host = '0.0.0.0';
                    const port = 16384;
                    
                    const requestListener = function (req, res) {
                        res.setHeader('Access-Control-Allow-Origin', '*');
                        res.setHeader("Content-Type", "application/json");
                        res.writeHead(200);
                        res.end('{"ipAddress":"' + req.socket.remoteAddress + '"}');
                    };
                    
                    var server = http.createServer(requestListener);
                    server.listen(port, host, () => {
                        console.log(`Server is running on http://${host}:${port}`);
                    });
                    
                    // Socket-Handling, gefunden hier: https://stackoverflow.com/questions/14626636/how-do-i-shut-down-a-node-js-https-server-immediately
                    // Maintain a hash of all connected sockets
                    var sockets = {}, nextSocketId = 0;
                    server.on('connection', function (socket) {
                      // Add a newly connected socket
                      var socketId = nextSocketId++;
                      sockets[socketId] = socket;
                      console.log('socket ' + socketId + ' opened');
                    
                      // Remove the socket when it closes
                      socket.on('close', function () {
                        console.log('socket ' + socketId + ' closed');
                        delete sockets[socketId];
                      });
                    
                      // Extend socket lifetime for demo purposes
                      socket.setTimeout(4000);
                    });
                    
                    // Wenn das Skript beendet wird, Webserver auch stoppen und alle noch offenen Sockets beenden
                    // auch von https://stackoverflow.com/questions/14626636/how-do-i-shut-down-a-node-js-https-server-immediately
                    // close Webserver if script stopped
                    onStop(function (callback) {
                        console.log("Stopping Server ...");
                        // Close the server
                        server.close(function () { console.log('Server closed!'); });
                        // Destroy all open sockets
                        for (var socketId in sockets) {
                            console.log('socket ' + socketId + ' destroyed');
                            sockets[socketId].destroy();
                        }
                        callback();
                    }, 10000 /*ms*/);
                    

                    Da ist nun ein Socket-Handling drin welches die einzelnen Verbindungen auch wieder schließt.
                    Und wenn das Skript beendet wird, wird die Funktion onStop aufgerufen die den Webserver auch wieder schließt (und alle noch offenen Sockets entfernt).
                    Diese Version kann nun gefahrloser getestet werden.

                    Edit: res.setHeader('Access-Control-Allow-Origin', '*'); ergänzt damit die URL von auch von einem anderen Port aus aufgerufen werden darf (z.B. aus der VIS heraus)

                    ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                    OliverIOO 1 Antwort Letzte Antwort
                    0
                    • BananaJoeB BananaJoe

                      Und mein eigener Nachtrag mit der Lösung:

                      // Webserver erstellen der die eigene IP zurück gibt, gefunden hier: https://www.digitalocean.com/community/tutorials/how-to-create-a-web-server-in-node-js-with-the-http-module
                      const http = require("http");
                      const host = '0.0.0.0';
                      const port = 16384;
                      
                      const requestListener = function (req, res) {
                          res.setHeader('Access-Control-Allow-Origin', '*');
                          res.setHeader("Content-Type", "application/json");
                          res.writeHead(200);
                          res.end('{"ipAddress":"' + req.socket.remoteAddress + '"}');
                      };
                      
                      var server = http.createServer(requestListener);
                      server.listen(port, host, () => {
                          console.log(`Server is running on http://${host}:${port}`);
                      });
                      
                      // Socket-Handling, gefunden hier: https://stackoverflow.com/questions/14626636/how-do-i-shut-down-a-node-js-https-server-immediately
                      // Maintain a hash of all connected sockets
                      var sockets = {}, nextSocketId = 0;
                      server.on('connection', function (socket) {
                        // Add a newly connected socket
                        var socketId = nextSocketId++;
                        sockets[socketId] = socket;
                        console.log('socket ' + socketId + ' opened');
                      
                        // Remove the socket when it closes
                        socket.on('close', function () {
                          console.log('socket ' + socketId + ' closed');
                          delete sockets[socketId];
                        });
                      
                        // Extend socket lifetime for demo purposes
                        socket.setTimeout(4000);
                      });
                      
                      // Wenn das Skript beendet wird, Webserver auch stoppen und alle noch offenen Sockets beenden
                      // auch von https://stackoverflow.com/questions/14626636/how-do-i-shut-down-a-node-js-https-server-immediately
                      // close Webserver if script stopped
                      onStop(function (callback) {
                          console.log("Stopping Server ...");
                          // Close the server
                          server.close(function () { console.log('Server closed!'); });
                          // Destroy all open sockets
                          for (var socketId in sockets) {
                              console.log('socket ' + socketId + ' destroyed');
                              sockets[socketId].destroy();
                          }
                          callback();
                      }, 10000 /*ms*/);
                      

                      Da ist nun ein Socket-Handling drin welches die einzelnen Verbindungen auch wieder schließt.
                      Und wenn das Skript beendet wird, wird die Funktion onStop aufgerufen die den Webserver auch wieder schließt (und alle noch offenen Sockets entfernt).
                      Diese Version kann nun gefahrloser getestet werden.

                      Edit: res.setHeader('Access-Control-Allow-Origin', '*'); ergänzt damit die URL von auch von einem anderen Port aus aufgerufen werden darf (z.B. aus der VIS heraus)

                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      schrieb am zuletzt editiert von OliverIO
                      #10

                      @bananajoe

                      Ok jetzt sogar ohne Express nur mit nativen Funktionen von Node
                      Express hätte man über die zusätzlichen npm Module in den Einstellungen des JavaScript Adapters dazuladen können

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

                      BananaJoeB 1 Antwort Letzte Antwort
                      0
                      • OliverIOO OliverIO

                        @bananajoe

                        Ok jetzt sogar ohne Express nur mit nativen Funktionen von Node
                        Express hätte man über die zusätzlichen npm Module in den Einstellungen des JavaScript Adapters dazuladen können

                        BananaJoeB Offline
                        BananaJoeB Offline
                        BananaJoe
                        Most Active
                        schrieb am zuletzt editiert von
                        #11

                        @oliverio sagte in [gelöst] VIS - Wert von JS-Variable in Widget verwenden:

                        Express hätte man über die zusätzlichen npm Module in den Einstellungen des JavaScript Adapters dazuladen können

                        ja, das scheue ich immer. Ich schaue gerne in die NPM Pakete und im Zweifel kopiere ich mir die Funktionen da heraus die ich brauche. In der Regel brauche ich immer nur ein Bruchteil von dem was das Paket bietet.

                        ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 9 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                        OliverIOO 1 Antwort Letzte Antwort
                        0
                        • BananaJoeB BananaJoe

                          @oliverio sagte in [gelöst] VIS - Wert von JS-Variable in Widget verwenden:

                          Express hätte man über die zusätzlichen npm Module in den Einstellungen des JavaScript Adapters dazuladen können

                          ja, das scheue ich immer. Ich schaue gerne in die NPM Pakete und im Zweifel kopiere ich mir die Funktionen da heraus die ich brauche. In der Regel brauche ich immer nur ein Bruchteil von dem was das Paket bietet.

                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          schrieb am zuletzt editiert von
                          #12

                          @bananajoe

                          Für kleinere Sachen kann man das machen und man lernt sogar draus.
                          Bei komplexeren Dingen lohnt sich das meist nicht, da man ansonsten das Rad neu erfindet.
                          Hinter manchen Bibliotheken stecken ja wieder uU eine größere Community, die dafür sorgt das der Code sicher ist und alle Features enthält die man so braucht

                          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
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          872

                          Online

                          32.5k

                          Benutzer

                          81.6k

                          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