MCO Home MH7H Water / Electrical Heating Thermostat

Recently I bough a MH7H Thermostat. In comparison to it’s predecessor MH7 it has a humidity sensor and a couple of configuration parameters. Since there was no specific support for the device I have also created a database entry for it (here).

The device works reliably and can also operate without an existing zwave connection. I consider this important - with outside temperatures of -20°C in winter I’d rather not expose my family to the grace of a zwave controller :slight_smile:

The humidity measurement unfortunately deviates significantly from my other humidity measurement devices. I assume that the humidity sensor measurement is not adjusted - while the temperature measurement is adjusted. Temperature aligns well to other measurement devices.
Without backlight, inside temperature is about 4°K higher than the displayed temperature. This can make a real difference (> 8% rH). Below I have summarised items, rules and sitemap entries to operate the device and adjust humidity.
Measuring humidity is a difficult exercise. The adjustment done at least delivers realistic values now. The deltaT parameter may need some tweaking depending on backlight setting and mount location.

Items

Number iWZ_HT_Humidity “Wohnzimmer Luftfeuchtigkeit [%.1f%%]”
(gWZ)

Number iWZ_HT_DewPoint “Wohnzimmer Taupunkt [%.1f°C]”
(gWZ)

Number iWZ_HT_Humidity_Raw “Wohnzimmer Luftfeuchtigkeit Raw [%.1f%%]”
(gRawSensors) {channel=“zwave:device:3d0d0ad3:node27:sensor_relhumidity”}

Number iWZ_HT_Temperature “Wohnzimmer Temperatur [%.1f°C]”
(gWZ) {channel=“zwave:device:3d0d0ad3:node27:sensor_temperature”}

Number iWZ_HT_State “Wohnzimmer Status [MAP(thermostat_state.map):%s]”
(gWZ) {channel=“zwave:device:3d0d0ad3:node27:thermostat_state”}

Number iWZ_HT_Mode “Wohnzimmer Modus [MAP(thermostat_mode.map):%s]”
(gWZ) {channel=“zwave:device:3d0d0ad3:node27:thermostat_mode”}

Number iWZ_HT_Setpoint_Man “Wohnzimmer Zieltemperatur Manual [%.1f°C]”
(gWZ) {channel=“zwave:device:3d0d0ad3:node27:thermostat_setpoint_heating”}

Number iWZ_HT_Setpoint_Econ “Wohnzimmer Zieltemperatur Economy [%.1f°C]”
(gWZ) {channel=“zwave:device:3d0d0ad3:node27:thermostat_setpoint_heating_econ”}

Number iWZ_HT_Setpoint_Away “Wohnzimmer Zieltemperatur Away [%.1f°C]”
(gWZ) {channel=“zwave:device:3d0d0ad3:node27:thermostat_setpoint_away_heating”}

Number iWZ_HT_Setpoint_Furnace “Wohnzimmer Zieltemperatur Furnace [%.1f°C]”
(gWZ) {channel=“zwave:device:3d0d0ad3:node27:thermostat_setpoint_furnace”}

Number iWZ_HT_Clock_Offset “Wohnzimmer Clock Offset [%d]”
(gWZ) {channel=“zwave:device:3d0d0ad3:node27:time_offset”}

Rules

/*

import org.eclipse.xtext.xbase.lib.Functions

val Functions$Function2<Number, Number, Number> DewPoint = [
Number T,
Number rH
|
/* deltaT depends on the backlight settings. The brighter, the more heat is generated.
* The MH7H does a fair temperature correction but does not adjust the humidity.
*/
val Number f = 17.67 * T / (243.5 + T)
val Number lnrH = Math.log(rH.doubleValue / 100.0)
return 243.5 * (f + lnrH) / (17.67 - f - lnrH)
]

val Functions$Function3<Number, Number, Number, Number> adjustHumidity = [
Number deltaT,
Number T,
Number rH
|
/* deltaT depends on the backlight settings. The brighter, the more heat is generated.
* The MH7H does a fair temperature correction but does not adjust the humidity.
*/
val double expfac = 243.5 * 17.67 * deltaT / (T + deltaT + 243.5) / (T + 243.5)
val Number rHn = rH * Math.exp(expfac) / (1.0 + deltaT / (273.15 + T))
return rHn
]

rule “rWZ_HT_Humidity”
when Item iWZ_HT_Humidity_Raw changed
or Item iWZ_HT_Temperature changed
then
val Number adjusted_rH = adjustHumidity.apply(
4.0,
iWZ_HT_Temperature.state as DecimalType,
iWZ_HT_Humidity_Raw.state as DecimalType)
iWZ_HT_Humidity.postUpdate(adjusted_rH)
iWZ_HT_DewPoint.postUpdate(DewPoint.apply(iWZ_HT_Temperature.state as DecimalType, adjusted_rH))
end

Sitemap

  	Text item=iWZ_HT_Temperature label="Temperatur" {
  		Text item=iWZ_HT_Humidity label="Luftfeuchte" icon=humidity 
  		Text item=iWZ_HT_DewPoint label="Taupunkt" icon=temperatur
  		Text item=iWZ_HT_State label="Status [MAP(thermostat_state.map):%s]" 
  		Selection item=iWZ_HT_Mode label="Modus [%s]" mappings=[0=Off, 1=Manual, 11=Auto, 13=Away]
  		Setpoint item=iWZ_HT_Setpoint_Man label="Soll-Temperatur [%.1f]" step=0.5 minValue=10.0 maxValue=30.0 visibility=[iWZ_HT_Mode==1]
  		Setpoint item=iWZ_HT_Setpoint_Econ label="Soll-Temperatur [%.1f]" step=0.5 minValue=10.0 maxValue=30.0 visibility=[iWZ_HT_Mode==11]
  		Setpoint item=iWZ_HT_Setpoint_Away label="Soll-Temperatur [%.1f]" step=0.5 minValue=10.0 maxValue=30.0 visibility=[iWZ_HT_Mode==13]
  	}

Hi, just want to buy the same but can’t figure out about relay type inside. Is it 'click’s? It’s annoing at night for example?

The relay emits a sound. It’s about the same noise level as the bimetal dump thermostats I used before. This is currently the best one you can buy. Adjustable brightness and it can also turn the screen completely off after some seconds.
I use a range of 0.5°C. With the floor heating the switching intervals are long - hours. And this is adjustable as well.

1 Like

Very interesting topic. I would like to buy the same thermostat for floor heating control. Does anybody know if the thermostat hysteresis can be set lower than 0,5°C? I read in the datasheet WH back by Temp. differential 0.5℃(1℉) 0.0-10.0℃(0-18℉)but it does not mention the minimum resolution setting. Can it be lowered?

Anyone owning the thermostat that can test if parameter P05 and P06 (temp. differential) can be set to a value lower than 0.5°C (for example 0.1°C or 0.2°C). Manual reports range 0.0 to 10.0, but not the resolution.
+/-0.5°C is a little too high (1°C) for a floor heating water system…

The interval for P05 and P06 is 0.5°C starting at 0°. So you have the choice of no differential or 0.5°C differential.
For anything between like 0.2°C you need some rule which depending on temperature sets the target temperature to e.g. 28 or 18 C, i.e. just high or low enough to trigger.
I am operating the thermostats with water floor heating at a differential of 0.5°. Works well with an effective differential of 1 to 1.5. However, we don’t have floor temp sensors, just the air one.

Thank you for your answer…So one can set 0.5°C to P05 and 0 to P06 getting an equivalent +/-0.25 (total differential of 0.5°C).
Is it possible to do the inversion in summer for cooling (output on for T lower than set point?)

No cooling with this device. I think MCO has a heating/cooling controller as well.

Could someone explain to me what modifying P05 and/or P06 actually does please? I’m just struggling with their definitions in the manual.

Thank you

Well I decided to go and tinker around with the values myself. What I was hoping to do was have a setpoint of 20 degrees Celsius and when the stat hit that temp that it would just “stop” and not demand heat anymore.

With that in mind I set P05 and P06 to 0.0. What actually happens now when the stat hits 20 is that the relay inside goes into “mental mode” and flicks over and back between on and off constantly.

Have now set P06 to 0.5 with the hope that this resolves the flickering problem. Just passing it on .

Hi =) Has someone else problems with the (winter)time of the thermostat? I do not get the time/date updated…can someone show me how?

No problems here. Worked.

I can succesfully read all parameters from MH7H via Z-wave binding.

Somehow Heating state switch misbehaves. Initial switching ON through OpenHAB UI is without effect. Every following switch change works in opposite way. Switching it on actually turns the unit OFF. Switching it off starts the heating …

