Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. ([gelöst]) Daten Sonnensystem Resol auslesen per VBUS

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    ([gelöst]) Daten Sonnensystem Resol auslesen per VBUS

    This topic has been deleted. Only users with topic management privileges can see it.
    • R
      RS_Tobi last edited by

      Hallo,

      also des Rätsels Lösung waren die XXXXXXXe im viaTag.

      Jetzt hat er andere Meldungen im Log und hat auch die STATES angelegt.

      (habe wieder auf "true" gestellt.

      nun muss ich mal sehen, was ich damit anfangen kann….

      HERZLICHEN DANK!

      Grüße Tobi

      1 Reply Last reply Reply Quote 0
      • Dutchman
        Dutchman Developer Most Active Administrators last edited by

        @RS_Tobi:

        Hallo,

        also des Rätsels Lösung waren die XXXXXXXe im viaTag.

        Jetzt hat er andere Meldungen im Log und hat auch die STATES angelegt.

        (habe wieder auf "true" gestellt.

        nun muss ich mal sehen, was ich damit anfangen kann….

        HERZLICHEN DANK!

        Grüße Tobi `

        Nice und Grund dass besser im Script ab zu fangen :-).

        Du benutzt jetzt aber die 0.8 Version?

        –-----------------------

        Send from mobile device

        1 Reply Last reply Reply Quote 0
        • R
          RS_Tobi last edited by

          @Dutchman:

          @RS_Tobi:

          Hallo,

          also des Rätsels Lösung waren die XXXXXXXe im viaTag.

          Jetzt hat er andere Meldungen im Log und hat auch die STATES angelegt.

          (habe wieder auf "true" gestellt.

          nun muss ich mal sehen, was ich damit anfangen kann….

          HERZLICHEN DANK!

          Grüße Tobi `

          Nice und Grund dass besser im Script ab zu fangen :-).

          Du benutzt jetzt aber die 0.8 Version?

          –-----------------------

          Send from mobile device ` Ja genau, die aus deinem letzten Post mit dem Skript.

          Tobi

          Gesendet von meinem D5803 mit Tapatalk

          1 Reply Last reply Reply Quote 0
          • M
            meifi2017 last edited by

            Hallo Dutchman,

            ich habe die Fehler, welche man so machen könnte versucht abzufangen… kannst ja mal rüber schauen. Bei mir läuft es soweit schon.

            //******************************************
            //************Dutchman & meifi2017**********
            //*******************V 0.9****************** 
            //******************************************
            
            // define variable
            var vbus = require('resol-vbus');
            var headerSet = new vbus.HeaderSet();
            var conn;
            var create_states = false; // !!! set initial on true to create states once, disable value afterwards to update states !!
            
            // Schedule every 20 seconds
            schedule("*/20 * * * * *", function () {
            
            //*****************************SET VARs***************************************************************************
            var resolhost = '192.168.178.201';      // Can be used with via.vbus.net OR internal 192xxxxx adress !
            var resolviaTag = 'xxxx';                   // only necessary if connected using VBus.net otherwise leave empty
            var resolpass = 'vbus';                 //default is set
            var resolDL3 = false;           //set to true if you use a DL3
            var worktime = 10000;           // 10 second timer, collection all information takes some seconds [emoji6]
            
            //*****************************Dont edit something below**********************************************************
            
            //check vars
                var regip = new RegExp("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$");
            
            if(resolDL3) {
                if (regip.test(resolhost)) {
                    conn = new vbus.TcpConnection({
                        host: resolhost,
                        password: resolpass, 
                        channel: 1,
                    });
                } else {
                    conn = new vbus.TcpConnection({
                        host: resolhost,
                        viaTag: resolviaTag,
                        password: resolpass, 
                        channel: 1,
                });
                }
            } else {
                    if (regip.test(resolhost)) {
                    conn = new vbus.TcpConnection({
                        host: resolhost,
                        password: resolpass, 
                    });
                } else {
                    conn = new vbus.TcpConnection({
                        host: resolhost,
                        viaTag: resolviaTag,
                        password: resolpass, 
                });
                }
            }
            
                // Log connection status
                var onConnectionStateChange = function(state) {
                console.debug(state);
                };
            
                var onPacket = function(packet) {
                    headerSet.addHeader(packet);
                };
            
                conn.on('connectionState', onConnectionStateChange);
                conn.on('packet', onPacket);
            
                conn.connect().done(function() {
            
                    setTimeout(function() {
                        conn.disconnect();
            
                        //create header packages
                        var packets = headerSet.getSortedHeaders();
                        var spec = vbus.Specification.getDefaultSpecification();
                        var packetFields = spec.getPacketFieldsForHeaders(packets);
            
                        var packet = null;
                        var counter = 0;
            
                        packetFields.forEach(function(packetField) {
                            counter = counter + 1;
                            if (packet !== packetField.packet) {
                                packet = packetField.packet;
                                console.debug(packetField.packetSpec.fullName);
            
                            }
                            // write values in memory
                            packetField.name = packetField.name.replace(/ /g,"");
            
                            console.debug("Value received : " + packetField.name + " = " + packetField.formatTextValue());
            
                            rawvalue = packetField.formatTextValue();
                            rawvalue = rawvalue.replace(/[^0-9.,]/g,"");
            
                            console.debug("Value translated to raw format : " + rawvalue);
            
                            // Create new objects only if "var create_states = true"
                            if (create_states === true){
            
                                // create objects real data
                                createState("vbus.values." + packetField.name ,{
                                    name: packetField.name,
                                    type: 'string',
                                    role: 'value'
                                });
            
                                // create objects raw data only
                                createState("vbus.values_raw." + packetField.name ,{
                                    name: packetField.name + "_raw",
                                    type: 'string',
                                    role: 'value'
                                });
            
                            } else {
                                // Update values
                                setState("vbus.values." + packetField.name , packetField.formatTextValue(), true);
                                setState("vbus.values_raw." + packetField.name , rawvalue, true);
                            }
            
                        });
            
                        if (create_states === true){
                            console.warn("States created change var create_states to False !!!");
                        }
            
                    }, worktime);
                });
            
            });
            
            //2017-10-12 meifi2017 - added new vars section and auto connection build
            
            
            1 Reply Last reply Reply Quote 0
            • Dutchman
              Dutchman Developer Most Active Administrators last edited by

              @meifi2017:

              Hallo Dutchman,

              ich habe die Fehler, welche man so machen könnte versucht abzufangen… kannst ja mal rüber schauen. Bei mir läuft es soweit schon.

              //******************************************
              //************Dutchman & meifi2017**********
              //*******************V 0.9****************** 
              //******************************************
              
              // define variable
              var vbus = require('resol-vbus');
              var headerSet = new vbus.HeaderSet();
              var conn;
              var create_states = false; // !!! set initial on true to create states once, disable value afterwards to update states !!
              
              // Schedule every 20 seconds
              schedule("*/20 * * * * *", function () {
              
              //*****************************SET VARs***************************************************************************
              var resolhost = '192.168.178.201';      // Can be used with via.vbus.net OR internal 192xxxxx adress !
              var resolviaTag = 'xxxx';                   // only necessary if connected using VBus.net otherwise leave empty
              var resolpass = 'vbus';                 //default is set
              var resolDL3 = false;           //set to true if you use a DL3
              var worktime = 10000;           // 10 second timer, collection all information takes some seconds [emoji6]
              
              //*****************************Dont edit something below**********************************************************
              
              //check vars
                  var regip = new RegExp("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$");
                  
              
              if(resolDL3) {
                  if (regip.test(resolhost)) {
                      conn = new vbus.TcpConnection({
                          host: resolhost,
                          password: resolpass, 
                          channel: 1,
                      });
                  } else {
                      conn = new vbus.TcpConnection({
                          host: resolhost,
                          viaTag: resolviaTag,
                          password: resolpass, 
                          channel: 1,
                  });
                  }
              } else {
                      if (regip.test(resolhost)) {
                      conn = new vbus.TcpConnection({
                          host: resolhost,
                          password: resolpass, 
                      });
                  } else {
                      conn = new vbus.TcpConnection({
                          host: resolhost,
                          viaTag: resolviaTag,
                          password: resolpass, 
                  });
                  }
              }
              
                  
              
                  // Log connection status
                  var onConnectionStateChange = function(state) {
                  console.debug(state);
                  };
              
                  var onPacket = function(packet) {
                      headerSet.addHeader(packet);
                  };
              
                  conn.on('connectionState', onConnectionStateChange);
                  conn.on('packet', onPacket);
              
                  conn.connect().done(function() {
                      
                      setTimeout(function() {
                          conn.disconnect();
              
                          //create header packages
                          var packets = headerSet.getSortedHeaders();
                          var spec = vbus.Specification.getDefaultSpecification();
                          var packetFields = spec.getPacketFieldsForHeaders(packets);
              
                          var packet = null;
                          var counter = 0;
                          
                          packetFields.forEach(function(packetField) {
                              counter = counter + 1;
                              if (packet !== packetField.packet) {
                                  packet = packetField.packet;
                                  console.debug(packetField.packetSpec.fullName);
              
                              }
                              // write values in memory
                              packetField.name = packetField.name.replace(/ /g,"");
                              
                              console.debug("Value received : " + packetField.name + " = " + packetField.formatTextValue());
                              
                              rawvalue = packetField.formatTextValue();
                              rawvalue = rawvalue.replace(/[^0-9.,]/g,"");
                              
                              console.debug("Value translated to raw format : " + rawvalue);
              
                              // Create new objects only if "var create_states = true"
                              if (create_states === true){
                                  
                                  // create objects real data
                                  createState("vbus.values." + packetField.name ,{
                                      name: packetField.name,
                                      type: 'string',
                                      role: 'value'
                                  });
                                  
                                  // create objects raw data only
                                  createState("vbus.values_raw." + packetField.name ,{
                                      name: packetField.name + "_raw",
                                      type: 'string',
                                      role: 'value'
                                  });
                                  
              
                              } else {
                                  // Update values
                                  setState("vbus.values." + packetField.name , packetField.formatTextValue(), true);
                                  setState("vbus.values_raw." + packetField.name , rawvalue, true);
                              }
                              
                          });
              
                          if (create_states === true){
                              console.warn("States created change var create_states to False !!!");
                          }
              
                      
                      }, worktime);
                  });
                  
              });
              
              //2017-10-12 meifi2017 - added new vars section and auto connection build
              
              ```` `  
              

              Hi meifi,

              Danke, aber das hatte ich doch bereits in der 0.8 Version eingebaut Mit diesem Code Schnipsel:

              if (create_states === true){
                              console.warn("States created change var create_states to False !!!");
                          }
              
              

              –-----------------------

              Send from mobile device

              1 Reply Last reply Reply Quote 0
              • M
                meifi2017 last edited by

                Hi,

                das ist unabhängig vom createstate. Ich prüfe nochmal, ob es sich um eine IP-Adresse oder einen Hostnamen

                handelt und passe somit die connectionparameter an. Somit wird, bei einer LANVerbindung garnicht

                erst der viaTag übergeben

                if(resolDL3) {
                    if (regip.test(resolhost)) {
                        conn = new vbus.TcpConnection({
                            host: resolhost,
                            password: resolpass, 
                            channel: 1,
                        });
                    } else {
                        conn = new vbus.TcpConnection({
                            host: resolhost,
                            viaTag: resolviaTag,
                            password: resolpass, 
                            channel: 1,
                    });
                    }
                } else {
                        if (regip.test(resolhost)) {
                        conn = new vbus.TcpConnection({
                            host: resolhost,
                            password: resolpass, 
                        });
                    } else {
                        conn = new vbus.TcpConnection({
                            host: resolhost,
                            viaTag: resolviaTag,
                            password: resolpass, 
                    });
                    }
                }
                
                
                1 Reply Last reply Reply Quote 0
                • M
                  meifi2017 last edited by

                  Hallo zusammen,

                  da ich plane eine weitere Resol bei mir in Einsatz zu bringen, habe ich ich die deviceIDs mit eingebaut, sowie ein paar infos zu den devices. Gerne mal testen und eine Rückmeldung geben.

                  Beim ersten start, nicht vergessten, create_states auf true zu setzen. 🙂

                  //******************************************
                  //************Dutchman & meifi2017**********
                  //*******************V 1.1****************** 
                  //******************************************
                  
                  // define variable
                  var vbus = require('resol-vbus');
                  var headerSet = new vbus.HeaderSet();
                  var conn;
                  var create_states = false; // !!! set initial on true to create states once, disable value afterwards to update states !!
                  
                  // Schedule every 20 seconds
                  schedule("*/20 * * * * *", function () {
                  
                  //*****************************SET VARs***************************************************************************
                  var resolhost = '';      // Can be used with via.vbus.net OR internal 192xxxxx adress !
                  var resolviaTag = 'xxxx';                   // only necessary if connected using VBus.net otherwise leave empty
                  var resolpass = 'vbus';                 //default is set
                  var resolDL3 = false;           //set to true if you use a DL3
                  var worktime = 10000;           // 10 second timer, collection all information takes some seconds [emoji6]
                  
                  //*****************************Dont edit something below**********************************************************
                  
                  //check vars
                      var regip = new RegExp("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$");
                  
                  if(resolDL3) {
                      if (regip.test(resolhost)) {
                          conn = new vbus.TcpConnection({
                              host: resolhost,
                              password: resolpass, 
                              channel: 1,
                          });
                      } else {
                          conn = new vbus.TcpConnection({
                              host: resolhost,
                              viaTag: resolviaTag,
                              password: resolpass, 
                              channel: 1,
                      });
                      }
                  } else {
                          if (regip.test(resolhost)) {
                          conn = new vbus.TcpConnection({
                              host: resolhost,
                              password: resolpass, 
                          });
                      } else {
                          conn = new vbus.TcpConnection({
                              host: resolhost,
                              viaTag: resolviaTag,
                              password: resolpass, 
                      });
                      }
                  }
                  
                      // Log connection status
                      var onConnectionStateChange = function(state) {
                      console.debug(state);
                      };
                  
                      var onPacket = function(packet) {
                          headerSet.addHeader(packet);
                      };
                  
                      conn.on('connectionState', onConnectionStateChange);
                      conn.on('packet', onPacket);
                  
                      conn.connect().done(function() {
                  
                          setTimeout(function() {
                              conn.disconnect();
                  
                              //create header packages
                              var packets = headerSet.getSortedHeaders();
                              var spec = vbus.Specification.getDefaultSpecification();
                              var packetFields = spec.getPacketFieldsForHeaders(packets);
                  
                              var packet = null;
                              var counter = 0;
                              var resoldeviceold = '';
                              packetFields.forEach(function(packetField) {
                  
                                  counter = counter + 1;
                                  if (packet !== packetField.packet) {
                                      packet = packetField.packet;
                                      console.debug(packetField.packetSpec.fullName);
                  
                                  }
                                  // write values in memory
                                  packetField.name = packetField.name.replace(/ /g,"");
                                  var resoldevice = packetField.packetSpec.sourceDevice.deviceId
                  
                                  console.debug("Value received : " + packetField.name + " = " + packetField.formatTextValue());
                  
                                  rawvalue = packetField.formatTextValue();
                                  rawvalue = rawvalue.replace(/[^0-9.,]/g,"");
                  
                                  console.debug("Value translated to raw format : " + rawvalue);
                  
                                  // Create new objects only if "var create_states = true"
                                  if (create_states === true){
                                      if (resoldevice != resoldeviceold){
                                          createState("vbus." + resoldevice + ".device.deviceId" ,{
                                              name: packetField.packetSpec.sourceDevice.deviceId,
                                              type: 'string',
                                              role: 'value'
                                          });
                                           createState("vbus." + resoldevice + ".device.channel" ,{
                                              name: packetField.packetSpec.sourceDevice.channel,
                                              type: 'string',
                                              role: 'value'
                                          });
                                            createState("vbus." + resoldevice + ".device.selfAddress" ,{
                                              name: packetField.packetSpec.sourceDevice.selfAddress,
                                              type: 'string',
                                              role: 'value'
                                          });
                                             createState("vbus." + resoldevice + ".device.peerAddress" ,{
                                              name: packetField.packetSpec.sourceDevice.peerAddress,
                                              type: 'string',
                                              role: 'value'
                                          });
                                              createState("vbus." + resoldevice + ".device.name" ,{
                                              name: packetField.packetSpec.sourceDevice.name,
                                              type: 'string',
                                              role: 'value'
                                          });
                                               createState("vbus." + resoldevice + ".device.fullName" ,{
                                              name: packetField.packetSpec.sourceDevice.fullName,
                                              type: 'string',
                                              role: 'value'
                                          });
                                          resoldeviceold = resoldevice;
                                      }
                                      // create objects real data
                                      createState("vbus." + resoldevice + ".values." + packetField.name ,{
                                          name: packetField.name,
                                          type: 'string',
                                          role: 'value'
                                      });
                  
                                      // create objects raw data only
                                      createState("vbus." + resoldevice + ".values_raw." + packetField.name ,{
                                          name: packetField.name + "_raw",
                                          type: 'string',
                                          role: 'value'
                                      });
                  
                                  } else {
                                      // Update values
                                      setState("vbus." + resoldevice + ".values." + packetField.name , packetField.formatTextValue(), true);
                                      setState("vbus." + resoldevice + ".values_raw." + packetField.name , rawvalue, true);
                                  }
                  
                              });
                  
                              if (create_states === true){
                                  console.warn("States created change var create_states to False !!!");
                              }
                  
                          }, worktime);
                      });
                  
                  });
                  
                  //2017-10-12 meifi2017 - added new vars section and auto connection build
                  //2017-10-12 meifi2017 - added multi-device support
                  
                  

                  Viele Grüße aus Hamburg

                  meifi

                  1 Reply Last reply Reply Quote 0
                  • Dutchman
                    Dutchman Developer Most Active Administrators last edited by

                    Hi Meifi,

                    Es freut mich das du mithilfst das script zu verbessern und es wird ja immer besser ! Und ich sehe bereits das nicht nur wir 2 sonder viel mehr unsere bastelei benutzen 8-) :lol:

                    Ich habe deine version getested und sie funtioniert gut, danke dir ! Die error abfrage des xxx tags ist sehr schoen

                    Ich hatte in meinem vorige update mehr debug eingebaut, hast du das mal probiert ? fand das doch interessant zum troubleshooten.

                    Ich fand es auch besser (sehe das du das uebernommen hast) nicht fuer jeden state einen ordner an zu legen sonder 2 basis ordner value und raw (wofuer nochmal dank das die die raw function gemacht hast !)

                    Da ich langsamerhand ein bisschen die ubersicht der versionen verliere und es schwer ist im forum die aenderungen zu uebersehen habe ich das ganze mal auf gith gepakt:

                    https://github.com/DutchmanNL/ioBroker. … ol-VBUS.js

                    Hast du einen git account ? waere toll wen wir da weiter bastelen koennen und auch die changes besser unter kontrolle haben. Die readme usw muss ich noch machen (heute abend) denke aber mal das wird dan auch leichter fuer andere es zu benutzen....

                    Habe auch noch einen kleinen aenderung gemacht und den state true/false in die config sektion gepakt damit es uebersichtlicher ist.

                    Vielleicht kan man ja doch irgendwan mal mit dieser basis einen adapter draus bauen das waere total klasse !

                    Noch ne anderer frage, wies siehst du das: Ich war am ueberlegen ob man nicht den shedule rausnemen sollte (der jetzt alle 20 sec abfragt) und einfach konstant lauschern sollten nach dem bus.

                    Haben es noch nicht ganz geschafft aber bin am spielen. Die frage ist aber was ist besser:

                    • Pollen (so wie jetzt)

                    • lauschen

                    • moeglischkeit per setting zwischen pollen und lauscchen

                    zudem (hab ich auch noch nicht hinbekommen) waere es denke ich mal cool die setting "create state" complett aus zu bauen und auf error abfrage (steht gibt es ja/nein) den erstellen zu lassen.

                    nochmals danke dir fuer deine hilfe und teilen was due bastelst !!!

                    1 Reply Last reply Reply Quote 0
                    • A
                      alexw85 last edited by

                      Hallo in die Runde!

                      Ich bin der neue der Resol zuhause verbaut hat und mit ioBroker jetzt versucht sein Zuhause Smart zu steuern. Ich wechsele von FHEM und bin jetzt hier gelandet 🙂

                      Da ich gerne Homematic und Resol in Sachen Heizung und Solar zum Zusammenarbeiten überzeugen möchte, erhoffe ich mir mit ioBroker die eierlegende Wollmilchsau gefunden zu haben. Was ich hier in die Richtung lese sieht ja schonmal sehr vielversprechend aus! [emoji4]

                      Zusammenarbeiten heißt natürlich auch auf dem Vbus zu schreiben, das Modul ist wohl dazu in der Lage, hat da schon jemand Erfahrung?

                      Ich installiere jetzt erstmal das Ganze und werde mich dann ggf. an die Entwicklung von einem evtl. vieleicht sogar separaten?! Config Adapter machen, der rein nur zum steuern der Resol Regler dient. Muss mich aber erstmal etwas reinarbeiten und den richtigen Debugger (und die Zeit) finden. Mein Ansporn dazu ist das hier:

                      http://danielwippermann.github.io/resol … ample.html

                      Herzlichen Dank vorab schon mal an das bis jetzt von euch umgesetzte, ich finde es echt genial wie hier etwas entsteht und ich hoffe ich kann mich einbringen! [emoji847]

                      Gesendet von meinem SM-T819 mit Tapatalk

                      1 Reply Last reply Reply Quote 0
                      • Dutchman
                        Dutchman Developer Most Active Administrators last edited by

                        @alexw85:

                        Hallo in die Runde!

                        Ich bin der neue der Resol zuhause verbaut hat und mit ioBroker jetzt versucht sein Zuhause Smart zu steuern. Ich wechsele von FHEM und bin jetzt hier gelandet [emoji3]

                        Da ich gerne Homematic und Resol in Sachen Heizung und Solar zum Zusammenarbeiten überzeugen möchte, erhoffe ich mir mit ioBroker die eierlegende Wollmilchsau gefunden zu haben. Was ich hier in die Richtung lese sieht ja schonmal sehr vielversprechend aus! [emoji4]

                        Zusammenarbeiten heißt natürlich auch auf dem Vbus zu schreiben, das Modul ist wohl dazu in der Lage, hat da schon jemand Erfahrung?

                        Ich installiere jetzt erstmal das Ganze und werde mich dann ggf. an die Entwicklung von einem evtl. vieleicht sogar separaten?! Config Adapter machen, der rein nur zum steuern der Resol Regler dient. Muss mich aber erstmal etwas reinarbeiten und den richtigen Debugger (und die Zeit) finden. Mein Ansporn dazu ist das hier:

                        http://danielwippermann.github.io/resol … ample.html

                        Herzlichen Dank vorab schon mal an das bis jetzt von euch umgesetzte, ich finde es echt genial wie hier etwas entsteht und ich hoffe ich kann mich einbringen! [emoji847]

                        Gesendet von meinem SM-T819 mit Tapatalk `

                        Hi Alex,

                        Befor wie Sachen Durcheinander bringen:

                        1. dir ist aufgefallen dass unser Script genau dieses npm Modul benutzt ?!

                        2. das Script alle Basis hat um weiter entwickelt zu werden zu einem Adapter, das Lesen und erstellen von objecten und eventuelle Fehler haben wir zum Teil bereits abgefangen.

                        Ich erkläre dir gerne in Detail was genau

                        1. da es mir das nötige Know-how und zur fehlt konnte ich das Script (noch) nicht zu einem Adapter umbauen, jede Hilfe darin umarme ich gerne und würde gerne helfen/beteiligt sein wo möglich

                        Ich habe auch bereits eine repository erstellt, diese beinhaltet in Moment nur dieses Script.

                        1. wir einige Entscheidungen bei dieser Entwicklung machen müssen zB:
                        • welche Configuration (intern/extern abfragen)

                        • Pollen oder lauschen

                        • welche Connections, das Modul unterstützt TCP und seriell

                        1. wo hast du etwas von Schreiben gelesen? Ich sehe in der docu nur save von Einstellungen nicht schreiben auf den Bus

                        Greetz Dutch

                        Edit: hier noch ein Link nach sources die ich benutzt habe in zu verstehen wie man die Header liest und umbaut

                        https://groups.google.com/forum/m/#!forum/resol-vbus

                        Ich sehe hier das man eine json Laden kann um etwas zu ändern der thread sagt aber nicht ob es gelungen ist.

                        https://groups.google.com/forum/m/#!top … rphfhl8dWM

                        Edit 2: github sagt doch das man

                         Allows to send parameterization commands to a controller
                        

                        Also er kann Kommandos senden mir ist aber nicht deutlich was genau.

                        Es gibt auch eine json Abfrage welche Daten schreibbar sind damit könnte man theoretisch den flag read bzw wie auf die Objekte schreiben

                        –-----------------------

                        Send from mobile device

                        1 Reply Last reply Reply Quote 0
                        • A
                          alexw85 last edited by

                          Erste Erfolgsmeldung! 🙂

                          Hallo zusammen, ich habe das Script hier jetzt mal installiert und läuft nachdem ich mich in meinen DL2 gehackt habe (Passwort vergessen) und den create_states geändert habe (war wieder zu hektisch und hab nicht richtig gelesen 🙂 ) Vieleicht könnte man hier mal ansetzen das beim starten/neustarten des Scripts einmalig der Wert auf true gesetzt wird (um evtl. neue Werte einzulesen wenn ich eine Funktion aktiviere, oder den Bus mit einem weiteren Modul erweitere) und dann auf false um alle 20 Sekunden die Werte zu holen… Oder gibt es da anderweitig Probleme?

                          Hab dann gleich mal in der Console von dem Link gestern die Anleitung befolgt und mit LoadAll eine json erstellt mit allen Einstellungen. Davon zwei weitere Jsons wo nur ein Wert stand, einmal den Sensor Offset von meinem Speicher Mitte auf 10 Grad mehr und wieder auf den Ursprungswert. Diese Json hab ich gesendet und zack wars im Speicher 10 Grad wärmer (Das nenn ich mal Energieertrag um diese Jahreszeit! 🙂 ) In der Json stand dabei nur folgendes: {"Sensor_Regler_S5_Offset":100}

                          Dann nochmal den Ursprungswert hinterher und es war wieder kalt...

                          Das Resol-Vbus Modul dekodiert also schon diese ganzen kryptischen Adressen des Vbus und übersetzt sie in die Klartextwerte die auch VBus.net oder Dutchmans Script anzeigt was schonmal sehr sehr gut ist, damit kann man was anfangen!

                          Eine genaue Testanleitung werde ich noch nachreichen, bin jetzt auf der Arbeit und habe nur schnell über VBus.net auf meinen DL2 zugegriffen [emoji850]

                          Ich versuche mich dann auch mal an einem Script zum Werte ändern, wenn das läuft könnte man versuchen beide zusammenzuführen zu einem was beides kann um daraus dann einen Adapter zu basteln.

                          Jetzt brauch ich nur noch ein Widgetset für VIS, damit ich das alles schön darstellen kann, dann muss ich VBus.net Pro schonmal nichtmehr verlängern was in 3 Tagen ausläuft… [emoji48]

                          Gesendet von meinem SM-G955F mit Tapatalk

                          1 Reply Last reply Reply Quote 0
                          • A
                            alexw85 last edited by

                            Hallo,

                            wie versprochen hier etwas mehr Detail und auch schon ein erstes angepasstes Script was identisch wie Dutchmans Script gestartet wird. Bevor es funktioniert müssen noch ein paar Module installiert werden, diese sind wie folgt:

                            In der Console in den Ordner "/opt/iobroker/node_modules/iobroker.javascript" wechseln und folgende Module nachinstallieren:

                            npm install q

                            npm install express

                            npm install optimist

                            npm install kue

                            Dann sollte dieses Script hier erstmal laufen. Was ich jetzt noch nicht hinbekommen habe ist die Json so weiterzuverarbeiten das daraus Datenpunkte angelegt und die Werte gleich angelegt werden, kann das einer zufällig aus dem FF mal schnell erledigen? 🙂

                            'use strict';
                            
                            var fs = require('fs');
                            // var util = require('util');
                            
                            var express = require('express');
                            var kue = require('kue');
                            var _ = require('lodash');
                            var optimist = require('optimist');
                            var Q = require('q');
                            
                            var vbus = require('resol-vbus/src/index');
                            
                            var action = {
                                    "loadAll" : true, // Das hier legt jetzt erstmal fest was gemacht werden soll und zwar "AllesAuslesen"
                                    "out": "/opt/iobroker/ResolVBusConfigTest.json" // Der Pfad zur Json mit dem ausgelesenen Werten, kann auch woanders abgelegt werden, bzw. am besten gleich als Datenpunkt in ioBroker!
                            };
                            
                            var config = {
                                "connection": {
                                    "class": "TcpConnection",
                                    "options": {
                                        "host": "XXXXXXXXXXX.via.vbus.net", // Hier wie bekannt IP Adresse oder VBus.net Adresse eingeben
                                        "viaTag": "XXXXXXXXXXX", // Hier das viaTag, wird nur bei Verbindung über Vbus.net benötigt und entspricht der Adresse wie "host", nur ohne .via.vbus.net
                                        "password": "vbus" // Das Passwort, bitte ändern wenn von euch geändert!
                                    }
                                }
                            
                            };
                            
                            var promise = vbus.utils.promise;
                            
                            var i18n = new vbus.I18N('en');
                            
                            var reportProgress = function(message) {
                                var line;
                                if (_.isString(message)) {
                                    line = message;
                                } else if (message.message === 'OPTIMIZING_VALUES') {
                                    line = i18n.sprintf('Optimizing set of values for round %d', message.round);
                                } else if (message.message === 'GETTING_VALUE') {
                                    line = i18n.sprintf('Getting value %d/%d, try %d: %s', message.valueNr, message.valueCount, message.tries, message.valueId);
                                } else if (message.message === 'SETTING_VALUE') {
                                    line = i18n.sprintf('Setting value %d/%d, try %d: %s', message.valueNr, message.valueCount, message.tries, message.valueId);
                                } else if (message.message === 'CONNECTION_STATE') {
                                    line = i18n.sprintf('Connection state changed to %s', message.connectionState);
                                } else if (message.message === 'WAITING_FOR_FREE_BUS') {
                                    line = i18n.sprintf('Waiting for free bus');
                                } else if (message.message === 'RELEASING_BUS') {
                                    line = i18n.sprintf('Releasing bus');
                                } else {
                                    line = i18n.sprintf('%s: %s', message.message, JSON.stringify(message));
                                }
                            
                                if (_.isNumber(message.round)) {
                                    line = i18n.sprintf('[%d] %s', message.round, line);
                                }
                            
                                console.log(line);
                            };
                            
                            var loadJsonFile = function(filename) {
                                return promise(function(resolve, reject) {
                                    fs.readFile(filename, function(err, data) {
                                        if (err) {
                                            reject(err);
                                        } else {
                                            resolve(data);
                                        }
                                    });
                                }).then(function(data) {
                                    return JSON.parse(data);
                                });
                            };
                            
                            var createConnection = function() {
                                var connectionConfig = config.connection;
                            
                                var Connection = vbus [connectionConfig.class];
                            
                                var conn = new Connection(connectionConfig.options);
                            
                                conn.on('connectionState', function(state) {
                                    reportProgress({
                                        message: 'CONNECTION_STATE',
                                        connectionState: state,
                                    });
                                });
                            
                                return conn;
                            };
                            
                            var processCustomizationJob = function(context, job) {
                                return Q.fcall(function() {
                                    reportProgress('Waiting for free bus...');
                            
                                    return context.connection.waitForFreeBus();
                                }).then(function(datagram) {
                                    context.masterAddress = datagram.sourceAddress;
                            
                                    reportProgress('Found master with address 0x' + context.masterAddress.toString(16));
                            
                                    context.deviceAddress = context.masterAddress;
                            
                                    return vbus.ConfigurationOptimizerFactory.createOptimizerByDeviceAddress(context.deviceAddress);
                                }).then(function(optimizer) {
                                    context.optimizer = optimizer;
                            
                                    context.customizer = new vbus.ConnectionCustomizer({
                                        deviceAddress: context.deviceAddress,
                                        connection: context.connection,
                                        optimizer: context.optimizer,
                                    });
                                }).then(function() {
                                    var onProgress = function(progress) {
                                        reportProgress(progress);
                                    };
                            
                                    var command = job.data.command;
                            
                                    var config = job.data.config;
                                    var currentConfig = context.currentConfig;
                            
                                    var options = {
                                        optimize: false,
                                    };
                            
                                    if (command === 'load') {
                                        options.optimize = !config;
                            
                                        return Q.fcall(function() {
                                            return context.customizer.loadConfiguration(config, options).progress(onProgress);
                                        }).then(function(config) {
                                            // console.log(config);
                                            return context.optimizer.completeConfiguration(config, currentConfig);
                                        }).then(function(config) {
                                            // console.log(config);
                                            context.currentConfig = config;
                                        });
                                    } else if (command === 'save') {
                                        return Q.fcall(function() {
                                            return context.customizer.saveConfiguration(config, currentConfig, options).progress(onProgress);
                                        }).then(function(config) {
                                            // console.log(config);
                                            return context.optimizer.completeConfiguration(config, currentConfig);
                                        }).then(function(config) {
                                            // console.log(config);
                                            context.currentConfig = config;
                                        });
                                    } else {
                                        throw new Error('Unknown command ' + JSON.stringify(command));
                                    }
                                });
                            };
                            
                            var serve = function() {
                                var context = {};
                            
                                return Q.fcall(function() {
                                    return createConnection();
                                }).then(function(conn) {
                                    context.connection = conn;
                            
                                    reportProgress('Connecting...');
                            
                                    return context.connection.connect();
                                }).then(function() {
                                    var jobs = kue.createQueue();
                                    jobs.process('customization', function(job, done) {
                                        Q.fcall(function() {
                                            return processCustomizationJob(context, job);
                                        }).done(function() {
                                            console.log('Job done!');
                            
                                            done();
                                        }, function(err) {
                                            console.log('Job failed!');
                            
                                            done(err);
                                        });
                                    });
                                }).then(function() {
                                    var app = express();
                                    app.get('/config', function(req, res) {
                                        var jsonConfig = _.reduce(context.currentConfig, function(memo, value) {
                                            if (!value.ignored) {
                                                memo [value.valueId] = value.value;
                                            }
                                            return memo;
                                        }, {});
                            
                                        res.json(jsonConfig);
                                    });
                                    app.use(kue.app);
                                    app.listen(3000);
                                });
                            };
                            
                            var runSingleShot = function(action) {
                                var context = {};
                            
                                if (action.q) {
                                    reportProgress = function() {};
                                }
                            
                                return Q.fcall(function() {
                                    return createConnection();
                                }).then(function(conn) {
                                    context.connection = conn;
                            
                                    if (action.old) {
                                        return loadJsonFile(action.old);
                                    }
                                }).then(function(oldConfig) {
                                    context.oldConfig = oldConfig;
                            
                                    if (action.loadAll) {
                                        return null;
                                    } else if (action.load) {
                                        return loadJsonFile(action.load);
                                    }
                                }).then(function(loadConfig) {
                                    context.loadConfig = loadConfig;
                            
                                    if (action.save) {
                                        return loadJsonFile(action.save);
                                    }
                                }).then(function(saveConfig) {
                                    context.saveConfig = saveConfig;
                            
                                    reportProgress('Connecting...');
                            
                                    return context.connection.connect();
                                }).then(function() {
                                    reportProgress('Waiting for free bus...');
                            
                                    return context.connection.waitForFreeBus();
                                }).then(function(datagram) {
                                    context.masterAddress = datagram.sourceAddress;
                            
                                    reportProgress('Found master with address 0x' + context.masterAddress.toString(16));
                            
                                    context.deviceAddress = context.masterAddress;
                            
                                    return vbus.ConfigurationOptimizerFactory.createOptimizerByDeviceAddress(context.deviceAddress);
                                }).then(function(optimizer) {
                                    context.optimizer = optimizer;
                            
                                    if (!optimizer) {
                                        reportProgress(i18n.sprintf('WARNING: Unable to create optimizer for master with address 0x%04X', context.masterAddress));
                                    }
                            
                                    context.customizer = new vbus.ConnectionCustomizer({
                                        deviceAddress: context.deviceAddress,
                                        connection: context.connection,
                                        optimizer: context.optimizer,
                                    });
                                }).then(function() {
                                    if (context.loadConfig !== undefined) {
                                        var onProgress = function(progress) {
                                            reportProgress(progress);
                                        };
                            
                                        var config = context.loadConfig;
                            
                                        var options = {
                                            optimize: !config,
                                        };
                            
                                        return context.customizer.loadConfiguration(config, options).progress(onProgress);
                                    }
                                }).then(function(config) {
                                    context.loadedConfig = config;
                            
                                    if (context.saveConfig !== undefined) {
                                        var onProgress = function(progress) {
                                            reportProgress(progress);
                                        };
                            
                                        var saveConfig = context.saveConfig;
                                        var oldConfig = context.oldConfig;
                            
                                        var options = {
                                            optimize: false,
                                        };
                            
                                        return context.customizer.saveConfiguration(saveConfig, oldConfig, options).progress(onProgress);
                                    } else {
                                        return config;
                                    }
                                }).then(function(config) {
                                    var jsonConfig = _.reduce(config, function(memo, value) {
                                        if (!value.ignored) {
                                            memo [value.valueId] = value.value;
                                        }
                                        return memo;
                                    }, {});
                            
                                    jsonConfig = JSON.stringify(jsonConfig);
                            
                                    if (action.out) {
                                        return vbus.utils.promise(function(resolve, reject) {
                                            fs.writeFile(action.out, jsonConfig, function(err) {
                                                if (err) {
                                                    reject(err);
                                                } else {
                                                    resolve();
                                                }
                                            });
                                        });
                                    } else {
                                        console.log(jsonConfig);
                                    }
                                }).finally(function() {
                                    reportProgress('Disconnecting...');
                            
                                    if (context.connection !== null) {
                                        context.connection.disconnect();
                                    }
                                });
                            };
                            
                            var main = function() {
                                var argv = optimist.argv;
                            
                                if (argv.serve) {
                                    return serve();
                                } else {
                                    return runSingleShot(action);
                                }
                            };
                            
                            Q.fcall(main).done();
                            
                            

                            Wenns geklappt hat sieht das Log ungefähr so aus wie im Anhang und in /opt/iobroker/ liegt eine Datei namens ResolVBusConfigTest.json mit eurer Config! 🙂
                            3795_iobroker_log.jpg
                            3795_iobrokerjson.jpg

                            1 Reply Last reply Reply Quote 0
                            • A
                              alexw85 last edited by

                              Hallo in die Runde!

                              So, mein Script ist Ferdisch! 😄 Ich habe Dutchmans Script mit eingebaut! Beim Start wird zuerst die Config des Resol Reglers ausgelesen, das kann je nachdem wie groß eure Konfiguration und die Verbindung ist etwas dauern und im Log natürlich mitverfolgt werden, danach werden die States angelegt, bzw. geupdatet. Zum Ende geht das Script in Bereitschaft und sendet sobald sich an der Config etwas ändert diese direkt an den Controller (Bitte Vorsicht was hier geändert wird, ändert zum Test vielleicht vorerst mal kurz den Offset eines unwichtigen Sensors!!! 8-) ). Gleichzeitig startet Dutchmans Script und liest alle 30 Sekunden die Livewerte ein. Hier habe ich jetzt mal die Raw Werte weggelassen, für was waren die? Ansonsten habe ich das jetzt Dutchmans Script soweit angepasst das automatisch entschieden wird ob die States angelegt, oder geupdatet werden!

                              Zum Betrieb, auch für die die jetzt neu hier lesen werden folgende Schritte benötigt:

                              1. ioBroker muss laufen und der Javascript Adapter muss installiert sein (Am Adapter wird als nächstes gebastelt!)

                              2. Über die Konsole (über ssh, putty usw.) in das ioBroker Hauptverzeichnis des Javascript Adapters wechseln, bei mir "/opt/iobroker/node_modules/iobroker.javascript/"

                              3. Dort folgende Module über npm installieren:

                              npm install resol-vbus

                              npm install express

                              npm install kue

                              npm install optimist

                              4. Das Script im Javascript Adapter in der Weboberfläche einlesen und bei "var config" unter "host" die IP Adresse des Gateways, Loggers, bzw. die VBus.net Adresse eingeben, bei Verbindungen über VBus.net wird noch der viaTag benötigt, euer Passwort (Standard lautet: vbus) und bei Verwendung eines DL3 noch der channel. Beispiel:

                              var config = {

                              "connection": {

                              "class": "TcpConnection",

                              "options": {

                              "host": "d1234567890.via.vbus.net",

                              "viaTag": "d1234567890",

                              "password": "vbus",

                              // "channel" : "1" // Bei Verwendung eines DL3 die zwei "//" am Beginn der Zeile wegmachen und ggf. die channel-number anpassen!

                              5. Falls euer ioBroker NICHT unter /opt/ioBroker installiert sein sollte, müsstet ihr noch den Pfad der gelesenen Config ändern! Ansonsten: Fertig!!! 🙂

                              Hier das Script:

                              /*! ############################################################################################################# */
                              /*! ### ioBroker Script zum auslesen und konfigurieren von Resol und anderen auf VBus basierenden Steuerungen ### */
                              /*! ####### Das Script basiert auf auf dem Node JS Modul "resol-vbus" von Daniel Wippermann und wurde von ####### */
                              /*! ################### Dutchman, meifi2017 & AlexW für die Verwendung in ioBroker angepasst! ################### */
                              /*! ############################################################################################################# */
                              
                              var fs = require('fs');
                              var express = require('express');
                              var kue = require('kue');
                              var _ = require('lodash');
                              var optimist = require('optimist');
                              var Q = require('q');
                              var vbus = require('resol-vbus/src/index');
                              var action = {
                                      "loadAll" : true,                                   // Bedeutet das beim Start des Scripts der Controller ausgelesen werden soll!
                                      "out": "/opt/iobroker/ResolVBusConfigTest.json"     // Pfad wo die gesamten Konfigurationswerte des Controllers beim Start des Scripts gespeichert werden sollen 
                              };
                              
                              /*! Hier bitte die spezifischen Verbindungsdaten eintragen! */
                              
                              var config = {
                                  "connection": {
                                      "class": "TcpConnection",
                                      "options": {
                                          "host": "192.168.178.100",  	// IP-Adresse oder VBus.net Adresse hier eintragen
                                          "viaTag": "",               		// Bei Verbindung über VBus.net ist hier das viaTag einzutragen
                                          "password": "vbus",         	// Passwort, Standard ist: vbus
                              //            "channel" : "1"          		// Channel, wird nur für die Verbindung über einen DL3 benötigt und ist standardmäßig auskommentiert!
                                      }
                                  }
                              };
                              
                              /*! Ab hier reiner Code */
                              
                              var timestamp;
                              
                              var Live = function() {
                              
                              var vbuslive = require('resol-vbus');
                              var headerSetlive = new vbuslive.HeaderSet();
                              var connlive;
                              
                              // Schedule every 30 seconds
                                  schedule("*/30 * * * * *", function () {
                              
                                      // Define connection values
                                      var connectionConfigLive = config.connection;
                                      var ConnectionLive = vbuslive [connectionConfigLive.class];
                                      connlive = new ConnectionLive(connectionConfigLive.options);
                              
                                      // Log connection status
                                      var onConnectionStateChange = function(state) {
                                      console.debug(state);
                                      };
                              
                                      var onPacket = function(packet) {
                                      headerSetlive.addHeader(packet);
                                      };
                              
                                      connlive.on('connectionState', onConnectionStateChange);
                                      connlive.on('packet', onPacket);
                              
                                      connlive.connect().done(function() {
                              
                                          setTimeout(function() {
                                              connlive.disconnect();
                              
                                              //create header packages
                                              var packets = headerSetlive.getSortedHeaders();
                                              var spec = vbuslive.Specification.getDefaultSpecification();
                                              var packetFields = spec.getPacketFieldsForHeaders(packets);
                              
                                              var packet = null;
                                              var counter = 0;
                              
                                              packetFields.forEach(function(packetField) {
                                                  counter = counter + 1;
                                                  if (packet !== packetField.packet) {
                                                  packet = packetField.packet;
                                                  console.debug(packetField.packetSpec.fullName);
                              
                                              }
                                                  // write values in memory
                                                  packetField.name = packetField.name.replace(/ /g,"");
                              
                                                  console.debug("Value received : " + packetField.name + " = " + packetField.formatTextValue());
                              
                                               try{
                                                  if (getIdByName(packetField.name) != null) {
                                                      setState("vbus.values." + packetField.name , packetField.formatTextValue(), true);
                                                  } else {
                                                          createState("vbus.values." + packetField.name , {
                                                          name: packetField.name,
                                                          type: 'string',
                                                          role: 'value',
                                                          def: packetField.formatTextValue(),
                                                          });
                                                      }
                                                  }   catch(e){}
                                              });
                                          // 10 second timer, collection all information takes some seconds [emoji6]
                                          }, 10000);
                                      });
                                  });
                              };
                              
                              var createStates = function() {
                              
                                  var file = action.out;
                              
                                  fs.readFile(file, 'utf8', function (err, body) {
                                      if (err) {}
                              
                                      JSON.parse(body, (key, value) => {
                                          var jsonkey = key;
                                          var jsonvalue = value;
                                              try{
                                                  if (jsonkey !== "" && getIdByName(jsonkey) != null)
                                                  setState("vbus.config." + jsonkey , parseFloat(jsonvalue), true);
                                                  }   catch(e){}
                                              try {
                                                  if (jsonkey !== "")
                                                      createState("vbus.config." + jsonkey , {
                                                          name: jsonkey,
                                                          type: 'number',
                                                          role: 'value',
                                                          def: parseFloat(jsonvalue),
                                                          });
                                                  }   catch (e){}
                                      });
                                  });
                                  action.loadAll = false;
                                  timestamp = Date.now();
                                  var ready = "Ready for processing...";
                                  setTimeout(console.log, 10000, ready); 
                                  return;
                              };
                              
                              var writeStates = function() {
                                  on({id: /^javascript\.\d\.vbus.config./, change: "ne"}, function (obj) {
                                      var statename = obj.name;
                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                      var lastChanged = getState(obj.id).lc;
                                      if (typeof oldValue !== "undefined" && lastChanged > (timestamp + 10000)) {
                                      console.log(statename + " hat sich von " + oldValue + " auf " + value + " geändert!");
                                      jsonWrite = JSON.stringify({[statename] : value});
                                      action.save = true;
                                      action.data = jsonWrite;
                                      setState("vbus.config." + statename , parseFloat(value), true);
                                      return runSingleShot(action);
                                      }
                                  });
                              };
                              
                              var promise = vbus.utils.promise;
                              
                              var i18n = new vbus.I18N('en');
                              
                              var reportProgress = function(message) {
                                  var line;
                                  if (_.isString(message)) {
                                      line = message;
                                  } else if (message.message === 'OPTIMIZING_VALUES') {
                                      line = i18n.sprintf('Optimizing set of values for round %d', message.round);
                                  } else if (message.message === 'GETTING_VALUE') {
                                      line = i18n.sprintf('Getting value %d/%d, try %d: %s', message.valueNr, message.valueCount, message.tries, message.valueId);
                                  } else if (message.message === 'SETTING_VALUE') {
                                      line = i18n.sprintf('Setting value %d/%d, try %d: %s', message.valueNr, message.valueCount, message.tries, message.valueId);
                                  } else if (message.message === 'CONNECTION_STATE') {
                                      line = i18n.sprintf('Connection state changed to %s', message.connectionState);
                                  } else if (message.message === 'WAITING_FOR_FREE_BUS') {
                                      line = i18n.sprintf('Waiting for free bus');
                                  } else if (message.message === 'RELEASING_BUS') {
                                      line = i18n.sprintf('Releasing bus');
                                  } else {
                                      line = i18n.sprintf('%s: %s', message.message, JSON.stringify(message));
                                  }
                              
                                  if (_.isNumber(message.round)) {
                                      line = i18n.sprintf('[%d] %s', message.round, line);
                                  }
                              
                                  console.log(line);
                              };
                              
                              var loadJsonFile = function(filename) {
                                  return promise(function(resolve, reject) {
                                      fs.readFile(filename, function(err, data) {
                                          if (err) {
                                              reject(err);
                                          } else {
                                              resolve(data);
                                          }
                                      });
                                  }).then(function(data) {
                                      return JSON.parse(data);
                                  });
                              };
                              
                              var createConnection = function() {
                                  var connectionConfig = config.connection;
                              
                                  var Connection = vbus [connectionConfig.class];
                              
                                  var conn = new Connection(connectionConfig.options);
                              
                                  conn.on('connectionState', function(state) {
                                      reportProgress({
                                          message: 'CONNECTION_STATE',
                                          connectionState: state,
                                      });
                                  });
                              
                                  return conn;
                              };
                              
                              var processCustomizationJob = function(context, job) {
                                  'use strict';
                                  return Q.fcall(function() {
                                      reportProgress('Waiting for free bus...');
                              
                                      return context.connection.waitForFreeBus();
                                  }).then(function(datagram) {
                                      context.masterAddress = datagram.sourceAddress;
                              
                                      reportProgress('Found master with address 0x' + context.masterAddress.toString(16));
                              
                                      context.deviceAddress = context.masterAddress;
                              
                                      return vbus.ConfigurationOptimizerFactory.createOptimizerByDeviceAddress(context.deviceAddress);
                                  }).then(function(optimizer) {
                                      context.optimizer = optimizer;
                              
                                      context.customizer = new vbus.ConnectionCustomizer({
                                          deviceAddress: context.deviceAddress,
                                          connection: context.connection,
                                          optimizer: context.optimizer,
                                      });
                                  }).then(function() {
                                      var onProgress = function(progress) {
                                          reportProgress(progress);
                                      };
                              
                                      var command = job.data.command;
                              
                                      var config = job.data.config;
                                      var currentConfig = context.currentConfig;
                              
                                      var options = {
                                          optimize: false,
                                      };
                              
                                      if (command === 'load') {
                                          options.optimize = !config;
                              
                                          return Q.fcall(function() {
                                              return context.customizer.loadConfiguration(config, options).progress(onProgress);
                                          }).then(function(config) {
                                              return context.optimizer.completeConfiguration(config, currentConfig);
                                          }).then(function(config) {
                                              context.currentConfig = config;
                                          });
                                      } else if (command === 'save') {
                                          return Q.fcall(function() {
                                              return context.customizer.saveConfiguration(config, currentConfig, options).progress(onProgress);
                                          }).then(function(config) {
                                              return context.optimizer.completeConfiguration(config, currentConfig);
                                          }).then(function(config) {
                                              context.currentConfig = config;
                                          });
                                      } else {
                                          throw new Error('Unknown command ' + JSON.stringify(command));
                                      }
                                  });
                              };
                              
                              var serve = function() {
                                  'use strict';
                                  var context = {};
                              
                                  return Q.fcall(function() {
                                      return createConnection();
                                  }).then(function(conn) {
                                      context.connection = conn;
                              
                                      reportProgress('Connecting...');
                              
                                      return context.connection.connect();
                                  }).then(function() {
                                      var jobs = kue.createQueue();
                                      jobs.process('customization', function(job, done) {
                                          Q.fcall(function() {
                                              return processCustomizationJob(context, job);
                                          }).done(function() {
                                              console.log('Job done!');
                              
                                              done();
                                          }, function(err) {
                                              console.log('Job failed!');
                              
                                              done(err);
                                          });
                                      });
                                  }).then(function() {
                                      var app = express();
                                      app.get('/config', function(req, res) {
                                          var jsonConfig = _.reduce(context.currentConfig, function(memo, value) {
                                              if (!value.ignored) {
                                                  memo [value.valueId] = value.value;
                                              }
                                              return memo;
                                          }, {});
                              
                                          res.json(jsonConfig);
                                      });
                                      app.use(kue.app);
                                      app.listen(3000);
                                  });
                              };
                              
                              var runSingleShot = function(action) {
                                  var context = {};
                              
                                  if (action.q) {
                                      reportProgress = function() {};
                                  }
                              
                                  return Q.fcall(function() {
                                      return createConnection();
                                  }).then(function(conn) {
                                      context.connection = conn;
                              
                                  }).then(function(oldConfig) {
                                      context.oldConfig = oldConfig;
                              
                                      if (action.loadAll) {
                                          return null;
                                      } else if (action.load) {
                                          return loadJsonFile(action.load);
                                      }
                                  }).then(function(loadConfig) {
                                      context.loadConfig = loadConfig;
                              
                                      if (action.save) {
                                          return JSON.parse(jsonWrite);
                                      }
                                  }).then(function(saveConfig) {
                                      context.saveConfig = saveConfig;
                              
                                      reportProgress('Connecting...');
                              
                                      return context.connection.connect();
                                  }).then(function() {
                                      reportProgress('Waiting for free bus...');
                              
                                      return context.connection.waitForFreeBus();
                                  }).then(function(datagram) {
                                      context.masterAddress = datagram.sourceAddress;
                              
                                      reportProgress('Found master with address 0x' + context.masterAddress.toString(16));
                              
                                      context.deviceAddress = context.masterAddress;
                              
                                      return vbus.ConfigurationOptimizerFactory.createOptimizerByDeviceAddress(context.deviceAddress);
                                  }).then(function(optimizer) {
                                      context.optimizer = optimizer;
                              
                                      if (!optimizer) {
                                          reportProgress(i18n.sprintf('WARNING: Unable to create optimizer for master with address 0x%04X', context.masterAddress));
                                      }
                              
                                      context.customizer = new vbus.ConnectionCustomizer({
                                          deviceAddress: context.deviceAddress,
                                          connection: context.connection,
                                          optimizer: context.optimizer,
                                      });
                                  }).then(function() {
                                      if (context.loadConfig !== undefined) {
                                          var onProgress = function(progress) {
                                              reportProgress(progress);
                                          };
                              
                                          var config = context.loadConfig;
                              
                                          var options = {
                                              optimize: !config,
                                          };
                              
                                          return context.customizer.loadConfiguration(config, options).progress(onProgress);
                                      }
                                  }).then(function(config) {
                                      context.loadedConfig = config;
                              
                                      if (context.saveConfig !== undefined) {
                                          var onProgress = function(progress) {
                                              reportProgress(progress);
                                          };
                              
                                          var saveConfig = context.saveConfig;
                                          var oldConfig = context.oldConfig;
                              
                                          var options = {
                                              optimize: false,
                                          };
                              
                                          return context.customizer.saveConfiguration(saveConfig, oldConfig, options).progress(onProgress);
                                      } else {
                                          return config;
                                      }
                                  }).then(function(config) {
                                      var jsonConfig = _.reduce(config, function(memo, value) {
                                          if (!value.ignored) {
                                              memo [value.valueId] = value.value;
                                          }
                                          return memo;
                                      }, {});
                              
                                      jsonConfig = JSON.stringify(jsonConfig);
                              
                                      if (action.out) {
                                          return vbus.utils.promise(function(resolve, reject) {
                                              fs.writeFile(action.out, jsonConfig, function(err) {
                                                  if (err) {
                                                      reject(err);
                                                  } else {
                                                      resolve();
                                                  }
                                              });
                                          });
                                      } else {
                                          console.log(jsonConfig);
                                      }
                                  }).finally(function() {
                                      reportProgress('Disconnecting...');
                                      action.loadAll = false;
                              
                                      if (context.connection !== null) {
                                          context.connection.disconnect();
                                      }
                                  });
                              };
                              
                              var main = function() {
                                  var argv = optimist.argv;
                              
                                  if (argv.serve) {
                                      return serve();
                                  } else {
                                      return runSingleShot(action);
                                  }
                              };
                              
                              Q.fcall(main)
                              .then(createStates)
                              .then(writeStates)
                              .then(Live)
                              .done();
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • Dutchman
                                Dutchman Developer Most Active Administrators last edited by

                                nice, good job ! jetzt nicht nur read sondern auch write 🙂 wir sollte das auf github pushen

                                die raw daten hatten wir hinzugefuegt weil man mit diesen einfacher rechnen kan, eventueel sollte man aber focus auf einen legen:

                                • entwerder raw wert und dan l/h, grad celcius usw wegschreiben als unit

                                • oder einfach alles so belassen und den plain text spaeter selber in scripten (wo noetig) umwandeln

                                (best practise waere glaube ich situation 1)

                                > danach werden die States angelegt, bzw. geupdatet

                                macht er das in deiner version nur wen de state nicht bereits existiert oder immer ?

                                > Zum Ende geht das Script in Bereitschaft und sendet sobald sich an der Config etwas ändert diese direkt an den Controller

                                wird beim erstellen der werte beruecksichtigt das eine "read only" und die anderen "write" option haben ? man sollte ja nur die werte in iobroker aendern koennen die auch wirklich im VBUS auch eine status aenderung acceptieren.

                                ~Dutch

                                1 Reply Last reply Reply Quote 0
                                • A
                                  alexw85 last edited by

                                  Hallo Dutchman,

                                  ich hab übrigens den Code gerade nochmal im vorherigen Post aktualisiert, hab noch ein paar Bugs gefunden…

                                  > die raw daten hatten wir hinzugefuegt weil man mit diesen einfacher rechnen kan, eventueel sollte man aber focus auf einen legen:

                                  Fürs Rechnen macht der Raw Wert natürlich Sinn ja, andererseits müsste ich jedes Mal wenn ich mir den Wert anzeigen lassen will umrechnen.. Hmmm… Es ist gerade schon zu spät um vernünftig zu denken! 🙂

                                  > macht er das in deiner version nur wen de state nicht bereits existiert oder immer ?

                                  Er prüft über Try…Catch und IF...ELSE ob es den State gibt, wenn ja macht er setState, wenn nein dann createState und setzt mit def: den initial Value Wert. Hatte erst immer createState ohne forceCreation und dann setState als Callback, in der Theorie hätte es eigentlich gehen müssen, tat es aber nicht! 🙂

                                  
                                                   try{
                                                      if (getIdByName(packetField.name) != null) {
                                                          setState("vbus.values." + packetField.name , packetField.formatTextValue(), true);
                                                      } else {
                                                              createState("vbus.values." + packetField.name , {
                                                              name: packetField.name,
                                                              type: 'string',
                                                              role: 'value',
                                                              def: packetField.formatTextValue(),
                                                              });
                                                          }
                                                      }   catch(e){}
                                  
                                  

                                  > wird beim erstellen der werte beruecksichtigt das eine "read only" und die anderen "write" option haben ? man sollte ja nur die werte in iobroker aendern koennen die auch wirklich im VBUS auch eine status aenderung acceptieren.

                                  Jaaa… Das Problem ist er akzeptiert alles, was momentan echt - wenn man nicht weiß was man verstellt - problematisch sein kann. Vorallem weiß ich gerade auch noch nicht wie ich die Timer darstellen soll, interessant wäre das natürlich auch in ioBroker den Zeitplan für die Nachtabsenkung zu steuern... Mein Problem ist jetzt das die Daten ja dynamisch nach der Art des Reglers und welche Funktionen aktiviert wurden eingelesen werden. Wenn ich jetzt eine Funktion im Regler deaktiviere, z.B. eine Zeitsteuerung, dann bekomm ich beim nächsten einlesen 80 Datenpunkte weniger ausgelesen. Ich hab die aber im ioBroker noch drin, es sei denn ich lösche beim einlesen der Config alle States und lege sie neu an. Dann kann ich aber die History nicht aktivieren und nicht nachvollziehen wann automatisch was gedreht wurde... :? Vieleicht könnte man beim starten des Scripts abfragen ob es in dem Ordner noch States gibt die mit dem einlesen der Config nicht aktualisiert wurden und diese dann auf ReadOnly setzen oder ganz wegschmeissen... Sollte über das auslesen des timestamps gehen! Alternativ setze ich beim einlesen erstmal alles auf ReadOnly und jeder muss für sich entscheiden was er schreibbar machen möchte, wäre vermutl. erstmal die sicherste Variante!

                                  Sowas wie eine Sicherungskopie bei jedem einlesen will ich auch noch integrieren. Falls mal was schief geht und man nicht mehr weiß was eingestellt war kann das recht nützlich sein 🙂 Weiß nur nicht ob ich im Adapterordner ein File generieren soll, oder die json in ein State trümmern soll (geht das überhaupt?) :lol: File generieren und auch sogar Ordner anlegen würde gehen, aber gibts was um vom WebUI darauf zuzugreifen um sie runterzuladen?! Für uns wäre es jetzt kein Problem sich die Datei zu ziehen, aber es müsste dann zukünftig irgendwie über den Adapter möglich sein...

                                  1 Reply Last reply Reply Quote 0
                                  • D
                                    dippi last edited by

                                    Hallo

                                    ich hab das Skript in der Version 1.1 am laufen.

                                    Könnt ihr mir noch sagen wie ich die Werte mit dem CloudAdapter per Alexa abfragen kann.

                                    Irgendwie kommen die nicht als Temperaturwert in dem Adapter an.

                                    Danke Gruß

                                    Dippi

                                    1 Reply Last reply Reply Quote 0
                                    • Dutchman
                                      Dutchman Developer Most Active Administrators last edited by

                                      Du müsstest die Werte noch zuordnen an Level.Temperature

                                      –-----------------------

                                      Send from mobile device

                                      Das schöne ios hat Auto Korrektur zum k****

                                      Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community

                                      1 Reply Last reply Reply Quote 0
                                      • D
                                        dippi last edited by

                                        Guten Morgen

                                        Miss ich das im Skript machen oder im Iobroker ?

                                        1 Reply Last reply Reply Quote 0
                                        • Dutchman
                                          Dutchman Developer Most Active Administrators last edited by

                                          @dippi:

                                          Guten Morgen

                                          Miss ich das im Skript machen oder im Iobroker ? `

                                          In ioBroker bei den entsprechenden objecte die der gewünschten function zuweisen

                                          –-----------------------

                                          Send from mobile device

                                          Das schöne ios hat Auto Korrektur zum k****

                                          Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community

                                          1 Reply Last reply Reply Quote 0
                                          • Beagel
                                            Beagel last edited by

                                            Hallo zusammen, bin neu bei iobroker und mache meine ersten Versuche.

                                            Hab jetzt mal versucht meine Solaranlage abzufragen, ist eine Resol DeltaSol_SL über Resol-Lan-Adapter.

                                            als Script läuft 1.2, Werte werden mir auch angezeigt aber im Log kommen immer wieder diese Fehlermeldungen :

                                            host.ioBroker-BPi	2017-12-28 12:26:20.762	info	Restart adapter system.adapter.javascript.0 because enabled
                                            host.ioBroker-BPi	2017-12-28 12:26:20.761	error	instance system.adapter.javascript.0 terminated with code 0 (OK)
                                            host.ioBroker-BPi	2017-12-28 12:26:20.760	error	Caught by controller[0]: at process._tickCallback (internal/process/next_tick.js:98:9)
                                            host.ioBroker-BPi	2017-12-28 12:26:20.759	error	Caught by controller[0]: at _combinedTickCallback (internal/process/next_tick.js:74:11)
                                            host.ioBroker-BPi	2017-12-28 12:26:20.758	error	Caught by controller[0]: at emitErrorNT (net.js:1278:8)
                                            host.ioBroker-BPi	2017-12-28 12:26:20.758	error	Caught by controller[0]: at Socket.emit (events.js:188:7)
                                            host.ioBroker-BPi	2017-12-28 12:26:20.756	error	Caught by controller[0]: at emitOne (events.js:96:13)
                                            host.ioBroker-BPi	2017-12-28 12:26:20.755	error	Caught by controller[0]: at Socket.onError (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/tcp-connection.js:370:13)
                                            host.ioBroker-BPi	2017-12-28 12:26:20.754	error	Caught by controller[0]: at onSocketTermination (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/tcp-connection.js:341:22)
                                            host.ioBroker-BPi	2017-12-28 12:26:20.753	error	Caught by controller[0]: Error: Unable to connect
                                            javascript.0	2017-12-28 12:26:20.610	error	Error: Unable to connect at onSocketTermination (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/tcp-connection.js:341:22) at Socket.onError (/opt/iobroker/node_modu
                                            javascript.0	2017-12-28 12:26:20.604	error	uncaught exception: Unable to connect
                                            javascript.0	2017-12-28 12:26:15.230	info	script.js.Vbus: registered 0 subscriptions and 1 schedule
                                            

                                            wenn ich im Script resolDL3 auskommentiere

                                            //*****************************SET VARs***************************************************************************
                                            var resolhost = '192.168.178.40';                         // Can be used with via.vbus.net OR internal 192xxxxx adress !
                                            var resolviaTag = 'xxxx';                   // only necessary if connected using VBus.net otherwise leave empty
                                            var resolpass = 'vbus';                     //default is set
                                            //var resolDL3 = false;                       //set to true if you use a DL3
                                            var worktime = 10000;                       // 10 second timer, collection all information takes some seconds [emoji6]
                                            var create_states = false;                  // initial on true to create states once, disable value afterwards to update states !!!
                                            
                                            //*****************************Dont edit something below*****
                                            

                                            kommt dann nur noch diese Fehlermeldung

                                            javascript.0	2017-12-28 12:20:40.016	error	at Object. (script.js.Vbus:29:4)
                                            javascript.0	2017-12-28 12:20:40.015	error	Error in callback: ReferenceError: resolDL3 is not defined
                                            

                                            was muss ich noch ändern?

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            539
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            15
                                            118
                                            24048
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo