NEWS
[gelöst] Hargassner HV40 Daten über telnet abgreifen
-
@Hogy
Hallo, Ich habe einen HV20. Ich nehme an, das die daten ähnlich sind. Welches Modul bzw. welche Erweiterugn wird für die Steuerung des HV benötigt oder geht das direkt über den RJ45 Stecker? Danke mal. -
@göschi
Ich nehme an, dass es beim HV20 die gleiche Steuerung ist, wie beim HV40.
Meine Steuerung hat an dem Display innenliegend noch einen eigenen RJ45 Anschluss. Den habe ich verwendet.
Dann noch die IP fest definieren und fertig sind die Vorbereitungen von Seitens Heizung.Bezüglich der Kanalbelegung... Ich konnte diese an der Heizung auf eine SD-Karte schreiben. Hier die Datei wie sie 1:1 von der Heizung kommt.
DAQ00140.txtGrüße, Hogy
-
Hallo zusammen,
ich hab das ganze schon mal gemacht, erstellt aber nur ne Datei zum Logging im csv Format die dann mit gnuplot zur pdf gemacht wird. die Zuordnung der einzelnen Werte stammt aus dem Microkontroller Net.
https://www.mikrocontroller.net/topic/134331?page=single
mein Eintag ist vom 16.12.2017 10:11
da hängt auch mein script als Datei dran allerdings ohne GnupotGruß Karsten
-
Hallo,
ich weiß nicht ob das hier noch jemand liest. Aber ich hab doch eine Frage zu dem ganzen.
Ich besitze einen HV30 mit Internet Gateway. Wird das darüber realisiert, oder über einen direkten NetzwerkanschlussGruß Mike
-
@hogy sagte in Hargassner HV40 Daten über telnet abgreifen:
Meine Steuerung hat an dem Display innenliegend noch einen eigenen RJ45 Anschluss. Den habe ich verwendet.
...und da das Skript von mir stammt: ich greife die Daten im Netzwerk ab. Das Skript ist ein WEB-Server der auf den Datenverkehr einer bestimmten IP (=die Heizung/Steuerung) im Netzwerk lauscht, die Daten aufbereitet und an den ioB schickt

