# Helios easyControls

Helios Heat-Recovery Ventilation devices use a Modbus protocol to communicate with different sensors, switches, etc. Some devices come with an integrated web interface (easyControls) as well as a Modbus TCP/IP Gateway. See the corresponding specification (opens new window).

For Helios ventilation devices supporting integration only via RS485, the separate Helios Ventilation binding (opens new window) can be used.

# Supported Things

Thing Description
helios-easycontrols Helios Heat-Recovery Ventilation devices with easyControls

# Configuration

You first need to set up a Modbus bridge according to the Modbus documentation (opens new window). Things in this extension will use the selected bridge to connect to the device. The configuration of a Helios Ventilation device via a .things file would look like the following code sample. It's required to provide the device's IP address, port and unit ID (port and unit ID cannot be changed and always have to be 502 and 180; in fact the values provided here are ignored by the binding and the fixed values 502 and 180 are used):

Bridge modbus:tcp:modbus-gateway "Modbus TCP/IP Gateway" [ host="x.x.x.x", port=502, id=180, enableDiscovery=true ] {
    Thing helios-easycontrols kwl "KWL"
}

# Channels

The following channels are supported:

Channel Channel Group Description Item Type RW
sysdate general The KWL's system date and time DateTime RW
summerWinter general Indicates if summertime or wintertime is active (0 = wintertime, 1 = summertime) Number RW
autoSwUpdate general Indicates if automatic software updates are enable Switch RW
accessHeliosPortal general Indicates if access to Helios portal is enabled Switch RW
minFanStage unitConfig Minimum fan stage (0 or 1) (0, 1) Number RW
preHeaterStatus general Pre-Heater Status Switch RW
humidityControlSetValue humidityControl Humidity control set value (in percent) (20 - 80 %) Number:Dimensionless RW
humidityControlSteps humidityControl Humidity control steps (in percent) (5 - 20 %) Number:Dimensionless RW
humidityStopTime humidityControl Humidity stop time in hours (0-24) (0 - 24 h) Number:Time RW
co2ControlSetValue co2Control CO2 control set value (in ppm) (300 - 2000 ppm) Number:Dimensionless RW
co2ControlSteps co2Control CO2 control steps (in ppm) (50 - 400 ppm) Number:Dimensionless RW
vocControlSetValue vocControl VOC control set value (in ppm) (300 - 2000 ppm) Number:Dimensionless RW
vocControlSteps vocControl VOC control steps (in ppm) (50 - 400 ppm) Number:Dimensionless RW
comfortTemp unitConfig Comfort Temperature (10.0 - 25.0 °C) Number:Temperature RW
partyModeDuration operation Party mode duration (in minutes) (5 - 180 min) Number:Time RW
partyModeFanStage operation Party mode fan stage (0 - 4) Number RW
partyModeRemainingTime operation Party mode remaining time (0 - 180 min) Number:Time R
partyModeStatus operation Party mode status Switch RW
standbyModeDuration operation Standby mode duration (in minutes) (5 - 180 min) Number:Time RW
standbyModeFanStage operation Standby mode fan stage (0 - 4) Number RW
standbyModeRemainingTime operation Standby mode remaining time (0 - 180 min) Number:Time R
standbyModeStatus operation Standby mode status Switch RW
operatingMode operation Operating mode (automatic/manual) (0 = automatic, 1 = manual) Number RW
fanStage operation Fan stage (0 - 4) Number RW
percentageFanStage operation Fan stage in percent (0 - 100 %) Number:Dimensionless R
temperatureOutsideAir general Ouside air temperature in °C (-27.0 - 9998.9 °C) Number:Temperature R
temperatureSupplyAir general Supply air temperature in °C (-27.0 - 9998.9 °C) Number:Temperature R
temperatureOutgoingAir general Outgoing air temperature in °C (-27.0 - 9998.9 °C) Number:Temperature R
temperatureExtractAir general Extract air temperature in °C (-27.0 - 9998.9 °C) Number:Temperature R
vhzDuctSensor general Pre-heater intake temperature in °C (-27.0 - 9998.9 °C) Number:Temperature R
nhzReturnSensor general After-heater return temperature in °C (-27.0 - 9998.9 °C) Number:Temperature R
externalSensorKwlFtfHumidity1 humidityControl External humidity sensor 1 (-0.0 - 9998.9 %) Number:Dimensionless R
externalSensorKwlFtfHumidity2 humidityControl External humidity sensor 2 (-0.0 - 9998.9 %) Number:Dimensionless R
externalSensorKwlFtfHumidity3 humidityControl External humidity sensor 3 (-0.0 - 9998.9 %) Number:Dimensionless R
externalSensorKwlFtfHumidity4 humidityControl External humidity sensor 4 (-0.0 - 9998.9 %) Number:Dimensionless R
externalSensorKwlFtfHumidity5 humidityControl External humidity sensor 5 (-0.0 - 9998.9 %) Number:Dimensionless R
externalSensorKwlFtfHumidity6 humidityControl External humidity sensor 6 (-0.0 - 9998.9 %) Number:Dimensionless R
externalSensorKwlFtfHumidity7 humidityControl External humidity sensor 7 (-0.0 - 9998.9 %) Number:Dimensionless R
externalSensorKwlFtfHumidity8 humidityControl External humidity sensor 8 (-0.0 - 9998.9 %) Number:Dimensionless R
externalSensorKwlFtfTemperature1 humidityControl External temperature sensor 1 (-27.0 - 9998.9 °C) Number:Temperature R
externalSensorKwlFtfTemperature2 humidityControl External temperature sensor 2 (-27.0 - 9998.9 °C) Number:Temperature R
externalSensorKwlFtfTemperature3 humidityControl External temperature sensor 3 (-27.0 - 9998.9 °C) Number:Temperature R
externalSensorKwlFtfTemperature4 humidityControl External temperature sensor 4 (-27.0 - 9998.9 °C) Number:Temperature R
externalSensorKwlFtfTemperature5 humidityControl External temperature sensor 5 (-27.0 - 9998.9 °C) Number:Temperature R
externalSensorKwlFtfTemperature6 humidityControl External temperature sensor 6 (-27.0 - 9998.9 °C) Number:Temperature R
externalSensorKwlFtfTemperature7 humidityControl External temperature sensor 7 (-27.0 - 9998.9 °C) Number:Temperature R
externalSensorKwlFtfTemperature8 humidityControl External temperature sensor 8 (-27.0 - 9998.9 °C) Number:Temperature R
externalSensorKwlCo21 co2Control External CO2 sensor 1 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlCo22 co2Control External CO2 sensor 2 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlCo23 co2Control External CO2 sensor 3 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlCo24 co2Control External CO2 sensor 4 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlCo25 co2Control External CO2 sensor 5 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlCo26 co2Control External CO2 sensor 6 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlCo27 co2Control External CO2 sensor 7 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlCo28 co2Control External CO2 sensor 8 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlVoc1 vocControl External VOC sensor 1 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlVoc2 vocControl External VOC sensor 2 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlVoc3 vocControl External VOC sensor 3 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlVoc4 vocControl External VOC sensor 4 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlVoc5 vocControl External VOC sensor 5 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlVoc6 vocControl External VOC sensor 6 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlVoc7 vocControl External VOC sensor 7 (-0.0 - 9998.9 ppm) Number:Dimensionless R
externalSensorKwlVoc8 vocControl External VOC sensor 8 (-0.0 - 9998.9 ppm) Number:Dimensionless R
nhzDuctSensor general After-heater intake temperature in °C (-27.0 - 9998.9 °C) Number:Temperature R
weekProfileNhz profiles Week profile after-heater (0 = standard 1, 1 = standard 2, 2 = fixed value, 3 = individual 1, 4 = individual 2, 5 = NA, 6 = off) Number RW
supplyAirRpm general Supply air fan RPM (0 - 9999) Number R
extractAirRpm general Extract air fan RPM (0 - 9999) Number R
holidayProgramme operation Holiday programme (0 = off, 1 = interval, 2 = constant) Number RW
holidayProgrammeFanStage operation Holiday programme fan stage (0 - 4) Number RW
holidayProgrammeStart operation Holiday programme start DateTime RW
holidayProgrammeEnd operation Holiday programme end DateTime RW
holidayProgrammeInterval operation Holiday programme interval in hours (1 - 24 h) Number:Time RW
holidayProgrammeActivationTime operation Holiday programme activation time in minutes (5 - 300 min) Number:Time RW
runOnTimeVhzNhz unitConfig Stopping time preheater/afterheater in seconds (60 - 120 s) Number:Time RW
errorOutputFunction unitConfig Error output function (collective error or just error) (1 = collective error, 2 = only error) Number RW
filterChange unitConfig Filter change (0 = No, 1 = Yes) Number RW
filterChangeInterval unitConfig Filter change interval in months (1 - 12) Number RW
filterChangeRemainingTime general Filter change remaining time in minutes (1 - 55000 min) Number:Time R
bypassRoomTemperature unitConfig Bypass room temperature in °C (10 - 40 °C) Number:Temperature RW
bypassMinOutsideTemperature unitConfig Bypass outside temperature in °C (5 - 20 °C) Number:Temperature RW
supplyAirFanStage operation Supply air fan stage (0 - 4) Number RW
extractAirFanStage operation Extract air fan stage (0 - 4) Number RW
operatingHoursSupplyAirVent general Operating hours supply air fan (in minutes) (0 - 2^32-1 min) Number:Time R
operatingHoursExtractAirVent general Operating hours extract air fan (in minutes) (0 - 2^32-1 min) Number:Time R
operatingHoursVhz general Operating hours preheater (in minutes) (0 - 2^32-1 min) Number:Time R
operatingHoursNhz general Operating hours afterheater (in minutes) (0 - 2^32-1 min) Number:Time R
outputPowerVhz general Output power of preheater (in percent) (0 - 2^32-1 %) Number:Dimensionless R
outputPowerNhz general Output power of afterheater (in percent) (0 - 2^32-1 %) Number:Dimensionless R
errors general Errors as integer value (see Errors / Warnings / Infos) (0 - 2^32-1) Number R
warnings general Warnings as integer value (see Errors / Warnings / Infos) (0 - 2^32-1) Number R
infos general Infos as integer value (see Errors / Warnings / Infos) (0 - 2^32-1) Number R
noOfErrors general Number of bit-coded errors (see Errors / Warnings / Infos) (0 - 32) Number R
noOfWarnings general Number of bit-coded warnings (see Errors / Warnings / Infos) (0 - 8) Number R
noOfInfos general Number of bit-coded infos (see Errors / Warnings / Infos) (0 - 8) Number R
errorsMsg general Errors as string (see Errors / Warnings / Infos) String R
warningsMsg general Warnings as string (see Errors / Warnings / Infos) String R
infosMsg general Infos as string (see Errors / Warnings / Infos) String R
statusFlags general Status flags (see Errors / Warnings / Infos) String R
bypassStatus general Status of the bypass (OFF = closed, ON = open) Switch R
bypassFrom unitConfig Bypass active from DateTime RW
bypassTo unitConfig Bypass active to DateTime RW

# Thing Actions

# Reset Filter Change Timer

Resets the timer for the next filter change back to 0.

public void resetFilterChangeTimer()

# Reset Errors

Resets the error messages.

public void resetErrors()

# Reset To Factory Defaults

Resets the device to its factory defaults.

public void presetToFactoryDefaults()

# Reset Switching Times

Resets the device's individual switching times back to the default values.

public void resetSwitchingTimes()

# Set System Date and Time

Sets the device's system date and time to the openHAB server's system date and time.

public void setSysDateTime()

# Set Bypass Dates

Sets the devices start and end date for the active bypass functionality.

public void setBypassFrom(int day, int month)

Parameters:

  • day: The day from when the bypass should be active
  • month: The month from when the bypass should be active
public void setBypassTo(int day, int month)

Parameters:

  • day: The day until when the bypass should be active
  • month: The month until when the bypass should be active
public Map<String, Object> getErrorMessages()

Return values:

  • errorMessages: A List<String> object containing all error messages
public Map<String, Object> getWarningMessages()

Return values:

  • warningMessages: A List<String> object containing all warning messages
public Map<String, Object> getInfoMessages()

Return values:

  • infoMessages: A List<String> object containing all info messages
public Map<String, Object> getStatusMessages()

Return values:

  • statusMessages: A List<String> object containing all status messages
public Map<String, Object> getMessages()

Return values:

  • errorMessages: A List<String> object containing all error messages
  • warningMessages: A List<String> object containing all warning messages
  • infoMessages: A List<String> object containing all info messages
  • statusMessages: A List<String> object containing all status messages

# Properties

The binding provides the following properties:

Property Description
articleDescription The KWL's article description
refNo The KWL's reference number
macAddress The KWL's MAC Address
language The KWL user interface's language (de, en, fr, hr, hu, it, pl, sk, sl)
voltageFanStage1ExtractAir Voltage of extract air fan mapped to fan stage 1 (1.6 - 10 V)
voltageFanStage2ExtractAir Voltage of extract air fan mapped to fan stage 2 (1.6 - 10 V)
voltageFanStage3ExtractAir Voltage of extract air fan mapped to fan stage 3 (1.6 - 10 V)
voltageFanStage4ExtractAir Voltage of extract air fan mapped to fan stage 4 (1.6 - 10 V)
voltageFanStage1SupplyAir Voltage of supply air fan mapped to fan stage 1 (1.6 - 10 V)
voltageFanStage2SupplyAir Voltage of supply air fan mapped to fan stage 2 (1.6 - 10 V)
voltageFanStage3SupplyAir Voltage of supply air fan mapped to fan stage 3 (1.6 - 10 V)
voltageFanStage4SupplyAir Voltage of supply air fan mapped to fan stage 4 (1.6 - 10 V)
kwlBe Slide switch controller KWL-BE activated
kwlBec Comfort controller KWL-BEC activated
unitConfig Ventilation unit configuration (type of house) (1 = DiBt, 2 = passive-house)
kwlFtfConfig0 Humidity/temperature sensor configuration 0 (1 = only humidity, 2 = only temperature, 3 = combined)
kwlFtfConfig1 Humidity/temperature sensor configuration 1 (1 = only humidity, 2 = only temperature, 3 = combined)
kwlFtfConfig2 Humidity/temperature sensor configuration 2 (1 = only humidity, 2 = only temperature, 3 = combined)
kwlFtfConfig3 Humidity/temperature sensor configuration 3 (1 = only humidity, 2 = only temperature, 3 = combined)
kwlFtfConfig4 Humidity/temperature sensor configuration 4 (1 = only humidity, 2 = only temperature, 3 = combined)
kwlFtfConfig5 Humidity/temperature sensor configuration 5 (1 = only humidity, 2 = only temperature, 3 = combined)
kwlFtfConfig6 Humidity/temperature sensor configuration 6 (1 = only humidity, 2 = only temperature, 3 = combined)
kwlFtfConfig7 Humidity/temperature sensor configuration 7 (1 = only humidity, 2 = only temperature, 3 = combined)
humidityControlStatus Humidity control status (0 = off, 1 = stepped, 2 = stepless)
co2ControlStatus CO2 control status (0 = off, 1 = stepped, 2 = stepless)
vocControlStatus VOC control status (0 = off, 1 = stepped, 2 = stepless)
dateFormat Date format (0 = dd.mm.yyyy, 1 = mm.dd.yyyy, 2 = yyyy.mm.dd)
heatExchangerType Heat exchanger type (1 = plastic, 2 = aluminium, 3 = enthalpy)
serNo Serial number
prodCode Production Code
vhzType Pre-heater type (1 = EH-Basis, 2 EH-ERW, 3 = SEWT, 4 = LEWT)
functionTypeKwlEm Function KWL-EM (1 = function 1, 2 = function 2)
externalContact External contact (1 -6 (function 1-6))
fanStageStepped0to2v Fan stage for stepped mode - range 0-2V (0 - 2)
fanStageStepped2to4v Fan stage for stepped mode - range 2-4V (0 - 4)
fanStageStepped4to6v Fan stage for stepped mode - range 4-6V (0 - 4)
fanStageStepped6to8v Fan stage for stepped mode - range 6-8V (0 - 4)
fanStageStepped8to10v Fan stage for stepped mode - range 8-10V (0 - 4)
offsetExtractAir Offset extract air (float)
assignmentFanStages Assignment fan stages - stepped or 0-10V (OFF = 0-10V, ON = stepped)
sensorNameHumidityAndTemp1 Sensor name - humidity and temperature 1
sensorNameHumidityAndTemp2 Sensor name - humidity and temperature 2
sensorNameHumidityAndTemp3 Sensor name - humidity and temperature 3
sensorNameHumidityAndTemp4 Sensor name - humidity and temperature 4
sensorNameHumidityAndTemp5 Sensor name - humidity and temperature 5
sensorNameHumidityAndTemp6 Sensor name - humidity and temperature 6
sensorNameHumidityAndTemp7 Sensor name - humidity and temperature 7
sensorNameHumidityAndTemp8 Sensor name - humidity and temperature 8
sensorNameCo21 Sensor name - CO2 1
sensorNameCo22 Sensor name - CO2 2
sensorNameCo23 Sensor name - CO2 3
sensorNameCo24 Sensor name - CO2 4
sensorNameCo25 Sensor name - CO2 5
sensorNameCo26 Sensor name - CO2 6
sensorNameCo27 Sensor name - CO2 7
sensorNameCo28 Sensor name - CO2 8
sensorNameVoc1 Sensor name - VOC 1
sensorNameVoc2 Sensor name - VOC 2
sensorNameVoc3 Sensor name - VOC 3
sensorNameVoc4 Sensor name - VOC 4
sensorNameVoc5 Sensor name - VOC 5
sensorNameVoc6 Sensor name - VOC 6
sensorNameVoc7 Sensor name - VOC 7
sensorNameVoc8 Sensor name - VOC 8
softwareVersionBasis Software version basis (format xx.xx)
sensorConfigKwlFtf1 Sensor configuration (installed or not) KWL-FTF 1 (OFF = no sensor, ON = sensor installed)
sensorConfigKwlFtf2 Sensor configuration (installed or not) KWL-FTF 2 (OFF = no sensor, ON = sensor installed)
sensorConfigKwlFtf3 Sensor configuration (installed or not) KWL-FTF 3 (OFF = no sensor, ON = sensor installed)
sensorConfigKwlFtf4 Sensor configuration (installed or not) KWL-FTF 4 (OFF = no sensor, ON = sensor installed)
sensorConfigKwlFtf5 Sensor configuration (installed or not) KWL-FTF 5 (OFF = no sensor, ON = sensor installed)
sensorConfigKwlFtf6 Sensor configuration (installed or not) KWL-FTF 6 (OFF = no sensor, ON = sensor installed)
sensorConfigKwlFtf7 Sensor configuration (installed or not) KWL-FTF 7 (OFF = no sensor, ON = sensor installed)
sensorConfigKwlFtf8 Sensor configuration (installed or not) KWL-FTF 8 (OFF = no sensor, ON = sensor installed)

