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.