A sincere thank you to @fredrike and everyone else who has contributed toward getting the SkyFi (BRP15A61) integration working
I’ve been running some very spaghetti-like node-red to automate my Daikin SkyFi system for a few years, and am now working to convert this to Home Assistant.
The most useful reference for SkiFi commands that I have found is this one; https://github.com/pabloNZ/DaikinSkyFiNZ/blob/826ad0f82e6c768bfe23bf695bcaeac85754a138/SkyFi%20http.txt , which will refer to below. I have found a few issues with this integration as follows:
-
On these systems, the “auto” fan mode is in addition to the fan speed, not an alturnate to the fan speed (lines 19 to 32 of the link refers). In my node-red spaghetti when I send power on or off (/set.cgi?pass=XXXXX&p=1 or 0), the fan auto setting is retained at the previous state. When I use this integration to power off and then power on, fan auto is always set off. I notice that when my air con is running at “MED/AUTO” the reported state on the States page is “fan_mode: Medium”, which isn’t completely right. Fan auto state is idenitfyable from the “fanflags” attribute from the /ac.cgi or /set.cgi response.
-
Only the first two of my three zones have been recognised (lines 72 to 85). The output of my /zones.cgi?pass=XXXXX is “nz=3&zone1=Lounge&zone2=Guest%20Room&zone3=Spare%20Room”, but a switch has not been created for the last zone. I’m not sure if there is a way to refresh the zone detection?
-
The zone switches always show “off”, even with the zone on. When I toggle the zone switch on, it reverts to off within a few seconds. The log details are as follows:
Logger: homeassistant.core
Source: deps/lib/python3.8/site-packages/pydaikin/daikin_base.py:157
First occurred: 7:49:24 PM (1 occurrences)
Last logged: 7:49:24 PM
Error executing service: <ServiceCall climate.set_hvac_mode (c:a86ffc4b785d4a089aa7852247e4f22e): entity_id=['climate.daikin_ac'], hvac_mode=heat>
Traceback (most recent call last):
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/homeassistant/core.py", line 1269, in catch_exceptions
await coro_or_task
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/homeassistant/core.py", line 1288, in _execute_service
await handler.func(service_call)
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/homeassistant/helpers/entity_component.py", line 212, in handle_service
await self.hass.helpers.service.entity_service_call(
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/homeassistant/helpers/service.py", line 453, in entity_service_call
future.result() # pop exception if have
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/homeassistant/helpers/entity.py", line 597, in async_request_call
await coro
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/homeassistant/helpers/service.py", line 484, in _handle_entity_call
await result
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/homeassistant/components/daikin/climate.py", line 192, in async_set_hvac_mode
await self._set({ATTR_HVAC_MODE: hvac_mode})
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/homeassistant/components/daikin/climate.py", line 138, in _set
await self._api.device.set(values)
File "/mnt/dietpi_userdata/homeassistant/deps/lib/python3.8/site-packages/pydaikin/daikin_skyfi.py", line 141, in set
await self.update_status([query_c])
File "/mnt/dietpi_userdata/homeassistant/deps/lib/python3.8/site-packages/pydaikin/daikin_base.py", line 168, in update_status
self.values.update(await self._get_resource(resource))
File "/mnt/dietpi_userdata/homeassistant/deps/lib/python3.8/site-packages/pydaikin/daikin_base.py", line 144, in _get_resource
return await self._run_get_resource(resource)
File "/mnt/dietpi_userdata/homeassistant/deps/lib/python3.8/site-packages/pydaikin/daikin_skyfi.py", line 99, in _run_get_resource
return await super()._run_get_resource(resource)
File "/mnt/dietpi_userdata/homeassistant/deps/lib/python3.8/site-packages/pydaikin/daikin_base.py", line 157, in _run_get_resource
return self.parse_response(await resp.text())
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/aiohttp/client_reqrep.py", line 1009, in text
await self.read()
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/aiohttp/client_reqrep.py", line 973, in read
self._body = await self.content.read()
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/aiohttp/streams.py", line 358, in read
block = await self.readany()
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/aiohttp/streams.py", line 380, in readany
await self._wait('readany')
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/aiohttp/streams.py", line 296, in _wait
await waiter
File "/home/homeassistant/.pyenv/versions/3.8.0/lib/python3.8/site-packages/aiohttp/helpers.py", line 586, in __exit__
raise asyncio.TimeoutError from None
asyncio.exceptions.TimeoutError
- My logs are filled with updates failing or taking too long. I understand the connectivity of these units is flakey despite a decent signal strength, indeed a lot of my node-red spaghetti involves catching errors or re-sending if the state fails to change. In my experimentation I found the polling interval sweet-spot to be 20 seconds; more frequently and the device gets overloaded, less frequently and it seems to go to sleep. It definately cannot queue commands.
I’m very new to Home Assistant, so will not be surprised if there is something I have missed at my end. Now that I have this up and running, I would be pleased to do what I can to help test and troubleshoot to get this integration working as best we can.