[velbus] Add modules VMBKP, VMBIN, VMB4PB (#13939)

* [velbus] Add new functionality PRESSED and LONG PRESSED and fix bug

New functionnality :
Add the the possibility to simulate the PRESSED and LONG PRESSED message of an input.

Module supported with button simulation :
VMB1RYS (button : CH6)
VMB6IN (buttons : CH1 ... CH6)
VMB2PBN, VMB6PBN, VMB7IN, VMB8IR, VMB8PB, VMB8PBU, VMBEL1, VMBEL2, VMBEL4, VMBGP1, VMBGP1-2, VMBGP2, VMBGP2-2, VMBGP4, VMBGP4-2, VMBGP4PIR, VMBGP4PIR-2 (buttons : CH1 ... CH8)
VMBELO, VMBGPOD, VMBGPOD-2 (buttons : CH1 ... CH32)

Fix bug :

The channels names were not correctly assigned to the thing properties. The last channel had the default name, not the one retrieved from the module.

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* Update bundles/org.openhab.binding.velbus/README.md

Co-authored-by: cedricboon <cedric.boon@hotmail.com>
Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* Update bundles/org.openhab.binding.velbus/README.md

Co-authored-by: cedricboon <cedric.boon@hotmail.com>
Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* Update bundles/org.openhab.binding.velbus/README.md

Co-authored-by: cedricboon <cedric.boon@hotmail.com>
Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* Add trigger on channel when using button simulation

Remove uneeded  Thread.sleep in code.
Trigger the events PRESSED, LONG_PRESSED, RELEASED on the linked trigger channel when using the button simulation.

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* Fix redundant superinterface DiscoveryService

Redundant superinterface DiscoveryService for the type VelbusThingDiscoveryService, already defined by AbstractDiscoveryService.

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* Fix bug #11521

Typo in the Counter Channel name for VMB7IN.

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* [velbus] Add VMBELPIR module

Add the module VMBELPIR

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* [velbus] VMBELPIR added to discovery service

Forgot to add the module VMBELPIR in the discovery service.

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* [velbus] Updates clock alarms management

Changes the clocks alarm management :
- Global alarms are now set from the bridge thing.
- Local alarms are still set from the module thing, but the alarm type channels on modules are now readonly.

Reduces the flooding of the bus by adding a delay of 10 seconds before sending the update on the bus :
- Removes the send on the bus after each update of a clock alarm value.
- Sends only the values of the last update after 10 seconds.

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* [velbus] PR modifications

Modifications asked in PR review.

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* [velbus] PR modifications 2

Modifications asked in PR review 2.

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* [velbus] Add modules VMBKP, VMBIN, VMB4PB

New functionnality : Add the support of the modules VMBKP, VMBIN, VMB4PB

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

* [velbus] Fix code style error

Fix code style error in VelbusSensorWithAlarmClockHandler.java

Signed-off-by: Daniel Rosengarten <github@praetorians.be>

Signed-off-by: Daniel Rosengarten <github@praetorians.be>
Co-authored-by: cedricboon <cedric.boon@hotmail.com>
This commit is contained in:
Daniel Rosengarten 2022-12-31 17:25:03 +01:00 committed by GitHub
parent d0d3005b34
commit 377dc86452
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 111 additions and 17 deletions

View File

@ -84,22 +84,25 @@ public class VelbusBindingConstants {
public static final ThingTypeUID THING_TYPE_VMBPIRO = new ThingTypeUID(BINDING_ID, "vmbpiro");
public static final ThingTypeUID THING_TYPE_VMBRFR8S = new ThingTypeUID(BINDING_ID, "vmbrfr8s");
public static final ThingTypeUID THING_TYPE_VMBVP1 = new ThingTypeUID(BINDING_ID, "vmbvp1");
public static final ThingTypeUID THING_TYPE_VMBKP = new ThingTypeUID(BINDING_ID, "vmbkp");
public static final ThingTypeUID THING_TYPE_VMBIN = new ThingTypeUID(BINDING_ID, "vmbin");
public static final ThingTypeUID THING_TYPE_VMB4PB = new ThingTypeUID(BINDING_ID, "vmb4pb");
// thing type sets
public static final Set<ThingTypeUID> BRIDGE_THING_TYPES_UIDS = Collections
.unmodifiableSet(new HashSet<>(Arrays.asList(BRIDGE_THING_TYPE, NETWORK_BRIDGE_THING_TYPE)));
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Collections
.unmodifiableSet(new HashSet<>(Arrays.asList(THING_TYPE_VMB1BL, THING_TYPE_VMB1BLS, THING_TYPE_VMB1DM,
THING_TYPE_VMB1LED, THING_TYPE_VMB1RY, THING_TYPE_VMB1RYNO, THING_TYPE_VMB1RYNOS,
THING_TYPE_VMB1RYS, THING_TYPE_VMB1TS, THING_TYPE_VMB2BL, THING_TYPE_VMB2BLE, THING_TYPE_VMB2PBN,
THING_TYPE_VMB4AN, THING_TYPE_VMB4DC, THING_TYPE_VMB4RY, THING_TYPE_VMB4RYLD, THING_TYPE_VMB4RYNO,
THING_TYPE_VMB6IN, THING_TYPE_VMB6PBN, THING_TYPE_VMB7IN, THING_TYPE_VMB8IR, THING_TYPE_VMB8PB,
THING_TYPE_VMB8PBU, THING_TYPE_VMBDME, THING_TYPE_VMBDMI, THING_TYPE_VMBDMIR, THING_TYPE_VMBEL1,
THING_TYPE_VMBEL2, THING_TYPE_VMBEL4, THING_TYPE_VMBELO, THING_TYPE_VMBELPIR, THING_TYPE_VMBGP1,
THING_TYPE_VMBGP1_2, THING_TYPE_VMBGP2, THING_TYPE_VMBGP2_2, THING_TYPE_VMBGP4, THING_TYPE_VMBGP4_2,
THING_TYPE_VMBGP4PIR, THING_TYPE_VMBGP4PIR_2, THING_TYPE_VMBGPO, THING_TYPE_VMBGPOD,
THING_TYPE_VMBGPOD_2, THING_TYPE_VMBMETEO, THING_TYPE_VMBPIRC, THING_TYPE_VMBPIRM,
THING_TYPE_VMBPIRO, THING_TYPE_VMBRFR8S, THING_TYPE_VMBVP1)));
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Collections.unmodifiableSet(
new HashSet<>(Arrays.asList(THING_TYPE_VMB1BL, THING_TYPE_VMB1BLS, THING_TYPE_VMB1DM, THING_TYPE_VMB1LED,
THING_TYPE_VMB1RY, THING_TYPE_VMB1RYNO, THING_TYPE_VMB1RYNOS, THING_TYPE_VMB1RYS, THING_TYPE_VMB1TS,
THING_TYPE_VMB2BL, THING_TYPE_VMB2BLE, THING_TYPE_VMB2PBN, THING_TYPE_VMB4AN, THING_TYPE_VMB4DC,
THING_TYPE_VMB4RY, THING_TYPE_VMB4RYLD, THING_TYPE_VMB4RYNO, THING_TYPE_VMB6IN, THING_TYPE_VMB6PBN,
THING_TYPE_VMB7IN, THING_TYPE_VMB8IR, THING_TYPE_VMB8PB, THING_TYPE_VMB8PBU, THING_TYPE_VMBDME,
THING_TYPE_VMBDMI, THING_TYPE_VMBDMIR, THING_TYPE_VMBEL1, THING_TYPE_VMBEL2, THING_TYPE_VMBEL4,
THING_TYPE_VMBELO, THING_TYPE_VMBELPIR, THING_TYPE_VMBGP1, THING_TYPE_VMBGP1_2, THING_TYPE_VMBGP2,
THING_TYPE_VMBGP2_2, THING_TYPE_VMBGP4, THING_TYPE_VMBGP4_2, THING_TYPE_VMBGP4PIR,
THING_TYPE_VMBGP4PIR_2, THING_TYPE_VMBGPO, THING_TYPE_VMBGPOD, THING_TYPE_VMBGPOD_2,
THING_TYPE_VMBMETEO, THING_TYPE_VMBPIRC, THING_TYPE_VMBPIRM, THING_TYPE_VMBPIRO,
THING_TYPE_VMBRFR8S, THING_TYPE_VMBVP1, THING_TYPE_VMBKP, THING_TYPE_VMBIN, THING_TYPE_VMB4PB)));
// Velbus module types
public static final byte MODULE_TYPE_VMB8PB = 0x01;
@ -150,6 +153,9 @@ public class VelbusBindingConstants {
public static final byte MODULE_TYPE_VMBGPOD_2 = 0x3D;
public static final byte MODULE_TYPE_VMBGP4PIR_2 = 0x3E;
public static final byte MODULE_TYPE_VMB1RYS = 0x41;
public static final byte MODULE_TYPE_VMBKP = 0x42;
public static final byte MODULE_TYPE_VMBIN = 0x43;
public static final byte MODULE_TYPE_VMB4PB = 0x44;
// Velbus commands
public static final byte COMMAND_PUSH_BUTTON_STATUS = 0x00;

View File

@ -311,6 +311,18 @@ public class VelbusThingDiscoveryService extends AbstractDiscoveryService
velbusModule = new VelbusModule(new VelbusModuleAddress(address, 0), moduleType, highByteOfSerialNumber,
lowByteOfSerialNumber, memoryMapVersion, buildYear, buildWeek, THING_TYPE_VMBVP1, 8);
break;
case MODULE_TYPE_VMBKP:
velbusModule = new VelbusModule(new VelbusModuleAddress(address, 0), moduleType, highByteOfSerialNumber,
lowByteOfSerialNumber, memoryMapVersion, buildYear, buildWeek, THING_TYPE_VMBKP, 8);
break;
case MODULE_TYPE_VMBIN:
velbusModule = new VelbusModule(new VelbusModuleAddress(address, 0), moduleType, highByteOfSerialNumber,
lowByteOfSerialNumber, memoryMapVersion, buildYear, buildWeek, THING_TYPE_VMBIN, 8);
break;
case MODULE_TYPE_VMB4PB:
velbusModule = new VelbusModule(new VelbusModuleAddress(address, 0), moduleType, highByteOfSerialNumber,
lowByteOfSerialNumber, memoryMapVersion, buildYear, buildWeek, THING_TYPE_VMB4PB, 8);
break;
}
if (velbusModule != null) {

View File

@ -41,14 +41,14 @@ import org.openhab.core.types.RefreshType;
* sent to one of the channels.
*
* @author Cedric Boon - Initial contribution
* @author Daniel Rosengarten - Add VMBELPIR support, removes global alarm configuration from module (moved on bridge),
* reduces bus flooding on alarm value update
* @author Daniel Rosengarten - Add new module support, removes global alarm configuration from module (moved on
* bridge), reduces bus flooding on alarm value update
*/
@NonNullByDefault
public class VelbusSensorWithAlarmClockHandler extends VelbusSensorHandler {
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = new HashSet<>(
Arrays.asList(THING_TYPE_VMB2PBN, THING_TYPE_VMB6PBN, THING_TYPE_VMB8PBU, THING_TYPE_VMBPIRC,
THING_TYPE_VMBPIRM, THING_TYPE_VMBRFR8S, THING_TYPE_VMBVP1));
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = new HashSet<>(Arrays.asList(THING_TYPE_VMB2PBN,
THING_TYPE_VMB6PBN, THING_TYPE_VMB8PBU, THING_TYPE_VMBPIRC, THING_TYPE_VMBPIRM, THING_TYPE_VMBRFR8S,
THING_TYPE_VMBVP1, THING_TYPE_VMBKP, THING_TYPE_VMBIN, THING_TYPE_VMB4PB));
private static final HashMap<ThingTypeUID, Integer> ALARM_CONFIGURATION_MEMORY_ADDRESSES = new HashMap<ThingTypeUID, Integer>();
static {
@ -79,6 +79,9 @@ public class VelbusSensorWithAlarmClockHandler extends VelbusSensorHandler {
ALARM_CONFIGURATION_MEMORY_ADDRESSES.put(THING_TYPE_VMBGPOD_2, 0x0284);
ALARM_CONFIGURATION_MEMORY_ADDRESSES.put(THING_TYPE_VMBRFR8S, 0x0093);
ALARM_CONFIGURATION_MEMORY_ADDRESSES.put(THING_TYPE_VMBVP1, 0x002B);
ALARM_CONFIGURATION_MEMORY_ADDRESSES.put(THING_TYPE_VMBKP, 0x00A7);
ALARM_CONFIGURATION_MEMORY_ADDRESSES.put(THING_TYPE_VMBIN, 0x00A7);
ALARM_CONFIGURATION_MEMORY_ADDRESSES.put(THING_TYPE_VMB4PB, 0x00A7);
}
private static final byte ALARM_CONFIGURATION_MEMORY_SIZE = 0x09;

View File

@ -37,6 +37,8 @@ thing-type.velbus.vmb4an.label = VMB4AN
thing-type.velbus.vmb4an.description = Analog I/O module
thing-type.velbus.vmb4dc.label = VMB4DC
thing-type.velbus.vmb4dc.description = 4-channel 0/1-10V dimmer controller
thing-type.velbus.vmb4pb.label = VMB4PB
thing-type.velbus.vmb4pb.description = 4 button interface module
thing-type.velbus.vmb4ry.label = VMB4RY
thing-type.velbus.vmb4ry.description = 4-channel relay module
thing-type.velbus.vmb4ryld.label = VMB4RYLD
@ -93,6 +95,10 @@ thing-type.velbus.vmbgpod-2.label = VMBGPOD-2
thing-type.velbus.vmbgpod-2.description = Glass control module with oled display and temperature controller (Edition 2)
thing-type.velbus.vmbgpod.label = VMBGPOD
thing-type.velbus.vmbgpod.description = Glass control module with oled display and temperature controller
thing-type.velbus.vmbin.label = VMBIN
thing-type.velbus.vmbin.description = 1-channel input module
thing-type.velbus.vmbkp.label = VMBKP
thing-type.velbus.vmbkp.description = Keypad interface module
thing-type.velbus.vmbmeteo.label = VMBMETEO
thing-type.velbus.vmbmeteo.description = Weather station with thermometer, anemometer, rain sensor and light sensor
thing-type.velbus.vmbpirc.label = VMBPIRC
@ -435,6 +441,8 @@ channel-group-type.velbus.4channelCounterModule.label = Counters
channel-group-type.velbus.4channelCounterModule.description = This is a generic module with 4 counter channels.
channel-group-type.velbus.4channelFeedbackModule.label = Feedback
channel-group-type.velbus.4channelFeedbackModule.description = This is a generic module with 4 feedback channels.
channel-group-type.velbus.5SubchannelButtonModule.label = Button
channel-group-type.velbus.5SubchannelButtonModule.description = This is a generic module with 5 button channels. Starting at channel 4.
channel-group-type.velbus.6channelButtonModule.label = Button
channel-group-type.velbus.6channelButtonModule.description = This is a generic module with 6 button channels.
channel-group-type.velbus.6channelFeedbackModule.label = Feedback

View File

@ -867,6 +867,58 @@
<config-description-ref uri="thing-type:velbus:8channelDevice"/>
</thing-type>
<thing-type id="vmbkp">
<supported-bridge-type-refs>
<bridge-type-ref id="bridge"/>
<bridge-type-ref id="networkbridge"/>
</supported-bridge-type-refs>
<label>VMBKP</label>
<description>Keypad interface module</description>
<channel-groups>
<channel-group id="input" typeId="8channelInputModule"/>
<channel-group id="button" typeId="5SubchannelButtonModule"/>
<channel-group id="clockAlarm" typeId="clockAlarm"/>
</channel-groups>
<config-description-ref uri="thing-type:velbus:8channelDevice"/>
</thing-type>
<thing-type id="vmbin">
<supported-bridge-type-refs>
<bridge-type-ref id="bridge"/>
<bridge-type-ref id="networkbridge"/>
</supported-bridge-type-refs>
<label>VMBIN</label>
<description>1-channel input module</description>
<channel-groups>
<channel-group id="input" typeId="8channelInputModule"/>
<channel-group id="button" typeId="8channelButtonModule"/>
<channel-group id="clockAlarm" typeId="clockAlarm"/>
</channel-groups>
<config-description-ref uri="thing-type:velbus:8channelDevice"/>
</thing-type>
<thing-type id="vmb4pb">
<supported-bridge-type-refs>
<bridge-type-ref id="bridge"/>
<bridge-type-ref id="networkbridge"/>
</supported-bridge-type-refs>
<label>VMB4PB</label>
<description>4 button interface module</description>
<channel-groups>
<channel-group id="input" typeId="8channelInputModule"/>
<channel-group id="button" typeId="8channelButtonModule"/>
<channel-group id="feedback" typeId="4channelFeedbackModule"/>
<channel-group id="clockAlarm" typeId="clockAlarm"/>
</channel-groups>
<config-description-ref uri="thing-type:velbus:8channelDevice"/>
</thing-type>
<channel-type id="heatingOperatingMode">
<item-type>String</item-type>
<label>Operating Mode</label>
@ -1327,6 +1379,19 @@
<channel id="CH2" typeId="button-channel"/>
</channels>
</channel-group-type>
<channel-group-type id="5SubchannelButtonModule">
<label>Button</label>
<description>
This is a generic module with 5 button channels. Starting at channel 4.
</description>
<channels>
<channel id="CH4" typeId="button-channel"/>
<channel id="CH5" typeId="button-channel"/>
<channel id="CH6" typeId="button-channel"/>
<channel id="CH7" typeId="button-channel"/>
<channel id="CH8" typeId="button-channel"/>
</channels>
</channel-group-type>
<channel-group-type id="6channelButtonModule">
<label>Button</label>
<description>