Hallo Leute,
Da bei mir die vorhergehenden Lösungen nicht funktionierten hier mein Code der durch sehr viel Testen entstanden ist.
Mein Lösungsweg führt über die RegEx Funktion da ich es nicht geschafft habe einen XML Response zu erhalten.
// StateMaschine
! ````
var i
! // Wasserverbrauch
var path = 'Messwerte.0.SC18.Wasserverbrauch.';
! for ( i = 1; i < 15; i++ ) {
if (i<10)var id = path + 'D_Y_2_0' + i;
else var id = path + 'D_Y_2_' + i ;
! var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Wasserverbrauch vor ' + i + ' Tagen' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Wasserverbrauch vor ' + i + ' Tagen';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = 'Liter';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
! }
! // Regenerationen
var path = 'Messwerte.0.SC18.Regenerationen.';
for ( i = 1; i < 15; i++ ) {
if (i<10)var id = path + 'D_Y_4_0' + i;
else var id = path + 'D_Y_4_' + i ;
! var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Zeitpunkt Regenereation ' + i + ' vor aktueller';
obj.common.type = 'string';
obj.common.role = 'string';
obj.common.desc = 'Zeitpunkt Regenereation ' + i + ' vor aktueller';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
! }
! // Allgemeine Felder
var path = 'Messwerte.0.SC18.Allgemein.';
! var id = path + 'D_C_4_2';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Uhrzeit' ;
obj.common.type = 'string';
obj.common.role = 'string';
obj.common.desc = 'Uhrzeit';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = 'Uhr';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_C_5_1';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Ansprechverhalten' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Ansprechverhalten';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_C_4_1';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Regenerationszeitpunkt' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Regenerationszeitpunkt 0= Auto 1= Fest';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_C_4_3';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Startzeit Regeneration' ;
obj.common.type = 'string';
obj.common.role = 'string';
obj.common.desc = 'Startzeit Regeneration';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = 'Uhr';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_C_7_1';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Soll Service Intervalldauer' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Soll Service Intervalldauer';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = 'Tage';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_A_2_2';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Tage bis zur nächsten Wartung' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Tage bis zur nächsten Wartung';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = 'Tage';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_Y_5';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Aktueller Regenerationsschritt 0= keine Regeneration 1= Soletank füllen 2= Besalzen 3= Verdrängen 4= Rückspülen 5= Erstfiltrat' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Aktueller Regenerationsschritt 0= keine Regeneration 1= Soletank füllen 2= Besalzen 3= Verdrängen 4= Rückspülen 5= Erstfiltrat';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_Y_7';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Inbetriebnahme-Datum' ;
obj.common.type = 'string';
obj.common.role = 'string';
obj.common.desc = 'Inbetriebnahme-Datum';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_Y_8_11';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Ergebnis letzter E-Mail Versand 0=keine Mail versandt 1=Mail erfolgreich versandt 2=Benutzerdaten fehlerhaft 3= kein Internetzugang/Server nicht bereit' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Ergebnis letzter E-Mail Versand 0=keine Mail versandt 1=Mail erfolgreich versandt 2=Benutzerdaten fehlerhaft 3= kein Internetzugang/Server nicht bereit';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_Y_10_1';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Aktuelle Restkapazität Austauscher' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Aktuelle Restkapazität Austauscher';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '%';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_Y_13';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = '0= Austauscher gestört/in Regeneration 1= Austauscher in Betrieb' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = '0= Austauscher gestört/in Regeneration 1= Austauscher in Betrieb';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
var id = path + 'D_Y_14';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Voraussichtliche nächste Regeneration' ;
obj.common.type = 'string';
obj.common.role = 'string';
obj.common.desc = 'Voraussichtliche nächste Regeneration';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
//region D_B_1 Regeneration
var id = path + 'D_B_1';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Regeneration aktiv' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Regeneration aktiv';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
// Aktualwerte
var path = 'Messwerte.0.SC18.Aktualwerte.';
! //region D_A_1_1
var id = path + 'D_A_1_1';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Aktueller Durchfluss' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Aktueller Durchfluss';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = 'm³/h';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
//endregion D_A_1_1
! //region D_A_1_2
! var id = path + 'D_A_1_2';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Restkapazität' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Restkapazität';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = 'm³*°dH';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
//endregion
//region D_A_1_3
var id = path + 'D_A_1_3';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Kapazitätszahl' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Kapazitätszahl';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = 'm³*°dH';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
! //endregion
! //region D_A_2_1
! var id = path + 'D_A_2_1';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Restzeit/-menge Reg.Schritt' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Restzeit/-menge Reg.Schritt';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = 'l oder min';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
! //endregion
! //region D_A_3_1
! var id = path + 'D_A_3_1';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Letzte Regeneration' ;
obj.common.type = 'string';
obj.common.role = 'string';
obj.common.desc = 'Letzte Regeneration vor x h';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = 'h';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
//endregion
! //region D_A_3_2
var id = path + 'D_A_3_2';
var obj = {};
obj.type = 'state';
obj.common = {};
obj.common.name = 'Letzte Regeneration Über' ;
obj.common.type = 'number';
obj.common.role = 'number';
obj.common.desc = 'Letzte Regeneration Über';
obj.common.read = true;
obj.common.write = true;
obj.common.def = 0;
obj.common.min = 0;
obj.common.unit = '%';
setObject(id, obj, function(err) {
if(err) log('Cannot write object: ' + err);
else setState(id, obj.common.def);
});
//endregion
! ````
// Logger
! ````
// Wichtige Daten hier anpassen
// V1.0: Erstellung
// V1.1: Header mit Konstanten hinzu;
// Verbindungsüberwachung hinzu;
// V1.2: Datum auslesen entfernt
// Sommer/Winterzeit auslesen entfernt
! // Hier IP Adresse der Anlage eintragen
var constIP = "192.168.0.132"
// Hier Namen der State Variable eintragen wenn Verbindung über Ping Adapter geprüft werden soll
// Wenn kein Ping Adapter verwendet werden soll dan True eintragen
var statePingAdapter = 'ping.0.matthias-SS15HT.192_168_0_132'/192 168 0 132/
// Hier Abfragezyklus in Sekunden eintragen
var constTick = 5
! var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
! var parser = require('xmldom').DOMParser;
! var xhr = new XMLHttpRequest();
var requestNumber = 1 ;
! xhr.onload = function () { };
xhr.onerror = function () { };
! var varInterval = setInterval(Interval, constTick * 1000 );
! function Interval() {
! var conection = getState(statePingAdapter)
//console.log(co.val);
if (conection.val)
{
! xhr.open("POST","http://" + constIP + "/mux_http");
xhr.setRequestHeader("Content-type", "application/json");
xhr.responseType = "document";
! switch(requestNumber) {
case 1:
//console.log('Request ' + requestNumber + ' ausgeführt');
xhr.send("id=8871&show=D_Y_2_1|D_Y_2_2|D_Y_2_3|D_Y_2_4|D_Y_2_5|D_Y_2_6|D_Y_2_7|D_Y_2_8|D_Y_2_9|D_Y_2_10|D_Y_2_11|D_Y_2_12|D_Y_2_13|D_Y_2_14~");
xhr.onreadystatechange = function()
{
if (xhr.readyState==4)
{
if (xhr.status == 200)
{
if (xhr.responseText)
{
var str = xhr.responseText;
const regex = /<data>`([^\<]+)<\/code><d_y_2_1>([^\<]+)<\/D_Y_2_1><d_y_2_2>([^\<]+)<\/D_Y_2_2><d_y_2_3>([^\<]+)<\/D_Y_2_3><d_y_2_4>([^\<]+)<\/D_Y_2_4><d_y_2_5>([^\<]+)<\/D_Y_2_5><d_y_2_6>([^\<]+)<\/D_Y_2_6><d_y_2_7>([^\<]+)<\/D_Y_2_7><d_y_2_8>([^\<]+)<\/D_Y_2_8><d_y_2_9>([^\<]+)<\/D_Y_2_9><d_y_2_10>([^\<]+)<\/D_Y_2_10><d_y_2_11>([^\<]+)<\/D_Y_2_11><d_y_2_12>([^\<]+)<\/D_Y_2_12><d_y_2_13>([^\<]+)<\/D_Y_2_13><d_y_2_14>([^\<]+)<\/D_Y_2_14><\/data>/;
const subst = regex.exec(str);
if (subst)
{
for ( i = 1; i < 15; i++ ) {
i1 = i + 1;
if (i < 10)
setState("Messwerte.0.SC18.Wasserverbrauch.D_Y_2_0" + i , parseInt(subst[i1]) );
else
setState("Messwerte.0.SC18.Wasserverbrauch.D_Y_2_" + i , parseInt(subst[i1]) );
}
}
requestNumber = 2;
}
}
}
};
break;
case 2:
//console.log('Request ' + requestNumber + ' ausgeführt');
xhr.send("id=8871&show=D_C_4_1|D_C_4_2|D_C_4_3|D_C_5_1|D_C_7_1~");
xhr.onreadystatechange = function()
{
if (xhr.readyState==4)
{
if (xhr.status == 200)
{
if (xhr.responseText)
{
var str = xhr.responseText;
const regex = /<data>`([^\<]+)<\/code><d_c_4_1>([^\<]+)<\/D_C_4_1><d_c_4_2>([^\<]+)<\/D_C_4_2><d_c_4_3>([^\<]+)<\/D_C_4_3><d_c_5_1>([^\<]+)<\/D_C_5_1><d_c_7_1>([^\<]+)<\/D_C_7_1><\/data>/;
const subst = regex.exec(str);
if (subst)
{
setState("Messwerte.0.SC18.Allgemein.D_C_4_1" , parseInt(subst[2]) );
setState("Messwerte.0.SC18.Allgemein.D_C_4_2" , subst[3] );
setState("Messwerte.0.SC18.Allgemein.D_C_4_3" , subst[4] );
setState("Messwerte.0.SC18.Allgemein.D_C_5_1" , parseInt(subst[5]) );
setState("Messwerte.0.SC18.Allgemein.D_C_7_1" , parseInt(subst[6]) );
}
requestNumber = 3;
}
}
}
};
break;
case 3:
//console.log('Request ' + requestNumber + ' ausgeführt');
xhr.send("id=8871&show=D_Y_4_1|D_Y_4_2|D_Y_4_3|D_Y_4_4|D_Y_4_5|D_Y_4_6|D_Y_4_7|D_Y_4_8|D_Y_4_9|D_Y_4_10|D_Y_4_11|D_Y_4_12|D_Y_4_13|D_Y_4_14~");
xhr.onreadystatechange = function()
{
if (xhr.readyState==4)
{
if (xhr.status == 200)
{
if (xhr.responseText)
{
var str = xhr.responseText;
const regex = /<data>`([^\<]+)<\/code><d_y_4_1>([^\<]+)<\/D_Y_4_1><d_y_4_2>([^\<]+)<\/D_Y_4_2><d_y_4_3>([^\<]+)<\/D_Y_4_3><d_y_4_4>([^\<]+)<\/D_Y_4_4><d_y_4_5>([^\<]+)<\/D_Y_4_5><d_y_4_6>([^\<]+)<\/D_Y_4_6><d_y_4_7>([^\<]+)<\/D_Y_4_7><d_y_4_8>([^\<]+)<\/D_Y_4_8><d_y_4_9>([^\<]+)<\/D_Y_4_9><d_y_4_10>([^\<]+)<\/D_Y_4_10><d_y_4_11>([^\<]+)<\/D_Y_4_11><d_y_4_12>([^\<]+)<\/D_Y_4_12><d_y_4_13>([^\<]+)<\/D_Y_4_13><d_y_4_14>([^\<]+)<\/D_Y_4_14><\/data>/;
const subst = regex.exec(str);
if (subst)
{
for ( i = 1; i < 15; i++ ) {
i1 = i + 1;
if (i < 10)
setState("Messwerte.0.SC18.Regenerationen.D_Y_4_0" + i , subst[i1] );
else
setState("Messwerte.0.SC18.Regenerationen.D_Y_4_" + i , subst[i1] );
}
requestNumber = 4;
}
}
}
}
};
break;
case 4:
//console.log('Request ' + requestNumber + ' ausgeführt');
xhr.send("id=8871&show=D_Y_5|D_Y_7|D_Y_8_11|D_Y_10_1|D_Y_13|D_Y_14|D_B_1|D_C_5_1~");
xhr.onreadystatechange = function()
{
if (xhr.readyState==4)
{
if (xhr.status == 200)
{
if (xhr.responseText)
{
var str = xhr.responseText;
const regex = /<data>`([^\<]+)<\/code><d_y_5>([^\<]+)<\/D_Y_5><d_y_7>([^\<]+)<\/D_Y_7><d_y_8_11>([^\<]+)<\/D_Y_8_11><d_y_10_1>([^\<]+)<\/D_Y_10_1><d_y_13>([^\<]+)<\/D_Y_13><d_y_14>([^\<]+)<\/D_Y_14><d_b_1>([^\<]+)<\/D_B_1><d_c_5_1>([^\<]+)<\/D_C_5_1><\/data>/;
const subst = regex.exec(str);
if (subst)
{
setState("Messwerte.0.SC18.Allgemein.D_Y_5" , parseInt(subst[2]) );
setState("Messwerte.0.SC18.Allgemein.D_Y_7" , subst[3] );
setState("Messwerte.0.SC18.Allgemein.D_Y_8_11" , parseInt(subst[4]) );
setState("Messwerte.0.SC18.Allgemein.D_Y_10_1" , parseInt(subst[5]) );
setState("Messwerte.0.SC18.Allgemein.D_Y_13" , parseInt(subst[6]) );
setState("Messwerte.0.SC18.Allgemein.D_Y_14" , subst[7] );
setState("Messwerte.0.SC18.Allgemein.D_B_1" , parseInt(subst[8]) );
setState("Messwerte.0.SC18.Allgemein.D_C_5_1" , parseInt(subst[9]) );
}
requestNumber = 5;
}
}
}
};
break;
case 5:
//console.log('Request ' + requestNumber + ' ausgeführt');
xhr.send("id=8871&show=D_A_1_1|D_A_1_2|D_A_1_3|D_A_2_1|D_A_3_1|D_A_3_2~");
xhr.onreadystatechange = function()
{
if (xhr.readyState==4)
{
if (xhr.status == 200)
{
if (xhr.responseText)
{
var str = xhr.responseText;
const regex = /<data>`([^\<]+)<\/code><d_a_1_1>([^\<]+)<\/D_A_1_1><d_a_1_2>([^\<]+)<\/D_A_1_2><d_a_1_3>([^\<]+)<\/D_A_1_3><d_a_2_1>([^\<]+)<\/D_A_2_1><d_a_3_1>([^\<]+)<\/D_A_3_1><d_a_3_2>([^\<]+)<\/D_A_3_2><\/data>/;
const subst = regex.exec(str);
if (subst)
{
setState("Messwerte.0.SC18.Aktualwerte.D_A_1_1" , parseFloat(subst[2]) );
setState("Messwerte.0.SC18.Aktualwerte.D_A_1_2" , parseFloat(subst[3]) );
setState("Messwerte.0.SC18.Aktualwerte.D_A_1_3" , parseFloat(subst[4]) );
setState("Messwerte.0.SC18.Aktualwerte.D_A_2_1" , parseInt(subst[5]) );
setState("Messwerte.0.SC18.Aktualwerte.D_A_3_1" , subst[6] );
setState("Messwerte.0.SC18.Aktualwerte.D_A_3_2" , parseInt(subst[7]) );
}
requestNumber = 1;
}
}
}
};
}
}
}</d_a_3_2></d_a_3_1></d_a_2_1></d_a_1_3></d_a_1_2></d_a_1_1></data></d_c_5_1></d_b_1></d_y_14></d_y_13></d_y_10_1></d_y_8_11></d_y_7></d_y_5>
</data></d_y_4_14></d_y_4_13></d_y_4_12></d_y_4_11></d_y_4_10></d_y_4_9></d_y_4_8></d_y_4_7></d_y_4_6></d_y_4_5></d_y_4_4></d_y_4_3></d_y_4_2></d_y_4_1></data></d_c_7_1></d_c_5_1></d_c_4_3></d_c_4_2></d_c_4_1>
</data></d_y_2_14></d_y_2_13></d_y_2_12></d_y_2_11></d_y_2_10></d_y_2_9></d_y_2_8></d_y_2_7></d_y_2_6></d_y_2_5></d_y_2_4></d_y_2_3></d_y_2_2></d_y_2_1>`</data>
```` ``Folgende zusätzliche NPM Module sind bei mir hinzugefügt:
xmlhttprequest,xml,jquery,xml2js,xmldom,regex
Folgende Adapter sollten aktiv sein:
Parser
Ping
Vlt. Hilft das jemanden. :D``