There isn’t a really good source that I’ve found that just lays it out there in a simple manner. Probably the most concise is in the Bindings official documents @ HomeKit Add-on Honestly watching the log file is probably the best teacher.
Here is a copy/paste replica of Apple's official developer documentation listing the supported items in homeKit.(as of July 30, 2021)
Accessory Service Types
The service types supported by HomeKit.
Framework
On This Page
Overview
An HMService
instance’s read-only serviceType
property contains one of the values listed below to tell you what the service does.
Don’t confuse these values with the accessory categories found in Accessory Category Types. Despite the similarities, they describe different things. Accessories are the physical objects that the user installs in the home, like a garage door opener. Accessories belong to a particular category, like HMAccessoryCategoryTypeGarageDoorOpener
.
Accessories have one or more services that perform tasks. The garage door opener accessory has a garage door opener service with service type HMServiceTypeGarageDoorOpener
, given below. The same accessory might also have an attached light providing a light bulb service with service type HMServiceTypeLightbulb
, also given below.
Topics
Light
let HMServiceTypeLightbulb: String
A light bulb service.
let HMServiceTypeLightSensor: String
A light sensor service.
Power and Switches
let HMServiceTypeSwitch: String
A switch service.
let HMServiceTypeBattery: String
A battery service.
let HMServiceTypeOutlet: String
An outlet service.
let HMServiceTypeStatefulProgrammableSwitch: String
A stateful programmable switch service.
let HMServiceTypeStatelessProgrammableSwitch: String
A stateless programmable switch service.
Air Quality and Smoke Detection
let HMServiceTypeAirPurifier: String
An air purifier service.
let HMServiceTypeAirQualitySensor: String
An air quality sensor service.
let HMServiceTypeCarbonDioxideSensor: String
A carbon dioxide sensor service.
let HMServiceTypeCarbonMonoxideSensor: String
A carbon monoxide sensor service.
let HMServiceTypeSmokeSensor: String
A smoke sensor service.
Temperature and Humidity
let HMServiceTypeHeaterCooler: String
A heater or cooler service.
let HMServiceTypeTemperatureSensor: String
A temperature sensor service.
let HMServiceTypeThermostat: String
A thermostat service.
let HMServiceTypeFan: String
A fan service.
let HMServiceTypeFilterMaintenance: String
A filter maintenance service.
let HMServiceTypeHumidifierDehumidifier: String
A humidifier or dehumidifier service.
let HMServiceTypeHumiditySensor: String
A humidity sensor service.
let HMServiceTypeVentilationFan: String
A ventilation fan service.
Windows
let HMServiceTypeWindow: String
A window service.
let HMServiceTypeWindowCovering: String
A window covering service.
let HMServiceTypeSlats: String
A slats service.
Water
let HMServiceTypeFaucet: String
A faucet service.
let HMServiceTypeValve: String
A valve service.
let HMServiceTypeIrrigationSystem: String
An irrigation system service.
let HMServiceTypeLeakSensor: String
A leak sensor service.
Locks and Openers
let HMServiceTypeDoor: String
A door service.
let HMServiceTypeDoorbell: String
A doorbell service.
let HMServiceTypeGarageDoorOpener: String
A garage door opener service.
let HMServiceTypeLockManagement: String
A lock management service.
let HMServiceTypeLockMechanism: String
A lock mechanism service.
Saftey and Security
let HMServiceTypeMotionSensor: String
A motion sensor service.
let HMServiceTypeOccupancySensor: String
An occupancy sensor service.
let HMServiceTypeSecuritySystem: String
A security system service.
let HMServiceTypeContactSensor: String
A contact sensor service.
Video and Audio
let HMServiceTypeCameraControl: String
A camera control service.
let HMServiceTypeCameraRTPStreamManagement: String
A stream management service.
let HMServiceTypeMicrophone: String
A microphone service.
let HMServiceTypeSpeaker: String
An audio speaker service.
Information
let HMServiceTypeLabel: String
A label namespace service used when an accessory supports multiple services of the same type.
let HMServiceTypeAccessoryInformation: String
An accessory information service.
See Also
Getting the Service Type
var serviceType: String
The type of the service.
var localizedDescription: String
The localized description of the service.
My Technique
- In Terminal find the openhab.log file and issue the command
tail -f /pathToOpenhab.log
My Specific command is
tail -f ~/openhab/userdata/logs/openhab.log
This will cause the terminal to update the screen when new log files are added but will keep that terminal window occupied until closed. So just leave it up and watch the log entries roll in.
- I have figured out (from watching the log) any time I make a change to an item with Homekit metadata the binding republishes all the items with Homekit metadata, at that point all the errors that are preventing your items from being properly configured in HomeKit should appear in the log file.
- Fix the errors that show up in the log for your Homekit items and then you know that at least those items are configured in such a way that they will work. At least with the options you’ve added to Homekit Metadata for. If a Device such as a Thermostat is missing a required datapoint it will show in the log, but if you meet the requirements for a Thermostat, that doesn’t necessarily mean all the possible datapoint are filled… just the required ones to make the item work.
I have noticed there appears to be a hierarchy for Homekit Metadata. For example, I made a group of items that represent the thermostat. Set point, Mode, etc … I added Homekit Metadata to the group for a thermostat type item. Then the Set point inside the group I set the metadata on Homekit and since the set point was within the thermostat group ( I did not have to set the metadata as both thermostat and thermostat set point on the same item, the requirement for having a set point for the thermostat is meet (just an example there are more points that are required for a thermostat). I could make the item both a Thermostat, and Thermostat Set Point (ignoring the group’s Metadata for Homekit) in the MetaData and it will not show errors in the log, but I feel this is improper and i am trying to stick to 1 HomeKit metadata entry per item if at all possible. I am still trying to figure the hierarchy out completely, as I am just going by feel and haven’t looked for any official information on it. I believe U can also add multiple datapoints to an item.
To add Homekit Metadata when looking at an item in the OH UI there is a blue “Add Metadata” button if you select that it will show options for all the Metadata choices. If you want more then 1 Metadata point per Item you need to check the checkbox for multiple, otherwise it will only let you select 1 Datapoint per item.
So to summerize, Use the log with a DEBUG or TRACE Level set for homekit to fix errors in your metadata, and use Apple Developer data to try to find used data points that are not required but may make using them easier. Example would be a garage door opener requires a opener but optionally has a light built in too. So the Opener would work after getting the opener metadata added, and will not work without it, but you can’t control the light for the door, unless it too gets metadata for Homekit added to it.