Eve Thermo cannot be connected via HomeKit Controller

I have been trying to integrate an Eve Thermo for quite some time.

  1. First, I perform a reset.
  2. Then I add the device in the Eve App, which also works.
  3. Now I delete it again from the Home App.
  4. In HASS (Home Assistant), this is shown to me as a new integration, but as soon as I add it and enter the code, a message appears (the message seems to be missing in your text).

I am running Home Assistant on a Raspberry Pi 4 with the version: Home Assistant 2023.10.3 Supervisor 2023.10.0 Operating System 11.0 Frontend 20231005.0 - latest version

Here is the logfile:

# Home Assistant Core

Failure running background task: Task-3428
20:54:21 – (FEHLER) /usr/local/lib/python3.11/site-packages/aiohomekit/utils.py
An exception that is not an aiocoap Error was raised from a transport; please report this as a bug in aiocoap: AttributeError("'RecvmsgSelectorDatagramTransport' object has no attribute '_fatal_error'")
20:54:21 – (WARNUNG) runner.py
Pairing attempt failed with an unhandled exception
20:54:21 – (FEHLER) homekit_controller

Here is the entire, complete logfile:

2023-10-17 20:48:42.611 WARNING (SyncWorker_0) [homeassistant.loader] We found a custom integration hacs which has not been tested by Home Assistant. This component might cause stability problems, be sure to disable it if you experience issues with Home Assistant
2023-10-17 20:54:21.662 ERROR (MainThread) [homeassistant.components.homekit_controller.config_flow] Pairing attempt failed with an unhandled exception
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/pairing.py", line 111, in _ensure_connected
    await self.connection_future
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/connection.py", line 399, in connect
    await self.get_accessory_info()
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/connection.py", line 435, in get_accessory_info
    results = await self.enc_ctx.post_all(OpCode.CHAR_READ, iids, data)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/connection.py", line 196, in post_all
    res_pdu = await self.post_bytes(req_pdu)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/connection.py", line 170, in post_bytes
    response = await self.coap_ctx.request(request).response
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiocoap/protocol.py", line 606, in _run_outer
    await cls._run(app_request, response, weak_observation, protocol, log)
  File "/usr/local/lib/python3.11/site-packages/aiocoap/protocol.py", line 665, in _run
    blockresponse = await blockrequest.response
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
aiocoap.error.LibraryShutdown

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/homekit_controller/config_flow.py", line 454, in async_step_pair
    return await self._entry_from_accessory(pairing)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/homekit_controller/config_flow.py", line 582, in _entry_from_accessory
    name = await pairing.get_primary_name()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/abstract.py", line 264, in get_primary_name
    accessories = await self.list_accessories_and_characteristics()
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/pairing.py", line 147, in list_accessories_and_characteristics
    await self._ensure_connected()
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/pairing.py", line 113, in _ensure_connected
    raise AccessoryDisconnectedError("failed to connect")
aiohomekit.exceptions.AccessoryDisconnectedError: failed to connect
2023-10-17 20:54:21.682 WARNING (MainThread) [coap-server] An exception that is not an aiocoap Error was raised from a transport; please report this as a bug in aiocoap: AttributeError("'RecvmsgSelectorDatagramTransport' object has no attribute '_fatal_error'")
2023-10-17 20:54:21.685 ERROR (MainThread) [aiohomekit.utils] Failure running background task: Task-3428
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/aiocoap/util/asyncio/recvmsg.py", line 126, in sendmsg
    self.__sock.sendmsg((data,), ancdata, flags, address)
    ^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'sendmsg'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/utils.py", line 40, in _handle_task_result
    task.result()
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/pairing.py", line 169, in _process_config_changed
    await self.list_accessories_and_characteristics()
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/pairing.py", line 149, in list_accessories_and_characteristics
    accessories = await self.connection.get_accessory_info()
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/connection.py", line 408, in get_accessory_info
    _, body = await self.enc_ctx.post(OpCode.UNK_09_READ_GATT, 0x0000, b"")
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/connection.py", line 189, in post
    res_pdu = await self.post_bytes(req_pdu)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohomekit/controller/coap/connection.py", line 170, in post_bytes
    response = await self.coap_ctx.request(request).response
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiocoap/protocol.py", line 606, in _run_outer
    await cls._run(app_request, response, weak_observation, protocol, log)
  File "/usr/local/lib/python3.11/site-packages/aiocoap/protocol.py", line 665, in _run
    blockresponse = await blockrequest.response
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiocoap/tokenmanager.py", line 219, in request
    send_canceller = self.token_interface.send_message(msg, lambda: request.add_exception(error.MessageError))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiocoap/messagemanager.py", line 419, in send_message
    self._send_initially(message, messageerror_monitor)
  File "/usr/local/lib/python3.11/site-packages/aiocoap/messagemanager.py", line 432, in _send_initially
    self._send_via_transport(message)
  File "/usr/local/lib/python3.11/site-packages/aiocoap/messagemanager.py", line 437, in _send_via_transport
    self.message_interface.send(message)
  File "/usr/local/lib/python3.11/site-packages/aiocoap/transports/udp6.py", line 356, in send
    self.transport.sendmsg(message.encode(), ancdata, 0, message.remote.sockaddr)
  File "/usr/local/lib/python3.11/site-packages/aiocoap/util/asyncio/recvmsg.py", line 132, in sendmsg
    self._fatal_error(exc,
    ^^^^^^^^^^^^^^^^^
AttributeError: 'RecvmsgSelectorDatagramTransport' object has no attribute '_fatal_error'

I also don’t know where I could look to see where the Thermo is paired, although I was able to pair it successfully with the Eve App before.

1 Like

Integrating Eve Thermo depends on the thread network you’re using:

If your border router is HomePod or Apple TV, then I suggest to first pair it with Apple Home, keep it running for a few minutes (check in the Eve app if it’s still connecting via Bluetooth or has already switched to Thread), then remove it from Apple Home and it will appear in HA.

If your border router is not a Apple device (e.g. in my current case a SkyConnect dongle on a Raspi running HA), then you need to pair it in close range to the bluetooth receiver of the hardware you’re running HA on. It will first pair via Bluetooth to then switch to Thread. Only after switching to Thread you may move the Eve Thermo to its “final” destination (and ensure that you have enough thread routers between, e.g. Eve Energy).

I’ve personally switched from Apple HomePod Mini to HA SkyConnect as Open Thread Border Router.

In both cases you should factory reset the Eve Thermo by pressing the small reset button next to the batteries for 10 seconds until the display blinks 66 and 99.

Oh, and I suggest to not upgrade to the Matter firmware any time soon. HA has no UI for commissioning a new device with code, so joining a thread network that is not from Apple but from HA can be a serious challenge and requires directly talking to the websocket of the matter server.

1 Like

I have both available, the Apple TV and the Sky Connect.

It is paired with the Home App, but I can’t find it in Eve and also I can’t get it added.

In Hasso, however, under Thread my Apple TV and the HomePods are displayed as Border Routers.
I have now paired the Apple TV with Hasso and removed it from the Home App.

Now I have reset the Eve Thermo from factory settings and it is immediately displayed under Hasso as an integration but I can’t pair it, as always
"„Die Kopplung kann nicht durchgeführt werden, da das Gerät nicht mehr gefunden werden kann.“

Now again integrated in the Eve App, set up, and then deleted from Home. However, it had been connected with Thread.
Added the whole thing to Hasso, but again the message comes up:

This accessory is already paired with another device. Reset the accessory and try again.

The Apple TV is linked with Hasso and it is deleted in the Home App.

1 Like

Under Thread, I get the following display, however, the AppleTV and the HomePods are listed under “Andere Netzwerke” and not at the top.

Do I need to add them here separately? If yes, how do I get the URL of them?

You should be able to set a thread network as “preferred”. Either you use the one created by Apple (MyHome9) or you setup SkyConnect to use it as thread border router. But choose one of the paths and then integrate everything in that network. Multiple thread networks don’t talk to each other, so a device in thread network A will not be seen if HAs preferred network is B.

Here’s how it looks in my case:

PS: During the time when I migrated all my devices to the SkyConnect thread network I turned off my HomePod to ensure that there’s only a single thread network available. And in case you choose to use the Apple thread network, you can unplug the SkyConnect dongle, as you won’t need it (or you’ll use it for Zigbee).

From what I understood, the HomePod or Apple TV will not appear under preferred networks. At least that’s what I read in another forum.

However, the problem remains that I can’t get my Eve Thermo into Home Assistant. I can see and connect to it, but I always get a message saying that the system is already connected, which isn’t the case.

did you manage now? It’s the same error for me.

For Eve Thermo it’s not enough to just remove them from the Apple HomeKit network. You need to reset the device by pressing the button(s?) next to the batteries for about 10 seconds until you see 66/99 blinking on the display. Then you can add them to a different network (but probably you’ll first add them via a bluetooth connection, close to your HA server or bt antenna).

1 Like

I did that, and could add Eve Thermo to HA. But could then not use it in HA. And got “Err” on the display.