DrHauss / node-red-contrib_BRP069C4

Module for Node-Red to Control ACs via Daikin Cloud
MIT License
3 stars 1 forks source link

"Error: Value can not be set without dataPointPath" #11

Closed Ed1954 closed 2 years ago

Ed1954 commented 2 years ago

Can you please post an example how to set the temperature. It doesn't work with or without the path "/operationModes/heating/setpoints/roomTemperature" it does not work. onOff and Mode can be changed.

bartjanisse commented 2 years ago

here is an export of a function node I use. You could give it a try. You must replace AP12345 with you own (you can find it on your unit). The code could be simplified but it’s a start

[ { "id": "26ef261.17b33da", "type": "function", "z": "a8df0ef0.4807c", "name": "set on/off, temperature and mode", "func": "\nconst rcvMsg = msg.topic.split(\"/\");\n\nconst ssid = rcvMsg[0]; // ssid to identify the airco unit\nconst setGet = rcvMsg[1]; // get or set\nconst dataPoint = rcvMsg[2]; // datapoint i.e. onOffMode, temperatureControl\n\nlet daikinMsg = null;\nlet hasUpdateMsg = null;\nlet payload;\nlet value = msg.payload;\n\n//------topic------------ --payload--\n//DaikinAP12345/set/mode/ cool\n//DaikinAP12345/set/mode/ dry\n//DaikinAP12345/set/power/ OFF\n//DaikinAP12345/set/temperature/ 21.5\n\n//mqtt : heat, cool, auto, dry, fan_only \n//daikin: heating, cooling, auto, dry, fanOnly;\n\nif(setGet == \"get\") {\n return null;\n}\n\nif (dataPoint == \"power\" && value.toLowerCase() == \"off\") {\n payload = {\n \"ssid\": ssid,\n \"managementPoint\": \"climateControl\",\n \"dataPoint\": \"onOffMode\",\n \"value\": value.toLowerCase()\n };\n //return { payload: payload, topic: \"set\" }; \n daikinMsg = { payload: payload, topic: \"set\" }; \n hasUpdateMsg = {payload: 'off', topic: 'DaikinAP12345/state/mode'};\n}\n\nif (dataPoint == \"temperature\"){\n payload = {\n \"ssid\": \"DaikinAP12345\",\n \"managementPoint\": \"climateControl\",\n \"dataPoint\": \"temperatureControl\",\n \"dataPointPath\": \"/operationModes/heating/setpoints/roomTemperature\",\n \"value\": parseFloat(value)\n };\n hasUpdateMsg = {payload: payload.value, topic: 'DaikinAP12345/state/temperature'};\n //return { payload: payload, topic: \"set\" };\n daikinMsg = { payload: payload, topic: \"set\" }; \n}\n\nif (dataPoint == \"mode\"){\n payload = {\n \"ssid\": ssid,\n \"managementPoint\": \"climateControl\",\n \"dataPoint\": \"operationMode\",\n };\n \n if (value == \"heat\") {\n payload[\"value\"] = \"heating\";\n //return { payload: payload, topic: \"set\" };\n daikinMsg = { payload: payload, topic: \"set\" };\n hasUpdateMsg = {payload: 'heat', topic: 'DaikinAP12345/state/mode'};\n }\n if (value == \"cool\") {\n payload[\"value\"] = \"cooling\";\n //return { payload: payload, topic: \"set\" };\n daikinMsg = { payload: payload, topic: \"set\" };\n hasUpdateMsg = {payload: 'cool', topic: 'DaikinAP12345/state/mode'};\n }\n if (value == \"auto\") {\n payload[\"value\"] = \"auto\";\n //return { payload: payload, topic: \"set\" };\n daikinMsg = { payload: payload, topic: \"set\" };\n hasUpdateMsg = {payload: 'auto', topic: 'DaikinAP22345/state/mode'};\n }\n if (value == \"dry\") {\n //payload[\"value\"] = \"dry\";\n //return { payload: payload, topic: \"set\" };\n daikinMsg = { payload: payload, topic: \"set\" };\n hasUpdateMsg = {payload: 'dry', topic: 'DaikinAP12345/state/mode'};\n }\n if (value == \"fan_only\") {\n payload[\"value\"] = \"fanOnly\";\n //return { payload: payload, topic: \"set\" };\n daikinMsg = { payload: payload, topic: \"set\" };\n hasUpdateMsg = {payload: 'fan_only', topic: 'DaikinAP12345/state/mode'};\n }\n}\n\nreturn [daikinMsg, hasUpdateMsg]", "outputs": 2, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 500, "y": 440, "wires": [ [ "55f0e83d.7651b8" ], [ "3071a340.3ff3ac" ] ] } ]

Ed1954 commented 2 years ago

Thank you for the fast answer, I i try to import i get following message. Parse error on line 7: ... = msg.topic.split("/");\n\nconst ssid = -----------------------^ Expecting 'EOF', '}', ':', ',', ']', got 'undefined'

bartjanisse commented 2 years ago

Sorry for that. Could you paste the code below into an empty function node. Remember to replace DaikinAP12345 with you own

const rcvMsg = msg.topic.split("/");

const ssid = rcvMsg[0]; // ssid to identify the airco unit const setGet = rcvMsg[1]; // get or set const dataPoint = rcvMsg[2]; // datapoint i.e. onOffMode, temperatureControl

let daikinMsg = null; let hasUpdateMsg = null; let payload; let value = msg.payload;

//------topic------------ --payload-- //DaikinAP12345/set/mode/ cool //DaikinAP12345/set/mode/ dry //DaikinAP12345/set/power/ OFF //DaikinAP12345/set/temperature/ 21.5

//mqtt : heat, cool, auto, dry, fan_only //daikin: heating, cooling, auto, dry, fanOnly;

if(setGet == "get") { return null; }

if (dataPoint == "power" && value.toLowerCase() == "off") { payload = { "ssid": ssid, "managementPoint": "climateControl", "dataPoint": "onOffMode", "value": value.toLowerCase() }; //return { payload: payload, topic: "set" };
daikinMsg = { payload: payload, topic: "set" };
hasUpdateMsg = {payload: 'off', topic: 'DaikinAP12345/state/mode'}; }

