NEWS
Script zum Auslesen eines Stiebel Eltron ISG
-
Hi,
ich hab an meiner Stiebel Eltron Wärmepumpe meiner Heizung ein
ISG angeschlossen und meinen alten ccu.io - Adapter als Script portiert.
Irgendwie hab ich es nicht geschafft, einen Adapter daraus zu machen, aber eigentlich
reicht mir das auch so als Script, bin mir nicht ganz sicher welchen Vorteil ein Adapter bringen würde,
ich finde das als Script fast praktischer.
Auf dem ISG läuft die Firmwareversion 7.0.
Es müssen 2 zusätzliche node module installiert werden (xmldom und xpath)
im ordner /opt/iobroker/node_modules/iobroker.javascript die beiden befehle ausführen:
npm install xpath
npm install xmldom
Hier das Script, es wird über Schedule alle 10 minuten ausgeführt, die IP Adresse des ISG muss natürlich passend eingetragen werden:
! ````
var http = require('http');
var xpath = require('xpath');
var dom = require('xmldom').DOMParser;
! var stiebeleltronIP = '192.168.2.26';
! createState('stiebeleltron.prozess.RUECKLAUFTEMPERATUR');
createState('stiebeleltron.prozess.RUECKLAUFTEMPERATUR');
createState('stiebeleltron.prozess.VORLAUFTEMPERATUR');
createState('stiebeleltron.prozess.FROSTSCHUTZTEMPERATUR');
createState('stiebeleltron.prozess.AUSSENTEMPERATUR');
createState('stiebeleltron.prozess.VERDAMPFERTEMPERATUR');
createState('stiebeleltron.prozess.REKUPERATORTEMPERATUR');
createState('stiebeleltron.prozess.ZWISCHENEINSPRITZUNGSTEMP');
createState('stiebeleltron.prozess.HEISSGASTEMPERATUR');
createState('stiebeleltron.prozess.NIEDERDRUCK');
createState('stiebeleltron.prozess.HOCHDRUCK');
! createState('stiebeleltron.laufzeit.HEIZEN');
createState('stiebeleltron.laufzeit.WARMWASSER');
createState('stiebeleltron.laufzeit.ABTAUEN');
createState('stiebeleltron.laufzeit.NHZ_1');
createState('stiebeleltron.laufzeit.NHZ_2');
createState('stiebeleltron.laufzeit.NHZ_1_2');
createState('stiebeleltron.laufzeit.NHZ_GESAMT');
! createState('stiebeleltron.waermemenge.HEIZEN_TAG');
createState('stiebeleltron.waermemenge.HEIZEN_SUMME');
createState('stiebeleltron.waermemenge.WARMWASSER_TAG');
createState('stiebeleltron.waermemenge.WARMWASSER_SUMME');
createState('stiebeleltron.waermemenge.NHZ_HEIZEN_SUMME');
createState('stiebeleltron.waermemenge.NHZ_WW_SUMME');
! createState('stiebeleltron.verbrauch.HEIZEN_TAG');
createState('stiebeleltron.verbrauch.HEIZEN_SUMME');
createState('stiebeleltron.verbrauch.WARMWASSER_TAG');
createState('stiebeleltron.verbrauch.WARMWASSER_SUMME');
createState('stiebeleltron.verbrauch.GESAMT_TAG');
createState('stiebeleltron.verbrauch.GESAMT_SUMME');
! createState('stiebeleltron.anlage.RAUM_SOLLTEMPERATUR');
createState('stiebeleltron.anlage.WARMWASSER_SOLLTEMPERATUR');
createState('stiebeleltron.anlage.WARMWASSER_ISTTEMPERATUR');
createState('stiebeleltron.anlage.HEIZEN_BIVALENZTEMPERATUR');
createState('stiebeleltron.anlage.HEIZEN_EINSATZGRENZE');
createState('stiebeleltron.anlage.WARMWASSER_BIVALENZTEMPERATUR');
createState('stiebeleltron.anlage.WARMWASSER_EINSATZGRENZE');
createState('stiebeleltron.anlage.AUSSENTEMPERATUR');
createState('stiebeleltron.anlage.HEIZEN_SOLLTEMPERATUR');
createState('stiebeleltron.anlage.HEIZEN_ISTTEMPERATUR');
createState('stiebeleltron.anlage.VORLAUF_ISTEMPERATUR');
createState('stiebeleltron.anlage.FESTWERT_SOLLTEMPERATUR');
createState('stiebeleltron.anlage.PUFFERSOLLTEMPERATUR');
createState('stiebeleltron.anlage.STATUS');
! schedule("*/10 * * * *", function () {
pollStiebelEltron();
});
! // call once after script restart
pollStiebelEltron();
! // Frage stiebeleltron ein Mal und speichere die Antwort in CCU.IO Datenpunkten
function pollStiebelEltron() {
log("polling stiebel eltron adapter");http.get("http://" + stiebeleltronIP + "/?s=0", function (http_res) { // initialize the container for our data var data = ""; // this event fires many times, each time collecting another piece of the response http_res.on("data", function (chunk) { // append this chunk to our growing `data` var data += chunk; }); // this event fires *one* time, after all the `data` events/chunks have been gathered http_res.on("end", function () { try {// the website has some without starttags, they must be removed to use dom var newdata = data.replace(/<\/div>\s<\/div>\s<\/div>\s<\/div>\s/gmi, "<\/div>\r\n<\/div>"); var doc = new dom().parseFromString(newdata); var nodes = xpath.select("//*[@id=\"box_start_status_system\"]", doc); // since i dont get xpath queries work right, i do it the hard way of accessing the childnodes directly // Tabelle Prozessdaten var status = nodes[0].childNodes[1].childNodes[2].childNodes[0].data; setState('javascript.0.stiebeleltron.anlage.STATUS', status); } catch (e) { log("stiebeleltron: Cannot set Website 1 data:" + e, 'error'); } }); }); http.get("http://" + stiebeleltronIP + "/?s=1,0", function (http_res) { // initialize the container for our data var data = ""; // this event fires many times, each time collecting another piece of the response http_res.on("data", function (chunk) { // append this chunk to our growing `data` var data += chunk; }); // this event fires *one* time, after all the `data` events/chunks have been gathered http_res.on("end", function () { try {// the website has some without starttags, they must be removed to use dom var newdata = data.replace(/<\/div>\s<\/div>\s<\/div>\s<\/div>\s/gmi, "<\/div>\r\n<\/div>"); var doc = new dom().parseFromString(newdata); var nodes = xpath.select("//*[@id=\"content\"]", doc); // since i dont get xpath queries work right, i do it the hard way of accessing the childnodes directly // Tabelle Raumtemperatur //*[@id="content"]/div[1]/table/tbody/tr[2]/td[2] var test = Object(""); var raumsoll = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data, test); setState('javascript.0.stiebeleltron.anlage.RAUM_SOLLTEMPERATUR', raumsoll); // Tabelle Heizung //*[@id="content"]/div[3]/table/tbody/tr[2]/td[2] var aussentemp = removeDegreeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.AUSSENTEMPERATUR', aussentemp); var isttemphk1 = removeDegreeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.HEIZEN_ISTTEMPERATUR', isttemphk1); var solltemphk1 = removeDegreeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.HEIZEN_SOLLTEMPERATUR', solltemphk1); var vorlauftemp = removeDegreeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.VORLAUF_ISTEMPERATUR', vorlauftemp); var festwertsoll = checkFalseBool(nodes[0].childNodes[2].childNodes[0].childNodes[10].childNodes[3].childNodes[0].data, "AUS "); setState('javascript.0.stiebeleltron.anlage.FESTWERT_SOLLTEMPERATUR', festwertsoll); var puffersoll = removeDegreeUnit(nodes[0].childNodes[2].childNodes[0].childNodes[12].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.PUFFERSOLLTEMPERATUR', puffersoll); // Tabelle Warmwasser var wwist = removeDegreeUnit(nodes[0].childNodes[3].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.WARMWASSER_ISTTEMPERATUR', wwist); var wwsoll = removeDegreeUnit(nodes[0].childNodes[3].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.WARMWASSER_SOLLTEMPERATUR', wwsoll); // Tabelle elektr. nachwaermung var bivalenzheizung = removeDegreeUnit(nodes[0].childNodes[4].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.HEIZEN_BIVALENZTEMPERATUR', bivalenzheizung); var einsatzgrenzeheizung = removeDegreeUnit(nodes[0].childNodes[4].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.HEIZEN_EINSATZGRENZE', einsatzgrenzeheizung); var bivalenzww = removeDegreeUnit(nodes[0].childNodes[4].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.WARMWASSER_BIVALENZTEMPERATUR', bivalenzww); var einsatzgrenzeww = removeDegreeUnit(nodes[0].childNodes[4].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.anlage.WARMWASSER_EINSATZGRENZE', einsatzgrenzeww); } catch (e) { log("stiebeleltron: Cannot set Website 10 data:" + e, 'error'); } }); }); http.get("http://" + stiebeleltronIP + "/?s=1,1", function (http_res) { // initialize the container for our data var data = ""; // this event fires many times, each time collecting another piece of the response http_res.on("data", function (chunk) { // append this chunk to our growing `data` var data += chunk; }); // this event fires *one* time, after all the `data` events/chunks have been gathered http_res.on("end", function () { try { // the website has some without starttags, they must be removed to use dom var newdata = data.replace(/<\/div>\s<\/div>\s<\/div>\s<\/div>\s/gmi, "<\/div>\r\n<\/div>"); var doc = new dom().parseFromString(newdata); var nodes = xpath.select("//*[@id=\"content\"]", doc); // since i dont get xpath queries work right, i do it the hard way of accessing the childnodes directly // Tabelle Prozessdaten var ruecklauftemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.prozess.RUECKLAUFTEMPERATUR', ruecklauftemp); var vorlauftemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.prozess.VORLAUFTEMPERATUR', vorlauftemp); var frostschutztemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.prozess.FROSTSCHUTZTEMPERATUR', frostschutztemp); var aussentemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.prozess.AUSSENTEMPERATUR', aussentemp); var verdampfertemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[10].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.prozess.VERDAMPFERTEMPERATUR', verdampfertemp); var rekuperatortemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[12].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.prozess.REKUPERATORTEMPERATUR', rekuperatortemp); var zwischeneinspritztemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[14].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.prozess.ZWISCHENEINSPRITZUNGSTEMP', zwischeneinspritztemp); var heissgastemp = removeDegreeUnit(nodes[0].childNodes[1].childNodes[0].childNodes[16].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.prozess.HEISSGASTEMPERATUR', heissgastemp); var niederdruck = removePressureUnit(nodes[0].childNodes[1].childNodes[0].childNodes[18].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.prozess.NIEDERDRUCK', niederdruck); var hochdruck = removePressureUnit(nodes[0].childNodes[1].childNodes[0].childNodes[20].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.prozess.HOCHDRUCK', hochdruck); // Tabelle Wärmemenge var outHeizenTag = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.waermemenge.HEIZEN_TAG', outHeizenTag); var outHeizenSumme = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.waermemenge.HEIZEN_SUMME', outHeizenSumme); var outwarmwasserTag = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.waermemenge.WARMWASSER_TAG', outwarmwasserTag); var outwarmwasserSumme = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.waermemenge.WARMWASSER_SUMME', outwarmwasserSumme); var outNHZHeizenSumme = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[10].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.waermemenge.NHZ_HEIZEN_SUMME', outNHZHeizenSumme); var outNHZWarmwasserSumme = removePowerUnit(nodes[0].childNodes[2].childNodes[0].childNodes[12].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.waermemenge.NHZ_WW_SUMME', outNHZWarmwasserSumme); // Tabelle Leistungsaufnahme var heizenTag = removePowerUnit(nodes[0].childNodes[3].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.verbrauch.HEIZEN_TAG', heizenTag); var heizenSumme = removePowerUnit(nodes[0].childNodes[3].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.verbrauch.HEIZEN_SUMME', heizenSumme); var warmwasserTag = removePowerUnit(nodes[0].childNodes[3].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.verbrauch.WARMWASSER_TAG', warmwasserTag); var warmwasserSumme = removePowerUnit(nodes[0].childNodes[3].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.verbrauch.WARMWASSER_SUMME', warmwasserSumme); setState('javascript.0.stiebeleltron.verbrauch.GESAMT_TAG', heizenTag + warmwasserTag); setState('javascript.0.stiebeleltron.verbrauch.GESAMT_SUMME', heizenSumme + warmwasserSumme); // Tabelle Laufzeit var laufzeitHeizen = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[2].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.laufzeit.HEIZEN', laufzeitHeizen); var laufzeitWarmwasser = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[4].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.laufzeit.WARMWASSER', laufzeitWarmwasser); var laufzeitAbtauen = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[6].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.laufzeit.ABTAUEN', laufzeitAbtauen); var laufzeitNhz1 = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[8].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.laufzeit.NHZ_1', laufzeitNhz1); var laufzeitNhz2 = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[10].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.laufzeit.NHZ_2', laufzeitNhz2); var laufzeitNhz1u2 = removeHourUnit(nodes[0].childNodes[4].childNodes[0].childNodes[12].childNodes[3].childNodes[0].data); setState('javascript.0.stiebeleltron.laufzeit.NHZ_1_2', laufzeitNhz1u2);
! setState('javascript.0.stiebeleltron.laufzeit.NHZ_GESAMT', laufzeitNhz1 + laufzeitNhz2 + laufzeitNhz1u2);
}
catch (e) {
log("stiebeleltron: Cannot set Website 11 data:" + e, 'error');
}
});
});
}function checkFalseBool(input, checkvalue) {
var result = (input != checkvalue);
return Boolean(result);
}! function checkTrueBool(input, checkvalue) {
var result = input == checkvalue;
return Boolean(result);
}
! function removeUnit(input, unitLength, unit) {
if (unit)
unit.valueOf = unit.toSource = unit.toString = input.substring(input.length - unitLength, input.length);
var value = input.substring(0, input.length - unitLength);
value = value.replace(/,/, ".");
return parseFloat(value);
}
! function removeHourUnit(input, unit) {
return removeUnit(input, 2, unit);
}
! function removePowerUnit(input, unit) {
return removeUnit(input, 4);
}
! function removePressureUnit(input, unit) {
return removeUnit(input, 4);
}
! function removeDegreeUnit(input, unit) {
return removeUnit(input, 2, unit);
}
! ```` -
Hi tschombe,
wir haben vor ein paar Monaten schonmal zwecks ISG auslesen im HM Forum geschrieben.
Anscheinend gibt es Unterschiede zwischen der deutschen und der österreichischen Version des ISG…
Könnte man solche Unterschiede eventuell in einem Adapter konfigurierbar machen ?
Ein Konfig Menü im Adapter in dem man einstellen kann, ob man österr. oder dt. Version und das Auslesen funktioniert dementsprechend dann mit jeder Version.
Hättest du eventuell Bock sowas auf die Beine zu stellen ?
Ich habe leider NULL Ahnung davon, würde dich aber so gut es mir möglich ist dabei unterstützen.
Beste Grüße
-
Es müssen 2 zusätzliche node module installiert werden (xmldom und xpath)
im ordner /opt/iobroker/node_modules/iobroker.javascript die beiden befehle ausführen:
npm install xpath
npm install xmldom ```` `
Es isz besser die beiden Module in der Javascript-Adapter-Konfig einzutragen. Dann wird es automagisch vom Adapter installiert
-
Hallo,
ich würde das Script gerne für mein ISG nutzen, leider funktioniert es bei mir nicht, es gibt folgende Fehlermeldungen:
22:00:00.452 [info] javascript.0 script.js.common.StiebelEltron: polling stiebel eltron adapter
22:00:00.842 [error] javascript.0 script.js.common.StiebelEltron: stiebeleltron: Cannot set Website 1 data:TypeError: Cannot read property 'childNodes' of undefined
22:00:01.137 [error] javascript.0 script.js.common.StiebelEltron: stiebeleltron: Cannot set Website 11 data:TypeError: Cannot read property '2' of null
22:00:01.492 [error] javascript.0 script.js.common.StiebelEltron: stiebeleltron: Cannot set Website 10 data:TypeError: Cannot read property '2' of null
Ich vermute, dass das daran liegt, dass mein ISG ein Login erfordert, im Script sehe ich keinen Hinweis auf Benutzername und Passwort. Wie kann man das Script so abändern, dass es sich am ISG anmeldet? Danke für Eure Hilfe.
Viele Grüße,
Thomas.
-
Hallo zusammen
Ich habe auch eine Wärmepumpe von Stiebel Eltron
Meine ist die LWZ 303 SOL
Ich bin noch ganz am Anfang und weis nicht wie ich das Projekt angehen soll.
Mein Wunsch wäre das ich die Daten auslesen kann und wenn möglich auch die Heizung dann Steuern!
Wäre toll wenn mir da einer von euch helfen kann.
Danke
-
Hallo,
ich wollte mal nachfragen ob schon jemand Erfahrung in Sachen "steuern" gemacht hat.
Also das man z.B. die Lüfterstufen über IOBroker ändern kann?
-
geht anscheinend mit dem skript hier viewtopic.php?f=21&t=11900
habs aber noch nicht getestet…
-
Danke für den Tip, habe jetzt schon ein PHP-Programm geschrieben bekommen, das ist so ähnlich.
-
Kannst du das eventuell zur Verfügung stellen und eine kurze Anleitung dazu schreiben wie man es zum Laufen bekommt, bzw. wie man damit steuert ?
Dann hätten mehrere Leute was davon
Beste Grüße
-
Das würde ich gerne, aber ich habe das selber nicht geschrieben und es ist an meine ganze MySQL-Datenbank abgepasst und auch auf meine ISG-Firmwareversion.
Das wird nichts bringen einfach den Quellcode hier reinzutun, aber ich habe es mal ein wenig verglichen, es ist im Prinzip ein ähnliches PHP-Script wie von dem Link den du eingestellt hast.
Also wenn jemand es ausprobieren will, dann einfach mal das PHP-Script von deinem Link kopieren.
-
Ich steuere mit meinem PHP Code die LWZ über das ISG - funktioniert eigentlich zuverlässig. Würde das ganze allerdings gerne in JS umschreiben damit alles auf dem iobroker läuft und idealer Weise auch mit deinem Parse Skript in einem Adapter packen - hier fehlt mir allerdings noch das Know How für.
Hab auch gerade festgestellt, das mit meiner ISG Version (8.5.6) nicht alle Werte mit deinen Skript ausgelesen werden können:
-
Gibts eigentlich eine Möglichkeit das ISG mit dem oben genannten Script auszulesen wenn dies Kennwort geschützt ist?
-
Hallo zusammen, zum senden an das ISG, siehe hier:
-
Hallo zusammen,
ich bin auch ein Nutzer des ISGplus und ich versuche noch zusätzlich die Betriebsart der LWZ mit auszulesen. Ich scheitere leider daran, dass es kein Text ist. Kann mir jemand etwas auf die Sprünge helfen, wie ich da vor gehen kann. Vielen Dank. Zu finden ist es auf der Startseite im Auswahlfenster. Verändern müsste über val39 funktionieren, wie auch alle anderen Werte. Teste ich dann im Nachgang, wenn ich es auslesen kann.
[Edit]: Habe es durch ewiges probieren selber rausgefunden.
var betriebsart = doc.getElementById('aval39').getAttribute('value');
Hinweis: AUTOMATIK = 11; BEREITSCHAFT = 1; TAGBETRIEB = 3; ABSENKBETRIEB = 4; WARMWASSER = 5; HANDBETRIEB = 14; NOTBETRIEB = 0;
-
Habe begonnen einen Adapter für das ISGweb zu schreiben:
-
Ich versuche gerade die Werte einzulesen, tu mir aber schwer mittels den childNodes die Werte auszulesen.
Zum möchte ich den Wert der RAUMISTTEMP HK1 lesen, der kopierte xpath mittels Firefox Developer Edition:
/html/body/div[2]/div/form/div/div[1]/table/tbody/tr[2]/td[2]
Da ich direkt bei #content einsteige muss ja nur noch
/div[1]/table/tbody/tr[2]/td[2]
selektieren.
Wie muss denn der Korrekte selekt über die childNodes ausschauen?
var test = xpath.select("//*[@id=\"content\"]", doc); var status = test[0].childNodes[1].childNodes[1].childNodes[1].childNodes[2].childNodes[2].childNodes[0].data;
Beispiel der HTML Seite:
RAUMTEMPERATUR | RAUMISTTEMP. HK1 | 21,0 °C | RAUMSOLLTEMP. HK1 | 21,0 °C | RAUMFEUCHTE HK1 | 0,0 % | RAUMISTTEMP. HK2 | 21,0 °C | RAUMSOLLTEMP. HK2 | 21,0 °C | RAUMFEUCHTE HK2 | 0,0 % |
-
Hallo zusammen,
ich scheitere bei der Installation vom Skript zum Auslesen der ISG-Wert:
Erhalte die schon öfters beschriebene Fehlermeldung:
17:33:00.031 info javascript.0 script.js.common.ISG.ISGauslesen: polling stiebel eltron adapter
17:33:01.237 error javascript.0 script.js.common.ISG.ISGauslesen: stiebeleltron: Cannot set Website 20 data:TypeError: Cannot read property '0' of null
17:33:02.214 error javascript.0 script.js.common.ISG.ISGauslesen: stiebeleltron: Cannot set Website 23 data:TypeError: Cannot read property 'childNodes' of undefined
17:33:05.592 error javascript.0 script.js.common.ISG.ISGauslesen: stiebeleltron: Cannot set Website 10 data:TypeError: Cannot read property 'substring' of undefined
17:33:06.671 error javascript.0 script.js.common.ISG.ISGauslesen: stiebeleltron: Cannot set Website 11 data:TypeError: Cannot read property '2' of null
xpath und xmldom habe ich wie beschrieben installiert. Ging bei mir allerdings nur mit sudo
Habt ihr eine Idee, wie man die Fehlersuche weiter eingrenzen kann?
-
Es gibt mittlerweile einen Adapter dazu: