Daikin Skyzone component

Hi all,

I’ve been working about 8 months on this and it’s finally time to release this beast.

Below is a link to the custom_component which support Daikin Skyzone.
Note: This very different to the Daikin SkyFi component.

Supported Skyzone controllers: BRC230TZ4, BRC230TZ8, BRC24TZ4 and BRC24TZ8
Supported Daikin Models: Any FDYQ & FDYQN unit fitted with a Skyzone controller (Single or 3 phase)

Drop it into your custom_components folder and just simply add the ‘skyzone:’ tag into your config and done.
Full discovery supported. It will add in the climate module, temperature sensors and zones.

I’ll update the documentation over the next few days to with some of the features, but pretty much it’s all there.

Here my setup.

https://github.com/BenNeumeister/daikinSkyzone

I’ve already created a pypi package so it installs the API in the background nicely.
Incase you want a peek at the API see here;
https://github.com/BenNeumeister/daikinPyZone

There probably aren’t alot of other users out there with this system, but this is what got me into the whole HA thing as the factory control tablet is really really limited.

Cool things I can do now;

  • Multiple temperature zones
  • Usual cool HA stuff with temps etc.
  • Ditch clunky APP and also get rid of the daikin server for remote access.

So yeah, hit me up if you find any bugs, or have any suggestions, but I tried to do as much as possible with the API I managed to reverse engineer :slight_smile:

configuration.yaml

99% of users all you will need is;

skyzone:

The other 1%;

skyzone:
  name: 'Daikin Climate Control' (optional) 
  password: 1234 (optional) 
  host: 192.168.1.101 (optional) 
  scan_interval: 60 (optional) 
  debuglevel: 2 (optional) 
  pollextsensors: 0 (optional) 

name: Give the Climate instance a specific name for HA/Google Home/Alexa. Default is ‘Daikin Skyzone’

password: Adapter password as configured in the Daikin Tablet. API will show an error if this is wrong or needed.

host: Set the Daikin AP IP address if you want to bypass discovery. Might save 2-3 seconds during init

scan_interval: Set how often the API is polled. 60 seconds is default. I wouldn’t go any lower than 30seconds as you risk much overlapping. Any higher and you risk loosing refrigerant temp data, especially when it goes into de-ice or a lubrication cycle.

debuglevel:

  • 0 - Disabled (default)
  • 1 - See information updated as it comes in and polling flags
  • 2 - See raw info received from unit. Only really useful if somethings not working right.
    For debugging, you will need to configure the logging component and monitor for ‘debug’.

pollextsensor:

  • 0 - Disabled (default)
  • 1 - Enabled. Will trigger the API to switch between external sensors every 3minutes instead of showing ‘Unknown’. Has some side-affects as the Daikin unit itself will use this value for ~3mins. So if your zones have very different temperatures, don’t use it.
1 Like

Thanks for the work you have put into this and sharing it; not having much luck with getting it working tho.

2018-06-21 21:30:49 ERROR (MainThread) [homeassistant.setup] Error during setup of component skyzone
File “/home/homeassistant/.homeassistant/custom_components/skyzone.py”, line 60, in setup
skyzoneAPI = skyZone_setup(hass,name, ipAddress, debugLvl, pollExtSns)
File “/home/homeassistant/.homeassistant/custom_components/skyzone.py”, line 97, in skyZone_setup
if (daikinSkyzone.discover_skyzoneController() == 0):
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/init.py”, line 81, in discover_skyzoneController

Err, right… well that’s disappointing.

Looks like it failed in the discovery phase.
Based on the line where it broke, it found the IP and failed when attempting to query the controller.
Are you running piHole or anything like that?

Come to think of it, what are you running this on? RPI3 or something else?

Hi Ben,

No Pi-Hole s/ware running, just trying to think myself what it could be. Running on Ubuntu 18 with HA in a Virtual Environment. Discovering other devices has not been a problem.

Looking at the Daikin system I currently have, I would have thought it would work with model numbers listed. No hard wired controller, just a wall mounted WiFi system. The indoor units Wifi module is in AP mode.

FDYQT140LBV1 - Outdoor Unit (Premium Plus)
FDYQT140 - Indoor Unit
RZQS140AV1 - Outdoor Unit
BRC24TZ8 -LCD Display

cheers

Tried hardcoding the ip address an now get this error;

Error during setup of component skyzone
Traceback (most recent call last):
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/daikinProcess.py”, line 697, in SendReceiveFrame
TCPsocket.connect((self._IpAdd, PORT))
ConnectionRefusedError: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/srv/homeassistant/lib/python3.6/site-packages/homeassistant/setup.py”, line 146, in _async_setup_component
component.setup, hass, processed_config) # type: ignore
File “/usr/lib/python3.6/concurrent/futures/thread.py”, line 56, in run
result = self.fn(*self.args, **self.kwargs)
File “/home/homeassistant/.homeassistant/custom_components/skyzone.py”, line 60, in setup
skyzoneAPI = skyZone_setup(hass, name, ipAddress, debugLvl, pollExtSns)
File “/home/homeassistant/.homeassistant/custom_components/skyzone.py”, line 97, in skyZone_setup
if (daikinSkyzone.discover_skyzoneController() == 0):
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/init.py”, line 81, in discover_skyzoneController
SendReceiveFrame(self, “InitialInfo”)
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/daikinProcess.py”, line 716, in SendReceiveFrame
_LOGGER.error(“Could not send TCP Request: %s”, +error.winerror )
AttributeError: ‘ConnectionRefusedError’ object has no attribute ‘winerror’

Ok, not sure it’s going to work in AP mode as then the HA instance and the Daikin interface are on separate networks. They all need to be on the same network for it all to resolve.

Can you disable your secondary Ethernet interface?
I’ve had similar issues on systems with multiple interfaces where python wigs out as it doesn’t know which interface to use.
I’ll do some research and see if there’s a way to sort that out.
Thought I fixed that winerror thing, guess not :-/

Apologies, might have given you a bum steer on the mode used. So the Daikin Access point attached to the indoor unit inside the ceiling space is connected to my House WiFi, so the wifi controller on the wall connects via my house wifi, not a direct connection to the Daikin AP. Hope I am making sense? So this should work as they are all talking on the same LAN

The top two lights are on suggesting it is not in AP mode.images

Ok, yeah, if its on your wifi, and your phone app works, then we are all good.
So yeah, disable your secondary ethernet and it ‘should’ work ;p
I really hope you have a secondary ethernet… :slight_smile:

Phone app works and discovers instantly (just tested), secondary ethernet? :slight_smile:

Is ubuntu VE blocking any ports?
It will need access to port 80

There is no web hosting component installed on the HA/Ubuntu box, so it wont have a port 80 open, there are no ports being blocked on the HA box.

Just so we are on the same page - is it trying to discover the Daikin AP or the Wall Controller? that connection error was when I hard coded the ip address to that of the Android wall controller. Sorry for the lame questions, but sometimes they need to be asked :slight_smile:

I can telnet on port 80 to the Daikin AP from the Ubuntu box

With the hard coded ip address of the Daikin AP added

2018-06-22 08:34:14 ERROR (MainThread) [homeassistant.setup] Error during setup of component skyzone
Traceback (most recent call last):
File “/srv/homeassistant/lib/python3.6/site-packages/homeassistant/setup.py”, line 146, in _async_setup_component
component.setup, hass, processed_config) # type: ignore
File “/usr/lib/python3.6/concurrent/futures/thread.py”, line 56, in run
result = self.fn(*self.args, **self.kwargs)
File “/home/homeassistant/.homeassistant/custom_components/skyzone.py”, line 60, in setup
skyzoneAPI = skyZone_setup(hass, name, ipAddress, debugLvl, pollExtSns)
File “/home/homeassistant/.homeassistant/custom_components/skyzone.py”, line 97, in skyZone_setup
if (daikinSkyzone.discover_skyzoneController() == 0):
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/init.py”, line 81, in discover_skyzoneController
SendReceiveFrame(self, “InitialInfo”)
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/daikinProcess.py”, line 713, in SendReceiveFrame
ProcessReceivedPacket(self,data)
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/daikinProcess.py”, line 724, in ProcessReceivedPacket
if(incomingPacket[0:13] == ‘ret=OK,frame=’): DecodeFrame(self, incomingPacket[13: len(incomingPacket)] )
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/daikinProcess.py”, line 745, in DecodeFrame
infosize = int(decodedMsg[14])
IndexError: index out of range
2

OK, wow… very interseting.
Can you enable debuglvl 3 and email me the dumps.

not sure if I have set the debug level right on the skyzone.py file in the root on the CC folder?
DAIKIN_SKYZONE = ‘skyzone_climate’
DOMAIN = ‘skyzone’
SCAN_INTERVAL = timedelta(seconds=60)

CONF_DEFAULTNAME = ‘Daikin Skyzone’
CONF_DEFAULTHOST = ‘0.0.0.0’
CONF_DEBUGLEVEL = ‘debuglevel’
CONF_POLLEXTERNALSENS = ‘pollextsensors’
DEFAULT_DEBUGLEVEL = 3
RETRY_LIMIT = 5

If so, all that is coming back is

2018-06-22 10:16:30 ERROR (MainThread) [homeassistant.setup] Error during setup of component skyzone
Traceback (most recent call last):
File “/srv/homeassistant/lib/python3.6/site-packages/homeassistant/setup.py”, line 146, in _async_setup_component
component.setup, hass, processed_config) # type: ignore
File “/usr/lib/python3.6/concurrent/futures/thread.py”, line 56, in run
result = self.fn(*self.args, **self.kwargs)
File “/home/homeassistant/.homeassistant/custom_components/skyzone.py”, line 60, in setup
skyzoneAPI = skyZone_setup(hass, name, ipAddress, debugLvl, pollExtSns)
File “/home/homeassistant/.homeassistant/custom_components/skyzone.py”, line 97, in skyZone_setup
if (daikinSkyzone.discover_skyzoneController() == 0):
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/init.py”, line 81, in discover_skyzoneController
SendReceiveFrame(self, “InitialInfo”)
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/daikinProcess.py”, line 713, in SendReceiveFrame
ProcessReceivedPacket(self,data)
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/daikinProcess.py”, line 724, in ProcessReceivedPacket
if(incomingPacket[0:13] == ‘ret=OK,frame=’): DecodeFrame(self, incomingPacket[13: len(incomingPacket)] )
File “/srv/homeassistant/lib/python3.6/site-packages/daikinPyZone/daikinProcess.py”, line 745, in DecodeFrame
infosize = int(decodedMsg[14])
IndexError: index out of range

You can do from the configuration.xml rather than the .py file.
You will need to enabled the logger too

debug set for “homeassistant.components.skyzone: debug” see what comes back

Just had a thought, have you got the remote access enabled? Thinking the port access might change depending if your using that. I’ll disable mine, see what happens.