if (dataPoint == "temperature"){ payload = { "ssid": "DaikinAP12345", "managementPoint": "climateControl", "dataPoint": "temperatureControl", "dataPointPath": "/operationModes/heating/setpoints/roomTemperature", "value": parseFloat(value) }; hasUpdateMsg = {payload: payload.value, topic: 'DaikinAP12345/state/temperature'}; //return { payload: payload, topic: "set" }; daikinMsg = { payload: payload, topic: "set" }; }

if (dataPoint == "mode"){ payload = { "ssid": ssid, "managementPoint": "climateControl", "dataPoint": "operationMode", };

if (value == "heat") {
    payload["value"] = "heating";
    //return { payload: payload, topic: "set" };
    daikinMsg = { payload: payload, topic: "set" };
    hasUpdateMsg = {payload: 'heat', topic: 'DaikinAP12345/state/mode'};
}
if (value == "cool") {
    payload["value"] = "cooling";
    //return { payload: payload, topic: "set" };
    daikinMsg = { payload: payload, topic: "set" };
    hasUpdateMsg = {payload: 'cool', topic: 'DaikinAP12345/state/mode'};
}
if (value == "auto") {
    payload["value"] = "auto";
    //return { payload: payload, topic: "set" };
    daikinMsg = { payload: payload, topic: "set" };
    hasUpdateMsg = {payload: 'auto', topic: 'DaikinAP12345/state/mode'};
}
if (value == "dry") {
    //payload["value"] = "dry";
    //return { payload: payload, topic: "set" };
    daikinMsg = { payload: payload, topic: "set" };
    hasUpdateMsg = {payload: 'dry', topic: 'DaikinAP12345/state/mode'};
}
if (value == "fan_only") {
    payload["value"] = "fanOnly";
    //return { payload: payload, topic: "set" };
    daikinMsg = { payload: payload, topic: "set" };
    hasUpdateMsg = {payload: 'fan_only', topic: 'DaikinAP12345/state/mode'};
}

}

return [daikinMsg, hasUpdateMsg]

Ed1954 commented 2 years ago

Thank you very much, works perfect for me.

Mit freundlichen Grüßen

Edmund Korffmann

http://purecontest.de/

http://www.bfgr-gross-rohrheim.de/ http://www.bfgr-gross-rohrheim.de

http://sandmuehle.de/ http://sandmuehle.de/

Von: bartjanisse @.> Gesendet: Mittwoch, 25. Mai 2022 20:00 An: DrHauss/node-red-contrib_BRP069C4 @.> Cc: Ed1954 @.>; Author @.> Betreff: Re: [DrHauss/node-red-contrib_BRP069C4] "Error: Value can not be set without dataPointPath" (Issue #11)

Sorry for that. Could you paste the code below into an empty function node. Remember to replace DaikinAP12345 with you own

const rcvMsg = msg.topic.split("/");

const ssid = rcvMsg[0]; // ssid to identify the airco unit const setGet = rcvMsg[1]; // get or set const dataPoint = rcvMsg[2]; // datapoint i.e. onOffMode, temperatureControl

let daikinMsg = null; let hasUpdateMsg = null; let payload; let value = msg.payload;

//------topic------------ --payload-- //DaikinAP12345/set/mode/ cool //DaikinAP12345/set/mode/ dry //DaikinAP12345/set/power/ OFF //DaikinAP12345/set/temperature/ 21.5

//mqtt : heat, cool, auto, dry, fan_only //daikin: heating, cooling, auto, dry, fanOnly;

if(setGet == "get") { return null; }

if (dataPoint == "power" && value.toLowerCase() == "off") { payload = { "ssid": ssid, "managementPoint": "climateControl", "dataPoint": "onOffMode", "value": value.toLowerCase() }; //return { payload: payload, topic: "set" }; daikinMsg = { payload: payload, topic: "set" }; hasUpdateMsg = {payload: 'off', topic: 'DaikinAP12345/state/mode'}; }

if (dataPoint == "temperature"){ payload = { "ssid": "DaikinAP12345", "managementPoint": "climateControl", "dataPoint": "temperatureControl", "dataPointPath": "/operationModes/heating/setpoints/roomTemperature", "value": parseFloat(value) }; hasUpdateMsg = {payload: payload.value, topic: 'DaikinAP12345/state/temperature'}; //return { payload: payload, topic: "set" }; daikinMsg = { payload: payload, topic: "set" }; }

if (dataPoint == "mode"){ payload = { "ssid": ssid, "managementPoint": "climateControl", "dataPoint": "operationMode", };

if (value == "heat") { payload["value"] = "heating"; //return { payload: payload, topic: "set" }; daikinMsg = { payload: payload, topic: "set" }; hasUpdateMsg = {payload: 'heat', topic: 'DaikinAP12345/state/mode'}; } if (value == "cool") { payload["value"] = "cooling"; //return { payload: payload, topic: "set" }; daikinMsg = { payload: payload, topic: "set" }; hasUpdateMsg = {payload: 'cool', topic: 'DaikinAP12345/state/mode'}; } if (value == "auto") { payload["value"] = "auto"; //return { payload: payload, topic: "set" }; daikinMsg = { payload: payload, topic: "set" }; hasUpdateMsg = {payload: 'auto', topic: 'DaikinAP12345/state/mode'}; } if (value == "dry") { //payload["value"] = "dry"; //return { payload: payload, topic: "set" }; daikinMsg = { payload: payload, topic: "set" }; hasUpdateMsg = {payload: 'dry', topic: 'DaikinAP12345/state/mode'}; } if (value == "fan_only") { payload["value"] = "fanOnly"; //return { payload: payload, topic: "set" }; daikinMsg = { payload: payload, topic: "set" }; hasUpdateMsg = {payload: 'fan_only', topic: 'DaikinAP12345/state/mode'}; }

}

return [daikinMsg, hasUpdateMsg]

— Reply to this email directly, view it on GitHub https://github.com/DrHauss/node-red-contrib_BRP069C4/issues/11#issuecomment-1137652262 , or unsubscribe https://github.com/notifications/unsubscribe-auth/ARHTBNIYV5FXXRS75ZXG5N3VLZTD3ANCNFSM5W2R4ROQ . You are receiving this because you authored the thread. https://github.com/notifications/beacon/ARHTBNMA4AOGIONOCKQITFTVLZTD3A5CNFSM5W2R4RO2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOIPHTEJQ.gif Message ID: @. @.> >