Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Viessmann-Adapter

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Viessmann-Adapter

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

      Du hast den Datenpunkt "VitoTempAussen" als Typ "string" erstellt, schreibst aber Daten vom Typ "number" mit setState. Lass das parseFloat im Skript weg, dann klappt es auch ohne Warnung:

          TempAussen = stdout[1];
      
      
      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Mit dem folgenden Skript sollte sich eine ganze Liste von Werten aus der Vitotronic in Datenpunkte übertragen lassen:

        `// Werte aus Vitotronic auslesen
        
        var list = ['TempAussen','TempWWIst','TempKesselSoll','TempKesselIst',...];
        var len = list.length;
        var cmds = '';
        
        for(var i = 0; i < len; i++) {
        	cmds = cmds + ',getVito' + list[i];
        	createState('Vitotronic.' + list[i], '', {
        		type: 'string',
        		read: true,
        		write: true,
        		desc: 'Vitotronic ' + list[i],
        		def: ''
        	});
        }
        
        cmds = cmds.substr(1);  // erstes Komma raus
        
        function vito() {
            exec('vclient -h 127.0.0.1:3002 -c ' + cmds, function(err, stdout, stderr) {
        		if (err) {
        			log(stderr,'error');
        			return;
                }
        		stdout = stdout.split("\n");
        		for(var i = 0; i < len; i++) {
        			setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[2 * i + 1]);
        		}
            });
        }
        
        setInterval(vito, 20 * 1000); // alle 20 Sekunden` 
        
        EDIT: Korrigiert[/i][/i][/i][/i]
        
        1 Reply Last reply Reply Quote 0
        • D
          dtp last edited by

          Klasse, das ist schon mal ein guter Ansatz. Werde ich heute Abend mal ausprobieren.

          Hier noch mal die original Javaskript-Dateien des vitotronic-Adapters von Axel Hoogestraat für CCU.IO. Vielleicht hilft's ja weiter.

          Zunächst die vitotronicReadConfig.js:

          ! ```
          /* Includes */ var fs = require('fs'); var settings = require(__dirname + '/../../settings.js'); var xml2js = require("xml2js"); ! var arguments = process.argv.splice(2); if (arguments.length) { } else { process.exit(-1); } /* Classes */ function Dpoint() { this.access = 0; this.name = ''; this.description = ''; this.unit = ''; } Dpoint.READ = 1; Dpoint.WRITE = 2; function Unit() { this.abbrev = ''; this.name = ''; this.type = ''; this.entity = ''; } /* Commands aus vito.xml */ var datapoints = {}; /* units aus vcontrold.xml */ var units = {}; /* Port auf dem vcontrold läuft */ var port = 0; /* Pfad zur XML Datei */ var path = arguments[0]; ! fs.readFile(path + 'vcontrold.xml', function (err, data) { if(err) { process.send("Pfad nicht korrekt oder lesbar!"); process.exit(-1); } var options = { explicitArray: false, mergeAttrs: true }; var parser = new xml2js.Parser(options); parser.parseString(data, function (err, result) { if(err) { process.send("Konnte vcontrold.xml nicht parsen!"); process.exit(-1); } ! port = result["V-Control"].unix.config.net.port; ! var xmlunits = result["V-Control"].units.unit; for (var i = 0; i < xmlunits.length; i++) { var u = xmlunits[i]; ! var unit = new Unit(); ! unit.name = u.name; unit.abbrev = u.abbrev; unit.type = u.type; unit.entity = u.entity; units[u.abbrev] = unit; } ! getVito(); }); }); ! function getVito() { fs.readFile(path + 'vito.xml', function (err, data) { if(err) { process.send("Pfad nicht korrekt oder lesbar!"); process.exit(-1); } var options = { explicitArray: false, mergeAttrs: true }; var parser = new xml2js.Parser(options); parser.parseString(data, function (err, result) { if(err) { process.send("Konnte XML nicht parsen!"); process.exit(-1); } var commands = result.vito.commands.command; for (var i = 0; i < commands.length; i++) { var c = commands[i]; if(c.name.substring(0,3) != 'get' && c.name.substring(0,3) != 'set') { continue; } var name = c.name.substring(3); var unit = typeof c.unit == 'undefined' ? '' : c.unit; if(name.length == 0) continue; ! if(typeof(datapoints[name]) == 'undefined') { var dp = new Dpoint(); dp.id = settings.adapters.vitotronic.settings.firstId + i; dp.name = name; dp.description = c.description; dp.unit = unit; datapoints[name] = dp; } ! if(c.protocmd == 'getaddr') { datapoints[name].access |= Dpoint.READ; } else { datapoints[name].access |= Dpoint.WRITE; } ! } ! process.send({datapoints:datapoints, units:units, port:port}); process.exit(); }); }); }
          ! Dann die vitotronic.js:
          ! >! [spoiler]`[code]/* Includes /
          var settings = require(__dirname + '/../../settings.js');
          var logger = require(__dirname+'/../../logger.js');
          var net = require('net');
          var io = require('socket.io-client');
          ! /
          Settings für diesen Adapter /
          var vitotronicSettings = settings.adapters.vitotronic.settings;
          /
          Alle commands aus der vcontrold Konfiguration /
          var commands= vitotronicSettings.config.datapoints;
          /
          Alle commands, die geloggt werdne sollen /
          var toPoll = [];
          /
          Index aus toPoll Array des aktuell abzufragenden commands /
          var actual = -1;
          /
          Hilfsreferenz /
          var commandMap = {};
          /
          Verbindung zu vcontrold /
          var telnetSocket;
          /
          Log Mode /
          var log = vitotronicSettings.log;
          /
          Buffer für Schreib-Commands */
          var writeBuffer = [];
          ! if (!settings.adapters.vitotronic || !settings.adapters.vitotronic.enabled) {
          process.exit();
          }

          if (settings.ioListenPort) {
          var socket = io.connect("127.0.0.1", {
          port: settings.ioListenPort
          });
          } else if (settings.ioListenPortSsl) {
          var socket = io.connect("127.0.0.1", {
          port: settings.ioListenPortSsl,
          secure: true
          });
          } else {
          process.exit();
          }

          ! connectVcontrol();
          function connectVcontrol() {
          telnetSocket = net.createConnection({
          port: vitotronicSettings.config.port,
          host: vitotronicSettings.host
          }, function() {
          // Erste Eingabe führt immer zu einem Fehler
          telnetSocket.write('dummy\n');
          });
          }
          telnetSocket.on('close', function () {
          myLog("adapter vitotronic disconnected from vcontrold");
          });
          ! telnetSocket.on('data', function (data) {
          // Eingabeaufforderung von vcontrold können wir ignorieren
          if(data == 'vctrld>') return;
          ! if(actual == -1 || (""+data).substring(0,3) == 'ERR') {

              if(actual != -1) {
                  toPoll[actual].lastPoll = Date.now();
                  myLog("vcontrold send error: " +toPoll[actual].name + ":"  + data);
              } else {
                  myLog("vcontrol send message: " + data);
              }
              stepPolling();
              return;
          }
          
          data = (""+data).replace('vctrld>', '');
          
          // Einheit (z.B. "Grad Celcius") aus der Antwort entfernen
          if(vitotronicSettings.config.units[toPoll[actual].unit]) {
              data = (""+data).replace(vitotronicSettings.config.units[toPoll[actual].unit].entity, '').trim();	
          }
          
          myLog("adapter vitotronic get data from vcontrold: " +toPoll[actual].name + ":"  + data);
          
          // Wert in ccu.io speichern
          if(toPoll[actual]) {    
              socket.emit("setObject", toPoll[actual].id, {
                  Name: toPoll[actual].name,
                  DPInfo: toPoll[actual].description,
                  TypeName: "VARDP"
              }, function() {
                  toPoll[actual].value = data;
                  toPoll[actual].lastPoll = Date.now();
                  socket.emit("setState", [toPoll[actual].id, data]);
                  stepPolling();
              });
          }       
          

          });

          ! //Wird aufgerufen bei Connect zu CCU.IO
          socket.on('connect', function () {
          myLog("adapter vitotronic connected to ccu.io ");
          });
          //Wird aufgerufen bei disconnect zu CCU.IO
          socket.on('disconnect', function () {
          myLog("adapter vitotronic disconnected from ccu.io");
          });
          //Wird aufgerufen bei Änderungen von Objekten in CCU.IO.
          socket.on('event', function (obj) {
          if (!obj || !obj[0]) {
          return;
          }
          ! //ID des geänderten Objektes
          var id = obj[0];
          //Wert des geaenderten Objektes
          var val = obj[1];
          //Timestamp letzte Aenderung
          var ts = obj[2];
          //ACKnowledge letzte Aenderung
          var ack = obj[3];

          if(id >= vitotronicSettings.firstId && id < vitotronicSettings.firstId + 300) {
              if(typeof(commands[commandMap[id]]) != 'undefined' && val != commands[commandMap[id]].value) {
                  if(commands[commandMap[id]].access & 2) {
                      var cmd = 'set' + commands[commandMap[id]].name + ' ' + val;
                      myLog('getting set command: ' + cmd);
                      writeBuffer.push(cmd);
                  } else {
                      myLog("adapter vitotronic changed NOT WRITEABLE data " + commandMap[id] + " " + val + " " + commands[commandMap[id]].value);
                  }
              }
          }
          

          });

          ! /* zu loggende commands ermitteln /
          Object.keys(commands).forEach(function(key) {
          var c = commands[key];
          commandMap[c.id] = key;
          if(c.pollInterval > -1) {
          toPoll.push(c);
          }
          });
          ! /
          Nächsten Wert zum Loggen holen */
          function stepPolling() {
          actual = -1;
          if(writeBuffer.length > 0) {
          var cmd = writeBuffer.shift();
          myLog('calling set command '+cmd);

              telnetSocket.write(cmd+"\n");
              return;
          }
          
          var actualMinWaitTime = 1000000;
          var time = Date.now();
          

          ! for(var i = 0; i < toPoll.length; i++) {
          if(typeof(toPoll[i].lastPoll) == 'undefined') {
          toPoll[i].lastPoll = 0;
          }

              var nextRun = toPoll[i].lastPoll + (toPoll[i].pollInterval * 1000)
              var nextDiff = nextRun - time;
          

          ! if(time < nextRun) {
          actualMinWaitTime = nextDiff;
          continue;
          }

              if(nextDiff < actualMinWaitTime) {
                  actualMinWaitTime = nextDiff;
                  actual = i;
              }
          }
          
          if(actual === -1) {
              setTimeout(function () {
                  stepPolling();
              }, actualMinWaitTime);
          

          ! } else {
          myLog("Step to "+toPoll[actual].name);
          telnetSocket.write('get' + toPoll[actual].name + '\n');
          }
          }
          ! function myLog(message) {
          if(log) {
          logger.info(message);
          }
          } ! Und hier noch die settings.json: ! >! ~~[spoiler]~~[code]{
          "enabled": false,
          "settings": {
          "firstId": 98000,
          "host": "127.0.0.1",
          "xmlpath": "/etc/vcontrold/",
          "log" : true
          }
          }
          [/code]! ...und die entsprechende HTML-Datei für die Anzeige des Adapters: ![code]
          !
          ! Enabled: |

                  <select id="vitotronic_enabled"><option value="false">false</option>
                      <option value="true">true</option></select> 
               |
          

          ! ccu.io.log schreiben?: |

                  <select id="vitotronic_log"><option value="false">false</option>
                      <option value="true">true</option></select> 
               |
          
          ! vcontrold - Host:
          ! Pfad zu vcontrold Konfigurationen:

          ! ## Commands:
          !
          [/code][/spoiler] ! Ich bin mir da leider nicht so ganz sicher, aber glaube, dass der CCU.IO-Adapter nicht den vclient verwendet, sondern eher auf [http://openv.wikispaces.com/vcontrold+mit+Raspberry+Pi](http://openv.wikispaces.com/vcontrold+mit+Raspberry+Pi) basiert: ! [quote]
          7. Test
          ! Wenn die obigen Schritte erfolgreich durchgeführt wurden, dann ist nach Aufruf von "sudo /etc/init.d/vcontrol start" der vcontrold-Server bereit.
          ! Am besten wird das System einmal neu gestartet, damit man sicher ist, dass alles funktioniert.
          ! Es empfiehlt sich, alle Dateien, welche man für das System angepasst hat auf dem Arbeits-PC zu sichern.
          ! Die Einstellungen werden verloren gehen, wenn einmal die SD Karte nicht mehr lesbar ist, was z.B. durch ein unkontrolliertes Ausschalten des Raspi passieren kann.
          ! Am einfachsten ist es, die Telnet Schnittstelle mit PuTTY zu testen.
          ! PuTTY Telnet-Session Einstellungen:
          ! Connection type = Telnet
          ! Host = ip Adresse des Raspberry Pi
          ! Port = 3002
          ! Bei den Terminal Einstellungen sollte noch die Option „Implicit CR in every LF“ gesetzt werden, damit die Zeilenenden richtig interpretiert werden
          ! Bei den Einstellungen unter „Connection – Telnet“ den Negitiation Mode = Passiv setzen
          ! (andernfalls werden negotiation commands an vcontrold geschickt, welche von diesem nicht verarbeitet werden. Das führt bei der ersten Eingabe immer zu einem Command not found Fehler).
          ! Man kann auch den SSH Zugang verwenden und in der Shell des Raspis das Command „telnet localhost 3002“ aufrufen.
          ! Wenn der Kommando-Prompt vctrld> erscheint, dann hat alles geklappt!
          ! Durch Eingabe von help werden die gültigen Befehle aufgelistet.
          ! version zeigt die vcontrold Version an.
          ! device den in vcontrold.xml konfigurierten device.
          ! commands zeigt alle Befehle für die entsprechende Steuerung an.
          ! Wenn nun getTempA oder getDevType funktioniert, dann ist auch die serielle Kommunikation in Ordnung.
          ! Gratulation, du hast es geschafft!

          ! Gruß,
          ! Thorsten[/i][/i][/i][/i][/code][/spoiler][/i][/i]

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

            Hallo paul53,

            @paul53:

            Mit dem folgenden Skript sollte sich eine ganze Liste von Werten aus der Vitotronic in Datenpunkte übertragen lassen:

            ! `// Werte aus Vitotronic auslesen ! var list = [TempAussen,TempWWIst,TempKesselSoll,TempKesselIst]; var len = list.length; var cmds = ''; ! for(var i = 0; i < len; i++) { cmds = ',getVito' + list[i]; createState('Vitotronic.' + list[i]), '', { type: 'string', read: true, write: true, desc: 'Vitotronic ' + list[i], def: '' }); } ! cmds = cmds.slice(0, 1); // erstes Komma raus ! function vito() { exec('vclient -h 127.0.0.1:3002 -c ' + cmds, function(err, stdout, stderr) { if (err) { log(stderr,'error'); return; } stdout = stdout.split("\n"); for(var i = 0; i < len; i++) { setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[2 * i + 1]); } }); } ! setInterval(vito, 20 * 1000); // alle 20 Sekunden` ! Bekomme da leider zwei Fehlermeldungen. Die erste dürfte aus der Zeile ! `~~[code]~~createState('Vitotronic.' + list[i]), '', {` ! resultieren. Da schieint mir die geschlossene Klammer hinter "list_~~[i]~~" zu viel. Wenn ich die entferne, erhalte ich aber noch eine Fehlermeldung:_ ! `~~[code]~~[error] javascript.0 script.js.common.Vitotronic1: ReferenceError: TempAussen is not defined at script.js.common.Vitotronic1:3:13[/code]` ! Da scheint also was mit der Variablendeklaration im Argen zu sein. ! Gruß, ! Thorsten[/i][/i][/code][/i][/i][/i][/i] `

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

              @dtp:

              Ich bin mir da leider nicht so ganz sicher, aber glaube, dass der CCU.IO-Adapter nicht den vclient verwendet, `
              Ja, das ist richtig.

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

                @dtp:

                Da schieint mir die geschlossene Klammer hinter "list__" zu viel.__ __Stimmt.

                Das Array "list" muss mit strings gefüllt werden:_

                var list = ['TempAussen','TempWWIst','TempKesselSoll','TempKesselIst'];
                ````_ ` 
                1 Reply Last reply Reply Quote 0
                • D
                  dtp last edited by

                  Jetzt bekomme ich leider einen Segmentierungsfehler angezeigt:

                  javascript.0 script.js.common.Vitotronic: Segmentation fault 
                  

                  Ne Idee?

                  Die Datenpunkte werden aber schon mal korrekt angelegt.

                  filename="2016-07-02_14h22_10.png" index="0">~~

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

                    @dtp:

                    Ne Idee? `
                    Leider nicht 😞

                    Füge mal ein Log ein:

                    cmds = cmds.slice(0, 1);  // erstes Komma raus
                    log(cmds);
                    
                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 last edited by

                      Ich habe wohl slice() falsch angewendet. Korrigiere bitte:

                      cmds = cmds.slice(1, cmds.length);  // erstes Komma raus
                      

                      oder besser:

                      cmds = cmds.substr(1);  // erstes Komma raus
                      
                      1 Reply Last reply Reply Quote 0
                      • D
                        dtp last edited by

                        Hallo Paul,

                        damit ist die Fehlermeldung zwar verschwunden, allerdings steht in cmds immer nur der letzte Parameter drin. Also im vorliegenden Fall "getVitoTempKesselIst".

                        Hatte es mit

                        `cmds[i] = ',getVito' + list[i];`
                        
                        versucht, aber das klappt leider nicht.
                        
                        Gruß,
                        
                        Thorsten[/i][/i]
                        
                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 last edited by

                          @dtp:

                          …allerdings steht in cmds immer nur der letzte Parameter drin. `
                          Sorry, mein Fehler. In der for-Schleife muss es richtig lauten:

                           `cmds = cmds + ',getVito' + list[i];`
                          Das hatte ich auch vor und deshalb _~~[i]~~cmds[/i]_ mit einem Leerstring initialisiert. Habe dann wohl zu schnell getippt  ;)[/i]
                          
                          1 Reply Last reply Reply Quote 0
                          • D
                            dtp last edited by

                            Hi paul53,

                            exakt. Hatte es gerade eben selbst rausgefunden. Nachdem ich gestern weiter oben ja noch geschrieben hatte, dass Javascript und das HomeMatic-Scripting durchaus Parallelen haben, ist es mir dann vorhin wie Schuppen von den Haaren gefallen. 😉

                            Auf jeden Fall danke für Deinen Support. Nun funzt das Skript.

                            Gruß,

                            Thorsten

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

                              @dtp:

                              Nun funzt das Skript. `
                              Das freut mich zu lesen 😄
                              @dtp:

                              Allerdings fände ich es sehr hilfreich, wenn ich … meine Heizungsanlage in den Heizung- und Warmwasser-, Nur-Warmwasser-, Abschalt-, Spar- oder Ferienbetrieb versetzen könnte. `
                              Das sollte funktionieren, wenn Du das Script um das Setzen der Betriebsart ergänzt:

                              createState('Vitotronic.Betriebsart', 0, {
                                  type: 'number',
                                  read: true,
                                  write: true,
                                  desc: 'Vitotronic Betriebsart setzen',
                                  min: 0, 
                                  max: 4, 
                                  def: 0, 
                                  states: '0:Aus;1:WW;2:WW+Hzg;3:Reduziert;4:Normal'
                              });
                              
                              on("javascript." + instance + ".Vitotronic.Betriebsart", function(dp) {
                              	exec('vclient -h 127.0.0.1:3002 -c setVitoBetriebsart ' + dp.state.val, function(err, stdout, stderr) {
                              		if (err) log(stderr,'error');
                              	});
                              });
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • S
                                Solear last edited by

                                Es macht Spaß, auch beim zaubern zuzusehen 🙂

                                @dtp

                                Könntest du am Ende bitte das ganze Skript bereitstellen, damit sich nicht jeder durchwühlen muss?

                                Gerne im Beitrag 1 mit einfügen. :geek:

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

                                  Hallo,

                                  die Nacht hat das Skript gut überstanden. 😉 Eigentlich sind's zwei Skripte, da ich ca. 40 bis 50 Parameter auslese und ich feststellen musste, dass dann irgendwann Feierabend war. Hab's daher einfach zweigeteilt. Vermutlich ist sogar noch ein drittes Skript erforderlich, weil die ausgegebenen Timer-Werte für die Zeitsteuerung der Heizung und des Warmwassers jeweils aus vier Zeilen bestehen, die im aktuellen Skript noch nicht korrekt ausgelesen werden. Daher habe ich die erst mal raus genommen. Da macht die Zeile

                                  stdout = stdout.split("\n");
                                  

                                  noch Schwierigkeiten.

                                  @paul53:

                                  Danke für Dein "Set"-Skript. Werde ich mal ausprobieren.

                                  @Solear:

                                  Wird gemacht. Allerdings werde ich da wohl besser einen neuen Thread im "Skripte"-Unterforum aufmachen, weil es hier ja eigentlich um den Adapter ging. Da hoffe ich auch noch so ein wenig auf die Unterstützung von @Eisbaeeer, auch wenn dank @paul53 schon mal ein gut funktionierender Workaround gefunden wurde.

                                  Der Adapter soll ein paar Dinge universeller gestalten, wie z.B. das automatische Auslesen der getaddr- und setaddr-Parameter und die einfache Möglichkeit, individuelle Polling-Zeiten für jeden Parameter setzen zu können.

                                  Gruß,

                                  Thorsten

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

                                    @dtp:

                                    Eigentlich sind's zwei Skripte, da ich ca. 40 bis 50 Parameter auslese und ich feststellen musste, dass dann irgendwann Feierabend war. Hab's daher einfach zweigeteilt. `
                                    Das lässt sich auch in einem Skript (mit 2 Listen) machen, wobei man dann gleich in eine Liste für schnelle Abfrage (z.B. Kessel-, Vorlauftemperaturen) und für langsame Abfrage (z.B. Aussen-, Warmwassertemperatur) unterscheiden sollte.

                                    `// Werte aus Vitotronic auslesen
                                    
                                    var list1 = ['TempKesselIst',...];  // schnell veränderliche Werte
                                    var list2 = ['TempAussen','TempWWIst','TempKesselSoll',...];  // träge Werte
                                    var list3 = ['TimerSoWW',...];  // Timer
                                    
                                    function init(list) {
                                       var len = list.length;
                                       var cmds = '';
                                       for(var i = 0; i < len; i++) {
                                          cmds = cmds + ',getVito' + list[i];
                                          createState('Vitotronic.' + list[i], '', {
                                             type: 'string',
                                             read: true,
                                             write: true,
                                             desc: 'Vitotronic ' + list[i],
                                             def: ''
                                          });
                                       }
                                       return cmds.substr(1); // erstes Komma raus
                                    }
                                    
                                    // Script start
                                    var cmds1 = init(list1);
                                    var cmds2 = init(list2);
                                    var cmds3 = init(list3);
                                    
                                    function vito(cmds, list, timer) {
                                       exec('vclient -h 127.0.0.1:3002 -c ' + cmds, function(err, stdout, stderr) {
                                          if (err) {
                                             log(stderr,'error');
                                             return;
                                          }
                                          stdout = stdout.split("\n");
                                          var len = list.length;
                                          for(var i = 0; i < len; i++) {
                                             if(timer) setState("Vitotronic." + list[i], stdout[5*i+1]+" "+stdout[5*i+2]+" "+stdout[5*i+3]+" "+stdout[5*i+4]);
                                             else setState("javascript."+ instance + ".Vitotronic." + list[i], stdout[2 * i + 1]);
                                          }
                                       });
                                    }
                                    
                                    setInterval(function() {
                                       vito(cmds1, list1, false);
                                    }, 20 * 1000); // alle 20 Sekunden
                                    
                                    setInterval(function() {
                                       vito(cmds2, list2, false);
                                    }, 300 * 1000); // alle 5 Minuten
                                    
                                    setInterval(function() {
                                       vito(cmds3, list3, true);
                                    }, 300 * 1000); // alle 5 Minuten` [/i][/i][/i][/i][/i]
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • D
                                      dtp last edited by

                                      Danke. Werde ich mal testen.

                                      Du hast nicht zufällig noch ne Idee bzgl. der mehrzeiligen Timer-Ausgaben? Es sind immer vier Zeilen.

                                      Gruß,

                                      Thorsten

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

                                        @dtp:

                                        Du hast nicht zufällig noch ne Idee bzgl. der mehrzeiligen Timer-Ausgaben? Es sind immer vier Zeilen. `
                                        Was ist der Inhalt der 4 Zeilen ? Welche Kommandos gehören dazu ?

                                        Da wird man nach Kommandos in der Auswertung selektieren müssen. Oder man macht eine 3. Liste (nur Timer-Kommandos) und wertet dann in einer abgewandelten Funktion anders aus als für den Rest.

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

                                          Hallo paul53,

                                          die Ausgabe sieht z.B. so aus:

                                          vctrld>getVitoTimerSoWW

                                          1:An:06:30 Aus:09:00

                                          2:An:12:00 Aus:14:00

                                          3:An:17:00 Aus:20:00

                                          4:An:– Aus:--

                                          Ist bei allen Timer-Einstellungen derselbe Aufbau.

                                          Gruß,

                                          Thorsten

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

                                            Möchtest Du die 4 Zeitspannen in einem Datenpunkt darstellen oder in 4 DP ?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            791
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            viesmann
                                            50
                                            523
                                            130848
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo