Updated external content (Jenkins build 247)

pull/1569/head
openHAB Build Server 2021-02-06 16:29:30 +00:00
parent e7a44a0708
commit e1cc0171e4
5 changed files with 147 additions and 48 deletions

View File

@ -136,5 +136,4 @@ These resources can be useful to learn what to send using the `command`channel:
- [AVR-X2000/E400](http://www2.aerne.com/Public/dok-sw.nsf/0c6187bc750a16fcc1256e3c005a9740/96a2ba120706d10dc1257bdd0033493f/$FILE/AVRX2000_E400_PROTOCOL(10.1.0)_V04.pdf)
- [AVR-X4000](https://usa.denon.com/us/product/hometheater/receivers/avrx4000?docname=AVRX4000_PROTOCOL(10%203%200)_V03.pdf)
- [AVR-3311CI/AVR-3311/AVR-991](https://www.awe-europe.com/documents/Control%20Docs/Denon/Archive/AVR3311CI_AVR3311_991_PROTOCOL_V7.1.0.pdf)
- [CEOL Piccolo DRA-N5/RCD-N8](http://www.audioproducts.com.au/downloadcenter/products/Denon/CEOLPICCOLOBK/Manuals/DRAN5_RCDN8_PROTOCOL_V.1.0.0.pdf)
- [Marantz Control Protocol (2014+)](http://m.us.marantz.com/DocumentMaster/US/Marantz%202014%20NR%20Series%20-%20SR%20Series%20RS232%20IP%20Protocol.xls)
- [Denon/Marantz Control Protocol] (http://assets.eu.denon.com/DocumentMaster/DE/AVR1713_AVR1613_PROTOCOL_V8.6.0.pdf)

View File

@ -15,7 +15,7 @@ install: manual
# 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
@ -130,16 +130,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 |
@ -197,6 +197,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
@ -206,10 +207,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<String, Object> getErrorMessages()
```
*Return values:*
* *errorMessages:* A `List<String>` object containing all error messages
```
public Map<String, Object> getWarningMessages()
```
*Return values:*
* *warningMessages:* A `List<String>` object containing all warning messages
```
public Map<String, Object> getInfoMessages()
```
*Return values:*
* *infoMessages:* A `List<String>` object containing all info messages
```
public Map<String, Object> getStatusMessages()
```
*Return values:*
* *statusMessages:* A `List<String>` object containing all status messages
```
public Map<String, Object> getMessages()
```
*Return values:*
* *errorMessages:* A `List<String>` object containing all error messages
* *warningMessages:* A `List<String>` object containing all warning messages
* *infoMessages:* A `List<String>` object containing all info messages
* *statusMessages:* A `List<String>` object containing all status messages
## Properties
The binding provides the following properties:
@ -291,6 +341,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<String>` object which can then be used to e.g. send the messages via email.
## Full Example
### Thing Configuration
@ -305,50 +370,71 @@ Bridge modbus:tcp:modbus-gateway "Modbus TCP/IP Gateway" [ host="192.168.47.11",
```
// Manual operation
Number KWL_Manual "Manual operation" <fan> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#operatingMode"}
Number KWL_Stage "KWL fan stage" <fan> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#fanStage"}
Number:Dimensionless KWL_Stage_Percent "KWL fan stage [%d %unit%]" <fan> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#percentageFanStage"}
Number KWL_Manual "Manual operation" <fan> (gKWL) ["Control"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#operatingMode"}
Number KWL_Stage "KWL fan stage" <fan> (gKWL) ["Setpoint", "Level"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#fanStage"}
Number:Dimensionless KWL_Stage_Percent "KWL fan stage [%d %unit%]" <fan> (gKWL) ["Status", "Level"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#percentageFanStage"}
// Party mode
Switch KWL_Party_Mode "Party mode" <parents> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeStatus"}
Number:Time KWL_Party_Mode_Duration "Party mode duration [%d %unit%]" <clock> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeDuration"}
Number KWL_Party_Mode_Stage "Party mode fan stage" <fan> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeFanStage"}
Number:Time KWL_Party_Mode_Remaining "Party mode remaining time [%d %unit%]" <clock> (gKWL) {channel="modbus:helios-ventilation-easycontrols:modbus-gateway:kwl:operation#partyModeRemainingTime"}
Switch KWL_Party_Mode "Party mode" <parents> (gKWL) ["Control"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeStatus"}
Number:Time KWL_Party_Mode_Duration "Party mode duration [%d %unit%]" <clock> (gKWL) ["Setpoint", "Duration"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeDuration"}
Number KWL_Party_Mode_Stage "Party mode fan stage" <fan> (gKWL) ["Setpoint", "Level"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#partyModeFanStage"}
Number:Time KWL_Party_Mode_Remaining "Party mode remaining time [%d %unit%]" <clock> (gKWL) ["Status", "Duration"] {channel="modbus:helios-ventilation-easycontrols:modbus-gateway:kwl:operation#partyModeRemainingTime"}
// Standby mode
Switch KWL_Standby_Mode "Standby mode" <fan_off> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeStatus"}
Number:Time KWL_Standby_Mode_Duration "Standby mode duration [%d %unit%]" <clock> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeDuration"}
Number KWL_Standby_Mode_Stage "Standby mode fan stage" <fan> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeFanStage"}
Number:Time KWL_Standby_Mode_Remaining "Standby mode remaining time [%d %unit%]" <clock> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeRemainingTime"}
Switch KWL_Standby_Mode "Standby mode" <fan_off> (gKWL) ["Control"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeStatus"}
Number:Time KWL_Standby_Mode_Duration "Standby mode duration [%d %unit%]" <clock> (gKWL) ["Setpoint", "Duration"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeDuration"}
Number KWL_Standby_Mode_Stage "Standby mode fan stage" <fan> (gKWL) ["Setpoint", "Level"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeFanStage"}
Number:Time KWL_Standby_Mode_Remaining "Standby mode remaining time [%d %unit%]" <clock> (gKWL) ["Status", "Duration"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:operation#standbyModeRemainingTime"}
// Status infos
Number:Temperature KWL_Temp_Outide_Air "Temperature outside air [%.1f °C]" <temperature> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureOutsideAir"}
Number:Temperature KWL_Temp_Supply_Air "Temperature supply air [%.1f °C]" <temperature> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureSupplyAir"}
Number:Temperature KWL_Temp_Outgoing_Air "Temperature outgoing air [%.1f °C]" <temperature> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureOutgoingAir"}
Number:Temperature KWL_Temp_Extract_Air "Temperature extract air [%.1f °C]" <temperature> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureExtractAir"}
Number KWL_Supply_Air_RPM "RPM supply air [%d]" <fan> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#supplyAirRpm"}
Number KWL_Extract_Air_RPM "RPM extract air [%d]" <fan> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#extractAirRpm"}
Number KWL_Filter_Change "Filter change [MAP(helios_yes_no.map):%s]" <none> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:unitConfig#filterChange"}
Number:Time KWL_Filter_Change_Remaining "Filter change [%d %unit%]" <clock> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#filterChangeRemainingTime"}
Number:Temperature KWL_Temp_Outide_Air "Temperature outside air [%.1f °C]" <temperature> (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureOutsideAir"}
Number:Temperature KWL_Temp_Supply_Air "Temperature supply air [%.1f °C]" <temperature> (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureSupplyAir"}
Number:Temperature KWL_Temp_Outgoing_Air "Temperature outgoing air [%.1f °C]" <temperature> (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureOutgoingAir"}
Number:Temperature KWL_Temp_Extract_Air "Temperature extract air [%.1f °C]" <temperature> (gKWL) ["Measurement", "Temperature"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#temperatureExtractAir"}
Number KWL_Supply_Air_RPM "RPM supply air [%d]" <fan> (gKWL) ["Measurement", "Property"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#supplyAirRpm"}
Number KWL_Extract_Air_RPM "RPM extract air [%d]" <fan> (gKWL) ["Measurement", "Property"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#extractAirRpm"}
Number KWL_Filter_Change "Filter change [MAP(helios_yes_no.map):%s]" <none> (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:unitConfig#filterChange"}
Number:Time KWL_Filter_Change_Remaining "Filter change [%d %unit%]" <clock> (gKWL) ["Status", "Duration"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#filterChangeRemainingTime"}
Number KWL_Errors "Number errors [%d]" <error> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfErrors"}
String KWL_Errors_String "Error messages [%s]" <error> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#errorsMsg"}
Number KWL_Warnings "Number warnings [%d]" <warning> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfWarnings"}
String KWL_Warnings_String "Warning messages [%s]" <warning> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#warningsMsg"}
Number KWL_Infos "Number infos [%d]" <info> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfInfos"}
String KWL_Infos_String "Info messages [%s]" <info> (gKWL) {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#infosMsg"}
Number KWL_Errors "Number errors [%d]" <error> (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfErrors"}
String KWL_Errors_String "Error messages [%s]" <error> (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#errorsMsg"}
Number KWL_Warnings "Number warnings [%d]" <warning> (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfWarnings"}
String KWL_Warnings_String "Warning messages [%s]" <warning> (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#warningsMsg"}
Number KWL_Infos "Number infos [%d]" <info> (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#noOfInfos"}
String KWL_Infos_String "Info messages [%s]" <info> (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#infosMsg"}
String KWL_Status_Flags "Status Flags [%s]" <info> (gKWL) ["Status"] {channel="modbus:helios-easycontrols:modbus-gateway:kwl:general#statusFlags"}
```
### Rule
```
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<String, List<String>> msg = kwlActions.getMessages
logInfo("KWL Error Messages", msg.get("errorMessages").toString)
logInfo("KWL Warning Messages", msg.get("warningMessages").toString)
logInfo("KWL Info Messages", msg.get("infoMessages").toString)
logInfo("KWL Status Messages", msg.get("statusMessages").toString)
end
```
### Transformation

View File

@ -59,7 +59,8 @@ The `server` thing has the following configuration parameters:
| restPath | yes | The subpath of the REST API on the remote openHAB server. Default is /rest |
| token | no | The token to use when the remote openHAB server is setup to require authorization to run its REST API. |
| accessibilityInterval | no | Minutes between checking the remote server accessibility. 0 to disable the check. Default is 3. |
| aliveInterval | no | Number of last minutes to take into account to determine whether the remote server is alive. 0 to disable this feature. Default is 5. |
| aliveInterval | no | Number of last minutes to consider when monitoring the receipt of events from the remote server. If an event is received during this interval, the remote server is considered alive and its accessibility will not be verified. Use 0 to disable this feature. Default is 5. |
| restartIfNoActivity | no | Set it to true if you want to restart the connection (SSE) to the remote server when no events are received in the monitored interval. It is not necessary if the goal is to properly handle a short network outage (few seconds). This can be useful if you want to deal with a long network outage. Do not enable it if you remote server does not send events during the monitored interval under normal conditions, it will cause frequent restart of the connection and potential loss of events. Default is false. |
The `thing` thing has the following configuration parameters:

View File

@ -279,8 +279,8 @@
<description>VOC control status</description>
</channel>
<channel id="vocControlSteps" typeId="ppmControlSteps">
<label>CO2 Control Steps</label>
<description>CO2 control steps (in ppm)</description>
<label>VOC Control Steps</label>
<description>VOC control steps (in ppm)</description>
</channel>
<!-- External CO2 Sensors -->
<channel id="externalSensorKwlVoc1" typeId="sensorValue"/>
@ -504,7 +504,7 @@
<channel-type id="runOnTimeVhzNhz" advanced="true">
<item-type>Number:Time</item-type>
<label>Stopping Time Preheater/Afterheater</label>
<description>Stopping time preheater/afterheater in seconds</description>
<description>Stopping time preheater/afterheater</description>
<category>Heating</category>
<state min="60" max="120" step="1" pattern="%d %unit%" readOnly="false"/>
</channel-type>
@ -590,21 +590,21 @@
<channel-type id="errors" advanced="false">
<item-type>Number</item-type>
<label>Errors</label>
<description>Errors as integer value</description>
<description>Errors encoded as integer value</description>
<state min="0" max="4294967295" step="1" pattern="%d" readOnly="true"/>
</channel-type>
<channel-type id="warnings" advanced="false">
<item-type>Number</item-type>
<label>Warnings</label>
<description>Warnings as integer value</description>
<description>Warnings encoded as integer value</description>
<state min="0" max="255" step="1" pattern="%d" readOnly="true"/>
</channel-type>
<channel-type id="infos" advanced="false">
<item-type>Number</item-type>
<label>Infos</label>
<description>Infos as integer value</description>
<description>Infos encoded as integer value</description>
<state min="0" max="255" step="1" pattern="%d" readOnly="true"/>
</channel-type>

View File

@ -63,11 +63,24 @@
<parameter name="aliveInterval" type="integer" min="0" step="1" unit="min">
<label>Alive Interval</label>
<description>Number of last minutes to take into account to determine whether the remote server is alive. 0 to
disable this feature. Default is 5.</description>
<description>Number of last minutes to consider when monitoring the receipt of events from the remote server. If an
event is received during this interval, the remote server is considered alive and its accessibility will not be
verified. Use 0 to disable this feature. Default is 5.</description>
<default>5</default>
<advanced>true</advanced>
</parameter>
<parameter name="restartIfNoActivity" type="boolean">
<label>Restart if no Activity</label>
<description>Set it to true if you want to restart the connection (SSE) to the remote server when no events are
received in the monitored interval. It is not necessary if the goal is to properly handle a short network outage
(few seconds). This can be useful if you want to deal with a long network outage. Do not enable it if you remote
server does not send events during the monitored interval under normal conditions, it will cause frequent restart
of the connection and potential loss of events. Default is false.
</description>
<default>false</default>
<advanced>true</advanced>
</parameter>
</config-description>
</bridge-type>