Homekit: CurrentHeatingCoolingMode is mandatory for thermostats


I’m getting the message: [WARN ] [.accessories.HomekitAccessoryFactory] - Accessory of type THERMOSTAT must have following characteristics [CURRENT_HEATING_COOLING_STATE, TARGET_HEATING_COOLING_STATE, CURRENT_TEMPERATURE, TARGET_TEMPERATURE].

I’m using Z-Wave thermostat ZXT600 that doesn’t have operating state info, so cannot add CurrentHeatingCoolingMode tag.

There are other devices like this one that only have temperature sensor and setpoint. It doesn’t fit in any categories other than thermostat.

@yfre can you make CURRENT_HEATING_COOLING_STATE and TARGET_HEATING_COOLING_STATE characteristics optional?

Thank you!

PS: I’m pinging directly to you as you are working with homekit recently.

Hi Aaron,

both characteristics are mandatory for apple home app. we cannot make them optional. but you dont need to link them to a thing/channel.
here is my setup for this

Group gLivingThermostat "Wohnzimmer Heizung" (gWohnzimmer) {homekit="Thermostat"}
Number livingThermostatCurrentTemp "Wohnzimmer Temperatur [%.1f C]"            (gLivingThermostat,gTempChart) {homekit="Thermostat.CurrentTemperature", channel="knx:device:scn_ip:GT2T_livingroom:temperature"}
Number livingThermostatTargetTemperature "Wohnzimmer Zieltemperatur [%.1f C]" (gLivingThermostat,gTempChart) {homekit="Thermostat.TargetTemperature", channel="knx:device:scn_ip:AKH800_01:channel_a_solltemp"}
String livingCurrentThermostatMode "Wohnzimmer Mode"            (gLivingThermostat) {homekit="Thermostat.CurrentHeatingCoolingMode"}
String livingTargetThermostatMode "Wohnzimmer Ziel-Mode"        (gLivingThermostat) {homekit="Thermostat.TargetHeatingCoolingMode"}

you can also thing about a rule to set the initial value to something like “AUTO” or do it once manually via sitemap or karaf

I’ve had time to work into this but I’m having another problem with Z-wave thermostats because the item type don’t match homekit item types.

I’m trying to link this device to homekit but Mode and Operating state should be “Number” instead of “String”. Also, I can’t manage to find any zwave&homekit example with the latest metadata.

Do you know some way to workaround this?

Thank you

Hi Aeron,

i would create a proxy item + a rule that will update the proxy item on state changes, e.g. something like


Number realThermostatMode {channel="zwave..}
String proxyThermostatMode {homekit="Thermostat.CurrentHeatingCoolingMode"}


rule "realThermostatMode received update"
    Item realThermostatMode received update
    if(realThermostatMode.state==0) {
    else {

I’ll try to create a structure for this! Thank you

BTW: I’m having troubles with blinds 0%-100% inverted between homekit and zwave. Seems weird that there is no easy/documented interaction between both this bindings :frowning: .

regarding inverted - yes, i was thinking to introduce “inverted” flag for homekit items like rollershutter. maybe I will do it in the next days.

regarding documentation - maybe once your setup is working you could document it in the tutorials.