Daikin BRP072C42 WIFI custom component

Now in 0.110
Support for the BRP072C42 Daikin component is now available in Home Assistant core 0.110. Once the controller has been added to your WIFI network add to Home Assistant using the normal method providing the IP of the controller and Key from the sticker on the WIFI module. Leave the password blank.

Old custom_component detail
I have a couple of Daikin Heat Pumps installed which use the BRP072C42 WIFI controller, initially I thought this was supported by Home Assistant but it looks like there are some subtle differences between the BRP072A42 and the BRP072C42 which prevent it from working with the standard Daikin component mainly around a new authentication system and the use of https.

I have commited my changes as a custom_component for Home Assistant on my github here:

Note this is designed to be merged back to the the existing Daikin component so currently it will override the original, if you are using the original as well it will require some small changes to detect http vs https (assuming the older versions don’t work with https).

Steps to install

  1. Download the custom_component/daikin directory and place it into your custom_component folder
  2. Grab the 13-digit KEY from the sticker of the controller (Lists SSID, KEY, MAC and S/N)
  3. Register the hard coded UUID with the controllers using that key (each Controller has a unique key but can use the same UUID)
curl --insecure -H "X-Daikin-uuid: d53b108a0e5e4fb5ab94a343b7d4b74a" --head "https://[IP]/common/register_terminal?key=[KEY]"

eg. using a key of 0103056789012 and the IP 192.168.1.20

curl --insecure -H "X-Daikin-uuid: d53b108a0e5e4fb5ab94a343b7d4b74a" --head "https://192.168.1.20/common/register_terminal?key=0103056789012"

You should see output similar to this:

HTTP/1.0 200 OK
Content-Length: 6
Content-Type: text/plain

(if you have the wrong KEY you will get 403 HTTP_FORBIDDEN instead)

  1. Restart home-assistant and the climate devices should now show up (See Configuration -> Integrations), if not you may need to add:

Please let me know if this works or not.

TODO
These are a little out of my home-assistant knowledge at this time, suggestions welcome.

  • Generate and store the UUID, using a hard coded one could be a security issue
  • During discovery (config_flow) obtain the key from the user and then run the register_terminal automatically
  • Obtain and store the self signed cert with the code to validate the SSL requests instead of ignoring SSL issues

Original post:
I have recently had a couple of Daikin Heat Pumps installed which use the BRP072C42 WIFI controller, initially I thought this was supported by Home Assistant but it looks like there are some subtle differences between the BRP072A42 and the BRP072C42 which prevent it from working with the standard Daikin component.

I have been looking at how to get this controller working however it requires a slight modification to the Home Assistant component code as well as pydaikin. I also can only test against my controllers so I would like someone who has a similar unit or more knowledge in this space to review what I have found in case I have made some incorrect assumptions.

But to break down what I have found to work:

  • The controller operates on https rather than http and uses a Daikin signed certificate (ie. self signed, although I suspect they ship the CA cert with the Daikin Mobile Controller app for Android because the app wont talk to my apache server), attempting to connect via http gives a Connection Refused.
  • When requesting the https end points in a browser you are given a 403 error, however when emulating a controller with a response to the DAIKIN_UDP/common/basic_info command the app connected to http and sends a header of X-Daikin-uuid with what appears to be an md5, I suspect this is a unique device ID which is granted access after initially authenticating with the SSID and Key as the same ID lets me access any controller and I get the standard 200 Daikin responses, however changing this ID returns the 403. This is not something I have added as my ID works, however the simple way to get this at the moment would be to open the app and emulate a response to the DAIKIN_UDP/common/basic_info command so that it calls back to the local http server

So the change I needed to make to pydaikin was this (I have kept secret a secret in case it is a unique identifier):

--- daikin.orig/pydaikin/appliance.py   2019-05-23 19:01:41.000000000 +1200
+++ daikin.new/pydaikin/appliance.py    2019-07-18 22:55:57.000000000 +1200
@@ -242,7 +242,7 @@
         if self._airbase:
             resource = 'skyfi/%s' % resource
         async with self.session.get(
-                'http://%s/%s' % (self.ip, resource)) as resp:
+                'https://%s/%s' % (self.ip, resource), headers={"X-Daikin-uuid": "*secret*"}, ssl=False) as resp:
             if resp.status == 200:
                 return self.parse_response(await resp.text())
             return {}

