node-red-contrib-knx-ultimate 6.1.1 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,8 +6,18 @@
6
6
 
7
7
  # CHANGELOG
8
8
 
9
- **Version 6.1.1** - July 2026<br/>
10
-
9
+ **Version 6.2.0** - July 2026<br/>
10
+
11
+ - **KNX AI — DPT 1 command payload normalization**: fixed actuator writes being rejected when an otherwise valid AI response represented a DPT 1.xxx value as numeric `1`/`0` (including quoted values) instead of a JSON boolean. Exact safe equivalents `true`/`false`, `1`/`0`, `on`/`off` and ETS value labels are now normalized to real booleans before local validation, confirmation and Universal Mode output; other numeric values remain rejected.<br/>
12
+ - **Sidebar package cleanup**: removed the unused **KNX Debug** and **KNX Monitor** sidebar tabs, their dedicated admin endpoints and the Debug logger's global 5,000-entry memory buffer. The independent Flow Bubbles plugin and standard Node-RED logging remain unchanged.<br/>
13
+ - **KNX AI — conversational actuator control**: `ask` inputs can now produce a text reply on the existing AI Assistant output and separately emit locally validated `GroupValue_Write` messages on a new KNX commands output for a KNX Ultimate node in Universal Mode. Actuator control is opt-in and off by default; commands are limited to exact imported ETS group addresses classified as commands, must use the ETS DPT, pass payload/range validation and are capped per request. A second option, enabled by default, previews the exact GA/DPT/payload plan and waits up to five minutes for confirmation from the same chat session before emitting anything; cancellation, stale-plan replacement and validation immediately before output prevent an old or changed plan from reaching KNX. Recent chat turns are kept in bounded per-session RAM history, including detected Telegram chat IDs, and `clear_chat` clears both conversation and pending commands for one session without affecting traffic history. A ready-to-import conversational control example is available under `examples/`, including simulated chat input, confirmation/cancellation and the Universal Mode connection.<br/>
14
+ - **KNX AI — fresh KNX state reads**: natural-language requests for a current value can now emit locally validated `GroupValue_Read` operations for exact objects in the imported ETS catalog, including status and read-only objects. Output 4 supplies the Universal Mode contract (`msg.destination`, exact ETS `msg.dpt`, `msg.event = "GroupValue_Read"` and `msg.readstatus = true`), waits up to six seconds for a fresh response/write telegram, and returns localized decoded values plus `msg.knxAi.readResults` on output 3. Reads are immediate and never require confirmation; the existing command-role and confirmation protections remain mandatory for writes. The conversational example now includes a live room-temperature read.<br/>
15
+ - **KNX AI — request-language confirmation instructions**: whenever validated commands are waiting for confirmation, the assistant now always appends deterministic confirmation/cancellation instructions in the current request language. Explicit message language remains authoritative, followed by the LLM language field, local request-text detection and Telegram/configuration fallback.<br/>
16
+ - **KNX AI — button-ready confirmation metadata**: pending confirmation replies now expose `msg.knxAi.confirmationRequest` with session, expiry, command count and localized `confirm`/`cancel` actions. Each action includes a stable `callbackData` value and a ready-to-send Node-RED message, allowing Telegram and other chat nodes to present buttons instead of requiring typed confirmation.<br/>
17
+ - **KNX AI — input message passthrough**: every AI Assistant and KNX command output now includes an independent copy of the triggering input message in `msg.inputMessage`, preserving Telegram/chat metadata and custom flow properties for downstream routing. Message-cloning and output-dispatch failures are contained and reported so malformed custom properties or downstream runtime errors cannot produce an uncaught exception or rejection.<br/>
18
+ - **KNX AI — streamlined vertical editor tabs**: the editor now opens on a compact **Quick setup** tab containing only the common AI choices (enable, provider, credential, model, KNX commands and confirmation). Capture, storage, detection, AI context and advanced connection controls use the same left-hand vertical tab layout and shared CSS as the Matter editors, with technical fields grouped by topic and no changes to persisted field IDs or configuration values.<br/>
19
+ - **KNX AI — selectable chat adapters and direct Telegrambot wiring**: a new **Chat adapters** tab loads preset input/output mappings from `resources/KNXAIChatAdapterMappings.js` and inserts their editable synchronous JavaScript into two persisted, full-width text boxes. The included `windkh/node-red-contrib-telegrambot` preset accepts receiver text and callback-query events directly, preserves chat/session/language data, converts output 3 directly to the Telegram sender contract and creates localized inline confirmation buttons from `msg.knxAi.confirmationRequest`. Adapter syntax/runtime failures are contained and reported, while unrelated outputs remain protected. A ready-to-import direct receiver/event → KNX AI → sender example is included under `examples/`; the Telegram package remains an optional external dependency.<br/>
20
+ - **KNX AI — chat model compatibility**: the refreshed OpenAI-compatible model list now excludes known legacy completion-only models such as `gpt-3.5-turbo-instruct`, `davinci-002` and `babbage-002`. If a manually entered or third-party model rejects `/v1/chat/completions`, the assistant now reports the selected model and endpoint and suggests a compatible chat model instead of forwarding the provider's opaque error unchanged. Models that accept only the default temperature are retried without the custom `temperature` field, and token-limit fallbacks can be combined in the same request without discarding the prompt or conversation.<br/>
11
21
  - **Control Matter from KNX — contextual flow PIN help**: **Node Input/Output PINs** now reveals the capability-driven **Flow input** section directly below the selector instead of adding a separate editor tab. The section remains hidden while the pins are disabled. Light endpoints now receive contextual, copyable examples for their supported top-level `msg.on`, `msg.dimming`, `msg.color_temperature` and `msg.color` contracts, while non-light endpoints retain their advertised simple and advanced Matter examples.<br/>
12
22
  - **Matter Bridge — contextual flow PIN help**: **Node Input/Output PINs** now sits outside the editor tabs and, when enabled, reveals a contextual **Flow input/output** section directly below it. Copyable Flow → Matter and Matter → Flow examples are filtered to the selected device type, covering lights, covers, thermostats, fans, sensors, alarms and the flow-only robot vacuum while documenting only the message contracts already accepted or emitted by the runtime.<br/>
13
23
 
@@ -0,0 +1,374 @@
1
+ [
2
+ {
3
+ "id": "tab_knx_ai_control",
4
+ "type": "tab",
5
+ "label": "KNX AI - Conversational control",
6
+ "disabled": false,
7
+ "info": "Example of fresh KNX state reads and conversational actuator control with a mandatory confirmation step for writes."
8
+ },
9
+ {
10
+ "id": "cmt_knx_ai_control_setup",
11
+ "type": "comment",
12
+ "z": "tab_knx_ai_control",
13
+ "name": "1. Configure the KNX gateway, import the ETS CSV and configure the LLM/API key in KNX AI",
14
+ "info": "The AI only uses exact group addresses and DPTs found in the ETS catalog imported by the KNX gateway configuration node. Any exact object may be read; only command objects may be written.",
15
+ "x": 490,
16
+ "y": 40,
17
+ "wires": []
18
+ },
19
+ {
20
+ "id": "cmt_knx_ai_control_warning",
21
+ "type": "comment",
22
+ "z": "tab_knx_ai_control",
23
+ "name": "WARNING: reads are immediate; after CONFERMA output 4 writes validated commands to the real KNX bus",
24
+ "info": "Test with safe group addresses. Fresh reads need no confirmation. A pending write plan expires after five minutes and belongs only to the same chatId.",
25
+ "x": 470,
26
+ "y": 80,
27
+ "wires": []
28
+ },
29
+ {
30
+ "id": "cmt_knx_ai_control_input",
31
+ "type": "comment",
32
+ "z": "tab_knx_ai_control",
33
+ "name": "Telegram receiver or the demo buttons",
34
+ "info": "A Telegram receiver can be connected directly when its message contains the text and chat identifier. The demo inject nodes use chatId=demo-chat-1.",
35
+ "x": 190,
36
+ "y": 140,
37
+ "wires": []
38
+ },
39
+ {
40
+ "id": "inj_knx_ai_control_ask",
41
+ "type": "inject",
42
+ "z": "tab_knx_ai_control",
43
+ "name": "1. Richiesta: accendi la luce",
44
+ "props": [
45
+ {
46
+ "p": "payload",
47
+ "v": "Accendi la luce del soggiorno",
48
+ "vt": "str"
49
+ },
50
+ {
51
+ "p": "topic",
52
+ "v": "ask",
53
+ "vt": "str"
54
+ },
55
+ {
56
+ "p": "chatId",
57
+ "v": "demo-chat-1",
58
+ "vt": "str"
59
+ },
60
+ {
61
+ "p": "language",
62
+ "v": "it",
63
+ "vt": "str"
64
+ }
65
+ ],
66
+ "repeat": "",
67
+ "crontab": "",
68
+ "once": false,
69
+ "onceDelay": 0.1,
70
+ "x": 190,
71
+ "y": 180,
72
+ "wires": [
73
+ [
74
+ "node_knx_ai_control"
75
+ ]
76
+ ]
77
+ },
78
+ {
79
+ "id": "inj_knx_ai_control_confirm",
80
+ "type": "inject",
81
+ "z": "tab_knx_ai_control",
82
+ "name": "2. CONFERMA (stessa chat)",
83
+ "props": [
84
+ {
85
+ "p": "payload",
86
+ "v": "CONFERMA",
87
+ "vt": "str"
88
+ },
89
+ {
90
+ "p": "topic",
91
+ "v": "ask",
92
+ "vt": "str"
93
+ },
94
+ {
95
+ "p": "chatId",
96
+ "v": "demo-chat-1",
97
+ "vt": "str"
98
+ },
99
+ {
100
+ "p": "language",
101
+ "v": "it",
102
+ "vt": "str"
103
+ }
104
+ ],
105
+ "repeat": "",
106
+ "crontab": "",
107
+ "once": false,
108
+ "onceDelay": 0.1,
109
+ "x": 180,
110
+ "y": 220,
111
+ "wires": [
112
+ [
113
+ "node_knx_ai_control"
114
+ ]
115
+ ]
116
+ },
117
+ {
118
+ "id": "inj_knx_ai_control_read",
119
+ "type": "inject",
120
+ "z": "tab_knx_ai_control",
121
+ "name": "Lettura: temperatura attuale dal bus",
122
+ "props": [
123
+ {
124
+ "p": "payload",
125
+ "v": "Richiedi al bus KNX la temperatura attuale del soggiorno e dimmi il valore",
126
+ "vt": "str"
127
+ },
128
+ {
129
+ "p": "topic",
130
+ "v": "ask",
131
+ "vt": "str"
132
+ },
133
+ {
134
+ "p": "chatId",
135
+ "v": "demo-chat-1",
136
+ "vt": "str"
137
+ },
138
+ {
139
+ "p": "language",
140
+ "v": "it",
141
+ "vt": "str"
142
+ }
143
+ ],
144
+ "repeat": "",
145
+ "crontab": "",
146
+ "once": false,
147
+ "onceDelay": 0.1,
148
+ "x": 200,
149
+ "y": 300,
150
+ "wires": [
151
+ [
152
+ "node_knx_ai_control"
153
+ ]
154
+ ]
155
+ },
156
+ {
157
+ "id": "inj_knx_ai_control_cancel",
158
+ "type": "inject",
159
+ "z": "tab_knx_ai_control",
160
+ "name": "Oppure ANNULLA (stessa chat)",
161
+ "props": [
162
+ {
163
+ "p": "payload",
164
+ "v": "ANNULLA",
165
+ "vt": "str"
166
+ },
167
+ {
168
+ "p": "topic",
169
+ "v": "ask",
170
+ "vt": "str"
171
+ },
172
+ {
173
+ "p": "chatId",
174
+ "v": "demo-chat-1",
175
+ "vt": "str"
176
+ },
177
+ {
178
+ "p": "language",
179
+ "v": "it",
180
+ "vt": "str"
181
+ }
182
+ ],
183
+ "repeat": "",
184
+ "crontab": "",
185
+ "once": false,
186
+ "onceDelay": 0.1,
187
+ "x": 190,
188
+ "y": 260,
189
+ "wires": [
190
+ [
191
+ "node_knx_ai_control"
192
+ ]
193
+ ]
194
+ },
195
+ {
196
+ "id": "node_knx_ai_control",
197
+ "type": "knxUltimateAI",
198
+ "z": "tab_knx_ai_control",
199
+ "server": "cfg_knx_ai_control",
200
+ "name": "KNX AI with confirmation",
201
+ "topic": "knx-ai",
202
+ "notifyreadrequest": true,
203
+ "notifyresponse": true,
204
+ "notifywrite": true,
205
+ "analysisWindowSec": "120",
206
+ "historyWindowSec": "600",
207
+ "historyStoreToDisk": false,
208
+ "historyStoreRetentionDays": "10",
209
+ "emitIntervalSec": "0",
210
+ "topN": "10",
211
+ "maxEvents": "50000",
212
+ "rateWindowSec": "10",
213
+ "maxTelegramPerSecOverall": "0",
214
+ "maxTelegramPerSecPerGA": "0",
215
+ "flapWindowSec": "30",
216
+ "flapMaxChanges": "0",
217
+ "enablePattern": true,
218
+ "patternMaxLagMs": "1500",
219
+ "patternMinCount": "8",
220
+ "llmEnabled": true,
221
+ "llmProvider": "openai_compat",
222
+ "llmBaseUrl": "https://api.openai.com/v1/chat/completions",
223
+ "llmModel": "gpt-5.4",
224
+ "llmSystemPrompt": "Sei un assistente per un impianto KNX. Rispondi in italiano e proponi solo comandi necessari e coerenti con la richiesta.",
225
+ "llmIncludeRaw": false,
226
+ "llmIncludeFlowContext": true,
227
+ "llmIncludeDocsSnippets": true,
228
+ "llmDocsLanguage": "it",
229
+ "llmAllowKnxCommands": true,
230
+ "llmRequireCommandConfirmation": true,
231
+ "x": 520,
232
+ "y": 220,
233
+ "wires": [
234
+ [
235
+ "dbg_knx_ai_control_summary"
236
+ ],
237
+ [
238
+ "dbg_knx_ai_control_anomalies"
239
+ ],
240
+ [
241
+ "dbg_knx_ai_control_reply"
242
+ ],
243
+ [
244
+ "dbg_knx_ai_control_command",
245
+ "node_knx_ai_control_universal"
246
+ ]
247
+ ]
248
+ },
249
+ {
250
+ "id": "dbg_knx_ai_control_summary",
251
+ "type": "debug",
252
+ "z": "tab_knx_ai_control",
253
+ "name": "1 - Summary",
254
+ "active": false,
255
+ "tosidebar": true,
256
+ "console": false,
257
+ "tostatus": false,
258
+ "complete": "payload",
259
+ "targetType": "msg",
260
+ "x": 760,
261
+ "y": 140,
262
+ "wires": []
263
+ },
264
+ {
265
+ "id": "dbg_knx_ai_control_anomalies",
266
+ "type": "debug",
267
+ "z": "tab_knx_ai_control",
268
+ "name": "2 - Anomalies",
269
+ "active": false,
270
+ "tosidebar": true,
271
+ "console": false,
272
+ "tostatus": false,
273
+ "complete": "payload",
274
+ "targetType": "msg",
275
+ "x": 770,
276
+ "y": 180,
277
+ "wires": []
278
+ },
279
+ {
280
+ "id": "dbg_knx_ai_control_reply",
281
+ "type": "debug",
282
+ "z": "tab_knx_ai_control",
283
+ "name": "3 - Risposta/anteprima per Telegram",
284
+ "active": true,
285
+ "tosidebar": true,
286
+ "console": false,
287
+ "tostatus": true,
288
+ "complete": "true",
289
+ "targetType": "full",
290
+ "x": 840,
291
+ "y": 220,
292
+ "wires": []
293
+ },
294
+ {
295
+ "id": "dbg_knx_ai_control_command",
296
+ "type": "debug",
297
+ "z": "tab_knx_ai_control",
298
+ "name": "4 - Operazione KNX (lettura/scrittura)",
299
+ "active": true,
300
+ "tosidebar": true,
301
+ "console": false,
302
+ "tostatus": true,
303
+ "complete": "true",
304
+ "targetType": "full",
305
+ "x": 820,
306
+ "y": 260,
307
+ "wires": []
308
+ },
309
+ {
310
+ "id": "node_knx_ai_control_universal",
311
+ "type": "knxUltimate",
312
+ "z": "tab_knx_ai_control",
313
+ "server": "cfg_knx_ai_control",
314
+ "topic": "0/0/0",
315
+ "dpt": "1.001",
316
+ "initialread": false,
317
+ "notifyreadrequest": false,
318
+ "notifyresponse": true,
319
+ "notifywrite": true,
320
+ "notifyreadrequestalsorespondtobus": false,
321
+ "notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized": "",
322
+ "listenallga": true,
323
+ "setTopicType": "listenAllGA",
324
+ "name": "KNX Ultimate - Universal Mode",
325
+ "outputtype": "write",
326
+ "outputRBE": false,
327
+ "inputRBE": false,
328
+ "x": 820,
329
+ "y": 340,
330
+ "wires": [
331
+ [
332
+ "dbg_knx_ai_control_bus"
333
+ ]
334
+ ]
335
+ },
336
+ {
337
+ "id": "dbg_knx_ai_control_bus",
338
+ "type": "debug",
339
+ "z": "tab_knx_ai_control",
340
+ "name": "Telegrammi KNX ricevuti",
341
+ "active": true,
342
+ "tosidebar": true,
343
+ "console": false,
344
+ "tostatus": false,
345
+ "complete": "true",
346
+ "targetType": "full",
347
+ "x": 1070,
348
+ "y": 340,
349
+ "wires": []
350
+ },
351
+ {
352
+ "id": "cmt_knx_ai_control_output",
353
+ "type": "comment",
354
+ "z": "tab_knx_ai_control",
355
+ "name": "Replace Debug 3 with your Telegram sender node",
356
+ "info": "The third output carries the text in msg.payload. Fresh reads are returned after KNX feedback and detailed in msg.knxAi.readResults. When a write confirmation is pending, msg.knxAi.confirmationRequest contains localized button labels, callbackData values and ready-to-send confirm/cancel messages. Every message on outputs 3 and 4 also preserves the triggering input in msg.inputMessage.",
357
+ "x": 850,
358
+ "y": 100,
359
+ "wires": []
360
+ },
361
+ {
362
+ "id": "cfg_knx_ai_control",
363
+ "type": "knxUltimate-config",
364
+ "z": "",
365
+ "host": "224.0.23.12",
366
+ "port": "3671",
367
+ "physAddr": "15.15.202",
368
+ "suppressACKRequest": false,
369
+ "csv": "",
370
+ "KNXEthInterface": "Auto",
371
+ "KNXEthInterfaceManuallyInput": "",
372
+ "autoReconnect": "yes"
373
+ }
374
+ ]
@@ -0,0 +1,221 @@
1
+ [
2
+ {
3
+ "id": "tab_knx_ai_telegram",
4
+ "type": "tab",
5
+ "label": "KNX AI - Telegrambot direct chat",
6
+ "disabled": false,
7
+ "info": "Direct chat wiring for windkh/node-red-contrib-telegrambot using the KNX AI chat-adapter preset."
8
+ },
9
+ {
10
+ "id": "comment_knx_ai_telegram_setup",
11
+ "type": "comment",
12
+ "z": "tab_knx_ai_telegram",
13
+ "name": "1. Open KNX AI → Chat adapters → select windkh/node-red-contrib-telegrambot",
14
+ "info": "Selecting the preset inserts the editable input and output mappings. Then configure the KNX gateway, import the ETS CSV, set the LLM credentials and configure the Telegram bot token.",
15
+ "x": 500,
16
+ "y": 40,
17
+ "wires": []
18
+ },
19
+ {
20
+ "id": "comment_knx_ai_telegram_warning",
21
+ "type": "comment",
22
+ "z": "tab_knx_ai_telegram",
23
+ "name": "Reads are immediate; actuator writes require the Telegram confirmation button",
24
+ "info": "Use safe KNX group addresses while testing. Confirmation is enabled by default and pending write plans expire after five minutes.",
25
+ "x": 500,
26
+ "y": 80,
27
+ "wires": []
28
+ },
29
+ {
30
+ "id": "telegram_receiver_knx_ai",
31
+ "type": "telegram receiver",
32
+ "z": "tab_knx_ai_telegram",
33
+ "name": "Telegram text",
34
+ "bot": "telegram_bot_knx_ai",
35
+ "saveDataDir": "",
36
+ "filterCommands": false,
37
+ "x": 170,
38
+ "y": 180,
39
+ "wires": [
40
+ [
41
+ "node_knx_ai_telegram"
42
+ ],
43
+ []
44
+ ]
45
+ },
46
+ {
47
+ "id": "telegram_callback_knx_ai",
48
+ "type": "telegram event",
49
+ "z": "tab_knx_ai_telegram",
50
+ "name": "Confirm / Cancel buttons",
51
+ "bot": "telegram_bot_knx_ai",
52
+ "event": "callback_query",
53
+ "autoanswer": true,
54
+ "x": 190,
55
+ "y": 240,
56
+ "wires": [
57
+ [
58
+ "node_knx_ai_telegram"
59
+ ]
60
+ ]
61
+ },
62
+ {
63
+ "id": "node_knx_ai_telegram",
64
+ "type": "knxUltimateAI",
65
+ "z": "tab_knx_ai_telegram",
66
+ "server": "cfg_knx_ai_telegram",
67
+ "name": "KNX AI + Telegram adapter",
68
+ "topic": "knx-ai",
69
+ "notifyreadrequest": true,
70
+ "notifyresponse": true,
71
+ "notifywrite": true,
72
+ "analysisWindowSec": "120",
73
+ "historyWindowSec": "600",
74
+ "historyStoreToDisk": false,
75
+ "historyStoreRetentionDays": "10",
76
+ "emitIntervalSec": "0",
77
+ "topN": "10",
78
+ "maxEvents": "50000",
79
+ "rateWindowSec": "10",
80
+ "maxTelegramPerSecOverall": "0",
81
+ "maxTelegramPerSecPerGA": "0",
82
+ "flapWindowSec": "30",
83
+ "flapMaxChanges": "0",
84
+ "enablePattern": true,
85
+ "patternMaxLagMs": "1500",
86
+ "patternMinCount": "8",
87
+ "llmEnabled": true,
88
+ "llmProvider": "openai_compat",
89
+ "llmBaseUrl": "https://api.openai.com/v1/chat/completions",
90
+ "llmModel": "gpt-5.4",
91
+ "llmSystemPrompt": "Sei un assistente per un impianto KNX. Rispondi nella lingua dell'utente.",
92
+ "llmIncludeRaw": false,
93
+ "llmIncludeFlowContext": true,
94
+ "llmIncludeDocsSnippets": true,
95
+ "llmDocsLanguage": "it",
96
+ "llmAllowKnxCommands": true,
97
+ "llmRequireCommandConfirmation": true,
98
+ "chatAdapterPreset": "none",
99
+ "chatInputCode": "",
100
+ "chatOutputCode": "",
101
+ "x": 500,
102
+ "y": 210,
103
+ "wires": [
104
+ [],
105
+ [],
106
+ [
107
+ "telegram_sender_knx_ai",
108
+ "debug_knx_ai_telegram_reply"
109
+ ],
110
+ [
111
+ "node_knx_ai_telegram_universal"
112
+ ]
113
+ ]
114
+ },
115
+ {
116
+ "id": "telegram_sender_knx_ai",
117
+ "type": "telegram sender",
118
+ "z": "tab_knx_ai_telegram",
119
+ "name": "Telegram reply",
120
+ "bot": "telegram_bot_knx_ai",
121
+ "haserroroutput": false,
122
+ "outputs": 1,
123
+ "x": 790,
124
+ "y": 180,
125
+ "wires": [
126
+ []
127
+ ]
128
+ },
129
+ {
130
+ "id": "debug_knx_ai_telegram_reply",
131
+ "type": "debug",
132
+ "z": "tab_knx_ai_telegram",
133
+ "name": "Adapted Telegram msg",
134
+ "active": true,
135
+ "tosidebar": true,
136
+ "console": false,
137
+ "tostatus": false,
138
+ "complete": "true",
139
+ "targetType": "full",
140
+ "x": 810,
141
+ "y": 230,
142
+ "wires": []
143
+ },
144
+ {
145
+ "id": "node_knx_ai_telegram_universal",
146
+ "type": "knxUltimate",
147
+ "z": "tab_knx_ai_telegram",
148
+ "server": "cfg_knx_ai_telegram",
149
+ "topic": "0/0/0",
150
+ "dpt": "1.001",
151
+ "initialread": false,
152
+ "notifyreadrequest": false,
153
+ "notifyresponse": true,
154
+ "notifywrite": true,
155
+ "notifyreadrequestalsorespondtobus": false,
156
+ "notifyreadrequestalsorespondtobusdefaultvalueifnotinitialized": "",
157
+ "listenallga": true,
158
+ "setTopicType": "listenAllGA",
159
+ "name": "KNX Ultimate - Universal Mode",
160
+ "outputtype": "write",
161
+ "outputRBE": false,
162
+ "inputRBE": false,
163
+ "x": 800,
164
+ "y": 300,
165
+ "wires": [
166
+ [
167
+ "debug_knx_ai_telegram_bus"
168
+ ]
169
+ ]
170
+ },
171
+ {
172
+ "id": "debug_knx_ai_telegram_bus",
173
+ "type": "debug",
174
+ "z": "tab_knx_ai_telegram",
175
+ "name": "KNX telegrams",
176
+ "active": true,
177
+ "tosidebar": true,
178
+ "console": false,
179
+ "tostatus": false,
180
+ "complete": "true",
181
+ "targetType": "full",
182
+ "x": 1050,
183
+ "y": 300,
184
+ "wires": []
185
+ },
186
+ {
187
+ "id": "telegram_bot_knx_ai",
188
+ "type": "telegram bot",
189
+ "botname": "Configure your BotFather bot",
190
+ "usernames": "",
191
+ "chatids": "",
192
+ "baseapiurl": "",
193
+ "updatemode": "polling",
194
+ "pollinterval": "300",
195
+ "usesocks": false,
196
+ "sockshost": "",
197
+ "socksport": "",
198
+ "socksusername": "anonymous",
199
+ "sockspassword": "",
200
+ "bothost": "",
201
+ "localbotport": "8443",
202
+ "publicbotport": "8443",
203
+ "privatekey": "",
204
+ "certificate": "",
205
+ "useselfsignedcertificate": false,
206
+ "sslterminated": false,
207
+ "verboselogging": false
208
+ },
209
+ {
210
+ "id": "cfg_knx_ai_telegram",
211
+ "type": "knxUltimate-config",
212
+ "host": "224.0.23.12",
213
+ "port": "3671",
214
+ "physAddr": "15.15.202",
215
+ "suppressACKRequest": false,
216
+ "csv": "",
217
+ "KNXEthInterface": "Auto",
218
+ "KNXEthInterfaceManuallyInput": "",
219
+ "autoReconnect": "yes"
220
+ }
221
+ ]