NEWS


  • 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


Suggested Topics

1.2k
Online

34.9k
Users

40.9k
Topics

560.7k
Posts