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

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Viessmann-Adapter

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

      Danke für den Hinweis. Der letzte Satz sagt dann aber auch, dass eine json-Ausgabe wohl die bessere Alternative wäre. Und das macht ja der vitotronic-Adapter unter CCU.IO.

      Man könnte, denke ich, den Aufruf mittels vclient auch direkt über ein ioBroker-Skript erledigen, das regelmäßig aufgerufen wird. Die reinen Werte als solche finde ich aber nicht so hilfreich. Mir wäre lieber, sie würden in entsprechende Datenpunkte geschrieben werden, um sie ggf. auch per Flot oder dergleichen als Chart anzeigen zu können.

      Gruß,

      Thorsten

      1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators last edited by

        Hallo THorsten,

        wie heisst es so schön: "grau ist alle Theorie" 😉

        Ich habe deinen schönen Post im HM-Forum natürlich auch gelesen. Daher weiss ich, dass du dich noch nicht sehr intensiv um die anderen Adapter von ioBroker außer HM-Adapter und vis gekümmert hast.

        DSu solltest UNBEDINGT mal mit node-red spielen. Viele deiner Fragen würden sich dann sehr wahrscheinlich erübrigen.

        Selbst ich, der kein javascript spricht, habe damit per klick und klack funktionierende Abfragen von xy ind ioBroker Datenpunkte geschafft.

        node-red ist so toll, da kann man so viel mit relativ einfachen Mittel schaffen, dass viele Dinge, die hier später in einem Adapter geendet sind, mit einem node-red flow begonnen haben.

        Was ich selber nicht geschafft habe war allerdings das parsen und zerlegen komplexerer Websiten.

        Gruß

        Rainer

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

          Hallo Rainer,

          vielen Dank für den Tipp. Im Moment gibt es da für mich aber noch einige weitere Baustellen beim Umstieg von CCU.IO auf den ioBroker, die ich gerne vorher abgearbeitet hätte. Aber das mit node-red werde ich mir bei Gelegenheit sicherlich mal ansehen.

          Kann man node-red vielleicht ein wenig mit ScriptGUI vergleichen? Klar, die Funktionalität ist eine komplett andere, aber ich meine so von der Grundidee her.

          Gruß,

          Thorsten

          1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators last edited by

            @dtp:

            Kann man node-red vielleicht ein wenig mit ScriptGUI vergleichen? `
            Leider nein, In einigen nodes musst du auch javascripts eingeben, z.B. um Daten zu zerlegen.

            Natürlich ist die Grundidee eine graphische Programmierung, das ist aber schon alles.

            Gruß

            Rainer

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

              Hallo Rainer,

              das macht's nicht unbedingt leichter für mich. Ehrlich gesagt würde ich lieber nach Java fliegen, als damit zu programmieren. 8-)

              So ein wenig hoffe ich ja noch auf den Support vom Eisbaeeern. winkewinke

              Bis dann,

              Thorsten

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

                Ich habe die Hoffnung ja irgendwie noch nicht aufgegeben. Vielleicht findet sich ja noch jemand, der sich der Sache annehmen möchte. winkewinke

                Das würde den Schritt weg von CCU.IO hin zum ioBroker für mich dann absolut abrunden. Nur leider bin ich zumindest aktuell etwas zu "blöd" für die Adapter-Programmierung.

                Gruß,

                Thorsten

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

                  @dtp:

                  Eigentlich macht der Adapter nichts anderes, als die Datenpunkte einer xml-Datei (vito.xml) auszulesen sowie sie zu den einstellbaren Zeitintervallen abzufragen `
                  Wie ich das sehe, ist vito.xml eine Konfigurationsdatei, die Kommandos enthält.

                  Für das Abfragen bzw. Setzen von Werten kann http://openv.wikispaces.com/vclient dienen. Das kann man periodisch per Script ausführen und sich so die Werte in Datenpunkte holen:

                  // Aussen- und Warmwassertemperatur auslesen
                  function vito() {
                      exec('vclient -h 127.0.0.1:3002 -c getVitoTempAussen,getVitoTempWWIst', function(err, stdout, stderr) {
                      if (err) {
                          log(stderr,'error');
                          return;
                          }
                      log(stdout);
                      stdout = stdout.split("\n");
                      setState(wwtempid, parseFloat(stdout[3]));
                      setState(aussentempid, parseFloat(stdout[1]));
                      });
                  }
                  
                  schedule("*/1 * * * *", vito);
                  
                  

                  Erst einmal anschauen, wie das log(stdout) aussieht !

                  EDIT: Noch besser: Erst einmal auf der Console eingeben
                  > vclient -h 127.0.0.1:3002 -c getVitoTempAussen,getVitoTempWWIst
                  und die Consolenausgabe posten.

                  1 Reply Last reply Reply Quote 0
                  • Eisbaeeer
                    Eisbaeeer Developer last edited by

                    Hallo Thorsten. Ich hab dich nicht vergessen. Bin gerade in den letzten Zügen mit meinem derzeitigen Projekt.

                    In wie weit wäre es kritisch, wenn du die Schnittstelle nach aussen frei gibst? Damit ich debuggen kann? Gibt es eine Möglichkeit mit user/passwort abzusichern?

                    Oder bist du fit in VPN einrichten? Hast du eine Fritzbox?

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

                      Hallo paul53 und Eisbaeeer,

                      vielen, vielen Dank schon mal für Eure Unterstützung.

                      @paul53: Dein Javaskript bietet mir auf jeden Fall schon mal eine sehr gute Grundlage, falls es mit dem Adapter nichts werden sollte.

                      @Eisbaeeer: Habe zwar eine FRITZ!Box mit eingerichetem VPN-Server, allerdings würde ich dessen Daten sehr ungerne weitergeben. Gibt es da eine Möglichkeit, eine separate VPN-Testverbindung einzurichten, mit der Du nur Zugriff auf meinen mit der Heizungsanlage verbundenen Raspi erhältst, ohne dass ich Dich als weiteren User auf der FRITZ!Box einrichten muss? Auf jeden Fall könnte ich sehr leicht einen Raspi 2 einrichten, auf dem vcontrold und ioBroker (ohne Zugriff auf meine CCU) installiert sind. Oder würde Dir schon ein Raspi genügen, auf dem unter Jessie nur vcontrold läuft?

                      Gruß,

                      Thorsten

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

                        @paul53:

                        EDIT: Noch besser: Erst einmal auf der Console eingeben
                        > vclient -h 127.0.0.1:3002 -c getVitoTempAussen,getVitoTempWWIst
                        und die Consolenausgabe posten.

                        Hallo paul53,

                        hier die Ausgabe:

                        filename="2016-06-30_18h49_09.png" index="0">~~

                        Passt soweit.

                        Gruß,

                        Thorsten

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

                          Dann müsste auch das Setzen der Datenpunkte passen.

                          Es lassen sich beliebig viele Kommandos mit einem vclient-Aufruf übergeben, d.h. alle zu lesenden Werte in einem Rutsch abfragen.

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

                            Hab jetzt mal folgendes Skript ausprobiert:

                            createState('VitoTempAussen', {
                                type: 'string',
                                name: 'Vitotronic Außentemperatur',
                                def: 'leer'
                            });
                            
                            var TempAussen = '';
                            
                            function vitotempaussen() {
                                exec('vclient -h 127.0.0.1:3002 -c getVitoTempAussen', function(err, stdout, stderr) {
                                if (err) {
                                    log(stderr,'error');
                                    return;
                                    }
                                log(stdout);
                                stdout = stdout.split("\n");
                                TempAussen = parseFloat(stdout[1]);
                                });
                            }
                            
                            setInterval(function () {
                                vitotempaussen();
                                setState("javascript."+ instance + ".VitoTempAussen", TempAussen);
                            }, 10 * 1000); // alle 10 Sekunden
                            
                            

                            Das liefert mir dann zwar folgenden Output:

                            filename="2016-06-30_19h30_52.png" index="1">~~

                            Aber leider auch folgende Warnungen:

                            filename="2016-06-30_19h31_35.png" index="0">~~

                            Naja, ist immerhin ein Anfang. 😉

                            Bis dann,

                            Thorsten

                            1 Reply Last reply Reply Quote 0
                            • 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
                                            • First post
                                              Last post

                                            Support us

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

                                            1.1k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            viesmann
                                            50
                                            523
                                            125997
                                            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