2022-10-26 11:29:13.868 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'ThermostatBedroom_Heatingstate' received command ON
2022-10-26 11:29:13.873 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'ThermostatBedroom_Heatingstate' predicted to become ON
2022-10-26 11:29:13.874 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_Heatingstate' changed from NULL to ON
2022-10-26 11:29:15.495 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_Sensorrelativehumidity' changed from 49 to 50
2022-10-26 11:29:25.323 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'ThermostatBedroom_Heatingstate' received command OFF
2022-10-26 11:29:25.324 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'ThermostatBedroom_Heatingstate' predicted to become OFF
2022-10-26 11:29:25.325 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_Heatingstate' changed from ON to OFF
2022-10-26 11:29:26.029 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_ThermostatOperatingState' changed from 0 to 1
2022-10-26 11:29:43.447 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'ThermostatBedroom_Heatingstate' received command ON
2022-10-26 11:29:43.448 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'ThermostatBedroom_Heatingstate' predicted to become ON
2022-10-26 11:29:43.449 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_Heatingstate' changed from OFF to ON
2022-10-26 11:29:44.585 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_ThermostatOperatingState' changed from 1 to 0

Are you sure you need the Heating state ?
This seems to be overruled from thermostate mode and programmed heating times.

Thanks. Good point.

I checked MH7H docs again… I tried to control it through thermostat_mode channel and it can’t be used as a latching switch for programmable control heating. Current thermostat_state doesn’t change with the command.

2022-10-26 11:32:32.612 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'ThermostatBedroom_Thermostatmode' received command 1
2022-10-26 11:32:32.616 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'ThermostatBedroom_Thermostatmode' predicted to become 1
2022-10-26 11:32:32.620 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_Thermostatmode' changed from NULL to 1
2022-10-26 11:32:51.556 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'ThermostatBedroom_Thermostatmode' received command 0
2022-10-26 11:32:51.558 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'ThermostatBedroom_Thermostatmode' predicted to become 0
2022-10-26 11:32:51.559 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_Thermostatmode' changed from 1 to 0
2022-10-26 11:33:09.783 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'ThermostatBedroom_Thermostatmode' received command 1
2022-10-26 11:33:09.785 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'ThermostatBedroom_Thermostatmode' predicted to become 1
2022-10-26 11:33:09.787 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_Thermostatmode' changed from 0 to 1
2022-10-26 11:33:26.212 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_Thermostatmode' changed from 1 to 0
2022-10-26 11:33:38.353 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'ThermostatBedroom_Thermostatmode' received command 1
2022-10-26 11:33:38.354 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'ThermostatBedroom_Thermostatmode' predicted to become 1
2022-10-26 11:33:38.356 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_Thermostatmode' changed from 0 to 1

I also tried to set thermostat_state by a command directly. But it seems like a read-only parameter:

2022-10-26 11:41:34.463 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'ThermostatBedroom_ThermostatOperatingState' received command 1
2022-10-26 11:41:34.466 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'ThermostatBedroom_ThermostatOperatingState' predicted to become 1
2022-10-26 11:41:34.470 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_ThermostatOperatingState' changed from 0 to 1
2022-10-26 11:41:37.039 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'ThermostatBedroom_ThermostatOperatingState' changed from 1 to 0

I’d like to control MH7H OFF/HEAT state by a rule from OpenHAB. So far only Heating state seems to be able to control it remotely.

I think the minimal differential can be set to 0.3° C via the Device configuration… see ZWave Thing | openHAB

I guess the troubles are coming from the device itself, or better the settings you applied on the device.
As I got the MH7 I had planned to control by rules also, but I recognized that the modes in combination with time cannot be set by zwave.
I have set the modes and times on the device only.
I can just change the modes via zwave.

The operating state is in fact read only.
If the MH7 heats physically it is ON, otherwise IDLE.

But I installed the MH7 long time ago and there was no need to change anything since then.
So could be that I do not remember exactly …

1 Like

Thanks for your input!

Finally, I was able to get it working through virtual Switch item and this rule (which reverses the polarity of the switch):

rule "Virtual Switch for Children Room HVAC"
when
    Item ThermostatChildrenRoom_Switch received command
then
    if (receivedCommand == ON) {

        if ((ThermostatChildrenRoom_Heatingstate.state == ON) || (ThermostatChildrenRoom_Heatingstate.state == NULL)) {
             sendCommand(ThermostatChildrenRoom_Heatingstate, OFF);
        }
    }
    if (receivedCommand == OFF) {
        if ((ThermostatChildrenRoom_Heatingstate.state == OFF) || (ThermostatChildrenRoom_Heatingstate.state == NULL)) {
             sendCommand(ThermostatChildrenRoom_Heatingstate, ON);
        }
    }
end
2 Likes