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
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
/*
- Rules to correct sensor data (raw items to display items)
- Formulas: Peter Mander (2012, 2017)
- https://carnotcycle.wordpress.com/2012/08/04/how-to-convert-relative-humidity-to-absolute-humidity/
*/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] }