I currently use the HomeKit integration. It makes all my existing devices appear as HomeKit accessories to an iPhone/iPad. Therefore we can use Apple’s HomeKit app, or Siri, to control them. It works well.
I recently purchased out first true HomeKit accessory (an Ecobee Smart Switch+). I wish to have Home Assistant control it so I need to use the HomeKit Controller integration.
I’m hoping someone with experience using both the HomeKit and HomeKit Controller integrations can save me some time. Can the two integrations co-exist and, if they can, are there any configuration/operational quirks that I should know?
If the documentation is correct, the answer (to my own question) is: yes.
The last line provides the clue:
If your device is currently paired with an Apple device via HomeKit, you will need to reset it in order to pair it with Home Assistant. Once Home Assistant is configured to work with the device, you can export it back to Siri and Apple Home with the HomeKit integration.
After pairing the HomeKit accessory to Home Assistant, via the HomeKit Controller integration, you can expose it as a HomeKit accessory via the HomeKit integration.
Now all that remains is to test and confirm it works as advertised.
Yes, I’m using both integrations since December and they work well.
There is one drawback to using the HomeKit Controller integration: it polls each HomeKit accessory to get updated status (rather than listen for the accessory’s state-change events).
This is normal - HomeKit controller is currently a local polling based integration. It polls your accessory for its latest state once per minute.
If you have a HomeKit accessory such as a motion sensor, Home Assistant is not informed the moment when the sensor detects motion. It is only informed when it polls the sensor. In practice, this makes it impractical to use the sensor for triggering a light when someone walks into a room. The same is true for a HomeKit switch. When you turn it on, Home Assistant won’t know it’s on until the integration polls it.
This behavior is due to the way the HomeKit controller integration works (polling) and not the HomeKit protocol which is capable of instantly reporting an accessory’s state-changes. Perhaps the integration will be enhanced in the future (to listen for events) but in its current form you should be aware of this behavior and its potential impact on your plans for using it in automations.
NOTE 2021-04-19
Be advised that this is an old post (February 2020). A few months after it was written, the homekit_controller integration was enhanced and ceased to poll accessories, like motion sensors, and received events in real time. As a result, motion events are reported instantly. I’ve been using this integration to turn on lights based on motion (from ecobee Switch+ accessories) for over a year now and it works quickly and reliably.
@123 I have been using the HomeKit integration for quite some time now. I have been considering toying with homekit_controller. I have some HomeKit devices that I would like to export to HA. For example, Koogeek and iDevices switches. But I don’t want to export all of my HomeKit devices. Mostly because of the point you brought up about polling. Do you know if it is possible to use homekit_controller to specify only the devices I want to pull in to HA while ignoring all others? Thanks in advance for your help!
Let’s say you currently have 20 HomeKit accessories that are paired to an iPad. You want 5 of them to now be handled by Home Assistant via the homekit_controller integration. To do that, you must un-pair those 5 accessories from the iPad and then pair them to Home Assistant.
The moment you un-pair a HomeKit accessory, it becomes available to be paired. The homekit_controller integration will automatically discover the 5 un-paired accessories (you’ll be notified via a persistent notification) and offer to pair them.
Once paired, the 5 HomeKit accessories will appear in the Entities view where you can optionally override their default names with some other name. For example, I have several ecobee Switch+ devices. Each one is represented as 5 accessories:
switch
temperature sensor
light level sensor
motion detector
occupancy detector
One device is called “Counter Light” (i.e. kitchen counter light). Therefore all its accessories have “Counter Light” prepended to their names thereby creating awkward combinations like: “Counter Light Light Level”. In the Entities view, I renamed it to “Kitchen Luminance”.
Very cool. Thanks for the explanation, @123 ! So if I understand you correctly, anything that I do not unpair from HomeKit will act as it always did within HomeKit. HA will not try to “take” it from HomeKit and it won’t cause any issues in HA, correct? This sounds exactly like what I was hoping for.
this seems to be the most adequate topic to post to, so sorry if this bumps.
New to the homekit controller integration, I tried to set it up, because I have this Fibaro CO sensor for Apple Homekit (and have a HK key in the manual).
Upon installing however, the install is aborted, complaining it cant find any unpaired devices… I haven’t yet set it up on the Homekit in the house
Is this just a shortcoming of the HomeKit controller integration capabilities in HA ? It would be really nice for this to be event driven and to offer ‘full pass through’ of the device to be integrated transparently to HoneKit.
The lack of status change events from HomeKit to HA (Apple restriction) to is a real nuisance.
My last post in this thread was 10 months ago (February 2020). Since then, the HomeKit_Controller integration has been upgraded many times.
I don’t recall precisely when but I believe it replaced polling with an event-driven technique in the spring of 2020. I’ve been using it to detect motion and occupancy for at least a half-year now. Responsiveness is virtually instantaneous.
if you have an iPhone or iPad, try pairing the accessory (Fibaro CO sensor) with the Home app. If it’s successful, unpair it (the unpairing process varies from one manufacturer’s device to another) and then try pairing it with HomeKit_Controller (assuming it is detected). If it is not detected or if the pairing process fails, report it as an Issue. The developer of this integration is fantastic and will help you debug the problem.