I need some help to control my Homematic heaters with Homekit.
My setup: OpenHAB 2.5.6 running on a Pi 4 with Homegear.
This setup is running since months/years very stable and I control my heaters primarily with rules and a wall-mounted display with HABPanel.
But since I’m an Apple user, I want to use Homekit more and more.
It was “easy” to include switches, sensors and even my garage door opener, but I’m struggling with my heaters
If I have one heater in a room, I control it with the following items:
Switch HM_OG_SZ_HK_Battery "HM_OG_SZ_HK_Battery" (gHmOgSz, gBattery) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801910:0#LOWBAT"}
Number HM_OG_SZ_HK_Signal "HM_OG_SZ_HK_Signalstärke" <network> (gHmOgSz, gHmSignal) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801910:0#SIGNAL_STRENGTH"}
Number:Temperature HM_OG_SZ_HK_CURRTEMP "Schlafzimmer Ist [%.1f °C]" <temperature> (gHmOgSz, gHmHeat, gHmOgSzHk, gHmOgSzHkTemp) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801910:4#ACTUAL_TEMPERATURE"}
Number:Temperature HM_OG_SZ_HK_SETTEMP "Schlafzimmer Soll [%.1f °C]" <temperature> (gHmOgSz, gHmHeat, gHmOgSzHk, gHmOgSzHkTemp) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801910:4#SET_TEMPERATURE"}
String HM_OG_SZ_HK_MODE "Schlafzimmer Modus" (gHmOgSz, gHmOgSzHk, gHmHkMode) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801910:4#CONTROL_MODE"}
Number HM_OG_SZ_HK_VALVE "Schlafzimmer Ventil" (gHmOgSz, gHmOgSzHk) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801910:4#VALVE_STATE"}
If I have more than one heater in a room, I’m using a group:
//Wohnzimmer Heizkörper Gruppe
Group gHmEgWzHkTemp "Heizkörper Wohnzimmer Temperaturen"
Group gHM_EG_WZ_HK "Wohnzimmer"
Group:Number:Temperature gHM_EG_WZ_HK_SETTEMP "Wohnzimmer Soll [%.1f °C]" <temperature> (gHM_EG_WZ_HK, gHmEgWzHkTemp)
Group:Number:AVG gHM_EG_WZ_HK_CURRTEMP "Wohnzimmer Ist [%.1f °C]" <temperature> (gHM_EG_WZ_HK, gHmEgWzHkTemp)
Group:Number:AVG gHM_EG_WZ_HK_VALVE "Wohnzimmer Ventil"
//Wohnzimmer Heizkörper links
Group gHmEgWzHkLi "Heizkörper Wohnzimmer links"
Group gHmEgWzHkLiTemp "Heizkörper Wohnzimmer links Temperaturen"
Switch HM_EG_WZ_HK_LI_Battery "HM_EG_WZ_HK_LI_Battery" (gHmEgWz, gBattery) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0802290:0#LOWBAT"}
Number HM_EG_WZ_HK_LI_Signal "HM_EG_WZ_HK_LI_Signalstärke" <network> (gHmEgWz, gHmSignal) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0802290:0#SIGNAL_STRENGTH"}
Number:Temperature HM_EG_WZ_HK_LI_CURRTEMP "Wohnzimmer links Ist [%.1f °C]" <temperature> (gHmEgWz, gHmHeat, gHmEgWzHkLi, gHmEgWzHkLiTemp, gHM_EG_WZ_HK_CURRTEMP) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0802290:4#ACTUAL_TEMPERATURE"}
Number:Temperature HM_EG_WZ_HK_LI_SETTEMP "Wohnzimmer links Soll [%.1f °C]" <temperature> (gHmEgWz, gHmHeat, gHmEgWzHkLi, gHmEgWzHkLiTemp, gHM_EG_WZ_HK_SETTEMP) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0802290:4#SET_TEMPERATURE"}
String HM_EG_WZ_HK_LI_MODE "Wohnzimmer links Modus" (gHmEgWz, gHmEgWzHkLi, gHmHkMode) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0802290:4#CONTROL_MODE"}
Number HM_EG_WZ_HK_LI_VALVE "Wohnzimmer links Ventil" (gHmEgWz, gHmEgWzHk, gHM_EG_WZ_HK_VALVE) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0802290:4#VALVE_STATE"}
//Wohnzimmer Heizkörper rechts
Group gHmEgWzHkRe "Heizkörper Wohnzimmer rechts"
Group gHmEgWzHkReTemp "Heizkörper Wohnzimmer rechts Temperaturen"
Switch HM_EG_WZ_HK_RE_Battery "HM_EG_WZ_HK_RE_Battery" (gHmEgWz, gBattery) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801911:0#LOWBAT"}
Number HM_EG_WZ_HK_RE_Signal "HM_EG_WZ_HK_RE_Signalstärke" <network> (gHmEgWz, gHmSignal) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801911:0#SIGNAL_STRENGTH"}
Number:Temperature HM_EG_WZ_HK_RE_CURRTEMP "Wohnzimmer rechts Ist [%.1f °C]" <temperature> (gHmEgWz, gHmHeat, gHmEgWzHkRe, gHmEgWzHkReTemp, gHM_EG_WZ_HK_CURRTEMP) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801911:4#ACTUAL_TEMPERATURE"}
Number:Temperature HM_EG_WZ_HK_RE_SETTEMP "Wohnzimmer rechts Soll [%.1f °C]" <temperature> (gHmEgWz, gHmHeat, gHmEgWzHkRe, gHmEgWzHkReTemp, gHM_EG_WZ_HK_SETTEMP) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801911:4#SET_TEMPERATURE"}
String HM_EG_WZ_HK_RE_MODE "Wohnzimmer rechts Modus" (gHmEgWz, gHmEgWzHkRe, gHmHkMode) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801911:4#CONTROL_MODE"}
Number HM_EG_WZ_HK_RE_VALVE "Wohnzimmer rechts Ventil" (gHmEgWz, gHmEgWzHk, gHM_EG_WZ_HK_VALVE) {channel="homematic:HG-HM-CC-RT-DN:12bf3b22:MEQ0801911:4#VALVE_STATE"}
If I want to set a new target temperature, I send the new value only to the group item.
So far, everything is fine (without using homekit).
I want to use homekit for two (or three) things:
- Current temperature
- Target temperature
- Current mode (depending on the valves)
My approach:
New Homekit items per room:
Group gHK_HK_SZ "Schlafzimmer Heizung" {homekit="Thermostat"}
Number HK_HK_SZ_current_temp "Schlafzimmer Current Temp[%.1f C]" (gHK_HK_SZ) {homekit="Thermostat.CurrentTemperature"}
Number HK_HK_SZ_target_temp "Schlafzimmer Target Temp[%.1f C]" (gHK_HK_SZ) {homekit="Thermostat.TargetTemperature" [minValue=12, maxValue=27, step=0.5]}
String HK_HK_SZ_current_mode "Schlafzimmer Current Mode" (gHK_HK_SZ) {homekit="Thermostat.CurrentHeatingCoolingMode"}
String HK_HK_SZ_target_mode "Schlafzimmer Target Mode" (gHK_HK_SZ) {homekit="Thermostat.TargetHeatingCoolingMode"}
And the following rules:
// Schlafzimmer
rule "1 Heizung Schlafzimmer Current temp"
when
Item HM_OG_SZ_HK_CURRTEMP received update
then
logInfo("Heizung Schlafzimmer", "Currenttemp geändert - Regel ausgeführt")
HK_HK_SZ_current_temp.postUpdate(HM_OG_SZ_HK_CURRTEMP.state as Number)
HK_HK_SZ_current_temp.sendCommand(HM_OG_SZ_HK_CURRTEMP.state as Number)
end
rule "2 Heizung Schlafzimmer Current mode"
when
Item HM_OG_SZ_HK_VALVE received update
then
if (HM_OG_SZ_HK_VALVE.state > 10) {
HK_HK_SZ_current_mode.postUpdate("Heating")
HK_HK_SZ_current_mode.sendCommand("Heating")
}
else {
HK_HK_SZ_current_mode.postUpdate("Off")
HK_HK_SZ_current_mode.sendCommand("Off")
}
end
rule "3 Heizung Schlafzimmer Target temp"
when
Item HM_OG_SZ_HK_SETTEMP received update
then
logInfo("Heizung Schlafzimmer", "Settemp geändert - Regel ausgeführt")
HK_HK_SZ_target_temp.postUpdate(HM_OG_SZ_HK_SETTEMP.state as Number)
HK_HK_SZ_target_temp.sendCommand(HM_OG_SZ_HK_SETTEMP.state as Number)
end
rule "4 Heizung Schlafzimmer Target temp HK"
when
Item HK_HK_SZ_target_temp received update
then
logInfo("Heizung Schlafzimmer", "Targettemp Homekit geändert - Regel ausgeführt")
HM_OG_SZ_HK_SETTEMP.postUpdate(HK_HK_SZ_target_temp.state as Number)
HM_OG_SZ_HK_SETTEMP.sendCommand(HK_HK_SZ_target_temp.state as Number)
end
My results:
Rule 2 is working fine. Homekit shows “Heating” when valves are >10.
Rule 1 is NOT working … but I have no error or warning in the logfile. Could it be a type mismatch?
Rule 3 is NOT working … target temperature still shows the old value … no update
Rule 4 is working. I can set the target temperature with homekit.
I’m sure that the approach is not the only way how it could work. But it should work.
Any help is appriciated.