Obviously this will allow any Self-Signed SSL cert, but thats what my limited Python knowledge could work out for testing. I am also unsure if the older BRP072A42 units support https so the code may need to handle both http and https (the app seems to always try http first which is why the UDP trick worked).

Here is a response for common/basic_info with this change in place:

ret=OK,type=aircon,reg=th,dst=1,ver=1_12_8,rev=93E736A,pow=0,err=0,location=0,name=%4d%61%73%74%65%72%42%65%64%72%6f%6f%6d,icon=3,method=home only,lpw_flag=0,adp_kind=3,pv=2,cpv=2,cpv_minor=00,led=1,en_setzone=1,mac=D0C5D3******,ssid=DaikinAP****,adp_mode=ap_run,en_hol=0,enlver=1.00,grp_name=,en_grp=0,en_secure=1,port=30050,id=,pw=

In addition my units are really slow to respond (> 10 seconds) so the 10 second timeouts inside the Home Assistant component code will fail to detect them during auto-discovery or even when manually adding them. To fix this I increased the timeout from 10 seconds to 60 seconds and they appear in Home Assistant and I can control them without any issues.

--- daikin.orig/hass/components/daikin/config_flow.py   2019-07-18 23:33:20.000000000 +1200
+++ daikin.new/hass/components/daikin/config_flow.py    2019-07-18 23:28:22.000000000 +1200
@@ -43,7 +43,7 @@
                 host,
                 self.hass.helpers.aiohttp_client.async_get_clientsession(),
             )
-            with timeout(10):
+            with timeout(60):
                 await device.init()
         except asyncio.TimeoutError:
             return self.async_abort(reason='device_timeout')
diff -rub daikin.orig/hass/components/daikin/__init__.py daikin.new/hass/components/daikin/__init__.py
--- daikin.orig/hass/components/daikin/__init__.py      2019-07-18 23:33:30.000000000 +1200
+++ daikin.new/hass/components/daikin/__init__.py       2019-07-18 23:28:08.000000000 +1200
@@ -87,7 +87,7 @@
     from pydaikin.appliance import Appliance
     session = hass.helpers.aiohttp_client.async_get_clientsession()
     try:
-        with timeout(10):
+        with timeout(60):
             device = Appliance(host, session)
             await device.init()
     except asyncio.TimeoutError:

Is someone able to test this and/or maybe rewrite this to ensure it is also compatible with the older controllers.

I am happy to post this as a bug/feature report once I know it works for other people.

4 Likes

I ordered a BRP072A42 last week, and received a BRP072C42 in the mail today. I wonder if they’re phasing out the old ones?

Either way, I’ve run into this same issue. The controller is only listening on port 443, and my requests at the standard paths are denied with “403 HTTP_FORBIDDEN”.

Can you share any extra details on the UDP trick you used to capture the X-Daikin-uuid value from the app? I’d love to try it here and gain access to the API.

Here’s a solution for token-based auth that seems to work for me.

  1. Generate a UUID4 (https://www.uuidgenerator.net/ is one way to do it). eg. 7b9c9a47-c9c6-4ee1-9063-848e67cc7edd
  2. Strip the hyphens from the UUID. eg. 7b9c9a47c9c64ee19063848e67cc7edd
  3. Grab the 13-digit key from the sticker on the back of the controller. eg. 0123456789012
  4. Register your UUID as a valid token:

curl --insecure -H "X-Daikin-uuid: 7b9c9a47c9c64ee19063848e67cc7edd" -v "https://<controller-ip>/common/register_terminal?key=0123456789012"

  1. Use the UUID to call the usual API endpoints:

curl --insecure -H "X-Daikin-uuid: 7b9c9a47c9c64ee19063848e67cc7edd" -v "https://<controller-ip>/common/basic_info"

Thanks for the UDP tip, it set me on the path to getting this working.

Nice, that register_terminal bit was what I couldn’t find. I need to sit down and update my install sometime soon and I’ll see if I can add that into my code and post the update for others to use and test.

Out of curiosity does your unit require the extended timeout values?

I’ve got a custom integration (not home assistant), and my default timeouts seem like they’re higher than the HA ones. I haven’t had to customise them.

Hi Guys, this is my first post. I have been using Hass.io for about a year now and I love it. I recently purchased two Daikin Air Conditioners (US7 and CORA) in the lead up to summer this year. I bought them thinking they would be easy to add to HA as they already had intergration built in. I asked the supplier to order the BRP072A42 modules but I received the BRP072C42 units instead. Unfortuantely out of the box like you have said it does not work. I am getting the following.

ClientError
Traceback (most recent call last):
File “/usr/local/lib/python3.7/site-packages/aiohttp/connector.py”, line 924, in _wrap_create_connection
await self._loop.create_connection(*args, **kwargs))
File “/usr/local/lib/python3.7/asyncio/base_events.py”, line 954, in create_connection
raise exceptions[0]
File “/usr/local/lib/python3.7/asyncio/base_events.py”, line 941, in create_connection
await self.sock_connect(sock, address)
File “/usr/local/lib/python3.7/asyncio/selector_events.py”, line 464, in sock_connect
return await fut
File “/usr/local/lib/python3.7/asyncio/selector_events.py”, line 494, in _sock_connect_cb
raise OSError(err, f’Connect call failed {address}’)
ConnectionRefusedError: [Errno 111] Connect call failed (‘192.168.10.90’, 80)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/components/daikin/config_flow.py”, line 42, in _create_device
await device.init()
File “/usr/local/lib/python3.7/site-packages/pydaikin/appliance.py”, line 188, in init
await self.update_status(HTTP_RESOURCES[:1])
File “/usr/local/lib/python3.7/site-packages/pydaikin/appliance.py”, line 254, in update_status
self.values.update(await self.get_resource(resource))
File “/usr/local/lib/python3.7/site-packages/pydaikin/appliance.py”, line 230, in get_resource
return await self._get_resource(resource)
File “/usr/local/lib/python3.7/site-packages/pydaikin/appliance.py”, line 245, in _get_resource
‘http://%s/%s’ % (self.ip, resource)) as resp:
File “/usr/local/lib/python3.7/site-packages/aiohttp/client.py”, line 1005, in aenter
self._resp = await self._coro
File “/usr/local/lib/python3.7/site-packages/aiohttp/client.py”, line 476, in _request
timeout=real_timeout
File “/usr/local/lib/python3.7/site-packages/aiohttp/connector.py”, line 522, in connect
proto = await self._create_connection(req, traces, timeout)
File “/usr/local/lib/python3.7/site-packages/aiohttp/connector.py”, line 854, in _create_connection
req, traces, timeout)
File “/usr/local/lib/python3.7/site-packages/aiohttp/connector.py”, line 992, in _create_direct_connection
raise last_exc
File “/usr/local/lib/python3.7/site-packages/aiohttp/connector.py”, line 974, in _create_direct_connection
req=req, client_error=client_error)
File “/usr/local/lib/python3.7/site-packages/aiohttp/connector.py”, line 931, in _wrap_create_connection
raise client_error(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 192.168.10.90:80 ssl:None [Connect call failed (‘192.168.10.90’, 80)]

Now i am no programmer by any means but i may have to start learning python by force to get this working. I will try to better understand your comments above and see if i can get it working.

Is there anyway to adjust the python scripts from the HA frontend or do i need to access the CLI and edit within vi or something like that?

Hopefully together we can get this working as i think it would be awesome to get access to the PIR and both the indoor and outdoor temp sensors and ultimately do some automations from HA.

Cheers

I had the time this week to update my home-assistant and at the same time I have applied the changes to a custom_component so anyone can use the code. I have updated the top post with the details.

I would really love to know if https also works with the older controllers, as well as some examples on how to obtain user details during auto discovery, so I can avoid the current manual register_terminal process.

@nzhook - does your BRP072C42 broadcast it’s own SSID even when connected to another wifi network as a client?

Mine does and I assumed it was my fault, but I’ve done a factory reset and it still happens. Ideally, I’d prefer the controller not to broadcast its own SSID once setup is complete.

Basic info on my BRP072C42 looks like this:

$ curl --insecure -H "X-Daikin-uuid: xxx" "https://10.1.1.111/common/basic_info"
ret=OK,type=aircon,reg=th,dst=1,ver=1_12_8,rev=93E736A,pow=1,err=0,location=0,name=%4c%4c%4c,icon=0,method=home only,lpw_flag=0,adp_kind=3,pv=2,cpv=2,cpv_minor=00,led=1,en_setzone=1,mac=123,ssid=DaikinAP88512,adp_mode=ap_run,en_hol=0,enlver=1.00,grp_name=,en_grp=0,en_secure=1,port=30050,id=,pw=

Note “adp_mode=ap_run” and “adp_kind=3”

Basic info from another wifi controller (a BRP072A42) looks like this:

curl "http://10.1.1.110/common/basic_info"
ret=OK,type=aircon,reg=th,dst=1,ver=3_4_3,pow=1,err=0,location=0,name=%4d%4d%4d,icon=3,method=home only,port=30050,id=,pw=,lpw_flag=0,adp_kind=2,pv=2,cpv=2,cpv_minor=00,led=1,en_setzone=1,mac=abc,adp_mode=run,en_hol=0,enlver=1.00,grp_name=,en_grp=0

Note “adp_mode=run” and “adp_kind=2”

I’ve looked for an API endpoint to change “adp_mode” to “run”, but so far I haven’t found anything. The obvious solution is to click the physical mode button on the BRP072C42. Sadly, that seems to have no effect.

Oh. This manual for the BRP072C42 says:

MODE button*
*No operation for BRP072C42 model

:thinking:

Yes mine are always broadcasting even when connected to a WIFI network and I have not found a way to stop them from telling the world they exist - although I was basing my investigations on what the app provides which is pretty limited (only useful thing controller hardware wise was turning the red led light on/off, which I turned off in the app and have no want to turn it on - although as I wrote this I had a cunning plan to use it as a status indicator controlled by Home Assistant)

I must have pressed that mode button many times when setting the controllers up trying to get it to do something and nothing happens. Looks like its something that was used on earlier controllers but its not used on the C - I assume Daikin may release a firmware update one day that might use it.

1 Like

Hi Guys, I can also confirm both of my C42 units are still advertising the default SSID after I have added both of my units to the app. Any other system I have used would typically stop advertising once the client has been setup. I am hoping Daikin release a firmware update in the near future to fix this as i believe it is unnecssary and adds extra management frames to the wifi which impacts wifi performance.

Hey all, Just got AC installed and i did everything on here but i keep getting errors and can’t install the integration. Hassio sees the Daikin AC and asks if i want to configure but when i click configure this is in the log:
NewConnectionError(’<urllib3.connection.VerifiedHTTPSConnection object at 0x7fb20869b510>: Failed to establish a new connection: [Errno 113] Host is unreachable’))]
2019-12-14 01:39:52 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 73, in async_init
return await self._async_handle_step(flow, flow.init_step, data)
File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 132, in _async_handle_step
result: Dict = await getattr(flow, method)(user_input)
File “/config/custom_components/daikin/config_flow.py”, line 65, in async_step_import
host = user_input.get(CONF_HOST)
AttributeError: ‘NoneType’ object has no attribute ‘get’
2019-12-14 01:40:05 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File “/usr/src/homeassistant/homeassistant/components/discovery/init.py”, line 205, in scan_devices
results = await hass.async_add_job(_discover, netdisco)
File “/usr/local/lib/python3.7/concurrent/futures/thread.py”, line 57, in run
result = self.fn(*self.args, **self.kwargs)
File “/usr/src/homeassistant/homeassistant/components/discovery/init.py”, line 230, in _discover
netdisco.scan()
File “/usr/local/lib/python3.7/site-packages/netdisco/discovery.py”, line 72, in scan
self.daikin.scan()
File “/usr/local/lib/python3.7/site-packages/netdisco/daikin.py”, line 26, in scan
self.update()
File “/usr/local/lib/python3.7/site-packages/netdisco/daikin.py”, line 77, in update
‘id’: entry[‘id’],
KeyError: ‘id’
2019-12-14 01:40:51 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
File “/usr/local/lib/python3.7/site-packages/aiohttp/web_protocol.py”, line 418, in start
resp = await task
File “/usr/local/lib/python3.7/site-packages/aiohttp/web_app.py”, line 458, in _handle
resp = await handler(request)
File “/usr/local/lib/python3.7/site-packages/aiohttp/web_middlewares.py”, line 119, in impl
return await handler(request)
File “/usr/src/homeassistant/homeassistant/components/http/real_ip.py”, line 40, in real_ip_middleware
return await handler(request)
File “/usr/src/homeassistant/homeassistant/components/http/ban.py”, line 73, in ban_middleware
return await handler(request)
File “/usr/src/homeassistant/homeassistant/components/http/auth.py”, line 136, in auth_middleware
return await handler(request)
File “/usr/src/homeassistant/homeassistant/components/http/view.py”, line 123, in handle
result = await result
File “/usr/src/homeassistant/homeassistant/components/config/config_entries.py”, line 154, in get
return await super().get(request, flow_id)
File “/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py”, line 78, in get
result = await self._flow_mgr.async_configure(flow_id)
File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 86, in async_configure
if cur_step.get(“data_schema”) is not None and user_input is not None:
AttributeError: ‘NoneType’ object has no attribute ‘get’
2019-12-14 01:41:00 ERROR (MainThread) [aiohttp.server] Error handling request
Traceback (most recent call last):
File “/usr/local/lib/python3.7/site-packages/aiohttp/web_protocol.py”, line 418, in start
resp = await task
File “/usr/local/lib/python3.7/site-packages/aiohttp/web_app.py”, line 458, in _handle
resp = await handler(request)
File “/usr/local/lib/python3.7/site-packages/aiohttp/web_middlewares.py”, line 119, in impl
return await handler(request)
File “/usr/src/homeassistant/homeassistant/components/http/real_ip.py”, line 40, in real_ip_middleware
return await handler(request)
File “/usr/src/homeassistant/homeassistant/components/http/ban.py”, line 73, in ban_middleware
return await handler(request)
File “/usr/src/homeassistant/homeassistant/components/http/auth.py”, line 136, in auth_middleware
return await handler(request)
File “/usr/src/homeassistant/homeassistant/components/http/view.py”, line 123, in handle
result = await result
File “/usr/src/homeassistant/homeassistant/components/config/config_entries.py”, line 154, in get
return await super().get(request, flow_id)
File “/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py”, line 78, in get
result = await self._flow_mgr.async_configure(flow_id)
File “/usr/src/homeassistant/homeassistant/data_entry_flow.py”, line 86, in async_configure
if cur_step.get(“data_schema”) is not None and user_input is not None:
AttributeError: ‘NoneType’ object has no attribute ‘get’

