NEWS
ETA Modul/Adapter
-
Hallo zusammen,
Ich habe mir ein Skript gebaut welches XML einer ETA ausliest und speichert…
Das eigentlich nicht standardisierte daran ist, dass bei der ETA im XML ein Namespace verwendet wird der bei XPATH Abfragen berücksichtigen werden muss. Aus diesem Grund kann konnte ich nicht so einfach drauflos parsen...
Ich hätte noch weitere Ideen die ich einbringen könnte - würde mich aber grundsätzlich freuen falls jemand Lust hat das Skript weiter zu abstrahieren und als Adapter umzusetzen? Ich befürchte schlicht mir fehlt die Zeit dazu diesen dann auch ordentlich zu pflegen…
Aber hier zumindest mal das Skript
var http = require('http'); var xpath = require('xpath'); var dom = require('xmldom').DOMParser; var etaIP = 'http://192.168.178.xx:8080/user/var'; // 1\. URI => URI muss ggf. je nach Platine individuell ausgelesen werden (siehe http://192.168.178.xx:8080/user/menu) // 2\. Object // 3\. read // 4\. write // 5\. name // 6\. type // 7\. unit // 8\. role var etaVars = [ ["/120/10251/0/0/12242", "eta.temperatur.PUFFER_OBEN", true, false, "Puffer oben", "number", "°C", "value.temperature"], ["/120/10251/0/0/12244", "eta.temperatur.PUFFER_UNTEN", true, false, "Puffer unten", "number", "°C", "value.temperature"], ]; etaVars.forEach(function(etaVar){ createState(etaVar[1], 0, { read: etaVar[2], write: etaVar[3], name: etaVar[4], type: etaVar[5], unit: etaVar[6], role: etaVar[7] }); }); schedule("*/10 * * * * *", function () { pollETA(); }); pollETA(); function pollETA() { // console.log("** Polling ETA Variables"); etaVars.forEach(function(etaVar){ http.get(etaIP + etaVar[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; // console.log("** ETA chunk: " + chunk); }); // this event fires *one* time, after all the `data` events/chunks have been gathered http_res.on("end", function () { // console.log("** ETA data: " + data); try { var doc = new dom().parseFromString(data); var select = xpath.useNamespaces({"eta": "http://www.eta.co.at/rest/v1"}); var state = (select('//eta:value/@strValue', doc)[0].nodeValue); // console.log("** ETA state: " + state); setState(etaVar[1], state); } catch (e) { log("ETA: Cannot set data "+ etaVar[2] +":" + e, 'error'); } }); }); }); }
-
ETA Heizungsanlage (Pellets~)
Sorry - Sollte man vielleicht noch mitteilen
-
Servus catnipper,
Ich habe einen PU15 und bin schon seit längerem drann die Daten irgendwie zu bekommen, schaffe es leider nicht da mir die Zeit und auch das Wissen dazu fehlt dies so umzusetzen. Einen Adapter fände ich Klasse und werde dein Script mal testen.
Danke dir schon mal dafür
Grüßle
Sodalle
-