@oxident du hast Recht das eine BBWP ist, der benutz aber der HiTemp App/HiTemp WiFi Modul, kann auch die Parameter mit 022 oder 066 benutzen, ich kann mit deinem Script über den API Abfrage die Daten rauslesen, er findet mein deviceID und Type und Token. Etwas angepasst die Parameter Bezeichnungen, nutzte aber der API Nr 3 von deinem Script. So lesen geht super, will jetzt versuchen den setpoint zu ändern und brauchte hier ein Tips wie, scheint ja sehr identisch zu sein.
Hier ein SS von 066:
Und hier von App selber:
Wie gesagt wir kann ich ein Kommando zurück senden?
Danke Per
PS:
Hier die Ergebnisse aus dem auslesen in IoBroker:
und hier bis jetzt der script modifiziert:
// Midas Poolheizung
// v0.0.10c
// Changelog:
// 0.0.10: Weitere Parameter für andere Gerätetypen hinzugefügt
// 0.0.8: Testweise Unterstützung von neu registrierten Anlagen
// 0.0.7: Kleinigkeiten überarbeitet
// weitere Modelle hinzugefügt
// 0.0.6: Gültigkeitsprüfung des Zertifikats deaktiviert (Dank an znyde)
// Kompatibilität mit Promo Next Modellen durch generische Product-ID (Dank an znyde)
// 0.0.5: weitere Abfragewerte hinzugefügt (Kompressor- und Ansaugtemperatur)
// 0.0.4: Tokenverfall jetzt 60min nach Skriptstart und nicht zu jeder vollen Stunde (Dank an dering)
// 0.0.3: Datenpunkte beim Start automatisch anlegen (Dank an Andy200877)
// 0.0.2: Token bei jedem Set-Vorgang prüfen und ggf. neu anfordern (Dank an dering)
// ANFANG konfigurierbare Elemente -----
const username = "xxxxxx";
var password = "xxxxxx";
const interval = 30; // Abfrageintervall in Sekunden
const dpRoot = "0_userdata.0.BBWP_PMK_V02"; // Stammordner der Datenpunkte
const apilevel = 3; // 1: AquaTemp-Accounts, die vor v.1.5.8 erstellt wurden
// 2: HiTemp-Accounts
// 3: AquaTemp-Accounts, die mit neueren App-Versionen erstellt wurden
const debugLevel = 0; // 0: keine erweiterten Informationen protokollieren
// 1: Debug-Informationen protokollieren
// ENDE --------------------------------
var cloudURL;
var token = "";
var tokenRefreshTimer;
var device = "";
// ProductIDs:
// Gruppe 1:
// 1132174963097280512: Midas/Poolsana InverPro
const AQUATEMP_POOLSANA = "1132174963097280512";
// Gruppe 2:
// 1442284873216843776:
//const AQUATEMP_OTHER1="1442284873216843776";
const AQUATEMP_OTHER1 = "1245226668902080512";
var product = "";
var reachable = false;
function setupEndpoints() {
if (apilevel == 1) {
cloudURL = "https://cloud.linked-go.com/cloudservice/api";
} else if (apilevel == 2) {
cloudURL = "https://cloud.linked-go.com/cloudservice/api";
} else if (apilevel == 3) {
cloudURL = "https://cloud.linked-go.com:449/crmservice/api";
password = require('crypto').createHash('md5').update(password).digest("hex");
}
printLog("API-Level " + apilevel, 1);
}
function clearValues() {
saveValue("error", true, "boolean");
saveValue("consumption", 0, "number");
saveValue("state", false, "boolean");
}
function saveValue(key, value, sType) {
var dp = dpRoot + "." + key;
if (!existsState(dp)) {
printLog("Schreibe in NEUEN Datenpunkt: " + dp + " - " + value, 1);
createState(dp, value, {
name: key,
type: 'number',
role: 'value'
}, function() {});
} else {
printLog("Schreibe in Datenpunkt: " + dp + " - " + value, 1);
setState(dp, value, true);
}
}
function findCodeVal(result, code) {
//log(code);
printLog("Suche Wert " + code, 1);
for (var i = 0; i < result.length; i++) {
//log(result[i].code);
printLog(result[i].code, 1);
if (result[i].code.indexOf(code) >= 0) {
printLog("Wert gefunden: " + result[i].value, 1);
return result[i].value;
}
}
return "";
}
function createobjects() {
log("erstelle Objekte");
createState(dpRoot + '.ambient', {
read: true,
write: false,
type: "number",
unit: "°C",
role: "value.temperature",
name: "Umgebungstemperatur"
});
createState(dpRoot + '.connection', {
read: true,
write: false,
type: "boolean",
role: "state",
name: "Verbindung",
def: false
});
createState(dpRoot + '.error', {
read: true,
write: false,
type: "boolean",
role: "state",
name: "Fehler",
def: false
});
createState(dpRoot + '.errorCode', {
read: true,
write: false,
type: "string",
name: "Fehlercode",
def: ""
});
createState(dpRoot + '.errorLevel', {
read: true,
write: false,
type: "number",
name: "Fehlerlevel"
});
createState(dpRoot + '.errorMessage', {
read: true,
write: false,
type: "string",
name: "Fehlermeldung",
def: ""
});
createState(dpRoot + '.mode', {
read: true,
write: true,
type: "string",
states: "-1:off;0:cool;1:heat;2:auto",
name: "Modus",
def: ""
});
createState(dpRoot + '.silent', {
read: true,
write: true,
type: "boolean",
role: "state",
name: "Silent",
def: false
});
createState(dpRoot + '.state', {
read: true,
write: false,
type: "boolean",
role: "state",
name: "Status",
def: false
});
createState(dpRoot + '.tempIn', {
read: true,
write: false,
type: "number",
unit: "°C",
role: "value.temperature",
name: "Eingangstemperatur"
});
createState(dpRoot + '.tempOut', {
read: true,
write: false,
type: "number",
unit: "°C",
role: "value.temperature",
name: "Ausgangstemperatur"
});
createState(dpRoot + '.tempSet', {
read: true,
write: true,
type: "number",
unit: "°C",
role: "level.temperature",
name: "Solltemperatur"
});
createState(dpRoot + '.suctionTemp', {
read: true,
write: false,
type: "number",
unit: "°C",
name: "Luftansaugtemperatur"
});
createState(dpRoot + '.coilTemp', {
read: true,
write: false,
type: "number",
unit: "°C",
role: "value.temperature",
name: "Kompressortemperatur"
});
createState(dpRoot + '.hysterieses', {
read: true,
write: false,
type: "number",
unit: "°C",
role: "value.temperature",
name: "Hysterieses InputTemp"
});
createState(dpRoot + '.rawJSON', {
read: true,
write: false,
type: "array",
name: "komplette Rückgabe"
});
}
function updateToken() {
if (token == "") {
printLog("Token Neuanforderung");
var request = require('request');
var options;
if (apilevel < 3) {
options = {
url: cloudURL + '/app/user/login.json',
method: 'POST',
json: {
"user_name": username,
"password": password,
"type": "2"
},
rejectUnauthorized: false
};
} else {
options = {
url: cloudURL + '/app/user/login',
method: 'POST',
json: {
"userName": username,
"password": password,
"type": "2"
},
rejectUnauthorized: false
};
}
/*
console.log("hier 2");
console.log(options);
console.log(JSON.stringify(options));
*/
request(options, function(error, response, body) {
printLog("Login-Antwort: " + JSON.stringify(response));
if (parseInt(body.error_code) == 0) {
if (apilevel < 3) {
token = body.object_result["x-token"];
} else {
token = body.objectResult["x-token"];
}
printLog("Login ok! Token " + token);
updateDeviceID();
} else {
// Login-Fehler
printLog("Login-Fehler in updateToken(): " + response.body);
token = "";
saveValue("connection", false, "boolean");
}
});
} else {
updateDeviceID();
}
}
function updateDeviceID() {
if (token != "") {
var optionsDev;
if (apilevel < 3) {
optionsDev = {
url: cloudURL + '/app/device/deviceList.json',
headers: {
"x-token": token
},
body: {
"product_ids": [
"1132174963097280512",
"1186904563333062656",
"1158905952238313472",
"1245226668902080512", //mein productID
"1442284873216843776",
"1548963836789501952",
]
},
method: 'POST',
json: true,
rejectUnauthorized: false
};
} else {
optionsDev = {
url: cloudURL + '/app/device/deviceList',
headers: {
"x-token": token
},
body: {
"productIds": [
"1132174963097280512",
"1186904563333062656",
"1158905952238313472",
"1245226668902080512", //mein productID
"1442284873216843776",
"1548963836789501952",
]
},
method: 'POST',
json: true,
rejectUnauthorized: false
};
}
var request = require('request');
request(optionsDev, function(error, response, body) {
printLog("DeviceList: " + JSON.stringify(response));
console.log("-------------------------------");
//log(JSON.stringify(body.object_result));
if (parseInt(body.error_code) == 0) {
//token = body.object_result["x-token"];
//log("Login ok! Token " + token);
if (apilevel < 3) {
device = body.object_result[0].device_code;
product = body.object_result[0].product_id;
reachable = (body.object_result[0].device_status == "ONLINE");
} else {
device = body.objectResult[0].deviceCode;
product = body.objectResult[0].productId;
reachable = (body.objectResult[0].deviceStatus == "ONLINE");
console.log("DeviceCode: " + device + ", ProductID: " + product + ", DeviceStatus: " + reachable);
}
printLog("DeviceCode: " + device + ", ProductID: " + product + ", DeviceStatus: " + reachable);
if (reachable) {
saveValue("connection", true, "boolean");
if (device != "") updateDeviceStatus(device);
} else {
// offline
device = "";
saveValue("connection", false, "boolean");
}
} else {
// Login-Fehler
//log("Fehler in updateDeviceID(): " + response.body, "error");
token = "";
device = "";
reachable = false;
saveValue("connection", false, "boolean");
}
});
}
}
function updateDeviceStatus(devicecode) {
if (token != "") {
console.log("updateDeviceStatus " + "token: " + token);
var optionsDev;
if (apilevel < 3) {
optionsDev = {
url: cloudURL + '/app/device/getDeviceStatus.json',
headers: {
"x-token": token
},
json: {
"device_code": devicecode
},
method: 'POST',
rejectUnauthorized: false
};
} else {
optionsDev = {
url: cloudURL + '/app/device/getDeviceStatus',
headers: {
"x-token": token
},
json: {
"deviceCode": devicecode
},
method: 'POST',
rejectUnauthorized: false
};
}
var request = require('request');
request(optionsDev, function(error, response, body) {
printLog("DeviceStatus: " + JSON.stringify(response));
//log(JSON.stringify(body.object_result));
if (parseInt(body.error_code) == 0) {
if (apilevel < 3) {
if (body.object_result["is_fault"] == true) {
// TODO: Fehlerbeschreibung abrufen
//clearValues();
saveValue("error", true, "boolean");
updateDeviceDetails(devicecode);
updateDeviceErrorMsg(devicecode);
} else {
// kein Fehler
saveValue("error", false, "boolean");
saveValue("errorMessage", "", "string");
saveValue("errorCode", "", "string");
saveValue("errorLevel", 0, "number");
updateDeviceDetails(devicecode);
}
} else {
if (body.objectResult["is_fault"] == true) {
// TODO: Fehlerbeschreibung abrufen
//clearValues();
saveValue("error", true, "boolean");
updateDeviceDetails(devicecode);
updateDeviceErrorMsg(devicecode);
} else {
// kein Fehler
saveValue("error", false, "boolean");
saveValue("errorMessage", "", "string");
saveValue("errorCode", "", "string");
saveValue("errorLevel", 0, "number");
updateDeviceDetails(devicecode);
}
}
//token = body.object_result["x-token"];
//log("Login ok! Token " + token);
} else {
// Login-Fehler
//log("Fehler in updateDeviceStatus(): " + response.body, "error");
token = "";
device = "";
saveValue("connection", false, "boolean");
}
});
}
}
function updateDeviceErrorMsg(devicecode) {
if (token != "") {
console.log("updateDeviceErrorMsg " + "token: " + token);
var optionsDev;
if (apilevel < 3) {
optionsDev = {
url: cloudURL + '/app/device/getFaultDataByDeviceCode.json',
headers: {
"x-token": token
},
json: {
"device_code": devicecode
},
method: 'POST',
rejectUnauthorized: false
//headers: {"content-type": "application/json"},
//charset: 'utf8',
//json: true
};
} else {
optionsDev = {
url: cloudURL + '/app/device/getFaultDataByDeviceCode',
headers: {
"x-token": token
},
json: {
"deviceCode": devicecode
},
method: 'POST',
rejectUnauthorized: false
//headers: {"content-type": "application/json"},
//charset: 'utf8',
//json: true
};
}
var request = require('request');
request(optionsDev, function(error, response, body) {
//log(JSON.stringify(response));
//log(JSON.stringify(body.object_result));
if (parseInt(body.error_code) == 0) {
saveValue("error", true, "boolean");
if (apilevel < 3) {
saveValue("errorMessage", body.object_result[0].description, "string");
saveValue("errorCode", body.object_result[0].fault_code, "string");
saveValue("errorLevel", body.object_result[0].error_level, "string");
} else {
saveValue("errorMessage", body.objectResult[0].description, "string");
saveValue("errorCode", body.objectResult[0].fault_code, "string");
saveValue("errorLevel", body.objectResult[0].error_level, "string");
}
} else {
// Login-Fehler
//log("Fehler in updateDeviceErrorMsg(): " + response.body, "error");
token = "";
device = "";
saveValue("connection", false, "boolean");
}
});
}
}
function updateDeviceDetails(devicecode) {
if (token != "") {
console.log("updateDeviceDetails " + "token: " + token);
var optionsDev;
if (apilevel < 3) {
if (product == AQUATEMP_POOLSANA) {
optionsDev = {
url: cloudURL + '/app/device/getDataByCode.json',
headers: {
"x-token": token
},
json: {
"device_code": devicecode,
"protocal_codes": [
"Power",
"Mode",
"Manual-mute",
"T01",
"T02",
"2074",
"2075",
"2076",
"2077",
"H03",
"Set_Temp",
"R08",
"R09",
"R10",
"R11",
"R01",
"R02",
"R03",
"T03",
"1158",
"1159",
"F17",
"H02",
"T04",
"T05",
"T07",
"T14",
"T17"
]
},
method: 'POST',
rejectUnauthorized: false
};
} else if (product == AQUATEMP_OTHER1) {
console.log("----- get values 03----");
optionsDev = {
url: cloudURL + '/app/device/getDataByCode.json',
headers: {
"x-token": token
},
json: {
"device_code": devicecode,
"protocal_codes": [
"Power",
"Mode",
"Manual-mute",
"O01",
"O02",
"O03",
"O04",
"O05",
"O06",
"O07",
"O08",
"O09",
"T01",
"T02",
"T03",
"T04",
"T05",
"T06",
"T10",
"2074",
"2075",
"2076",
"2077",
"H03",
"R01",
"R03",
"R04",
"R05",
"R06",
"R07",
"R08",
"R09",
"R10",
"R12",
"R14",
"R15",
"R17",
"R18",
"R19",
"R20",
"S01",
"S03",
"S04",
"S05",
"S06",
"H01",
"H03",
"H07",
"1158",
"1159"
]
},
method: 'POST',
rejectUnauthorized: false
};
}
} else {
if (product == AQUATEMP_POOLSANA) {
optionsDev = {
url: cloudURL + '/app/device/getDataByCode',
headers: {
"x-token": token
},
json: {
"deviceCode": devicecode,
"protocalCodes": [
"Power",
"Mode",
"Manual-mute",
"T01",
"T02",
"2074",
"2075",
"2076",
"2077",
"H03",
"R08",
"R09",
"R10",
"R11",
"R01",
"R02",
"R03",
"T03",
"1158",
"1159",
"F17",
"H02",
"T04",
"T05",
"T07",
"T14",
"T17"
]
},
method: 'POST',
rejectUnauthorized: false
};
} else if (product == AQUATEMP_OTHER1) {
console.log("---get values ---");
optionsDev = {
url: cloudURL + '/app/device/getDataByCode',
headers: {
"x-token": token
},
json: {
"deviceCode": devicecode,
"protocalCodes": [
"Power",
"Mode",
"Manual-mute",
"O01",
"O02",
"O03",
"O04",
"O05",
"O06",
"O07",
"O08",
"O09",
"T01",
"T02",
"T03",
"T04",
"T05",
"T06",
"T10",
"2074",
"2075",
"2076",
"2077",
"H03",
"Set_Temp",
"R01",
"R03",
"R04",
"R05",
"R06",
"R07",
"R08",
"R09",
"R10",
"R12",
"R14",
"R15",
"R17",
"R18",
"R19",
"R20",
"S01",
"S03",
"S04",
"S05",
"S06",
"H01",
"H03",
"H07",
"1158",
"1159"
]
},
method: 'POST',
rejectUnauthorized: false
};
}
}
var request = require('request');
request(optionsDev, function(error, response, body) {
printLog("DeviceDetails: " + JSON.stringify(response));
//Main Data JSON from request PMK
//console.log("DeviceDetails: " + JSON.stringify(response));
if (parseInt(body.error_code) == 0) {
if (apilevel < 3) {
saveValue("rawJSON", body.object_result, "string");
if (findCodeVal(body.object_result, "Power") == "1") {
if (product == AQUATEMP_POOLSANA) {
// Stromverbrauch T07 x T14 in Watt
saveValue("consumption", parseFloat(findCodeVal(body.objectResult, "T07")) * parseFloat(findCodeVal(body.objectResult, "T14")), "number");
// Luftansaug-Temperatur T01
saveValue("suctionTemp", parseFloat(findCodeVal(body.object_result, "T01")), "number");
// Inlet-Temperatur T02
saveValue("tempIn", parseFloat(findCodeVal(body.object_result, "T02")), "number");
// outlet-Temperatur T03
saveValue("tempOut", parseFloat(findCodeVal(body.object_result, "T03")), "number");
// Coil-Temperatur T04
saveValue("coilTemp", parseFloat(findCodeVal(body.object_result, "T04")), "number");
// Umgebungs-Temperatur T05
saveValue("ambient", parseFloat(findCodeVal(body.object_result, "T05")), "number");
} else if (product == AQUATEMP_OTHER1) {
console.log("---save values 01---");
// Luftansaug-Temperatur T1
saveValue("suctionTemp", parseFloat(findCodeVal(body.object_result, "T05")), "number");
// Inlet-Temperatur T2
saveValue("tempIn", parseFloat(findCodeVal(body.object_result, "T02")), "number");
// outlet-Temperatur T3
saveValue("tempOut", parseFloat(findCodeVal(body.object_result, "T03")), "number");
// Coil-Temperatur T4
saveValue("coilTemp", parseFloat(findCodeVal(body.object_result, "T04")), "number");
// Umgebungs-Temperatur T5
saveValue("ambient", parseFloat(findCodeVal(body.object_result, "T01")), "number");
}
} else {
saveValue("consumption", 0, "number");
saveValue("rotor", 0, "number");
}
// Ziel-Temperatur Set_Temp
//saveValue("tempSet", parseFloat(findCodeVal(body.object_result, "Set_Temp")), "number");
// Ziel-Temperatur anhand Modus
if (findCodeVal(body.object_result, "Mode") == 1) {
// Heiz-Modus (-> R02)
saveValue("tempSet", parseFloat(findCodeVal(body.object_result, "R01")), "number");
} else if (findCodeVal(body.object_result, "Mode") == 0) {
// Kühl-Modus (-> R01)
saveValue("tempSet", parseFloat(findCodeVal(body.object_result, "R01")), "number");
} else if (findCodeVal(body.object_result, "Mode") == 2) {
// Auto-Modus (-> R03)
saveValue("tempSet", parseFloat(findCodeVal(body.object_result, "R01")), "number");
}
// Flüstermodus Manual-mute
if (findCodeVal(body.object_result, "Manual-mute") == "1") {
saveValue("silent", true, "boolean");
} else {
saveValue("silent", false, "boolean");
}
// Zustand Power
if (findCodeVal(body.object_result, "Power") == "1") {
saveValue("state", true, "boolean");
saveValue("mode", findCodeVal(body.object_result, "Mode"), "string");
} else {
saveValue("state", false, "boolean");
saveValue("mode", "-1", "string");
}
saveValue("connection", true, "boolean");
// Durchlauf ENDE
} else {
saveValue("rawJSON", body.objectResult, "string");
if (findCodeVal(body.objectResult, "Power") == "1") {
if (product == AQUATEMP_POOLSANA) {
// Stromverbrauch T07 x T14 in Watt
saveValue("consumption", parseFloat(findCodeVal(body.objectResult, "T07")) * parseFloat(findCodeVal(body.objectResult, "T14")), "number");
// Luftansaug-Temperatur T01
saveValue("suctionTemp", parseFloat(findCodeVal(body.objectResult, "T05")), "number");
// Inlet-Temperatur T02
saveValue("tempIn", parseFloat(findCodeVal(body.objectResult, "T02")), "number");
// outlet-Temperatur T03
saveValue("tempOut", parseFloat(findCodeVal(body.objectResult, "T03")), "number");
// Coil-Temperatur T04
saveValue("coilTemp", parseFloat(findCodeVal(body.objectResult, "T04")), "number");
// Umgebungs-Temperatur T05
saveValue("ambient", parseFloat(findCodeVal(body.objectResult, "T01")), "number");
} else if (product == AQUATEMP_OTHER1) {
console.log("---save values 02---");
// Luftansaug-Temperatur T1
saveValue("suctionTemp", parseFloat(findCodeVal(body.objectResult, "T01")), "number");
// Inlet-Temperatur T2
saveValue("tempIn", parseFloat(findCodeVal(body.objectResult, "T02")), "number");
// outlet-Temperatur T3
saveValue("tempOut", parseFloat(findCodeVal(body.objectResult, "T03")), "number");
// Coil-Temperatur T4
saveValue("coilTemp", parseFloat(findCodeVal(body.objectResult, "T04")), "number");
// Umgebungs-Temperatur T5
saveValue("ambient", parseFloat(findCodeVal(body.objectResult, "T05")), "number");
// Hysterieses R03
saveValue("hysterieses", parseFloat(findCodeVal(body.objectResult, "R03")), "number");
}
} else {
saveValue("consumption", 0, "number");
saveValue("rotor", 0, "number");
}
// Ziel-Temperatur Set_Temp
//saveValue("tempSet", parseFloat(findCodeVal(body.objectResult, "Set_Temp")), "number");
// Ziel-Temperatur anhand Modus
if (findCodeVal(body.objectResult, "Mode") == 1) {
// Heiz-Modus (-> R02)
saveValue("tempSet", parseFloat(findCodeVal(body.objectResult, "R01")), "number");
} else if (findCodeVal(body.objectResult, "Mode") == 0) {
// Kühl-Modus (-> R01)
saveValue("tempSet", parseFloat(findCodeVal(body.objectResult, "R01")), "number");
} else if (findCodeVal(body.objectResult, "Mode") == 2) {
// Auto-Modus (-> R03)
saveValue("tempSet", parseFloat(findCodeVal(body.objectResult, "R01")), "number");
}
// Flüstermodus Manual-mute
if (findCodeVal(body.objectResult, "Manual-mute") == "1") {
saveValue("silent", true, "boolean");
} else {
saveValue("silent", false, "boolean");
}
// Zustand Power
if (findCodeVal(body.objectResult, "Power") == "1") {
saveValue("state", true, "boolean");
saveValue("mode", findCodeVal(body.objectResult, "Mode"), "string");
} else {
saveValue("state", false, "boolean");
saveValue("mode", "-1", "string");
}
saveValue("connection", true, "boolean");
// Durchlauf ENDE
}
} else {
// Login-Fehler
//log("Fehler in updateDeviceDetails(): " + response.body, "error");
token = "";
device = "";
saveValue("connection", false, "boolean");
}
});
}
}
function updateDevicePower(devicecode, power) {
var powerOpt;
var powerMode = 2;
if (power == -1) {
// aus
powerOpt = 0;
powerMode = -1;
} else if (power == 0) {
// an und kühlen
powerOpt = 1;
powerMode = 0;
} else if (power == 1) {
// an und heizen
powerOpt = 1;
powerMode = 1;
} else if (power == 2) {
// an und auto
powerOpt = 1;
powerMode = 2;
} else {
log("ungülter Zustand!");
return;
}
if (token != "") {
var optionsDev;
if (apilevel < 3) {
optionsDev = {
url: cloudURL + '/app/device/control.json',
headers: {
"x-token": token
},
json: {
"param": [{
"device_code": devicecode,
"protocol_code": "Power",
"value": powerOpt
}]
},
method: 'POST',
rejectUnauthorized: false
};
} else {
optionsDev = {
url: cloudURL + '/app/device/control',
headers: {
"x-token": token
},
json: {
"param": [{
"deviceCode": devicecode,
"protocolCode": "Power",
"value": powerOpt
}]
},
method: 'POST',
rejectUnauthorized: false
};
}
var request = require('request');
request(optionsDev, function(error, response, body) {
//log(devicecode);
//log(JSON.stringify(response));
//log(JSON.stringify(body.object_result));
if (parseInt(body.error_code) == 0) {
saveValue("mode", power, "string");
if (power >= 0) updateDeviceMode(device, power);
} else {
log("Zustandsänderung fehlgeschlagen!", "error");
}
});
}
}
function updateDeviceMode(devicecode, mode) {
if (token != "") {
var optionsDev;
if (apilevel < 3) {
optionsDev = {
url: cloudURL + '/app/device/control.json',
headers: {
"x-token": token
},
json: {
"param": [{
"device_code": devicecode,
"protocol_code": "mode",
"value": mode
}]
},
method: 'POST',
rejectUnauthorized: false
//headers: {"content-type": "application/json"},
//charset: 'utf8',
//json: true
};
} else {
optionsDev = {
url: cloudURL + '/app/device/control',
headers: {
"x-token": token
},
json: {
"param": [{
"deviceCode": devicecode,
"protocolCode": "mode",
"value": mode
}]
},
method: 'POST',
rejectUnauthorized: false
//headers: {"content-type": "application/json"},
//charset: 'utf8',
//json: true
};
}
var request = require('request');
request(optionsDev, function(error, response, body) {
//log(devicecode);
//log(JSON.stringify(response));
//log(JSON.stringify(body.object_result));
if (parseInt(body.error_code) == 0) {
saveValue("mode", mode, "string");
} else {
log("Zustandsänderung fehlgeschlagen!", "error");
token = "";
device = "";
saveValue("connection", false, "boolean");
}
});
}
}
function updateDeviceSilent(devicecode, silent) {
var silentMode;
if (silent) {
silentMode = "1";
} else {
silentMode = "0";
}
if (token != "") {
var optionsDev;
if (apilevel < 3) {
optionsDev = {
url: cloudURL + '/app/device/control.json',
headers: {
"x-token": token
},
json: {
"param": [{
"device_code": devicecode,
"protocol_code": "Manual-mute",
"value": silentMode
}]
},
method: 'POST',
rejectUnauthorized: false
//headers: {"content-type": "application/json"},
//charset: 'utf8',
//json: true
};
} else {
optionsDev = {
url: cloudURL + '/app/device/control',
headers: {
"x-token": token
},
json: {
"param": [{
"deviceCode": devicecode,
"protocolCode": "Manual-mute",
"value": silentMode
}]
},
method: 'POST',
rejectUnauthorized: false
//headers: {"content-type": "application/json"},
//charset: 'utf8',
//json: true
};
}
var request = require('request');
request(optionsDev, function(error, response, body) {
//log(devicecode);
//log(JSON.stringify(response));
//log(JSON.stringify(body.object_result));
if (parseInt(body.error_code) == 0) {
saveValue("silent", silent, "boolean");
} else {
log("Zustandsänderung fehlgeschlagen!", "error");
token = "";
device = "";
saveValue("connection", false, "boolean");
}
});
}
}
function updateDeviceSetTemp(devicecode, temperature) {
console.log("-----------------updateDeviceSetTemp 1--------------");
var sTemperature = temperature.toString().replace(",", ".");
console.log(sTemperature);
var sMode = getState(dpRoot + ".mode").val;
console.log(sMode);
if(sMode=="-1") {
//log("Gerät einschalten um Temperatur zu ändern!", 'warn');
return;
} else if(sMode=="0") {
sMode = "R01"; // Kühlen
} else if(sMode=="1") {
sMode = "R01"; // Heizen
} else if(sMode=="2") {
sMode = "R01"; // Auto
}
console.log("updateDeviceSetTemp 1 für Token: " + token);
if(token!="") {
console.log("-----------------updateDeviceSetTemp 2--------------");
var optionsDev;
if(apilevel<3) {
optionsDev = {
url: cloudURL + '/app/device/control.json',
headers: { "x-token": token },
json: {"param":[{ "device_code": devicecode, "protocol_code": "R01","value": sTemperature },{ "device_code": devicecode, "protocol_code": "R02","value": sTemperature },{ "device_code": devicecode, "protocol_code": "R03","value": sTemperature },{ "device_code": devicecode, "protocol_code": "Set_Temp","value": sTemperature }]},
method: 'POST',
rejectUnauthorized: false
//headers: {"content-type": "application/json"},
//charset: 'utf8',
//json: true
};
} else {
console.log("-----------------updateDeviceSetTemp 3--------------");
optionsDev = {
url: cloudURL + '/app/device/control',
headers: { "x-token": token },
json: {"param":[{ "deviceCode": devicecode, "protocolCode": "R01","value": sTemperature },{ "deviceCode": devicecode, "protocolCode": "R01","value": sTemperature },{ "deviceCode": devicecode, "protocolCode": "R01","value": sTemperature },{ "deviceCode": devicecode, "protocolCode": "Set_Temp","value": sTemperature }]},
method: 'POST',
rejectUnauthorized: false
//headers: {"content-type": "application/json"},
//charset: 'utf8',
//json: true
};
}
var request = require('request');
request(optionsDev,function (error, response, body){
//log(devicecode);
console.log("-----------------updateDeviceSetTemp 4--------------");
console.log(JSON.stringify(response));
//log(JSON.stringify(body.object_result));
if(parseInt(body.error_code)==0) {
saveValue("tempSet", temperature, "number");
} else {
log("Zustandsänderung fehlgeschlagen!", "error");
token = "";
device = "";
saveValue("connection", false, "boolean");
//log(JSON.stringify(response));
}
});
}
}
function printLog(sMsg, minLevel = 1) {
if (debugLevel >= minLevel) {
log(sMsg);
}
}
// Beginn des Skripts
setupEndpoints();
createobjects(); // DPs anlegen
updateToken(); // Zugriffstoken erfragen und aktuelle Werte lesen
//console.log("mein token 16.02: "+token);
schedule('*/' + interval + ' * * * * *', function() {
// regelmäßig Token und Zustand abfragen
updateToken();
// gewünschte Änderungen ausführen
if (!getState(dpRoot + ".mode").ack) {
updateDevicePower(device, getState(dpRoot + ".mode").val);
}
if (!getState(dpRoot + ".silent").ack) {
updateDevicePower(device, getState(dpRoot + ".silent").val);
}
});
tokenRefreshTimer = setInterval(function() {
// Token verfällt nach 60min
token = "";
//log("Token nach Intervall verworfen.")
updateToken();
}, 3600000);
//15.02.2024 von mir
/*
var dd = "0C7FExxxxxxxxxx";
console.log("mein token 16.02: "+token);
console.log("---- updateDeviceSetTemp function abrufen PMK ----");
updateDeviceSetTemp(dd, 50.0);
*/
on({
id: dpRoot + ".mode",
change: "ne",
ack: false
}, function(obj) {
updateToken();
updateDevicePower(device, getState(dpRoot + ".mode").val);
});
on({
id: dpRoot + ".silent",
change: "ne",
ack: false
}, function(obj) {
updateToken();
updateDeviceSilent(device, getState(dpRoot + ".silent").val);
});
on({
id: dpRoot + ".tempSet",
change: "ne",
ack: false
}, function(obj) {
updateToken();
updateDeviceSetTemp(device, getState(dpRoot + ".tempSet").val);
});
und wenn ich hier es so abrufe wird wird aber der Token in den function updateDeviceSetTemp token ="" also hat kein token mehr.
//15.02.2024 von mir
/*
var dd = "0C7FExxxxxxxxxx";
console.log("mein token 16.02: "+token);
console.log("---- updateDeviceSetTemp function abrufen PMK ----");
updateDeviceSetTemp(dd, 50.0);
*/