@paul53 sagte in [Vorlage] Script zum Aufräumen in Aufzählungen:
Genügt das Log nicht ?
Wenn ich das Log lösche kann ich es nicht mehr nachvollziehen.
Ist aber nicht so Wichtig.
Hallo zusammen,
hat doch noch geklappt. Ich bekomme alle Infos aus der Anlage heraus. Alles ziemlich quick´n dirty. Verbesserungs- und Optimierungsvorschläge jederzeit und gerne.
Es müssen die NPM Module needle und xml2js bei dem Javascript-Adapter hinzugefügt werden.
createState('KWL.stufe', 0, {type : "number"});
createState('KWL.stufeProzent', 0, {type : "number"});
createState('KWL.bypass', false, {type : "boolean"});
createState('KWL.off', false, {type : "boolean"});
createState('KWL.bad.temperature', 0, {type : "number"});
createState('KWL.bad.humitity', 0, {type : "number"});
createState('KWL.arbeitszimmer.temperature', 0, {type : "number"});
createState('KWL.arbeitszimmer.humitity', 0, {type : "number"});
createState('KWL.studio.airQuality', 0, {type : "number"});
createState('KWL.temperatur.außenluft', 0, {type : "number"});
createState('KWL.temperatur.zuluft', 0, {type : "number"});
createState('KWL.temperatur.fortluft', 0, {type : "number"});
createState('KWL.temperatur.abluft', 0, {type : "number"});
var needle = require('needle');
function loginByNeedle() {
var options = {
headers: {
"Host" : "[http://HeliosKWL](http://HeliosKWL)",
"User-Agent": "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "de,en-US;q=0.7,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Referer": "[http://HeliosKWL/](http://HeliosKWL/)",
"Content-Length": "15",
"Connection": "keep-alive"}
};
needle.post('[http://HeliosKWL/info.htm](http://HeliosKWL/info.htm)', "v00402=****KENNWORT****", options, function(err, response) {
if (err) {
log('Shoot! Something is wrong: ' + err.message);
} else {
readWithNeedle();
}
});
}
function readWithNeedle() {
var options = {
headers: {
"Host": "HeliosKWL",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "de,en-US;q=0.7,en;q=0.3",
"Accept-Encoding": "gzip, deflate",
"Referer": "[http://HeliosKWL/anzeig.htm](http://HeliosKWL/anzeig.htm)",
"Content-Length": "20",
"Content-Type": "text/plain;charset=UTF-8",
"Connection": "keep-alive"}
};
needle.post('[http://HeliosKWL/data/werte8.xml](http://HeliosKWL/data/werte8.xml)', "xml=/data/werte8.xml", options, function(err, response, body) {
if (err) {
log('Shoot! Something is wrong: ' + err.message);
} else {
var idsAsString;
var valuesAsString;
idsAsString = JSON.stringify(body.PARAMETER.ID);
valuesAsString = JSON.stringify(body.PARAMETER.VA);
var keys = idsAsString.split(/,/);
var values = valuesAsString.split(/,/);
var temp = String(values[keys.indexOf("\"v00104\"")]);
setState("javascript.1.KWL.temperatur.außenluft"/*KWL.außentemperatur*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[keys.indexOf("\"v00105\"")]);
setState("javascript.1.KWL.temperatur.zuluft"/*KWL.temperatur.zuluft*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[keys.indexOf("\"v00106\"")]);
setState("javascript.1.KWL.temperatur.fortluft"/*KWL.temperatur.fortluft*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[keys.indexOf("\"v00107\"")]);
setState("javascript.1.KWL.temperatur.abluft"/*KWL.temperatur.abluft*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[keys.indexOf("\"v00111\"")]);
setState("javascript.1.KWL.bad.humitity"/*KWL.bad.humitity*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[keys.indexOf("\"v00112\"")]);
setState("javascript.1.KWL.arbeitszimmer.humitity"/*KWL.arbeitszimmer.humitity*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[keys.indexOf("\"v00119\"")]);
setState("javascript.1.KWL.bad.temperature"/*KWL.bad.temperature*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[keys.indexOf("\"v00120\"")]);
setState("javascript.1.KWL.arbeitszimmer.temperature"/*KWL.arbeitszimmer.temperature*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[keys.indexOf("\"v00136\"")]);
setState("javascript.1.KWL.studio.airQuality"/*KWL.studio.airQuality*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[keys.indexOf("\"v00102\"")]);
setState("javascript.1.KWL.stufe"/*KWL.stufe*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[keys.indexOf("\"v00103\"")]);
setState("javascript.1.KWL.stufeProzent"/*KWL.stufeProzent*/, parseFloat(temp.slice(1, temp.length -1)));
temp = String(values[95]); //die undokumentierte ID v02119
if (temp === 0) {
setState("javascript.1.KWL.bypass"/*KWL.bypass*/, false);
} else {
setState("javascript.1.KWL.bypass"/*KWL.bypass*/, true);
}
}
});
}
loginByNeedle(); // bei Scriptstart
schedule("* * * * *", loginByNeedle);
ToDo:
es erfolgt unnötigerweise aktuell jede Minute ein Login; das kann optimiert werden
SET-Funktionen gewünscht: Anlage ausschalten, Bypass-Automatik übersteuern und Bypass via Iobroker öffnen/schließen
Hallo mbas,
das sieht ja schon mal super aus.
Hast du das Skript schon weiterentwickelt? Bzg. Login und der Bypassfunktion?
MfG TimmerX
Hallo,
wo muß ich das Script einsetzen um die Werte bzw. die Variablen in Blocky weiter zu verarbeiten?