Also when i use the: curl --insecure -H “X-Daikin-uuid: 7b9c9a47c9c64ee19063848e67cc7edd” -v “https:///common/basic_info”

This is what i get, id=(my home Wifi ssid)

ret=OK,type=aircon,reg=th,dst=1,ver=1_13_7,rev=4335040,pow=1,err=0,location=0,name=%44%61%69%6b%69%6e%41%50%31%35%33%31%39,icon=0,method=polling,lpw_flag=0,adp_kind=3,pv=2,cpv=2,cpv_minor=00,led=0,en_setzone=1,mac=DCF50526D59F,ssid=DaikinAP15319,adp_mode=ap_run,en_hol=0,enlver=1.00,grp_name=,en_grp=0,en_secure=1,port=30050,id=XXXXXX,pw=7lzgoa8ucore-ssh:~# 

The ‘Host is unreachable’ message is odd as if you can connect via curl you should be able to also connect via the component. Were you running the curl command from the machine running Home Assistant or another one (eg. could there be a networking issue preventing Home Assistant seeing the controller).

In addition unless you have changed the UUID in the code, the component will only work if you use d53b108a0e5e4fb5ab94a343b7d4b74a (not 7b9c9a47c9c64ee19063848e67cc7edd), so you should be able to get the basic_info output with this command:

curl --insecure -H "X-Daikin-uuid: d53b108a0e5e4fb5ab94a343b7d4b74a" "https://[IP]/common/basic_info"

If you cant you would need to register d53b108a0e5e4fb5ab94a343b7d4b74a first

curl --insecure -H "X-Daikin-uuid: d53b108a0e5e4fb5ab94a343b7d4b74a" --head "https://[IP]/common/register_terminal?key=[KEY]"

I also see your controller is running version 1_13_7, where as mine are running 1_12_8. Its possible Daikin have made some changes since I last checked the app which is causing the slight difference in output (like now showing the wifi ssid which wasnt there previously) (update: updated one of my controllers to 1.13.7 and it connects fine although I still dont see the SSID :frowning: )

I changed the UUID as per the UUID generator from Jame Healy post as i thought it had to be unique.
I will revert back to the original UUID and see if i can get it to work.
I SSH into the VM to run all the commands.

Ok removed the DB and it rebooted and it is working now. I had ro remove the daikin: from the config.yaml as it just showed on the main screen. I have sync’d it with GHome and can change the Temp, turn on and turn off.
Is there other things i can do or are they just the basic controls? Thanks for the help and yes i had to use the original UUID you created.

Cool, good to know it works. The UUID ‘should’ be unique, however thats a bit of code I have not worked out yet (how to ask for the Key during setup) so the code needs to have the one I gave as its the one in the code. I dont see that as too much of a risk since its local network only and has the same risk as the older models which had no security but it will be fixed at some point.

