What I Use
I have three Ecobee SmartThermostat with voice control thermostats. They have been very reliable, are relatively easy to setup and configure, and have nice features for optimizing energy savings.
Each thermostat comes with one SmartSensor, and you can add additional sensors. The SmartSensors are a nice way to get an average temperature in your home if your thermostat is located in a strange location. The SmartSensors also integrate into HomeKit nicely.
I do not use the Alexa integration, and if you never set it up, you don't have to worry about it doing anything/getting in the way. If you are paranoid about Alexa microphones, you can easily cut the wires to the mics.
Understanding Ecobee Smart Features Vs HomeKit Smart Features and How They Interact
Ecobee has a number of "smart" features designed to automatically save money on heating and cooling. Some examples include:
Ecobee knows the outside temperature via a connection to the Internet
You can add additional SmartSensors in other rooms of the home that measure the temperature of that room
SmartSensors also know if the area is occupied
You can setup "Comfort Settings", for example: Away, Home, Sleep. These Comfort Settings can be scheduled to enable at different times each day of the week. So for example, you can set the "Away" temperature as a baseline, then set a "Home" temperature for when a room is occupied, and then set a temperature for sleep, based on a time of day. These three simple settings and their schedules can handle 95% of what people want to automate with regards to temperature control.
You can control and access the thermostat from your mobile device or a web browser, even when you are away from home.
The Ecobee system also learns how quickly it takes to heat your home, and how the outside temperature affects the temperature in your home, as well as the patterns of when you are home and away, and can use this information to adjust how it responds to these factors.
So the Ecobee Smart Thermostat already has most of the automation and "smarts" built into it that you would need to build and manage in HomeKit. But you could also choose to manage your thermostat using HomeKit sensors and scenes and automations. I feel that the interface and features for managing your thermostats is somewhat easier in the Ecobee system, because it is designed specifically for these features. Also HomeKit doesn't really have a nice way to organize and manage long lists of automations. I think if I could name HomeKit automations and group related automatons into folders, then I might do more thermostat management with HomeKit. That being said, it would be very straightforward to create a couple of simple automations in HomeKit that would control your temperature based on HomeKit motion and temperature sensors in your home, as well as integration with HomeKit Scenes.
When you add your Ecobee system to HomeKit it is important to understand how the two smart systems interact. The key part to understanding this interaction is understanding what the thermostat does when you adjust its temperature manually. Normally the thermostat's temperature will be determined by the current Ecobee Comfort Settings you configured when you setup your Ecobee system. If you manually override the current temperature —for example by walking up to the thermostat and adjusting the temperature, or by manually changing the thermostat's temperature in the Ecobee app— the thermostat's temperature will adjust to that temperature and go into "Hold" mode, and the Ecobee Comfort Settings are temporarily ignored. You can control how long your thermostat stays in "Hold" mode in the Ecobee software. There are five options available:
Until the next scheduled activity
Until I change it
Decide at time of change
Any changes made by HomeKit are considered a manual change (like using the app or the thermostat itself to temporarily adjust the current temperature) and will place the Thermostat in Hold mode. So this means that after you use HomeKit to change the Ecobee's temperature, what the thermostat does next is based on the setting you have for Hold Mode. It will either go back to its normal operation after 2 or 4 hours, at the next Ecobee scheduled activity, or stay at that temperature until you manually change the temperature again. This allows you to use HomeKit to control your thermostats in a couple of different ways.
Keep in mind that there is no setting in either Ecobee or HomeKit that lets you always determine which system is controlling the thermostats (short of removing Ecobee from HomeKit). Making a change from either HomeKit or Ecobee will always override the thermostat's current temperature until the period of time determined by Ecobee's Hold setting. The scenarios below merely outline how you could use the two systems together. Here are a some scenarios:
Ecobee Primarily Controls Thermostats: If you never use HomeKit to adjust temperatures, you can still use the Ecobee's sensor information to drive other HomeKit automations, or just to conveniently view the Ecobee temperature and sensor information in the Home app.
HomeKit Primarily Controls Thermostats: If you set Ecobee's Hold Mode to "Until I change it", then any thermostat change you make in HomeKit will drive your Ecobee thermostats temperature settings. You can use the Home app to manually change thermostat temperatures or build HomeKit scenes and automations based on variables in your home, and HomeKit will essentially drive the control of your thermostats.
Hybrid Control: If you set Ecobee's Hold Mode to a time-based duration or the next scheduled activity, then you can use a combination of Ecobee and HomeKit rules and automations to control your thermostats. The thermostats will be driven both by your Ecobee Comfort Settings and Activity Schedules and HomeKit, based on which ever system sent the last change and the Hold duration. Depending on how complex all of your Ecobee and HomeKit automations are, this might get confusing as to what current settings are in effect, but it can still be effective. For example you could set a baseline configuration using Ecobee's Comfort Settings and Activity Schedules and then use HomeKit to override the "defaults". Maybe you keep the basement cooler in the winter because you don't use it often, but your home theater is in the basement. You could put a temperature change in your "Watch Movie" scene to adjust the basement to be warmer. Or maybe in Ecobee you set a liberal "Sleep" schedule starting at 1:00 AM so the house stays warm longer for when you stay up late, but you often go to bed at 10:00 PM. You add a lower the heat setting to your "Go To Bed" HomeKit Scene that causes the Ecobee to turn off the heat earlier. Another option would be to use daily HomeKit scenes to set the temperature for when you get up, go to work, come home, and go to sleep that change the thermostats temperature 95% of the time, manually triggered exactly when you want them to (rather than relying on Ecobee's sensors and schedules), but you don't have to worry about forgetting to trigger the HomeKit scenes every single night, because the base Ecobee Comfort Settings and Schedule will also go into effect as a "backup/default".
Quirks, Tips, Anomalies
Ecobee SmartThermostats have the following sensors: Temperature, Humidity, Occupancy, Proximity. However the SmartSensors only have a Temperature and Occupancy (no humidity and no motion!)
While the SmartThermostat has a humidity sensor, it is not displayed as a tile in HomeKit! You can view the thermostat's humidity reading (and use the data in automations) in 3rd party apps, such as Home+, Eve, Controller
Be aware that while the "occupancy" sensors work well for their intended use to manage your thermostat settings, they may not be useful as a traditional "occupancy" sensor for home automation because they do not update their status fast enough (it is not like a motion sensor).
I have three Ecobee thermostats, and I did have difficulty adding them to HomeKit. I observed two issues when trying to add them to HomeKit:
When at the "Add Device" screen of the HomeKit app, the wrong thermostat would appear. For example I would be at the first floor thermostat, and the app would show the second floor thermostat. The HomeKit code would not display on the thermostat.
Once I was able to get one thermostat into HomeKit (through repeatedly trying), the other two thermostats no longer appeared in the "Add Device" screens at all.
I had to factory reset the Ecobee thermostats (Ecobee said this was a known issue). Then they added to HomeKit fairly easily, with the following notes:
You will have to re-do all of the settings on your thermostats
You will have to re-pair your SmartSensors
The first time adding to HomeKit, it would find the thermostat, display the HomeKit code, but it would fail at the last step, showing a "Failed due to unknown error" message. Repeating the add device to HomeKit process a second time added the thermostat without issue. I observed the same "go through the add the device process twice" behavior on all of the thermostats.
However, once getting the thermostats into HomeKit, everything performed reliably well.