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. socket.io subscribe funktioniert nicht

NEWS

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

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

socket.io subscribe funktioniert nicht

Geplant Angeheftet Gesperrt Verschoben Visualisierung
5 Beiträge 3 Kommentatoren 587 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.
  • F Offline
    F Offline
    flohohoho
    schrieb am zuletzt editiert von
    #1

    Hallo liebe Community,

    nach dem ich nun mit den Kräften am Ende bin ist dies mein vorerst letzter Versuch. Ich versuche eine Visualisierung ohne Vis aus Schlankheitsgründen auf die Beine zu stellen. Mit socket.io funktioniert es auch soweit. Nur möchte ich die Autosubscription nicht haben und die nötigen states abonnieren.

    Autosubscription habe ich bereits deaktiviert. Ich schaffe es allerdings nicht, dass ich die States abonniere. Meine settings.js sieht so aus:

    servConn.namespace   = 'mobile.0';
    servConn._useStorage = false;
    
        var states = [];
        servConn.init({
            name:          'mobile.0',  // optional - default 'vis.0'
            connLink:      'http://192.168.10.5:8084',  // optional URL of the socket.io adapter
            socketSession: '',           // optional - used by authentication
            
        }, {
            onConnChange: function (isConnected) {
                if (isConnected) {
                    console.log('connected');
                    servConn.getStates(function (err, _states) {
                        var count = 0;
                        for (var id in _states) {
                            count++;
                        }
                        console.log('Received ' + count + ' states.');
                        states = _states;
                    });
                } else {
                    console.log('disconnected');
                }
            },
            onRefresh: function (id, state) {
                window.location.reload();
            },
            onUpdate: function (id, state) {
                setTimeout(function () {
                    console.log('NEW VALUE of ' + id + ': ' + JSON.stringify(state));
                    states[id] = state;
                }, 0);
            },
            onError: function (err) {
                window.alert(_('Cannot execute %s for %s, because of insufficient permissions', err.command, err.arg), _('Insufficient permissions'), 'alert', 600);
            }    
        }, 
        false, 
        false
    );
     
    
    let helligkeit = 'openknx.0.Sensorik_EG.Helligkeit.Heeligkeit_Essen';
    servConn.subscribe(helligkeit); 
    
    

    Zum Schluss habe ich die Subscrition reingeschrieben. Gibt es hier offensichtliche Fehler? Ich habe schon alle Möglichen Varianten aus dem Forum durch. Die Console zeigt keine Fehler.

    Viele Grüße
    Flo

    R 1 Antwort Letzte Antwort
    0
    • F flohohoho

      Hallo liebe Community,

      nach dem ich nun mit den Kräften am Ende bin ist dies mein vorerst letzter Versuch. Ich versuche eine Visualisierung ohne Vis aus Schlankheitsgründen auf die Beine zu stellen. Mit socket.io funktioniert es auch soweit. Nur möchte ich die Autosubscription nicht haben und die nötigen states abonnieren.

      Autosubscription habe ich bereits deaktiviert. Ich schaffe es allerdings nicht, dass ich die States abonniere. Meine settings.js sieht so aus:

      servConn.namespace   = 'mobile.0';
      servConn._useStorage = false;
      
          var states = [];
          servConn.init({
              name:          'mobile.0',  // optional - default 'vis.0'
              connLink:      'http://192.168.10.5:8084',  // optional URL of the socket.io adapter
              socketSession: '',           // optional - used by authentication
              
          }, {
              onConnChange: function (isConnected) {
                  if (isConnected) {
                      console.log('connected');
                      servConn.getStates(function (err, _states) {
                          var count = 0;
                          for (var id in _states) {
                              count++;
                          }
                          console.log('Received ' + count + ' states.');
                          states = _states;
                      });
                  } else {
                      console.log('disconnected');
                  }
              },
              onRefresh: function (id, state) {
                  window.location.reload();
              },
              onUpdate: function (id, state) {
                  setTimeout(function () {
                      console.log('NEW VALUE of ' + id + ': ' + JSON.stringify(state));
                      states[id] = state;
                  }, 0);
              },
              onError: function (err) {
                  window.alert(_('Cannot execute %s for %s, because of insufficient permissions', err.command, err.arg), _('Insufficient permissions'), 'alert', 600);
              }    
          }, 
          false, 
          false
      );
       
      
      let helligkeit = 'openknx.0.Sensorik_EG.Helligkeit.Heeligkeit_Essen';
      servConn.subscribe(helligkeit); 
      
      

      Zum Schluss habe ich die Subscrition reingeschrieben. Gibt es hier offensichtliche Fehler? Ich habe schon alle Möglichen Varianten aus dem Forum durch. Die Console zeigt keine Fehler.

      Viele Grüße
      Flo

      R Offline
      R Offline
      rewenode
      schrieb am zuletzt editiert von
      #2

      @flohohoho Also ist ne weile her, dass ich damit mal rumgespielt habe, aber subscribe sah bei mir da ungefähr so aus:

      debugger
      /*
      payload = {fn: 0  //fungtion0..2 
                 subscribePattern: 'zigbee.0'  //subscription    
      }
      
      node functions
      0 - init 
      1 - disconnect
      2 - subscribe
      3 - unsubscribe
      */
      
      let nFunction = msg.payload.fn;
      
      // servConn
      const servConn = global.get('servConn');
      
      // helper
      const mydTime = () => {
          var options = {
              hour: 'numeric',
              minute: 'numeric',
              second: 'numeric'
          };
          return ((new Date()).toLocaleDateString('de-DE', options))
      };
      
      const connStatus  = () => {
          let cTime = mydTime();
          if (servConn._isConnected ) {
              node.status({fill: 'green', shape: "dot", text: 'connected:'+cTime}) ;
          } else {
              node.status({fill: 'red', shape: "dot", text: 'disconnected:'+cTime});
          }
          //debugger;
          console.log('nr connected: '+ servConn._isConnected + ' ' + cTime + ' id:' + servConn._socket.id);
      };
      
      const disconnect = () => {
          //reconnect interval
          servConn._allowReconnection = false;
          servConn._socket.close();
          servConn.logout();
          connStatus();
      };
      
      node.on('close', disconnect);
      
      //servConn._useStorage = false;
      
      var states = [];
      
      // init
      if (nFunction === 0 && !servConn._isConnected ) {
      servConn.init({
              name: 'node-red.' + node.id, // optional - default 'vis.0'
              connLink: 'http://192.168.99.119:8084', // optional URL of the socket.io adapter
              socketSession: ''
          }, {
              onConnChange: function(isConnected) {
                  connStatus();
                  /*
                  if (isConnected) {
                      console.log('connected');
                      node.status({fill: 'green',shape: "dot",text: 'connectet:' + servConn._isConnected});
                      
                      
                      servConn.getStates(function(err, _states) {
                          let count = 0;
                          for (var id in _states) {
                              count++;
                          }
                          node.status({fill: 'green',shape: "dot",text: 'Received ' + count});
      
                          states = _states;
                      });
                     
                  } else {
                      node.status({fill: 'red',shape: "dot",text: 'disconnected'});
                  
                  }
                   */
              },
              // not in use
              onRefresh: function() {
      
              },
              onUpdate: function(id, state) {
                  setTimeout(function() {
                      //console.log('NEW VALUE of ' + id + ': ' + JSON.stringify(state));
                      msg.payload.id = id;
                      msg.payload.state = state;
                      node.send(msg);
                      states[id] = state;
                  }, 0);
              },
              onError: function(err) {
                  //console.log('insufficient permissions' + err.command);
                  node.status({fill: 'red',shape: "dot",text: 'insufficient permissions'});
              }
          },
          false,
          false);
      }
      
      // disconnect
      if (nFunction === 1 && servConn._isConnected) { 
          disconnect();
      }
      //subscribe
      if (nFunction === 2 && servConn._isConnected) { 
          msg.payload.subscribePattern.forEach(
              (subscription) => servConn._socket.emit('subscribe', subscription)
              )
      }
      //unsubscribe
      if (nFunction === 3 && servConn._isConnected) { 
          msg.payload.subscribePattern.forEach(
              (subscription) => servConn._socket.emit('unsubscribe', subscription)
              )
      }
      
      //getstate
      if (nFunction === 4 && servConn._isConnected) { 
          msg.payload.subscribePattern.forEach( 
              (subscription) => servConn.getStates(subscription, function(err, state) {
                  setTimeout(function() {
                      console.log('State ' + subscription + ': ' + JSON.stringify(state));
                      msg.payload = state;
                      node.send(msg);
                  }, 0);
              })
          )
      }
      
      

      Hatte das seinerzeit in einem node-red function-node implementiert und grad noch mal mit einer einzelnen subscription getestet. Läuft noch ;-)

      Gruß
      Reiner

      F 1 Antwort Letzte Antwort
      0
      • R rewenode

        @flohohoho Also ist ne weile her, dass ich damit mal rumgespielt habe, aber subscribe sah bei mir da ungefähr so aus:

        debugger
        /*
        payload = {fn: 0  //fungtion0..2 
                   subscribePattern: 'zigbee.0'  //subscription    
        }
        
        node functions
        0 - init 
        1 - disconnect
        2 - subscribe
        3 - unsubscribe
        */
        
        let nFunction = msg.payload.fn;
        
        // servConn
        const servConn = global.get('servConn');
        
        // helper
        const mydTime = () => {
            var options = {
                hour: 'numeric',
                minute: 'numeric',
                second: 'numeric'
            };
            return ((new Date()).toLocaleDateString('de-DE', options))
        };
        
        const connStatus  = () => {
            let cTime = mydTime();
            if (servConn._isConnected ) {
                node.status({fill: 'green', shape: "dot", text: 'connected:'+cTime}) ;
            } else {
                node.status({fill: 'red', shape: "dot", text: 'disconnected:'+cTime});
            }
            //debugger;
            console.log('nr connected: '+ servConn._isConnected + ' ' + cTime + ' id:' + servConn._socket.id);
        };
        
        const disconnect = () => {
            //reconnect interval
            servConn._allowReconnection = false;
            servConn._socket.close();
            servConn.logout();
            connStatus();
        };
        
        node.on('close', disconnect);
        
        //servConn._useStorage = false;
        
        var states = [];
        
        // init
        if (nFunction === 0 && !servConn._isConnected ) {
        servConn.init({
                name: 'node-red.' + node.id, // optional - default 'vis.0'
                connLink: 'http://192.168.99.119:8084', // optional URL of the socket.io adapter
                socketSession: ''
            }, {
                onConnChange: function(isConnected) {
                    connStatus();
                    /*
                    if (isConnected) {
                        console.log('connected');
                        node.status({fill: 'green',shape: "dot",text: 'connectet:' + servConn._isConnected});
                        
                        
                        servConn.getStates(function(err, _states) {
                            let count = 0;
                            for (var id in _states) {
                                count++;
                            }
                            node.status({fill: 'green',shape: "dot",text: 'Received ' + count});
        
                            states = _states;
                        });
                       
                    } else {
                        node.status({fill: 'red',shape: "dot",text: 'disconnected'});
                    
                    }
                     */
                },
                // not in use
                onRefresh: function() {
        
                },
                onUpdate: function(id, state) {
                    setTimeout(function() {
                        //console.log('NEW VALUE of ' + id + ': ' + JSON.stringify(state));
                        msg.payload.id = id;
                        msg.payload.state = state;
                        node.send(msg);
                        states[id] = state;
                    }, 0);
                },
                onError: function(err) {
                    //console.log('insufficient permissions' + err.command);
                    node.status({fill: 'red',shape: "dot",text: 'insufficient permissions'});
                }
            },
            false,
            false);
        }
        
        // disconnect
        if (nFunction === 1 && servConn._isConnected) { 
            disconnect();
        }
        //subscribe
        if (nFunction === 2 && servConn._isConnected) { 
            msg.payload.subscribePattern.forEach(
                (subscription) => servConn._socket.emit('subscribe', subscription)
                )
        }
        //unsubscribe
        if (nFunction === 3 && servConn._isConnected) { 
            msg.payload.subscribePattern.forEach(
                (subscription) => servConn._socket.emit('unsubscribe', subscription)
                )
        }
        
        //getstate
        if (nFunction === 4 && servConn._isConnected) { 
            msg.payload.subscribePattern.forEach( 
                (subscription) => servConn.getStates(subscription, function(err, state) {
                    setTimeout(function() {
                        console.log('State ' + subscription + ': ' + JSON.stringify(state));
                        msg.payload = state;
                        node.send(msg);
                    }, 0);
                })
            )
        }
        
        

        Hatte das seinerzeit in einem node-red function-node implementiert und grad noch mal mit einer einzelnen subscription getestet. Läuft noch ;-)

        Gruß
        Reiner

        F Offline
        F Offline
        flohohoho
        schrieb am zuletzt editiert von
        #3

        @rewenode
        Vielen vielen Dank, das hat geklappt! Habe mir nun ein Array mit den Sates angelegt.

        servConn._socket.emit('subscribe', subscriptions)
        
        1 Antwort Letzte Antwort
        0
        • R Offline
          R Offline
          rewenode
          schrieb am zuletzt editiert von
          #4

          @flohohoho ::+1:

          C 1 Antwort Letzte Antwort
          0
          • R rewenode

            @flohohoho ::+1:

            C Offline
            C Offline
            chefffe
            schrieb am zuletzt editiert von chefffe
            #5

            @flohohoho
            Hallo,

            ich bin auch gerade an dem Thema dran per socket.IO dran und möchte bestimmte Datenpunkte abfragen und anzeigen.
            Mir ist noch nicht ganz klar wie ich die abonnierten Datenpunkte (ids) in ein Array packe und einzeln abfragen kann.
            Hast du einen Tipp für mich wie du es bei dir gelöst hast?

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