Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. ([gelöst]) Daten Sonnensystem Resol auslesen per VBUS

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
118 Beiträge 15 Kommentatoren 31.1k Aufrufe 8 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • A Offline
    A Offline
    alexw85
    schrieb am zuletzt editiert von
    #53

    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 Antwort Letzte Antwort
    0
    • A Offline
      A Offline
      alexw85
      schrieb am zuletzt editiert von
      #54

      Hallo in die Runde!

      So, mein Script ist Ferdisch! :D 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 Antwort Letzte Antwort
      0
      • DutchmanD Offline
        DutchmanD Offline
        Dutchman
        Developer Most Active Administrators
        schrieb am zuletzt editiert von
        #55

        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 Antwort Letzte Antwort
        0
        • A Offline
          A Offline
          alexw85
          schrieb am zuletzt editiert von
          #56

          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 Antwort Letzte Antwort
          0
          • D Offline
            D Offline
            dippi
            schrieb am zuletzt editiert von
            #57

            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 Antwort Letzte Antwort
            0
            • DutchmanD Offline
              DutchmanD Offline
              Dutchman
              Developer Most Active Administrators
              schrieb am zuletzt editiert von
              #58

              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 Antwort Letzte Antwort
              0
              • D Offline
                D Offline
                dippi
                schrieb am zuletzt editiert von
                #59

                Guten Morgen

                Miss ich das im Skript machen oder im Iobroker ?

                1 Antwort Letzte Antwort
                0
                • DutchmanD Offline
                  DutchmanD Offline
                  Dutchman
                  Developer Most Active Administrators
                  schrieb am zuletzt editiert von
                  #60

                  @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 Antwort Letzte Antwort
                  0
                  • BeagelB Offline
                    BeagelB Offline
                    Beagel
                    schrieb am zuletzt editiert von
                    #61

                    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 Antwort Letzte Antwort
                    0
                    • BeagelB Offline
                      BeagelB Offline
                      Beagel
                      schrieb am zuletzt editiert von
                      #62

                      Stelle auch gerade Fest das sich die Werte nicht aktualisieren , stehen noch immer auf den erstmal geholten Werten.

                      1 Antwort Letzte Antwort
                      0
                      • D Offline
                        D Offline
                        dippi
                        schrieb am zuletzt editiert von
                        #63

                        Hallo Dutchman

                        ich habe im Iobroker die Werte einmal Level.Temperature und value.Temperature zugeortnet und getestet aber im CloudAdapter kommen die Werte immer noch mit an/auf an und nicht mit °C.

                        Hast du das bei dir am laufen oder mach ich noch etwas falsch ?

                        Gruß

                        Dippi

                        1 Antwort Letzte Antwort
                        0
                        • DutchmanD Offline
                          DutchmanD Offline
                          Dutchman
                          Developer Most Active Administrators
                          schrieb am zuletzt editiert von
                          #64

                          @dippi:

                          Hallo Dutchman

                          ich habe im Iobroker die Werte einmal Level.Temperature und value.Temperature zugeortnet und getestet aber im CloudAdapter kommen die Werte immer noch mit an/auf an und nicht mit °C.

                          Hast du das bei dir am laufen oder mach ich noch etwas falsch ?

                          Gruß

                          Dippi `

                          müsste ich mal probieren selber noch nicht im cloud adapter benutzt

                          1 Antwort Letzte Antwort
                          0
                          • D Offline
                            D Offline
                            dippi
                            schrieb am zuletzt editiert von
                            #65

                            Hallo Dutchman

                            Wenn du mal Zeit hast wäre es super wenn du es mal bei dir Testen könntest.

                            Vielen Dank

                            Gruß

                            Manuel

                            1 Antwort Letzte Antwort
                            0
                            • DutchmanD Offline
                              DutchmanD Offline
                              Dutchman
                              Developer Most Active Administrators
                              schrieb am zuletzt editiert von
                              #66

                              @dippi:

                              Hallo Dutchman

                              Wenn du mal Zeit hast wäre es super wenn du es mal bei dir Testen könntest.

                              Vielen Dank

                              Gruß

                              Manuel `

                              Hi Manuel,

                              Könntest du bitte Mal probieren wie in diesem Post erklärt:

                              http://forum.iobroker.net/viewtopic.php?t=9969#p108864

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

                              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 Antwort Letzte Antwort
                              0
                              • D Offline
                                D Offline
                                dippi
                                schrieb am zuletzt editiert von
                                #67

                                Hallo

                                ich hab die einstellungen gemacht, nun bekomme ich folgende Warnmeldungen

                                javascript.0 2018-01-02 15:04:51.082 warn at Object. (script.js.Dippi.Skript1:86:26)

                                javascript.0 2018-01-02 15:04:51.081 warn at Array.forEach (native)

                                javascript.0 2018-01-02 15:04:51.081 warn at script.js.Dippi.Skript1:158:21

                                javascript.0 2018-01-02 15:04:51.081 warn Wrong type of javascript.0.vbus.00_7210_0010.values_raw.Temperaturesensor1: "string". Please fix, while deprecated and will not work in next versions.

                                javascript.0 2018-01-02 15:04:30.953 warn at Object. (script.js.Dippi.Skript1:86:26)

                                javascript.0 2018-01-02 15:04:30.952 warn at Array.forEach (native)

                                javascript.0 2018-01-02 15:04:30.952 warn at script.js.Dippi.Skript1:158:21

                                javascript.0 2018-01-02 15:04:30.950 warn Wrong type of javascript.0.vbus.00_7210_0010.values_raw.Temperaturesensor1: "string". Please fix, while deprecated and will not work in next versions.

                                javascript.0 2018-01-02 15:04:10.952 warn at Object. (script.js.Dippi.Skript1:86:26)

                                javascript.0 2018-01-02 15:04:10.952 warn at Array.forEach (native)

                                javascript.0 2018-01-02 15:04:10.952 warn at script.js.Dippi.Skript1:158:21

                                javascript.0 2018-01-02 15:04:10.950 warn Wrong type of javascript.0.vbus.00_7210_0010.values_raw.Temperaturesensor1: "string". Please fix, while deprecated and will not work in next versions.

                                javascript.0 2018-01-02 15:03:50.952 warn at Object. (script.js.Dippi.Skript1:86:26)

                                muss ich noch etwas Updaten ?

                                Gruß

                                Dippi

                                1 Antwort Letzte Antwort
                                0
                                • A Offline
                                  A Offline
                                  alexw85
                                  schrieb am zuletzt editiert von
                                  #68

                                  Nimm dieses Script, läuft bei mir seit Monaten astrein und ich steuere auch meine Heizkreise damit! Ich komm nur nicht dazu einen Adapter zu programmieren dafür…

                                  Zuvor bitte im Javascript Adapter folgendes reinschreiben bei zusätzliche NPM Module: "resol-vbus, kue, optimist, express, q"

                                  Dann dieses Script ausführen (IP Adresse und ggf. Password natürlich anpassen):

                                  /*! ############################################################################################################# */
                                  /*! ### 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();
                                  
                                  

                                  Gesendet von meinem SM-T819 mit Tapatalk

                                  1 Antwort Letzte Antwort
                                  0
                                  • D Offline
                                    D Offline
                                    dippi
                                    schrieb am zuletzt editiert von
                                    #69

                                    Hallo

                                    ich bekomme folgende Fehlermeldung im Log bei dem Skript:

                                    host.ioBroker-Pi	2018-01-07 11:41:38.093	info	Restart adapter system.adapter.javascript.0 because enabled
                                    host.ioBroker-Pi	2018-01-07 11:41:38.093	error	instance system.adapter.javascript.0 terminated with code 0 (OK)
                                    Caught	2018-01-07 11:41:38.092	error	by controller[0]: at process._tickCallback (internal/process/next_tick.js:104:9)
                                    Caught	2018-01-07 11:41:38.092	error	by controller[0]: at _combinedTickCallback (internal/process/next_tick.js:73:7)
                                    Caught	2018-01-07 11:41:38.092	error	by controller[0]: at flush (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:125:13)
                                    Caught	2018-01-07 11:41:38.092	error	by controller[0]: at runSingle (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:137:13)
                                    Caught	2018-01-07 11:41:38.090	error	by controller[0]: at /opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:624:44
                                    Caught	2018-01-07 11:41:38.090	error	by controller[0]: at Promise.promise.promiseDispatch (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:816:13)
                                    Caught	2018-01-07 11:41:38.090	error	by controller[0]: at self.promiseDispatch.done (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:883:30)
                                    Caught	2018-01-07 11:41:38.090	error	by controller[0]: at _fulfilled (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:854:54)
                                    Caught	2018-01-07 11:41:38.089	error	by controller[0]: at /opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/connection-customizer.js:233:32
                                    Caught	2018-01-07 11:41:38.089	error	by controller[0]: at callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/connection-customizer.js:102:34)
                                    Caught	2018-01-07 11:41:38.089	error	by controller[0]: at constructor._optimizeLoadConfiguration (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/customizer.js:169:30)
                                    Caught	2018-01-07 11:41:38.088	error	by controller[0]: TypeError: Cannot read property 'optimizeLoadConfiguration' of null
                                    javascript.0	2018-01-07 11:41:38.033	info	script.js.Dippi.Resol_2: Connection state changed to DISCONNECTED
                                    javascript.0	2018-01-07 11:41:38.022	error	at process._tickCallback (internal/process/next_tick.js:104:9)
                                    javascript.0	2018-01-07 11:41:38.022	error	at _combinedTickCallback (internal/process/next_tick.js:73:7)
                                    javascript.0	2018-01-07 11:41:38.022	error	at flush (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:125:13)
                                    javascript.0	2018-01-07 11:41:38.022	error	at runSingle (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:137:13)
                                    javascript.0	2018-01-07 11:41:38.022	error	at /opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:624:44
                                    javascript.0	2018-01-07 11:41:38.022	error	at Promise.promise.promiseDispatch (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:816:13)
                                    javascript.0	2018-01-07 11:41:38.022	error	at self.promiseDispatch.done (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:883:30)
                                    javascript.0	2018-01-07 11:41:38.022	error	at _fulfilled (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:854:54)
                                    javascript.0	2018-01-07 11:41:38.022	error	at /opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/connection-customizer.js:233:32
                                    javascript.0	2018-01-07 11:41:38.022	error	at callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/connection-customizer.js:102:34)
                                    javascript.0	2018-01-07 11:41:38.022	error	at constructor._optimizeLoadConfiguration (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/customizer.js:169:30)
                                    javascript.0	2018-01-07 11:41:38.022	error	TypeError: Cannot read property 'optimizeLoadConfiguration' of null
                                    javascript.0	2018-01-07 11:41:38.022	error	uncaught exception: Cannot read property 'optimizeLoadConfiguration' of null
                                    javascript.0	2018-01-07 11:41:38.005	info	script.js.Dippi.Resol_2: Connection state changed to DISCONNECTING
                                    javascript.0	2018-01-07 11:41:38.003	info	script.js.Dippi.Resol_2: Disconnecting...
                                    javascript.0	2018-01-07 11:41:37.999	info	script.js.Dippi.Resol_2: [1] Optimizing set of values for round 1
                                    javascript.0	2018-01-07 11:41:37.981	info	script.js.Dippi.Resol_2: WARNING: Unable to create optimizer for master with address 0x7210
                                    javascript.0	2018-01-07 11:41:37.971	info	script.js.Dippi.Resol_2: Found master with address 0x7210
                                    javascript.0	2018-01-07 11:41:36.347	info	script.js.Dippi.Resol_2: Waiting for free bus...
                                    javascript.0	2018-01-07 11:41:36.346	info	script.js.Dippi.Resol_2: Connection state changed to CONNECTED
                                    javascript.0	2018-01-07 11:41:36.222	info	script.js.Dippi.Resol_2: Connection state changed to CONNECTING
                                    

                                    muss ich noch was Updaten ?

                                    Gruß Dippi

                                    1 Antwort Letzte Antwort
                                    0
                                    • A Offline
                                      A Offline
                                      alexw85
                                      schrieb am zuletzt editiert von
                                      #70

                                      @dippi:

                                      Hallo

                                      ich bekomme folgende Fehlermeldung im Log bei dem Skript:

                                      host.ioBroker-Pi	2018-01-07 11:41:38.093	info	Restart adapter system.adapter.javascript.0 because enabled
                                      host.ioBroker-Pi	2018-01-07 11:41:38.093	error	instance system.adapter.javascript.0 terminated with code 0 (OK)
                                      Caught	2018-01-07 11:41:38.092	error	by controller[0]: at process._tickCallback (internal/process/next_tick.js:104:9)
                                      Caught	2018-01-07 11:41:38.092	error	by controller[0]: at _combinedTickCallback (internal/process/next_tick.js:73:7)
                                      Caught	2018-01-07 11:41:38.092	error	by controller[0]: at flush (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:125:13)
                                      Caught	2018-01-07 11:41:38.092	error	by controller[0]: at runSingle (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:137:13)
                                      Caught	2018-01-07 11:41:38.090	error	by controller[0]: at /opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:624:44
                                      Caught	2018-01-07 11:41:38.090	error	by controller[0]: at Promise.promise.promiseDispatch (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:816:13)
                                      Caught	2018-01-07 11:41:38.090	error	by controller[0]: at self.promiseDispatch.done (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:883:30)
                                      Caught	2018-01-07 11:41:38.090	error	by controller[0]: at _fulfilled (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:854:54)
                                      Caught	2018-01-07 11:41:38.089	error	by controller[0]: at /opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/connection-customizer.js:233:32
                                      Caught	2018-01-07 11:41:38.089	error	by controller[0]: at callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/connection-customizer.js:102:34)
                                      Caught	2018-01-07 11:41:38.089	error	by controller[0]: at constructor._optimizeLoadConfiguration (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/customizer.js:169:30)
                                      Caught	2018-01-07 11:41:38.088	error	by controller[0]: TypeError: Cannot read property 'optimizeLoadConfiguration' of null
                                      javascript.0	2018-01-07 11:41:38.033	info	script.js.Dippi.Resol_2: Connection state changed to DISCONNECTED
                                      javascript.0	2018-01-07 11:41:38.022	error	at process._tickCallback (internal/process/next_tick.js:104:9)
                                      javascript.0	2018-01-07 11:41:38.022	error	at _combinedTickCallback (internal/process/next_tick.js:73:7)
                                      javascript.0	2018-01-07 11:41:38.022	error	at flush (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:125:13)
                                      javascript.0	2018-01-07 11:41:38.022	error	at runSingle (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:137:13)
                                      javascript.0	2018-01-07 11:41:38.022	error	at /opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:624:44
                                      javascript.0	2018-01-07 11:41:38.022	error	at Promise.promise.promiseDispatch (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:816:13)
                                      javascript.0	2018-01-07 11:41:38.022	error	at self.promiseDispatch.done (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:883:30)
                                      javascript.0	2018-01-07 11:41:38.022	error	at _fulfilled (/opt/iobroker/node_modules/iobroker.javascript/node_modules/q/q.js:854:54)
                                      javascript.0	2018-01-07 11:41:38.022	error	at /opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/connection-customizer.js:233:32
                                      javascript.0	2018-01-07 11:41:38.022	error	at callback (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/connection-customizer.js:102:34)
                                      javascript.0	2018-01-07 11:41:38.022	error	at constructor._optimizeLoadConfiguration (/opt/iobroker/node_modules/iobroker.javascript/node_modules/resol-vbus/src/customizer.js:169:30)
                                      javascript.0	2018-01-07 11:41:38.022	error	TypeError: Cannot read property 'optimizeLoadConfiguration' of null
                                      javascript.0	2018-01-07 11:41:38.022	error	uncaught exception: Cannot read property 'optimizeLoadConfiguration' of null
                                      javascript.0	2018-01-07 11:41:38.005	info	script.js.Dippi.Resol_2: Connection state changed to DISCONNECTING
                                      javascript.0	2018-01-07 11:41:38.003	info	script.js.Dippi.Resol_2: Disconnecting...
                                      javascript.0	2018-01-07 11:41:37.999	info	script.js.Dippi.Resol_2: [1] Optimizing set of values for round 1
                                      javascript.0	2018-01-07 11:41:37.981	info	script.js.Dippi.Resol_2: WARNING: Unable to create optimizer for master with address 0x7210
                                      javascript.0	2018-01-07 11:41:37.971	info	script.js.Dippi.Resol_2: Found master with address 0x7210
                                      javascript.0	2018-01-07 11:41:36.347	info	script.js.Dippi.Resol_2: Waiting for free bus...
                                      javascript.0	2018-01-07 11:41:36.346	info	script.js.Dippi.Resol_2: Connection state changed to CONNECTED
                                      javascript.0	2018-01-07 11:41:36.222	info	script.js.Dippi.Resol_2: Connection state changed to CONNECTING
                                      

                                      muss ich noch was Updaten ?

                                      Gruß Dippi `

                                      Hmm… Also er erkennt den Controller, connected und dann meldet das Skript das er die Config nicht laden kann und deshalb die ganzen Fehlermeldungen.

                                      Welcher Resol Regler ist das? Hängt da vieleicht ein DL3 dran? Stimmt das Passwort?

                                      Gesendet von meinem SM-G955F mit Tapatalk

                                      1 Antwort Letzte Antwort
                                      0
                                      • D Offline
                                        D Offline
                                        dippi
                                        schrieb am zuletzt editiert von
                                        #71

                                        Guten Morgen

                                        ne es hängt ein SKSC3 Regler und ein HK Regler dran.

                                        Gruß

                                        Dippi

                                        1 Antwort Letzte Antwort
                                        0
                                        • DutchmanD Offline
                                          DutchmanD Offline
                                          Dutchman
                                          Developer Most Active Administrators
                                          schrieb am zuletzt editiert von
                                          #72

                                          @dippi:

                                          Guten Morgen

                                          ne es hängt ein SKSC3 Regler und ein HK Regler dran.

                                          Gruß

                                          Dippi `

                                          Die Geräte arbeiten aber auf resol-vbus?

                                          Laut docu des npm Moduls werden folgende Geräte unterstützt:

                                           Supported Devices & Services
                                          
                                          All current RESOL controllers with VBus
                                          RESOL DL2 Datalogger
                                          RESOL DL3 Datalogger
                                          RESOL VBus/LAN interface adapter
                                          RESOL VBus/USB interface adapter
                                          RESOL VBus.net
                                          

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

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          794

                                          Online

                                          32.4k

                                          Benutzer

                                          81.6k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe