]> git.basschouten.com Git - openhab-addons.git/commitdiff
[http] Support chaining transformations without an intersection symbol (#17288)
authorjimtng <2554958+jimtng@users.noreply.github.com>
Tue, 20 Aug 2024 15:02:43 +0000 (01:02 +1000)
committerGitHub <noreply@github.com>
Tue, 20 Aug 2024 15:02:43 +0000 (17:02 +0200)
* [http] Support transformation chaining without an intersection symbol

Signed-off-by: Jimmy Tanagra <jcode@tanagra.id.au>
bundles/org.openhab.binding.http/README.md
bundles/org.openhab.binding.http/src/main/java/org/openhab/binding/http/internal/config/HttpChannelConfig.java
bundles/org.openhab.binding.http/src/main/resources/OH-INF/config/config.xml
bundles/org.openhab.binding.http/src/main/resources/OH-INF/i18n/http.properties

index 9313712a24b0f1d8be1872f5a0118a27d86399ca..4aae71596be70390b61859605139778340691567 100644 (file)
@@ -22,8 +22,8 @@ It can be extended with different channels.
 | `stateMethod`         | no       | GET     | Method used for requesting the state: `GET`, `PUT`, `POST`.                                                                                                                |
 | `commandMethod`       | no       | GET     | Method used for sending commands: `GET`, `PUT`, `POST`.                                                                                                                    |
 | `contentType`         | yes      | -       | MIME content-type of the command requests. Only used for  `PUT` and `POST`.                                                                                                |
-| `encoding`            | yes      | -       | Encoding to be used if no encoding is found in responses (advanced parameter).                                                                                             |  
-| `headers`             | yes      | -       | Additional headers that are sent along with the request. Format is "header=value". Multiple values can be stored as `headers="key1=value1", "key2=value2", "key3=value3",` | 
+| `encoding`            | yes      | -       | Encoding to be used if no encoding is found in responses (advanced parameter).                                                                                             |
+| `headers`             | yes      | -       | Additional headers that are sent along with the request. Format is "header=value". Multiple values can be stored as `headers="key1=value1", "key2=value2", "key3=value3",` |
 | `ignoreSSLErrors`     | no       | false   | If set to true, ignores invalid SSL certificate errors. This is potentially dangerous.                                                                                     |
 | `strictErrorHandling` | no       | false   | If set to true, thing status is changed depending on last request result (failed = `OFFLINE`). Failed requests result in `UNDEF` for channel values.                       |
 | `userAgent`           | yes      | (yes )  | Sets a custom user agent (default is "Jetty/version", e.g. "Jetty/9.4.20.v20190813").                                                                                      |
@@ -55,7 +55,7 @@ The `image` channel-type supports `stateExtension` only.
 |-------------------------|----------|-------------|-----------------------------------------------------------------------------------------------------------|
 | `stateExtension`        | yes      | -           | Appended to the `baseURL` for requesting states.                                                          |
 | `commandExtension`      | yes      | -           | Appended to the `baseURL` for sending commands. If empty, same as `stateExtension`.                       |
-| `stateTransformation  ` | yes      | -           | One or more transformation applied to received values before updating channel.                            |
+| `stateTransformation`   | yes      | -           | One or more transformation applied to received values before updating channel.                            |
 | `commandTransformation` | yes      | -           | One or more transformation applied to channel value before sending to a remote.                           |
 | `stateContent`          | yes      | -           | Content for state requests (if method is `PUT` or `POST`)                                                 |
 | `mode`                  | no       | `READWRITE` | Mode this channel is allowed to operate. `READONLY` means receive state, `WRITEONLY` means send commands. |
@@ -71,13 +71,15 @@ The relevant transformation service needs to be installed via the Main UI or add
 
 Here are a few examples to unwrap an incoming value via `stateTransformation` from a complex response:
 
-| Received value                                                      | Tr. Service | Transformation                            |
-|---------------------------------------------------------------------|-------------|-------------------------------------------|
-| `{device: {status: { temperature: 23.2 }}}`                         | JSONPATH    | `JSONPATH:$.device.status.temperature`    |
-| `<device><status><temperature>23.2</temperature></status></device>` | XPath       | `XPath:/device/status/temperature/text()` |
-| `THEVALUE:23.2°C`                                                   | REGEX       | `REGEX::(.*?)°`                           |
+| Received value                                                      | Tr. Service | Transformation                             |
+|---------------------------------------------------------------------|-------------|--------------------------------------------|
+| `{device: {status: { temperature: 23.2 }}}`                         | JSONPATH    | `JSONPATH($.device.status.temperature)`    |
+| `<device><status><temperature>23.2</temperature></status></device>` | XPath       | `XPath(/device/status/temperature/text())` |
+| `THEVALUE:23.2°C`                                                   | REGEX       | `REGEX(:(.*?)°)`                           |
 
-Transformations can be chained by separating them with the mathematical intersection character "∩".
+Transformations can be chained in the UI by listing each transformation on a separate line, or by separating them with the mathematical intersection character "∩".
+Transformations are defined using this syntax: `TYPE(FUNCTION)`, e.g.: `JSONPATH($.path)`.
+The syntax: `TYPE:FUNCTION` is still supported, e.g.: `JSONPATH:$.path`.
 Please note that the values will be discarded if one transformation fails (e.g. REGEX did not match).
 
 The same mechanism works for commands (`commandTransformation`) for outgoing values.
@@ -145,7 +147,7 @@ Please note that incompatible units (e.g. `°C` for a `Number:Density` item) wil
 | `moveValue` | yes      | -       | A special value that represents `MOVE` |
 
 All values that are not `upValue`, `downValue`, `stopValue`, `moveValue` are interpreted as position 0-100% and need to be numeric only.
-                    
+
 ### `switch`
 
 | parameter  | optional | default | description                           |
@@ -167,13 +169,13 @@ After the parameter reference the format needs to be appended.
 See the link above for more information about the available format parameters (e.g. to use the string representation, you need to append `s` to the reference, for a timestamp `t`).
 When sending an OFF command on 2020-07-06, the URL
 
-```
+```text
 http://www.domain.org/home/lights/23871/?status=%2$s&date=%1$tY-%1$tm-%1$td
-``` 
+```
 
 is transformed to
 
-```
+```text
 http://www.domain.org/home/lights/23871/?status=OFF&date=2020-07-06
 ```
 
@@ -183,10 +185,34 @@ http://www.domain.org/home/lights/23871/?status=OFF&date=2020-07-06
 
 ```java
 Thing http:url:foo "Foo" [
-    baseURL="https://example.com/api/v1/metadata-api/web/metadata", 
+    baseURL="https://example.com/api/v1/metadata-api/web/metadata",
+    headers="key1=value1", "key2=value2", "key3=value3",
+    refresh=15] {
+        Channels:
+            Type string : text "Text" [ stateTransformation="JSONPATH($.metadata.data)" ]
+}
+```
+
+Multiple transformations can be chained in the .things file by listing them as comma-separated values:
+
+```java
+Thing http:url:foo "Foo" [
+    baseURL="https://example.com/api/v1/metadata-api/web/metadata",
+    headers="key1=value1", "key2=value2", "key3=value3",
+    refresh=15] {
+        Channels:
+            Type string : text "Text" [ stateTransformation="REGEX(.*meta.*)", "JSONPATH($.metadata.data)" ]
+}
+```
+
+or by combining them into one value, separated by "∩":
+
+```java
+Thing http:url:foo "Foo" [
+    baseURL="https://example.com/api/v1/metadata-api/web/metadata",
     headers="key1=value1", "key2=value2", "key3=value3",
     refresh=15] {
         Channels:
-            Type string : text "Text" [ stateTransformation="JSONPATH:$.metadata.data" ]
+            Type string : text "Text" [ stateTransformation="REGEX(.*meta.*) ∩ JSONPATH($.metadata.data)" ]
 }
 ```
index c9bf745cb8c99813bf3ba7b5bc9bcde2eb04cbaa..4def1f3a08d7da8e1d1ca7ebbade0e8bb66c892d 100644 (file)
@@ -12,6 +12,8 @@
  */
 package org.openhab.binding.http.internal.config;
 
+import java.util.List;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.openhab.core.thing.binding.generic.ChannelValueConverterConfig;
@@ -26,7 +28,7 @@ public class HttpChannelConfig extends ChannelValueConverterConfig {
 
     public @Nullable String stateExtension;
     public @Nullable String commandExtension;
-    public @Nullable String stateTransformation;
-    public @Nullable String commandTransformation;
+    public @Nullable List<String> stateTransformation;
+    public @Nullable List<String> commandTransformation;
     public String stateContent = "";
 }
index 82cd4456a99537017d20768eedc7a6143764e0cd..5a2388dca6fa59b4c120a7ee476255a04498210e 100644 (file)
@@ -5,13 +5,15 @@
        xsi:schemaLocation="https://openhab.org/schemas/config-description/v1.0.0 https://openhab.org/schemas/config-description-1.0.0.xsd">
 
        <config-description uri="channel-type:http:channel-config">
-               <parameter name="stateTransformation" type="text">
+               <parameter name="stateTransformation" type="text" multiple="true">
                        <label>State Transformation</label>
-                       <description>Transformation pattern used when receiving values. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when receiving values. Multiple transformations can be chained by listing
+                               each transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
-               <parameter name="commandTransformation" type="text">
+               <parameter name="commandTransformation" type="text" multiple="true">
                        <label>Command Transformation</label>
-                       <description>Transformation pattern used when sending values. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when sending values. Multiple transformations can be chained by listing each
+                               transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
                <parameter name="stateExtension" type="text">
                        <label>State URL Extension</label>
        </config-description>
 
        <config-description uri="channel-type:http:channel-config-color">
-               <parameter name="stateTransformation" type="text">
+               <parameter name="stateTransformation" type="text" multiple="true">
                        <label>State Transformation</label>
-                       <description>Transformation pattern used when receiving values.</description>
+                       <description>Transformation pattern used when receiving values. Multiple transformations can be chained by listing
+                               each transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
-               <parameter name="commandTransformation" type="text">
+               <parameter name="commandTransformation" type="text" multiple="true">
                        <label>Command Transformation</label>
-                       <description>Transformation pattern used when sending value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when sending values. Multiple transformations can be chained by listing each
+                               transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
                <parameter name="stateExtension" type="text">
                        <label>State URL Extension</label>
        </config-description>
 
        <config-description uri="channel-type:http:channel-config-contact">
-               <parameter name="stateTransformation" type="text">
+               <parameter name="stateTransformation" type="text" multiple="true">
                        <label>State Transformation</label>
-                       <description>Transformation pattern used when receiving value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when receiving values. Multiple transformations can be chained by listing
+                               each transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
-               <parameter name="commandTransformation" type="text">
+               <parameter name="commandTransformation" type="text" multiple="true">
                        <label>Command Transformation</label>
-                       <description>Transformation pattern used when sending value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when sending values. Multiple transformations can be chained by listing each
+                               transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
                <parameter name="stateExtension" type="text">
                        <label>State URL Extension</label>
        </config-description>
 
        <config-description uri="channel-type:http:channel-config-dimmer">
-               <parameter name="stateTransformation" type="text">
+               <parameter name="stateTransformation" type="text" multiple="true">
                        <label>State Transformation</label>
-                       <description>Transformation pattern used when receiving value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when receiving values. Multiple transformations can be chained by listing
+                               each transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
-               <parameter name="commandTransformation" type="text">
+               <parameter name="commandTransformation" type="text" multiple="true">
                        <label>Command Transformation</label>
-                       <description>Transformation pattern used when sending value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when sending values. Multiple transformations can be chained by listing each
+                               transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
                <parameter name="stateExtension" type="text">
                        <label>State URL Extension</label>
        </config-description>
 
        <config-description uri="channel-type:http:channel-config-number">
-               <parameter name="stateTransformation" type="text">
+               <parameter name="stateTransformation" type="text" multiple="true">
                        <label>State Transformation</label>
-                       <description>Transformation pattern used when receiving value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when receiving values. Multiple transformations can be chained by listing
+                               each transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
-               <parameter name="commandTransformation" type="text">
+               <parameter name="commandTransformation" type="text" multiple="true">
                        <label>Command Transformation</label>
-                       <description>Transformation pattern used when sending value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when sending values. Multiple transformations can be chained by listing each
+                               transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
                <parameter name="stateExtension" type="text">
                        <label>State URL Extension</label>
        </config-description>
 
        <config-description uri="channel-type:http:channel-config-player">
-               <parameter name="stateTransformation" type="text">
+               <parameter name="stateTransformation" type="text" multiple="true">
                        <label>State Transformation</label>
-                       <description>Transformation pattern used when receiving value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when receiving values. Multiple transformations can be chained by listing
+                               each transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
-               <parameter name="commandTransformation" type="text">
+               <parameter name="commandTransformation" type="text" multiple="true">
                        <label>Command Transformation</label>
-                       <description>Transformation pattern used when sending value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when sending values. Multiple transformations can be chained by listing each
+                               transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
                <parameter name="stateExtension" type="text">
                        <label>State URL Extension</label>
        </config-description>
 
        <config-description uri="channel-type:http:channel-config-rollershutter">
-               <parameter name="stateTransformation" type="text">
+               <parameter name="stateTransformation" type="text" multiple="true">
                        <label>State Transformation</label>
-                       <description>Transformation pattern used when receiving value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when receiving values. Multiple transformations can be chained by listing
+                               each transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
-               <parameter name="commandTransformation" type="text">
+               <parameter name="commandTransformation" type="text" multiple="true">
                        <label>Command Transformation</label>
-                       <description>Transformation pattern used when sending value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when sending values. Multiple transformations can be chained by listing each
+                               transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
                <parameter name="stateExtension" type="text">
                        <label>State URL Extension</label>
        </config-description>
 
        <config-description uri="channel-type:http:channel-config-switch">
-               <parameter name="stateTransformation" type="text">
+               <parameter name="stateTransformation" type="text" multiple="true">
                        <label>State Transformation</label>
-                       <description>Transformation pattern used when receiving value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when receiving values. Multiple transformations can be chained by listing
+                               each transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
-               <parameter name="commandTransformation" type="text">
+               <parameter name="commandTransformation" type="text" multiple="true">
                        <label>Command Transformation</label>
-                       <description>Transformation pattern used when sending value. Multiple transformation can be chained using "∩".</description>
+                       <description>Transformation pattern used when sending values. Multiple transformations can be chained by listing each
+                               transformation on a separate line, or by concatenating them with "∩".</description>
                </parameter>
                <parameter name="stateExtension" type="text">
                        <label>State URL Extension</label>
index e73fe079ff4e2ad39d7ef41444ec26fbca56638e..09f42d1a16f63f1f823695c715538cf1319a93f7 100644 (file)
@@ -7,6 +7,8 @@ addon.http.description = This is the binding for retrieving and processing HTTP
 
 thing-type.http.url.label = HTTP URL Thing
 thing-type.http.url.description = Represents a base URL and all associated requests.
+thing-type.http.url.channel.last-failure.label = Last Failure
+thing-type.http.url.channel.last-success.label = Last Success
 
 # thing types config
 
@@ -14,6 +16,7 @@ thing-type.config.http.url.authMode.label = Authentication Mode
 thing-type.config.http.url.authMode.option.BASIC = Basic Authentication
 thing-type.config.http.url.authMode.option.BASIC_PREEMPTIVE = Preemptive Basic Authentication
 thing-type.config.http.url.authMode.option.DIGEST = Digest Authentication
+thing-type.config.http.url.authMode.option.TOKEN = Token/Bearer Authentication
 thing-type.config.http.url.baseURL.label = Base URL
 thing-type.config.http.url.baseURL.description = The URL set here can be extended in the channel configuration.
 thing-type.config.http.url.bufferSize.label = Buffer Size
@@ -39,7 +42,7 @@ thing-type.config.http.url.headers.description = Additional headers send along w
 thing-type.config.http.url.ignoreSSLErrors.label = Ignore SSL Errors
 thing-type.config.http.url.ignoreSSLErrors.description = If set to true ignores invalid SSL certificate errors. This is potentially dangerous.
 thing-type.config.http.url.password.label = Password
-thing-type.config.http.url.password.description = Basic Authentication password
+thing-type.config.http.url.password.description = Authentication password or token
 thing-type.config.http.url.refresh.label = Refresh Time
 thing-type.config.http.url.refresh.description = Time between two refreshes of all channels
 thing-type.config.http.url.stateMethod.label = State Method
@@ -49,6 +52,8 @@ thing-type.config.http.url.stateMethod.option.POST = POST
 thing-type.config.http.url.stateMethod.option.PUT = PUT
 thing-type.config.http.url.timeout.label = Timeout
 thing-type.config.http.url.timeout.description = The timeout in ms for each request
+thing-type.config.http.url.userAgent.label = User Agent
+thing-type.config.http.url.userAgent.description = Sets a custom user agent (default is "Jetty/version", e.g. "Jetty/9.4.20.v20190813").
 thing-type.config.http.url.username.label = Username
 thing-type.config.http.url.username.description = Basic Authentication username
 
@@ -62,6 +67,8 @@ channel-type.http.image.label = Image Channel
 channel-type.http.location.label = Location Channel
 channel-type.http.number.label = Number Channel
 channel-type.http.player.label = Player Channel
+channel-type.http.request-date-time.label = Dummy
+channel-type.http.request-date-time.state.pattern = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS
 channel-type.http.rollershutter.label = Rollershutter Channel
 channel-type.http.string.label = String Channel
 channel-type.http.switch.label = Switch Channel
@@ -75,13 +82,11 @@ channel-type.config.http.channel-config-color.colorMode.option.RGB = RGB
 channel-type.config.http.channel-config-color.commandExtension.label = Command URL Extension
 channel-type.config.http.channel-config-color.commandExtension.description = This value is added to the base URL configured in the thing for sending values.
 channel-type.config.http.channel-config-color.commandTransformation.label = Command Transformation
-channel-type.config.http.channel-config-color.commandTransformation.description = Transformation pattern used when sending values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config-color.commandTransformation.description = Transformation pattern used when sending values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-color.decreaseValue.label = Decrease Value
 channel-type.config.http.channel-config-color.decreaseValue.description = The value that represents DECREASE
 channel-type.config.http.channel-config-color.increaseValue.label = Increase Value
 channel-type.config.http.channel-config-color.increaseValue.description = The value that represents INCREASE
-channel-type.config.http.channel-config-color.escapedUrl.label = Escaped URL
-channel-type.config.http.channel-config-color.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
 channel-type.config.http.channel-config-color.mode.label = Read/Write Mode
 channel-type.config.http.channel-config-color.mode.option.READWRITE = Read/Write
 channel-type.config.http.channel-config-color.mode.option.READONLY = Read Only
@@ -95,7 +100,7 @@ channel-type.config.http.channel-config-color.stateContent.description = Content
 channel-type.config.http.channel-config-color.stateExtension.label = State URL Extension
 channel-type.config.http.channel-config-color.stateExtension.description = This value is added to the base URL configured in the thing for retrieving values.
 channel-type.config.http.channel-config-color.stateTransformation.label = State Transformation
-channel-type.config.http.channel-config-color.stateTransformation.description = Transformation pattern used when receiving values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config-color.stateTransformation.description = Transformation pattern used when receiving values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-color.step.label = Increase/Decrease Step
 channel-type.config.http.channel-config-color.step.description = The value by which the current brightness is increased/decreased if the corresponding command is received
 channel-type.config.http.channel-config-contact.closedValue.label = Closed Value
@@ -103,9 +108,7 @@ channel-type.config.http.channel-config-contact.closedValue.description = The va
 channel-type.config.http.channel-config-contact.commandExtension.label = Command URL Extension
 channel-type.config.http.channel-config-contact.commandExtension.description = This value is added to the base URL configured in the thing for sending values.
 channel-type.config.http.channel-config-contact.commandTransformation.label = Command Transformation
-channel-type.config.http.channel-config-contact.commandTransformation.description = Transformation pattern used when sending values. Chain multiple transformations with the mathematical intersection character "∩".
-channel-type.config.http.channel-config-contact.escapedUrl.label = Escaped URL
-channel-type.config.http.channel-config-contact.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config-contact.commandTransformation.description = Transformation pattern used when sending values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-contact.mode.label = Read/Write Mode
 channel-type.config.http.channel-config-contact.mode.option.READWRITE = Read/Write
 channel-type.config.http.channel-config-contact.mode.option.READONLY = Read Only
@@ -117,17 +120,15 @@ channel-type.config.http.channel-config-contact.stateContent.description = Conte
 channel-type.config.http.channel-config-contact.stateExtension.label = State URL Extension
 channel-type.config.http.channel-config-contact.stateExtension.description = This value is added to the base URL configured in the thing for retrieving values.
 channel-type.config.http.channel-config-contact.stateTransformation.label = State Transformation
-channel-type.config.http.channel-config-contact.stateTransformation.description = Transformation pattern used when receiving values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config-contact.stateTransformation.description = Transformation pattern used when receiving values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-dimmer.commandExtension.label = Command URL Extension
 channel-type.config.http.channel-config-dimmer.commandExtension.description = This value is added to the base URL configured in the thing for sending values.
 channel-type.config.http.channel-config-dimmer.commandTransformation.label = Command Transformation
-channel-type.config.http.channel-config-dimmer.commandTransformation.description = Transformation pattern used when sending values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config-dimmer.commandTransformation.description = Transformation pattern used when sending values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-dimmer.decreaseValue.label = Decrease Value
 channel-type.config.http.channel-config-dimmer.decreaseValue.description = The value that represents DECREASE
 channel-type.config.http.channel-config-dimmer.increaseValue.label = Increase Value
 channel-type.config.http.channel-config-dimmer.increaseValue.description = The value that represents INCREASE
-channel-type.config.http.channel-config-dimmer.escapedUrl.label = Escaped URL
-channel-type.config.http.channel-config-dimmer.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
 channel-type.config.http.channel-config-dimmer.mode.label = Read/Write Mode
 channel-type.config.http.channel-config-dimmer.mode.option.READWRITE = Read/Write
 channel-type.config.http.channel-config-dimmer.mode.option.READONLY = Read Only
@@ -141,11 +142,9 @@ channel-type.config.http.channel-config-dimmer.stateContent.description = Conten
 channel-type.config.http.channel-config-dimmer.stateExtension.label = State URL Extension
 channel-type.config.http.channel-config-dimmer.stateExtension.description = This value is added to the base URL configured in the thing for retrieving values.
 channel-type.config.http.channel-config-dimmer.stateTransformation.label = State Transformation
-channel-type.config.http.channel-config-dimmer.stateTransformation.description = Transformation pattern used when receiving values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config-dimmer.stateTransformation.description = Transformation pattern used when receiving values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-dimmer.step.label = Increase/Decrease Step
 channel-type.config.http.channel-config-dimmer.step.description = The value by which the current brightness is increased/decreased if the corresponding command is received
-channel-type.config.http.channel-config-image.escapedUrl.label = Escaped URL
-channel-type.config.http.channel-config-image.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL and stateExtension.
 channel-type.config.http.channel-config-image.stateContent.label = State Content
 channel-type.config.http.channel-config-image.stateContent.description = Content for state request (only used if method is POST/PUT)
 channel-type.config.http.channel-config-image.stateExtension.label = State URL Extension
@@ -153,9 +152,7 @@ channel-type.config.http.channel-config-image.stateExtension.description = This
 channel-type.config.http.channel-config-number.commandExtension.label = Command URL Extension
 channel-type.config.http.channel-config-number.commandExtension.description = This value is added to the base URL configured in the thing for sending values.
 channel-type.config.http.channel-config-number.commandTransformation.label = Command Transformation
-channel-type.config.http.channel-config-number.commandTransformation.description = Transformation pattern used when sending values. Chain multiple transformations with the mathematical intersection character "∩".
-channel-type.config.http.channel-config-number.escapedUrl.label = Escaped URL
-channel-type.config.http.channel-config-number.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config-number.commandTransformation.description = Transformation pattern used when sending values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-number.mode.label = Read/Write Mode
 channel-type.config.http.channel-config-number.mode.option.READWRITE = Read/Write
 channel-type.config.http.channel-config-number.mode.option.READONLY = Read Only
@@ -165,17 +162,15 @@ channel-type.config.http.channel-config-number.stateContent.description = Conten
 channel-type.config.http.channel-config-number.stateExtension.label = State URL Extension
 channel-type.config.http.channel-config-number.stateExtension.description = This value is added to the base URL configured in the thing for retrieving values.
 channel-type.config.http.channel-config-number.stateTransformation.label = State Transformation
-channel-type.config.http.channel-config-number.stateTransformation.description = Transformation pattern used when receiving values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config-number.stateTransformation.description = Transformation pattern used when receiving values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-number.unit.label = Unit
 channel-type.config.http.channel-config-number.unit.description = Unit to append to the (transformed) value.
 channel-type.config.http.channel-config-player.commandExtension.label = Command URL Extension
 channel-type.config.http.channel-config-player.commandExtension.description = This value is added to the base URL configured in the thing for sending values.
 channel-type.config.http.channel-config-player.commandTransformation.label = Command Transformation
-channel-type.config.http.channel-config-player.commandTransformation.description = Transformation pattern used when sending values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config-player.commandTransformation.description = Transformation pattern used when sending values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-player.fastforwardValue.label = Fast Forward Value
 channel-type.config.http.channel-config-player.fastforwardValue.description = The value that represents FASTFORWARD
-channel-type.config.http.channel-config-player.escapedUrl.label = Escaped URL
-channel-type.config.http.channel-config-player.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
 channel-type.config.http.channel-config-player.mode.label = Read/Write Mode
 channel-type.config.http.channel-config-player.mode.option.READWRITE = Read/Write
 channel-type.config.http.channel-config-player.mode.option.READONLY = Read Only
@@ -195,15 +190,13 @@ channel-type.config.http.channel-config-player.stateContent.description = Conten
 channel-type.config.http.channel-config-player.stateExtension.label = State URL Extension
 channel-type.config.http.channel-config-player.stateExtension.description = This value is added to the base URL configured in the thing for retrieving values.
 channel-type.config.http.channel-config-player.stateTransformation.label = State Transformation
-channel-type.config.http.channel-config-player.stateTransformation.description = Transformation pattern used when receiving values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config-player.stateTransformation.description = Transformation pattern used when receiving values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-rollershutter.commandExtension.label = Command URL Extension
 channel-type.config.http.channel-config-rollershutter.commandExtension.description = This value is added to the base URL configured in the thing for sending values.
 channel-type.config.http.channel-config-rollershutter.commandTransformation.label = Command Transformation
-channel-type.config.http.channel-config-rollershutter.commandTransformation.description = Transformation pattern used when sending values Chain multiple transformations with the mathematical intersection character "∩"..
+channel-type.config.http.channel-config-rollershutter.commandTransformation.description = Transformation pattern used when sending values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-rollershutter.downValue.label = Down Value
 channel-type.config.http.channel-config-rollershutter.downValue.description = The value that represents DOWN
-channel-type.config.http.channel-config-rollershutter.escapedUrl.label = Escaped URL
-channel-type.config.http.channel-config-rollershutter.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
 channel-type.config.http.channel-config-rollershutter.mode.label = Read/Write Mode
 channel-type.config.http.channel-config-rollershutter.mode.option.READWRITE = Read/Write
 channel-type.config.http.channel-config-rollershutter.mode.option.READONLY = Read Only
@@ -215,7 +208,7 @@ channel-type.config.http.channel-config-rollershutter.stateContent.description =
 channel-type.config.http.channel-config-rollershutter.stateExtension.label = State URL Extension
 channel-type.config.http.channel-config-rollershutter.stateExtension.description = This value is added to the base URL configured in the thing for retrieving values.
 channel-type.config.http.channel-config-rollershutter.stateTransformation.label = State Transformation
-channel-type.config.http.channel-config-rollershutter.stateTransformation.description = Transformation pattern used when receiving values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config-rollershutter.stateTransformation.description = Transformation pattern used when receiving values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-rollershutter.stopValue.label = Stop Value
 channel-type.config.http.channel-config-rollershutter.stopValue.description = The value that represents STOP
 channel-type.config.http.channel-config-rollershutter.upValue.label = Up Value
@@ -223,9 +216,7 @@ channel-type.config.http.channel-config-rollershutter.upValue.description = The
 channel-type.config.http.channel-config-switch.commandExtension.label = Command URL Extension
 channel-type.config.http.channel-config-switch.commandExtension.description = This value is added to the base URL configured in the thing for sending values.
 channel-type.config.http.channel-config-switch.commandTransformation.label = Command Transformation
-channel-type.config.http.channel-config-switch.commandTransformation.description = Transformation pattern used when sending values. Chain multiple transformations with the mathematical intersection character "∩".
-channel-type.config.http.channel-config-switch.escapedUrl.label = Escaped URL
-channel-type.config.http.channel-config-switch.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config-switch.commandTransformation.description = Transformation pattern used when sending values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config-switch.mode.label = Read/Write Mode
 channel-type.config.http.channel-config-switch.mode.option.READWRITE = Read/Write
 channel-type.config.http.channel-config-switch.mode.option.READONLY = Read Only
@@ -239,13 +230,11 @@ channel-type.config.http.channel-config-switch.stateContent.description = Conten
 channel-type.config.http.channel-config-switch.stateExtension.label = State URL Extension
 channel-type.config.http.channel-config-switch.stateExtension.description = This value is added to the base URL configured in the thing for retrieving values.
 channel-type.config.http.channel-config-switch.stateTransformation.label = State Transformation
-channel-type.config.http.channel-config-switch.stateTransformation.description = Transformation pattern used when receiving values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config-switch.stateTransformation.description = Transformation pattern used when receiving values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config.commandExtension.label = Command URL Extension
 channel-type.config.http.channel-config.commandExtension.description = This value is added to the base URL configured in the thing for sending values.
 channel-type.config.http.channel-config.commandTransformation.label = Command Transformation
-channel-type.config.http.channel-config.commandTransformation.description = Transformation pattern used when sending values. Chain multiple transformations with the mathematical intersection character "∩".
-channel-type.config.http.channel-config.escapedUrl.label = Escaped URL
-channel-type.config.http.channel-config.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config.commandTransformation.description = Transformation pattern used when sending values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
 channel-type.config.http.channel-config.mode.label = Read/Write Mode
 channel-type.config.http.channel-config.mode.option.READWRITE = Read/Write
 channel-type.config.http.channel-config.mode.option.READONLY = Read Only
@@ -255,4 +244,25 @@ channel-type.config.http.channel-config.stateContent.description = Content for s
 channel-type.config.http.channel-config.stateExtension.label = State URL Extension
 channel-type.config.http.channel-config.stateExtension.description = This value is added to the base URL configured in the thing for retrieving values.
 channel-type.config.http.channel-config.stateTransformation.label = State Transformation
-channel-type.config.http.channel-config.stateTransformation.description = Transformation pattern used when receiving values. Chain multiple transformations with the mathematical intersection character "∩".
+channel-type.config.http.channel-config.stateTransformation.description = Transformation pattern used when receiving values. Multiple transformations can be chained by listing each transformation on a separate line, or by concatenating them with "∩".
+
+# channel types config
+
+channel-type.config.http.channel-config-color.escapedUrl.label = Escaped URL
+channel-type.config.http.channel-config-color.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config-contact.escapedUrl.label = Escaped URL
+channel-type.config.http.channel-config-contact.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config-dimmer.escapedUrl.label = Escaped URL
+channel-type.config.http.channel-config-dimmer.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config-image.escapedUrl.label = Escaped URL
+channel-type.config.http.channel-config-image.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL and stateExtension.
+channel-type.config.http.channel-config-number.escapedUrl.label = Escaped URL
+channel-type.config.http.channel-config-number.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config-player.escapedUrl.label = Escaped URL
+channel-type.config.http.channel-config-player.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config-rollershutter.escapedUrl.label = Escaped URL
+channel-type.config.http.channel-config-rollershutter.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config-switch.escapedUrl.label = Escaped URL
+channel-type.config.http.channel-config-switch.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.
+channel-type.config.http.channel-config.escapedUrl.label = Escaped URL
+channel-type.config.http.channel-config.escapedUrl.description = This specifies whether the URL is already escaped. Applies to the base URL, commandExtension and stateExtension.