diff --git a/flake.lock b/flake.lock index b6f56ac..87edfee 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,27 @@ { "nodes": { + "control4-utils": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "dir": "flakes/control4-utils", + "lastModified": 1791409018, + "narHash": "sha256-Ji+isoIp+gPcPby0ClHpM3LnTwQvaYcITWRwFejR6Kg=", + "ref": "refs/heads/main", + "rev": "aaa1ef036de758e2c39833186cf2e94fd1a6812d", + "revCount": 414, + "type": "git", + "url": "ssh://git@git.c3c.cz/arnie/nix-config.git" + }, + "original": { + "dir": "flakes/control4-utils", + "type": "git", + "url": "ssh://git@git.c3c.cz/arnie/nix-config.git" + } + }, "flake-utils": { "inputs": { "systems": "systems" @@ -36,6 +58,7 @@ }, "root": { "inputs": { + "control4-utils": "control4-utils", "flake-utils": "flake-utils", "nixpkgs": "nixpkgs" } diff --git a/flake.nix b/flake.nix index 6055e06..b00be77 100644 --- a/flake.nix +++ b/flake.nix @@ -4,6 +4,10 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; + # Shared control4-utils library + # sync by running nix lock update control4-utils, then nix run .#sync-utils + control4-utils.url = "git+ssh://git@git.c3c.cz/arnie/nix-config.git?dir=flakes/control4-utils"; + control4-utils.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = @@ -11,6 +15,7 @@ self, nixpkgs, flake-utils, + control4-utils, }: let version = "0.0.1"; @@ -39,16 +44,27 @@ ''; }; - apps.default = { - type = "app"; - program = "${pkgs.writeShellScript "build-c4z" '' - set -euo pipefail - nix build - # Move the file into a predefined directory mounted in the Composer Pro environment - rm -f ../compiled/${driverName}.c4z - cp -L result/${driverName}.c4z ../compiled - echo "Built ${gitRev}: ../compiled/${driverName}.c4z" - ''}"; + apps = { + default = { + type = "app"; + program = "${pkgs.writeShellScript "build-c4z" '' + set -euo pipefail + nix build + # Move the file into a predefined directory mounted in the Composer Pro environment + rm -f ../compiled/${driverName}.c4z + cp -L result/${driverName}.c4z ../compiled + echo "Built ${gitRev}: ../compiled/${driverName}.c4z" + ''}"; + }; + + # Replace src/control4-utils with the shared copy; run from the project root + sync-utils = { + type = "app"; + program = "${pkgs.writeShellScript "sync-utils" '' + set -euo pipefail + ${control4-utils.apps.${system}.default.program} src + ''}"; + }; }; packages.default = pkgs.stdenv.mkDerivation { diff --git a/src/control4-utils/README.md b/src/control4-utils/README.md new file mode 100644 index 0000000..484fafd --- /dev/null +++ b/src/control4-utils/README.md @@ -0,0 +1,170 @@ +# control4-utils + +Lua utilities for Control4 DriverWorks drivers. Everything attaches to a single global namespace `C3C`. Modules are required indirectly through `all.lua` aggregators; the entry points are `helpers.lua`, `hooks.lua` and `knx.lua`, all of which require `base.lua` first. + +## Layout + +- `base.lua` — creates the `C3C` global table. Must be loaded first. +- `helpers.lua` / `helpers/all.lua` — loads `context`, `logging`, `strings`, `timers`. +- `hooks.lua` / `hooks/all.lua` — wraps Control4 global callbacks so multiple subscribers can hook in. +- `knx.lua` / `knx/all.lua` — KNX proxy, DPT value codecs + group-address registry built on top of `hooks` and `helpers`. +- `*/all.lua` files — aggregators that `require` their siblings. + +Modules guard with `if not C3C then ... return end` and print a load error if `base.lua` was not required first. + +## Tests + +`../tests/knx.lua` runs the knx modules under Lua 5.1 against a stubbed `C4` and fixture group addresses. Run it from the nix-config repo root with `nix flake check ./flakes/control4-utils`. + +## Function reference + +### helpers/context/Context.lua + +- `C3C.Context.Attach(parentCtx, stack?)` — shallow-copies primitive fields from a context table, seeds `start` (via `C4:GetTime()`) and appends `stack` to the `stack` chain. **L12–34** + +### helpers/logging/Logger.lua + +Driver-side logger configured by Control4 properties `Log Level` (Debug/Info/Error) and `Log Mode` (Print/Log/Print and Log/Off). Forwards to `C3C.RemoteLogger` when present. + +- `setLogLevel(level)` *(local)* — wires `log.debug/info/error` to either `noop` or `printFn` based on level. **L65–85** +- `setLoggingMode(mode)` *(local)* — wires `logFn` to `print`, `C4:ErrorLog`, both, or `noop`. **L89–112** +- `formatParams(tParams)` *(local)* — flattens a table into a `key: "value"` string; truncates strings >1000 and non-string scalars >100 chars. **L117–135** +- `C3C.Logger.DisableRemoteLogging()` — turns off forwarding to `RemoteLogger`. **L172–174** +- `C3C.Logger.Debug(s, ctx?)` — emits a debug line and (unless disabled) forwards to `RemoteLogger.Debug`. **L179–197** +- `C3C.Logger.Error(s, ctx?)` — same, error channel. **L202–220** +- `C3C.Logger.Info(s, ctx?)` — same, info channel. **L225–243** + +Side effects: registers `HookIntoOnDriverLateInit` to read properties on init (**L137–157**) and `HookIntoOnPropertyChanged` to react to property edits (**L159–169**). + +### helpers/logging/RemoteLogger.lua + +Sends logs and metrics to a remote `c3c-remote-logger` proxy on dynamic binding `100`. Encodes typed values using prefixed keys (`_cast_`, `_tag_`, `_field_`). + +- `encodeTypedPayload(payload)` *(local)* — stringifies fields, adds `_cast_` markers for non-string types. **L35–66** +- `encodeMetrics(tags, fields)` *(local)* — prefixes keys with `_tag_` / `_field_`. **L71–84** +- `sendLog(level, message, ctx)` *(local)* — builds and sends an `INSERT_LOG` payload; refuses reserved context keys. **L90–139** +- `sendMetric(metric, tags, fields)` *(local)* — builds and sends an `INSERT_METRIC` payload. **L145–186** +- `C3C.RemoteLogger.DecodeUntypedPayload(payload)` — inverse of `encodeTypedPayload`; restores numbers and booleans using `_cast_` hints. **L189–221** +- `C3C.RemoteLogger.DecodeMetrics(payload)` — splits a payload back into `{tags, fields}`. **L224–241** +- `C3C.RemoteLogger.Setup(service_identifier)` — stores the SI and creates the dynamic binding. **L243–255** +- `C3C.RemoteLogger.Debug/Info/Warn/Error(message, ctx)` — shortcut wrappers around `sendLog`. **L257–275** +- `C3C.RemoteLogger.AirSensorMetric(sensorId, location, fields, additionalTags?)` — sends an `air_sensor` metric. **L282–296** +- `C3C.RemoteLogger.StatusMetric(sensorId, kind, fields, additionalTags?)` — sends a `status` metric. **L304–318** +- `C3C.RemoteLogger.VentilationMetric(sensorId, fields, additionalTags?)` — sends a `ventilation` metric. **L324–337** + +### helpers/strings/Trim.lua + +- `Trim(s)` — strips leading/trailing whitespace; returns the trimmed string and the gsub count. **L4–7** + +### helpers/timers/OneShotTimer.lua + +Wrapper over `C4:SetTimer` for named, one-shot timers; replaces a prior timer of the same name. + +- `C3C.OneShotTimer.ClearAll()` — cancels all tracked timers. **L11–16** +- `C3C.OneShotTimer.Add(nDelay, fCallback, Name?)` — schedules a one-shot; if `Name` matches an existing timer, the previous one is cancelled. **L21–35** + +Registers `HookIntoOnDriverLateInit(ClearAll)` to wipe timers on driver re-init. **L38–42** + +### hooks/ExecuteCommand.lua + +- `C3C.HookIntoExecuteCommand(callback)` — appends a callback fired for every `ExecuteCommand(strCommand, tParams)` before the previous global handler. **L15–17** +- Global `ExecuteCommand` is replaced with a multi-dispatch version that calls all registered hooks and then the previous handler. **L19–29** + +### hooks/OnDriverLateInit.lua + +- `C3C.HookIntoOnDriverLateInit(callback)` — registers a late-init callback. **L14–16** +- Global `OnDriverLateInit` becomes a multi-dispatcher. **L18–27** + +### hooks/OnPropertyChanged.lua + +- `C3C.HookIntoOnPropertyChanged(callback)` — registers a property-change callback. **L15–17** +- Global `OnPropertyChanged` becomes a multi-dispatcher. **L19–28** + +### hooks/ReceivedFromProxy.lua + +- `C3C.HookIntoReceivedFromProxy(callback)` — registers a proxy-message callback. **L15–17** +- Global `ReceivedFromProxy` becomes a multi-dispatcher. **L19–30** + +### knx/DPT.lua + +Type-only file. Declares the `C3CKnxDPT` alias listing supported KNX Datapoint Types (`DPT_1`…`DPT_19`, `DPT_5_001`, `DPT_232`, `DPT_242_600`, `DPT_251_600`). No runtime code. + +### knx/Codec.lua + +Translates between `GroupAddress` values and KNX proxy params. A `GroupAddress.Value` is always a single number; DPTs whose proxy params span several fields store them packed, so change detection and read-responses keep working on plain numbers. + +| DPT | Value | Proxy params | +|---|---|---| +| `DPT_3` | KNX nibble `direction * 8 + step` | `DIRECTION`, `STEP_CODE` (received without it: step `0`) | +| `DPT_232` | packed `0xRRGGBB` | `R`, `G`, `B` | +| any other | as-is | `VALUE` | + +Consumers never call the codec; they build and read values with the `C3C.Knx` helpers: + +```lua +C3C.KnxAddresses.Get("Dimmer LF Study Ambient HSV"):Send(C3C.Knx.RGB(64, 224, 208)) +C3C.KnxAddresses.Get("Dimmer LF Study Primary Dimmer"):Send(C3C.Knx.DIM_UP) +C3C.KnxAddresses.Get("Dimmer LF Study Primary Dimmer"):Send(C3C.Knx.DIM_STOP) + +C3C.KnxAddresses.Watch("Dimmer LF Study Ambient HSV FB", nil, function(_, s) + local r, g, b = C3C.Knx.UnpackRGB(s.newVal) +end) +``` + +- `C3C.Knx.DIM_UP` / `DIM_DOWN` / `DIM_STOP` — `DPT_3` values `9` / `1` / `0`: start dimming up or down over the full range, or stop. **L13–18** +- `C3C.Knx.Dim(direction, step)` — `DPT_3` value from direction (`0` decrease, `1` increase) and step code (`0` stop, `1..7`). **L24–26** +- `C3C.Knx.UnpackDim(value)` — inverse of `Dim`; returns `direction, step`. **L31–33** +- `C3C.Knx.RGB(r, g, b)` — `DPT_232` value from three 0–255 components. **L40–42** +- `C3C.Knx.UnpackRGB(value)` — inverse of `RGB`; returns `r, g, b`. **L47–49** +- `C3C.KnxCodec.For(dpt)` — returns the `{ encode, decode }` codec for a DPT, falling back to the `VALUE` codec. `encode(value)` returns `SEND_TO_KNX` params; `decode(tParams)` returns the value from `DATA_FROM_KNX` params, or `nil` when a required param is missing. **L97–99** + +Adding a multi-field DPT means adding an entry to the local `codecs` table (**L63–91**) and, if consumers need it, a pack/unpack pair in `C3C.Knx`. + +### knx/Proxy.lua + +Wrapper around the KNX driver proxy binding. + +- `send(strCommand, tParams)` *(local)* — guards on `binding`, logs, and calls `C4:SendToProxy`. **L9–26** +- `C3C.KnxProxy.Setup(bindingId)` — stores the proxy binding id. **L30–32** +- `C3C.KnxProxy.AddGroupAddress(ga)` — sends `ADD_GROUP_ITEM` for a `GroupAddress`. **L35–42** +- `C3C.KnxProxy.ClearGroupAddresses()` — sends `CLEAR_GROUP_ITEMS` for this device. **L44–46** +- `C3C.KnxProxy.Send(dpt, groupAddress, value)` — sends `SEND_TO_KNX` for the given DPT/GA, with value params built by `C3C.KnxCodec`. **L51–57** +- `C3C.KnxProxy.Read(groupAddress)` — sends `REQUEST_STATUS` for a GA. **L60–65** + +### knx/GroupAddress.lua + +Group-address class and a registry that watches addresses, dispatches receive/change callbacks, and answers KNX read requests when configured. + +- `C3C.KnxGroupAddress(name, ga, dpt)` — constructor returning a `GroupAddress` instance. **L12–57** + - `:Read()` — issues a `KnxProxy.Read`; throttles to one read per 10s per GA via `OneShotTimer`. **L28–39** + - `:Send(v)` — stores value and forwards via `KnxProxy.Send`. **L42–45** + - `:RespondToRead()` — marks this GA as auto-responding and registers it for watching. **L47–50** + - `:isResponding()` — returns the responding flag. **L52–54** +- `registerGAs()` *(local)* — clears proxy group items then re-adds all watched GAs after a 3s debounce. **L80–89** +- `C3C.KnxAddresses.Get(n)` — fetches a `GroupAddress` by name (logs on miss). **L95–103** +- `C3C.KnxAddresses.GetByGA(ga)` — fetches a `GroupAddress` by address string, or `nil`. **L108–110** +- `C3C.KnxAddresses.Watch(n, onValueReceive?, onValueChange?)` — adds a GA to the watched set and registers optional receive/change callbacks; re-registers via debounced `OneShotTimer` if already initialised. **L115–147** +- `C3C.KnxAddresses.UnWatch(n)` — removes a GA from the watched set and clears its callbacks; debounced re-register. **L150–161** +- `HookIntoOnDriverLateInit` callback — calls `registerGAs()` once dependencies are present. **L164–174** +- `HookIntoExecuteCommand` callback — handles `KNX_READ_REQUEST` (auto-responds with cached value if `isResponding`) and `DATA_FROM_KNX` (updates `Value`, fires `onReceive` and, on change, `onChanged` callbacks); the value is decoded by `C3C.KnxCodec`, and undecodable params are logged as an error with the raw params. **L176–247** + +### knx/gen/ + +Generated from `knx/group_addresses.csv` (ETS group address export) — do not edit by hand. Regenerate from the nix-config repo root with `nix run .#generate-knx` (source: `scripts/knx-group-address-gen.py`). + +### knx/gen/ADDRESSES.lua + +Type-only file. Declares the `C3CKnxGroupAddressName` union plus the per-category sub-aliases used by `KnxGroupAddress`/`KnxAddresses` for autocompletion: + +- `C3CKnxGroupAddressNameControl` — presence/control GAs (**L11–21**) +- `C3CKnxGroupAddressNameDimmer` — dimmers, RGB/HSV, feedbacks (**L23–360**) +- `C3CKnxGroupAddressNameHeat` — heating sensors and circulation (**L362–398**) +- `C3CKnxGroupAddressNameMedia` — bathroom media controls (**L400–407**) +- `C3CKnxGroupAddressNameOther` — entry/exit/presence/date/time/LED (**L409–421**) +- `C3CKnxGroupAddressNameScene` — KNX scenes per room (**L423–445**) +- `C3CKnxGroupAddressNameSwitch` — every switch + feedback GA (**L447–800**) +- `C3CKnxGroupAddressNameVent` — ventilation valves, CO2/humidity sensors, preset state (**L802–913**) + +### knx/gen/createGroupAddresses.lua + +- `C3CKnxCreateGroupAddresses()` — generated factory; returns the full list of `GroupAddress` instances by calling `C3C.KnxGroupAddress(name, ga, dpt)` for each address declared in `ADDRESSES.lua`. Consumed once by `GroupAddress.lua` to populate the named/addressed registries. **L2–626** diff --git a/src/control4-utils/knx/Codec.lua b/src/control4-utils/knx/Codec.lua new file mode 100644 index 0000000..2497899 --- /dev/null +++ b/src/control4-utils/knx/Codec.lua @@ -0,0 +1,101 @@ +---@class C3CKnxCodec +---@field encode fun(value: number): table SEND_TO_KNX params for a GroupAddress value +---@field decode fun(tParams: table): number|nil GroupAddress value from DATA_FROM_KNX params + +do + if not C3C then + print("Control4Utils: ERROR LOADING src.knx.Codec, src/base.lua must be required first") + return + end + + ---Helpers building and reading the packed numbers used as GroupAddress values + C3C.Knx = { + ---DPT_3: start dimming up over the full range + DIM_UP = 9, + ---DPT_3: start dimming down over the full range + DIM_DOWN = 1, + ---DPT_3: stop dimming + DIM_STOP = 0, + + ---DPT_3 value (KNX nibble) from a direction and step code + ---@param direction 0|1 0 = decrease, 1 = increase + ---@param step integer 0 = stop, 1..7 = 100%..1.5% steps + ---@return number + Dim = function(direction, step) + return direction * 8 + step + end, + + ---Split a DPT_3 value into direction and step code + ---@param value number + ---@return integer direction, integer step + UnpackDim = function(value) + return math.floor(value / 8) % 2, value % 8 + end, + + ---DPT_232 value (packed 0xRRGGBB) from red, green and blue, 0-255 each + ---@param r integer + ---@param g integer + ---@param b integer + ---@return number + RGB = function(r, g, b) + return r * 65536 + g * 256 + b + end, + + ---Split a DPT_232 value into red, green and blue + ---@param value number + ---@return integer r, integer g, integer b + UnpackRGB = function(value) + return math.floor(value / 65536) % 256, math.floor(value / 256) % 256, value % 256 + end, + } + + ---@type C3CKnxCodec + local default = { + encode = function(value) + return { VALUE = value } + end, + decode = function(tParams) + return tonumber(tParams["VALUE"]) + end, + } + + ---@type {[C3CKnxDPT]: C3CKnxCodec} + local codecs = { + DPT_3 = { + encode = function(value) + local direction, step = C3C.Knx.UnpackDim(value) + return { DIRECTION = direction, STEP_CODE = step } + end, + decode = function(tParams) + local direction, step = tonumber(tParams["DIRECTION"]), tonumber(tParams["STEP_CODE"] or 0) + if direction == nil or step == nil then + return nil + end + return C3C.Knx.Dim(direction, step) + end, + }, + + DPT_232 = { + encode = function(value) + local r, g, b = C3C.Knx.UnpackRGB(value) + return { R = r, G = g, B = b } + end, + decode = function(tParams) + local r, g, b = tonumber(tParams["R"]), tonumber(tParams["G"]), tonumber(tParams["B"]) + if r == nil or g == nil or b == nil then + return nil + end + return C3C.Knx.RGB(r, g, b) + end, + }, + } + + C3C.KnxCodec = { + ---Codec translating between GroupAddress values and KNX proxy params + ---@param dpt C3CKnxDPT + ---@return C3CKnxCodec + For = function(dpt) + return codecs[dpt] or default + end, + } +end diff --git a/src/control4-utils/knx/GroupAddress.lua b/src/control4-utils/knx/GroupAddress.lua index 4658103..97c3d50 100644 --- a/src/control4-utils/knx/GroupAddress.lua +++ b/src/control4-utils/knx/GroupAddress.lua @@ -219,17 +219,13 @@ do return end - local value = nil - - if addr.DPT == "DPT_3" then - value = tonumber(tParams["DIRECTION"]) - else - value = tonumber(tParams["VALUE"]) - end + local value = C3C.KnxCodec.For(addr.DPT).decode(tParams) if value == nil then C3C.Logger.Error("received invalid data from DATA_FROM_KNX, value is nil", { groupAddress = groupAddress, + dpt = addr.DPT, + params = tParams, }) return end diff --git a/src/control4-utils/knx/Proxy.lua b/src/control4-utils/knx/Proxy.lua index c68fe48..c7fbc70 100644 --- a/src/control4-utils/knx/Proxy.lua +++ b/src/control4-utils/knx/Proxy.lua @@ -49,19 +49,10 @@ do ---@param groupAddress string ---@param value number Send = function(dpt, groupAddress, value) - local tParams = {} + local tParams = C3C.KnxCodec.For(dpt).encode(value) tParams.DATA_POINT_TYPE = dpt tParams.GROUP_ADDRESS = groupAddress - if dpt == "DPT_232" then - local hex = string.format("%06x", value) - tParams.R = tonumber(hex:sub(1,2), 16) - tParams.G = tonumber(hex:sub(3,4), 16) - tParams.B = tonumber(hex:sub(5,6), 16) - else - tParams.VALUE = value - end - send("SEND_TO_KNX", tParams) end, diff --git a/src/control4-utils/knx/all.lua b/src/control4-utils/knx/all.lua index b151b3f..2302775 100644 --- a/src/control4-utils/knx/all.lua +++ b/src/control4-utils/knx/all.lua @@ -1,6 +1,7 @@ local dirRequire = (...):match("(.-)[^%.%/]+$") require(dirRequire .. "DPT") +require(dirRequire .. "Codec") require(dirRequire .. "gen.ADDRESSES") require(dirRequire .. "gen.createGroupAddresses") require(dirRequire .. "GroupAddress") diff --git a/src/control4-utils/knx/gen/ADDRESSES.lua b/src/control4-utils/knx/gen/ADDRESSES.lua index 092cf9a..1bb554a 100644 --- a/src/control4-utils/knx/gen/ADDRESSES.lua +++ b/src/control4-utils/knx/gen/ADDRESSES.lua @@ -11,7 +11,6 @@ ---@alias C3CKnxGroupAddressNameControl ---|"Control LF Hallway Presence" ---|"Control LF Hallway Presence Enable" ----|"Control LF Hallway Presence Enable Workaround" ---|"Control LF Hallway Presence End" ---|"Control LF Hallway Presence Alarm" ---|"Control LF Hallway Presence Alarm State" @@ -48,9 +47,7 @@ ---|"Dimmer LF Bathroom Ambient FB" --- Bathroom Ambient ---|"Dimmer LF Bathroom Ambient Dimmer" ---- HAS UNKNOWN DPT ---|"Dimmer LF Bathroom Ambient HSV" ---- HAS UNKNOWN DPT ---|"Dimmer LF Bathroom Ambient HSV FB" --- HAS UNKNOWN DPT ---|"Dimmer LF Bathroom Ambient Hue Dimming" @@ -91,9 +88,7 @@ ---|"Dimmer LF Bedroom 1 Ambient FB" --- Bedroom 1 Ambient ---|"Dimmer LF Bedroom 1 Ambient Dimmer" ---- HAS UNKNOWN DPT ---|"Dimmer LF Bedroom 1 Ambient HSV" ---- HAS UNKNOWN DPT ---|"Dimmer LF Bedroom 1 Ambient HSV FB" --- HAS UNKNOWN DPT ---|"Dimmer LF Bedroom 1 Ambient Hue Dimming" @@ -116,9 +111,7 @@ ---|"Dimmer LF Study Ambient FB" --- Study Ambient ---|"Dimmer LF Study Ambient Dimmer" ---- HAS UNKNOWN DPT ---|"Dimmer LF Study Ambient HSV" ---- HAS UNKNOWN DPT ---|"Dimmer LF Study Ambient HSV FB" --- HAS UNKNOWN DPT ---|"Dimmer LF Study Ambient Hue Dimming" @@ -141,9 +134,7 @@ ---|"Dimmer LF Bedroom 2 Ambient FB" --- Bedroom 2 Ambient ---|"Dimmer LF Bedroom 2 Ambient Dimmer" ---- HAS UNKNOWN DPT ---|"Dimmer LF Bedroom 2 Ambient HSV" ---- HAS UNKNOWN DPT ---|"Dimmer LF Bedroom 2 Ambient HSV FB" --- HAS UNKNOWN DPT ---|"Dimmer LF Bedroom 2 Ambient Hue Dimming" @@ -185,9 +176,7 @@ ---|"Dimmer UF Bathroom Ambient FB" --- Bathroom Ambient ---|"Dimmer UF Bathroom Ambient Dimming" ---- HAS UNKNOWN DPT ---|"Dimmer UF Bathroom Ambient HSV" ---- HAS UNKNOWN DPT ---|"Dimmer UF Bathroom Ambient HSV FB" ---|"Dimmer UF Bathroom Ambient Hue Dimming" ---|"Dimmer UF Bathroom Ambient Saturation Dimming" @@ -216,9 +205,7 @@ ---|"Dimmer UF Bedroom Ambient FB" --- Bedroom Ambient ---|"Dimmer UF Bedroom Ambient Dimming" ---- HAS UNKNOWN DPT ---|"Dimmer UF Bedroom Ambient HSV" ---- HAS UNKNOWN DPT ---|"Dimmer UF Bedroom Ambient HSV FB" --- HAS UNKNOWN DPT ---|"Dimmer UF Bedroom Ambient Hue Dimming" @@ -251,9 +238,7 @@ ---|"Dimmer UF Living room Ambient FB" --- Living room Ambient ---|"Dimmer UF Living room Ambient Dimming" ---- HAS UNKNOWN DPT ---|"Dimmer UF Living room Ambient HSV" ---- HAS UNKNOWN DPT ---|"Dimmer UF Living room Ambient HSV FB" --- Living room Ambient ---|"Dimmer UF Living room Ambient Hue Dimming" @@ -295,9 +280,7 @@ --- Kitchen Ambient --- HAS UNKNOWN DPT ---|"Dimmer UF Kitchen Ambient Dimming" ---- HAS UNKNOWN DPT ---|"Dimmer UF Kitchen Ambient HSV" ---- HAS UNKNOWN DPT ---|"Dimmer UF Kitchen Ambient HSV FB" --- HAS UNKNOWN DPT ---|"Dimmer UF Kitchen Ambient Hue Dimming" @@ -399,6 +382,7 @@ ---|"Heat Hot Water Circulation State" ---|"Heat Hot Water Circulation Emergency State" ---|"Heat Hot Water Circulation Control Value" +---|"Heat Hot Water Circulation Control Lock" --- Heating = 1 --- Cooling = 0 ---|"Heat Heating-Cooling" @@ -802,6 +786,8 @@ ---|"Switch EXT Entrance" --- 20_Exterior Entrance ---|"Switch EXT Entrance FB" +---|"Switch EXT Retention tank pump" +---|"Switch EXT Retention tank pump State" --- Parking place Primary ---|"Switch Parking place" --- Parking place Primary @@ -902,6 +888,9 @@ ---|"Vent Filter: Replace" ---|"Vent Heating-Cooling" ---|"Vent Heating-Cooling State" +---|"Vent Passive A/C Pump" +---|"Vent Passive A/C Pump State" +---|"Vent Passive A/C Pump Lock" ---|"Vent Boost" ---|"Vent Boost FB" ---|"Vent Auto mode" diff --git a/src/control4-utils/knx/gen/createGroupAddresses.lua b/src/control4-utils/knx/gen/createGroupAddresses.lua index b039952..d4622e2 100644 --- a/src/control4-utils/knx/gen/createGroupAddresses.lua +++ b/src/control4-utils/knx/gen/createGroupAddresses.lua @@ -275,6 +275,8 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Switch EXT Terrace FB", "1/3/7", "DPT_1"), C3C.KnxGroupAddress("Switch EXT Entrance", "1/3/20", "DPT_1"), C3C.KnxGroupAddress("Switch EXT Entrance FB", "1/3/27", "DPT_1"), + C3C.KnxGroupAddress("Switch EXT Retention tank pump", "1/3/240", "DPT_1"), + C3C.KnxGroupAddress("Switch EXT Retention tank pump State", "1/3/241", "DPT_1"), C3C.KnxGroupAddress("Switch Parking place", "1/4/0", "DPT_1"), C3C.KnxGroupAddress("Switch Parking place FB", "1/4/7", "DPT_1"), C3C.KnxGroupAddress("Switch Parking place AC Plug Right of Door", "1/4/10", "DPT_1"), @@ -298,8 +300,8 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Dimmer LF Bathroom Ambient", "2/0/35", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bathroom Ambient FB", "2/0/36", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bathroom Ambient Dimmer", "2/0/37", "DPT_3"), - C3C.KnxGroupAddress("Dimmer LF Bathroom Ambient HSV", "2/0/40", "DPT_1"), - C3C.KnxGroupAddress("Dimmer LF Bathroom Ambient HSV FB", "2/0/41", "DPT_1"), + C3C.KnxGroupAddress("Dimmer LF Bathroom Ambient HSV", "2/0/40", "DPT_232"), + C3C.KnxGroupAddress("Dimmer LF Bathroom Ambient HSV FB", "2/0/41", "DPT_232"), C3C.KnxGroupAddress("Dimmer LF Bathroom Ambient Hue Dimming", "2/0/42", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bathroom Ambient Saturation Dimming", "2/0/43", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bathroom Vanity", "2/0/50", "DPT_5"), @@ -323,8 +325,8 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Dimmer LF Bedroom 1 Ambient", "2/0/105", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bedroom 1 Ambient FB", "2/0/106", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bedroom 1 Ambient Dimmer", "2/0/107", "DPT_3"), - C3C.KnxGroupAddress("Dimmer LF Bedroom 1 Ambient HSV", "2/0/110", "DPT_1"), - C3C.KnxGroupAddress("Dimmer LF Bedroom 1 Ambient HSV FB", "2/0/111", "DPT_1"), + C3C.KnxGroupAddress("Dimmer LF Bedroom 1 Ambient HSV", "2/0/110", "DPT_232"), + C3C.KnxGroupAddress("Dimmer LF Bedroom 1 Ambient HSV FB", "2/0/111", "DPT_232"), C3C.KnxGroupAddress("Dimmer LF Bedroom 1 Ambient Hue Dimming", "2/0/112", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bedroom 1 Ambient Saturation Dimming", "2/0/113", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Study Primary", "2/0/140", "DPT_5"), @@ -336,8 +338,8 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Dimmer LF Study Ambient", "2/0/155", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Study Ambient FB", "2/0/156", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Study Ambient Dimmer", "2/0/157", "DPT_3"), - C3C.KnxGroupAddress("Dimmer LF Study Ambient HSV", "2/0/160", "DPT_1"), - C3C.KnxGroupAddress("Dimmer LF Study Ambient HSV FB", "2/0/161", "DPT_1"), + C3C.KnxGroupAddress("Dimmer LF Study Ambient HSV", "2/0/160", "DPT_232"), + C3C.KnxGroupAddress("Dimmer LF Study Ambient HSV FB", "2/0/161", "DPT_232"), C3C.KnxGroupAddress("Dimmer LF Study Ambient Hue Dimming", "2/0/162", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Study Ambient Saturation Dimming", "2/0/163", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bedroom 2 Primary", "2/0/190", "DPT_5"), @@ -349,8 +351,8 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Dimmer LF Bedroom 2 Ambient", "2/0/205", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bedroom 2 Ambient FB", "2/0/206", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bedroom 2 Ambient Dimmer", "2/0/207", "DPT_3"), - C3C.KnxGroupAddress("Dimmer LF Bedroom 2 Ambient HSV", "2/0/210", "DPT_1"), - C3C.KnxGroupAddress("Dimmer LF Bedroom 2 Ambient HSV FB", "2/0/211", "DPT_1"), + C3C.KnxGroupAddress("Dimmer LF Bedroom 2 Ambient HSV", "2/0/210", "DPT_232"), + C3C.KnxGroupAddress("Dimmer LF Bedroom 2 Ambient HSV FB", "2/0/211", "DPT_232"), C3C.KnxGroupAddress("Dimmer LF Bedroom 2 Ambient Hue Dimming", "2/0/212", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Bedroom 2 Ambient Saturation Dimming", "2/0/213", "DPT_1"), C3C.KnxGroupAddress("Dimmer LF Utility", "2/0/225", "DPT_5"), @@ -393,8 +395,8 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Dimmer UF Bedroom Ambient", "2/1/80", "DPT_1"), C3C.KnxGroupAddress("Dimmer UF Bedroom Ambient FB", "2/1/81", "DPT_1"), C3C.KnxGroupAddress("Dimmer UF Bedroom Ambient Dimming", "2/1/82", "DPT_3"), - C3C.KnxGroupAddress("Dimmer UF Bedroom Ambient HSV", "2/1/85", "DPT_1"), - C3C.KnxGroupAddress("Dimmer UF Bedroom Ambient HSV FB", "2/1/86", "DPT_1"), + C3C.KnxGroupAddress("Dimmer UF Bedroom Ambient HSV", "2/1/85", "DPT_232"), + C3C.KnxGroupAddress("Dimmer UF Bedroom Ambient HSV FB", "2/1/86", "DPT_232"), C3C.KnxGroupAddress("Dimmer UF Bedroom Ambient Hue Dimming", "2/1/87", "DPT_1"), C3C.KnxGroupAddress("Dimmer UF Bedroom Ambient Saturation Dimming", "2/1/88", "DPT_1"), C3C.KnxGroupAddress("Dimmer UF Closet", "2/1/95", "DPT_5"), @@ -412,8 +414,8 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Dimmer UF Living room Ambient", "2/1/120", "DPT_5"), C3C.KnxGroupAddress("Dimmer UF Living room Ambient FB", "2/1/121", "DPT_5"), C3C.KnxGroupAddress("Dimmer UF Living room Ambient Dimming", "2/1/122", "DPT_3"), - C3C.KnxGroupAddress("Dimmer UF Living room Ambient HSV", "2/1/125", "DPT_1"), - C3C.KnxGroupAddress("Dimmer UF Living room Ambient HSV FB", "2/1/126", "DPT_1"), + C3C.KnxGroupAddress("Dimmer UF Living room Ambient HSV", "2/1/125", "DPT_232"), + C3C.KnxGroupAddress("Dimmer UF Living room Ambient HSV FB", "2/1/126", "DPT_232"), C3C.KnxGroupAddress("Dimmer UF Living room Ambient Hue Dimming", "2/1/127", "DPT_3"), C3C.KnxGroupAddress("Dimmer UF Living room Ambient Saturation Dimming", "2/1/128", "DPT_3"), C3C.KnxGroupAddress("Dimmer UF Office Primary", "2/1/135", "DPT_5"), @@ -437,8 +439,8 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Dimmer UF Kitchen Ambient", "2/1/180", "DPT_1"), C3C.KnxGroupAddress("Dimmer UF Kitchen Ambient FB", "2/1/181", "DPT_1"), C3C.KnxGroupAddress("Dimmer UF Kitchen Ambient Dimming", "2/1/182", "DPT_1"), - C3C.KnxGroupAddress("Dimmer UF Kitchen Ambient HSV", "2/1/185", "DPT_1"), - C3C.KnxGroupAddress("Dimmer UF Kitchen Ambient HSV FB", "2/1/186", "DPT_1"), + C3C.KnxGroupAddress("Dimmer UF Kitchen Ambient HSV", "2/1/185", "DPT_232"), + C3C.KnxGroupAddress("Dimmer UF Kitchen Ambient HSV FB", "2/1/186", "DPT_232"), C3C.KnxGroupAddress("Dimmer UF Kitchen Ambient Hue Dimming", "2/1/187", "DPT_1"), C3C.KnxGroupAddress("Dimmer UF Kitchen Ambient Saturation Dimming", "2/1/188", "DPT_1"), C3C.KnxGroupAddress("Dimmer UF Kitchen Counter", "2/1/195", "DPT_5"), @@ -492,6 +494,7 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Heat Hot Water Circulation State", "3/6/2", "DPT_1"), C3C.KnxGroupAddress("Heat Hot Water Circulation Emergency State", "3/6/3", "DPT_1"), C3C.KnxGroupAddress("Heat Hot Water Circulation Control Value", "3/6/4", "DPT_5"), + C3C.KnxGroupAddress("Heat Hot Water Circulation Control Lock", "3/6/5", "DPT_1"), C3C.KnxGroupAddress("Heat Heating-Cooling", "3/7/0", "DPT_1"), C3C.KnxGroupAddress("Heat Heating-Cooling State", "3/7/1", "DPT_1"), C3C.KnxGroupAddress("Heat Temperature Setpoint", "3/7/2", "DPT_1"), @@ -579,6 +582,9 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Vent Filter: Replace", "4/7/26", "DPT_1"), C3C.KnxGroupAddress("Vent Heating-Cooling", "4/7/30", "DPT_1"), C3C.KnxGroupAddress("Vent Heating-Cooling State", "4/7/31", "DPT_1"), + C3C.KnxGroupAddress("Vent Passive A/C Pump", "4/7/35", "DPT_1"), + C3C.KnxGroupAddress("Vent Passive A/C Pump State", "4/7/36", "DPT_1"), + C3C.KnxGroupAddress("Vent Passive A/C Pump Lock", "4/7/37", "DPT_1"), C3C.KnxGroupAddress("Vent Boost", "4/7/100", "DPT_1"), C3C.KnxGroupAddress("Vent Boost FB", "4/7/101", "DPT_1"), C3C.KnxGroupAddress("Vent Auto mode", "4/7/102", "DPT_1"), @@ -608,7 +614,6 @@ function C3CKnxCreateGroupAddresses() C3C.KnxGroupAddress("Media UF Bathroom Preset Cycle Forward", "5/1/107", "DPT_1"), C3C.KnxGroupAddress("Control LF Hallway Presence", "6/0/0", "DPT_1"), C3C.KnxGroupAddress("Control LF Hallway Presence Enable", "6/0/1", "DPT_1"), - C3C.KnxGroupAddress("Control LF Hallway Presence Enable Workaround", "6/0/2", "DPT_3"), C3C.KnxGroupAddress("Control LF Hallway Presence End", "6/0/5", "DPT_1"), C3C.KnxGroupAddress("Control LF Hallway Presence Alarm", "6/0/10", "DPT_1"), C3C.KnxGroupAddress("Control LF Hallway Presence Alarm State", "6/0/11", "DPT_1"), diff --git a/src/control4-utils/knx/group_addresses.csv b/src/control4-utils/knx/group_addresses.csv new file mode 100644 index 0000000..92e34d5 --- /dev/null +++ b/src/control4-utils/knx/group_addresses.csv @@ -0,0 +1,659 @@ +"Group name","Address","Central","Unfiltered","Description","DatapointType","Security" +"Central","0/-/-","","","","","Auto" +"Functions","0/0/-","","","","","Auto" +"Entry","0/0/1","","","","DPST-1-1","Auto" +"Exit","0/0/2","","","","DPST-1-1","Auto" +"Present","0/0/3","","","","DPST-1-11","Auto" +"UF Bathroom Exit","0/0/50","","","","DPST-1-1","Auto" +"LF Bathroom Exit","0/0/100","","","","DPST-1-1","Auto" +"States","0/1/-","","","","","Auto" +"Day/Night","0/1/0","","","Day = 0 +Night = 1","DPST-1-2","Auto" +"Date","0/1/1","","","","DPST-11-1","Auto" +"Time","0/1/2","","","","DPST-10-1","Auto" +"Led Intensity","0/1/100","","","","DPST-5-1","Auto" +"Retention Tank Water Level Low","0/1/200","","","","DPST-1-1","Auto" +"Scenes","0/2/-","","","","","Auto" +"Lower Floor","0/2/100","","","","DPST-17-1","Auto" +"Lower Floor Hallway","0/2/101","","","","DPST-17-1","Auto" +"Lower Floor Bathroom","0/2/102","","","","DPST-17-1","Auto" +"Lower Floor Laundry","0/2/103","","","","DPST-17-1","Auto" +"Lower Floor Bedroom 1","0/2/104","","","","DPST-17-1","Auto" +"Lower Floor Study","0/2/105","","","","DPST-17-1","Auto" +"Lower Floor Bedroom 2","0/2/106","","","","DPST-17-1","Auto" +"Lower Floor Technical Room","0/2/107","","","","DPST-17-1","Auto" +"Upper Floor","0/2/150","","","","DPST-17-1","Auto" +"Upper Floor Hallway","0/2/151","","","","DPST-17-1","Auto" +"Upper Floor Bathroom","0/2/152","","","","DPST-17-1","Auto" +"Upper Floor Bedroom","0/2/153","","","","DPST-17-1","Auto" +"Upper Floor Closet","0/2/154","","","","DPST-17-1","Auto" +"Upper Floor Living Room","0/2/155","","","","DPST-17-1","Auto" +"Upper Floor Office","0/2/156","","","","DPST-17-1","Auto" +"Upper Floor Dining Room","0/2/157","","","","DPST-17-1","Auto" +"Upper Floor Kitchen","0/2/158","","","","DPST-17-1","Auto" +"Upper Floor Pantry","0/2/159","","","","DPST-17-1","Auto" +"Staircase","0/2/200","","","","DPST-17-1","Auto" +"Swimming Pool","0/2/210","true","","","DPST-17-1","Auto" +"Ventilation Valves","0/2/220","","","","DPST-17-1","Auto" +"Ventilation Work","0/2/221","","","","DPST-1-1","Auto" +"Switching","1/-/-","","","","","Auto" +"Lower Floor","1/0/-","","","","","Auto" +"Hallway","1/0/0","","","Hallway Primary","DPST-1-1","Auto" +"Hallway CTRL","1/0/1","","","Hallway Under staircase","DPST-1-1","Auto" +"Hallway Light 1","1/0/2","","","Hallway Primary","DPST-1-1","Auto" +"Hallway Light 2","1/0/3","","","Hallway Primary","DPST-1-1","Auto" +"Hallway Light Below staircase","1/0/4","","","Hallway Under staircase","DPST-1-1","Auto" +"Hallway FB","1/0/7","","","Hallway Primary","DPST-1-11","Auto" +"Hallway CTRL FB","1/0/8","","","Hallway Under staircase","DPST-1-11","Auto" +"Hallway Light 1 FB","1/0/9","","","Hallway Primary","DPST-1-11","Auto" +"Hallway Light 2 FB","1/0/10","","","Hallway Primary","DPST-1-11","Auto" +"Hallway Light Below staircase FB","1/0/11","","","Hallway Under staircase","DPST-1-11","Auto" +"Bathroom Primary","1/0/20","","","Bathroom Primary","DPST-1-1","Auto" +"Bathroom Primary CTRL","1/0/21","","","Bathroom Vanity","DPST-1-1","Auto" +"Bathroom Primary Light 1","1/0/22","","","Bathroom Primary","DPST-1-1","Auto" +"Bathroom Primary Light 2","1/0/23","","","Bathroom Primary","DPST-1-1","Auto" +"Bathroom Primary Light Vanity","1/0/24","","","Bathroom Vanity","DPST-1-1","Auto" +"Bathroom Primary Ceiling","1/0/25","","","","DPST-1-1","Auto" +"Bathroom Primary FB","1/0/27","","","Bathroom Primary","DPST-1-11","Auto" +"Bathroom Primary CTRL FB","1/0/28","","","Bathroom Vanity","DPST-1-11","Auto" +"Bathroom Primary Light 1 FB","1/0/29","","","Bathroom Primary","DPST-1-11","Auto" +"Bathroom Primary Light 2 FB","1/0/30","","","Bathroom Primary","DPST-1-11","Auto" +"Bathroom Primary Light Vanity FB","1/0/31","","","Bathroom Vanity","DPST-1-11","Auto" +"Bathroom Ambient","1/0/35","","","Bathroom Ambient","DPST-1-1","Auto" +"Bathroom Ambient CTRL","1/0/36","","","Bathroom Ambient","DPST-1-1","Auto" +"Bathroom Ambient Light 1","1/0/37","","","Bathroom Ambient","DPST-1-1","Auto" +"Bathroom Ambient Light 2","1/0/38","","","Bathroom Ambient","DPST-1-1","Auto" +"Bathroom Ambient Toilet","1/0/39","","","Bathroom Ambient","DPST-1-1","Auto" +"Bathroom Ambient FB","1/0/42","","","Bathroom Ambient","DPST-1-11","Auto" +"Bathroom Ambient CTRL FB","1/0/43","","","Bathroom Ambient","DPST-1-11","Auto" +"Bathroom Ambient Light 1 FB","1/0/44","","","Bathroom Ambient","DPST-1-11","Auto" +"Bathroom Ambient Light 2 FB","1/0/45","","","Bathroom Ambient","DPST-1-11","Auto" +"Bathroom Ambient Toilet FB","1/0/46","","","Bathroom Ambient","DPST-1-11","Auto" +"Laundry Primary","1/0/70","","","Laundry Primary","DPST-1-1","Auto" +"Laundry Primary CTRL","1/0/71","","","Laundry Primary","DPST-1-1","Auto" +"Laundry Primary Light 1","1/0/72","","","Laundry Primary","DPST-1-1","Auto" +"Laundry Primary Light 2","1/0/73","","","Laundry Primary","DPST-1-1","Auto" +"Laundry Primary FB","1/0/77","","","Laundry Primary","DPST-1-11","Auto" +"Laundry Primary CTRL FB","1/0/78","","","Laundry Primary","DPST-1-11","Auto" +"Laundry Primary Light 1 FB","1/0/79","","","Laundry Primary","DPST-1-11","Auto" +"Laundry Primary Light 2 FB","1/0/80","","","Laundry Primary","DPST-1-11","Auto" +"Bedroom 1 Primary","1/0/90","","","Bedroom 1 Primary","DPST-1-1","Auto" +"Bedroom 1 Primary CTRL","1/0/91","","","Bedroom 1 Reading light","DPST-1-1","Auto" +"Bedroom 1 Primary Light 1","1/0/92","","","Bedroom 1 Primary","DPST-1-1","Auto" +"Bedroom 1 Primary Light 2","1/0/93","","","Bedroom 1 Primary","DPST-1-1","Auto" +"Bedroom 1 Primary Light Reading","1/0/94","","","Bedroom 1 Reading light","DPST-1-1","Auto" +"Bedroom 1 Primary FB","1/0/97","","","Bedroom 1 Primary","DPST-1-11","Auto" +"Bedroom 1 Primary CTRL FB","1/0/98","","","","DPST-1-11","Auto" +"Bedroom 1 Primary Light 1 FB","1/0/99","","","Bedroom 1 Primary","DPST-1-11","Auto" +"Bedroom 1 Primary Light 2 FB","1/0/100","","","Bedroom 1 Primary","DPST-1-11","Auto" +"Bedroom 1 Primary Light Reading FB","1/0/101","","","Bedroom 1 Reading light","DPST-1-11","Auto" +"Bedroom 1 Ambient","1/0/105","","","Bedroom 1 Ambient","DPST-1-1","Auto" +"Bedroom 1 Ambient CTRL","1/0/106","","","Bedroom 1 Ambient","DPST-1-1","Auto" +"Bedroom 1 Ambient Light 1","1/0/107","","","Bedroom 1 Ambient","DPST-1-1","Auto" +"Bedroom 1 Ambient Light 2","1/0/108","","","Bedroom 1 Ambient","DPST-1-1","Auto" +"Bedroom 1 Ambient FB","1/0/112","","","Bedroom 1 Ambient","DPST-1-11","Auto" +"Bedroom 1 Ambient CTRL FB","1/0/113","","","Bedroom 1 Ambient","DPST-1-11","Auto" +"Bedroom 1 Ambient Light 1 FB","1/0/114","","","Bedroom 1 Ambient","DPST-1-11","Auto" +"Bedroom 1 Ambient Light 2 FB","1/0/115","","","Bedroom 1 Ambient","DPST-1-11","Auto" +"Study Primary","1/0/140","","","Study Primary","DPST-1-1","Auto" +"Study Primary CTRL","1/0/141","","","Study Primary","DPST-1-1","Auto" +"Study Primary Light 1","1/0/142","","","Study Primary","DPST-1-1","Auto" +"Study Primary Light 2","1/0/143","","","Study Primary","DPST-1-1","Auto" +"Study Primary Light Table","1/0/144","","","Study Primary","DPST-1-1","Auto" +"Study Primary FB","1/0/147","","","Study Primary","DPST-1-11","Auto" +"Study Primary CTRL FB","1/0/148","","","Study Primary","DPST-1-11","Auto" +"Study Primary Light 1 FB","1/0/149","","","Study Primary","DPST-1-11","Auto" +"Study Primary Light 2 FB","1/0/150","","","Study Primary","DPST-1-11","Auto" +"Study Primary Light Table State","1/0/151","","","Study Primary","DPST-1-11","Auto" +"Study Ambient","1/0/155","","","Study Ambient","DPST-1-1","Auto" +"Study Ambient CTRL","1/0/156","","","Study Ambient","DPST-1-1","Auto" +"Study Ambient Light 1","1/0/157","","","Study Ambient","DPST-1-1","Auto" +"Study Ambient Light 2","1/0/158","","","Study Ambient","DPST-1-1","Auto" +"Study Ambient FB","1/0/162","","","Study Ambient","DPST-1-11","Auto" +"Study Ambient CTRL FB","1/0/163","","","Study Ambient","DPST-1-11","Auto" +"Study Ambient Light 1 FB","1/0/164","","","Study Ambient","DPST-1-11","Auto" +"Study Ambient Light 2 FB","1/0/165","","","Study Ambient","DPST-1-11","Auto" +"Bedroom 2 Primary","1/0/190","","","Bedroom 2 Primary","DPST-1-1","Auto" +"Bedroom 2 Primary CTRL","1/0/191","","","Bedroom 2 Reading light","DPST-1-1","Auto" +"Bedroom 2 Primary Light 1","1/0/192","","","Bedroom 2 Primary","DPST-1-1","Auto" +"Bedroom 2 Primary Light 2","1/0/193","","","Bedroom 2 Primary","DPST-1-1","Auto" +"Bedroom 2 Primary Light Reading","1/0/194","","","Bedroom 2 Reading light","DPST-1-1","Auto" +"Bedroom 2 Primary FB","1/0/197","","","Bedroom 2 Primary","DPST-1-11","Auto" +"Bedroom 2 Primary CTRL FB","1/0/198","","","Bedroom 2 Reading light","DPST-1-11","Auto" +"Bedroom 2 Primary Light 1 FB","1/0/199","","","Bedroom 2 Primary","DPST-1-11","Auto" +"Bedroom 2 Primary Light 2 FB","1/0/200","","","Bedroom 2 Primary","DPST-1-11","Auto" +"Bedroom 2 Primary Light Reading FB","1/0/201","","","Bedroom 2 Reading light","DPST-1-11","Auto" +"Bedroom 2 Ambient","1/0/205","","","Bedroom 2 Ambient","DPST-1-1","Auto" +"Bedroom 2 Ambient CTRL","1/0/206","","","Bedroom 2 Ambient","DPST-1-1","Auto" +"Bedroom 2 Ambient Light 1","1/0/207","","","Bedroom 2 Ambient","DPST-1-1","Auto" +"Bedroom 2 Ambient Light 2","1/0/208","","","Bedroom 2 Ambient","DPST-1-1","Auto" +"Bedroom 2 Ambient FB","1/0/212","","","Bedroom 2 Ambient","DPST-1-11","Auto" +"Bedroom 2 Ambient CTRL FB","1/0/213","","","Bedroom 2 Ambient","DPST-1-11","Auto" +"Bedroom 2 Ambient Light 1 FB","1/0/214","","","Bedroom 2 Ambient","DPST-1-11","Auto" +"Bedroom 2 Ambient Light 2 FB","1/0/215","","","Bedroom 2 Ambient","DPST-1-11","Auto" +"Utility","1/0/225","","","","DPST-1-1","Auto" +"Utility CTRL","1/0/226","","","","DPST-1-1","Auto" +"Utility Light 1","1/0/227","","","","DPST-1-1","Auto" +"Utility Counter","1/0/228","","","","DPST-1-1","Auto" +"Utility FB","1/0/232","","","","DPST-1-11","Auto" +"Utility CTRL FB","1/0/233","","","","DPST-1-11","Auto" +"Utility Light 1 FB","1/0/234","","","","DPST-1-11","Auto" +"Utility Counter FB","1/0/235","","","","DPST-1-11","Auto" +"Upper Floor","1/1/-","","","","","Auto" +"Hallway Entry","1/1/0","","","","DPST-1-1","Auto" +"Hallway Isle","1/1/1","","","","DPST-1-1","Auto" +"Hallway CTRL","1/1/2","","","","DPST-1-1","Auto" +"Hallway Entry FB","1/1/7","","","","DPST-1-11","Auto" +"Hallway Isle FB","1/1/8","","","","DPST-1-11","Auto" +"Hallway CTRL FB","1/1/9","","","","DPST-1-11","Auto" +"Bathroom Primary","1/1/20","","","","DPST-1-1","Auto" +"Bathroom Primary CTRL","1/1/21","","","","DPST-1-1","Auto" +"Bathroom Primary Light 1","1/1/22","","","","DPST-1-1","Auto" +"Bathroom Primary Light 2","1/1/23","","","","DPST-1-1","Auto" +"Bathroom Primary Light Vanity","1/1/24","","","","DPST-1-1","Auto" +"Bathroom Primary Ceiling","1/1/25","","","","DPST-1-1","Auto" +"Bathroom Primary FB","1/1/27","","","","DPST-1-11","Auto" +"Bathroom Primary CTRL FB","1/1/28","","","","DPST-1-11","Auto" +"Bathroom Primary Light 1 FB","1/1/29","","","","DPST-1-11","Auto" +"Bathroom Primary Light 2 FB","1/1/30","","","","DPST-1-11","Auto" +"Bathroom Primary Light Vanity FB","1/1/31","","","","DPST-1-11","Auto" +"Bathroom Vanity CTRL","1/1/33","","","","DPST-1-1","Auto" +"Bathroom Vanity CTRL FB","1/1/34","","","","DPST-1-11","Auto" +"Bathroom Ambient","1/1/35","","","","DPST-1-1","Auto" +"Bathroom Ambient CTRL","1/1/36","","","","DPST-1-1","Auto" +"Bathroom Ambient Light 1","1/1/37","","","","DPST-1-1","Auto" +"Bathroom Ambient Light 2","1/1/38","","","","DPST-1-1","Auto" +"Bathroom Ambient Toilet","1/1/39","","","","DPST-1-1","Auto" +"Bathroom Ambient FB","1/1/42","","","","DPST-1-11","Auto" +"Bathroom Ambient CTRL FB","1/1/43","","","","DPST-1-11","Auto" +"Bathroom Ambient Light 1 FB","1/1/44","","","","DPST-1-11","Auto" +"Bathroom Ambient Light 2 FB","1/1/45","","","","DPST-1-11","Auto" +"Bathroom Ambient Toilet FB","1/1/46","","","","DPST-1-11","Auto" +"Bedroom Primary","1/1/50","","","","DPST-1-1","Auto" +"Bedroom Primary CTRL","1/1/51","","","","DPST-1-1","Auto" +"Bedroom Primary Light 1","1/1/52","","","","DPST-1-1","Auto" +"Bedroom Primary Light 2","1/1/53","","","","DPST-1-1","Auto" +"Bedroom Primary Reading 1","1/1/54","","","","DPST-1-1","Auto" +"Bedroom Primary Reading 2","1/1/55","","","","DPST-1-1","Auto" +"Bedroom Primary FB","1/1/57","","","","DPST-1-11","Auto" +"Bedroom Primary CTRL FB","1/1/58","","","","DPST-1-11","Auto" +"Bedroom Primary Light 1 FB","1/1/59","","","","DPST-1-11","Auto" +"Bedroom Primary Light 2 FB","1/1/60","","","","DPST-1-11","Auto" +"Bedroom Primary Reading 1 FB","1/1/61","","","","DPST-1-11","Auto" +"Bedroom Primary Reading 2 FB","1/1/62","","","","DPST-1-11","Auto" +"Bedroom Ambient","1/1/65","","","","DPST-1-1","Auto" +"Bedroom Ambient CTRL","1/1/66","","","","DPST-1-1","Auto" +"Bedroom Ambient Light 1","1/1/67","","","","DPST-1-1","Auto" +"Bedroom Ambient Light 2","1/1/68","","","","DPST-1-1","Auto" +"Bedroom Ambient FB","1/1/72","","","","DPST-1-11","Auto" +"Bedroom Ambient CTRL FB","1/1/73","","","","DPST-1-11","Auto" +"Bedroom Ambient Light 1 FB","1/1/74","","","","DPST-1-11","Auto" +"Bedroom Ambient Light 2 FB","1/1/75","","","","DPST-1-11","Auto" +"Closet","1/1/80","","","","DPST-1-1","Auto" +"Closet CTRL","1/1/81","","","","DPST-1-1","Auto" +"Closet Light 1","1/1/82","","","","DPST-1-1","Auto" +"Closet Light 2","1/1/83","","","","DPST-1-1","Auto" +"Closet FB","1/1/87","","","","DPST-1-11","Auto" +"Closet CTRL FB","1/1/88","","","","DPST-1-11","Auto" +"Closet Light 1 FB","1/1/89","","","","DPST-1-11","Auto" +"Closet Light 2 FB","1/1/90","","","","DPST-1-11","Auto" +"Living room Primary","1/1/95","","","","DPST-1-1","Auto" +"Living room Primary CTRL","1/1/96","","","","DPST-1-1","Auto" +"Living room Primary Light 1","1/1/97","","","","DPST-1-1","Auto" +"Living room Primary Light 2","1/1/98","","","","DPST-1-1","Auto" +"Living room Primary Light 3","1/1/99","","","","DPST-1-1","Auto" +"Living room Primary FB","1/1/102","","","","DPST-1-11","Auto" +"Living room Primary CTRL FB","1/1/103","","","","DPST-1-11","Auto" +"Living room Primary Light 1 FB","1/1/104","","","","DPST-1-11","Auto" +"Living room Primary Light 2 FB","1/1/105","","","","DPST-1-11","Auto" +"Living room Primary Light 3 FB","1/1/106","","","","DPST-1-11","Auto" +"Living room Ambient","1/1/110","","","","DPST-1-1","Auto" +"Living room Ambient CTRL","1/1/111","","","","DPST-1-1","Auto" +"Living room Ambient Light 1","1/1/112","","","","DPST-1-1","Auto" +"Living room Ambient Light 2","1/1/113","","","","DPST-1-1","Auto" +"Living room Ambient FB","1/1/117","","","","DPST-1-11","Auto" +"Living room Ambient CTRL FB","1/1/118","","","","DPST-1-11","Auto" +"Living room Ambient Light 1 FB","1/1/119","","","","DPST-1-11","Auto" +"Living room Ambient Light 2 FB","1/1/120","","","","DPST-1-11","Auto" +"Office Primary","1/1/125","","","","DPST-1-1","Auto" +"Office Primary CTRL","1/1/126","","","","DPST-1-1","Auto" +"Office Primary Light 1","1/1/127","","","","DPST-1-1","Auto" +"Office Primary Light 2","1/1/128","","","","DPST-1-1","Auto" +"Office Primary FB","1/1/132","","","","DPST-1-11","Auto" +"Office Primary CTRL FB","1/1/133","","","","DPST-1-11","Auto" +"Office Primary Light 1 FB","1/1/134","","","","DPST-1-11","Auto" +"Office Primary Light 2 FB","1/1/135","","","","DPST-1-11","Auto" +"Dining room","1/1/140","","","","DPST-1-1","Auto" +"Dining room CTRL","1/1/141","","","","DPST-1-1","Auto" +"Dining room Light 1","1/1/142","","","","DPST-1-1","Auto" +"Dining room Light 2","1/1/143","","","","DPST-1-1","Auto" +"Dining room FB","1/1/147","","","","DPST-1-11","Auto" +"Dining room CTRL FB","1/1/148","","","","DPST-1-11","Auto" +"Dining room Light 1 FB","1/1/149","","","","DPST-1-11","Auto" +"Dining room Light 2 FB","1/1/150","","","","DPST-1-11","Auto" +"Kitchen Primary","1/1/155","","","","DPST-1-1","Auto" +"Kitchen Primary CTRL","1/1/156","","","","DPST-1-1","Auto" +"Kitchen Primary Light 1","1/1/157","","","","DPST-1-1","Auto" +"Kitchen Primary Light 2","1/1/158","","","","DPST-1-1","Auto" +"Kitchen Primary Light 3","1/1/159","","","","DPST-1-1","Auto" +"Kitchen Primary FB","1/1/162","","","","DPST-1-11","Auto" +"Kitchen Primary CTRL FB","1/1/163","","","","DPST-1-11","Auto" +"Kitchen Primary Light 1 FB","1/1/164","","","","DPST-1-11","Auto" +"Kitchen Primary Light 2 FB","1/1/165","","","","DPST-1-11","Auto" +"Kitchen Primary Light 3 FB","1/1/166","","","","DPST-1-11","Auto" +"Kitchen Ambient","1/1/170","","","","DPST-1-1","Auto" +"Kitchen Ambient CTRL","1/1/171","","","","DPST-1-1","Auto" +"Kitchen Ambient Light 1","1/1/172","","","","DPST-1-1","Auto" +"Kitchen Ambient Light 2","1/1/173","","","","DPST-1-1","Auto" +"Kitchen Ambient Light 3","1/1/174","","","","DPST-1-1","Auto" +"Kitchen Ambient FB","1/1/177","","","","DPST-1-11","Auto" +"Kitchen Ambient CTRL FB","1/1/178","","","","DPST-1-11","Auto" +"Kitchen Ambient Light 1 FB","1/1/179","","","","DPST-1-11","Auto" +"Kitchen Ambient Light 2 FB","1/1/180","","","","DPST-1-11","Auto" +"Kitchen Ambient Light 3 FB","1/1/181","","","","DPST-1-11","Auto" +"Kitchen Counter","1/1/185","","","","DPST-1-1","Auto" +"Kitchen Counter CTRL","1/1/186","","","","DPST-1-1","Auto" +"Kitchen Counter Light 1","1/1/187","","","","DPST-1-1","Auto" +"Kitchen Counter Light 2","1/1/188","","","","DPST-1-1","Auto" +"Kitchen Counter Light 3","1/1/189","","","","DPST-1-1","Auto" +"Kitchen Counter FB","1/1/192","","","","DPST-1-11","Auto" +"Kitchen Counter CTRL FB","1/1/193","","","","DPST-1-11","Auto" +"Kitchen Counter Light 1 FB","1/1/194","","","","DPST-1-11","Auto" +"Kitchen Counter Light 2 FB","1/1/195","","","","DPST-1-11","Auto" +"Kitchen Counter Light 3 FB","1/1/196","","","","DPST-1-11","Auto" +"Pantry","1/1/200","","","","DPST-1-1","Auto" +"Pantry CTRL","1/1/201","","","","DPST-1-1","Auto" +"Pantry Light 1","1/1/202","","","","DPST-1-1","Auto" +"Pantry Light 2","1/1/203","","","","DPST-1-1","Auto" +"Pantry FB","1/1/207","","","","DPST-1-11","Auto" +"Pantry CTRL FB","1/1/208","","","","DPST-1-11","Auto" +"Pantry Light 1 FB","1/1/209","","","","DPST-1-11","Auto" +"Pantry Light 2 FB","1/1/210","","","","DPST-1-11","Auto" +"Interior","1/2/-","","","","","Auto" +"Staircase","1/2/0","","","","DPST-1-1","Auto" +"Staircase CTRL","1/2/1","","","","DPST-1-1","Auto" +"Staircase Tree","1/2/2","","","Staircase Primary","DPST-1-1","Auto" +"Staircase Handrail","1/2/3","","","Staircase Primary","DPST-1-1","Auto" +"Staircase FB","1/2/7","","","","DPST-1-11","Auto" +"Staircase CTRL FB","1/2/8","","","","DPST-1-11","Auto" +"Staircase Tree FB","1/2/9","","","Staircase Primary","DPST-1-11","Auto" +"Staircase Handrail FB","1/2/10","","","Staircase Primary","DPST-1-11","Auto" +"Exterior","1/3/-","","","","","Auto" +"Terrace","1/3/0","","","20_Garden Terrace","DPST-1-1","Auto" +"Terrace FB","1/3/7","","","20_Garden Terrace","DPST-1-1","Auto" +"Entrance","1/3/20","","","20_Exterior Entrance","DPST-1-1","Auto" +"Entrance FB","1/3/27","","","20_Exterior Entrance","DPST-1-1","Auto" +"Retention tank pump","1/3/240","","","","DPST-1-1","Auto" +"Retention tank pump State","1/3/241","","","","DPST-1-11","Auto" +"Parking","1/4/-","","","","","Auto" +"Parking place","1/4/0","","","Parking place Primary","DPST-1-1","Auto" +"Parking place FB","1/4/7","","","Parking place Primary","DPST-1-1","Auto" +"Parking place AC Plug Right of Door","1/4/10","","","","DPST-1-1","Auto" +"Parking place AC Plug Right of Door State","1/4/17","","","","DPST-1-11","Auto" +"Swimming Pool","1/5/-","","","","","Auto" +"Underwater Light","1/5/0","","","","DPST-1-1","Auto" +"Underwater Light FB","1/5/1","","","","DPST-1-11","Auto" +"Filtration","1/5/10","","","","DPST-1-1","Auto" +"Filtration FB","1/5/11","","","","DPST-1-1","Auto" +"Dimming","2/-/-","","","","","Auto" +"Lower Floor","2/0/-","","","","","Auto" +"Hallway","2/0/0","","","Hallway Primary","DPST-5-1","Auto" +"Hallway FB","2/0/1","","","Hallway Primary","DPST-5-1","Auto" +"Hallway Dimmer","2/0/2","","","Hallway Primary","DPST-3-7","Auto" +"Hallway Color","2/0/5","","","","DPST-5-1","Auto" +"Hallway Color FB","2/0/6","","","","DPST-5-1","Auto" +"Hallway Color Dimmer","2/0/7","","","","DPST-3-7","Auto" +"Bathroom Primary","2/0/20","","","Bathroom Primary","DPST-5-1","Auto" +"Bathroom Primary FB","2/0/21","","","Bathroom Primary","DPST-5-1","Auto" +"Bathroom Primary Dimmer","2/0/22","","","Bathroom Primary","DPST-3-7","Auto" +"Bathroom Primary Color","2/0/25","","","","DPST-5-1","Auto" +"Bathroom Primary Color FB","2/0/26","","","","DPST-5-1","Auto" +"Bathroom Primary Color Dimmer","2/0/27","","","","DPST-3-7","Auto" +"Bathroom Ambient","2/0/35","","","Bathroom Ambient","","Auto" +"Bathroom Ambient FB","2/0/36","","","Bathroom Ambient","","Auto" +"Bathroom Ambient Dimmer","2/0/37","","","Bathroom Ambient","DPST-3-7","Auto" +"Bathroom Ambient HSV","2/0/40","","","","DPST-232-601","Auto" +"Bathroom Ambient HSV FB","2/0/41","","","","DPST-232-601","Auto" +"Bathroom Ambient Hue Dimming","2/0/42","","","","","Auto" +"Bathroom Ambient Saturation Dimming","2/0/43","","","","","Auto" +"Bathroom Vanity","2/0/50","","","Bathroom Vanity","DPST-5-1","Auto" +"Bathroom Vanity FB","2/0/51","","","Bathroom Vanity","DPST-5-1","Auto" +"Bathroom Vanity Dimmer","2/0/52","","","Bathroom Vanity","DPST-3-7","Auto" +"Bathroom Vanity Color","2/0/53","","","","DPST-5-1","Auto" +"Bathroom Vanity Color FB","2/0/54","","","","DPST-5-1","Auto" +"Bathroom Vanity Color Dimmer","2/0/55","","","","DPST-3-7","Auto" +"Laundry Primary","2/0/70","","","Laundry Primary","DPST-5-1","Auto" +"Laundry Primary FB","2/0/71","","","Laundry Primary","DPST-5-1","Auto" +"Laundry Primary Dimmer","2/0/72","","","Laundry Primary","DPST-3-7","Auto" +"Laundry Color","2/0/75","","","","DPST-5-1","Auto" +"Laundry Color FB","2/0/76","","","","DPST-5-1","Auto" +"Laundry Color Dimmer","2/0/77","","","","DPST-3-7","Auto" +"Bedroom 1 Primary","2/0/90","","","Bedroom 1 Primary","DPST-5-1","Auto" +"Bedroom 1 Primary FB","2/0/91","","","Bedroom 1 Primary","DPST-5-1","Auto" +"Bedroom 1 Primary Dimmer","2/0/92","","","Bedroom 1 Primary","DPST-3-7","Auto" +"Bedroom 1 Primary Color","2/0/95","","","","DPST-5-1","Auto" +"Bedroom 1 Primary Color FB","2/0/96","","","","DPST-5-1","Auto" +"Bedroom 1 Primary Color Dimmer","2/0/97","","","","DPST-3-7","Auto" +"Bedroom 1 Ambient","2/0/105","","","Bedroom 1 Ambient","","Auto" +"Bedroom 1 Ambient FB","2/0/106","","","Bedroom 1 Ambient","","Auto" +"Bedroom 1 Ambient Dimmer","2/0/107","","","Bedroom 1 Ambient","DPST-3-7","Auto" +"Bedroom 1 Ambient HSV","2/0/110","","","","DPST-232-601","Auto" +"Bedroom 1 Ambient HSV FB","2/0/111","","","","DPST-232-601","Auto" +"Bedroom 1 Ambient Hue Dimming","2/0/112","","","","","Auto" +"Bedroom 1 Ambient Saturation Dimming","2/0/113","","","","","Auto" +"Study Primary","2/0/140","","","Study Primary","DPST-5-1","Auto" +"Study Primary FB","2/0/141","","","Study Primary","DPST-5-1","Auto" +"Study Primary Dimmer","2/0/142","","","Study Primary","DPST-3-7","Auto" +"Study Color","2/0/145","","","","DPST-5-1","Auto" +"Study Color FB","2/0/146","","","","DPST-5-1","Auto" +"Study Color Dimmer","2/0/147","","","","DPST-3-7","Auto" +"Study Ambient","2/0/155","","","Study Ambient","","Auto" +"Study Ambient FB","2/0/156","","","Study Ambient","","Auto" +"Study Ambient Dimmer","2/0/157","","","Study Ambient","DPST-3-7","Auto" +"Study Ambient HSV","2/0/160","","","","DPST-232-601","Auto" +"Study Ambient HSV FB","2/0/161","","","","DPST-232-601","Auto" +"Study Ambient Hue Dimming","2/0/162","","","","","Auto" +"Study Ambient Saturation Dimming","2/0/163","","","","","Auto" +"Bedroom 2 Primary","2/0/190","","","Bedroom 2 Primary","DPST-5-1","Auto" +"Bedroom 2 Primary FB","2/0/191","","","Bedroom 2 Primary","DPST-5-1","Auto" +"Bedroom 2 Primary Dimmer","2/0/192","","","Bedroom 2 Primary","DPST-3-7","Auto" +"Bedroom 2 Primary Color","2/0/195","","","","DPST-5-1","Auto" +"Bedroom 2 Primary Color FB","2/0/196","","","","DPST-5-1","Auto" +"Bedroom 2 Primary Color Dimmer","2/0/197","","","","DPST-3-7","Auto" +"Bedroom 2 Ambient","2/0/205","","","Bedroom 2 Ambient","","Auto" +"Bedroom 2 Ambient FB","2/0/206","","","Bedroom 2 Ambient","","Auto" +"Bedroom 2 Ambient Dimmer","2/0/207","","","Bedroom 2 Ambient","DPST-3-7","Auto" +"Bedroom 2 Ambient HSV","2/0/210","","","","DPST-232-601","Auto" +"Bedroom 2 Ambient HSV FB","2/0/211","","","","DPST-232-601","Auto" +"Bedroom 2 Ambient Hue Dimming","2/0/212","","","","","Auto" +"Bedroom 2 Ambient Saturation Dimming","2/0/213","","","","","Auto" +"Utility","2/0/225","","","Utility room Primary","DPST-5-1","Auto" +"Utility FB","2/0/226","","","Utility room Primary","DPST-5-1","Auto" +"Utility Dimmer","2/0/227","","","Utility room Primary","DPST-3-7","Auto" +"Utility Color","2/0/230","","","","DPST-5-1","Auto" +"Utility Color FB","2/0/231","","","","DPST-5-1","Auto" +"Utility Color Dimmer","2/0/232","","","","DPST-3-7","Auto" +"Upper Floor","2/1/-","","","","","Auto" +"Hallway","2/1/0","","","Hallway Entry","DPST-5-1","Auto" +"Hallway FB","2/1/1","","","Hallway Entry","DPST-5-1","Auto" +"Hallway Dimming","2/1/2","","","Hallway Entry","DPST-3-7","Auto" +"Hallway Color","2/1/5","","","Hallway Entry","DPST-5-1","Auto" +"Hallway Color FB","2/1/6","","","Hallway Entry","DPST-5-1","Auto" +"Hallway Color Dimming","2/1/7","","","Hallway Entry","DPST-3-7","Auto" +"Bathroom Primary","2/1/15","","","Bathroom Primary","DPST-5-1","Auto" +"Bathroom Primary FB","2/1/16","","","Bathroom Primary","DPST-5-1","Auto" +"Bathroom Primary Dimming","2/1/17","","","Bathroom Primary","DPST-3-7","Auto" +"Bathroom Primary Color","2/1/20","","","","DPST-5-1","Auto" +"Bathroom Primary Color FB","2/1/21","","","","DPST-5-1","Auto" +"Bathroom Primary Color Dimming","2/1/22","","","","DPST-3-7","Auto" +"Bathroom Ambient","2/1/30","","","Bathroom Ambient","DPST-5-1","Auto" +"Bathroom Ambient FB","2/1/31","","","Bathroom Ambient","DPST-5-1","Auto" +"Bathroom Ambient Dimming","2/1/32","","","Bathroom Ambient","DPST-3-7","Auto" +"Bathroom Ambient HSV","2/1/35","","","","DPST-232-601","Auto" +"Bathroom Ambient HSV FB","2/1/36","","","","DPST-232-601","Auto" +"Bathroom Ambient Hue Dimming","2/1/37","","","","DPST-3-7","Auto" +"Bathroom Ambient Saturation Dimming","2/1/38","","","","DPST-3-7","Auto" +"Bathroom Vanity","2/1/45","","","Bathroom Vanity","DPST-5-1","Auto" +"Bathroom Vanity FB","2/1/46","","","Bathroom Vanity","DPST-5-1","Auto" +"Bathroom Vanity Dimming","2/1/47","","","Bathroom Vanity","DPST-3-7","Auto" +"Bathroom Vanity Color","2/1/50","","","","DPST-5-1","Auto" +"Bathroom Vanity Color FB","2/1/51","","","","DPST-5-1","Auto" +"Bathroom Vanity Color Dimming","2/1/52","","","","DPST-3-7","Auto" +"Bedroom Primary","2/1/65","","","Bedroom Primary","DPST-5-1","Auto" +"Bedroom Primary FB","2/1/66","","","Bedroom Primary","DPST-5-1","Auto" +"Bedroom Primary Dimming","2/1/67","","","Bedroom Primary","DPST-3-7","Auto" +"Bedroom Primary Color","2/1/70","","","","DPST-5-1","Auto" +"Bedroom Primary Color FB","2/1/71","","","","DPST-5-1","Auto" +"Bedroom Primary Color Dimming","2/1/72","","","","DPST-3-7","Auto" +"Bedroom Ambient","2/1/80","","","Bedroom Ambient","DPST-1-1","Auto" +"Bedroom Ambient FB","2/1/81","","","Bedroom Ambient","","Auto" +"Bedroom Ambient Dimming","2/1/82","","","Bedroom Ambient","DPST-3-7","Auto" +"Bedroom Ambient HSV","2/1/85","","","","DPST-232-601","Auto" +"Bedroom Ambient HSV FB","2/1/86","","","","DPST-232-601","Auto" +"Bedroom Ambient Hue Dimming","2/1/87","","","","","Auto" +"Bedroom Ambient Saturation Dimming","2/1/88","","","","","Auto" +"Closet","2/1/95","","","Bedroom Closet","DPST-5-1","Auto" +"Closet FB","2/1/96","","","Bedroom Closet","DPST-5-1","Auto" +"Closet Dimming","2/1/97","","","Bedroom Closet","DPST-3-7","Auto" +"Closet Color","2/1/100","","","","DPST-5-1","Auto" +"Closet Color FB","2/1/101","","","","DPST-5-1","Auto" +"Closet Color Dimming","2/1/102","","","","DPST-3-7","Auto" +"Living room Primary","2/1/105","","","Living room Primary","DPST-5-1","Auto" +"Living room Primary FB","2/1/106","","","Living room Primary","DPST-5-1","Auto" +"Living room Primary Dimming","2/1/107","","","Living room Primary","DPST-3-7","Auto" +"Living room Primary Color","2/1/110","","","Living room Primary","DPST-5-1","Auto" +"Living room Primary Color FB","2/1/111","","","Living room Primary","DPST-5-1","Auto" +"Living room Primary Color Dimming","2/1/112","","","Living room Primary","DPST-3-7","Auto" +"Living room Ambient","2/1/120","","","Living room Ambient","DPST-5-1","Auto" +"Living room Ambient FB","2/1/121","","","Living room Ambient","DPST-5-1","Auto" +"Living room Ambient Dimming","2/1/122","","","Living room Ambient","DPST-3-7","Auto" +"Living room Ambient HSV","2/1/125","","","","DPST-232-601","Auto" +"Living room Ambient HSV FB","2/1/126","","","","DPST-232-601","Auto" +"Living room Ambient Hue Dimming","2/1/127","","","Living room Ambient","DPST-3-7","Auto" +"Living room Ambient Saturation Dimming","2/1/128","","","Living room Ambient","DPST-3-7","Auto" +"Office Primary","2/1/135","","","Office Primary","DPST-5-1","Auto" +"Office Primary FB","2/1/136","","","Office Primary","DPST-5-1","Auto" +"Office Primary Dimming","2/1/137","","","Office Primary","DPST-3-7","Auto" +"Office Color","2/1/140","","","","DPST-5-1","Auto" +"Office Color FB","2/1/141","","","","DPST-5-1","Auto" +"Office Color Dimming","2/1/142","","","","DPST-3-7","Auto" +"Dining room","2/1/150","","","Dining room Primary","DPST-5-1","Auto" +"Dining room FB","2/1/151","","","Dining room Primary","DPST-5-1","Auto" +"Dining room Dimming","2/1/152","","","Dining room Primary","DPST-3-7","Auto" +"Dining Room Color","2/1/155","","","","DPST-5-1","Auto" +"Dining Room Color FB","2/1/156","","","","DPST-5-1","Auto" +"Dining Room Color Dimming","2/1/157","","","","DPST-3-7","Auto" +"Kitchen Primary","2/1/165","","","Kitchen Primary","DPST-5-1","Auto" +"Kitchen Primary FB","2/1/166","","","Kitchen Primary","DPST-5-1","Auto" +"Kitchen Primary Dimming","2/1/167","","","Kitchen Primary","DPST-3-7","Auto" +"Kitchen Primary Color","2/1/170","","","","DPST-5-1","Auto" +"Kitchen Primary Color FB","2/1/171","","","","DPST-5-1","Auto" +"Kitchen Primary Color Dimming","2/1/172","","","","DPST-3-7","Auto" +"Kitchen Ambient","2/1/180","","","Kitchen Ambient","","Auto" +"Kitchen Ambient FB","2/1/181","","","Kitchen Ambient","","Auto" +"Kitchen Ambient Dimming","2/1/182","","","Kitchen Ambient","","Auto" +"Kitchen Ambient HSV","2/1/185","","","","DPST-232-601","Auto" +"Kitchen Ambient HSV FB","2/1/186","","","","DPST-232-601","Auto" +"Kitchen Ambient Hue Dimming","2/1/187","","","","","Auto" +"Kitchen Ambient Saturation Dimming","2/1/188","","","","","Auto" +"Kitchen Counter","2/1/195","","","Kitchen Counter","DPST-5-1","Auto" +"Kitchen Counter FB","2/1/196","","","Kitchen Counter","DPST-5-1","Auto" +"Kitchen Counter Dimming","2/1/197","","","Kitchen Counter","DPST-3-7","Auto" +"Kitchen Counter Color","2/1/200","","","","DPST-5-1","Auto" +"Kitchen Counter Color FB","2/1/201","","","","DPST-5-1","Auto" +"Kitchen Counter Color Dimming","2/1/202","","","","DPST-3-7","Auto" +"Pantry","2/1/210","","","Kitchen Counter","DPST-5-1","Auto" +"Pantry FB","2/1/211","","","Kitchen Counter","DPST-5-1","Auto" +"Pantry Dimming","2/1/212","","","Kitchen Counter","DPST-3-7","Auto" +"Pantry Color","2/1/215","","","","DPST-5-1","Auto" +"Pantry Color FB","2/1/216","","","","DPST-5-1","Auto" +"Pantry Color Dimming","2/1/217","","","","DPST-3-7","Auto" +"Interior","2/2/-","","","","","Auto" +"Staircase Tree Dimming","2/2/0","","","Staircase Primary","","Auto" +"Staircase Tree Value","2/2/1","","","Staircase Primary","","Auto" +"Staircase Tree Value Feedback","2/2/2","","","Staircase Primary","","Auto" +"Staircase handrail Swtich","2/2/20","","","Staircase Primary","","Auto" +"Staircase handrail Value","2/2/21","","","Staircase Primary","","Auto" +"Staircase handrail Value Feedback","2/2/22","","","Staircase Primary","","Auto" +"Staircase handrail bottom Dimming","2/2/35","","","Staircase Primary","","Auto" +"Staircase handrail bottom Value","2/2/36","","","Staircase Primary","","Auto" +"Staircase handrail bottom Value Feedback","2/2/37","","","Staircase Primary","","Auto" +"Exterior","2/3/-","","","","","Auto" +"Terrace Dimming","2/3/0","","","20_Garden Terrace","","Auto" +"Terrace Value","2/3/1","","","20_Garden Terrace","","Auto" +"Terrace Value Feedback","2/3/2","","","20_Garden Terrace","","Auto" +"Entrance Value Feedback","2/3/20","","","20_Exterior Entrance","","Auto" +"Entrance Dimming","2/3/21","","","20_Exterior Entrance","","Auto" +"Entrance Value","2/3/22","","","20_Exterior Entrance","","Auto" +"Parking","2/4/-","","","","","Auto" +"Parking place Dimming","2/4/0","","","Parking place Primary","","Auto" +"Parking place Value","2/4/1","","","Parking place Primary","","Auto" +"Parking place Value Feedback","2/4/2","","","Parking place Primary","","Auto" +"Heating","3/-/-","","","","","Auto" +"Lower Floor","3/0/-","","","","","Auto" +"Hallway Temperature FB","3/0/0","","","","DPST-9-1","Auto" +"Bathroom Temperature FB","3/0/30","","","","DPST-9-1","Auto" +"Bathroom Ladder boost","3/0/40","","","","DPST-1-1","Auto" +"Bathroom Ladder boost FB","3/0/41","","","","DPST-1-11","Auto" +"Laundry Temperature FB","3/0/60","","","","","Auto" +"Bedroom 1 Temperature FB","3/0/90","","","","DPST-9-1","Auto" +"Study Temperature FB","3/0/120","","","","DPST-9-1","Auto" +"Bedroom 2 Temperature FB","3/0/150","","","","DPST-9-1","Auto" +"Technical Room Temperature FB","3/0/180","","","","DPST-9-1","Auto" +"Upper Floor","3/1/-","","","","","Auto" +"Hallway Temperature FB","3/1/0","","","","DPST-9-1","Auto" +"Bathroom Temperature FB","3/1/30","","","","DPST-9-1","Auto" +"Bathroom Ladder boost","3/1/40","","","","DPST-1-1","Auto" +"Bathroom Ladder boost FB","3/1/41","","","","DPST-1-1","Auto" +"Bedroom Temperature FB","3/1/60","","","","DPST-9-1","Auto" +"Living Room Temperature FB","3/1/90","","","","DPST-9-1","Auto" +"Kitchen Temperature FB","3/1/120","","","","DPST-9-1","Auto" +"Swimming Pool","3/5/-","","","","","Auto" +"Circulation Pump","3/5/0","","","","DPST-1-1","Auto" +"Circulation Pump FB","3/5/1","","","","DPST-1-1","Auto" +"Hot Water","3/6/-","","","","","Auto" +"Hot Water Circulation State","3/6/2","","","","DPST-1-11","Auto" +"Hot Water Circulation Emergency State","3/6/3","","","","DPST-1-11","Auto" +"Hot Water Circulation Control Value","3/6/4","","","","DPST-5-1","Auto" +"Hot Water Circulation Control Lock","3/6/5","","","","DPST-1-1","Auto" +"Central","3/7/-","","","","","Auto" +"Heating-Cooling","3/7/0","true","","Heating = 1 +Cooling = 0","DPST-1-100","Auto" +"Heating-Cooling State","3/7/1","true","","Heating = 1 +Cooling = 0","DPST-1-100","Auto" +"Temperature Setpoint","3/7/2","","","","","Auto" +"Temperature Setpoint State","3/7/3","","","","","Auto" +"Heating Off Lock","3/7/4","","","","DPST-1-1","Auto" +"UF+LF Heating Circulation Pump","3/7/20","","","","DPST-1-1","Auto" +"UF+LF Heating Circulation Pump State","3/7/21","","","","DPST-1-1","Auto" +"Ventilation","4/-/-","","","","","Auto" +"Lower Floor","4/0/-","","","","","Auto" +"PLACEHOLDER Hallway","4/0/0","","","","","Auto" +"LF Hallway Valve IN","4/0/10","","","","DPST-5-1","Auto" +"LF Hallway Valve IN FB","4/0/11","","","","DPST-5-1","Auto" +"Bathroom CO2 FB","4/0/30","","","","DPST-9-1","Auto" +"Bathroom Humidity FB","4/0/31","","","","DPST-9-1","Auto" +"Bathroom boost","4/0/35","","","","DPST-1-1","Auto" +"Bathroom boost FB","4/0/36","","","","DPST-1-1","Auto" +"LF Bathroom Valve IN","4/0/40","","","","DPST-5-1","Auto" +"LF Bathroom Valve IN FB","4/0/41","","","","DPST-5-1","Auto" +"LF Bathroom Valve OUT","4/0/42","","","","DPST-5-1","Auto" +"LF Bathroom Valve OUT FB","4/0/43","","","","DPST-5-1","Auto" +"PLACEHOLDER Laundry","4/0/60","","","","","Auto" +"Bedroom 1 CO2 FB","4/0/90","","","","DPST-9-8","Auto" +"Bedroom 1 Humidity FB","4/0/91","","","","DPST-9-7","Auto" +"LF Bedroom 1 Valve IN","4/0/100","","","","DPST-5-1","Auto" +"LF Bedroom 1 Valve IN FB","4/0/101","","","","DPST-5-1","Auto" +"Study CO2 FB","4/0/120","","","","DPST-9-8","Auto" +"Study Humidity FB","4/0/121","","","","DPST-9-7","Auto" +"LF Study Valve IN","4/0/130","","","","DPST-5-1","Auto" +"LF Study Valve IN FB","4/0/131","","","","DPST-5-1","Auto" +"LF Study Valve IN Lock","4/0/132","","","","DPST-1-1","Auto" +"Bedroom 2 CO2 FB","4/0/150","","","","DPST-9-8","Auto" +"Bedroom 2 Humidity FB","4/0/151","","","","DPST-9-7","Auto" +"LF Bedroom 2 Valve IN","4/0/160","","","","DPST-5-1","Auto" +"LF Bedroom 2 Valve IN FB","4/0/161","","","","DPST-5-1","Auto" +"Technical Room CO2 FB","4/0/180","","","","","Auto" +"Technical Room Humidity FB","4/0/181","","","","DPST-9-7","Auto" +"LF Box Valve OUT","4/0/240","","","","DPST-5-1","Auto" +"LF Box Valve OUT FB","4/0/241","","","","DPST-5-1","Auto" +"LF Box Valve OUT Lock","4/0/242","","","","DPST-1-1","Auto" +"Upper Floor","4/1/-","","","","","Auto" +"PLACEHOLDER Hallway","4/1/0","","","","","Auto" +"Bathroom CO2 FB","4/1/30","","","","DPST-9-1","Auto" +"Bathroom Humidity FB","4/1/31","","","","DPST-9-1","Auto" +"Bathroom boost","4/1/35","","","","DPST-1-1","Auto" +"Bathroom boost FB","4/1/36","","","","DPST-1-1","Auto" +"UF Bathroom Valve IN","4/1/40","","","","DPST-5-1","Auto" +"UF Bathroom Valve IN FB","4/1/41","","","","DPST-5-1","Auto" +"UF Bathroom Valve IN Lock","4/1/42","","","","DPST-1-1","Auto" +"PLACEHOLDER Bedroom","4/1/60","","","","","Auto" +"UF Bedroom Valve IN","4/1/70","","","","DPST-5-1","Auto" +"UF Bedroom Valve IN FB","4/1/71","","","","DPST-5-1","Auto" +"UF Bedroom Valve IN Lock","4/1/72","","","","DPST-1-1","Auto" +"Bedroom CO2 FB","4/1/80","","","","DPST-9-8","Auto" +"Bedroom Humidity FB","4/1/81","","","","DPST-9-7","Auto" +"Living Room CO2 FB","4/1/90","","","","DPST-9-8","Auto" +"Living Room Humidity FB","4/1/91","","","","DPST-9-7","Auto" +"UF Living Room Valve IN","4/1/100","","","","DPST-5-1","Auto" +"UF Living Room Valve IN FB","4/1/101","","","","DPST-5-1","Auto" +"PLACEHOLDER Office","4/1/120","","","","","Auto" +"UF Office Valve IN","4/1/130","","","","DPST-5-1","Auto" +"UF Office Valve IN FB","4/1/131","","","","DPST-5-1","Auto" +"UF Bathroom Valve OUT","4/1/142","","","","DPST-5-1","Auto" +"UF Bathroom Valve OUT FB","4/1/143","","","","DPST-5-1","Auto" +"UF Bathroom Valve OUT Lock","4/1/144","","","","DPST-1-1","Auto" +"PLACEHOLDER Dining Room","4/1/150","","","","","Auto" +"PLACEHOLDER Kitchen","4/1/180","","","","","Auto" +"UF Kitchen Valve OUT","4/1/190","","","","DPST-5-1","Auto" +"UF Kitchen Valve OUT FB","4/1/191","","","","DPST-5-1","Auto" +"Kitchen CO2 FB","4/1/200","","","","DPST-9-8","Auto" +"Kitchen Humidity FB","4/1/201","","","","DPST-9-7","Auto" +"Kitchen TVOC FB","4/1/202","","","","DPST-9-8","Auto" +"Kitchen boost","4/1/205","","","","DPST-1-1","Auto" +"Kitchen boost FB","4/1/206","","","","DPST-1-1","Auto" +"UF Closet+Hallway Valve OUT","4/1/240","","","","DPST-5-1","Auto" +"UF Closet+Hallway Valve OUT FB","4/1/241","","","","DPST-5-1","Auto" +"UF Closet+Hallway Valve OUT Lock","4/1/242","","","","DPST-1-1","Auto" +"Central","4/7/-","","","","","Auto" +"Airflow","4/7/0","","","","DPST-13-2","Auto" +"Standby FB","4/7/1","","","","DPST-1-1","Auto" +"Temperature: Supply","4/7/5","","","","DPST-9-1","Auto" +"Temperature: Outdoor","4/7/6","","","","DPST-9-1","Auto" +"Temperature: Extract","4/7/7","","","","DPST-9-1","Auto" +"Temperature: Exhaust","4/7/8","","","","DPST-9-1","Auto" +"Humidity: Supply","4/7/10","","","","DPST-9-7","Auto" +"Humidity: Outdoor","4/7/11","","","","DPST-9-7","Auto" +"Humidity: Extract","4/7/12","","","","DPST-9-7","Auto" +"Humidity: Exhaust","4/7/13","","","","DPST-9-7","Auto" +"Filter: Remaining (h)","4/7/25","","","","DPST-7-7","Auto" +"Filter: Replace","4/7/26","","","","DPST-1-2","Auto" +"Heating-Cooling","4/7/30","","","","DPST-1-100","Auto" +"Heating-Cooling State","4/7/31","","","","DPST-1-100","Auto" +"Passive A/C Pump","4/7/35","true","","","DPST-1-10","Auto" +"Passive A/C Pump State","4/7/36","true","","","DPST-1-11","Auto" +"Passive A/C Pump Lock","4/7/37","true","","","DPST-1-2","Auto" +"Boost","4/7/100","","","","DPST-1-17","Auto" +"Boost FB","4/7/101","","","","DPST-1-1","Auto" +"Auto mode","4/7/102","","","","DPST-1-1","Auto" +"Auto mode FB","4/7/103","","","","DPST-1-3","Auto" +"Preset","4/7/104","","","","DPST-5-10","Auto" +"Preset FB","4/7/105","","","","DPST-5-10","Auto" +"Preset Away","4/7/106","","","","DPST-1-1","Auto" +"Preset Away FB","4/7/107","","","","DPST-1-1","Auto" +"Away function","4/7/108","","","","DPST-1-1","Auto" +"Away function FB","4/7/109","","","","DPST-1-1","Auto" +"Temperature profile mode","4/7/110","","","","DPST-5-10","Auto" +"Temperature profile mode FB","4/7/111","","","","DPST-5-10","Auto" +"Temperature profile","4/7/112","","","","DPST-5-10","Auto" +"Temperature profile FB","4/7/113","","","","DPST-5-10","Auto" +"Boost Time","4/7/114","","","","DPST-7-5","Auto" +"Boost Time FB","4/7/115","","","","DPST-7-5","Auto" +"External setpoint","4/7/116","","","","DPST-9-1","Auto" +"External setpoint FB","4/7/117","","","","DPST-9-1","Auto" +"Error","4/7/200","","","","DPST-1-2","Auto" +"Status","4/7/201","","","","DPST-5-1","Auto" +"Multimedia","5/-/-","","","","","Auto" +"Lower Floor","5/0/-","","","","","Auto" +"Upper Floor","5/1/-","","","","","Auto" +"Bathroom Playing","5/1/100","","","","DPT-5","Auto" +"Bathroom Off","5/1/101","","","","DPST-1-1","Auto" +"Bathroom Volume Down","5/1/103","","","","DPST-1-17","Auto" +"Bathroom Volume Up","5/1/104","","","","DPST-1-17","Auto" +"Bathroom Previous","5/1/105","","","","DPST-1-1","Auto" +"Bathroom Next","5/1/106","","","","DPST-1-1","Auto" +"Bathroom Preset Cycle Forward","5/1/107","","","","DPST-1-1","Auto" +"Control","6/-/-","","","","","Auto" +"Lower Floor","6/0/-","","","","","Auto" +"Hallway Presence","6/0/0","","","","DPST-1-11","Auto" +"Hallway Presence Enable","6/0/1","","","","DPST-1-3","Auto" +"Hallway Presence End","6/0/5","","","","DPST-1-1","Auto" +"Hallway Presence Alarm","6/0/10","","","","DPST-1-1","Auto" +"Hallway Presence Alarm State","6/0/11","","","","DPST-1-1","Auto" +"Study LED Brightness Night","6/0/146","","","","DPST-5-1","Auto" +"Upper Floor","6/1/-","","","","","Auto" +"Bathroom Presence","6/1/30","","","","DPST-1-18","Auto" +"Bathroom Presence Enable","6/1/31","","","","DPST-1-3","Auto" +"Bathroom Presence Delayed","6/1/32","","","","DPST-1-18","Auto" +"Bathroom Brightness","6/1/35","","","","DPST-9-4","Auto" +"Testing","15/-/-","","","","","Auto"