You should get all the same controls (on, off, temp, mode, away… as well as reading the settings) as the original Home Assistant component. I dont think Home Assistant exposes all of this to Google Home but you can setup automations to use some of the other features.

Hi all. I’ve followed along all these instructions on a new unit I’ve just installed, but i can’t for the life of me get HA to recognise it.

If i add it to configuration.yaml, it does sort of show up as an integration to be configured, but when you click on the link to do it, it just pops up and ‘loads’ but goes nowhere.

Going back to basics, when I do:
curl --insecure -H "X-Daikin-uuid: d53b108a0e5e4fb5ab94a343b7d4b74a" --head "https://[IP]/common/basic_info"

The response I get is : HTTP/1.0 200 OK
Content-Length: 328
Content-Type: text/plain

I can only assume that the original UUID registration worked, but the response is completely different to what people have described previously.

Am I missing something?

What you describe as happening is what you would see with the original component installed (as the unit responds to the discovery broadcast from HA, but when attempting to connect it fails to connect). Can you double check the custom component is installed correctly.

If it is can you run that same command without the --head and post the response. ( curl --insecure -H “X-Daikin-uuid: d53b108a0e5e4fb5ab94a343b7d4b74a” “https://[IP]/common/basic_info” )

Thanks for that, I hadn’t noticed the extra flag between the ‘Basic Info’ command and the ‘UUID Registration’.

I am getting the expected data from the ‘Basic Info’ now:

ret:OK,type=aircon,reg=th,dst=1,ver=1_13_7,rev=4335040,pow=0,err=o,location=0,name=%4c%6f%75%6e%67%65%20%52%6f%6f%6d,icon=0,method=home only,lpw_flag=0,adp_kind=3,pv=0,cpv=0,cpv_minor=00,led=1,en_setzone=1,
mac=############,ssid=DaikinAP#####,adp_mode=ap_run,en_hol=0,enlver=1.00,
grp_name=,en_grp=0,en_secure=1,port=30050,id=,pw=#

You say that the behaviour I’m describing is what you’d expect from the original component. I have followed the instructions laid out in your Github to create the Custom Component, so I can only assume that it’s installed correctly, I’m not sure, forgive me, I’m still a bit new to HA, so still muddling through.

Is there anything else I can check? I have noticed some odd error’s in the Log:

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/discovery/__init__.py", line 205, in scan_devices
    results = await hass.async_add_job(_discover, netdisco)
  File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/src/homeassistant/homeassistant/components/discovery/__init__.py", line 230, in _discover
    netdisco.scan()
  File "/usr/local/lib/python3.7/site-packages/netdisco/discovery.py", line 72, in scan
    self.daikin.scan()
  File "/usr/local/lib/python3.7/site-packages/netdisco/daikin.py", line 26, in scan
    self.update()
  File "/usr/local/lib/python3.7/site-packages/netdisco/daikin.py", line 77, in update
    'id': entry['id'],
KeyError: 'id'

I’m not sure if that tells you anything? Thanks very much for your assistance, I really appreciate it.

After much fiddling around, I figured out what I was doing wrong, sort of.
I’m on the latest Firmware for the Daikin Controller, and the latest version of Hassio.

I verified that I had the right files, in the right place, but also verified the permissions on those files.
I also have the integration working without putting daikin: in my config.yaml

The part that I think I was getting tripped up on mostly is that when you go to configure the integration, it wasn’t showing any text. So I searched Daikin, and a blank line appeared, so, out of pure ‘what the hell else to do’ I clicked the line and it started loading, then asked for an IP, and voila.

Thanks again for your help!