# Errors / Warnings / Infos

Errors, warnings and infos of the device are provided in a bit encoded way. I.e. each bit in a 8 bit or 32 bit variable encodes potentially multiple errors, warnings or infos. Also status flags are provided this way. For details please refer to the manufacturer's specification (opens new window).

Based on that concept, errors, warnings and infos are provided in 3 different ways:

  • As an unsigned integer value with the decimal representation of the encoded bits
  • The total number of encoded errors, warning or infos
  • The bit encoded as a string

Since there can potentially be several errors, warnings or infos, using a simple MAP to display the corresponding message in a UI will not work in all cases. String items with multiple lines will not display properly in the UIs. Therefore the binding provides actions to retrieve the different messages as an ArrayList<String> object which can then be used to e.g. send the messages via email.

# Full Example

# Thing Configuration

Bridge modbus:tcp:modbus-gateway "Modbus TCP/IP Gateway" [ host="192.168.47.11", port=502, id=180, enableDiscovery=true ] {
    Thing helios-easycontrols kwl "KWL"
}

# Item Configuration

// Manual operation
Number KWL_Manual                        "Manual operation"                          <fan>         (gKWL) ["Control"]                    {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#operatingMode"}
Number KWL_Stage                         "KWL fan stage"                             <fan>         (gKWL) ["Setpoint", "Level"]          {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#fanStage"}
Number:Dimensionless KWL_Stage_Percent   "KWL fan stage [%d %unit%]"                 <fan>         (gKWL) ["Status", "Level"]            {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#percentageFanStage"}

// Party mode
Switch KWL_Party_Mode                    "Party mode"                                <parents>     (gKWL) ["Control"]                    {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeStatus"}
Number:Time KWL_Party_Mode_Duration      "Party mode duration [%d %unit%]"           <clock>       (gKWL) ["Setpoint", "Duration"]       {unit="min", channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeDuration"}
Number KWL_Party_Mode_Stage              "Party mode fan stage"                      <fan>         (gKWL) ["Setpoint", "Level"]          {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeFanStage"}
Number:Time KWL_Party_Mode_Remaining     "Party mode remaining time [%d %unit%]"     <clock>       (gKWL) ["Status", "Duration"]         {unit="min", channel="modbus:helios-ventilation-easycontrols:modbus-gateway:kwl:operation#partyModeRemainingTime"}

// Standby mode
Switch KWL_Standby_Mode                  "Standby mode"                              <fan_off>     (gKWL) ["Control"]                    {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeStatus"}
Number:Time KWL_Standby_Mode_Duration    "Standby mode duration [%d %unit%]"         <clock>       (gKWL) ["Setpoint", "Duration"]       {unit="min", channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeDuration"}
Number KWL_Standby_Mode_Stage            "Standby mode fan stage"                    <fan>         (gKWL) ["Setpoint", "Level"]          {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeFanStage"}
Number:Time KWL_Standby_Mode_Remaining   "Standby mode remaining time [%d %unit%]"   <clock>       (gKWL) ["Status", "Duration"]         {unit="min", channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeRemainingTime"}

// Status infos
Number:Temperature KWL_Temp_Outide_Air   "Temperature outside air [%.1f °C]"         <temperature> (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureOutsideAir"}
Number:Temperature KWL_Temp_Supply_Air   "Temperature supply air [%.1f °C]"          <temperature> (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureSupplyAir"}
Number:Temperature KWL_Temp_Outgoing_Air "Temperature outgoing air [%.1f °C]"        <temperature> (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureOutgoingAir"}
Number:Temperature KWL_Temp_Extract_Air  "Temperature extract air [%.1f °C]"         <temperature> (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureExtractAir"}
Number KWL_Supply_Air_RPM                "RPM supply air [%d]"                       <fan>         (gKWL) ["Measurement", "Property"]    {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#supplyAirRpm"}
Number KWL_Extract_Air_RPM               "RPM extract air [%d]"                      <fan>         (gKWL) ["Measurement", "Property"]    {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#extractAirRpm"}
Number KWL_Filter_Change                 "Filter change [MAP(helios_yes_no.map):%s]" <none>        (gKWL) ["Status"]                     {channel="modbus:helios-easycontrols:modbus-gateway:kwl:unitConfig#filterChange"}
Number:Time KWL_Filter_Change_Remaining  "Filter change [%d %unit%]"                 <clock>       (gKWL) ["Status", "Duration"]         {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#filterChangeRemainingTime"}

Number KWL_Errors                        "Number errors [%d]"                        <error>       (gKWL) ["Status"]                     {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfErrors"}
String KWL_Errors_String                 "Error messages [%s]"                       <error>       (gKWL) ["Status"]                     {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#errorsMsg"}
Number KWL_Warnings                      "Number warnings [%d]"                      <warning>     (gKWL) ["Status"]                     {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfWarnings"}
String KWL_Warnings_String               "Warning messages [%s]"                     <warning>     (gKWL) ["Status"]                     {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#warningsMsg"}
Number KWL_Infos                         "Number infos [%d]"                         <info>        (gKWL) ["Status"]                     {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfInfos"}
String KWL_Infos_String                  "Info messages [%s]"                        <info>        (gKWL) ["Status"]                     {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#infosMsg"}
String KWL_Status_Flags                  "Status Flags [%s]"                         <info>        (gKWL) ["Status"]                     {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#statusFlags"}

# Rule

import java.util.List
import java.util.Map

rule "Reset filter change remaining time"
    when
        Item Rem_KWL_Filter received command OFF
    then
        val kwlActions = getActions("modbus.helioseasycontrols", "modbus:helios-easycontrols:modbus-gateway:kwl")
        kwlActions.resetFilterChangeTimer()
end


rule "Log KWL messages"
    when
        Item KWL_Errors_String changed or
        Item KWL_Warnings_String changed or
        Item KWL_Infos_String changed or
        KWL_Status_Flags changed
    then
        val kwlActions = getActions("modbus.helioseasycontrols", "modbus:helios-easycontrols:modbus-gateway:kwl")
        val Map<String, List<String>> msg = kwlActions.getMessages
        logInfo("KWL Error Messages", msg.get("errorMessages").toString)
        logInfo("KWL Warning Messages", msg.get("warningMessages").toString)
        logInfo("KWL Info Messages", msg.get("infoMessages").toString)
        logInfo("KWL Status Messages", msg.get("statusMessages").toString)
end

# Transformation

0=no
1=yes
OFF=no
ON=yes
-=-
NULL=-

# Sitemap

Text label="KWL" icon="fan" {
    Frame label="Manual operation" {
        Selection item=KWL_Manual mappings=[0=Auto, 1=Manual]
        Selection item=KWL_Stage mappings=[0=off, 1="Stage 1", 2="Stage 2", 3="Stage 3", 4="Stage 4"]
        Text item=KWL_Stage_Percent
    }

    Frame label="Party mode" {
        Switch item=KWL_Party_Mode mappings=[OFF=off, ON=on]
        Selection item=KWL_Party_Mode_Stage mappings=[0=off, 1="Stage 1", 2="Stage 2", 3="Stage 3", 4="Stage 4"]
        Selection item=KWL_Standby_Mode_Duration mappings=[60="60 Minutes", 120="120 Minutes", 180="180 Minutes", 240="240 Minutes"]
        Text item=KWL_Party_Mode_Remaining
    }

    Frame label="Standby mode" {
        Switch item=KWL_Standby_Mode mappings=[OFF=Aus, ON=Ein]
        Selection item=KWL_Standby_Mode_Stage mappings=[0=off, 1="Stage 1", 2="Stage 2", 3="Stage 3", 4="Stage 4"]
        Selection item=KWL_Standby_Mode_Duration mappings=[60="60 Minutes", 120="120 Minutes", 180="180 Minutes", 240="240 Minutes"]
        Text item=KWL_Standby_Mode_Remaining
    }

    Frame label="Status infos" {
        Text item=KWL_Temp_Outide_Air
        Text item=KWL_Temp_Supply_Air
        Text item=KWL_Temp_Outgoing_Air
        Text item=KWL_Temp_Extract_Air
        Text item=KWL_Supply_Air_RPM
        Text item=KWL_Extract_Air_RPM
        Text item=KWL_Filter_Change
        Text item=KWL_Filter_Change_Remaining
        Text item=KWL_Errors_String
        Text item=KWL_Warnings_String
        Text item=KWL_Infos_String
        Text item=KWL_Datum
        Text item=KWL_Zeit
    }
}