cedricboon / openhab-addons

Add-ons for openHAB 2.x
Eclipse Public License 2.0
6 stars 5 forks source link

VMBELO subaddresses not being populated using .things file #29

Open fredericdepuydt opened 3 years ago

fredericdepuydt commented 3 years ago

Expected Behavior

The VMBELO modules are configured by OpenHAB as 33 channel input modules, with only one address to access the module on the bus. The expected number of addresses for a complete VMBELO is infact 5: 1 for the module itself and the first 8 channels, 3 addresses for the next 24 channels and 1 address for the temperature controller.

Current Behavior

Only one address can be configured in OpenHAB, hence only the functionality of the first 8 channels works.

Possible Solution

Allow the user to enter different addresses for the different channel ranges

Environment

As I'm working solely with the .items and .things files a had to resort to the source code to determine the parameters which were required for the network bridge, oled panels, etc... I'm running the latest version of VelbusLink (10.2.4) and the latest firmware for the VMBELO modules (2012)

Note

I've added two images, one showing the configuration, and one showing the response given by the VMBELO module (Module type + Module subtype) on a scan request. As I'm not using the scan function but instead use the .things file, I'm unaware if you actually process the subtype packet to collect the additional addresses during the scan.

2020-08-13 17h20m26s - Screenshot 001 2020-08-13 17h21m17s - Screenshot 001

MDAR commented 3 years ago

Can you please confirm than you are using binding Version - 2.5.4.202003281629 (or later) and at least openHAB2.5.x

"The VMBELO modules are configured by OpenHAB as 33"

The temperature sensor of Oled Panels is channel 33 in openHAB2 and Channel 9 for all modules that are NOT Oleds.

As shown here in PaperUI

image

The expected number of addresses for a complete VMBELO is infact 5: 1 for the module itself and the first 8 channels, 3 addresses for the next 24 channels and 1 address for the temperature controller.

This is correct and has been the case since the very first OLED panel. VMBGPO

When configuring the Thing in openHAB2, it only requires the correct Module Type and Base address, it will then populate the Thing according to the type profile (@cedricboon please correct me if I am wrong)

All Sub-Addresses that a module type requries are polled from the device, so unless you have changed them since adding the module to openHAB2, you should have the functionality of an entire glass panel, regardless of type.

The binding also queries the modules for channel names, which can help with identifying the channels you want to work with.

(the only condition is that while you can "not use" some of the sub addresses, you can not miss an allocation.

For example, Push buttons 1 to 24 can be used and you can miss push button 25-32, then use the thermostat, you can not use button1 to 16, miss 17-24, then use 25 to 32. They will function perfectly within Velbus, but openHAB2 will see them as buttons 1 to 25.)

Allow the user to enter different addresses for the different channel ranges

If you wish to do this, manually add a VMB8PBU and asign it the address you wish to reference,. This is not correct, but it does work.

As I'm working solely with the .items and .things files

This is not an ideal way to configure anything in openHAB2 any more.

Simply because there is too much room for error in the configuration of any Things. (Not just Velbus)

I would strongly advise you to allow PaperUI to create the Things from the Inbox (especially Velbus Things), then use Text based Items files, based on the Channels that the respective bindings create within each Thing.

For reference, I can confirm that the binding is working extremely well, and what you have reported is not anything I have seen during any of the testing.

I'm happy to share an example Items file that I have created that has every type of Item the whole Velbus range uses, along with Alexa and Google Metadata. This includes the 32 LED feedback channels of any OLED panel, should you wish to use them.

It can be found here --

AAA_Generic_template.items

and a ready made Velbus Bridge thing can be found here -- velbusbridge1.things

@cedricboon Please feel free to add these to your repository, or let me know how to so I can update it in the future.

fredericdepuydt commented 3 years ago

First and foremost thanks for the quick and extensive reply. I highly appreciate the work and effort Cedric and you are putting into this binding and the support of it.

Can you please confirm than you are using binding Version - 2.5.4.202003281629 (or later) and at least openHAB2.5.x

Yes I'm indeed using the latest version of the binding released the 28th of march. And I'm running OpenHAB 2.5.4 (Could probably upgrade to 2.5.7)

When configuring the Thing in openHAB2, it only requires the correct Module Type and Base address, it will then populate the Thing according to the type profile (@cedricboon please correct me if I am wrong)

I've tried this using the PaperUI to add a module and indeed the population of the internal parameters happens automatically. These are the additional properties: 2020-08-14 16h00m01s - Screenshot 001

Allow the user to enter different addresses for the different channel ranges

If you wish to do this, manually add a VMB8PBU and asign it the address you wish to reference,. This is not correct, but it does work.

I'd rather not use this alternate option as it would only make the configuration more complicated.

As I'm working solely with the .items and .things files

This is not an ideal way to configure anything in openHAB2 any more. Simply because there is too much room for error in the configuration of any Things. (Not just Velbus)

The reason I'm still using these files is for backup and redeploy purposes without requiring any user input. (But I could also switch to the dbjson files).

Alternative solution: Would it be possible to also run the populate functions on creation of a thing using the .things file? I'm not sure if this is the way to use OpenHAB2, but I assume it is as the PaperUI is an optional UI. I'm willing to dive into the code myself as I'm also interested in adding some additional functionality (VMBELO - Send raw bytes function #30).

Note: I've changed the title of the issue to better indicate this only occurs when using the .things file

MDAR commented 3 years ago

The reason I'm still using these files is for backup and redeploy purposes without requiring any user input. (But I could also switch to the dbjson files).

The built in backup & restore routines in openHAB2 do a pretty amazing job of archiving all of the text and JSON files.

Have you tried it?

openhab-cli backup --full

openhab-cli restore {path to zip}

MDAR commented 3 years ago

Alternatively, you could look into creating Things automatically by posting to the REST API. (Which is what PaperUI is doing)

For example, my PaperUI generated VMBELO Thing results in an entry in REST like this, which can be obtained with a command like this

curl -X GET --header "Accept: application/json" "http://192.168.178.42:8080/rest/things/velbus%3Avmbelo%3Ad212bf44%3A20"

Response Body