-
Danke für die Info. Das werde ich die Tage mal ausprobieren
-
Hallo,
ich habe auch eine Hargassner mit Nano-pk-Steuerung, welche ich mit Hilfe von reinen JS-Skripten auslese.
Der iobroker muss dazu per IP und Port 23 (Telnet) auf die Nano-pk zugreifen können.Zusätzlich sollte einmal auf einer SD-Karte an der Nano-pk ein Log erstellt werden. Auf der SD-Karte sollte sich danach im Verzeichnis "DAQ" die Log-Datei "DAQ00000.DAQ" (oder ähnlich) liegen. Aus dieser Log-Datei kopieren wir den XML-Code "<DAQPRJ><ANALOG><CHAN [...] /></DIGITAL></DAQPRJ>", da wir ihn im folgenden Skript benötigen
Auf dem iobroker führen wir nun das folgende JS-Skript zum Erstellen der States einmal aus:
//get XML-Code from Hargassner heater (use SD card) var nanopk = `<DAQPRJ><ANALOG> <CHANNEL id='0' name='ZK' unit=''/> <CHANNEL id='1' name='O2' unit='%'/> <CHANNEL id='2' name='O2soll' unit='%'/> <CHANNEL id='3' name='TK' unit='°C'/> ... <CHANNEL id='7' bit='21' name='DReg3 P3'/> <CHANNEL id='7' bit='22' name='DReg3 Mi auf'/> <CHANNEL id='7' bit='23' name='DReg3 Mi zu'/> </DIGITAL></DAQPRJ>`; let DP="javascript.0.Hargassner" // object-id var xml2js = require('xml2js'); // please activate npm-module var parser = new xml2js.Parser(); // translate XML data into states parser.parseString(nanopk, (err, result) => { if (err) { console.error(err); return; } // analog channels const channelsA = result.DAQPRJ.ANALOG[0].CHANNEL; channelsA.forEach(channel => { const id = channel.$.id; const bit = channel.$.bit; const name = channel.$.name; const unit = channel.$.unit; console.log(`Channel ID: ${id}, Bit: ${bit}, Name: ${name}`); createState(DP+".analog."+("00" + id).slice(-3),"",{name: name, type: "number", role: "state", unit: unit, read: true, write: false}); }); // digital channels const channelsD = result.DAQPRJ.DIGITAL[0].CHANNEL; channelsD.forEach(channel => { const id = channel.$.id; const bit = channel.$.bit; const name = channel.$.name; console.log(`Channel ID: ${id}, Bit: ${bit}, Name: ${name}`); createState(DP+".digital."+("00" + id).slice(-3)+"."+("0" + bit).slice(-2),"",{name: name, type: "boolean", role: "state", read: true, write: false}); }); });Den XML-Code habe ich der Übersicht wegen gekürzt. Da es verschiedene Nano-pk-Steuerungen mit wiederum verschiedenen Firmwares gibt, empfehle ich sehr den XML-Code immer selber zu erstellen.
Die Objekt-ID unter welcher die ganzen States erstellt werden, kann im Skript geändert werden.
Das NPM-Modulxml2jsmuss in der javascript-Instanz noch aktiviert werden.Danach das folgende Skript aktivieren:
let DP = "javascript.0.Hargassner"; // object-id let ip = '192.168.0.99'; // ip of Nano-pk let port = 23; // port of Nano-pk (Telnet) var net = require('net'); // please activate npm-module // run script every 5 sec schedule("*/5 * * * * *", function () { // connect to Nano-pk var client = new net.Socket(); client.connect(port, ip, function() { console.debug('Connected'); }); // get data client.on('data', function(data) { const values = data.subarray(3,-3).toString('utf8').split(" "); // split received values into array console.debug('Received: ' + values); client.destroy(); // kill client after server's response // set analog states let DPA = `${DP}.analog.`; const idAna = $(`state[id=${DPA}*]`); const valAna = values.slice(0, idAna.length); idAna.each( function( id, i){ const idSub = id.substring(DPA.length); const ch = Number(idSub.substring(0,3)); setState(id, Number(valAna[ch]), true); console.debug(id+`: `+ valAna[i]); }); // set digital states let DPD = `${DP}.digital.`; const idDig = $(`state[id=${DPD}*]`); const valDig = values.slice(idAna.length); idDig.each( function( id, i){ const idSub = id.substring(DPD.length); const ch = Number(idSub.substring(0,3)); const bit = Number(idSub.substring(4)); const bits = parseInt(valDig[ch],16); const bitMask = 1 << bit; const value = ((bits & bitMask) > 0); setState(id, value, true); console.debug(id+`: `+ value); }); }); // Closed connection client.on('close', function() { console.debug('Closed connection'); }); });Die Objekt-ID sollte hier die gleiche sein, wie im ersten Skript.
Dann noch die IP (und ggf. bei Bedarf den Port) ändern.
Für dieses Skript noch das NPM-Modulnetaktivieren.
Der Scheduler sorgt in diesem Fall dafür, dass der Code alle 5 Sekunden ausgeführt wird und das Skript entsprechend die Werte bei der Nano-pk holt und in die Objekte schreibt.Und sobald das zweite Skript läuft, sollten die Werte einlaufen:

-
Ich habe ja die Modbuskarte von Harrgassner in meinem Nano PK, die hatte immerhin 380€ gekostet.
Muss aber sagen das ist diese nicht Wert da viele dinge nicht gehen.
Das ist meine Modbus File, hier gehen nur die alternative Adressen.Meine Frage wäre, ist es möglich mit deinem Script die Adresse
KNX Raumtemp HK1 Vorgabe Raumtemp. HK1 DAQ-ANA lesen/schreiben 11002 11003 °C
lesen und zu schreiben?Ich will meinem Kessel nur die Raumtemperatur ohne Raumfüher mitteilen, laut Harrgassner soll das dort funktionieren.
MfG
-
@sborg
Habe selbst eine NanoPK15-Plus, wenn man einen Datenexport auf SD-Karte direkt an der Heizung macht bekommt man die Zuordnung zu den Datenpunkten (identisch mit der telnet Geschichte) (in Datei "DAQ00000.DAQ"). Bei mir sind es 135 Werte (127 Analogwerte + 8 Hexadezimal Werte). Die Hex-werte zeigen Schaltzustände an. (Siehe auch Excel). Durch Aufspielen einer neuen Firmware hat sich bei mir übrigens auch was an den Datenpunkten verändert. -
ja bei mir auch, die haben seit Juli eine neue FW, seit dem ist das alles gefixt
es geht mit dem normalen Adapter von ioBroker.Aber wie fragst du alle Adressen ab, die Digitalen DAQ?
MfG