Daikin SKYFi BRP15A61

Gentlemen,
a couple months ago my request to Daikin for a SKYFi BRP15A61 supply failed since that product is for Australian marketplace only (or simply not sold in Europe).
Therefore I am asking to this community if OpenHab (with proper item-link-channel) can emulate SKYFi BRP15A61. The resulted scenario should allow for connecting to OpenHAB LAN i/f (OpenHab includes an http server. Correct?) from the WAN (via ADSL) and control the Daikin FBQ35D (indoor unit within a HVAC ducted architecture) from remotely (I will be more than happy even if only basic commands will be available).
According to the documentation I have found the BRP15A61 can be connected to P1-P2 (FBQ35D indoor unit) terminals in parallel to the BRC1E53A wired remote controller and they can coexist in a master-slave configuration (the BRC1E53A as master and BRP15A61 as slave). Therefore I seek for OpenHab (equipped with the proper item-link-channel, I hope they exist) integration where it communicates to FBQ35D to switch it on/off. I imagine the operation mode and the setpoints are defined by BRC1E53A (still in place and configured as master).

Hope to hear form you.
Thank you in advance!
Best rgrds, s.

I would love this too. I’m desperately after a Skyfi BRP15A61 but I can’t find one anywhere. A substitute would be most welcome.

Im in australia and have a Daikin Skyfi connected to my ducted AC.
The app is pretty bad, but i can use a plugin for Vera , or my NodeRed flow to control it. - this works ok.

If you are not able to source one, i could probably source and ship to you if you pay in advance inc shipping…

Thanks Greg for your contribution!
Of course it is not a problem to pay in advance. I’m used to do that and I fully trust you! :slight_smile:
That said I have two doubts:
1- if you buy and then ship to Europe, who will provide the guarantee?
I am concerned the post sale support would be gone :frowning:
Could you give me a ball park estimation of the cost of the Skyfi + postage? (at this stage do not worry to be precise)
2- is Daikin production diversified for European and Australian market? I have to control a FBQ35D indoor unit. Is it similar to Australian models, so the Skyfi can be compatible?

That said, to be honest, my favourite solution is to find a device that emulate the Skyfi so I can avoid to buy it.
Thank you again!

Hi Sergio,
As for ball park costs - looking here about $460 + $30-40 shipping. - so say $500AUD
https://www.penair.com.au/product/daikin-skyfi-controller/

I dont know if it would be compatible with your unit sorry.

Many years ago i had a different Ducted daikin System that i wanted to automate. I moved from this home before i could do it, but my idea was to buy a new wall controller, identical to the one i already owned, and connect an arduino to - detect if the “Power Led” was lit - thus advising the unit is running, and a relay to “press” the ON/OFF button on the controller . I would have used the MySensors system to integrate into Vera/OpenHab.
This would only have allowed me to Turn on/off the system and tell me if its running or not…very basic, but probably enough for most needs. Its not frequent that i turn from Heat to Cool for example.

So depending on what your needs are you can probably go this route for $50-60…

@greg Do you mind sharing your node-red flow? I’m in full agreement that the app is pants, but my minimal experience with bash/php is making control of mine somewhat flakey. Do you have your flow integrated with openHAB ?

Sure -
You will see a Daikin SkyFi Settings- edit this node to add your IP address and the device password.
Note that whist this works , it will compete with the reall Daikin Wall controller and overide what is set there…so basically the state saving logic is flawed…one day i will fix - or if you do, pls let me know what you did :wink:

[{"id":"23205fa0.e13ff","type":"inject","z":"6451fbc.982f204","name":" Query Daikin every 15secs","topic":"","payload":"","payloadType":"date","repeat":"15","crontab":"","once":false,"x":180,"y":1000,"wires":[["68f974f9.44d8ac"]]},{"id":"ecee03da.34eae","type":"function","z":"6451fbc.982f204","name":"Zones Status","func":"if (msg.payload >= 0) {\n   //flow.set('active_zones', msg.payload);\n   if (msg.payload & 128) {\n       var z1 = '1';\n   } else { \n       var z1 = '0';\n   }\n   if (msg.payload & 64) {\n       var z2 = '1';\n   } else { \n       var z2 = '0';\n   }\n    if (msg.payload & 32) {\n       var z3 = '1';\n    } else { \n       var z3 = '0';\n   }\n   \n   if (msg.payload & 16) {\n        var z4 = '1';\n   } else { \n        var z4 = '0';\n   }\n   \n   if (msg.payload & 8) {\n       var z5 = '1';\n   } else { \n       var z5 = '0';\n   }\n   \n   if (msg.payload & 4) {\n       var z6 = '1';\n   } else { \n       var z6 = '0';\n   }\n   \n   if (msg.payload & 2) {\n       var z7 = '1';\n   } else { \n       var z7 = '0';\n   }\n   \n   if (msg.payload & 1) {\n       var z8 = '1';\n   } else { \n       var z8 = '0';\n   }\n\nflow.set('cur_z1', z1);\nflow.set('cur_z2', z2);\nflow.set('cur_z3', z3);\nflow.set('cur_z4', z4);\nflow.set('cur_z5', z5);\n\n\nvar z1 = {payload: z1};\nvar z2 = {payload: z2};\nvar z3 = {payload: z3};\nvar z4 = {payload: z4};\nvar z5 = {payload: z5};\n\nreturn [z1,z2,z3,z4,z5]\n\n\n}","outputs":"5","noerr":0,"x":875.4285888671875,"y":924.0714721679688,"wires":[["acfbc1c3.89fcc"],["61bbc576.56b76c"],["efc940ba.2cc34"],["45051f64.e36fd"],["9fe3219a.ce14e"]]},{"id":"acfbc1c3.89fcc","type":"mqtt out","z":"6451fbc.982f204","name":"Zone1 Status to MQTT","topic":"daikin/zones/status/z1","qos":"0","retain":"false","broker":"3622e190.c9dd1e","x":1112.7857208251953,"y":837.5357799530029,"wires":[]},{"id":"d2b4bbdd.5d4358","type":"mqtt in","z":"6451fbc.982f204","name":"Subscribe to daikin mqtt","topic":"daikin/#","qos":"2","broker":"3622e190.c9dd1e","x":164.33326721191406,"y":204.33342933654785,"wires":[["d09a85aa.86ae98"]]},{"id":"d09a85aa.86ae98","type":"switch","z":"6451fbc.982f204","name":"Seperate System And Zones","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"daikin/system/cmd","vt":"str"},{"t":"cont","v":"daikin/zones/cmd","vt":"str"}],"checkall":"true","outputs":2,"x":412.333251953125,"y":203.619140625,"wires":[["a5412fbd.230eb","3b85a4df.50a25c"],["ae4dc7cc.26abb8","9a08219b.04243"]]},{"id":"a5412fbd.230eb","type":"debug","z":"6451fbc.982f204","name":"","active":false,"console":"false","complete":"false","x":624.3332672119141,"y":119.7191104888916,"wires":[]},{"id":"ae4dc7cc.26abb8","type":"debug","z":"6451fbc.982f204","name":"","active":false,"console":"false","complete":"false","x":649.3332672119141,"y":322.7191104888916,"wires":[]},{"id":"3b85a4df.50a25c","type":"function","z":"6451fbc.982f204","name":"NewValsFromMQ","func":"//NewValsFromMQ\n\n//This function reads MQTT and stores the updates into node variables.\n\n\n\nif (msg.topic == \"daikin/system/cmd/p\") { \n        flow.set('new_p', msg.payload);\n }\nif (msg.topic == \"daikin/system/cmd/t\") { \n        flow.set('new_t', msg.payload);\n }\nif (msg.topic == \"daikin/system/cmd/f\") { \n        flow.set('new_f', msg.payload);\n }\nif (msg.topic == \"daikin/system/cmd/m\") { \n        flow.set('new_m', msg.payload);\n }\n\n \n\n//var test_p = flow.get('new_p') ;\n//var test_t = flow.get('new_t') ;\n\n//msg.topic = \"new_p=\"+test_p + \"new_t=\"+test_t ;\n\nreturn msg;\n","outputs":1,"noerr":0,"x":700.333251953125,"y":187.619140625,"wires":[["894f9b16.9166a8"]]},{"id":"45b62974.d6e738","type":"function","z":"6451fbc.982f204","name":"CompareAndSend","func":"\n//This function checks the current and old values and sends Daikin\n//command if there is any changes\n\nvar secret = flow.get('secret'); // Get the SkyFi password from the Config node\nvar ipaddress = flow.get('ipaddress') //Get the SkyFi IPadddress\nvar needtosend = 0;\n\n//These have been set in \"ExtractCurrentValues\"\nvar cur_p = flow.get('cur_p') ;\nvar cur_t = flow.get('cur_t') ;\nvar cur_f = flow.get('cur_f') ;\nvar cur_m = flow.get('cur_m') ;\n\n//These have been set in \"NewValsFromMQ\"\nvar new_p = flow.get('new_p') || cur_p;\nvar new_t = flow.get('new_t') || cur_t;\nvar new_f = flow.get('new_f') || cur_f;\nvar new_m = flow.get('new_m') || cur_m;\n\n//These have been set in here..\nvar old_p = flow.get('old_p') || cur_p;\nvar old_t = flow.get('old_t') || cur_t;\nvar old_f = flow.get('old_f') || cur_f;\nvar old_m = flow.get('old_m') || cur_m;\n\n\n\n\nif (new_p != cur_p) { // a mqtt value is different than the current daikin state.\n//if (new_p != old_p ) { ///should i add OR !=cur_p for if the controller changes??\n    node.log(\"P has changed \" +old_p + \" \" +new_p + \" \" +cur_p );\n    flow.set('old_p', new_p);\n    needtosend = 1;\n}\nif (new_t != old_t ) {\n    node.log(\"T has changed \" +new_t + \" \" +cur_t );\n    flow.set('old_t', new_t);\n    needtosend = 1;\n}\nif (new_f != old_f ) {\n    node.log(\"F has changed \" +new_f + \" \" +cur_f );\n    flow.set('old_f', new_f);\n    needtosend = 1;\n    \n}\nif (new_m != old_m ) {\n    node.log(\"M has changed \" +new_m + \" \" +cur_m );\n    flow.set('old_m', new_m);\n    needtosend = 1;\n    \n}\n\n\n//send the message if its changed\nif (needtosend == 1) {\n    needtosend = 0 ;\n    msg.payload =\"http://\"+ ipaddress +\":2000/set.cgi?pass=\" + secret +\"&p=\"+new_p +\"&t=\"+new_t  +\"&f=\"+new_f +\"&m=\"+new_m ;\n    return msg;\n\n    \n}\n\n","outputs":1,"noerr":0,"x":488.99993896484375,"y":1147.202392578125,"wires":[["7a9774b2.a5534c","b1630ca1.53f0e"]]},{"id":"5a829029.f5b55","type":"inject","z":"6451fbc.982f204","name":"Check any MQTT VAR changed","topic":"","payload":"","payloadType":"date","repeat":"2","crontab":"","once":true,"x":184.99993896484375,"y":1203.666748046875,"wires":[["45b62974.d6e738","7e6c372c.5eec18"]]},{"id":"7a9774b2.a5534c","type":"debug","z":"6451fbc.982f204","name":"","active":false,"console":"false","complete":"payload","x":730.9999389648438,"y":1147.052490234375,"wires":[]},{"id":"894f9b16.9166a8","type":"debug","z":"6451fbc.982f204","name":"","active":false,"console":"false","complete":"topic","x":1044.9999389648438,"y":223.666748046875,"wires":[]},{"id":"b1630ca1.53f0e","type":"http request","z":"6451fbc.982f204","name":"Post to Daikin","method":"GET","ret":"txt","url":"{{{payload}}}","tls":"","x":734.5833129882812,"y":1078.5,"wires":[["4d6de34c.839e2c","a54c9e09.4e573"]]},{"id":"4d6de34c.839e2c","type":"debug","z":"6451fbc.982f204","name":"Daikin Response","active":false,"console":"false","complete":"payload","x":987.9998168945312,"y":1078.46337890625,"wires":[]},{"id":"cf10d7d4.07f7c8","type":"catch","z":"6451fbc.982f204","name":"DaikinErrors","scope":["4d6de34c.839e2c","b1630ca1.53f0e"],"x":147.33324432373047,"y":1460.0000114440918,"wires":[["c495a278.39754"]]},{"id":"c495a278.39754","type":"debug","z":"6451fbc.982f204","name":"","active":false,"console":"false","complete":"false","x":373.99989318847656,"y":1460.6666927337646,"wires":[]},{"id":"9a08219b.04243","type":"function","z":"6451fbc.982f204","name":"NewZoneValsFromMQ","func":"//NewValsFromMQ\n\n//This function reads MQTT and stores the updates into node variables.\n\n\n\nif (msg.topic == \"daikin/zones/cmd/z1\") { \n        flow.set('new_z1', msg.payload);\n }\nif (msg.topic == \"daikin/zones/cmd/z2\") { \n        flow.set('new_z2', msg.payload);\n }\nif (msg.topic == \"daikin/zones/cmd/z3\") { \n        flow.set('new_z3', msg.payload);\n }\nif (msg.topic == \"daikin/zones/cmd/z4\") { \n        flow.set('new_z4', msg.payload);\n }\nif (msg.topic == \"daikin/zones/cmd/z5\") { \n        flow.set('new_z5', msg.payload);\n}\n \n \nvar new_z1 = flow.get('new_z1')\nvar new_z2 = flow.get('new_z2')\nvar new_z3 = flow.get('new_z3')\nvar new_z4 = flow.get('new_z4')\nvar new_z5 = flow.get('new_z5')\n\n\nmsg.topic = \"MQTT_z1=\"+new_z1 +\"MQTT_z2=\"+new_z2 +\"MQTT_z3=\"+new_z3 +\"MQTT_z4=\"+new_z4 +\"MQTT_z5=\"+new_z5;\n\nreturn msg;\n","outputs":1,"noerr":0,"x":722.333251953125,"y":237.33343505859375,"wires":[["894f9b16.9166a8"]]},{"id":"7e6c372c.5eec18","type":"function","z":"6451fbc.982f204","name":"ZoneCompareAndSend","func":"\n//This function checks the current and old values and sends Daikin\n//command if there is any changes\n\nvar secret = flow.get('secret'); // Get the SkyFi password from the Config node\nvar ipaddress = flow.get('ipaddress') //Get the SkyFi IPadddress\n\nvar needtosend = 0;\n\n//These have been set in \"ExtractCurrentValues\"\nvar cur_z1 = flow.get('cur_z1') ;\nvar cur_z2 = flow.get('cur_z2') ;\nvar cur_z3 = flow.get('cur_z3') ;\nvar cur_z4 = flow.get('cur_z4') ;\nvar cur_z5 = flow.get('cur_z5') ;\n\n\n//this has been read from mqtt\nvar new_z1 = flow.get('new_z1') || cur_z1;\nvar new_z2 = flow.get('new_z2') || cur_z2;\nvar new_z3 = flow.get('new_z3') || cur_z3;\nvar new_z4 = flow.get('new_z4') || cur_z4;\nvar new_z5 = flow.get('new_z5') || cur_z5;\n\n\n//These have been set in here..\n//var old_z1 = flow.get('old_z1') || cur_z1;\n//var old_z2 = flow.get('old_z2') || cur_z2;\n//var old_z3 = flow.get('old_z3') || cur_z3;\n//var old_z4 = flow.get('old_z4') || cur_z4;\n//var old_z5 = flow.get('old_z5') || cur_z5;\n\nif (new_z1 != cur_z1) {\n//if (new_z1 != old_z1) {\n        needtosend = 1;\n        msg.payload = \"http://\"+ ipaddress +\":2000/setzone.cgi?pass=\" + secret +\"&z=1&s=\"+new_z1;\n//        flow.set('old_z1', new_z1);\n}\n\nif (new_z2 != cur_z2) {\n        needtosend = 1;\n        msg.payload = \"http://\"+ ipaddress +\":2000/setzone.cgi?pass=\" + secret +\"&z=2&s=\"+new_z2;\n        //flow.set('old_z2', new_z2);\n}\nif (new_z3 != cur_z3) {\n        needtosend = 1;\n        msg.payload = \"http://\"+ ipaddress +\":2000/setzone.cgi?pass=\" + secret +\"&z=3&s=\"+new_z3;\n        //flow.set('old_z3', new_z3);\n}\nif (new_z4 != cur_z4) {\n        needtosend = 1;\n        msg.payload = \"http://\"+ ipaddress +\":2000/setzone.cgi?pass=\" + secret +\"&z=4&s=\"+new_z4;\n        //flow.set('old_z4', new_z4);\n}\nif (new_z5 != cur_z5) {\n        needtosend = 1;\n        msg.payload = \"http://\"+ ipaddress +\":2000/setzone.cgi?pass=\" + secret +\"&z=5&s=\"+new_z5;\n        //flow.set('old_z5', new_z5);\n}\n    \nif (needtosend == 1){\n    needtosend = 0 ;\n    return msg; \n    \n}\n    \n\n\n\n\n","outputs":1,"noerr":0,"x":497.833251953125,"y":1234.2701416015625,"wires":[["2997256b.63b6ba","b1630ca1.53f0e"]]},{"id":"2997256b.63b6ba","type":"debug","z":"6451fbc.982f204","name":"","active":false,"console":"false","complete":"payload","x":750.5556030273438,"y":1233.2222900390625,"wires":[]},{"id":"a54c9e09.4e573","type":"function","z":"6451fbc.982f204","name":"ExtractCurrentStatus","func":"//  0           1       2           3       4           5       6          7        8       9        10    11          12              13      14       15   16     17         18            \n//opmode=0&units=.&settemp=22.0&fanspeed=1&fanflags=1&acmode=9&tonact=0&toffact=0&prog=0&time=15:08&day=6&roomtemp=30&outsidetemp=28&louvre=0&zone=168&flt=0&test=0&errcode=&sensors=1\n\n\nif (msg.payload.includes('Error')){ // check for any Error message and ignore.\n   return [ null ];\n} else {\n    //Get current values from controller.\n    var opmode = parseInt(msg.payload.split('opmode=')[1].split(\"&\")[0]);\n    var settemp = parseInt(msg.payload.split('settemp=')[1].split(\"&\")[0]);\n    var fanspeed = parseInt(msg.payload.split('fanspeed=')[1].split(\"&\")[0]);\n    var acmode = parseInt(msg.payload.split('acmode=')[1].split(\"&\")[0]);\n    var roomtemp = parseInt(msg.payload.split('roomtemp=')[1].split(\"&\")[0]);\n    var outtemp = parseInt(msg.payload.split('outsidetemp=')[1].split(\"&\")[0]);\n    var zone = parseInt(msg.payload.split('zone=')[1].split(\"&\")[0]);\n \n\n    var data1 = [opmode,settemp,fanspeed,acmode,roomtemp,outtemp];\n    var zoneval = {payload: zone};\n\n    // use the data from the controller to set/initialise the stores\n    flow.set('cur_p', opmode);\n    flow.set('cur_t', settemp);\n    flow.set('cur_f', fanspeed);\n    flow.set('cur_m', acmode);\n    flow.set('cur_rmt', roomtemp);\n    flow.set('cur_out', outtemp);\n  \n    var opmode = {payload: opmode};\n    var settemp = {payload: settemp};\n    var fanspeed = {payload: fanspeed};\n    var acmode = {payload: acmode};\n    var roomtemp = {payload: roomtemp};\n    var outtemp = {payload: outtemp};\n  \n    \nreturn [opmode,settemp,fanspeed,acmode,roomtemp,outtemp,zoneval];\n//   return [ msg, null ];\n}\n\n","outputs":"7","noerr":0,"x":633.6666259765625,"y":672.3333129882812,"wires":[["4762511.51c87b","2b8e2c94.7fa2b4"],["ee1f69a.c2eb898"],["ebc03a43.083778"],["6f6c853.e76497c"],["62edef76.d7169"],["83e59633.6b5778"],["ecee03da.34eae"]]},{"id":"4762511.51c87b","type":"mqtt out","z":"6451fbc.982f204","name":"Power Status To MQTT","topic":"daikin/system/status/power","qos":"2","retain":"false","broker":"3622e190.c9dd1e","x":1104.500015258789,"y":558.0000114440918,"wires":[]},{"id":"ee1f69a.c2eb898","type":"mqtt out","z":"6451fbc.982f204","name":"SetTemp Status To MQTT","topic":"daikin/system/status/settemp","qos":"2","retain":"false","broker":"3622e190.c9dd1e","x":1112.500015258789,"y":599.0000114440918,"wires":[]},{"id":"ebc03a43.083778","type":"mqtt out","z":"6451fbc.982f204","name":"Fanspeed Status To MQTT","topic":"daikin/system/status/fanspeed","qos":"2","retain":"false","broker":"3622e190.c9dd1e","x":1115.500015258789,"y":641.0000114440918,"wires":[]},{"id":"6f6c853.e76497c","type":"mqtt out","z":"6451fbc.982f204","name":"ACMode Status To MQTT","topic":"daikin/system/status/acmode","qos":"2","retain":"false","broker":"3622e190.c9dd1e","x":1104.500015258789,"y":678.0000114440918,"wires":[]},{"id":"62edef76.d7169","type":"mqtt out","z":"6451fbc.982f204","name":"RoomTemp Status To MQTT","topic":"daikin/system/status/roomtemp","qos":"2","retain":"false","broker":"3622e190.c9dd1e","x":1122.500015258789,"y":715.0000114440918,"wires":[]},{"id":"83e59633.6b5778","type":"mqtt out","z":"6451fbc.982f204","name":"Outside Temp Status To MQTT","topic":"daikin/system/status/outtemp","qos":"2","retain":"false","broker":"3622e190.c9dd1e","x":1132.500015258789,"y":750.0000114440918,"wires":[]},{"id":"61bbc576.56b76c","type":"mqtt out","z":"6451fbc.982f204","name":"Zone2 Status to MQTT","topic":"daikin/zones/status/z2","qos":"0","retain":"false","broker":"3622e190.c9dd1e","x":1112.500015258789,"y":883.2500743865967,"wires":[]},{"id":"efc940ba.2cc34","type":"mqtt out","z":"6451fbc.982f204","name":"Zone3 Status to MQTT","topic":"daikin/zones/status/z3","qos":"0","retain":"false","broker":"3622e190.c9dd1e","x":1117.500015258789,"y":923.2500743865967,"wires":[]},{"id":"45051f64.e36fd","type":"mqtt out","z":"6451fbc.982f204","name":"Zone4 Status to MQTT","topic":"daikin/zones/status/z4","qos":"0","retain":"false","broker":"3622e190.c9dd1e","x":1116.500015258789,"y":960.2500743865967,"wires":[]},{"id":"9fe3219a.ce14e","type":"mqtt out","z":"6451fbc.982f204","name":"Zone5 Status to MQTT","topic":"daikin/zones/status/z5","qos":"0","retain":"false","broker":"3622e190.c9dd1e","x":1109.500015258789,"y":1000.2500743865967,"wires":[]},{"id":"9764fa87.023308","type":"config","z":"6451fbc.982f204","name":"Daikin SkyFi Settings","properties":[{"p":"ipaddress","pt":"flow","to":"192.168.0.100","tot":"str"},{"p":"secret","pt":"flow","to":"12345","tot":"str"}],"active":true,"x":199.99993896484375,"y":82.00008138020837,"wires":[]},{"id":"68f974f9.44d8ac","type":"function","z":"6451fbc.982f204","name":"BuildSkyFI Request","func":"\n//This function checks the current and old values and sends Daikin\n//command if there is any changes\n\nvar secret = flow.get('secret'); // Get the SkyFi password from the Config node\nvar ipaddress = flow.get('ipaddress') //Get the SkyFi IPadddress\n\nmsg.payload =\"http://\"+ ipaddress +\":2000/ac.cgi?pass=\" + secret;\nreturn msg;\n\n    \n\n\n","outputs":1,"noerr":0,"x":473.49993896484375,"y":1000.666748046875,"wires":[["b1630ca1.53f0e"]]},{"id":"2b8e2c94.7fa2b4","type":"debug","z":"6451fbc.982f204","name":"PowerState","active":false,"console":"false","complete":"payload","x":934.9999389648438,"y":443.666748046875,"wires":[]},{"id":"3622e190.c9dd1e","type":"mqtt-broker","broker":"localhost","port":"1883","clientid":"","usetls":false,"verifyservercert":true,"compatmode":true,"keepalive":15,"cleansession":true,"willQos":"0","birthQos":"0"}]

Thanks. Looks like I need to spend some quality tie with node-red heh.

The difficult part I found with my script/s was GETing the Daikin state was hit or miss. It really didn’t like having more than one http command sent at a time, or within a window of about 5-10s. This meant that if one script was sending requests to turn up the temp, and OH was requesting another script to update the states all at the same time then it could get confused and sit dormant until the next state request.

Doing one wasn’t too hard. Doing both (as you know) gets a bit trickier.

@Sergio @Larry_Lenderson - You guys will probably really interested in this:

Actually thats a Daikin to KNX “adaptor”, but that company produces soem daikin to wifi interfaces that may do the trick

1 Like