From: Bernhard Bauer Date: Sat, 6 Feb 2021 16:19:01 +0000 (+0100) Subject: [helioseasycontrols] Internationalization + actions for messages - Attempt 2 (#9772) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=e04cf82c10383b928f476b1d454500bd4196da65;p=openhab-addons.git [helioseasycontrols] Internationalization + actions for messages - Attempt 2 (#9772) * Internationalization + actions for messages - Internationalization of UI relevant texts - Better support for the error/warning/info/status messages received from the device Signed-off-by: Bernhard Bauer * Review inputs + improvements - inputs from @ssalonen - additional action to retrieve all messages collectively - added rule example for handling the collective message action - added semantic tags in items example Signed-off-by: Bernhard Bauer * mvn spotless:apply Signed-off-by: Bernhard Bauer * Update bundles/org.openhab.binding.modbus.helioseasycontrols/README.md Co-authored-by: Fabian Wolter Signed-off-by: Bernhard Bauer * Update bundles/org.openhab.binding.modbus.helioseasycontrols/README.md Co-authored-by: Fabian Wolter Signed-off-by: Bernhard Bauer * Update bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsHandler.java Co-authored-by: Fabian Wolter Signed-off-by: Bernhard Bauer * Update bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/helioseasycontrols_de.properties Co-authored-by: Fabian Wolter Signed-off-by: Bernhard Bauer * Update bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/thing/thing-types.xml Co-authored-by: Fabian Wolter Signed-off-by: Bernhard Bauer * Review inputs from @fwolter Signed-off-by: Bernhard Bauer * Inputs from @fwolter - changed return type for actions with a single return value - corrected findings from static code analysis Signed-off-by: Bernhard Bauer * Removed configurationPid from TranslationProvider Signed-off-by: Bernhard Bauer * Changes requested by @fwolter Signed-off-by: Bernhard Bauer * Changed log level to debug when catching InterruptedException Signed-off-by: Bernhard Bauer Co-authored-by: Fabian Wolter --- diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/README.md b/bundles/org.openhab.binding.modbus.helioseasycontrols/README.md index 78e7a3d9a9..5f25202630 100644 --- a/bundles/org.openhab.binding.modbus.helioseasycontrols/README.md +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/README.md @@ -1,7 +1,7 @@ # 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 https://www.easycontrols.net/de/service/downloads/send/4-software/16-modbus-dokumentation-f%C3%BCr-kwl-easycontrols-ger%C3%A4te for the corresponding specification. +See the corresponding [specification](https://www.easycontrols.net/de/service/downloads/send/4-software/16-modbus-dokumentation-f%C3%BCr-kwl-easycontrols-ger%C3%A4te). ## Supported Things @@ -116,16 +116,16 @@ The following channels are supported: | 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 (0 - 2^32-1) | Number | R | -| warnings | general | Warnings as integer value (0 - 2^32-1) | Number | R | -| infos | general | Infos as integer value (0 - 2^32-1) | Number | R | -| noOfErrors | general | Number of bit-coded errors (0 - 32) | Number | R | -| noOfWarnings | general | Number of bit-coded warnings (0 - 8) | Number | R | -| noOfInfos | general | Number of bit-coded infos (0 - 8) | Number | R | -| errorsMsg | general | Errors as string | String | R | -| warningsMsg | general | Warnings as string | String | R | -| infosMsg | general | Infos as string | String | R | -| statusFlags | general | Status flags | String | R | +| errors | general | Errors as integer value (see [Errors / Warnings / Infos](#errors-warnings-infos)) (0 - 2^32-1) | Number | R | +| warnings | general | Warnings as integer value (see [Errors / Warnings / Infos](#errors-warnings-infos)) (0 - 2^32-1) | Number | R | +| infos | general | Infos as integer value (see [Errors / Warnings / Infos](#errors-warnings-infos)) (0 - 2^32-1) | Number | R | +| noOfErrors | general | Number of bit-coded errors (see [Errors / Warnings / Infos](#errors-warnings-infos)) (0 - 32) | Number | R | +| noOfWarnings | general | Number of bit-coded warnings (see [Errors / Warnings / Infos](#errors-warnings-infos)) (0 - 8) | Number | R | +| noOfInfos | general | Number of bit-coded infos (see [Errors / Warnings / Infos](#errors-warnings-infos)) (0 - 8) | Number | R | +| errorsMsg | general | Errors as string (see [Errors / Warnings / Infos](#errors-warnings-infos)) | String | R | +| warningsMsg | general | Warnings as string (see [Errors / Warnings / Infos](#errors-warnings-infos)) | String | R | +| infosMsg | general | Infos as string (see [Errors / Warnings / Infos](#errors-warnings-infos)) | String | R | +| statusFlags | general | Status flags (see [Errors / Warnings / Infos](#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 | @@ -183,6 +183,7 @@ 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 @@ -192,10 +193,59 @@ 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 getErrorMessages() +``` + +*Return values:* + +* *errorMessages:* A `List` object containing all error messages + + +``` +public Map getWarningMessages() +``` + +*Return values:* + +* *warningMessages:* A `List` object containing all warning messages + + +``` +public Map getInfoMessages() +``` + +*Return values:* + +* *infoMessages:* A `List` object containing all info messages + + +``` +public Map getStatusMessages() +``` + +*Return values:* + +* *statusMessages:* A `List` object containing all status messages + + +``` +public Map getMessages() +``` + +*Return values:* + +* *errorMessages:* A `List` object containing all error messages +* *warningMessages:* A `List` object containing all warning messages +* *infoMessages:* A `List` object containing all info messages +* *statusMessages:* A `List` object containing all status messages + + ## Properties The binding provides the following properties: @@ -277,6 +327,21 @@ The binding provides the following properties: | 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](https://www.easycontrols.net/de/service/downloads/send/4-software/16-modbus-dokumentation-f%C3%BCr-kwl-easycontrols-ger%C3%A4te). + +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` object which can then be used to e.g. send the messages via email. + + ## Full Example ### Thing Configuration @@ -291,50 +356,71 @@ Bridge modbus:tcp:modbus-gateway "Modbus TCP/IP Gateway" [ host="192.168.47.11", ``` // Manual operation -Number KWL_Manual "Manual operation" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#operatingMode"} -Number KWL_Stage "KWL fan stage" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#fanStage"} -Number:Dimensionless KWL_Stage_Percent "KWL fan stage [%d %unit%]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#percentageFanStage"} +Number KWL_Manual "Manual operation" (gKWL) ["Control"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#operatingMode"} +Number KWL_Stage "KWL fan stage" (gKWL) ["Setpoint", "Level"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#fanStage"} +Number:Dimensionless KWL_Stage_Percent "KWL fan stage [%d %unit%]" (gKWL) ["Status", "Level"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#percentageFanStage"} // Party mode -Switch KWL_Party_Mode "Party mode" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeStatus"} -Number:Time KWL_Party_Mode_Duration "Party mode duration [%d %unit%]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeDuration"} -Number KWL_Party_Mode_Stage "Party mode fan stage" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeFanStage"} -Number:Time KWL_Party_Mode_Remaining "Party mode remaining time [%d %unit%]" (gKWL) {channel="modbus:helios-ventilation-easycontrols:modbus-gateway:kwl:operation#partyModeRemainingTime"} +Switch KWL_Party_Mode "Party mode" (gKWL) ["Control"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeStatus"} +Number:Time KWL_Party_Mode_Duration "Party mode duration [%d %unit%]" (gKWL) ["Setpoint", "Duration"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeDuration"} +Number KWL_Party_Mode_Stage "Party mode fan stage" (gKWL) ["Setpoint", "Level"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeFanStage"} +Number:Time KWL_Party_Mode_Remaining "Party mode remaining time [%d %unit%]" (gKWL) ["Status", "Duration"] {channel="modbus:helios-ventilation-easycontrols:modbus-gateway:kwl:operation#partyModeRemainingTime"} // Standby mode -Switch KWL_Standby_Mode "Standby mode" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeStatus"} -Number:Time KWL_Standby_Mode_Duration "Standby mode duration [%d %unit%]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeDuration"} -Number KWL_Standby_Mode_Stage "Standby mode fan stage" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeFanStage"} -Number:Time KWL_Standby_Mode_Remaining "Standby mode remaining time [%d %unit%]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeRemainingTime"} +Switch KWL_Standby_Mode "Standby mode" (gKWL) ["Control"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeStatus"} +Number:Time KWL_Standby_Mode_Duration "Standby mode duration [%d %unit%]" (gKWL) ["Setpoint", "Duration"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeDuration"} +Number KWL_Standby_Mode_Stage "Standby mode fan stage" (gKWL) ["Setpoint", "Level"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeFanStage"} +Number:Time KWL_Standby_Mode_Remaining "Standby mode remaining time [%d %unit%]" (gKWL) ["Status", "Duration"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeRemainingTime"} // Status infos -Number:Temperature KWL_Temp_Outide_Air "Temperature outside air [%.1f °C]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureOutsideAir"} -Number:Temperature KWL_Temp_Supply_Air "Temperature supply air [%.1f °C]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureSupplyAir"} -Number:Temperature KWL_Temp_Outgoing_Air "Temperature outgoing air [%.1f °C]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureOutgoingAir"} -Number:Temperature KWL_Temp_Extract_Air "Temperature extract air [%.1f °C]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureExtractAir"} -Number KWL_Supply_Air_RPM "RPM supply air [%d]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#supplyAirRpm"} -Number KWL_Extract_Air_RPM "RPM extract air [%d]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#extractAirRpm"} -Number KWL_Filter_Change "Filter change [MAP(helios_yes_no.map):%s]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:unitConfig#filterChange"} -Number:Time KWL_Filter_Change_Remaining "Filter change [%d %unit%]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#filterChangeRemainingTime"} - -Number KWL_Errors "Number errors [%d]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfErrors"} -String KWL_Errors_String "Error messages [%s]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#errorsMsg"} -Number KWL_Warnings "Number warnings [%d]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfWarnings"} -String KWL_Warnings_String "Warning messages [%s]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#warningsMsg"} -Number KWL_Infos "Number infos [%d]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfInfos"} -String KWL_Infos_String "Info messages [%s]" (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#infosMsg"} +Number:Temperature KWL_Temp_Outide_Air "Temperature outside air [%.1f °C]" (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureOutsideAir"} +Number:Temperature KWL_Temp_Supply_Air "Temperature supply air [%.1f °C]" (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureSupplyAir"} +Number:Temperature KWL_Temp_Outgoing_Air "Temperature outgoing air [%.1f °C]" (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureOutgoingAir"} +Number:Temperature KWL_Temp_Extract_Air "Temperature extract air [%.1f °C]" (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureExtractAir"} +Number KWL_Supply_Air_RPM "RPM supply air [%d]" (gKWL) ["Measurement", "Property"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#supplyAirRpm"} +Number KWL_Extract_Air_RPM "RPM extract air [%d]" (gKWL) ["Measurement", "Property"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#extractAirRpm"} +Number KWL_Filter_Change "Filter change [MAP(helios_yes_no.map):%s]" (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:unitConfig#filterChange"} +Number:Time KWL_Filter_Change_Remaining "Filter change [%d %unit%]" (gKWL) ["Status", "Duration"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#filterChangeRemainingTime"} + +Number KWL_Errors "Number errors [%d]" (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfErrors"} +String KWL_Errors_String "Error messages [%s]" (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#errorsMsg"} +Number KWL_Warnings "Number warnings [%d]" (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfWarnings"} +String KWL_Warnings_String "Warning messages [%s]" (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#warningsMsg"} +Number KWL_Infos "Number infos [%d]" (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfInfos"} +String KWL_Infos_String "Info messages [%s]" (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#infosMsg"} +String KWL_Status_Flags "Status Flags [%s]" (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#statusFlags"} ``` ### Rule ``` -rule "Rest filter change remaining time" +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> 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 diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsActions.java b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsActions.java index e738b85407..e2ea969abe 100644 --- a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsActions.java +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsActions.java @@ -12,9 +12,15 @@ */ package org.openhab.binding.modbus.helioseasycontrols.internal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.core.automation.annotation.ActionInput; +import org.openhab.core.automation.annotation.ActionOutput; import org.openhab.core.automation.annotation.RuleAction; import org.openhab.core.thing.binding.ThingActions; import org.openhab.core.thing.binding.ThingActionsScope; @@ -48,14 +54,19 @@ public class HeliosEasyControlsActions implements ThingActions { private void triggerSwitch(String variableName) { try { if (handler != null) { + handler.writeValue(variableName, "1"); } } catch (HeliosException e) { logger.warn("Error executing action triggering switch for variable {}: {}", variableName, e.getMessage()); + } catch (InterruptedException e) { + logger.debug( + "{} encountered Exception when trying to lock Semaphore for writing variable {} to the device: {}", + HeliosEasyControlsActions.class.getSimpleName(), variableName, e.getMessage()); } } - @RuleAction(label = "reset filter change timer", description = "Sets the filter change timer back to the configured interval.") + @RuleAction(label = "@text/action.resetFilterChangeTimer.label", description = "@text/action.resetFilterChangeTimer.description") public void resetFilterChangeTimer() { triggerSwitch(HeliosEasyControlsBindingConstants.FILTER_CHANGE_RESET); } @@ -64,7 +75,7 @@ public class HeliosEasyControlsActions implements ThingActions { ((HeliosEasyControlsActions) actions).resetFilterChangeTimer(); } - @RuleAction(label = "reset error messages", description = "Reset error/warning/info messages.") + @RuleAction(label = "@text/action.resetErrors.label", description = "@text/action.resetErrors.description") public void resetErrors() { triggerSwitch(HeliosEasyControlsBindingConstants.RESET_FLAG); } @@ -73,7 +84,7 @@ public class HeliosEasyControlsActions implements ThingActions { ((HeliosEasyControlsActions) actions).resetErrors(); } - @RuleAction(label = "reset to factory defaults", description = "Reset device to factory defaults.") + @RuleAction(label = "@text/action.resetToFactoryDefaults.label", description = "@text/action.resetToFactoryDefaults.description") public void resetToFactoryDefaults() { triggerSwitch(HeliosEasyControlsBindingConstants.FACTORY_RESET); } @@ -82,7 +93,7 @@ public class HeliosEasyControlsActions implements ThingActions { ((HeliosEasyControlsActions) actions).resetToFactoryDefaults(); } - @RuleAction(label = "reset individual switching times", description = "Reset individual switching times.") + @RuleAction(label = "@text/action.resetSwitchingTimes.label", description = "@text/action.resetSwitchingTimes.description") public void resetSwitchingTimes() { triggerSwitch(HeliosEasyControlsBindingConstants.FACTORY_SETTING_WZU); } @@ -91,11 +102,17 @@ public class HeliosEasyControlsActions implements ThingActions { ((HeliosEasyControlsActions) actions).resetSwitchingTimes(); } - @RuleAction(label = "set system date and time", description = "Sets the device's system date and time based on OH's system date and time.") + @RuleAction(label = "@text/action.setSysDateTime.label", description = "@text/action.setSysDateTime.description") public void setSysDateTime() { HeliosEasyControlsHandler handler = this.handler; if (handler != null) { - handler.setSysDateTime(); + try { + handler.setSysDateTime(); + } catch (InterruptedException e) { + logger.debug( + "{} encountered Exception when trying to lock Semaphore for setting system date and time on the device: {}", + HeliosEasyControlsActions.class.getSimpleName(), e.getMessage()); + } } } @@ -106,14 +123,20 @@ public class HeliosEasyControlsActions implements ThingActions { private void setBypass(boolean from, int day, int month) { HeliosEasyControlsHandler handler = this.handler; if (handler != null) { - handler.setBypass(from, day, month); + try { + handler.setBypass(from, day, month); + } catch (InterruptedException e) { + logger.debug( + "{} encountered Exception when trying to lock Semaphore for setting bypass date on the device: {}", + HeliosEasyControlsActions.class.getSimpleName(), e.getMessage()); + } } } - @RuleAction(label = "set the bypass from day and month", description = "Sets the day and month from when the bypass should be active.") + @RuleAction(label = "@text/action.setBypassFrom.label", description = "@text/action.setBypassFrom.description") public void setBypassFrom( - @ActionInput(name = "day", label = "bypass from day", description = "The day from when the bypass should be active") int day, - @ActionInput(name = "month", label = "bypass from month", description = "The month from when the bypass should be active") int month) { + @ActionInput(name = "day", label = "@text/action.setBypassFrom.inputParams.day.label", description = "@text/action.setBypassFrom.inputParams.day.description") int day, + @ActionInput(name = "month", label = "@text/action.setBypassFrom.inputParams.month.label", description = "@text/action.setBypassFrom.inputParams.month.description") int month) { setBypass(true, day, month); } @@ -121,14 +144,67 @@ public class HeliosEasyControlsActions implements ThingActions { ((HeliosEasyControlsActions) actions).setBypassFrom(day, month); } - @RuleAction(label = "set the bypass to day and month", description = "Sets the day and month until when the bypass should be active.") + @RuleAction(label = "@text/action.setBypassTo.label", description = "@text/action.setBypassTo.description") public void setBypassTo( - @ActionInput(name = "day", label = "bypass to day", description = "The day until when the bypass should be active") int day, - @ActionInput(name = "month", label = "bypass to month", description = "The month until when the bypass should be active") int month) { + @ActionInput(name = "day", label = "@text/action.setBypassTo.inputParams.day.label", description = "@text/action.setBypassTo.inputParams.day.description") int day, + @ActionInput(name = "month", label = "@text/action.setBypassTo.inputParams.day.label", description = "@text/action.setBypassTo.inputParams.day.description") int month) { setBypass(false, day, month); } public static void setBypassTo(ThingActions actions, int day, int month) { ((HeliosEasyControlsActions) actions).setBypassTo(day, month); } + + @RuleAction(label = "@text/action.getErrorMessages.label", description = "@text/action.getErrorMessages.description") + public @ActionOutput(name = "errorMessages", type = "java.util.List") List getErrorMessages() { + return (handler != null) ? handler.getErrorMessages() : new ArrayList(); + } + + public static List getErrorMessages(ThingActions actions) { + return ((HeliosEasyControlsActions) actions).getErrorMessages(); + } + + @RuleAction(label = "@text/action.getWarningMessages.label", description = "@text/action.getWarningMessages.description") + public @ActionOutput(name = "warningMessages", type = "java.util.List") List getWarningMessages() { + return (handler != null) ? handler.getWarningMessages() : new ArrayList(); + } + + public static List getWarningMessages(ThingActions actions) { + return ((HeliosEasyControlsActions) actions).getWarningMessages(); + } + + @RuleAction(label = "@text/action.getInfoMessages.label", description = "@text/action.getInfoMessages.description") + public @ActionOutput(name = "infoMessages", type = "java.util.List") List getInfoMessages() { + return (handler != null) ? handler.getInfoMessages() : new ArrayList(); + } + + public static List getInfoMessages(ThingActions actions) { + return ((HeliosEasyControlsActions) actions).getInfoMessages(); + } + + @RuleAction(label = "@text/action.getStatusMessages.label", description = "@text/action.getStatusMessages.description") + public @ActionOutput(name = "statusMessages", type = "java.util.List") List getStatusMessages() { + return (handler != null) ? handler.getStatusMessages() : new ArrayList(); + } + + public static List getStatusMessages(ThingActions actions) { + return ((HeliosEasyControlsActions) actions).getStatusMessages(); + } + + @RuleAction(label = "@text/action.getMessages.label", description = "@text/action.getMessages.description") + public @ActionOutput(name = "errorMessages", type = "java.util.List") @ActionOutput(name = "warningMessages", type = "java.util.List") @ActionOutput(name = "infoMessages", type = "java.util.List") @ActionOutput(name = "statusMessages", type = "java.util.List") Map getMessages() { + Map messages = new HashMap<>(); + HeliosEasyControlsHandler handler = this.handler; + if (handler != null) { + messages.put("errorMessages", handler.getErrorMessages()); + messages.put("warningMessages", handler.getWarningMessages()); + messages.put("infoMessages", handler.getInfoMessages()); + messages.put("statusMessages", handler.getStatusMessages()); + } + return messages; + } + + public static Map getMessages(ThingActions actions) { + return ((HeliosEasyControlsActions) actions).getMessages(); + } } diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsBindingConstants.java b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsBindingConstants.java index 590d151a50..58e117cc0d 100644 --- a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsBindingConstants.java +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsBindingConstants.java @@ -37,239 +37,252 @@ public class HeliosEasyControlsBindingConstants { // List of all Channel IDs // ----------------------- // Device Config - public final static String SYS_DATE = "sysdate"; // for the combined item (based on DATE, TIME and + public static final String SYS_DATE = "sysdate"; // for the combined item (based on DATE, TIME and // TIME_ZONE_DIFFERENCE_TO_GMT) - public final static String DATE = "date"; - public final static String TIME = "time"; - public final static String TIME_ZONE_DIFFERENCE_TO_GMT = "timeZoneDifferenceToGmt"; - public final static String SUMMER_WINTER = "summerWinter"; - public final static String ACCESS_HELIOS_PORTAL = "accessHeliosPortal"; - public final static String AUTO_SW_UPDATE = "autoSwUpdate"; - public final static String MIN_FAN_STAGE = "minFanStage"; - public final static String COMFORT_TEMP = "comfortTemp"; - public final static String SUPPLY_AIR_FAN_STAGE = "supplyAirFanStage"; - public final static String EXTRACT_AIR_FAN_STAGE = "extractAirFanStage"; + public static final String DATE = "date"; + public static final String TIME = "time"; + public static final String TIME_ZONE_DIFFERENCE_TO_GMT = "timeZoneDifferenceToGmt"; + public static final String SUMMER_WINTER = "summerWinter"; + public static final String ACCESS_HELIOS_PORTAL = "accessHeliosPortal"; + public static final String AUTO_SW_UPDATE = "autoSwUpdate"; + public static final String MIN_FAN_STAGE = "minFanStage"; + public static final String COMFORT_TEMP = "comfortTemp"; + public static final String SUPPLY_AIR_FAN_STAGE = "supplyAirFanStage"; + public static final String EXTRACT_AIR_FAN_STAGE = "extractAirFanStage"; // Operation - public final static String PARTY_MODE_DURATION = "partyModeDuration"; - public final static String PARTY_MODE_FAN_STAGE = "partyModeFanStage"; - public final static String PARTY_MODE_REMAINING_TIME = "partyModeRemainingTime"; - public final static String PARTY_MODE_STATUS = "partyModeStatus"; - public final static String STANDBY_MODE_DURATION = "standbyModeDuration"; - public final static String STANDBY_MODE_FAN_STAGE = "standbyModeFanStage"; - public final static String STANDBY_MODE_REMAINING_TIME = "standbyModeRemainingTime"; - public final static String STANDBY_MODE_STATUS = "standbyModeStatus"; - public final static String HOLIDAY_PROGRAMME = "holidayProgramme"; - public final static String HOLIDAY_PROGRAMME_FAN_STAGE = "holidayProgrammeFanStage"; - public final static String HOLIDAY_PROGRAMME_START = "holidayProgrammeStart"; - public final static String HOLIDAY_PROGRAMME_END = "holidayProgrammeEnd"; - public final static String HOLIDAY_PROGRAMME_INTERVAL = "holidayProgrammeInterval"; - public final static String HOLIDAY_PROGRAMME_ACTIVATION_TIME = "holidayProgrammeActivationTime"; - public final static String OPERATING_MODE = "operatingMode"; - public final static String FAN_STAGE = "fanStage"; - public final static String PERCENTAGE_FAN_STAGE = "percentageFanStage"; - public final static String TEMPERATURE_OUTSIDE_AIR = "temperatureOutsideAir"; - public final static String TEMPERATURE_SUPPLY_AIR = "temperatureSupplyAir"; - public final static String TEMPERATURE_OUTGOING_AIR = "temperatureOutgoingAir"; - public final static String TEMPERATURE_EXTRACT_AIR = "temperatureExtractAir"; - public final static String VHZ_DUCT_SENSOR = "vhzDuctSensor"; - public final static String NHZ_DUCT_SENSOR = "nhzDuctSensor"; - public final static String NHZ_RETURN_SENSOR = "nhzReturnSensor"; - public final static String SUPPLY_AIR_RPM = "supplyAirRpm"; - public final static String EXTRACT_AIR_RPM = "extractAirRpm"; - public final static String OPERATING_HOURS_SUPPLY_AIR_VENT = "operatingHoursSupplyAirVent"; - public final static String OPERATING_HOURS_EXTRACT_AIR_VENT = "operatingHoursExtractAirVent"; + public static final String PARTY_MODE_DURATION = "partyModeDuration"; + public static final String PARTY_MODE_FAN_STAGE = "partyModeFanStage"; + public static final String PARTY_MODE_REMAINING_TIME = "partyModeRemainingTime"; + public static final String PARTY_MODE_STATUS = "partyModeStatus"; + public static final String STANDBY_MODE_DURATION = "standbyModeDuration"; + public static final String STANDBY_MODE_FAN_STAGE = "standbyModeFanStage"; + public static final String STANDBY_MODE_REMAINING_TIME = "standbyModeRemainingTime"; + public static final String STANDBY_MODE_STATUS = "standbyModeStatus"; + public static final String HOLIDAY_PROGRAMME = "holidayProgramme"; + public static final String HOLIDAY_PROGRAMME_FAN_STAGE = "holidayProgrammeFanStage"; + public static final String HOLIDAY_PROGRAMME_START = "holidayProgrammeStart"; + public static final String HOLIDAY_PROGRAMME_END = "holidayProgrammeEnd"; + public static final String HOLIDAY_PROGRAMME_INTERVAL = "holidayProgrammeInterval"; + public static final String HOLIDAY_PROGRAMME_ACTIVATION_TIME = "holidayProgrammeActivationTime"; + public static final String OPERATING_MODE = "operatingMode"; + public static final String FAN_STAGE = "fanStage"; + public static final String PERCENTAGE_FAN_STAGE = "percentageFanStage"; + public static final String TEMPERATURE_OUTSIDE_AIR = "temperatureOutsideAir"; + public static final String TEMPERATURE_SUPPLY_AIR = "temperatureSupplyAir"; + public static final String TEMPERATURE_OUTGOING_AIR = "temperatureOutgoingAir"; + public static final String TEMPERATURE_EXTRACT_AIR = "temperatureExtractAir"; + public static final String VHZ_DUCT_SENSOR = "vhzDuctSensor"; + public static final String NHZ_DUCT_SENSOR = "nhzDuctSensor"; + public static final String NHZ_RETURN_SENSOR = "nhzReturnSensor"; + public static final String SUPPLY_AIR_RPM = "supplyAirRpm"; + public static final String EXTRACT_AIR_RPM = "extractAirRpm"; + public static final String OPERATING_HOURS_SUPPLY_AIR_VENT = "operatingHoursSupplyAirVent"; + public static final String OPERATING_HOURS_EXTRACT_AIR_VENT = "operatingHoursExtractAirVent"; // Heater - public final static String PRE_HEATER_STATUS = "preHeaterStatus"; - public final static String WEEK_PROFILE_NHZ = "weekProfileNhz"; - public final static String RUN_ON_TIME_VHZ_NHZ = "runOnTimeVhzNhz"; - public final static String OPERATING_HOURS_VHZ = "operatingHoursVhz"; - public final static String OPERATING_HOURS_NHZ = "operatingHoursNhz"; - public final static String OUTPUT_POWER_VHZ = "outputPowerVhz"; - public final static String OUTPUT_POWER_NHZ = "outputPowerNhz"; + public static final String PRE_HEATER_STATUS = "preHeaterStatus"; + public static final String WEEK_PROFILE_NHZ = "weekProfileNhz"; + public static final String RUN_ON_TIME_VHZ_NHZ = "runOnTimeVhzNhz"; + public static final String OPERATING_HOURS_VHZ = "operatingHoursVhz"; + public static final String OPERATING_HOURS_NHZ = "operatingHoursNhz"; + public static final String OUTPUT_POWER_VHZ = "outputPowerVhz"; + public static final String OUTPUT_POWER_NHZ = "outputPowerNhz"; // Humidity control - public final static String HUMIDITY_CONTROL_SET_VALUE = "humidityControlSetValue"; - public final static String HUMIDITY_CONTROL_STEPS = "humidityControlSteps"; - public final static String HUMIDITY_STOP_TIME = "humidityStopTime"; - public final static String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_1 = "externalSensorKwlFtfHumidity1"; - public final static String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_2 = "externalSensorKwlFtfHumidity2"; - public final static String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_3 = "externalSensorKwlFtfHumidity3"; - public final static String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_4 = "externalSensorKwlFtfHumidity4"; - public final static String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_5 = "externalSensorKwlFtfHumidity5"; - public final static String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_6 = "externalSensorKwlFtfHumidity6"; - public final static String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_7 = "externalSensorKwlFtfHumidity7"; - public final static String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_8 = "externalSensorKwlFtfHumidity8"; - public final static String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_1 = "externalSensorKwlFtfTemperature1"; - public final static String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_2 = "externalSensorKwlFtfTemperature2"; - public final static String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_3 = "externalSensorKwlFtfTemperature3"; - public final static String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_4 = "externalSensorKwlFtfTemperature4"; - public final static String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_5 = "externalSensorKwlFtfTemperature5"; - public final static String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_6 = "externalSensorKwlFtfTemperature6"; - public final static String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_7 = "externalSensorKwlFtfTemperature7"; - public final static String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_8 = "externalSensorKwlFtfTemperature8"; + public static final String HUMIDITY_CONTROL_SET_VALUE = "humidityControlSetValue"; + public static final String HUMIDITY_CONTROL_STEPS = "humidityControlSteps"; + public static final String HUMIDITY_STOP_TIME = "humidityStopTime"; + public static final String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_1 = "externalSensorKwlFtfHumidity1"; + public static final String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_2 = "externalSensorKwlFtfHumidity2"; + public static final String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_3 = "externalSensorKwlFtfHumidity3"; + public static final String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_4 = "externalSensorKwlFtfHumidity4"; + public static final String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_5 = "externalSensorKwlFtfHumidity5"; + public static final String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_6 = "externalSensorKwlFtfHumidity6"; + public static final String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_7 = "externalSensorKwlFtfHumidity7"; + public static final String EXTERNAL_SENSOR_KWL_FTF_HUMIDITY_8 = "externalSensorKwlFtfHumidity8"; + public static final String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_1 = "externalSensorKwlFtfTemperature1"; + public static final String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_2 = "externalSensorKwlFtfTemperature2"; + public static final String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_3 = "externalSensorKwlFtfTemperature3"; + public static final String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_4 = "externalSensorKwlFtfTemperature4"; + public static final String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_5 = "externalSensorKwlFtfTemperature5"; + public static final String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_6 = "externalSensorKwlFtfTemperature6"; + public static final String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_7 = "externalSensorKwlFtfTemperature7"; + public static final String EXTERNAL_SENSOR_KWL_FTF_TEMPERATURE_8 = "externalSensorKwlFtfTemperature8"; // CO2 control - public final static String CO2_CONTROL_SET_VALUE = "co2ControlSetValue"; - public final static String CO2_CONTROL_STEPS = "co2ControlSteps"; - public final static String EXTERNAL_SENSOR_KWL_CO2_1 = "externalSensorKwlCo21"; - public final static String EXTERNAL_SENSOR_KWL_CO2_2 = "externalSensorKwlCo22"; - public final static String EXTERNAL_SENSOR_KWL_CO2_3 = "externalSensorKwlCo23"; - public final static String EXTERNAL_SENSOR_KWL_CO2_4 = "externalSensorKwlCo24"; - public final static String EXTERNAL_SENSOR_KWL_CO2_5 = "externalSensorKwlCo25"; - public final static String EXTERNAL_SENSOR_KWL_CO2_6 = "externalSensorKwlCo26"; - public final static String EXTERNAL_SENSOR_KWL_CO2_7 = "externalSensorKwlCo27"; - public final static String EXTERNAL_SENSOR_KWL_CO2_8 = "externalSensorKwlCo28"; - public final static String SENSOR_NAME_CO2_1 = "sensorNameCo21"; - public final static String SENSOR_NAME_CO2_2 = "sensorNameCo22"; - public final static String SENSOR_NAME_CO2_3 = "sensorNameCo23"; - public final static String SENSOR_NAME_CO2_4 = "sensorNameCo24"; - public final static String SENSOR_NAME_CO2_5 = "sensorNameCo25"; - public final static String SENSOR_NAME_CO2_6 = "sensorNameCo26"; - public final static String SENSOR_NAME_CO2_7 = "sensorNameCo27"; - public final static String SENSOR_NAME_CO2_8 = "sensorNameCo28"; + public static final String CO2_CONTROL_SET_VALUE = "co2ControlSetValue"; + public static final String CO2_CONTROL_STEPS = "co2ControlSteps"; + public static final String EXTERNAL_SENSOR_KWL_CO2_1 = "externalSensorKwlCo21"; + public static final String EXTERNAL_SENSOR_KWL_CO2_2 = "externalSensorKwlCo22"; + public static final String EXTERNAL_SENSOR_KWL_CO2_3 = "externalSensorKwlCo23"; + public static final String EXTERNAL_SENSOR_KWL_CO2_4 = "externalSensorKwlCo24"; + public static final String EXTERNAL_SENSOR_KWL_CO2_5 = "externalSensorKwlCo25"; + public static final String EXTERNAL_SENSOR_KWL_CO2_6 = "externalSensorKwlCo26"; + public static final String EXTERNAL_SENSOR_KWL_CO2_7 = "externalSensorKwlCo27"; + public static final String EXTERNAL_SENSOR_KWL_CO2_8 = "externalSensorKwlCo28"; + public static final String SENSOR_NAME_CO2_1 = "sensorNameCo21"; + public static final String SENSOR_NAME_CO2_2 = "sensorNameCo22"; + public static final String SENSOR_NAME_CO2_3 = "sensorNameCo23"; + public static final String SENSOR_NAME_CO2_4 = "sensorNameCo24"; + public static final String SENSOR_NAME_CO2_5 = "sensorNameCo25"; + public static final String SENSOR_NAME_CO2_6 = "sensorNameCo26"; + public static final String SENSOR_NAME_CO2_7 = "sensorNameCo27"; + public static final String SENSOR_NAME_CO2_8 = "sensorNameCo28"; // VOC control - public final static String VOC_CONTROL_SET_VALUE = "vocControlSetValue"; - public final static String VOC_CONTROL_STEPS = "vocControlSteps"; - public final static String EXTERNAL_SENSOR_KWL_VOC_1 = "externalSensorKwlVoc1"; - public final static String EXTERNAL_SENSOR_KWL_VOC_2 = "externalSensorKwlVoc2"; - public final static String EXTERNAL_SENSOR_KWL_VOC_3 = "externalSensorKwlVoc3"; - public final static String EXTERNAL_SENSOR_KWL_VOC_4 = "externalSensorKwlVoc4"; - public final static String EXTERNAL_SENSOR_KWL_VOC_5 = "externalSensorKwlVoc5"; - public final static String EXTERNAL_SENSOR_KWL_VOC_6 = "externalSensorKwlVoc6"; - public final static String EXTERNAL_SENSOR_KWL_VOC_7 = "externalSensorKwlVoc7"; - public final static String EXTERNAL_SENSOR_KWL_VOC_8 = "externalSensorKwlVoc8"; - public final static String SENSOR_NAME_VOC_1 = "sensorNameVoc1"; - public final static String SENSOR_NAME_VOC_2 = "sensorNameVoc2"; - public final static String SENSOR_NAME_VOC_3 = "sensorNameVoc3"; - public final static String SENSOR_NAME_VOC_4 = "sensorNameVoc4"; - public final static String SENSOR_NAME_VOC_5 = "sensorNameVoc5"; - public final static String SENSOR_NAME_VOC_6 = "sensorNameVoc6"; - public final static String SENSOR_NAME_VOC_7 = "sensorNameVoc7"; - public final static String SENSOR_NAME_VOC_8 = "sensorNameVoc8"; + public static final String VOC_CONTROL_SET_VALUE = "vocControlSetValue"; + public static final String VOC_CONTROL_STEPS = "vocControlSteps"; + public static final String EXTERNAL_SENSOR_KWL_VOC_1 = "externalSensorKwlVoc1"; + public static final String EXTERNAL_SENSOR_KWL_VOC_2 = "externalSensorKwlVoc2"; + public static final String EXTERNAL_SENSOR_KWL_VOC_3 = "externalSensorKwlVoc3"; + public static final String EXTERNAL_SENSOR_KWL_VOC_4 = "externalSensorKwlVoc4"; + public static final String EXTERNAL_SENSOR_KWL_VOC_5 = "externalSensorKwlVoc5"; + public static final String EXTERNAL_SENSOR_KWL_VOC_6 = "externalSensorKwlVoc6"; + public static final String EXTERNAL_SENSOR_KWL_VOC_7 = "externalSensorKwlVoc7"; + public static final String EXTERNAL_SENSOR_KWL_VOC_8 = "externalSensorKwlVoc8"; + public static final String SENSOR_NAME_VOC_1 = "sensorNameVoc1"; + public static final String SENSOR_NAME_VOC_2 = "sensorNameVoc2"; + public static final String SENSOR_NAME_VOC_3 = "sensorNameVoc3"; + public static final String SENSOR_NAME_VOC_4 = "sensorNameVoc4"; + public static final String SENSOR_NAME_VOC_5 = "sensorNameVoc5"; + public static final String SENSOR_NAME_VOC_6 = "sensorNameVoc6"; + public static final String SENSOR_NAME_VOC_7 = "sensorNameVoc7"; + public static final String SENSOR_NAME_VOC_8 = "sensorNameVoc8"; // Errors - public final static String ERROR_OUTPUT_FUNCTION = "errorOutputFunction"; - public final static String ERRORS = "errors"; - public final static String WARNINGS = "warnings"; - public final static String INFOS = "infos"; - public final static String NO_OF_ERRORS = "noOfErrors"; - public final static String NO_OF_WARNINGS = "noOfWarnings"; - public final static String NO_OF_INFOS = "noOfInfos"; - public final static String ERRORS_MSG = "errorsMsg"; - public final static String WARNINGS_MSG = "warningsMsg"; - public final static String INFOS_MSG = "infosMsg"; - public final static String STATUS_FLAGS = "statusFlags"; + public static final String ERROR_OUTPUT_FUNCTION = "errorOutputFunction"; + public static final String ERRORS = "errors"; + public static final String WARNINGS = "warnings"; + public static final String INFOS = "infos"; + public static final String NO_OF_ERRORS = "noOfErrors"; + public static final String NO_OF_WARNINGS = "noOfWarnings"; + public static final String NO_OF_INFOS = "noOfInfos"; + public static final String ERRORS_MSG = "errorsMsg"; + public static final String WARNINGS_MSG = "warningsMsg"; + public static final String INFOS_MSG = "infosMsg"; + public static final String STATUS_FLAGS = "statusFlags"; // Filter - public final static String FILTER_CHANGE = "filterChange"; - public final static String FILTER_CHANGE_INTERVAL = "filterChangeInterval"; - public final static String FILTER_CHANGE_REMAINING_TIME = "filterChangeRemainingTime"; + public static final String FILTER_CHANGE = "filterChange"; + public static final String FILTER_CHANGE_INTERVAL = "filterChangeInterval"; + public static final String FILTER_CHANGE_REMAINING_TIME = "filterChangeRemainingTime"; // Bypass - public final static String BYPASS_ROOM_TEMPERATURE = "bypassRoomTemperature"; - public final static String BYPASS_MIN_OUTSIDE_TEMPERATURE = "bypassMinOutsideTemperature"; - public final static String BYPASS_STATUS = "bypassStatus"; - public final static String BYPASS_FROM = "bypassFrom"; // for the combined item (based on BYPASS_FROM_DAY and + public static final String BYPASS_ROOM_TEMPERATURE = "bypassRoomTemperature"; + public static final String BYPASS_MIN_OUTSIDE_TEMPERATURE = "bypassMinOutsideTemperature"; + public static final String BYPASS_STATUS = "bypassStatus"; + public static final String BYPASS_FROM = "bypassFrom"; // for the combined item (based on BYPASS_FROM_DAY and // BYPASS_FROM_MONTH) - public final static String BYPASS_FROM_DAY = "bypassFromDay"; - public final static String BYPASS_FROM_MONTH = "bypassFromMonth"; - public final static String BYPASS_TO = "bypassTo"; // for the combined item (based on BYPASS_TO_DAY and + public static final String BYPASS_FROM_DAY = "bypassFromDay"; + public static final String BYPASS_FROM_MONTH = "bypassFromMonth"; + public static final String BYPASS_TO = "bypassTo"; // for the combined item (based on BYPASS_TO_DAY and // BYPASS_TO_MONTH) - public final static String BYPASS_TO_DAY = "bypassToDay"; - public final static String BYPASS_TO_MONTH = "bypassToMonth"; + public static final String BYPASS_TO_DAY = "bypassToDay"; + public static final String BYPASS_TO_MONTH = "bypassToMonth"; // List of all Properties // ---------------------- // Device Config - public final static String ARTICLE_DESCRIPTION = "articleDescription"; - public final static String REF_NO = "refNo"; - public final static String SER_NO = "serNo"; - public final static String PROD_CODE = "prodCode"; - public final static String MAC_ADDRESS = "macAddress"; - public final static String SOFTWARE_VERSION_BASIS = "softwareVersionBasis"; - public final static String DATE_FORMAT = "dateFormat"; - public final static String LANGUAGE = "language"; - public final static String UNIT_CONFIG = "unitConfig"; - public final static String KWL_BE = "kwlBe"; - public final static String KWL_BEC = "kwlBec"; - public final static String EXTERNAL_CONTACT = "externalContact"; - public final static String FUNCTION_TYPE_KWL_EM = "functionTypeKwlEm"; - public final static String HEAT_EXCHANGER_TYPE = "heatExchangerType"; - public final static String OFFSET_EXTRACT_AIR = "offsetExtractAir"; - public final static String ASSIGNMENT_FAN_STAGES = "assignmentFanStages"; - public final static String VOLTAGE_FAN_STAGE_1_EXTRACT_AIR = "voltageFanStage1ExtractAir"; - public final static String VOLTAGE_FAN_STAGE_2_EXTRACT_AIR = "voltageFanStage2ExtractAir"; - public final static String VOLTAGE_FAN_STAGE_3_EXTRACT_AIR = "voltageFanStage3ExtractAir"; - public final static String VOLTAGE_FAN_STAGE_4_EXTRACT_AIR = "voltageFanStage4ExtractAir"; - public final static String VOLTAGE_FAN_STAGE_1_SUPPLY_AIR = "voltageFanStage1SupplyAir"; - public final static String VOLTAGE_FAN_STAGE_2_SUPPLY_AIR = "voltageFanStage2SupplyAir"; - public final static String VOLTAGE_FAN_STAGE_3_SUPPLY_AIR = "voltageFanStage3SupplyAir"; - public final static String VOLTAGE_FAN_STAGE_4_SUPPLY_AIR = "voltageFanStage4SupplyAir"; - public final static String FAN_STAGE_STEPPED_0TO2V = "fanStageStepped0to2v"; - public final static String FAN_STAGE_STEPPED_2TO4V = "fanStageStepped2to4v"; - public final static String FAN_STAGE_STEPPED_4TO6V = "fanStageStepped4to6v"; - public final static String FAN_STAGE_STEPPED_6TO8V = "fanStageStepped6to8v"; - public final static String FAN_STAGE_STEPPED_8TO10V = "fanStageStepped8to10v"; + public static final String ARTICLE_DESCRIPTION = "articleDescription"; + public static final String REF_NO = "refNo"; + public static final String SER_NO = "serNo"; + public static final String PROD_CODE = "prodCode"; + public static final String MAC_ADDRESS = "macAddress"; + public static final String SOFTWARE_VERSION_BASIS = "softwareVersionBasis"; + public static final String DATE_FORMAT = "dateFormat"; + public static final String LANGUAGE = "language"; + public static final String UNIT_CONFIG = "unitConfig"; + public static final String KWL_BE = "kwlBe"; + public static final String KWL_BEC = "kwlBec"; + public static final String EXTERNAL_CONTACT = "externalContact"; + public static final String FUNCTION_TYPE_KWL_EM = "functionTypeKwlEm"; + public static final String HEAT_EXCHANGER_TYPE = "heatExchangerType"; + public static final String OFFSET_EXTRACT_AIR = "offsetExtractAir"; + public static final String ASSIGNMENT_FAN_STAGES = "assignmentFanStages"; + public static final String VOLTAGE_FAN_STAGE_1_EXTRACT_AIR = "voltageFanStage1ExtractAir"; + public static final String VOLTAGE_FAN_STAGE_2_EXTRACT_AIR = "voltageFanStage2ExtractAir"; + public static final String VOLTAGE_FAN_STAGE_3_EXTRACT_AIR = "voltageFanStage3ExtractAir"; + public static final String VOLTAGE_FAN_STAGE_4_EXTRACT_AIR = "voltageFanStage4ExtractAir"; + public static final String VOLTAGE_FAN_STAGE_1_SUPPLY_AIR = "voltageFanStage1SupplyAir"; + public static final String VOLTAGE_FAN_STAGE_2_SUPPLY_AIR = "voltageFanStage2SupplyAir"; + public static final String VOLTAGE_FAN_STAGE_3_SUPPLY_AIR = "voltageFanStage3SupplyAir"; + public static final String VOLTAGE_FAN_STAGE_4_SUPPLY_AIR = "voltageFanStage4SupplyAir"; + public static final String FAN_STAGE_STEPPED_0TO2V = "fanStageStepped0to2v"; + public static final String FAN_STAGE_STEPPED_2TO4V = "fanStageStepped2to4v"; + public static final String FAN_STAGE_STEPPED_4TO6V = "fanStageStepped4to6v"; + public static final String FAN_STAGE_STEPPED_6TO8V = "fanStageStepped6to8v"; + public static final String FAN_STAGE_STEPPED_8TO10V = "fanStageStepped8to10v"; // Heater - public final static String VHZ_TYPE = "vhzType"; + public static final String VHZ_TYPE = "vhzType"; // Humidty control - public final static String HUMIDITY_CONTROL_STATUS = "humidityControlStatus"; - public final static String KWL_FTF_CONFIG_0 = "kwlFtfConfig0"; - public final static String KWL_FTF_CONFIG_1 = "kwlFtfConfig1"; - public final static String KWL_FTF_CONFIG_2 = "kwlFtfConfig2"; - public final static String KWL_FTF_CONFIG_3 = "kwlFtfConfig3"; - public final static String KWL_FTF_CONFIG_4 = "kwlFtfConfig4"; - public final static String KWL_FTF_CONFIG_5 = "kwlFtfConfig5"; - public final static String KWL_FTF_CONFIG_6 = "kwlFtfConfig6"; - public final static String KWL_FTF_CONFIG_7 = "kwlFtfConfig7"; - public final static String SENSOR_CONFIG_KWL_FTF_1 = "sensorConfigKwlFtf1"; - public final static String SENSOR_CONFIG_KWL_FTF_2 = "sensorConfigKwlFtf2"; - public final static String SENSOR_CONFIG_KWL_FTF_3 = "sensorConfigKwlFtf3"; - public final static String SENSOR_CONFIG_KWL_FTF_4 = "sensorConfigKwlFtf4"; - public final static String SENSOR_CONFIG_KWL_FTF_5 = "sensorConfigKwlFtf5"; - public final static String SENSOR_CONFIG_KWL_FTF_6 = "sensorConfigKwlFtf6"; - public final static String SENSOR_CONFIG_KWL_FTF_7 = "sensorConfigKwlFtf7"; - public final static String SENSOR_CONFIG_KWL_FTF_8 = "sensorConfigKwlFtf8"; - public final static String SENSOR_NAME_HUMIDITY_AND_TEMP_1 = "sensorNameHumidityAndTemp1"; - public final static String SENSOR_NAME_HUMIDITY_AND_TEMP_2 = "sensorNameHumidityAndTemp2"; - public final static String SENSOR_NAME_HUMIDITY_AND_TEMP_3 = "sensorNameHumidityAndTemp3"; - public final static String SENSOR_NAME_HUMIDITY_AND_TEMP_4 = "sensorNameHumidityAndTemp4"; - public final static String SENSOR_NAME_HUMIDITY_AND_TEMP_5 = "sensorNameHumidityAndTemp5"; - public final static String SENSOR_NAME_HUMIDITY_AND_TEMP_6 = "sensorNameHumidityAndTemp6"; - public final static String SENSOR_NAME_HUMIDITY_AND_TEMP_7 = "sensorNameHumidityAndTemp7"; - public final static String SENSOR_NAME_HUMIDITY_AND_TEMP_8 = "sensorNameHumidityAndTemp8"; + public static final String HUMIDITY_CONTROL_STATUS = "humidityControlStatus"; + public static final String KWL_FTF_CONFIG_0 = "kwlFtfConfig0"; + public static final String KWL_FTF_CONFIG_1 = "kwlFtfConfig1"; + public static final String KWL_FTF_CONFIG_2 = "kwlFtfConfig2"; + public static final String KWL_FTF_CONFIG_3 = "kwlFtfConfig3"; + public static final String KWL_FTF_CONFIG_4 = "kwlFtfConfig4"; + public static final String KWL_FTF_CONFIG_5 = "kwlFtfConfig5"; + public static final String KWL_FTF_CONFIG_6 = "kwlFtfConfig6"; + public static final String KWL_FTF_CONFIG_7 = "kwlFtfConfig7"; + public static final String SENSOR_CONFIG_KWL_FTF_1 = "sensorConfigKwlFtf1"; + public static final String SENSOR_CONFIG_KWL_FTF_2 = "sensorConfigKwlFtf2"; + public static final String SENSOR_CONFIG_KWL_FTF_3 = "sensorConfigKwlFtf3"; + public static final String SENSOR_CONFIG_KWL_FTF_4 = "sensorConfigKwlFtf4"; + public static final String SENSOR_CONFIG_KWL_FTF_5 = "sensorConfigKwlFtf5"; + public static final String SENSOR_CONFIG_KWL_FTF_6 = "sensorConfigKwlFtf6"; + public static final String SENSOR_CONFIG_KWL_FTF_7 = "sensorConfigKwlFtf7"; + public static final String SENSOR_CONFIG_KWL_FTF_8 = "sensorConfigKwlFtf8"; + public static final String SENSOR_NAME_HUMIDITY_AND_TEMP_1 = "sensorNameHumidityAndTemp1"; + public static final String SENSOR_NAME_HUMIDITY_AND_TEMP_2 = "sensorNameHumidityAndTemp2"; + public static final String SENSOR_NAME_HUMIDITY_AND_TEMP_3 = "sensorNameHumidityAndTemp3"; + public static final String SENSOR_NAME_HUMIDITY_AND_TEMP_4 = "sensorNameHumidityAndTemp4"; + public static final String SENSOR_NAME_HUMIDITY_AND_TEMP_5 = "sensorNameHumidityAndTemp5"; + public static final String SENSOR_NAME_HUMIDITY_AND_TEMP_6 = "sensorNameHumidityAndTemp6"; + public static final String SENSOR_NAME_HUMIDITY_AND_TEMP_7 = "sensorNameHumidityAndTemp7"; + public static final String SENSOR_NAME_HUMIDITY_AND_TEMP_8 = "sensorNameHumidityAndTemp8"; // CO2 control - public final static String CO2_CONTROL_STATUS = "co2ControlStatus"; + public static final String CO2_CONTROL_STATUS = "co2ControlStatus"; // VOC control - public final static String VOC_CONTROL_STATUS = "vocControlStatus"; + public static final String VOC_CONTROL_STATUS = "vocControlStatus"; // List of all variables used in actions - public final static String FILTER_CHANGE_RESET = "filterChangeReset"; - public final static String FACTORY_SETTING_WZU = "factorySettingWzu"; - public final static String FACTORY_RESET = "factoryReset"; - public final static String RESET_FLAG = "resetFlag"; + public static final String FILTER_CHANGE_RESET = "filterChangeReset"; + public static final String FACTORY_SETTING_WZU = "factorySettingWzu"; + public static final String FACTORY_RESET = "factoryReset"; + public static final String RESET_FLAG = "resetFlag"; // List of all unused variables (defined in the specification but not implemented as channels, properties or // actions) - public final static String GLOBAL_MANUAL_WEB_UPDATE = "globalManualWebUpdate"; - public final static String PORTAL_GLOBALS_ERROR_FOR_WEB = "portalGlobalsErrorForWeb"; - public final static String CLEAR_ERROR = "clearError"; - public final static String TBD = "tbd"; - public final static String LOGOUT = "logout"; + public static final String GLOBAL_MANUAL_WEB_UPDATE = "globalManualWebUpdate"; + public static final String PORTAL_GLOBALS_ERROR_FOR_WEB = "portalGlobalsErrorForWeb"; + public static final String CLEAR_ERROR = "clearError"; + public static final String TBD = "tbd"; + public static final String LOGOUT = "logout"; // List of all Configuration Parameters - public final static String CONFIG_REFRESH_INTERVAL = "refreshInterval"; + public static final String CONFIG_REFRESH_INTERVAL = "refreshInterval"; + + // Messages + public static final String PREFIX_ERROR_MSG = "error."; + public static final int BITS_ERROR_MSG = 32; + public static final String PREFIX_WARNING_MSG = "warning."; + public static final int BITS_WARNING_MSG = 8; + public static final String PREFIX_INFO_MSG = "info."; + public static final int BITS_INFO_MSG = 8; + public static final String PREFIX_STATUS_MSG = "stateflag."; + public static final int BITS_STATUS_MSG = 32; // Other constants - public final static int UNIT_ID = 180; - public final static int START_ADDRESS = 1; - public final static String VARIABLES_DEFINITION_FILE = "variables.json"; - public final static int MAX_TRIES = 5; + public static final int UNIT_ID = 180; + public static final int START_ADDRESS = 1; + public static final String VARIABLES_DEFINITION_FILE = "variables.json"; + public static final int MAX_TRIES = 5; + public static final String PROPERTIES_PREFIX = "property."; // List of all variables that have to be updated regardless if they are linked to an item - public final static List ALWAYS_UPDATE_VARIABLES = Arrays.asList( + public static final List ALWAYS_UPDATE_VARIABLES = Arrays.asList( HeliosEasyControlsBindingConstants.DATE_FORMAT, HeliosEasyControlsBindingConstants.DATE, HeliosEasyControlsBindingConstants.TIME, HeliosEasyControlsBindingConstants.TIME_ZONE_DIFFERENCE_TO_GMT, HeliosEasyControlsBindingConstants.BYPASS_FROM_DAY, HeliosEasyControlsBindingConstants.BYPASS_FROM_MONTH, - HeliosEasyControlsBindingConstants.BYPASS_TO_DAY, HeliosEasyControlsBindingConstants.BYPASS_TO_MONTH); + HeliosEasyControlsBindingConstants.BYPASS_TO_DAY, HeliosEasyControlsBindingConstants.BYPASS_TO_MONTH, + HeliosEasyControlsBindingConstants.ERRORS, HeliosEasyControlsBindingConstants.WARNINGS, + HeliosEasyControlsBindingConstants.INFOS, HeliosEasyControlsBindingConstants.STATUS_FLAGS); // List of all properties - public final static List PROPERTY_NAMES = Arrays.asList( + public static final List PROPERTY_NAMES = Arrays.asList( HeliosEasyControlsBindingConstants.ARTICLE_DESCRIPTION, HeliosEasyControlsBindingConstants.REF_NO, HeliosEasyControlsBindingConstants.SER_NO, HeliosEasyControlsBindingConstants.PROD_CODE, HeliosEasyControlsBindingConstants.MAC_ADDRESS, HeliosEasyControlsBindingConstants.SOFTWARE_VERSION_BASIS, diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsHandler.java b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsHandler.java index 9fc4aa78b1..dc1c9aa524 100644 --- a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsHandler.java +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsHandler.java @@ -19,8 +19,10 @@ import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; @@ -74,6 +76,8 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { private final Logger logger = LoggerFactory.getLogger(HeliosEasyControlsHandler.class); + private final HeliosEasyControlsTranslationProvider translationProvider; + private @Nullable HeliosEasyControlsConfiguration config; private @Nullable ScheduledFuture pollingJob; @@ -93,9 +97,13 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { private int dateFormat = -1; private ZonedDateTime sysDate = ZonedDateTime.now(); // initialize with local system time as a best guess // before reading from device + private long errors = 0; + private int warnings = 0; + private int infos = 0; + private String statusFlags = ""; - private class BypassDate { - private final int[] MONTH_MAX_DAYS = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + private static class BypassDate { + private static final int[] MONTH_MAX_DAYS = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; // initialization to avoid issues when updating before all variables were read private int month = 1; @@ -142,8 +150,9 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { private @Nullable BypassDate bypassFrom, bypassTo; - public HeliosEasyControlsHandler(Thing thing) { + public HeliosEasyControlsHandler(Thing thing, HeliosEasyControlsTranslationProvider translationProvider) { super(thing); + this.translationProvider = translationProvider; } /** @@ -311,15 +320,21 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { if (command instanceof OnOffType) { value = command == OnOffType.ON ? "1" : "0"; } else if (command instanceof DateTimeType) { - ZonedDateTime d = ((DateTimeType) command).getZonedDateTime(); - if (channelId.equals(HeliosEasyControlsBindingConstants.SYS_DATE)) { - setSysDateTime(d); - } else if (channelId.equals(HeliosEasyControlsBindingConstants.BYPASS_FROM)) { - this.setBypass(true, d.getDayOfMonth(), d.getMonthValue()); - } else if (channelId.equals(HeliosEasyControlsBindingConstants.BYPASS_TO)) { - this.setBypass(false, d.getDayOfMonth(), d.getMonthValue()); - } else { - value = formatDate(channelId, ((DateTimeType) command).getZonedDateTime()); + try { + ZonedDateTime d = ((DateTimeType) command).getZonedDateTime(); + if (channelId.equals(HeliosEasyControlsBindingConstants.SYS_DATE)) { + setSysDateTime(d); + } else if (channelId.equals(HeliosEasyControlsBindingConstants.BYPASS_FROM)) { + this.setBypass(true, d.getDayOfMonth(), d.getMonthValue()); + } else if (channelId.equals(HeliosEasyControlsBindingConstants.BYPASS_TO)) { + this.setBypass(false, d.getDayOfMonth(), d.getMonthValue()); + } else { + value = formatDate(channelId, ((DateTimeType) command).getZonedDateTime()); + } + } catch (InterruptedException e) { + logger.debug( + "{} encountered Exception when trying to lock Semaphore for writing variable {} to the device: {}", + HeliosEasyControlsHandler.class.getSimpleName(), channelId, e.getMessage()); } } else if ((command instanceof DecimalType) || (command instanceof StringType)) { value = command.toString(); @@ -327,36 +342,39 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { // convert item's unit to the Helios device's unit Map variableMap = this.variableMap; if (variableMap != null) { - String unit = variableMap.get(channelId).getUnit(); - QuantityType val = (QuantityType) command; - if (unit != null) { - switch (unit) { - case HeliosVariable.UNIT_DAY: - val = val.toUnit(Units.DAY); - break; - case HeliosVariable.UNIT_HOUR: - val = val.toUnit(Units.HOUR); - break; - case HeliosVariable.UNIT_MIN: - val = val.toUnit(Units.MINUTE); - break; - case HeliosVariable.UNIT_SEC: - val = val.toUnit(Units.SECOND); - break; - case HeliosVariable.UNIT_VOLT: - val = val.toUnit(Units.VOLT); - break; - case HeliosVariable.UNIT_PERCENT: - val = val.toUnit(Units.PERCENT); - break; - case HeliosVariable.UNIT_PPM: - val = val.toUnit(Units.PARTS_PER_MILLION); - break; - case HeliosVariable.UNIT_TEMP: - val = val.toUnit(SIUnits.CELSIUS); - break; + HeliosVariable v = variableMap.get(channelId); + if (v != null) { + String unit = v.getUnit(); + QuantityType val = (QuantityType) command; + if (unit != null) { + switch (unit) { + case HeliosVariable.UNIT_DAY: + val = val.toUnit(Units.DAY); + break; + case HeliosVariable.UNIT_HOUR: + val = val.toUnit(Units.HOUR); + break; + case HeliosVariable.UNIT_MIN: + val = val.toUnit(Units.MINUTE); + break; + case HeliosVariable.UNIT_SEC: + val = val.toUnit(Units.SECOND); + break; + case HeliosVariable.UNIT_VOLT: + val = val.toUnit(Units.VOLT); + break; + case HeliosVariable.UNIT_PERCENT: + val = val.toUnit(Units.PERCENT); + break; + case HeliosVariable.UNIT_PPM: + val = val.toUnit(Units.PARTS_PER_MILLION); + break; + case HeliosVariable.UNIT_TEMP: + val = val.toUnit(SIUnits.CELSIUS); + break; + } + value = val != null ? String.valueOf(val.doubleValue()) : null; // ignore the UoM } - value = val != null ? String.valueOf(val.doubleValue()) : null; // ignore the UoM } } } @@ -375,6 +393,11 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { } catch (HeliosException e) { updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, "Writing value " + v + "to channel " + channelId + " failed: " + e.getMessage()); + } catch (InterruptedException e) { + logger.debug( + "{} encountered Exception when trying to lock Semaphore for writing variable {} to the device: {}", + HeliosEasyControlsHandler.class.getSimpleName(), channelId, e.getMessage()); + } }); } @@ -404,7 +427,7 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { * @return The value if the transaction succeeded, null otherwise * @throws HeliosException Thrown if the variable is read-only or the provided value is out of range */ - public void writeValue(String variableName, String value) throws HeliosException { + public void writeValue(String variableName, String value) throws HeliosException, InterruptedException { if (this.variableMap == null) { this.handleError("Variable definition is unavailable.", ThingStatusDetail.CONFIGURATION_ERROR); return; @@ -413,39 +436,37 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { if (variableMap != null) { HeliosVariable v = variableMap.get(variableName); - if (!v.hasWriteAccess()) { - throw new HeliosException("Variable " + variableName + " is read-only"); - } else if (!v.isInAllowedRange(value)) { - throw new HeliosException( - "Value " + value + " is outside of allowed range of variable " + variableName); - } else if (this.comms != null) { - // write to device - String payload = v.getVariableString() + "=" + value; - ModbusCommunicationInterface comms = this.comms; - if (comms != null) { - final Semaphore lock = transactionLocks.get(comms.getEndpoint()); - try { - lock.acquire(); - comms.submitOneTimeWrite( - new ModbusWriteRegisterRequestBlueprint(HeliosEasyControlsBindingConstants.UNIT_ID, - HeliosEasyControlsBindingConstants.START_ADDRESS, preparePayload(payload), - true, HeliosEasyControlsBindingConstants.MAX_TRIES), - result -> { - lock.release(); - updateStatus(ThingStatus.ONLINE); - }, failureInfo -> { - lock.release(); - updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, - "Error writing to device: " + failureInfo.getCause().getMessage()); - }); - } catch (InterruptedException e) { - logger.warn( - "{} encountered Exception when trying to lock Semaphore for writing variable {} to the device: {}", - HeliosEasyControlsHandler.class.getSimpleName(), variableName, e.getMessage()); + if (v != null) { + if (!v.hasWriteAccess()) { + throw new HeliosException("Variable " + variableName + " is read-only"); + } else if (!v.isInAllowedRange(value)) { + throw new HeliosException( + "Value " + value + " is outside of allowed range of variable " + variableName); + } else if (this.comms != null) { + // write to device + String payload = v.getVariableString() + "=" + value; + ModbusCommunicationInterface comms = this.comms; + if (comms != null) { + final Semaphore lock = transactionLocks.get(comms.getEndpoint()); + if (lock != null) { + lock.acquire(); + comms.submitOneTimeWrite(new ModbusWriteRegisterRequestBlueprint( + HeliosEasyControlsBindingConstants.UNIT_ID, + HeliosEasyControlsBindingConstants.START_ADDRESS, preparePayload(payload), true, + HeliosEasyControlsBindingConstants.MAX_TRIES), result -> { + lock.release(); + updateStatus(ThingStatus.ONLINE); + }, failureInfo -> { + lock.release(); + updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, + "Error writing to device: " + failureInfo.getCause().getMessage()); + }); + } } + } else { // comms is null + this.handleError("Modbus communication interface is null", + ThingStatusDetail.COMMUNICATION_ERROR); } - } else { // comms is null - this.handleError("Modbus communication interface is null", ThingStatusDetail.COMMUNICATION_ERROR); } } } @@ -463,7 +484,7 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { if ((comms != null) && (variableMap != null)) { final Semaphore lock = transactionLocks.get(comms.getEndpoint()); HeliosVariable v = variableMap.get(variableName); - if (v.hasReadAccess()) { + if ((v != null) && v.hasReadAccess() && (lock != null)) { try { lock.acquire(); // will block until lock is available } catch (InterruptedException e) { @@ -536,7 +557,7 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { this.sysDate = sysDate; } - private void setSysDateTime(ZonedDateTime date) { + private void setSysDateTime(ZonedDateTime date) throws InterruptedException { try { this.writeValue(HeliosEasyControlsBindingConstants.DATE, this.formatDate(HeliosEasyControlsBindingConstants.DATE, date)); @@ -550,7 +571,7 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { } } - protected void setSysDateTime() { + protected void setSysDateTime() throws InterruptedException { this.setSysDateTime(ZonedDateTime.now()); } @@ -575,7 +596,7 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { } } - protected void setBypass(boolean from, int day, int month) { + protected void setBypass(boolean from, int day, int month) throws InterruptedException { BypassDate bypassDate = new BypassDate(day, month); try { this.writeValue(from ? HeliosEasyControlsBindingConstants.BYPASS_FROM_DAY @@ -623,6 +644,75 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { } } + private List getMessages(long bitMask, int bits, String prefix) { + ArrayList msg = new ArrayList(); + long mask = 1; + for (int i = 0; i < bits; i++) { + if ((bitMask & mask) != 0) { + msg.add(translationProvider.getText(prefix + i)); + } + mask <<= 1; + } + return msg; + } + + /** + * Transforms the errors provided by the device into a human readable form (the basis for the + * corresponding action) + * + * @return an List of messages indicated by the error flags sent by the device + */ + protected List getErrorMessages() { + return this.getMessages(this.errors, HeliosEasyControlsBindingConstants.BITS_ERROR_MSG, + HeliosEasyControlsBindingConstants.PREFIX_ERROR_MSG); + } + + /** + * Transforms the warnings provided by the device into a human readable form (the basis for the + * corresponding action) + * + * @return an List of messages indicated by the warning flags sent by the device + */ + protected List getWarningMessages() { + return this.getMessages(this.warnings, HeliosEasyControlsBindingConstants.BITS_WARNING_MSG, + HeliosEasyControlsBindingConstants.PREFIX_WARNING_MSG); + } + + /** + * Transforms the infos provided by the device into a human readable form (the basis for the + * corresponding action) + * + * @return an List of messages indicated by the info flags sent by the device + */ + protected List getInfoMessages() { + return this.getMessages(this.infos, HeliosEasyControlsBindingConstants.BITS_INFO_MSG, + HeliosEasyControlsBindingConstants.PREFIX_INFO_MSG); + } + + /** + * Transforms the status flags provided by the device into a human readable form (the basis for the + * corresponding action) + * + * @return an List of messages indicated by the status flags sent by the device + */ + protected List getStatusMessages() { + ArrayList msg = new ArrayList(); + if (this.statusFlags.length() == HeliosEasyControlsBindingConstants.BITS_STATUS_MSG) { + for (int i = 0; i < HeliosEasyControlsBindingConstants.BITS_STATUS_MSG; i++) { + String key = HeliosEasyControlsBindingConstants.PREFIX_STATUS_MSG + i + "." + + (this.statusFlags.substring(HeliosEasyControlsBindingConstants.BITS_STATUS_MSG - i - 1, + HeliosEasyControlsBindingConstants.BITS_STATUS_MSG - i)); + String text = translationProvider.getText(key); + if (!text.equals(key)) { // there is a text in the properties file (no text => flag is irrelevant) + msg.add(text); + } + } + } else { + msg.add("Status messages have not yet been read from the device"); + } + return msg; + } + /** * Returns a DateTimeType object based on the provided String and the device's configured date format * @@ -718,7 +808,10 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { if ((parts.length == 2) && (v.getVariableString().equals(parts[0]))) { if (this.isProperty(v.getName())) { try { - updateProperty(v.getName(), v.formatPropertyValue(parts[1])); + updateProperty( + translationProvider + .getText(HeliosEasyControlsBindingConstants.PROPERTIES_PREFIX + v.getName()), + v.formatPropertyValue(parts[1], translationProvider)); } catch (HeliosException e) { logger.warn("{} encountered Exception when trying to update property: {}", HeliosEasyControlsHandler.class.getSimpleName(), e.getMessage()); @@ -772,9 +865,15 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { if (state != null) { updateState(v.getGroupAndName(), state); updateStatus(ThingStatus.ONLINE); - // update date format and UTC offset upon read + // update date format and messages upon read if (v.getName().equals(HeliosEasyControlsBindingConstants.DATE_FORMAT)) { this.dateFormat = Integer.parseInt(value); + } else if (v.getName().equals(HeliosEasyControlsBindingConstants.ERRORS)) { + this.errors = Long.parseLong(value); + } else if (v.getName().equals(HeliosEasyControlsBindingConstants.WARNINGS)) { + this.warnings = Integer.parseInt(value); + } else if (v.getName().equals(HeliosEasyControlsBindingConstants.INFOS)) { + this.infos = Integer.parseInt(value); } } } @@ -787,6 +886,9 @@ public class HeliosEasyControlsHandler extends BaseThingHandler { case "String": if (variableType.equals(HeliosVariable.TYPE_STRING)) { updateState(v.getGroupAndName(), StringType.valueOf(value)); + if (v.getName().equals(HeliosEasyControlsBindingConstants.STATUS_FLAGS)) { + this.statusFlags = value; + } } break; case "DateTime": diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsHandlerFactory.java b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsHandlerFactory.java index 9ea8cd8c3d..d705fbb1db 100644 --- a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsHandlerFactory.java +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsHandlerFactory.java @@ -24,7 +24,10 @@ import org.openhab.core.thing.ThingTypeUID; import org.openhab.core.thing.binding.BaseThingHandlerFactory; import org.openhab.core.thing.binding.ThingHandler; import org.openhab.core.thing.binding.ThingHandlerFactory; +import org.osgi.service.component.ComponentContext; +import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; /** * The {@link HeliosEasyControlsHandlerFactory} is responsible for creating things and thing @@ -38,6 +41,14 @@ public class HeliosEasyControlsHandlerFactory extends BaseThingHandlerFactory { private static final Set SUPPORTED_THING_TYPES_UIDS = Collections .singleton(THING_TYPE_HELIOS_VENTILATION_EASY_CONTROLS); + private final HeliosEasyControlsTranslationProvider translationProvider; + + @Activate + public HeliosEasyControlsHandlerFactory(@Reference HeliosEasyControlsTranslationProvider translationProvider, + ComponentContext componentContext) { + super.activate(componentContext); + this.translationProvider = translationProvider; + } @Override public boolean supportsThingType(ThingTypeUID thingTypeUID) { @@ -48,7 +59,7 @@ public class HeliosEasyControlsHandlerFactory extends BaseThingHandlerFactory { protected @Nullable ThingHandler createHandler(Thing thing) { ThingTypeUID thingTypeUID = thing.getThingTypeUID(); if (THING_TYPE_HELIOS_VENTILATION_EASY_CONTROLS.equals(thingTypeUID)) { - return new HeliosEasyControlsHandler(thing); + return new HeliosEasyControlsHandler(thing, this.translationProvider); } return null; } diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsTranslationProvider.java b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsTranslationProvider.java new file mode 100644 index 0000000000..2aa5ffa3e2 --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosEasyControlsTranslationProvider.java @@ -0,0 +1,69 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.modbus.helioseasycontrols.internal; + +import java.util.Locale; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.openhab.core.i18n.LocaleProvider; +import org.openhab.core.i18n.TranslationProvider; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; + +/** + * This class provides translated texts + * + * @author Bernhard Bauer - Initial contribution + */ +@NonNullByDefault +@Component(service = HeliosEasyControlsTranslationProvider.class) +public class HeliosEasyControlsTranslationProvider { + + private final Bundle bundle; + private final TranslationProvider i18nProvider; + private final LocaleProvider localeProvider; + + @Activate + public HeliosEasyControlsTranslationProvider(@Reference TranslationProvider i18nProvider, + @Reference LocaleProvider localeProvider, BundleContext context) { + this.bundle = context.getBundle(); + this.i18nProvider = i18nProvider; + this.localeProvider = localeProvider; + } + + public HeliosEasyControlsTranslationProvider(final HeliosEasyControlsTranslationProvider other) { + this.bundle = other.bundle; + this.i18nProvider = other.i18nProvider; + this.localeProvider = other.localeProvider; + } + + public String getText(String key, @Nullable Object... arguments) { + try { + Locale locale = localeProvider.getLocale(); + String message = i18nProvider.getText(bundle, key, this.getDefaultText(key), locale, arguments); + if (message != null) { + return message; + } + } catch (IllegalArgumentException e) { + } + return "Unable to load message for key " + key; + } + + public @Nullable String getDefaultText(String key) { + return i18nProvider.getText(bundle, key, key, Locale.ENGLISH); + } +} diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosVariable.java b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosVariable.java index 8fc20f33f4..c53c4dee8b 100644 --- a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosVariable.java +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/java/org/openhab/binding/modbus/helioseasycontrols/internal/HeliosVariable.java @@ -380,7 +380,7 @@ public class HeliosVariable implements Comparable { if (this.type.equals(HeliosVariable.TYPE_INTEGER)) { // using long becuase some variable are specified with a max of 2^32-1 // parsing double to allow floating point values to be processed as well - long l = new Double(value).longValue(); + long l = Double.valueOf(value).longValue(); return (minVal.longValue() <= l) && (maxVal.longValue() >= l); } else if (this.type.equals(HeliosVariable.TYPE_FLOAT)) { double d = Double.parseDouble(value); @@ -395,44 +395,41 @@ public class HeliosVariable implements Comparable { return false; } + private String getText(String property, String value, HeliosEasyControlsTranslationProvider translationProvider) + throws HeliosException { + String key = "property." + property + "." + value; + String text = translationProvider.getText(key); + if (!key.equals(text)) { + return text; + } else { + throw new HeliosException("Illegal value for variable " + this.getName() + ": " + value); + } + } + /** * Depending on the type of variable this method formats the provided value according to the interpretation of its * value * * @param value The value to format + * @param translationProvider The i18n translation provider to use for finding internationalized texts * @return The formatted value * @throws HeliosException if the provided value doesn't fit to the variable */ - public String formatPropertyValue(String value) throws HeliosException { + public String formatPropertyValue(String value, HeliosEasyControlsTranslationProvider translationProvider) + throws HeliosException { switch (this.getName()) { case HeliosEasyControlsBindingConstants.DATE_FORMAT: - switch (value) { - case "0": - return "dd.mm.yyyy"; - case "1": - return "mm.dd.yyyy"; - case "2": - return "yyyy.mm.dd"; - } - throw new HeliosException(this.createErrorMessage(value)); case HeliosEasyControlsBindingConstants.UNIT_CONFIG: - return value.equals("1") ? "DIBt" : "PHI"; + case HeliosEasyControlsBindingConstants.HEAT_EXCHANGER_TYPE: + case HeliosEasyControlsBindingConstants.ASSIGNMENT_FAN_STAGES: + case HeliosEasyControlsBindingConstants.VHZ_TYPE: + return this.getText(this.getName(), value, translationProvider); case HeliosEasyControlsBindingConstants.KWL_BE: case HeliosEasyControlsBindingConstants.KWL_BEC: - return value.equals("1") ? "On" : "Off"; + return this.getText("onOff", value, translationProvider); case HeliosEasyControlsBindingConstants.EXTERNAL_CONTACT: case HeliosEasyControlsBindingConstants.FUNCTION_TYPE_KWL_EM: - return "Function " + value; - case HeliosEasyControlsBindingConstants.HEAT_EXCHANGER_TYPE: - switch (value) { - case "1": - return "Plastic"; - case "2": - return "Aluminium"; - case "3": - return "Enthalpy"; - } - throw new HeliosException(this.createErrorMessage(value)); + return this.getText("function", value, translationProvider); case HeliosEasyControlsBindingConstants.OFFSET_EXTRACT_AIR: case HeliosEasyControlsBindingConstants.VOLTAGE_FAN_STAGE_1_EXTRACT_AIR: case HeliosEasyControlsBindingConstants.VOLTAGE_FAN_STAGE_2_EXTRACT_AIR: @@ -443,8 +440,6 @@ public class HeliosVariable implements Comparable { case HeliosEasyControlsBindingConstants.VOLTAGE_FAN_STAGE_3_SUPPLY_AIR: case HeliosEasyControlsBindingConstants.VOLTAGE_FAN_STAGE_4_SUPPLY_AIR: return this.getUnit() != null ? value + this.getUnit() : value; - case HeliosEasyControlsBindingConstants.ASSIGNMENT_FAN_STAGES: - return value.equals("0") ? "0...10V" : "stepped"; case HeliosEasyControlsBindingConstants.FAN_STAGE_STEPPED_0TO2V: case HeliosEasyControlsBindingConstants.FAN_STAGE_STEPPED_2TO4V: case HeliosEasyControlsBindingConstants.FAN_STAGE_STEPPED_4TO6V: @@ -459,18 +454,6 @@ public class HeliosVariable implements Comparable { case HeliosEasyControlsBindingConstants.SENSOR_NAME_HUMIDITY_AND_TEMP_7: case HeliosEasyControlsBindingConstants.SENSOR_NAME_HUMIDITY_AND_TEMP_8: return value; - case HeliosEasyControlsBindingConstants.VHZ_TYPE: - switch (value) { - case "1": - return "EH-basis"; - case "2": - return "EH-EWR"; - case "3": - return "SEWT"; - case "4": - return "LEWT"; - } - throw new HeliosException(this.createErrorMessage(value)); case HeliosEasyControlsBindingConstants.KWL_FTF_CONFIG_0: case HeliosEasyControlsBindingConstants.KWL_FTF_CONFIG_1: case HeliosEasyControlsBindingConstants.KWL_FTF_CONFIG_2: @@ -479,15 +462,7 @@ public class HeliosVariable implements Comparable { case HeliosEasyControlsBindingConstants.KWL_FTF_CONFIG_5: case HeliosEasyControlsBindingConstants.KWL_FTF_CONFIG_6: case HeliosEasyControlsBindingConstants.KWL_FTF_CONFIG_7: - switch (value) { - case "1": - return "Relative Humidity"; - case "2": - return "Temperature"; - case "3": - return "Combined"; - } - throw new HeliosException(this.createErrorMessage(value)); + return this.getText("kwlFtfConfig", value, translationProvider); case HeliosEasyControlsBindingConstants.SENSOR_CONFIG_KWL_FTF_1: case HeliosEasyControlsBindingConstants.SENSOR_CONFIG_KWL_FTF_2: case HeliosEasyControlsBindingConstants.SENSOR_CONFIG_KWL_FTF_3: @@ -496,28 +471,16 @@ public class HeliosVariable implements Comparable { case HeliosEasyControlsBindingConstants.SENSOR_CONFIG_KWL_FTF_6: case HeliosEasyControlsBindingConstants.SENSOR_CONFIG_KWL_FTF_7: case HeliosEasyControlsBindingConstants.SENSOR_CONFIG_KWL_FTF_8: - return value.equals("0") ? "No sensor" : "Sensor installed"; + return this.getText("sensorConfig", value, translationProvider); case HeliosEasyControlsBindingConstants.HUMIDITY_CONTROL_STATUS: case HeliosEasyControlsBindingConstants.CO2_CONTROL_STATUS: case HeliosEasyControlsBindingConstants.VOC_CONTROL_STATUS: - switch (value) { - case "0": - return "Off"; - case "1": - return "Stepped"; - case "2": - return "Continuous"; - } - throw new HeliosException(this.createErrorMessage(value)); + return this.getText("controlStatus", value, translationProvider); default: return value; } } - private String createErrorMessage(String value) { - return "Illegal value for variable " + this.getName() + ": " + value; - } - @Override public int compareTo(HeliosVariable v) { return getVariable() - v.getVariable(); diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/binding/binding.xml b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/binding/binding.xml index 40bd9f7f42..45392f2e6e 100644 --- a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/binding/binding.xml +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/binding/binding.xml @@ -4,6 +4,7 @@ xsi:schemaLocation="https://openhab.org/schemas/binding/v1.0.0 https://openhab.org/schemas/binding-1.0.0.xsd"> HeliosEasyControls Binding - This is the binding for a Helios ventilation system with easyControls using a Modbus TCP implementation. + This binding supports the integration of Helios ventilation systems with easyControls using a Modbus TCP + implementation. diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/actions.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/actions.properties new file mode 100644 index 0000000000..1efd728a48 --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/actions.properties @@ -0,0 +1,34 @@ +# actions + +action.resetFilterChangeTimer.label = reset filter change timer +action.resetFilterChangeTimer.description = Sets the filter change timer back to the configured interval +action.resetErrors.label = reset messages +action.resetErrors.description = Reset error/warning/info messages +action.resetToFactoryDefaults.label = reset to factory defaults +action.resetToFactoryDefaults.description = Reset device to factory defaults +action.resetSwitchingTimes.label = reset individual switching times +action.resetSwitchingTimes.description = Reset individual switching times +action.setSysDateTime.label = set system date and time +action.setSysDateTime.description = Sets the device's system date and time based on OH's system date and time +action.setBypassFrom.label = set the bypass from day and month +action.setBypassFrom.description = Sets the day and month from when the bypass should be active +action.setBypassFrom.inputParams.day.label = bypass from day +action.setBypassFrom.inputParams.day.description = The day from when the bypass should be active +action.setBypassFrom.inputParams.month.label = bypass from month +action.setBypassFrom.inputParams.month.description = The month from when the bypass should be active +action.setBypassTo.label = set the bypass to day and month +action.setBypassTo.description = Sets the day and month until when the bypass should be active +action.setBypassTo.inputParams.day.label = bypass to day +action.setBypassTo.inputParams.day.description = The day until when the bypass should be active +action.setBypassTo.inputParams.day.label = bypass to month +action.setBypassTo.inputParams.day.description = The month until when the bypass should be active +action.getErrorMessages.label = get the list of error messages +action.getErrorMessages.description = Returns the list of the device's error messages +action.getWarningMessages.label = get the list of warning messages +action.getWarningMessages.description = Returns the list of the device's warning messages +action.getInfoMessages.label = get the list of info messages +action.getInfoMessages.description = Returns the list of the device's info messages +action.getStatusMessages.label = get the list of status messages +action.getStatusMessages.description = Returns the list of the device's status messages +action.getMessages.label = get the list of error, warning, info and status messages +action.getMessages.description = Returns the list of the device's error, warning, info and status messages diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/actions_de.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/actions_de.properties new file mode 100644 index 0000000000..dbef5cdadc --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/actions_de.properties @@ -0,0 +1,34 @@ +# actions + +action.resetFilterChangeTimer.label = Restlaufzeit Filter zurücksetzen +action.resetFilterChangeTimer.description = Setzt die Restlaufzeit des Filters zurück auf das konfigurierte Intervall +action.resetErrors.label = Nachrichten zurücksetzen +action.resetErrors.description = Setzt Fehler-/Warnungs- und Info-Nachrichten zurück +action.resetToFactoryDefaults.label = Werksreset +action.resetToFactoryDefaults.description = Setzt das Gerät auf die Werkseinstellungen zurück +action.resetSwitchingTimes.label = Individuelle Schaltzeiten zurücksetzen +action.resetSwitchingTimes.description = Setzt individuelle Schaltzeiten zurück +action.setSysDateTime.label = Systemdatum und -uhrzeit setzen +action.setSysDateTime.description = Setzt das Systemdatum und die -uhrzeit des Geräts besierend auf Systemdatum -und -uhrzeit von OH +action.setBypassFrom.label = Bypass von Tag und Monat setzen +action.setBypassFrom.description = Setzt den Tag und das Monat ab wann der Bypass aktiv sein soll +action.setBypassFrom.inputParams.day.label = Bypass von Tag +action.setBypassFrom.inputParams.day.description = Der Tag ab wann der Bypass aktiv sein soll +action.setBypassFrom.inputParams.month.label = Bypass von Monat +action.setBypassFrom.inputParams.month.description = Das Monat ab wann der Bypass aktiv sein soll +action.setBypassTo.label = Bypass bis Tag und Monat setzen +action.setBypassTo.description = Setzt den Tag und das Monat bis wann der Bypass aktiv sein soll +action.setBypassTo.inputParams.day.label = Bypass bis Tag +action.setBypassTo.inputParams.day.description = Der Tag bis wann der Bypass aktiv sein soll +action.setBypassTo.inputParams.day.label = Bypass bis Monat +action.setBypassTo.inputParams.day.description = Das Monat bis wann der Bypass aktiv sein soll +action.getErrorMessages.label = Liste der Fehlermeldungen erhalten +action.getErrorMessages.description = Gibt die Liste der Fehlermeldungen des Geräts zurück +action.getWarningMessages.label = Liste der Warnmeldungen erhalten +action.getWarningMessages.description = Gibt die Liste der Warnmeldungen des Geräts zurück +action.getInfoMessages.label = Liste der Infomeldungen erhalten +action.getInfoMessages.description = Gibt die Liste der Infomeldungen des Geräts zurück +action.getStatusMessages.label = Liste der Statusmeldungen erhalten +action.getStatusMessages.description = Gibt die Liste der Statusmeldungen des Geräts zurück +action.getMessages.label = Liste der Fehler-, Warn-, Info- und Statusmeldungen erhalten +action.getMessages.description = Gibt die Liste der Fehler-, Warn-, Info- und Statusmeldungen des Geräts zurück diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/errors.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/errors.properties new file mode 100644 index 0000000000..e6ff8ae2e4 --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/errors.properties @@ -0,0 +1,33 @@ +# Helios easyControls errors according to bit encoding (the number represents the bit encoding the error) +error.0 = Fan speed error supply air (outside air) +error.1 = Fan speed error extract air (outgoing air) +error.2 = n/a +error.3 = SD card error when writing EEPROM data (flash ring buffer full) +error.4 = Bus overcurrent +error.5 = n/a +error.6 = Basis: error VHZ EH (Zero-crossing detection) +error.7 = Ext. module (VHZ): error VZH EH (Zero-crossing detection) +error.8 = Ext. module (NHZ): error NZH EH (Zero-crossing detection) +error.9 = Basis: Internal temp. sensor error (T1) - outside air (missing or cable break) +error.10 = Basis: Internal temp. sensor error (T2) - supply air (missing or cable break) +error.11 = Basis: Internal temp. sensor error (T3) - extract air (missing or cable break) +error.12 = Basis: Internal temp. sensor error (T4) - outgoing air (missing or cable break) +error.13 = Basis: Internal temp. sensor error (T1) - outside air (short circuit) +error.14 = Basis: Internal temp. sensor error (T2) - supply air (short circuit) +error.15 = Basis: Internal temp. sensor error (T3) - extract air (short circuit) +error.16 = Basis: Internal temp. sensor error (T4) - outgoing air (short circuit) +error.17 = Ext. module configured as VHZ, but missing or malfunctioned +error.18 = Ext. module configured as NHZ, but missing or malfunctioned +error.19 = Ext. module (VHZ): Duct sensor (T5) - outside air (missing or cable break) +error.20 = Ext. module (NHZ): Duct sensor (T6) - supply air (missing or cable break) +error.21 = Ext. module (NHZ): Duct sensor (T7) - return WW-Register (missing or cable break) +error.22 = Ext. module (VHZ): Duct sensor (T5) - outside air (short circuit) +error.23 = Ext. module (NHZ): Duct sensor (T6) - supply air (short circuit) +error.24 = Ext. module (NHZ): Duct sensor (T7) - return WW-Register (short circuit) +error.25 = Ext. module (VHZ): safety limiter automatic +error.26 = Ext. module (VHZ): safety limiter manual +error.27 = Ext. module (NHZ): safety limiter automatic +error.28 = Ext. module (NHZ): safety limiter manual +error.29 = Ext. module (NHZ): Frost protection WW-Reg. measured via WW-return (T7) (switching threshold adjustable per variable list e.g. <7°C) +error.30 = Ext. module (NHZ): Frost protection WW-Reg. measured via supply air sensor (T6) (switching threshold adjustable per variable list e.g. <7°C) +error.31 = Frost protection external WW Reg.: (fixed <5°C only PHI), measured via supply air duct sensor (ext. module (NHZ) od. basis) diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/errors_de.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/errors_de.properties new file mode 100644 index 0000000000..e8822644aa --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/errors_de.properties @@ -0,0 +1,33 @@ +# Helios easyControls errors according to bit encoding (the number represents the bit encoding the error) +error.0 = Drehzahlfehler Lüfter Zuluft (Außenluft) +error.1 = Drehzahlfehler Lüfter Abluft (Fortluft) +error.2 = n/a +error.3 = SD-Karten-Fehler beim Schreiben der EEPROM Daten (Flash Ringpuffer voll) +error.4 = Bus Überstrom +error.5 = n/a +error.6 = Basis: Fehler VHZ EH (Null-Durchgangserkennung) +error.7 = Erw. Modul (VHZ): Fehler VZH EH (Null-Durchgangserkennung) +error.8 = Erw. Modul (NHZ): Fehler NZH EH (Null-Durchgangserkennung) +error.9 = Basis: Interner Temp-Sensorfehler (T1) - Außenluft (fehlt oder Kabelbruch) +error.10 = Basis: Interner Temp-Sensorfehler (T2) - Zuluft (fehlt oder Kabelbruch) +error.11 = Basis: Interner Temp-Sensorfehler (T3) - Abluft (fehlt oder Kabelbruch) +error.12 = Basis: Interner Temp-Sensorfehler (T4) - Fortluft (fehlt oder Kabelbruch) +error.13 = Basis: Interner Temp-Sensorfehler (T1) - Außenluft (Kurzschluss) +error.14 = Basis: Interner Temp-Sensorfehler (T2) - Zuluft (Kurzschluss) +error.15 = Basis: Interner Temp-Sensorfehler (T3) - Abluft (Kurzschluss) +error.16 = Basis: Interner Temp-Sensorfehler (T4) - Fortluft (Kurzschluss) +error.17 = Erw. Modul als VHZ konfiguriert, aber nicht vorh. oder ausgefallen +error.18 = Erw. Modul als NHZ konfiguriert, aber nicht vorh. oder ausgefallen +error.19 = Erw. Modul (VHZ): Kanalfühler (T5) - Außenluft (fehlt oder Kabelbruch) +error.20 = Erw. Modul (NHZ): Kanalfühler (T6) - Zuluft (fehlt oder Kabelbruch) +error.21 = Erw. Modul (NHZ): Kanalfühler (T7) - Rücklauf WW-Register (fehlt oder Kabelbruch) +error.22 = Erw. Modul (VHZ): Kanalfühler (T5) - Außenluft (Kurzschluss) +error.23 = Erw. Modul (NHZ): Kanalfühler (T6) - Zuluft (Kurzschluss) +error.24 = Erw. Modul (NHZ): Kanalfühler (T7) - Rücklauf WW-Register (Kurzschluss) +error.25 = Erw. Modul (VHZ): Sicherheitsbegrenzer automatisch +error.26 = Erw. Modul (VHZ): Sicherheitsbegrenzer manuell +error.27 = Erw. Modul (NHZ): Sicherheitsbegrenzer automatisch +error.28 = Erw. Modul (NHZ): Sicherheitsbegrenzer manuell +error.29 = Erw. Modul (NHZ): Frostschutz WW-Reg. gemessen über WW-Rücklauf (T7) (Schaltschwelle per Variablenliste einstellbar z.B. <7°C) +error.30 = Erw. Modul (NHZ): Frostschutz WW-Reg. gemessen über Zuluft-Fühler (T6) (Schaltschwelle per Variablenliste einstellbar z.B. <7°C) +error.31 = Frostschutz externes WW Reg.: (fest <5°C nur PHI), gemessen über Zuluftkanal-Fühler (Erw. Modul (NHZ) od. Basis) diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/helioseasycontrols_de.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/helioseasycontrols_de.properties new file mode 100644 index 0000000000..10f7d7eabb --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/helioseasycontrols_de.properties @@ -0,0 +1,204 @@ +# binding +binding.modbus.name = HeliosEasyControls Binding +binding.modbus.description = Dieses Binding erlaubt die Integration von Helios KWL Geräten mit easyControls via Modbus TCP + +# thing type +thing-type.modbus.helios-easycontrols.label = Helios KWL +thing-type.modbus.helios-easycontrols.description = Erlaubt die Steuerung von Helios KWL Geräten mit easyControls via Modbus TCP + +# thing type configuration +thing-type.config.modbus.helios-easycontrols.refreshInterval.label = Refresh Intervall +thing-type.config.modbus.helios-easycontrols.refreshInterval.description = Refresh Intervall + +# channel groups +thing-type.modbus.helios-easycontrols.group.general.label = Allgemein +thing-type.modbus.helios-easycontrols.group.general.description = Allgemeine Parameter / Statusinformationen +thing-type.modbus.helios-easycontrols.group.operation.label = Betrieb +thing-type.modbus.helios-easycontrols.group.operation.description = Steuerung der Betriebsarten +thing-type.modbus.helios-easycontrols.group.unitConfig.label = Gerätekonfiguration +thing-type.modbus.helios-easycontrols.group.unitConfig.description = Konfigurationsparameter der KWL +thing-type.modbus.helios-easycontrols.group.profiles.label = Profile +thing-type.modbus.helios-easycontrols.group.profiles.description = Profile für den Betrieb des Geräts +thing-type.modbus.helios-easycontrols.group.humidityControl.label = Feuchte-Steuerung +thing-type.modbus.helios-easycontrols.group.humidityControl.description = Konfiguration der Sensoren für die Feuchte- und/oder Temperatur-Steuerung +thing-type.modbus.helios-easycontrols.group.co2Control.label = CO2-Steuerung +thing-type.modbus.helios-easycontrols.group.co2Control.description = Konfiguration der Sensoren für die CO2-Steuerung +thing-type.modbus.helios-easycontrols.group.vocControl.label = VOC-Steuerung +thing-type.modbus.helios-easycontrols.group.vocControl.description = Konfiguration der Sensoren für die VOC-Steuerung + +# channel group types +channel-group-type.modbus.general.label = Allgemein +channel-group-type.modbus.general.description = Allgemeine Parameter / Statusinformationen +channel-group-type.modbus.operation.label = Betrieb +channel-group-type.modbus.operation.description = Steuerung der Betriebsarten +channel-group-type.modbus.unitConfig.label = Gerätekonfiguration +channel-group-type.modbus.unitConfig.description = Konfigurationsparameter der KWL +channel-group-type.modbus.profiles.label = Profile +channel-group-type.modbus.profiles.description = Profile für den Betrieb des Geräts +channel-group-type.modbus.humidityControl.label = Feuchte-Steuerung +channel-group-type.modbus.humidityControl.description = Konfiguration der Sensoren für die Feuchte- und/oder Temperatur-Steuerung +channel-group-type.modbus.co2Control.label = CO2-Steuerung +channel-group-type.modbus.co2Control.description = Konfiguration der Sensoren für die CO2-Steuerung +channel-group-type.modbus.vocControl.label = VOC-Steuerung +channel-group-type.modbus.vocControl.description = Konfiguration der Sensoren für die VOC-Steuerung + +# channel types +channel-type.modbus.sysdate.label = Systemdatum und -uhrzeit +channel-type.modbus.sysdate.description = Das Systemdatum bzw. die Systemuhrzeit der KWL +channel-type.modbus.summerWinter.label = Sommer-/Winterzeit +channel-type.modbus.summerWinter.description = Zeigt an, ob Sommer- oder Winterzeit aktiv ist +channel-type.modbus.summerWinter.state.option.0 = Winterzeit +channel-type.modbus.summerWinter.state.option.1 = Sommerzeit +channel-type.modbus.enableDisable.label = Aktivieren/deaktivieren +channel-type.modbus.enableDisable.description = Verwendet für Funktionalität die aktiviert oder deaktiviert sein kann +channel-type.modbus.minFanStage.label = Minimale Lüfterstufe +channel-type.modbus.minFanStage.description = Minimale Lüfterstufe (0 oder 1) +channel-type.modbus.onOff.label = Ein/aus +channel-type.modbus.onOff.description = Verwendet für Konfigurationen die ein- oder ausgeschaltet sein können +channel-type.modbus.humidityControlSetValue.label = Feuchte-Steuerung Sollwert +channel-type.modbus.humidityControlSetValue.description = Feuchte-Steuerung Sollwert (in Prozent) +channel-type.modbus.humidityControlSteps.label = Feuchte-Steuerung Stufen +channel-type.modbus.humidityControlSteps.description = Feuchte-Steuerung Stufen (in Prozent) +channel-type.modbus.humidityStopTime.label = Feuchte-Steuerung Stoppzeit +channel-type.modbus.humidityStopTime.description = Feuchte-Steuerung Stoppzeit in Stunden (0-24) +channel-type.modbus.ppmControlSetValue.label = Sollwert ppm-Steuerung +channel-type.modbus.ppmControlSetValue.description = Sollwert für ppm-basierte Steuerung (in ppm) +channel-type.modbus.ppmControlSteps.label = Stufen ppm-Steuerung +channel-type.modbus.ppmControlSteps.description = Stufen für ppm-basierte Steuerung (in ppm) +channel-type.modbus.comfortTemp.label = Komforttemperatur +channel-type.modbus.comfortTemp.description = Komforttemperatur +channel-type.modbus.duration.label = Dauer +channel-type.modbus.duration.description = Dauer für Betriebsarten (in Minuten) +channel-type.modbus.fanStage.label = Lüfterstufe +channel-type.modbus.fanStage.description = Lüfterstufe +channel-type.modbus.remainingTime.label = Restzeit +channel-type.modbus.remainingTime.description = Restzeit für Betriebsarten (in Minuten) +channel-type.modbus.operatingMode.label = Betriebsart +channel-type.modbus.operatingMode.description = Betriebsart (automatisch/manuell) +channel-type.modbus.operatingMode.state.option.0 = automatisch +channel-type.modbus.operatingMode.state.option.1 = manuell +channel-type.modbus.percentage.label = Prozentwert +channel-type.modbus.percentage.description = Prozentwert +channel-type.modbus.temperature.label = Temperatur +channel-type.modbus.temperature.description = Temperatur +channel-type.modbus.sensorValue.label = Sensorwert +channel-type.modbus.sensorValue.description = Messwert eines Sensors +channel-type.modbus.weekProfileNhz.label = Wochenprofil NHZ +channel-type.modbus.weekProfileNhz.description = Wochenprofil NHZ +channel-type.modbus.weekProfileNhz.state.option.0 = Standard 1 +channel-type.modbus.weekProfileNhz.state.option.1 = Standard 2 +channel-type.modbus.weekProfileNhz.state.option.2 = Festwert +channel-type.modbus.weekProfileNhz.state.option.3 = Individuell 1 +channel-type.modbus.weekProfileNhz.state.option.4 = Individuell 2 +channel-type.modbus.weekProfileNhz.state.option.5 = NA +channel-type.modbus.weekProfileNhz.state.option.6 = aus +channel-type.modbus.rpm.label = RPM +channel-type.modbus.rpm.description = RPM +channel-type.modbus.holidayProgramme.label = Urlaubsprogramm +channel-type.modbus.holidayProgramme.description = Urlaubsprogramm +channel-type.modbus.holidayProgramme.state.option.0 = aus +channel-type.modbus.holidayProgramme.state.option.1 = Intervall +channel-type.modbus.holidayProgramme.state.option.2 = konstant +channel-type.modbus.date.label = Datum +channel-type.modbus.date.description = Datum +channel-type.modbus.holidayProgrammeInterval.label = Intervall Urlaubsprogramm +channel-type.modbus.holidayProgrammeInterval.description = Intervall Urlaubsprogramm (in Stunden) +channel-type.modbus.holidayProgrammeActivationTime.label = Urlaubsprogramm Einschaltzeit +channel-type.modbus.holidayProgrammeActivationTime.description = Urlaubsprogramm Einschaltzeit (in Minuten) +channel-type.modbus.runOnTimeVhzNhz.label = Nachlaufzeit VHZ/NHZ +channel-type.modbus.runOnTimeVhzNhz.description = Nachlaufzeit VHZ/NHZ (in Sekunden) +channel-type.modbus.errorOutputFunction.label = Funktion Störausgang +channel-type.modbus.errorOutputFunction.description = Funktion Störausgang (Sammelstörung oder nur Fehler) +channel-type.modbus.errorOutputFunction.state.option.1 = Sammelstörung +channel-type.modbus.errorOutputFunction.state.option.2 = nur Fehler +channel-type.modbus.filterChange.label = Filterwechsel +channel-type.modbus.filterChange.description = Filterwechsel +channel-type.modbus.filterChange.state.option.0 = nein +channel-type.modbus.filterChange.state.option.1 = ja +channel-type.modbus.filterChangeInterval.label = Intervall Filterwechsel +channel-type.modbus.filterChangeInterval.description = Intervall Filterwechsel (in Monaten) +channel-type.modbus.filterChangeRemainingTime.label = Filter Restlaufzeit +channel-type.modbus.filterChangeRemainingTime.description = Filter Restlaufzeit (in Minuten) +channel-type.modbus.bypassRoomTemperature.label = Bypass Raumtemperatur +channel-type.modbus.bypassRoomTemperature.description = Bypass Raumtemperatur +channel-type.modbus.bypassMinOutsideTemperature.label = Minimale Auߟentemperatur für Bypass +channel-type.modbus.bypassMinOutsideTemperature.description = Minimale Auߟentemperatur für Bypass +channel-type.modbus.offsetExtractAir.label = Offset Abluft +channel-type.modbus.offsetExtractAir.description = Offset Abluft +channel-type.modbus.operatingHours.label = Betriebsstunden +channel-type.modbus.operatingHours.description = Betriebsstunden (in Minuten) +channel-type.modbus.outputPower.label = Leistung +channel-type.modbus.outputPower.description = Leistung VHZ/NHZ (in Prozent) +channel-type.modbus.errors.label = Fehler +channel-type.modbus.errors.description = Fehler codiert als ganzzahliger Wert +channel-type.modbus.warnings.label = Warnungen +channel-type.modbus.warnings.description = Warnungen codiert als ganzzahliger Wert +channel-type.modbus.infos.label = Infos +channel-type.modbus.infos.description = Infos codiert als ganzzahliger Wert +channel-type.modbus.noOfErrors.label = Anzahl Fehler +channel-type.modbus.noOfErrors.description = Anzahl Fehler +channel-type.modbus.noOfWarnings.label = Anzahl Warnungen +channel-type.modbus.noOfWarnings.description = Anzahl Warnungen +channel-type.modbus.noOfInfos.label = Anzahl Infos +channel-type.modbus.noOfInfos.description = Anzahl Infos +channel-type.modbus.message.label = Fehler / Warnungen / Infos +channel-type.modbus.message.description = Fehler / Warnungen / Infos codiert als Zeichenkette +channel-type.modbus.sensorConfig.label = Sensor-Konfiguration +channel-type.modbus.sensorConfig.description = Sensor-Konfiguration (installiert oder nicht) +channel-type.modbus.bypassStatus.label = Status Bypass +channel-type.modbus.bypassStatus.description = Status Bypass +channel-type.modbus.bypass.label = Bypass aktiv von/bis (Tag und Monat) +channel-type.modbus.bypass.description = Bypass wird von diesem Tag und Monat an aktiviert/deaktiviert + +# channels (general) +channel-group-type.modbus.general.channel.preHeaterStatus.label = Status Vorheizung +channel-group-type.modbus.general.channel.preHeaterStatus.description = Status Vorheizung +channel-group-type.modbus.general.channel.nhzDuctSensor.label = NHZ Kanalfühler +channel-group-type.modbus.general.channel.nhzReturnSensor.label = NHZ Rücklauffühler +channel-group-type.modbus.general.channel.vhzDuctSensor.label = VHZ Kanalfühler +channel-group-type.modbus.general.channel.temperatureOutsideAir.label = Temperatur Auߟenluft +channel-group-type.modbus.general.channel.temperatureSupplyAir.label = Temperatur Zuluft +channel-group-type.modbus.general.channel.temperatureOutgoingAir.label = Temperatur Fortluft +channel-group-type.modbus.general.channel.temperatureExtractAir.label = Temperatur Abluft +channel-group-type.modbus.general.channel.supplyAirRpm.label = Zuluft RPM +channel-group-type.modbus.general.channel.extractAirRpm.label = Abluft RPM +channel-group-type.modbus.general.channel.operatingHoursSupplyAirVent.label = Betriebsstunden Zuluft-Ventilator +channel-group-type.modbus.general.channel.operatingHoursExtractAirVent.label = Betriebsstunden Abluft-Ventilator +channel-group-type.modbus.general.channel.operatingHoursVhz.label = Betriebsstunden VHZ +channel-group-type.modbus.general.channel.operatingHoursNhz.label = Betriebsstunden NHZ +channel-group-type.modbus.general.channel.outputPowerVhz.label = Leistung VHZ +channel-group-type.modbus.general.channel.outputPowerNhz.label = Leistung NHZ +channel-group-type.modbus.general.channel.autoSwUpdate.label = Auto SW Update +channel-group-type.modbus.general.channel.autoSwUpdate.description = Zeigt an, ob automatische Software-Updates aktiviert sind +channel-group-type.modbus.general.channel.accessHeliosPortal.label = Access Helios Portal +channel-group-type.modbus.general.channel.accessHeliosPortal.description = Zeigt an, ob Zugriff auf das Helios-Portal aktiviert ist +channel-group-type.modbus.operation.channel.partyModeDuration.label = Partybetrieb Dauer +channel-group-type.modbus.operation.channel.preHeaterStatus.description = Partybetrieb Dauer (in Minuten) +channel-group-type.modbus.operation.channel.partyModeFanStage.label = Partybetrieb Lüfterstufe +channel-group-type.modbus.operation.channel.partyModeFanStage.description = Partybetrieb Lüfterstufe +channel-group-type.modbus.operation.channel.partyModeRemainingTime.label = Partybetrieb Restzeit +channel-group-type.modbus.operation.channel.partyModeRemainingTime.description = Partybetrieb Restzeit +channel-group-type.modbus.operation.channel.partyModeStatus.label = Partybetrieb Status +channel-group-type.modbus.operation.channel.partyModeStatus.description = Partybetrieb Status +channel-group-type.modbus.operation.channel.standbyModeDuration.label = Ruhebetrieb Dauer +channel-group-type.modbus.operation.channel.standbyaterStatus.description = Ruhebetrieb Dauer (in Minuten) +channel-group-type.modbus.operation.channel.standbyModeFanStage.label = Ruhebetrieb Lüfterstufe +channel-group-type.modbus.operation.channel.standbyModeFanStage.description = Ruhebetrieb Lüfterstufe +channel-group-type.modbus.operation.channel.standbyModeRemainingTime.label = Ruhebetrieb Restzeit +channel-group-type.modbus.operation.channel.standbyModeRemainingTime.description = Ruhebetrieb Restzeit +channel-group-type.modbus.operation.channel.standbyModeStatus.label = Ruhebetrieb Status +channel-group-type.modbus.operation.channel.standbyModeStatus.description = Ruhebetrieb Status +channel-group-type.modbus.operation.channel.holidayProgrammeStart.label = Urlaubsprogramm Start +channel-group-type.modbus.operation.channel.holidayProgrammeStart.description = Urlaubsprogramm Start +channel-group-type.modbus.operation.channel.holidayProgrammeEnd.label = Urlaubsprogramm Ende +channel-group-type.modbus.operation.channel.holidayProgrammeEnd.description = Urlaubsprogramm Ende +channel-group-type.modbus.operation.channel.percentageFanStage.label = Prozentuelle Lüfterstufe +channel-group-type.modbus.operation.channel.percentageFanStage.description = Prozentuelle Lüfterstufe +channel-group-type.modbus.co2Control.channel.co2ControlSetValue.label = Status CO2-Steuerung +channel-group-type.modbus.co2Control.channel.co2ControlSetValue.description = Status CO2-Steuerung +channel-group-type.modbus.co2Control.channel.co2ControlSteps.label = Stufen CO2-Steuerung +channel-group-type.modbus.co2Control.channel.co2ControlSteps.description = Stufen CO2-Steuerung (in ppm) +channel-group-type.modbus.vocControl.channel.vocControlSetValue.label = Status VOC-Steuerung +channel-group-type.modbus.vocControl.channel.vocControlSetValue.description = Status VOC-Steuerung +channel-group-type.modbus.vocControl.channel.vocControlSteps.label = Stufen VOC-Steuerung +channel-group-type.modbus.vocControl.channel.vocControlSteps.description = Stufen VOC-Steuerung (in ppm) diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/infos.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/infos.properties new file mode 100644 index 0000000000..34dbb6b59b --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/infos.properties @@ -0,0 +1,9 @@ +# Helios easyControls infos according to bit encoding (the number represents the bit encoding the info) +info.0 = Filter change +info.1 = Frost protection WT +info.2 = SD card error +info.3 = Failure of external module (more info in log file) +info.4 = n/a +info.5 = n/a +info.6 = n/a +info.7 = n/a diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/infos_de.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/infos_de.properties new file mode 100644 index 0000000000..6cf828f7b0 --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/infos_de.properties @@ -0,0 +1,9 @@ +# Helios easyControls infos according to bit encoding (the number represents the bit encoding the info) +info.0 = Filterwechsel +info.1 = Frostschutz WT +info.2 = SD-Karten Fehler +info.3 = Ausfall eines externen Moduls (weitere Info im Logfile) +info.4 = n/a +info.5 = n/a +info.6 = n/a +info.7 = n/a diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/properties.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/properties.properties new file mode 100644 index 0000000000..81e6990bae --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/properties.properties @@ -0,0 +1,106 @@ +# Thing properties +property.articleDescription = Article Description +property.refNo = Ref No +property.macAddress = MAC Address +property.language = Language +property.voltageFanStage1ExtractAir = Voltage Fan Stage 1 Extract Air +property.voltageFanStage2ExtractAir = Voltage Fan Stage 2 Extract Air +property.voltageFanStage3ExtractAir = Voltage Fan Stage 3 Extract Air +property.voltageFanStage4ExtractAir = Voltage Fan Stage 4 Extract Air +property.voltageFanStage1SupplyAir = Voltage Fan Stage 1 Supply Air +property.voltageFanStage2SupplyAir = Voltage Fan Stage 2 Supply Air +property.voltageFanStage3SupplyAir = Voltage Fan Stage 3 Supply Air +property.voltageFanStage4SupplyAir = Voltage Fan Stage 4 Supply Air +property.kwlBe = KWL-BE active +property.kwlBec = KWL-BEC active +property.unitConfig = Unit Config +property.unitConfig.1 = DIBt +property.unitConfig.2 = PHI +property.kwlFtfConfig0 = KWL-FTF Config 0 +property.kwlFtfConfig1 = KWL-FTF Config 1 +property.kwlFtfConfig2 = KWL-FTF Config 2 +property.kwlFtfConfig3 = KWL-FTF Config 3 +property.kwlFtfConfig4 = KWL-FTF Config 4 +property.kwlFtfConfig5 = KWL-FTF Config 5 +property.kwlFtfConfig6 = KWL-FTF Config 6 +property.kwlFtfConfig7 = KWL-FTF Config 7 +property.humidityControlStatus = Humidity Control Status +property.co2ControlStatus = CO2 Control Status +property.vocControlStatus = VOC Control Status +property.dateFormat = Date Format +property.dateFormat.0 = dd.mm.yyyy +property.dateFormat.1 = mm.dd.yyyy +property.dateFormat.2 = yyyy.mm.dd +property.heatExchangerType = Heat Exchanger Type +property.heatExchangerType.1 = Plastic +property.heatExchangerType.2 = Aluminium +property.heatExchangerType.3 = Enthalpy +property.serNo = Serial No +property.prodCode = Production Code +property.vhzType = Pre Heater Type +property.vhzType.1 = EH-Basis +property.vhzType.2 = EH-ERW +property.vhzType.3 = SEWT +property.vhzType.4 = LEWT +property.functionTypeKwlEm = Function Type KWL-EM +property.externalContact = External Contact +property.fanStageStepped0to2v = Fan Stage Stepped 0-2V +property.fanStageStepped2to4v = Fan Stage Stepped 2-4V +property.fanStageStepped4to6v = Fan Stage Stepped 4-6V +property.fanStageStepped6to8v = Fan Stage Stepped 6-8V +property.fanStageStepped8to10v = Fan Stage Stepped 8-10V +property.offsetExtractAir = Offset Ext Air +property.assignmentFanStages = Assignment Fan Stages +property.assignmentFanStages.0 = 0..10V +property.assignmentFanStages.1 = Stepped +property.sensorNameHumidityAndTemp1 = Sensor Name Humidity+Temperature 1 +property.sensorNameHumidityAndTemp2 = Sensor Name Humidity+Temperature 2 +property.sensorNameHumidityAndTemp3 = Sensor Name Humidity+Temperature 3 +property.sensorNameHumidityAndTemp4 = Sensor Name Humidity+Temperature 4 +property.sensorNameHumidityAndTemp5 = Sensor Name Humidity+Temperature 5 +property.sensorNameHumidityAndTemp6 = Sensor Name Humidity+Temperature 6 +property.sensorNameHumidityAndTemp7 = Sensor Name Humidity+Temperature 7 +property.sensorNameHumidityAndTemp8 = Sensor Name Humidity+Temperature 8 +property.sensorNameCo21 = Sensor Name CO2 1 +property.sensorNameCo22 = Sensor Name CO2 2 +property.sensorNameCo23 = Sensor Name CO2 3 +property.sensorNameCo24 = Sensor Name CO2 4 +property.sensorNameCo25 = Sensor Name CO2 5 +property.sensorNameCo26 = Sensor Name CO2 6 +property.sensorNameCo27 = Sensor Name CO2 7 +property.sensorNameCo28 = Sensor Name CO2 8 +property.sensorNameVoc1 = Sensor Name VOC 1 +property.sensorNameVoc2 = Sensor Name VOC 2 +property.sensorNameVoc3 = Sensor Name VOC 3 +property.sensorNameVoc4 = Sensor Name VOC 4 +property.sensorNameVoc5 = Sensor Name VOC 5 +property.sensorNameVoc6 = Sensor Name VOC 6 +property.sensorNameVoc7 = Sensor Name VOC 7 +property.sensorNameVoc8 = Sensor Name VOC 8 +property.softwareVersionBasis = SW Version Basis +property.sensorConfigKwlFtf1 = Sensor Config KWL-FTF 1 +property.sensorConfigKwlFtf2 = Sensor Config KWL-FTF 2 +property.sensorConfigKwlFtf3 = Sensor Config KWL-FTF 3 +property.sensorConfigKwlFtf4 = Sensor Config KWL-FTF 4 +property.sensorConfigKwlFtf5 = Sensor Config KWL-FTF 5 +property.sensorConfigKwlFtf6 = Sensor Config KWL-FTF 6 +property.sensorConfigKwlFtf7 = Sensor Config KWL-FTF 7 +property.sensorConfigKwlFtf8 = Sensor Config KWL-FTF 8 + +# general values +property.onOff.1 = On +property.onOff.0 = Off +property.function.1 = Function 1 +property.function.2 = Function 2 +property.function.3 = Function 3 +property.function.4 = Function 4 +property.function.5 = Function 5 +property.function.6 = Function 6 +property.kwlFtfConfig.1 = Relative Humidity +property.kwlFtfConfig.2 = Temperature +property.kwlFtfConfig.3 = Relative Humidity and Temperature +property.sensorConfig.0 = No sensor +property.sensorConfig.1 = Sensor installed +property.controlStatus.0 = Off +property.controlStatus.1 = Stepped +property.controlStatus.2 = Continuous diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/properties_de.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/properties_de.properties new file mode 100644 index 0000000000..b87387f3f0 --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/properties_de.properties @@ -0,0 +1,106 @@ +# Thing properties +property.articleDescription = Artikelbeschreibung +property.refNo = Ref Nr +property.macAddress = MAC Adresse +property.language = Sprache +property.voltageFanStage1ExtractAir = Spannung Lüfterstufe 1 Abluft +property.voltageFanStage2ExtractAir = Spannung Lüfterstufe 2 Abluft +property.voltageFanStage3ExtractAir = Spannung Lüfterstufe 3 Abluft +property.voltageFanStage4ExtractAir = Spannung Lüfterstufe 4 Abluft +property.voltageFanStage1SupplyAir = Spannung Lüfterstufe 1 Zuluft +property.voltageFanStage2SupplyAir = Spannung Lüfterstufe 2 Zuluft +property.voltageFanStage3SupplyAir = Spannung Lüfterstufe 3 Zuluft +property.voltageFanStage4SupplyAir = Spannung Lüfterstufe 4 Zuluft +property.kwlBe = KWL-BE aktiv +property.kwlBec = KWL-BEC aktiv +property.unitConfig = Gerätekonfiguration +property.unitConfig.1 = DIBt +property.unitConfig.2 = PHI +property.kwlFtfConfig0 = KWL-FTF Konfiguration 0 +property.kwlFtfConfig1 = KWL-FTF Konfiguration 1 +property.kwlFtfConfig2 = KWL-FTF Konfiguration 2 +property.kwlFtfConfig3 = KWL-FTF Konfiguration 3 +property.kwlFtfConfig4 = KWL-FTF Konfiguration 4 +property.kwlFtfConfig5 = KWL-FTF Konfiguration 5 +property.kwlFtfConfig6 = KWL-FTF Konfiguration 6 +property.kwlFtfConfig7 = KWL-FTF Konfiguration 7 +property.humidityControlStatus = Status Feuchte-Steuerung +property.co2ControlStatus = Status CO2-Steuerung +property.vocControlStatus = Status VOC-Steuerung +property.dateFormat = Datumsformat +property.dateFormat.0 = dd.mm.yyyy +property.dateFormat.1 = mm.dd.yyyy +property.dateFormat.2 = yyyy.mm.dd +property.heatExchangerType = Wärmetauscher Typ +property.heatExchangerType.1 = Kunststoff +property.heatExchangerType.2 = Aluminium +property.heatExchangerType.3 = Enthalpie +property.serNo = Seriennummer +property.prodCode = Produktions-Code +property.vhzType = VHZ Typ +property.vhzType.1 = EH-Basis +property.vhzType.2 = EH-ERW +property.vhzType.3 = SEWT +property.vhzType.4 = LEWT +property.functionTypeKwlEm = Funktion KWL-EM +property.externalContact = Externer Kontakt +property.fanStageStepped0to2v = Lüfterstufe stufig 0-2V +property.fanStageStepped2to4v = Lüfterstufe stufig 2-4V +property.fanStageStepped4to6v = Lüfterstufe stufig 4-6V +property.fanStageStepped6to8v = Lüfterstufe stufig 6-8V +property.fanStageStepped8to10v = Lüfterstufe stufig 8-10V +property.offsetExtractAir = Offset Abluft +property.assignmentFanStages = Zuordnung Lüfterstufen +property.assignmentFanStages.0 = 0..10V +property.assignmentFanStages.1 = Stufig +property.sensorNameHumidityAndTemp1 = Sensorname Feuchte+Temperatur 1 +property.sensorNameHumidityAndTemp2 = Sensorname Feuchte+Temperatur 2 +property.sensorNameHumidityAndTemp3 = Sensorname Feuchte+Temperatur 3 +property.sensorNameHumidityAndTemp4 = Sensorname Feuchte+Temperatur 4 +property.sensorNameHumidityAndTemp5 = Sensorname Feuchte+Temperatur 5 +property.sensorNameHumidityAndTemp6 = Sensorname Feuchte+Temperatur 6 +property.sensorNameHumidityAndTemp7 = Sensorname Feuchte+Temperatur 7 +property.sensorNameHumidityAndTemp8 = Sensorname Feuchte+Temperatur 8 +property.sensorNameCo21 = Sensorname CO2 1 +property.sensorNameCo22 = Sensorname CO2 2 +property.sensorNameCo23 = Sensorname CO2 3 +property.sensorNameCo24 = Sensorname CO2 4 +property.sensorNameCo25 = Sensorname CO2 5 +property.sensorNameCo26 = Sensorname CO2 6 +property.sensorNameCo27 = Sensorname CO2 7 +property.sensorNameCo28 = Sensorname CO2 8 +property.sensorNameVoc1 = Sensorname VOC 1 +property.sensorNameVoc2 = Sensorname VOC 2 +property.sensorNameVoc3 = Sensorname VOC 3 +property.sensorNameVoc4 = Sensorname VOC 4 +property.sensorNameVoc5 = Sensorname VOC 5 +property.sensorNameVoc6 = Sensorname VOC 6 +property.sensorNameVoc7 = Sensorname VOC 7 +property.sensorNameVoc8 = Sensorname VOC 8 +property.softwareVersionBasis = SW Version Basis +property.sensorConfigKwlFtf1 = Sensor Konfiguration KWL-FTF 1 +property.sensorConfigKwlFtf2 = Sensor Konfiguration KWL-FTF 2 +property.sensorConfigKwlFtf3 = Sensor Konfiguration KWL-FTF 3 +property.sensorConfigKwlFtf4 = Sensor Konfiguration KWL-FTF 4 +property.sensorConfigKwlFtf5 = Sensor Konfiguration KWL-FTF 5 +property.sensorConfigKwlFtf6 = Sensor Konfiguration KWL-FTF 6 +property.sensorConfigKwlFtf7 = Sensor Konfiguration KWL-FTF 7 +property.sensorConfigKwlFtf8 = Sensor Konfiguration KWL-FTF 8 + +# general values +property.onOff.1 = Ein +property.onOff.0 = Aus +property.function.1 = Funktion 1 +property.function.2 = Funktion 2 +property.function.3 = Funktion 3 +property.function.4 = Funktion 4 +property.function.5 = Funktion 5 +property.function.6 = Funktion 6 +property.kwlFtfConfig.1 = Relative Luftfeuchtigkeit +property.kwlFtfConfig.2 = Temperatur +property.kwlFtfConfig.3 = Relative Luftfeuchtigkeit und Temperatur +property.sensorConfig.0 = Kein sensor +property.sensorConfig.1 = Sensor installiert +property.controlStatus.0 = Aus +property.controlStatus.1 = Stufig +property.controlStatus.2 = Stufenlos diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/stateflags.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/stateflags.properties new file mode 100644 index 0000000000..20d41e1529 --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/stateflags.properties @@ -0,0 +1,39 @@ +# Helios easyControls status flags according to bit encoding (the first number represents the bit encoding the status flag, +# the second number indicates the possible bit states) +stateflag.0.1 = System pre-initialized (display in BT in the meantime: SYSTEM BOOTING) +stateflag.1.1 = System software update active (display in BT in the meantime: SYSTEM LOADING) +stateflag.2.1 = Firware update is activated +stateflag.3.1 = INBA is active +stateflag.4.1 = Party mode +stateflag.5.1 = Standby mode +stateflag.6.1 = Holiday mode +stateflag.7.1 = VHZ is configured on Basis-Module +stateflag.8.1 = VHZ is configured on ext. module +stateflag.9.1 = Ext. module VHZ active (e.g. BT display: Menu item VHZ overlay) +stateflag.10.1 = VHZ configured +stateflag.11.0 = VHZ: Heating type electrical +stateflag.11.1 = VHZ: Heating type brine (earth or air) +stateflag.12.1 = NHZ configured (temperature profile set unequal HEATING OFF) +stateflag.13.1 = Ext. module NHZ active (e.g. BT display: Menu item NHZ overlay) +stateflag.14.1 = NHZ active (control, error, identical to "Auxiliary heating.On") +stateflag.15.0 = NHZ: Heating type electrical +stateflag.15.1 = NHZ: Heating type warm water +stateflag.16.1 = CO2 control on +stateflag.17.1 = Humi control on +stateflag.18.1 = VOC control on +stateflag.19.1 = n/a +stateflag.20.1 = min. an external contact connected (EM or ES) +stateflag.21.1 = External contact function active +stateflag.22.1 = External access permitted +stateflag.23.1 = External access active +stateflag.24.1 = Defrost heat exchanger +stateflag.25.1 = Defrost warm water register +stateflag.26.1 = Filter change due +stateflag.27.0 = Config_2 (PHI) +stateflag.27.1 = Config_1 (DIBT) +stateflag.28.1 = BEC-U1 deactivated via web (pure display function) +stateflag.29.1 = Lock control panel +stateflag.30.1 = Master Password required (set when incorrect PW has been entered 3 times) +stateflag.31.1 = Fan stage display in % + +stateflag.unavailable = Status messages have not yet been read from the device diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/stateflags_de.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/stateflags_de.properties new file mode 100644 index 0000000000..c5493066cc --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/stateflags_de.properties @@ -0,0 +1,39 @@ +# Helios easyControls status flags according to bit encoding (the first number represents the bit encoding the status flag, +# the second number indicates the possible bit states) +stateflag.0.1 = System fertig initialisiert (Anzeige im BT bis dahin: SYSTEM BOOTING) +stateflag.1.1 = System Softwareupdate aktiv (Anzeige im BT bis dahin: SYSTEM LOADING) +stateflag.2.1 = Firwareupdate wird aktiviert +stateflag.3.1 = INBA ist aktiv +stateflag.4.1 = Partybetrieb +stateflag.5.1 = Ruhebetrieb +stateflag.6.1 = Urlaubsbetrieb +stateflag.7.1 = VHZ ist auf Basis-Modul konfiguriert +stateflag.8.1 = VHZ ist auf ErwModul konfiguriert +stateflag.9.1 = ErwModul VHZ aktiv (z.B. BT-Anzeige: Menüpunkt VHZ einblenden) +stateflag.10.1 = VHZ konfiguriert +stateflag.11.0 = VHZ: Heizungstyp elektrisch +stateflag.11.1 = VHZ: Heizungstyp Sole (Erde oder Luft) +stateflag.12.1 = NHZ konfiguriert (Temperatur eingestellt ungl. HEIZUNG AUS) +stateflag.13.1 = ErwModul NHZ aktiv (z.B. BT-Anzeige: Menüpunkt NHZ einblenden) +stateflag.14.1 = NHZ aktiv (Regelung, Fehler, identisch mit "Nachheizung.Ein") +stateflag.15.0 = NHZ: Heizungstyp elektrisch +stateflag.15.1 = NHZ: Heizungstyp Warmwasser +stateflag.16.1 = CO2 Regelung ein +stateflag.17.1 = Humi Regelung ein +stateflag.18.1 = VOC Regelung ein +stateflag.19.1 = n/a +stateflag.20.1 = min. ein externer Kontakt angeschlossen (EM oder ES) +stateflag.21.1 = Externe Kontaktfunktion aktiv +stateflag.22.1 = Externen Zugriff zulassen +stateflag.23.1 = Externer Zugriff aktiv +stateflag.24.1 = Defrost Wärmetauscher +stateflag.25.1 = Defrost Warmwasserregister +stateflag.26.1 = Filterwechsel fällig +stateflag.27.0 = Konfig_2 (PHI) +stateflag.27.1 = Konfig_1 (DIBT) +stateflag.28.1 = BEC-U1 über Web deaktiviert (reine Anzeigefunktion) +stateflag.29.1 = Bedienteil sperren +stateflag.30.1 = Master Password required (Wird gesetzt wenn 3x falsches PW eingegeben wurde) +stateflag.31.1 = Anzeige der Lüfterstufe in % + +stateflag.unavailable = Statusmeldungen wurden noch nicht vom Gerät übertragen diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/warnings.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/warnings.properties new file mode 100644 index 0000000000..c1b6f2edb9 --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/warnings.properties @@ -0,0 +1,9 @@ +# Helios easyControls warnings according to bit encoding (the number represents the bit encoding the warning) +warning.0 = Internal humidity sensor provides no value +warning.1 = n/a +warning.2 = n/a +warning.3 = n/a +warning.4 = n/a +warning.5 = n/a +warning.6 = n/a +warning.7 = n/a diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/warnings_de.properties b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/warnings_de.properties new file mode 100644 index 0000000000..0713d546a5 --- /dev/null +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/i18n/warnings_de.properties @@ -0,0 +1,9 @@ +# Helios easyControls warnings according to bit encoding (the number represents the bit encoding the warning) +warning.0 = Interner Feuchtefühler liefert keinen Wert +warning.1 = n/a +warning.2 = n/a +warning.3 = n/a +warning.4 = n/a +warning.5 = n/a +warning.6 = n/a +warning.7 = n/a diff --git a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/thing/thing-types.xml index 6c7c34f97a..e509677dd2 100644 --- a/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.modbus.helioseasycontrols/src/main/resources/OH-INF/thing/thing-types.xml @@ -279,8 +279,8 @@ VOC control status - - CO2 control steps (in ppm) + + VOC control steps (in ppm) @@ -504,7 +504,7 @@ Number:Time - Stopping time preheater/afterheater in seconds + Stopping time preheater/afterheater Heating @@ -590,21 +590,21 @@ Number - Errors as integer value + Errors encoded as integer value Number - Warnings as integer value + Warnings encoded as integer value Number - Infos as integer value + Infos encoded as integer value