{
  "statusInfo": {
    "status": "ONLINE",
    "statusDetail": "NONE"
  },
  "editable": true,
  "label": "TV Room",
  "bridgeUID": "velbus:networkbridge:d212bf44",
  "configuration": {
    "CH19": "Loft",
    "CH18": "Dining Room",
    "CH17": "Boiler LockOut",
    "CH16": "Cabin ALL OFF",
    "CH15": "Alarm Inhibit",
    "CH14": "Cabin Lights",
    "CH13": "Cabin Bell",
    "CH12": "Building OFF",
    "CH11": "Push button 11",
    "CH33": "TV Room",
    "CH10": "Push button 10",
    "CH32": "TVO-PB32-WSafe",
    "CH31": "TVO-PB31-WNight",
    "CH30": "TVO-PB30-WComf",
    "address": "20",
    "refresh": 300,
    "CH2": "TVO-PB2-Landing",
    "CH1": "TVO-PB1-Main",
    "CH4": "TVO-PB4-Atmosph",
    "CH3": "TVO-PB3-Hallway",
    "CH6": "Calm",
    "CH5": "Bright",
    "CH8": "OFF",
    "CH29": "TVO-PB29-WDay",
    "CH7": "Dim",
    "CH28": "TVO-PB28-USafe",
    "CH27": "TVO-PB27-UNight",
    "CH9": "Green Sockets OF",
    "CH26": "TVO-PB26-UComf",
    "CH25": "TVO-PB25-Uday",
    "CH24": "TVO-PB24-DSafe",
    "CH23": "TVO-PB23-DNight",
    "CH22": "TVO-PB22-DComf",
    "CH21": "TVO-PB21-DDay",
    "CH20": "Boiler State"
  },
  "properties": {
    "serial number": "D12D",
    "memory map version": "01",
    "subaddress3": "23",
    "subaddress2": "22",
    "build": "1903",
    "subaddress1": "21",
    "subaddress4": "E8"
  },
  "UID": "velbus:vmbelo:d212bf44:20",
  "thingTypeUID": "velbus:vmbelo",
  "channels": [
    {
      "linkedItems": [
        "TVRoomGPO_Thermostat_CurrentTemperatureSetpoint"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#CURRENTTEMPERATURESETPOINT",
      "id": "thermostat#CURRENTTEMPERATURESETPOINT",
      "channelTypeUID": "velbus:temperatureSetpoint",
      "itemType": "Number:Temperature",
      "kind": "STATE",
      "label": "Current Temperature Setpoint",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_Thermostat_HeatingModeComfortTemperatureSetpoint"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#HEATINGMODECOMFORTTEMPERATURESETPOINT",
      "id": "thermostat#HEATINGMODECOMFORTTEMPERATURESETPOINT",
      "channelTypeUID": "velbus:temperatureSetpoint",
      "itemType": "Number:Temperature",
      "kind": "STATE",
      "label": "Heating Mode Comfort Temperature Setpoint",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_Thermostat_HeatingModeDayTemperatureSetpoint"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#HEATINGMODEDAYTEMPERATURESETPOINT",
      "id": "thermostat#HEATINGMODEDAYTEMPERATURESETPOINT",
      "channelTypeUID": "velbus:temperatureSetpoint",
      "itemType": "Number:Temperature",
      "kind": "STATE",
      "label": "Heating Mode Day Temperature Setpoint",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_Thermostat_HeatingModeNightTemperatureSetpoint"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#HEATINGMODENIGHTTEMPERATURESETPOINT",
      "id": "thermostat#HEATINGMODENIGHTTEMPERATURESETPOINT",
      "channelTypeUID": "velbus:temperatureSetpoint",
      "itemType": "Number:Temperature",
      "kind": "STATE",
      "label": "Heating Mode Night Temperature Setpoint",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_Thermostat_HeatingModeAntifrostTemperatureSetpoint"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#HEATINGMODEANTIFROSTTEMPERATURESETPOINT",
      "id": "thermostat#HEATINGMODEANTIFROSTTEMPERATURESETPOINT",
      "channelTypeUID": "velbus:temperatureSetpoint",
      "itemType": "Number:Temperature",
      "kind": "STATE",
      "label": "Heating Mode Antifrost Temperature Setpoint",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#COOLINGMODECOMFORTTEMPERATURESETPOINT",
      "id": "thermostat#COOLINGMODECOMFORTTEMPERATURESETPOINT",
      "channelTypeUID": "velbus:temperatureSetpoint",
      "itemType": "Number:Temperature",
      "kind": "STATE",
      "label": "Cooling Mode Comfort Temperature Setpoint",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#COOLINGMODEDAYTEMPERATURESETPOINT",
      "id": "thermostat#COOLINGMODEDAYTEMPERATURESETPOINT",
      "channelTypeUID": "velbus:temperatureSetpoint",
      "itemType": "Number:Temperature",
      "kind": "STATE",
      "label": "Cooling Mode Day Temperature Setpoint",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#COOLINGMODENIGHTTEMPERATURESETPOINT",
      "id": "thermostat#COOLINGMODENIGHTTEMPERATURESETPOINT",
      "channelTypeUID": "velbus:temperatureSetpoint",
      "itemType": "Number:Temperature",
      "kind": "STATE",
      "label": "Cooling Mode Night Temperature Setpoint",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#COOLINGMODESAFETEMPERATURESETPOINT",
      "id": "thermostat#COOLINGMODESAFETEMPERATURESETPOINT",
      "channelTypeUID": "velbus:temperatureSetpoint",
      "itemType": "Number:Temperature",
      "kind": "STATE",
      "label": "Cooling Mode Safe Temperature Setpoint",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_Thermostat_OperatingMode"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#OPERATINGMODE",
      "id": "thermostat#OPERATINGMODE",
      "channelTypeUID": "velbus:heatingOperatingMode",
      "itemType": "String",
      "kind": "STATE",
      "label": "Operating Mode",
      "description": "Operating mode (heating/cooling) for the thermostat in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_Thermostat_Mode"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#MODE",
      "id": "thermostat#MODE",
      "channelTypeUID": "velbus:heatingMode",
      "itemType": "String",
      "kind": "STATE",
      "label": "Mode",
      "description": "Mode (comfort/day/night/safe) for the thermostat in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#HEATER",
      "id": "thermostat#HEATER",
      "channelTypeUID": "velbus:thermostat-trigger-channel",
      "kind": "TRIGGER",
      "label": "Heater",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#BOOST",
      "id": "thermostat#BOOST",
      "channelTypeUID": "velbus:thermostat-trigger-channel",
      "kind": "TRIGGER",
      "label": "Boost",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#PUMP",
      "id": "thermostat#PUMP",
      "channelTypeUID": "velbus:thermostat-trigger-channel",
      "kind": "TRIGGER",
      "label": "Pump",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#COOLER",
      "id": "thermostat#COOLER",
      "channelTypeUID": "velbus:thermostat-trigger-channel",
      "kind": "TRIGGER",
      "label": "Cooler",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#ALARM1",
      "id": "thermostat#ALARM1",
      "channelTypeUID": "velbus:thermostat-trigger-channel",
      "kind": "TRIGGER",
      "label": "Alarm 1",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#ALARM2",
      "id": "thermostat#ALARM2",
      "channelTypeUID": "velbus:thermostat-trigger-channel",
      "kind": "TRIGGER",
      "label": "Alarm 2",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#ALARM3",
      "id": "thermostat#ALARM3",
      "channelTypeUID": "velbus:thermostat-trigger-channel",
      "kind": "TRIGGER",
      "label": "Alarm 3",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:thermostat#ALARM4",
      "id": "thermostat#ALARM4",
      "channelTypeUID": "velbus:thermostat-trigger-channel",
      "kind": "TRIGGER",
      "label": "Alarm 4",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM1ENABLED",
      "id": "clockAlarm#CLOCKALARM1ENABLED",
      "channelTypeUID": "velbus:switch",
      "itemType": "Switch",
      "kind": "STATE",
      "label": "Clock Alarm 1 Enabled",
      "description": "Switch control for action in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM1TYPE",
      "id": "clockAlarm#CLOCKALARM1TYPE",
      "channelTypeUID": "velbus:alarmType",
      "itemType": "String",
      "kind": "STATE",
      "label": "Clock Alarm 1 Type",
      "description": "Type (local/global) of the alarm clock in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM1WAKEUPHOUR",
      "id": "clockAlarm#CLOCKALARM1WAKEUPHOUR",
      "channelTypeUID": "velbus:hour",
      "itemType": "Number",
      "kind": "STATE",
      "label": "Clock Alarm 1 Wakeup Hour",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM1WAKEUPMINUTE",
      "id": "clockAlarm#CLOCKALARM1WAKEUPMINUTE",
      "channelTypeUID": "velbus:minute",
      "itemType": "Number",
      "kind": "STATE",
      "label": "Clock Alarm 1 Wakup Minute",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM1BEDTIMEHOUR",
      "id": "clockAlarm#CLOCKALARM1BEDTIMEHOUR",
      "channelTypeUID": "velbus:hour",
      "itemType": "Number",
      "kind": "STATE",
      "label": "Clock Alarm 1 Bedtime Hour",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM1BEDTIMEMINUTE",
      "id": "clockAlarm#CLOCKALARM1BEDTIMEMINUTE",
      "channelTypeUID": "velbus:minute",
      "itemType": "Number",
      "kind": "STATE",
      "label": "Clock Alarm 1 Bedtime Minute",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM2ENABLED",
      "id": "clockAlarm#CLOCKALARM2ENABLED",
      "channelTypeUID": "velbus:switch",
      "itemType": "Switch",
      "kind": "STATE",
      "label": "Clock Alarm 2 Enabled",
      "description": "Switch control for action in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM2TYPE",
      "id": "clockAlarm#CLOCKALARM2TYPE",
      "channelTypeUID": "velbus:alarmType",
      "itemType": "String",
      "kind": "STATE",
      "label": "Clock Alarm 2 Type",
      "description": "Type (local/global) of the alarm clock in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM2WAKEUPHOUR",
      "id": "clockAlarm#CLOCKALARM2WAKEUPHOUR",
      "channelTypeUID": "velbus:hour",
      "itemType": "Number",
      "kind": "STATE",
      "label": "Clock Alarm 2 Wakeup Hour",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM2WAKEUPMINUTE",
      "id": "clockAlarm#CLOCKALARM2WAKEUPMINUTE",
      "channelTypeUID": "velbus:minute",
      "itemType": "Number",
      "kind": "STATE",
      "label": "Clock Alarm 2 Wakeup Minute",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM2BEDTIMEHOUR",
      "id": "clockAlarm#CLOCKALARM2BEDTIMEHOUR",
      "channelTypeUID": "velbus:hour",
      "itemType": "Number",
      "kind": "STATE",
      "label": "Clock Alarm 2 Bedtime Hour",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:clockAlarm#CLOCKALARM2BEDTIMEMINUTE",
      "id": "clockAlarm#CLOCKALARM2BEDTIMEMINUTE",
      "channelTypeUID": "velbus:minute",
      "itemType": "Number",
      "kind": "STATE",
      "label": "Clock Alarm 2 Bedtime Minute",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_OledDisplay_Memo"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:oledDisplay#MEMO",
      "id": "oledDisplay#MEMO",
      "channelTypeUID": "velbus:text",
      "itemType": "String",
      "kind": "STATE",
      "label": "Memo",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:oledDisplay#SCREENSAVER",
      "id": "oledDisplay#SCREENSAVER",
      "channelTypeUID": "velbus:switch",
      "itemType": "Switch",
      "kind": "STATE",
      "label": "Screensaver",
      "description": "Switch control for action in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH1",
      "id": "input#CH1",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB1-Main",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH2",
      "id": "input#CH2",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB2-Landing",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH3",
      "id": "input#CH3",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB3-Hallway",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH4",
      "id": "input#CH4",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB4-Atmosph",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH5",
      "id": "input#CH5",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Bright",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH6",
      "id": "input#CH6",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Calm",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH7",
      "id": "input#CH7",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Dim",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH8",
      "id": "input#CH8",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "OFF",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH9",
      "id": "input#CH9",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Green Sockets OF",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH10",
      "id": "input#CH10",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Push button 10",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH11",
      "id": "input#CH11",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Push button 11",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH12",
      "id": "input#CH12",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Building OFF",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH13",
      "id": "input#CH13",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Cabin Bell",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH14",
      "id": "input#CH14",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Cabin Lights",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH15",
      "id": "input#CH15",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Alarm Inhibit",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH16",
      "id": "input#CH16",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Cabin ALL OFF",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH17",
      "id": "input#CH17",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Boiler LockOut",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH18",
      "id": "input#CH18",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Dining Room",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH19",
      "id": "input#CH19",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Loft",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH20",
      "id": "input#CH20",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "Boiler State",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH21",
      "id": "input#CH21",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB21-DDay",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH22",
      "id": "input#CH22",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB22-DComf",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH23",
      "id": "input#CH23",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB23-DNight",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH24",
      "id": "input#CH24",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB24-DSafe",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH25",
      "id": "input#CH25",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB25-Uday",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH26",
      "id": "input#CH26",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB26-UComf",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH27",
      "id": "input#CH27",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB27-UNight",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH28",
      "id": "input#CH28",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB28-USafe",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH29",
      "id": "input#CH29",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB29-WDay",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH30",
      "id": "input#CH30",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB30-WComf",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH31",
      "id": "input#CH31",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB31-WNight",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH32",
      "id": "input#CH32",
      "channelTypeUID": "velbus:trigger-channel",
      "kind": "TRIGGER",
      "label": "TVO-PB32-WSafe",
      "description": "",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_Input_TVRoom"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:input#CH33",
      "id": "input#CH33",
      "channelTypeUID": "velbus:temperature",
      "itemType": "Number:Temperature",
      "kind": "STATE",
      "label": "TV Room",
      "description": "Current temperature",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH1",
      "id": "feedback#CH1",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB1-Main",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH2",
      "id": "feedback#CH2",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB2-Landing",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH3",
      "id": "feedback#CH3",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB3-Hallway",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_Feedback_TVOPB4Atmosph"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH4",
      "id": "feedback#CH4",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB4-Atmosph",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_Feedback_Bright"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH5",
      "id": "feedback#CH5",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Bright",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [
        "TVRoomGPO_Feedback_Calm"
      ],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH6",
      "id": "feedback#CH6",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Calm",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH7",
      "id": "feedback#CH7",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Dim",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH8",
      "id": "feedback#CH8",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "OFF",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH9",
      "id": "feedback#CH9",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Green Sockets OF",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH10",
      "id": "feedback#CH10",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Push button 10",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH11",
      "id": "feedback#CH11",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Push button 11",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH12",
      "id": "feedback#CH12",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Building OFF",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH13",
      "id": "feedback#CH13",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Cabin Bell",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH14",
      "id": "feedback#CH14",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Cabin Lights",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH15",
      "id": "feedback#CH15",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Alarm Inhibit",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH16",
      "id": "feedback#CH16",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Cabin ALL OFF",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH17",
      "id": "feedback#CH17",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Boiler LockOut",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH18",
      "id": "feedback#CH18",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Dining Room",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH19",
      "id": "feedback#CH19",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Loft",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH20",
      "id": "feedback#CH20",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "Boiler State",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH21",
      "id": "feedback#CH21",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB21-DDay",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH22",
      "id": "feedback#CH22",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB22-DComf",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH23",
      "id": "feedback#CH23",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB23-DNight",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH24",
      "id": "feedback#CH24",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB24-DSafe",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH25",
      "id": "feedback#CH25",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB25-Uday",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH26",
      "id": "feedback#CH26",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB26-UComf",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH27",
      "id": "feedback#CH27",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB27-UNight",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH28",
      "id": "feedback#CH28",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB28-USafe",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH29",
      "id": "feedback#CH29",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB29-WDay",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH30",
      "id": "feedback#CH30",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB30-WComf",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH31",
      "id": "feedback#CH31",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB31-WNight",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    },
    {
      "linkedItems": [],
      "uid": "velbus:vmbelo:d212bf44:20:feedback#CH32",
      "id": "feedback#CH32",
      "channelTypeUID": "velbus:ledFeedback",
      "itemType": "String",
      "kind": "STATE",
      "label": "TVO-PB32-WSafe",
      "description": "Feedback LED for the push button in Velbus",
      "defaultTags": [],
      "properties": {},
      "configuration": {}
    }
  ],
  "location": "TV Room"
}