]> git.basschouten.com Git - openhab-addons.git/commitdiff
[openwebnet] add support for basic Scenarios (WHO=0) (#13473)
authorM Valla <12682715+mvalla@users.noreply.github.com>
Thu, 6 Oct 2022 06:33:01 +0000 (08:33 +0200)
committerGitHub <noreply@github.com>
Thu, 6 Oct 2022 06:33:01 +0000 (08:33 +0200)
* [openwebnet] added first support for WHO=0 scenarios
* [openwebnet] channels indent
* [openwebnet] formatting
* [openwebnet] set WHO=0 thing online automatically. Update to openwebnet4j 0.9.0

Signed-off-by: Massimo Valla <mvcode00@gmail.com>
12 files changed:
bundles/org.openhab.binding.openwebnet/README.md
bundles/org.openhab.binding.openwebnet/pom.xml
bundles/org.openhab.binding.openwebnet/src/main/java/org/openhab/binding/openwebnet/internal/OpenWebNetBindingConstants.java
bundles/org.openhab.binding.openwebnet/src/main/java/org/openhab/binding/openwebnet/internal/OpenWebNetHandlerFactory.java
bundles/org.openhab.binding.openwebnet/src/main/java/org/openhab/binding/openwebnet/internal/discovery/OpenWebNetDeviceDiscoveryService.java
bundles/org.openhab.binding.openwebnet/src/main/java/org/openhab/binding/openwebnet/internal/handler/OpenWebNetBridgeHandler.java
bundles/org.openhab.binding.openwebnet/src/main/java/org/openhab/binding/openwebnet/internal/handler/OpenWebNetScenarioBasicHandler.java [new file with mode: 0644]
bundles/org.openhab.binding.openwebnet/src/main/java/org/openhab/binding/openwebnet/internal/handler/OpenWebNetThingHandler.java
bundles/org.openhab.binding.openwebnet/src/main/resources/OH-INF/i18n/openwebnet.properties
bundles/org.openhab.binding.openwebnet/src/main/resources/OH-INF/thing/BusBasicScenarioControl.xml [new file with mode: 0644]
bundles/org.openhab.binding.openwebnet/src/main/resources/OH-INF/thing/channels.xml
bundles/org.openhab.binding.openwebnet/src/test/java/org/openhab/binding/openwebnet/internal/handler/OwnIdTest.java

index dd76f85812bd9291a6504c38b4278400afc7d9a9..d03229e9b5a63e8f2135e03ee1600a3f0a8a6d7b 100644 (file)
@@ -44,8 +44,8 @@ The following Things and OpenWebNet `WHOs` are supported:
 | Lighting                      |     `1`     |             `bus_on_off_switch`, `bus_dimmer`              | BUS switches and dimmers                                         | Successfully tested: F411/2, F411/4, F411U2, F422, F429. Some discovery issues reported with F429 (DALI Dimmers)                                                                                           |
 | Automation                    |     `2`     |                      `bus_automation`                      | BUS roller shutters, with position feedback and auto-calibration | Successfully tested: LN4672M2                                                                                                                                                                              |
 | Temperature Control           |     `4`     |  `bus_thermo_zone`, `bus_thermo_sensor`, `bus_thermo_cu`   | Thermo zones management and temperature sensors (probes).        | Successfully tested: H/LN4691, HS4692, KG4691; thermo sensors: L/N/NT4577 + 3455; Central Units (4 or 99 zones) are not fully supported yet. See [Channels - Thermo](#configuring-thermo) for more details |
-| Auxiliary (AUX)               |     `9`     |                         `bus_aux`                          | AUX commands                                                     | Successfully tested: AUX configured for bulgrar-alarm unit 3486. Only sending AUX commands is supported                                                                                                    |
-| CEN & CEN+ Scenarios          | `15` & `25` | `bus_cen_scenario_control`, `bus_cenplus_scenario_control` | CEN/CEN+ scenarios events and virtual activation                 | Successfully tested: scenario buttons: HC/HD/HS/L/N/NT4680                                                                                                                                                 |
+| Auxiliary (AUX)               |     `9`     |                         `bus_aux`                          | AUX commands                                                     | Successfully tested: AUX configured for bulgrar-alarm unit 3486. **Only sending AUX commands is supported**                                                                                                    |
+| Basic, CEN & CEN+ Scenarios          | `0`, `15`, `25` | `bus_scenario_control`, `bus_cen_scenario_control`, `bus_cenplus_scenario_control` | Basic and CEN/CEN+ Scenarios events and virtual activation                 | Successfully tested: CEN/CEN+ scenario control: HC/HD/HS/L/N/NT4680 and basic scenario modules F420/IR3456 + L4680 (WHO=0)                                                                                                                                                              |
 | Dry Contact and IR Interfaces |    `25`     |                    `bus_dry_contact_ir`                    | Dry Contacts and IR Interfaces                                   | Successfully tested: contact interfaces F428 and 3477; IR sensors: HC/HD/HS/L/N/NT4610                                                                                                                     |
 | Energy Management             |    `18`     |                     `bus_energy_meter`                     | Energy Management                                                | Successfully tested: F520, F521. Partially tested: F522, F523                                                                                                                                                                            |
 
@@ -69,13 +69,14 @@ For other gateways you can add them manually, see [Thing Configuration](#thing-c
 - Once the gateway is online, a second Inbox Scan will discover BUS devices
 - BUS/SCS Dimmers must be ON and dimmed (30%-100%) during a Scan, otherwise they will be discovered as simple On/Off switches
     - *KNOWN ISSUE*: In some cases dimmers connected to a F429 Dali-interface are not automatically discovered
-- CEN/CEN+ Scenario Control devices will be discovered by activation only. See [discovery by activation](#discovery-by-activation) for details. After confirming a discovered CEN/CEN+ device from Inbox, activate again its scenario buttons to add button channels automatically
+- Basic Scenario modules and CEN/CEN+ Scenario Control devices will be discovered by activation only. See [discovery by activation](#discovery-by-activation) for details. After confirming a discovered CEN/CEN+ scenario device from Inbox, activate again its buttons to add button channels automatically
 
 #### Discovery by Activation
 
-BUS devices can also be discovered if activated while an Inbox Scan is active: start a new Scan, wait 15-20 seconds and then _while the Scan is still active_, activate the physical device (for example dim the dimmer) to have it discovered by the binding.
+BUS devices can also be discovered if they are activated while an Inbox Scan has been started: start a new Scan, wait 15-20 seconds and then _while the Scan is still active_, activate the physical device (for example dim the dimmer) to have it discovered by the binding.
+Setting the parameter `discoveryByActivation=true` for a BUS gateway Thing makes discovery by activation always working also when a Inbox Scan hasn't been started.
 
-If a device cannot be discovered automatically it's always possible to add it manually, see [Configuring Devices](#configuring-devices).
+If a device cannot be discovered automatically from Inbox it's always possible to add it manually, see [Configuring Devices](#configuring-devices).
 
 ### ZigBee Discovery
 
@@ -105,7 +106,7 @@ Configuration parameters are:
    - Example: `abcde` or `12345`
    - if the BUS/SCS gateway is configured to accept connections from the openHAB computer IP address, no password should be required
    - in all other cases, a password must be configured. This includes gateways that have been discovered and added from Inbox: without a password configured they will remain OFFLINE
-- `discoveryByActivation`: discover BUS devices when they are activated also when a device scan is not currently active (`boolean`, *optional*, default: `false`). See [Discovery by Activation](#discovery-by-activation).
+- `discoveryByActivation`: discover BUS devices when they are activated also when a device scan hasn't been started from Inbox (`boolean`, *optional*, default: `false`). See [Discovery by Activation](#discovery-by-activation).
 
 Alternatively the BUS/SCS Gateway thing can be configured using the `.things` file, see `openwebnet.things` example [below](#full-example).
 
@@ -129,6 +130,7 @@ For any manually added device, you must configure:
     - example for BUS/SCS system:
         - light device A=`2` (Area 2), PL=`4` (Light-point 4) --> `where="24"`
         - light device A=`03`, PL=`11` on local bus `01` --> `where="0311#4#01"`
+        - scenario control module address `53` --> `where="53"`    
         - CEN scenario A=`05`, PL=`12` --> `where="0512"`
         - CEN+ scenario `5`: add `2` before --> `where="25"`
         - Dry Contact or IR Interface `99`: add `3` before --> `where="399"`
@@ -155,6 +157,12 @@ Temperature sensors can be configured defining a `bus_thermo_sensor` Thing with
 
 The (optional) Central Unit can be configured defining a `bus_themo_cu` Thing.
 
+##### Central Unit integration missing points 
+
+- Read setPoint temperature and current mode
+- Holiday activation command (all zones)
+- Discovery 
+
 #### Configuring Auxiliary (AUX)
 
 **NOTE** Receiving AUX messages originating from the BUS is not supported yet, only sending messages to the BUS is supported.
@@ -170,11 +178,11 @@ To configure Alarm Control Automations go to the menu:
 
 ##### Example configuration Automation 1: when AUX-1 goes OFF, then DISENGAGE all Zones
 
-With this configuration when AUX `where=1` goes OFF, the Alarm will execute the automantion and send command `*5*9##` to DISENGAGE all zones.
+With this configuration when AUX `where=1` goes OFF, the Alarm will execute the automation and send command `*5*9##` to DISENGAGE all zones.
 
     Name: Disengage all zones
-    Event: command OPEN = `*9*0*1##`
-    OPEN command to execute: `*5*9##`
+    Event: command OPEN = *9*0*1##
+    OPEN command to execute: *5*9##
 
 ##### Example configuration Automation 2: when AUX-2 goes ON, then ENGAGE active Zones
 
@@ -188,28 +196,25 @@ With this configuration when AUX `where=1` goes OFF, the Alarm will execute the
     Event: command OPEN = *9*1*4##
     OPEN command to execute: *5*8#1234##
 
-### Central Unit integration missing points 
-
-- Read setPoint temperature and current mode
-- Holiday activation command (all zones)
-- Discovery 
-
 ## Channels 
 
-### Lighting, Automation, Power meter, CEN/CEN+ Scenario Events and Dry Contact / IR Interfaces channels
+### Lighting, Automation, Power meter, Basic/CEN/CEN+ Scenario Events and Dry Contact / IR Interfaces channels
 
 | Channel Type ID (channel ID)            | Applies to Thing Type IDs                                     | Item Type     | Description                                                                                                                                     | Read/Write  |
 |-----------------------------------------|---------------------------------------------------------------|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------|:-----------:|
 | `switch` or `switch_01`/`02` for ZigBee | `bus_on_off_switch`, `zb_on_off_switch`, `zb_on_off_switch2u` | Switch        | To switch the device `ON` and `OFF`                                                                                                             |     R/W     |
 | `brightness`                            | `bus_dimmer`, `zb_dimmer`                                     | Dimmer        | To adjust the brightness value (Percent, `ON`, `OFF`)                                                                                           |     R/W     |
 | `shutter`                               | `bus_automation`                                              | Rollershutter | To activate roller shutters (`UP`, `DOWN`, `STOP`, Percent - [see Shutter position](#shutter-position))                                         |     R/W     |
-| `button#X`                              | `bus_cen_scenario_control`, `bus_cenplus_scenario_control`    | String        | Trigger channel for CEN/CEN+ scenario events [see possible values](#cen-cen-channels)                                                           | R (TRIGGER) |
+| `button#X`                              | `bus_cen_scenario_control`, `bus_cenplus_scenario_control`    | String        | Trigger channel for CEN/CEN+ scenario events [see possible values](#scenario-channels)                                                           | R (TRIGGER) |
 | `sensor`                                | `bus_dry_contact_ir`                                          | Switch        | Indicates if a Dry Contact Interface is `ON`/`OFF`, or if a IR Sensor is detecting movement (`ON`), or not  (`OFF`)                             |      R      |
 | `power`                                 | `bus_energy_meter`                                            | Number:Power  | The current active power usage from Energy Meter                                                                                                |      R      |
 | `aux`                                   | `bus_aux`                                                     | String        | Possible commands: `ON`, `OFF`, `TOGGLE`, `STOP`, `UP`, `DOWN`, `ENABLED`, `DISABLED`, `RESET_GEN`, `RESET_BI`, `RESET_TRI`. Only `ON` and `OFF` are supported for now |     R/W     |
+| `scenario`                              | `bus_scenario_control`    | String        | Trigger channel for Basic scenario events [see possible values](#scenario-channels)                                                           | R (TRIGGER) |
 
 ### Thermo channels
 
+**NOTE** Channels marked with Advanced=Y can be shown from Thing configuration > Channels tab > check `Show advanced`.
+
 | Channel Type ID (channel ID) | Applies to Thing Type IDs              | Item Type          | Description                                                                                                                                                                             | Read/Write | Advanced |
 | ---------------------------- | -------------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :------: |
 | `temperature`                | `bus_thermo_zone`, `bus_thermo_sensor` | Number:Temperature | The zone currently sensed temperature                                                                                                                                                   | R          | N        |
@@ -243,40 +248,41 @@ It's possible to enter a value manually or set `shutterRun=AUTO` (default) to ca
 - if OH is restarted the binding does not know if a shutter position has changed in the meantime, so its position will be `UNDEF`. Move the shutter all `UP`/`DOWN` to synchronize again its position with the binding
 - the shutter position is estimated based on UP/DOWN timing: an error of ±2% is normal
 
-#### CEN/CEN+ channels
+#### Scenario channels
 
-CEN/CEN+ are [TRIGGER channels](https://www.openhab.org/docs/configuration/rules-dsl.html#channel-based-triggers]): they handle events and do not have a state.
+Basic Scenarios and CEN/CEN+ Scenarios channels are [TRIGGER channels](https://www.openhab.org/docs/configuration/rules-dsl.html#channel-based-triggers]): they handle events and do not have a state.
 
-A powerful feature is to be able to assign CEN or CEN+ commands to your physical wall switches and use the events they generate to trigger rules in openHAB: this way openHAB becomes a very powerful scenario manager activated by physical BTicino switches.
-See [openwebnet.rules](#openwebnet-rules) for an example on how to define rules that trigger on CEN/CEN+ buttons events.
+A powerful feature is to detect scenario activations and CEN/CEN+ buttons press events to trigger rules in openHAB: this way openHAB becomes a very powerful scenario manager activated by BTicino scenario control modules or by CEN/CEN+ scenarios physical buttons.
+See [openwebnet.rules](#openwebnet-rules) for examples on how to define rules that trigger on scenarios and on CEN/CEN+ button press events.
 
-It's also possible to send *virtual press* events on the BUS, for example to enable the activation of MH202 scenarios from openHAB.
-See [openwebnet.sitemap](#openwebnet-sitemap) & [openwebnet.rules](#openwebnet-rules) sections for an example on how to use the `virtualPress` action connected to a pushbutton on a sitemap.
+It's also possible to send *virtual scenario activation* and *virtual press* events on the BUS, for example to enable the activation of MH202 or F420 scenarios from openHAB..
+See [openwebnet.sitemap](#openwebnet-sitemap) & [openwebnet.rules](#openwebnet-rules) sections for examples on how to use the `activateScenario` and `virtualPress` actions connected to a pushbutton on a sitemap.
 
-- channels are named `button#X` where `X` is the button number on the Scenario Control device
-- in the .thing file configuration you can specify the `buttons` parameter to define a comma-separated list of buttons numbers [0-31] configured for the scenario device, example: `buttons=1,2,4`
-- possible events are:
-    - for CEN:
-        - `START_PRESS` - sent when you start pressing the button
-        - `SHORT_PRESS` - sent if you pressed the button shorter than 0,5sec (sent at the moment when you release it)
-        - `EXTENDED_PRESS` - sent if you keep the button pressed longer than 0,5sec; will be sent again every 0,5sec as long as you hold pressed (good for dimming rules)
-        - `RELEASE_EXTENDED_PRESS` - sent once when you finally release the button after having it pressed longer than 0,5sec
-    - for CEN+:
-        - `SHORT_PRESS` - sent if you pressed the button shorter than 0,5sec (sent at the moment when you release it)
-        - `START_EXTENDED_PRESS` - sent once as soon as you keep the button pressed longer than 0,5sec
-        - `EXTENDED_PRESS` - sent after `START_EXTENDED_PRESS` if you keep the button pressed longer; will be sent again every 0,5sec as long as you hold pressed (good for dimming rules)
-        - `RELEASE_EXTENDED_PRESS` - sent once when you finally release the button after having it pressed longer than 0,5sec
+- basic scenario channels are named `scenario` and possible events are: `SCENARIO_01` ... `SCENARIO_16` (or up to `SCENARIO_20` in case of module IR3456) when a scenario is activated
+- CEN/CEN+ channels are named `button#X` where `X` is the button number on the CEN/CEN+ Scenario Control device
+    - in the .thing file configuration you can specify the `buttons` parameter to define a comma-separated list of buttons numbers [0-31] configured for the scenario device, example: `buttons=1,2,4`
+    - possible events are:
+        - for CEN:
+            - `START_PRESS` - sent when you start pressing the button
+            - `SHORT_PRESS` - sent if you pressed the button shorter than 0,5sec (sent at the moment when you release it)
+            - `EXTENDED_PRESS` - sent if you keep the button pressed longer than 0,5sec; will be sent again every 0,5sec as long as you hold pressed (good for dimming rules)
+            - `RELEASE_EXTENDED_PRESS` - sent once when you finally release the button after having it pressed longer than 0,5sec
+        - for CEN+:
+            - `SHORT_PRESS` - sent if you pressed the button shorter than 0,5sec (sent at the moment when you release it)
+            - `START_EXTENDED_PRESS` - sent once as soon as you keep the button pressed longer than 0,5sec
+            - `EXTENDED_PRESS` - sent after `START_EXTENDED_PRESS` if you keep the button pressed longer; will be sent again every 0,5sec as long as you hold pressed (good for rules involving dimming/volume)
+            - `RELEASE_EXTENDED_PRESS` - sent once when you finally release the button after having it pressed longer than 0,5sec
 
-####  `mode` for values WEEKLY and SCENARIO (Central Unit)
+####  `mode` for values WEEKLY and SCENARIO (thermo Central Unit)
 
-There are three WEEKLY and sixteen SCENARIO programs defined for the Central Unit.
+There are three WEEKLY and sixteen SCENARIO programs defined for the thermo Central Unit.
 
 In order to activate one of them you have to use two different channels:
 
 - with `mode` you can set the mode (`WEEKLY` or `SCENARIO`)
-- with `weeklyProgram` (if `WEEKLY` was setted) or with `scenarioProgram` (if `SCENARIO` was setted) you can set the program number
+- with `weeklyProgram` (if `WEEKLY` was set) or with `scenarioProgram` (if `SCENARIO` was set) you can set the program number
 
-Example: if you want to activate SCENARIO #9 you have to set `mode` = `SCENARIO` and `scenarioProgram` = `9`.
+Example: if you want to activate SCENARIO #9 on the thermo Central Unit you have to set `mode` = `SCENARIO` and `scenarioProgram` = `9`.
 
 ## Full Example
 
@@ -297,9 +303,12 @@ Bridge openwebnet:bus_gateway:mybridge "MyHOMEServer1" [ host="192.168.1.35", pa
       bus_thermo_zone               LR_zone              "Living Room Zone"         [ where="2"]
       bus_thermo_sensor             EXT_tempsensor       "External Temperature"     [ where="500"]
 
+      bus_scenario_control          BR_scenario          "Bedroom Scenario Module"  [ where="95" ]
+            
       bus_cen_scenario_control      LR_CEN_scenario      "Living Room CEN"          [ where="51", buttons="4,3,8"]
       bus_cenplus_scenario_control  LR_CENplus_scenario  "Living Room CEN+"         [ where="212", buttons="1,5,18" ]
       bus_dry_contact_ir            LR_IR_sensor         "Living Room IR Sensor"    [ where="399" ]
+      
       bus_aux                          Alarm_activation         "Alarm activation"         [ where="4"   ]
 }
 ```
@@ -421,6 +430,15 @@ sitemap openwebnet label="OpenWebNet Binding Example Sitemap"
 ### openwebnet.rules
 
 ```xtend
+rule "Basic scenario WHO=0"
+// A "SCENARIO_02" event started from Scenario device where=95 will switch ON iLR_switch %
+when
+    Channel "openwebnet:bus_scenario_control:mybridge:BR_scenario:scenario" triggered SCENARIO_02
+then
+    sendCommand(iLR_switch, ON)  
+end
+
+
 rule "CEN+ virtual press from OH button"
 /* This rule triggers when the proxy item iCENPlusProxyItem is activated, for example from a button on WebUI/sitemap.
 When activated it sends a "virtual short press" event (where=212, button=5) on the BUS 
@@ -453,7 +471,7 @@ end
 
 ## Notes
 
-The OpenWebNet protocol is maintained and Copyright by BTicino/Legrand. The documentation of the protocol if freely accessible for developers on the [Legrand developer web site](https://developer.legrand.com/documentation/open-web-net-for-myhome/)
+The OpenWebNet protocol is maintained and Copyright by BTicino/Legrand. The documentation of the protocol if freely accessible for developers on the [Legrand developer web site](https://developer.legrand.com/documentation/open-web-net-for-myhome/)
 
 ## Special thanks
 
@@ -467,5 +485,6 @@ Special thanks for helping on testing this binding go to:
 [@llegovich](https://community.openhab.org/u/llegovich),
 [@gabriele.daltoe](https://community.openhab.org/u/gabriele.daltoe),
 [@feodor](https://community.openhab.org/u/feodor),
-[@aconte80](https://community.openhab.org/u/aconte80)
+[@aconte80](https://community.openhab.org/u/aconte80),
+[@rubenfuser](https://community.openhab.org/u/rubenfuser)
 and many others at the fantastic openHAB community!
index 08bb64bca0a09ee89b1da208bb4601cc642351db..d9bf3e359c47696e54e41480511afd8d2dafce03 100644 (file)
@@ -23,7 +23,7 @@
     <dependency>
       <groupId>io.github.openwebnet4j</groupId>
       <artifactId>openwebnet4j</artifactId>
-      <version>0.8.1</version>
+      <version>0.9.0</version>
       <scope>compile</scope>
     </dependency>
 
index c51acc1401d7755f41f6a51b7a369dedc6fc2c47..812f549cbc865df7d91bf0049f9787da63474d9d 100644 (file)
@@ -24,7 +24,7 @@ import org.openhab.core.thing.ThingTypeUID;
 /**
  * The {@link OpenWebNetBindingConstants} class defines common constants, which are used across the whole binding.
  *
- * @author Massimo Valla - Initial contribution
+ * @author Massimo Valla - Initial contribution, updates
  * @author Gilberto Cocchi - Thermoregulation
  * @author Andrea Conte - Energy management, Thermoregulation
  * @author Giovanni Fabiani - Aux support
@@ -64,13 +64,14 @@ public class OpenWebNetBindingConstants {
     public static final String THING_LABEL_BUS_THERMO_CU = "Thermo Central Unit";
     public static final ThingTypeUID THING_TYPE_BUS_CEN_SCENARIO_CONTROL = new ThingTypeUID(BINDING_ID,
             "bus_cen_scenario_control");
-    public static final String THING_LABEL_BUS_CEN_SCENARIO_CONTROL = "CEN Control";
+    public static final String THING_LABEL_BUS_CEN_SCENARIO_CONTROL = "CEN Scenario Control";
     public static final ThingTypeUID THING_TYPE_BUS_DRY_CONTACT_IR = new ThingTypeUID(BINDING_ID, "bus_dry_contact_ir");
     public static final String THING_LABEL_BUS_DRY_CONTACT_IR = "Dry Contact/IR";
     public static final ThingTypeUID THING_TYPE_BUS_CENPLUS_SCENARIO_CONTROL = new ThingTypeUID(BINDING_ID,
             "bus_cenplus_scenario_control");
-    public static final String THING_LABEL_BUS_CENPLUS_SCENARIO_CONTROL = "CEN+ Control";
-
+    public static final String THING_LABEL_BUS_CENPLUS_SCENARIO_CONTROL = "CEN+ Scenario Control";
+    public static final ThingTypeUID THING_TYPE_BUS_SCENARIO = new ThingTypeUID(BINDING_ID, "bus_scenario_control");
+    public static final String THING_LABEL_BUS_SCENARIO = "Scenario Control";
     public static final ThingTypeUID THING_TYPE_BUS_AUX = new ThingTypeUID(BINDING_ID, "bus_aux");
     public static final String THING_LABEL_BUS_AUX = "Auxiliary";
     // ZIGBEE
@@ -102,14 +103,16 @@ public class OpenWebNetBindingConstants {
     // ## CEN/CEN+ Scenario
     public static final Set<ThingTypeUID> SCENARIO_SUPPORTED_THING_TYPES = Set.of(THING_TYPE_BUS_CEN_SCENARIO_CONTROL,
             THING_TYPE_BUS_CENPLUS_SCENARIO_CONTROL, THING_TYPE_BUS_DRY_CONTACT_IR);
-
+    // ## Basic Scenario
+    public static final Set<ThingTypeUID> SCENARIO_BASIC_SUPPORTED_THING_TYPES = Set.of(THING_TYPE_BUS_SCENARIO);
     // ## Aux
     public static final Set<ThingTypeUID> AUX_SUPPORTED_THING_TYPES = Set.of(THING_TYPE_BUS_AUX);
     // ## Groups
     public static final Set<ThingTypeUID> DEVICE_SUPPORTED_THING_TYPES = Stream
             .of(LIGHTING_SUPPORTED_THING_TYPES, AUTOMATION_SUPPORTED_THING_TYPES,
                     THERMOREGULATION_SUPPORTED_THING_TYPES, ENERGY_MANAGEMENT_SUPPORTED_THING_TYPES,
-                    SCENARIO_SUPPORTED_THING_TYPES, GENERIC_SUPPORTED_THING_TYPES, AUX_SUPPORTED_THING_TYPES)
+                    SCENARIO_SUPPORTED_THING_TYPES, SCENARIO_BASIC_SUPPORTED_THING_TYPES, AUX_SUPPORTED_THING_TYPES,
+                    GENERIC_SUPPORTED_THING_TYPES)
             .flatMap(Collection::stream).collect(Collectors.toCollection(HashSet::new));
     public static final Set<ThingTypeUID> BRIDGE_SUPPORTED_THING_TYPES = Set.of(THING_TYPE_ZB_GATEWAY,
             THING_TYPE_BUS_GATEWAY);
@@ -143,7 +146,6 @@ public class OpenWebNetBindingConstants {
     public static final String CHANNEL_CU_AT_LEAST_ONE_PROBE_OFF = "atLeastOneProbeOff";
     public static final String CHANNEL_CU_AT_LEAST_ONE_PROBE_PROTECTION = "atLeastOneProbeProtection";
     public static final String CHANNEL_CU_AT_LEAST_ONE_PROBE_MANUAL = "atLeastOneProbeManual";
-
     // energy management
     public static final String CHANNEL_POWER = "power";
     // scenario button channels
@@ -151,8 +153,9 @@ public class OpenWebNetBindingConstants {
     public static final String CHANNEL_TYPE_CEN_BUTTON_EVENT = "cenButtonEvent";
     public static final String CHANNEL_TYPE_CEN_PLUS_BUTTON_EVENT = "cenPlusButtonEvent";
     public static final String CHANNEL_DRY_CONTACT_IR = "sensor";
-
-    // Aux
+    // basic scenario
+    public static final String CHANNEL_SCENARIO = "scenario";
+    // aux
     public static final String CHANNEL_AUX = "aux";
 
     // devices config properties
index 3f484fb79227da9afa3baf76cbd7adcdef6779a5..4459e9526de8dcf55cf4e4e271c55ebda2fc8fb8 100644 (file)
@@ -22,6 +22,7 @@ import org.openhab.binding.openwebnet.internal.handler.OpenWebNetBridgeHandler;
 import org.openhab.binding.openwebnet.internal.handler.OpenWebNetEnergyHandler;
 import org.openhab.binding.openwebnet.internal.handler.OpenWebNetGenericHandler;
 import org.openhab.binding.openwebnet.internal.handler.OpenWebNetLightingHandler;
+import org.openhab.binding.openwebnet.internal.handler.OpenWebNetScenarioBasicHandler;
 import org.openhab.binding.openwebnet.internal.handler.OpenWebNetScenarioHandler;
 import org.openhab.binding.openwebnet.internal.handler.OpenWebNetThermoregulationHandler;
 import org.openhab.core.thing.Bridge;
@@ -37,7 +38,7 @@ import org.slf4j.LoggerFactory;
 /**
  * The {@link OpenWebNetHandlerFactory} is responsible for creating thing handlers.
  *
- * @author Massimo Valla - Initial contribution
+ * @author Massimo Valla - Initial contribution, updates
  * @author Andrea Conte - Energy management, Thermoregulation
  * @author Gilberto Cocchi - Thermoregulation
  * @author Giovanni Fabiani - Auxiliary support
@@ -79,6 +80,9 @@ public class OpenWebNetHandlerFactory extends BaseThingHandlerFactory {
         } else if (OpenWebNetAuxiliaryHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
             logger.debug("Creating NEW AUXILIARY Handler");
             return new OpenWebNetAuxiliaryHandler(thing);
+        } else if (OpenWebNetScenarioBasicHandler.SUPPORTED_THING_TYPES.contains(thing.getThingTypeUID())) {
+            logger.debug("Creating NEW BASIC SCENARIO Handler");
+            return new OpenWebNetScenarioBasicHandler(thing);
         }
         logger.warn("ThingType {} is not supported by this binding", thing.getThingTypeUID());
         return null;
index e366671fb6e01c590b1445b2716aead83aa0d5be..aa3ecbb1eccfda1ec24d61d931bd0d56161029ee 100644 (file)
@@ -156,6 +156,12 @@ public class OpenWebNetDeviceDiscoveryService extends AbstractDiscoveryService
                 deviceWho = Who.ENERGY_MANAGEMENT;
                 break;
             }
+            case BASIC_SCENARIO: {
+                thingTypeUID = OpenWebNetBindingConstants.THING_TYPE_BUS_SCENARIO;
+                thingLabel = OpenWebNetBindingConstants.THING_LABEL_BUS_SCENARIO;
+                deviceWho = Who.SCENARIO;
+                break;
+            }
             case SCENARIO_CONTROL: {
                 thingTypeUID = OpenWebNetBindingConstants.THING_TYPE_BUS_CEN_SCENARIO_CONTROL;
                 thingLabel = OpenWebNetBindingConstants.THING_LABEL_BUS_CEN_SCENARIO_CONTROL;
index f7c58014c97228aa3df41a32fb5779d088208a95..4c59acd261780ee650e1a2095fbf5da973440728 100644 (file)
@@ -57,6 +57,7 @@ import org.openwebnet4j.message.FrameException;
 import org.openwebnet4j.message.GatewayMgmt;
 import org.openwebnet4j.message.Lighting;
 import org.openwebnet4j.message.OpenMessage;
+import org.openwebnet4j.message.Scenario;
 import org.openwebnet4j.message.Thermoregulation;
 import org.openwebnet4j.message.What;
 import org.openwebnet4j.message.Where;
@@ -68,9 +69,10 @@ import org.slf4j.LoggerFactory;
 /**
  * The {@link OpenWebNetBridgeHandler} is responsible for handling communication with gateways and handling events.
  *
- * @author Massimo Valla - Initial contribution
+ * @author Massimo Valla - Initial contribution, Lighting, Automation, Scenario
  * @author Andrea Conte - Energy management, Thermoregulation
  * @author Gilberto Cocchi - Thermoregulation
+ * @author Giovanni Fabiani - Aux
  */
 @NonNullByDefault
 public class OpenWebNetBridgeHandler extends ConfigStatusBridgeHandler implements GatewayListener {
@@ -326,7 +328,7 @@ public class OpenWebNetBridgeHandler extends ConfigStatusBridgeHandler implement
         }
         // we support these types only
         if (baseMsg instanceof Lighting || baseMsg instanceof Automation || baseMsg instanceof EnergyManagement
-                || baseMsg instanceof Thermoregulation || baseMsg instanceof CEN) {
+                || baseMsg instanceof Thermoregulation || baseMsg instanceof CEN || baseMsg instanceof Scenario) {
             BaseOpenMessage bmsg = baseMsg;
             if (baseMsg instanceof Lighting) {
                 What what = baseMsg.getWhat();
@@ -498,7 +500,8 @@ public class OpenWebNetBridgeHandler extends ConfigStatusBridgeHandler implement
         BaseOpenMessage baseMsg = (BaseOpenMessage) msg;
         // let's try to get the Thing associated with this message...
         if (baseMsg instanceof Lighting || baseMsg instanceof Automation || baseMsg instanceof EnergyManagement
-                || baseMsg instanceof Thermoregulation || baseMsg instanceof CEN || baseMsg instanceof Auxiliary) {
+                || baseMsg instanceof Thermoregulation || baseMsg instanceof CEN || baseMsg instanceof Auxiliary
+                || baseMsg instanceof Scenario) {
             String ownId = ownIdFromMessage(baseMsg);
             logger.debug("ownIdFromMessage({}) --> {}", baseMsg, ownId);
             OpenWebNetThingHandler deviceHandler = registeredDevices.get(ownId);
diff --git a/bundles/org.openhab.binding.openwebnet/src/main/java/org/openhab/binding/openwebnet/internal/handler/OpenWebNetScenarioBasicHandler.java b/bundles/org.openhab.binding.openwebnet/src/main/java/org/openhab/binding/openwebnet/internal/handler/OpenWebNetScenarioBasicHandler.java
new file mode 100644 (file)
index 0000000..0bc280f
--- /dev/null
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2010-2022 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.openwebnet.internal.handler;
+
+import java.util.Set;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.openhab.binding.openwebnet.internal.OpenWebNetBindingConstants;
+import org.openhab.core.thing.ChannelUID;
+import org.openhab.core.thing.Thing;
+import org.openhab.core.thing.ThingStatus;
+import org.openhab.core.thing.ThingTypeUID;
+import org.openhab.core.types.Command;
+import org.openwebnet4j.message.BaseOpenMessage;
+import org.openwebnet4j.message.Scenario.WhatScenario;
+import org.openwebnet4j.message.Where;
+import org.openwebnet4j.message.WhereLightAutom;
+import org.openwebnet4j.message.Who;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The {@link OpenWebNetScenarioBasicHandler} is responsible for handling Basic Scenario (WHO=0) messages.
+ * It extends the abstract {@link OpenWebNetThingHandler}.
+ *
+ * @author Massimo Valla - Initial contribution
+ */
+@NonNullByDefault
+public class OpenWebNetScenarioBasicHandler extends OpenWebNetThingHandler {
+
+    private final Logger logger = LoggerFactory.getLogger(OpenWebNetScenarioBasicHandler.class);
+
+    public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = OpenWebNetBindingConstants.SCENARIO_BASIC_SUPPORTED_THING_TYPES;
+
+    public OpenWebNetScenarioBasicHandler(Thing thing) {
+        super(thing);
+        logger.debug("created Basic Scenario device for thing: {}", getThing().getUID());
+    }
+
+    @Override
+    protected String ownIdPrefix() {
+        return Who.SCENARIO.value().toString();
+    }
+
+    @Override
+    protected void handleMessage(BaseOpenMessage msg) {
+        super.handleMessage(msg);
+        if (msg.isCommand()) {
+            WhatScenario scenario = (WhatScenario) msg.getWhat();
+            if (scenario == null) {
+                logger.warn("Invalid Basic Scenario: {}. Ignoring message {}", scenario, msg);
+                return;
+            }
+            logger.debug("Basic Scenario {} has been activated", scenario);
+            triggerChannel(OpenWebNetBindingConstants.CHANNEL_SCENARIO, scenario.toString());
+        } else {
+            logger.debug("handleMessage() Ignoring unsupported DIM for thing {}. Frame={}", getThing().getUID(), msg);
+        }
+    }
+
+    @Override
+    protected void handleChannelCommand(ChannelUID channel, Command command) {
+        logger.debug("Basic Scenario are read-only channels. Ignoring command {} for channel {}", command, channel);
+    }
+
+    @Override
+    protected void requestChannelState(ChannelUID channel) {
+        logger.debug("requestChannelState() Basic Scenario channels are trigger channels and do not have state.");
+    }
+
+    @Override
+    protected void refreshDevice(boolean refreshAll) {
+        logger.debug("Basic Scenario channels are trigger channels and do not have state. Setting it ONLINE");
+        // put basic scenario things to ONLINE automatically as they do not have state
+        ThingStatus ts = getThing().getStatus();
+        if (ThingStatus.ONLINE != ts && ThingStatus.REMOVING != ts && ThingStatus.REMOVED != ts) {
+            updateStatus(ThingStatus.ONLINE);
+        }
+    }
+
+    @Override
+    protected Where buildBusWhere(String wStr) throws IllegalArgumentException {
+        return new WhereLightAutom(wStr);
+    }
+}
index eac769297947572a6220573947dc2252bc27cb65..8690fe0ce814e52a9f103bd05118affb5d41a520 100644 (file)
@@ -12,9 +12,7 @@
  */
 package org.openhab.binding.openwebnet.internal.handler;
 
-import static org.openhab.binding.openwebnet.internal.OpenWebNetBindingConstants.CONFIG_PROPERTY_WHERE;
-import static org.openhab.binding.openwebnet.internal.OpenWebNetBindingConstants.PROPERTY_OWNID;
-import static org.openhab.binding.openwebnet.internal.OpenWebNetBindingConstants.THING_STATE_REQ_TIMEOUT_SEC;
+import static org.openhab.binding.openwebnet.internal.OpenWebNetBindingConstants.*;
 
 import java.util.Map;
 import java.util.concurrent.ScheduledFuture;
@@ -265,7 +263,8 @@ public abstract class OpenWebNetThingHandler extends BaseThingHandler {
                     logger.debug("--- refreshAllDevices() : refreshing ALL devices... ({})", thing.getUID());
                     refreshDevice(true);
                 } else {
-                    logger.debug("--- refreshAllDevices() : refresh all devices just sent... ({})", thing.getUID());
+                    logger.debug("--- refreshAllDevices() : refresh all devices sent {}msec ago, skipping... ({})",
+                            ALL_DEVICES_REFRESH_INTERVAL_MSEC, thing.getUID());
                 }
                 // sometimes GENERAL (e.g. #*1*0##) refresh requests do not return state for all devices, so let's
                 // schedule another single refresh device, just in case
index 3687fec9872e2495fa236d4e5930f7e25237370e..87db66dbe05b7a6afed3bfaf068bbeff95a292f8 100644 (file)
@@ -23,6 +23,8 @@ thing-type.openwebnet.bus_gateway.label = BUS Gateway
 thing-type.openwebnet.bus_gateway.description = This thing allows to connect to a IP BUS/SCS gateway that supports the OpenWebNet protocol (models: F454, MyHOMEServer1, F455, MH200N, F453, etc.)
 thing-type.openwebnet.bus_on_off_switch.label = Switch
 thing-type.openwebnet.bus_on_off_switch.description = A OpenWebNet BUS/SCS switch for the control of 1 light/load. BTicino models: xxx/yyyy/etc.
+thing-type.openwebnet.bus_scenario_control.label = Scenario Control
+thing-type.openwebnet.bus_scenario_control.description = A OpenWebNet BUS/SCS Scenario Control device. BTicino models: F420/IR3456
 thing-type.openwebnet.bus_thermo_cu.label = Thermo Central Unit
 thing-type.openwebnet.bus_thermo_cu.description = A OpenWebNet BUS/SCS configured thermo Central Unit.
 thing-type.openwebnet.bus_thermo_sensor.label = Thermo Sensor
@@ -74,6 +76,8 @@ thing-type.config.openwebnet.bus_gateway.port.label = Port
 thing-type.config.openwebnet.bus_gateway.port.description = OpenWebNet gateway port (default: 20000)
 thing-type.config.openwebnet.bus_on_off_switch.where.label = OpenWebNet Address (where)
 thing-type.config.openwebnet.bus_on_off_switch.where.description = Example: A/PL address: A=1 PL=3 --> where=13. On local bus: where=13#4#01
+thing-type.config.openwebnet.bus_scenario_control.where.label = OpenWebNet Address (where)
+thing-type.config.openwebnet.bus_scenario_control.where.description = Example: scenario control module address 53 --> where=53. On local bus: where=53#4#01
 thing-type.config.openwebnet.bus_thermo_cu.where.label = OpenWebNet Address (where)
 thing-type.config.openwebnet.bus_thermo_cu.where.description = The Central Unit can only assume where=0.
 thing-type.config.openwebnet.bus_thermo_sensor.where.label = OpenWebNet Address (where)
@@ -137,9 +141,23 @@ channel-type.openwebnet.batteryStatus.description = Central Unit Battery status
 channel-type.openwebnet.batteryStatus.state.option.OK = OK
 channel-type.openwebnet.batteryStatus.state.option.KO = KO
 channel-type.openwebnet.brightness.label = Brightness
-channel-type.openwebnet.brightness.description = Control the brightness and switch the light ON and OFF
+channel-type.openwebnet.brightness.description = Control the brightness and switch the light ON and OFF (read/write)
 channel-type.openwebnet.cenButtonEvent.label = CEN Button Event
+channel-type.openwebnet.cenButtonEvent.description = Event corresponding to the button press (read only)
+
+# channel-type.openwebnet.cenButtonEvent.event.option.START_PRESS = Start press
+# channel-type.openwebnet.cenButtonEvent.event.option.SHORT_PRESS = Release after short press
+# channel-type.openwebnet.cenButtonEvent.event.option.EXTENDED_PRESS = Extended press (repeated until release)
+# channel-type.openwebnet.cenButtonEvent.event.option.RELEASE_EXTENDED_PRESS = Release after extended press
+
 channel-type.openwebnet.cenPlusButtonEvent.label = CEN+ Button Event
+channel-type.openwebnet.cenPlusButtonEvent.description = Event corresponding to the button press (read only)
+
+# channel-type.openwebnet.cenPlusButtonEvent.event.option.SHORT_PRESS = Short press
+# channel-type.openwebnet.cenPlusButtonEvent.event.option.START_EXTENDED_PRESS = Start of extended press
+# channel-type.openwebnet.cenPlusButtonEvent.event.option.EXTENDED_PRESS = Extended press (repeated until release)
+# channel-type.openwebnet.cenPlusButtonEvent.event.option.RELEASE_EXTENDED_PRESS = Release after extended press
+
 channel-type.openwebnet.conditioningValves.label = Conditioning Valves
 channel-type.openwebnet.conditioningValves.description = Conditioning Valves status (read only)
 channel-type.openwebnet.conditioningValves.state.option.OFF = OFF
@@ -164,7 +182,7 @@ channel-type.openwebnet.function.state.option.HEATING = Heating
 channel-type.openwebnet.function.state.option.COOLING = Cooling
 channel-type.openwebnet.function.state.option.GENERIC = Generic
 channel-type.openwebnet.functionCentralUnit.label = Thermo Function
-channel-type.openwebnet.functionCentralUnit.description = Thermo function of the Central Unit
+channel-type.openwebnet.functionCentralUnit.description = Thermo function of the Central Unit (read only)
 channel-type.openwebnet.functionCentralUnit.state.option.HEATING = Heating
 channel-type.openwebnet.functionCentralUnit.state.option.COOLING = Cooling
 channel-type.openwebnet.heatingValves.label = Heating Valves
@@ -210,6 +228,30 @@ channel-type.openwebnet.remoteControl.label = Remote Control
 channel-type.openwebnet.remoteControl.description = Central Unit Remote Control status (read only)
 channel-type.openwebnet.remoteControl.state.option.DISABLED = DISABLED
 channel-type.openwebnet.remoteControl.state.option.ENABLED = ENABLED
+channel-type.openwebnet.scenarioEvent.label = Activated Scenario Event
+channel-type.openwebnet.scenarioEvent.description = Event corresponding to the number of Basic Scenario that has been activated (read only)
+
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_01 = Scenario 1
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_02 = Scenario 2
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_03 = Scenario 3
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_04 = Scenario 4
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_05 = Scenario 5
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_06 = Scenario 6
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_07 = Scenario 7
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_08 = Scenario 8
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_09 = Scenario 9
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_10 = Scenario 10
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_11 = Scenario 11
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_12 = Scenario 12
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_13 = Scenario 13
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_14 = Scenario 14
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_15 = Scenario 15
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_16 = Scenario 16
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_17 = Scenario 17
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_18 = Scenario 18
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_19 = Scenario 19
+# channel-type.openwebnet.scenarioEvent.event.option.SCENARIO_20 = Scenario 20
+
 channel-type.openwebnet.scenarioProgramCentralUnit.label = Scenario Program Number
 channel-type.openwebnet.scenarioProgramCentralUnit.description = Set scenario program number for the Central Unit, valid only with Central Unit mode = "SCENARIO" (read/write)
 channel-type.openwebnet.scenarioProgramCentralUnit.state.option.1 = Program 1
@@ -231,7 +273,7 @@ channel-type.openwebnet.scenarioProgramCentralUnit.state.option.16 = Program 16
 channel-type.openwebnet.setpointTemperature.label = Setpoint Temperature
 channel-type.openwebnet.setpointTemperature.description = Setpoint temperature (read/write)
 channel-type.openwebnet.shutter.label = Roller Shutter
-channel-type.openwebnet.shutter.description = Control the roller shutter position
+channel-type.openwebnet.shutter.description = Control the roller shutter position (read/write)
 channel-type.openwebnet.speedFanCoil.label = Set Fan Speed
 channel-type.openwebnet.speedFanCoil.description = Set speed of the Fan Coil (read/write)
 channel-type.openwebnet.speedFanCoil.state.option.AUTO = Auto
diff --git a/bundles/org.openhab.binding.openwebnet/src/main/resources/OH-INF/thing/BusBasicScenarioControl.xml b/bundles/org.openhab.binding.openwebnet/src/main/resources/OH-INF/thing/BusBasicScenarioControl.xml
new file mode 100644 (file)
index 0000000..215e254
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<thing:thing-descriptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0" bindingId="openwebnet"
+       xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
+
+       <!-- Thing for BUS Scenario Control (BTicino F420/IR3456) -->
+
+       <thing-type id="bus_scenario_control">
+               <supported-bridge-type-refs>
+                       <bridge-type-ref id="bus_gateway"/>
+               </supported-bridge-type-refs>
+
+               <label>Scenario Control</label>
+               <description>A OpenWebNet BUS/SCS Scenario Control device. BTicino models: F420/IR3456</description>
+
+               <channels>
+                       <channel id="scenario" typeId="scenarioEvent"/>
+               </channels>
+
+               <properties>
+                       <property name="vendor">BTicino/Legrand</property>
+                       <property name="model">BTI-F420/IR3456</property>
+                       <property name="ownDeviceType">3</property>
+               </properties>
+
+               <representation-property>ownId</representation-property>
+
+               <config-description>
+                       <parameter name="where" type="text" required="true">
+                               <label>OpenWebNet Address (where)</label>
+                               <description>Example: scenario control module address 53 --> where=53. On local bus: where=53#4#01</description>
+                       </parameter>
+               </config-description>
+
+       </thing-type>
+</thing:thing-descriptions>
index 698a7cc0d1c3d2b82a80bb70bb4592992929b9fc..aa574766443b07c4b9f91e76d999199e342526a2 100644 (file)
@@ -43,7 +43,7 @@
        <channel-type id="brightness">
                <item-type>Dimmer</item-type>
                <label>Brightness</label>
-               <description>Control the brightness and switch the light ON and OFF</description>
+               <description>Control the brightness and switch the light ON and OFF (read/write)</description>
                <category>Light</category>
                <tags>
                        <tag>Control</tag>
@@ -55,7 +55,7 @@
        <channel-type id="shutter">
                <item-type>Rollershutter</item-type>
                <label>Roller Shutter</label>
-               <description>Control the roller shutter position</description>
+               <description>Control the roller shutter position (read/write)</description>
                <category>Blinds</category>
                <tags>
                        <tag>OpenLevel</tag>
@@ -92,7 +92,7 @@
        <channel-type id="functionCentralUnit">
                <item-type>String</item-type>
                <label>Thermo Function</label>
-               <description>Thermo function of the Central Unit</description>
+               <description>Thermo function of the Central Unit (read only)</description>
                <state readOnly="true">
                        <options>
                                <option value="HEATING">Heating</option>
                <state readOnly="true" pattern="%.0f %unit%"></state>
        </channel-type>
 
+       <!-- Scenario trigger channels -->
+       <channel-type id="scenarioEvent">
+               <kind>trigger</kind>
+               <label>Activated Scenario Event</label>
+               <description>Event corresponding to the number of Basic Scenario that has been activated (read only)</description>
+               <event>
+                       <options>
+                               <option value="SCENARIO_01">Scenario 1</option>
+                               <option value="SCENARIO_02">Scenario 2</option>
+                               <option value="SCENARIO_03">Scenario 3</option>
+                               <option value="SCENARIO_04">Scenario 4</option>
+                               <option value="SCENARIO_05">Scenario 5</option>
+                               <option value="SCENARIO_06">Scenario 6</option>
+                               <option value="SCENARIO_07">Scenario 7</option>
+                               <option value="SCENARIO_08">Scenario 8</option>
+                               <option value="SCENARIO_09">Scenario 9</option>
+                               <option value="SCENARIO_10">Scenario 10</option>
+                               <option value="SCENARIO_11">Scenario 11</option>
+                               <option value="SCENARIO_12">Scenario 12</option>
+                               <option value="SCENARIO_13">Scenario 13</option>
+                               <option value="SCENARIO_14">Scenario 14</option>
+                               <option value="SCENARIO_15">Scenario 15</option>
+                               <option value="SCENARIO_16">Scenario 16</option>
+                               <option value="SCENARIO_17">Scenario 17</option>
+                               <option value="SCENARIO_18">Scenario 18</option>
+                               <option value="SCENARIO_19">Scenario 19</option>
+                               <option value="SCENARIO_20">Scenario 20</option>
+                       </options>
+               </event>
+       </channel-type>
+
        <!-- CEN/CEN+ trigger channels -->
        <channel-type id="cenButtonEvent">
                <kind>trigger</kind>
                <label>CEN Button Event</label>
+               <description>Event corresponding to the button press (read only)</description>
                <event>
                        <options>
-                               <option value="START_PRESS">start press</option>
-                               <option value="SHORT_PRESS">release after short press</option>
-                               <option value="EXTENDED_PRESS">extended press (repeated until release)</option>
-                               <option value="RELEASE_EXTENDED_PRESS">release after extended press</option>
+                               <option value="START_PRESS">Start press</option>
+                               <option value="SHORT_PRESS">Release after short press</option>
+                               <option value="EXTENDED_PRESS">Extended press (repeated until release)</option>
+                               <option value="RELEASE_EXTENDED_PRESS">Release after extended press</option>
                        </options>
                </event>
        </channel-type>
        <channel-type id="cenPlusButtonEvent">
                <kind>trigger</kind>
                <label>CEN+ Button Event</label>
+               <description>Event corresponding to the button press (read only)</description>
                <event>
                        <options>
-                               <option value="SHORT_PRESS">short press</option>
-                               <option value="START_EXTENDED_PRESS">start of extended press</option>
-                               <option value="EXTENDED_PRESS">extended press (repeated until release)</option>
-                               <option value="RELEASE_EXTENDED_PRESS">release after extended press</option>
+                               <option value="SHORT_PRESS">Short press</option>
+                               <option value="START_EXTENDED_PRESS">Start of extended press</option>
+                               <option value="EXTENDED_PRESS">Extended press (repeated until release)</option>
+                               <option value="RELEASE_EXTENDED_PRESS">Release after extended press</option>
                        </options>
                </event>
        </channel-type>
 
+       <!-- Dry Contact / IR channel -->
        <channel-type id="dryContactIR">
                <item-type>Switch</item-type>
                <label>Sensor</label>
index 87f02831ea9543b63cc0a9be45596cccdb2107a0..9b942e5a21da7b572c4be6006d7fe71dfe60029e 100644 (file)
@@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory;
  *
  * @author Massimo Valla - Initial contribution
  * @author Andrea Conte - Energy management
- * @author Giovanni Fabiani - AAuxiliary message support
+ * @author Giovanni Fabiani - Auxiliary message support
  */
 @NonNullByDefault
 public class OwnIdTest {
@@ -66,7 +66,8 @@ public class OwnIdTest {
      * BUS CEN              51              51                  15.51           51
      * BUS CEN+             212             212                 25.212          212
      * BUS DryContact       399             399                 25.399          399
-     * BUS AUX                4               4                    9.4            4
+     * BUS AUX              4               4                   9.4             4
+     * BUS Scenario         05              05                  0.05            05
      */
 // @formatter:on
 
@@ -86,7 +87,9 @@ public class OwnIdTest {
         bus_cen(new WhereCEN("51"), Who.fromValue(15), "*15*31*51##", "51", "15.51", "51"),
         bus_cen_plus(new WhereCEN("212"), Who.fromValue(25), "*25*21#31*212##", "212", "25.212", "212"),
         bus_drycontact(new WhereCEN("399"), Who.fromValue(25), "*25*32#1*399##", "399", "25.399", "399"),
-        bus_aux(new WhereAuxiliary("4"), Who.fromValue(9), "*9*1*4##","4","9.4","4");
+        bus_aux(new WhereAuxiliary("4"), Who.fromValue(9), "*9*1*4##","4","9.4","4"),
+        bus_scenario(new WhereLightAutom("05"), Who.fromValue(0), "*0*2*05##","05","0.05","05");
+
 
 
         // @formatter:on