NEWS
[Javascript] Midas (Aquatemp) Poolheizung
-
@europer Bin mir nicht sicher, was Du erreichen willst. Geht es Dir nur darum, die Temperatur einmalig auf 54°C (??) zu setzen?
-
@europer Bin mir nicht sicher, was Du erreichen willst. Geht es Dir nur darum, die Temperatur einmalig auf 54°C (??) zu setzen?
@oxident wie gesagt ich wĂŒrde erst nur den setpoint selber aus einem Logic/Automatisierung von HA oder IoBroker setzen wollen (zb zu nieder Akkuzustand, teuere Tibber Preise, wennig PV Ertrag des Tages, Urlaub den Setpoint runter setzten, genau fĂŒr "normale" Tage, gute Tage, extra thermische Energie speichern oder Legionella). Deshalb meine Frage wie ich in den Script hier zurĂŒck ein Commando sende so dass ich den setpoint Ă€ndern kann.
Danke und schöne GrĂŒĂe aus Norwegen
Per -
@oxident wie gesagt ich wĂŒrde erst nur den setpoint selber aus einem Logic/Automatisierung von HA oder IoBroker setzen wollen (zb zu nieder Akkuzustand, teuere Tibber Preise, wennig PV Ertrag des Tages, Urlaub den Setpoint runter setzten, genau fĂŒr "normale" Tage, gute Tage, extra thermische Energie speichern oder Legionella). Deshalb meine Frage wie ich in den Script hier zurĂŒck ein Commando sende so dass ich den setpoint Ă€ndern kann.
Danke und schöne GrĂŒĂe aus Norwegen
Per@europer Sorry dass ich jetzt nochmal so blöd nachfrage ... aber bist Du sicher, dass Deine BWWP ĂŒber Aquatemp gesteuert wird? Meiner Meinung nach ist Aquatemp nur fĂŒr Poolheizungen gemacht worden und Du scheinst eine WĂ€rmepumpe fĂŒr Warmwasser im Haus zu benutzen.
Ich glaube, Du verwechselst Aquatemp und Aquaplus. Sorry :-(
-
@europer Sorry dass ich jetzt nochmal so blöd nachfrage ... aber bist Du sicher, dass Deine BWWP ĂŒber Aquatemp gesteuert wird? Meiner Meinung nach ist Aquatemp nur fĂŒr Poolheizungen gemacht worden und Du scheinst eine WĂ€rmepumpe fĂŒr Warmwasser im Haus zu benutzen.
Ich glaube, Du verwechselst Aquatemp und Aquaplus. Sorry :-(
@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 PerPS:
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); */ -
@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 PerPS:
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); */@europer Okay, abgefahren, dass Krone hier diese Art von Controller benutzt!
Also auf den ersten Blick sieht es leider so aus, als wĂŒrde der Server die Anforderung einfach abweisen. Der Token wird vom Skript automatisch gelöscht, wenn eine Fehlermeldung kommt.
Du könntest mal testweise die RĂŒckgabe vom Server anzeigen lassen. In meinem Skript ist das in der NĂ€he der Zeile 1000 (also ganz am Ende der updateDeviceSetTemp-Funktion). Dort die log-Zeile wieder aktivieren:
} else { log("ZustandsÀnderung fehlgeschlagen!", "error"); token = ""; device = ""; saveValue("connection", false, "boolean"); log(JSON.stringify(response)); } -
@europer Okay, abgefahren, dass Krone hier diese Art von Controller benutzt!
Also auf den ersten Blick sieht es leider so aus, als wĂŒrde der Server die Anforderung einfach abweisen. Der Token wird vom Skript automatisch gelöscht, wenn eine Fehlermeldung kommt.
Du könntest mal testweise die RĂŒckgabe vom Server anzeigen lassen. In meinem Skript ist das in der NĂ€he der Zeile 1000 (also ganz am Ende der updateDeviceSetTemp-Funktion). Dort die log-Zeile wieder aktivieren:
} else { log("ZustandsÀnderung fehlgeschlagen!", "error"); token = ""; device = ""; saveValue("connection", false, "boolean"); log(JSON.stringify(response)); } -
@oxident Frage, kann man mit dem Script der Setpoint Àndern? Und wie wÀre die Abfrage? Lass uns sagen 50 Grad? Oder kann man nur Werte ablesen?
@europer Klar kannst Du das. Einfach den DP TempSet Àndern. Das Skript macht dann den Rest. Ich empfehle aber, nicht direkt in dieses Skript hier etwas einzubauen sondern lieber ein extra Skript anzulegen.
Aber wie gesagt, fĂŒr eine BrauchwasserwĂ€rmepumpe habe ich es noch nie getestet...
-
@europer Klar kannst Du das. Einfach den DP TempSet Àndern. Das Skript macht dann den Rest. Ich empfehle aber, nicht direkt in dieses Skript hier etwas einzubauen sondern lieber ein extra Skript anzulegen.
Aber wie gesagt, fĂŒr eine BrauchwasserwĂ€rmepumpe habe ich es noch nie getestet...
@oxident danke fĂŒr dein raschen RĂŒckmeldung aber darf ich Fragen um eine einfaches Beispiel wie so ein call wĂ€re? Soll ich ĂŒber den Script oder ich nutze meistens node red nur den setpoint variablen zu einen anderen Wert setzten? Hier in Screenshots sieht man mein setpoint auf 55, soll ich den zb Ă€ndern auf sagen wir 56, wird der Script es auf 56 als comando zurĂŒck an GerĂ€t senden?
Danke und grĂŒĂe aus Norwegen
-
@oxident danke fĂŒr dein raschen RĂŒckmeldung aber darf ich Fragen um eine einfaches Beispiel wie so ein call wĂ€re? Soll ich ĂŒber den Script oder ich nutze meistens node red nur den setpoint variablen zu einen anderen Wert setzten? Hier in Screenshots sieht man mein setpoint auf 55, soll ich den zb Ă€ndern auf sagen wir 56, wird der Script es auf 56 als comando zurĂŒck an GerĂ€t senden?
Danke und grĂŒĂe aus Norwegen
@europer Genau, ich wĂŒrde empfehlen, als erstes zu testen, ob mein Skript ĂŒberhaupt mit Deiner WĂ€rmepumpe funktioniert. Setze dafĂŒr einfach den Datenpunkt "tempSet" z. B. auf 56° und warte ein paar Minuten.
PrĂŒfe dann, ob Deine WĂ€rmepumpe den Wert ĂŒbernommen hat. Wenn ja, dann können wir weitermachen. Wenn nein, dann mĂŒssen wir das Problem erstmal lösen ;-)
-
@europer Genau, ich wĂŒrde empfehlen, als erstes zu testen, ob mein Skript ĂŒberhaupt mit Deiner WĂ€rmepumpe funktioniert. Setze dafĂŒr einfach den Datenpunkt "tempSet" z. B. auf 56° und warte ein paar Minuten.
PrĂŒfe dann, ob Deine WĂ€rmepumpe den Wert ĂŒbernommen hat. Wenn ja, dann können wir weitermachen. Wenn nein, dann mĂŒssen wir das Problem erstmal lösen ;-)
-
@europer Genau, ich wĂŒrde empfehlen, als erstes zu testen, ob mein Skript ĂŒberhaupt mit Deiner WĂ€rmepumpe funktioniert. Setze dafĂŒr einfach den Datenpunkt "tempSet" z. B. auf 56° und warte ein paar Minuten.
PrĂŒfe dann, ob Deine WĂ€rmepumpe den Wert ĂŒbernommen hat. Wenn ja, dann können wir weitermachen. Wenn nein, dann mĂŒssen wir das Problem erstmal lösen ;-)
@oxident ich habe diesen Teil verschiedene Variationen benutz, da ich ja nur den R01 (Setpoint) Àndern will getestet.
Teilweise das ganze mit R02 und R02 und Set_Temp. Bis jetzt mit verschiedene Kombinationen, nur R01 Teil oder nur Set_Temp Teil aber noch keine Reaktion in der App was auf 55 bleibt. Ich habe immer einen anderen Wert genommen, zb. 53. Die Klammer /* */ aber ich immer aufgepasst das am Ende einen JSON/Array die Kommas richtig gesetzt geworden sind Programmtechnisch.der Wert habe ich aber hier direkte geÀndert (in den Fall war das 54 Grad):

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": "R02","value": sTemperature }, { "deviceCode": devicecode, "protocolCode": "R03","value": sTemperature }, { "deviceCode": devicecode, "protocolCode": "Set_Temp","value": sTemperature}*/ ]}, method: 'POST', rejectUnauthorized: false //headers: {"content-type": "application/json"}, //charset: 'utf8', //json: true }; } -
@oxident ich habe diesen Teil verschiedene Variationen benutz, da ich ja nur den R01 (Setpoint) Àndern will getestet.
Teilweise das ganze mit R02 und R02 und Set_Temp. Bis jetzt mit verschiedene Kombinationen, nur R01 Teil oder nur Set_Temp Teil aber noch keine Reaktion in der App was auf 55 bleibt. Ich habe immer einen anderen Wert genommen, zb. 53. Die Klammer /* */ aber ich immer aufgepasst das am Ende einen JSON/Array die Kommas richtig gesetzt geworden sind Programmtechnisch.der Wert habe ich aber hier direkte geÀndert (in den Fall war das 54 Grad):

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": "R02","value": sTemperature }, { "deviceCode": devicecode, "protocolCode": "R03","value": sTemperature }, { "deviceCode": devicecode, "protocolCode": "Set_Temp","value": sTemperature}*/ ]}, method: 'POST', rejectUnauthorized: false //headers: {"content-type": "application/json"}, //charset: 'utf8', //json: true }; } -
@europer Hmm, sieht nicht gut aus.
Hast Du denn auch mal versucht, im Skript nichts zu verÀndern und nur den Datenpunkt auf 53° zu stellen?
-
@europer Hmm, sieht nicht gut aus.
Hast Du denn auch mal versucht, im Skript nichts zu verÀndern und nur den Datenpunkt auf 53° zu stellen?
@oxident ja, hab jetzt Original Scrip, nur meine Parameter fĂŒr die Abfrage ist etwas anders weil die ja bei jeden etwas anders sind. Hier die RAW JSON RĂŒckgabe Informationen. Vielleicht hilft die fĂŒr die Kommando?:
[{ "value": "1", "code": "Power" }, { "value": "2", "code": "Mode" }, { "value": "0", "code": "Manual-mute" }, { "value": "0", "code": "O01" }, { "value": "0", "code": "O02" }, { "value": "0", "code": "O03" }, { "value": "0", "code": "O04" }, { "value": "0", "code": "O05" }, { "value": "0", "code": "O06" }, { "value": "100", "code": "O07" }, { "value": "34", "code": "O08" }, { "value": "0", "code": "O09" }, { "value": "21.5", "code": "T01" }, { "value": "36.5", "code": "T02" }, { "value": "52.0", "code": "T03" }, { "value": "4.0", "code": "T04" }, { "value": "6.0", "code": "T05" }, { "value": "57.5", "code": "T06" }, { "value": "52.0", "code": "T10" }, { "value": "0", "code": "2074" }, { "value": "0", "code": "2075" }, { "value": "0", "code": "2076" }, { "value": "0", "code": "2077" }, { "value": "0", "code": "H03" }, { "value": "0", "code": "Set_Temp" }, { "value": "55.0", "code": "R01" }, { "value": "7.5", "code": "R03" }, { "value": "0", "code": "R04" }, { "value": "55.0", "code": "R05" }, { "value": "200", "code": "R06" }, { "value": "0", "code": "R07" }, { "value": "-5.0", "code": "R08" }, { "value": "5.0", "code": "R09" }, { "value": "25.0", "code": "R10" }, { "value": "-15.0", "code": "R12" }, { "value": "45.0", "code": "R14" }, { "value": "78.0", "code": "R15" }, { "value": "0", "code": "R17" }, { "value": "1.0", "code": "R18" }, { "value": "65.0", "code": "R19" }, { "value": "55.0", "code": "R20" }, { "value": "0", "code": "S01" }, { "value": "0", "code": "S03" }, { "value": "0", "code": "S04" }, { "value": "0", "code": "S05" }, { "value": "0", "code": "S06" }, { "value": "1", "code": "H01" }, { "value": "0", "code": "H03" }, { "value": "0", "code": "H07" }, { "value": "23205", "code": "1158" }, { "value": "0", "code": "1159" }] -
@oxident ja, hab jetzt Original Scrip, nur meine Parameter fĂŒr die Abfrage ist etwas anders weil die ja bei jeden etwas anders sind. Hier die RAW JSON RĂŒckgabe Informationen. Vielleicht hilft die fĂŒr die Kommando?:
[{ "value": "1", "code": "Power" }, { "value": "2", "code": "Mode" }, { "value": "0", "code": "Manual-mute" }, { "value": "0", "code": "O01" }, { "value": "0", "code": "O02" }, { "value": "0", "code": "O03" }, { "value": "0", "code": "O04" }, { "value": "0", "code": "O05" }, { "value": "0", "code": "O06" }, { "value": "100", "code": "O07" }, { "value": "34", "code": "O08" }, { "value": "0", "code": "O09" }, { "value": "21.5", "code": "T01" }, { "value": "36.5", "code": "T02" }, { "value": "52.0", "code": "T03" }, { "value": "4.0", "code": "T04" }, { "value": "6.0", "code": "T05" }, { "value": "57.5", "code": "T06" }, { "value": "52.0", "code": "T10" }, { "value": "0", "code": "2074" }, { "value": "0", "code": "2075" }, { "value": "0", "code": "2076" }, { "value": "0", "code": "2077" }, { "value": "0", "code": "H03" }, { "value": "0", "code": "Set_Temp" }, { "value": "55.0", "code": "R01" }, { "value": "7.5", "code": "R03" }, { "value": "0", "code": "R04" }, { "value": "55.0", "code": "R05" }, { "value": "200", "code": "R06" }, { "value": "0", "code": "R07" }, { "value": "-5.0", "code": "R08" }, { "value": "5.0", "code": "R09" }, { "value": "25.0", "code": "R10" }, { "value": "-15.0", "code": "R12" }, { "value": "45.0", "code": "R14" }, { "value": "78.0", "code": "R15" }, { "value": "0", "code": "R17" }, { "value": "1.0", "code": "R18" }, { "value": "65.0", "code": "R19" }, { "value": "55.0", "code": "R20" }, { "value": "0", "code": "S01" }, { "value": "0", "code": "S03" }, { "value": "0", "code": "S04" }, { "value": "0", "code": "S05" }, { "value": "0", "code": "S06" }, { "value": "1", "code": "H01" }, { "value": "0", "code": "H03" }, { "value": "0", "code": "H07" }, { "value": "23205", "code": "1158" }, { "value": "0", "code": "1159" }] -
Mal eine Frage in die Runde: Hat jemand mal geschaut, ob man die Parameter in der App (Code ist 022) tunen kann?
Mich wundert z.B. dass O01 (Compressor) bei mir immer Off ist. Hat das eventuell mit den Intervall-Settings zu tun?
Auf der anderen Seite habe ich negative Suction-Temps bei 15°C AuĂentemperatur.
Oder anders gefragt, welche Werte werden Euch im Betrieb angezeigt?
-
Hi zusammen,
leider meckert Javascript bei neueren Versionen wegen der Verwendung von request:
request package is deprecated - please use httpGet (or a stable lib like axios) instead!
Einfaches Ersetzen von request durch httpGet sowie herausnehmen der Variable bringt leider nichts, das Script stellt dann komplett den Dienst ein. Wie mĂŒsste es denn in neu aussehen?
Viele GrĂŒĂe
-
Hi zusammen,
leider meckert Javascript bei neueren Versionen wegen der Verwendung von request:
request package is deprecated - please use httpGet (or a stable lib like axios) instead!
Einfaches Ersetzen von request durch httpGet sowie herausnehmen der Variable bringt leider nichts, das Script stellt dann komplett den Dienst ein. Wie mĂŒsste es denn in neu aussehen?
Viele GrĂŒĂe
@hs911 Da kann ich derzeit leider noch nicht helfen. Das Skript ist ziemlich angewachsen und die Verwendung der anderen Module wĂŒrde einen kompletten Rewrite bedeuten.
Aber vielleicht möchte ja jemand helfen (eventuell sogar beim Umbacken in einen Adapter)?
-
@hs911 Naja, erlaubt ist sie ja noch. Die Warnungen nerven halt ;-)
Aber frĂŒher oder spĂ€ter schaffen wir auch die Migration auf Axios. Man muss halt ganz penibel darauf achten, dass das Skript exakt die App "emuliert" und da braucht es bei Axios (oder httpGet/put) noch ein paar Kniffe.
Bis dahin aber gerne einfach weiter nutzen.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen BeitrĂ€ge zu scrollen? Wenn du dich fĂŒr ein Konto anmeldest, kommst du immer genau dorthin zurĂŒck, wo du zuvor warst, und kannst dich ĂŒber neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und BeitrĂ€ge positiv bewerten, um anderen Community-Mitgliedern deine WertschĂ€tzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden đ
Registrieren Anmelden