KNX Garage (sample)

This sample shows how to drive the KNX Garage node from the flow (open/close/toggle) and how to simulate safety inputs (photocell) and overrides (disable/hold-open) using regular knxUltimate nodes.
For the full node reference see: Garage configuration
Basic control + safety simulation
Copy this code and paste it into your flow
View code
> Adjust Group Addresses, DPTs and KNX gateway settings according to your setup.
```json
[
{
"id": "b2c9c84f6cf2d2a2",
"type": "tab",
"label": "KNX Garage sample",
"disabled": false,
"info": ""
},
{
"id": "8b9a7c6d5e4f3a21",
"type": "comment",
"z": "b2c9c84f6cf2d2a2",
"name": "Edit the GA/DPT values in the KNX Garage node. Use the inject nodes to test open/close/toggle.",
"info": "",
"x": 390,
"y": 60,
"wires": []
},
{
"id": "c4f5a6b7c8d9e0f1",
"type": "inject",
"z": "b2c9c84f6cf2d2a2",
"name": "OPEN",
"props": [
{ "p": "payload" }
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "open",
"payloadType": "str",
"x": 120,
"y": 140,
"wires": [
[
"54d1f7c0a3b9a98d"
]
]
},
{
"id": "d0e1f2a3b4c5d6e7",
"type": "inject",
"z": "b2c9c84f6cf2d2a2",
"name": "CLOSE",
"props": [
{ "p": "payload" }
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "close",
"payloadType": "str",
"x": 120,
"y": 180,
"wires": [
[
"54d1f7c0a3b9a98d"
]
]
},
{
"id": "e7f6d5c4b3a2f1e0",
"type": "inject",
"z": "b2c9c84f6cf2d2a2",
"name": "TOGGLE",
"props": [
{ "p": "payload" }
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "toggle",
"payloadType": "str",
"x": 120,
"y": 220,
"wires": [
[
"54d1f7c0a3b9a98d"
]
]
},
{
"id": "54d1f7c0a3b9a98d",
"type": "knxUltimateGarage",
"z": "b2c9c84f6cf2d2a2",
"server": "0f0e0d0c0b0a0908",
"name": "Garage door",
"outputtopic": "garage",
"gaCommand": "3/0/0",
"nameCommand": "Door command",
"dptCommand": "1.001",
"gaImpulse": "3/0/1",
"nameImpulse": "Door impulse",
"dptImpulse": "1.017",
"gaHoldOpen": "3/0/2",
"nameHoldOpen": "Hold open",
"dptHoldOpen": "1.001",
"gaDisable": "3/0/3",
"nameDisable": "Disable",
"dptDisable": "1.001",
"gaPhotocell": "3/0/4",
"namePhotocell": "Photocell",
"dptPhotocell": "1.001",
"gaMoving": "3/0/5",
"nameMoving": "Moving",
"dptMoving": "1.001",
"gaObstruction": "3/0/6",
"nameObstruction": "Obstruction",
"dptObstruction": "1.001",
"autoCloseEnable": true,
"autoCloseSeconds": 30,
"emitEvents": true,
"x": 350,
"y": 180,
"wires": [
[
"a9b8c7d6e5f4a3b2"
]
]
},
{
"id": "a9b8c7d6e5f4a3b2",
"type": "debug",
"z": "b2c9c84f6cf2d2a2",
"name": "Garage events",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"x": 560,
"y": 180,
"wires": []
},
{
"id": "2a3b4c5d6e7f8091",
"type": "comment",
"z": "b2c9c84f6cf2d2a2",
"name": "Simulate inputs (writes to the configured GA). Use these only for testing.",
"info": "",
"x": 330,
"y": 320,
"wires": []
},
{
"id": "1122334455667788",
"type": "inject",
"z": "b2c9c84f6cf2d2a2",
"name": "Hold-open ON",
"props": [
{ "p": "payload" }
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "true",
"payloadType": "bool",
"x": 130,
"y": 380,
"wires": [
[
"76a8c9d0e1f2a3b4"
]
]
},
{
"id": "99aabbccddeeff00",
"type": "inject",
"z": "b2c9c84f6cf2d2a2",
"name": "Hold-open OFF",
"props": [
{ "p": "payload" }
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "false",
"payloadType": "bool",
"x": 130,
"y": 420,
"wires": [
[
"76a8c9d0e1f2a3b4"
]
]
},
{
"id": "76a8c9d0e1f2a3b4",
"type": "knxUltimate",
"z": "b2c9c84f6cf2d2a2",
"server": "0f0e0d0c0b0a0908",
"topic": "3/0/2",
"outputtopic": "",
"dpt": "1.001",
"initialread": false,
"notifyreadrequest": false,
"notifyresponse": false,
"notifywrite": true,
"notifyreadrequestalsorespondtobus": false,
"notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized": "0",
"listenallga": false,
"name": "GA Hold-open",
"outputtype": "write",
"outputRBE": false,
"inputRBE": false,
"formatmultiplyvalue": "1",
"formatnegativevalue": "leave",
"formatdecimalsvalue": "999",
"passthrough": "no",
"x": 360,
"y": 400,
"wires": [
[]
]
},
{
"id": "a1a2a3a4a5a6a7a8",
"type": "inject",
"z": "b2c9c84f6cf2d2a2",
"name": "Disable ON",
"props": [
{ "p": "payload" }
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "true",
"payloadType": "bool",
"x": 120,
"y": 480,
"wires": [
[
"b1b2b3b4b5b6b7b8"
]
]
},
{
"id": "c1c2c3c4c5c6c7c8",
"type": "inject",
"z": "b2c9c84f6cf2d2a2",
"name": "Disable OFF",
"props": [
{ "p": "payload" }
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "false",
"payloadType": "bool",
"x": 120,
"y": 520,
"wires": [
[
"b1b2b3b4b5b6b7b8"
]
]
},
{
"id": "b1b2b3b4b5b6b7b8",
"type": "knxUltimate",
"z": "b2c9c84f6cf2d2a2",
"server": "0f0e0d0c0b0a0908",
"topic": "3/0/3",
"outputtopic": "",
"dpt": "1.001",
"initialread": false,
"notifyreadrequest": false,
"notifyresponse": false,
"notifywrite": true,
"notifyreadrequestalsorespondtobus": false,
"notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized": "0",
"listenallga": false,
"name": "GA Disable",
"outputtype": "write",
"outputRBE": false,
"inputRBE": false,
"formatmultiplyvalue": "1",
"formatnegativevalue": "leave",
"formatdecimalsvalue": "999",
"passthrough": "no",
"x": 350,
"y": 500,
"wires": [
[]
]
},
{
"id": "d1d2d3d4d5d6d7d8",
"type": "inject",
"z": "b2c9c84f6cf2d2a2",
"name": "Photocell TRIP",
"props": [
{ "p": "payload" }
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "true",
"payloadType": "bool",
"x": 140,
"y": 600,
"wires": [
[
"e1e2e3e4e5e6e7e8"
]
]
},
{
"id": "e1e2e3e4e5e6e7e8",
"type": "knxUltimate",
"z": "b2c9c84f6cf2d2a2",
"server": "0f0e0d0c0b0a0908",
"topic": "3/0/4",
"outputtopic": "",
"dpt": "1.001",
"initialread": false,
"notifyreadrequest": false,
"notifyresponse": false,
"notifywrite": true,
"notifyreadrequestalsorespondtobus": false,
"notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized": "0",
"listenallga": false,
"name": "GA Photocell",
"outputtype": "write",
"outputRBE": false,
"inputRBE": false,
"formatmultiplyvalue": "1",
"formatnegativevalue": "leave",
"formatdecimalsvalue": "999",
"passthrough": "no",
"x": 360,
"y": 600,
"wires": [
[]
]
},
{
"id": "0f0e0d0c0b0a0908",
"type": "knxUltimate-config",
"host": "224.0.23.12",
"port": 3671,
"physAddr": "15.15.22",
"hostProtocol": "Auto",
"suppressACKRequest": false,
"csv": "",
"KNXEthInterface": "Auto",
"KNXEthInterfaceManuallyInput": "",
"stopETSImportIfNoDatapoint": "fake",
"loglevel": "error",
"name": "KNX Gateway",
"delaybetweentelegrams": 25,
"ignoreTelegramsWithRepeatedFlag": false,
"keyringFileXML": "",
"knxSecureSelected": false,
"secureCredentialsMode": "keyring",
"tunnelIASelection": "Auto",
"tunnelIA": "",
"tunnelInterfaceIndividualAddress": "",
"tunnelUserPassword": "",
"tunnelUserId": "",
"autoReconnect": "yes",
"statusUpdateThrottle": "0",
"statusDateTimeFormat": "legacy",
"statusDateTimeCustom": ""
}
]
```