node-red-contrib-knx-ultimate 6.3.18 → 6.3.21

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,6 +6,16 @@
6
6
 
7
7
  # CHANGELOG
8
8
 
9
+ **Version 6.3.21** - August 2026<br/>
10
+
11
+ - **KNX AI — persistent adapter-event history**: every event published by an automatically detected adapter is now normalized into vendor-neutral metadata and appended to a node-specific daily JSONL archive. The archive follows the 10-day KNX retention, guaranteeing at least 24 hours of camera and future adapter events across Node-RED restarts without storing snapshot image data. The editor context card exposes the actual adapter-history directories.<br/>
12
+ - **KNX AI — authoritative historical queries**: web Assistant, Telegram, RedBot and custom CHAT channels now query both the adapter-event archive and the existing KNX daily telegram files. Historical prompts include totals calculated across every stored row in the requested interval plus relevance-selected detail samples, preventing sample size from being reported as the total. Natural-language ranges now include multilingual “last N hours” requests and are bounded by available retention.<br/>
13
+
14
+ **Version 6.3.19** - August 2026<br/>
15
+
16
+ - **KNX AI — conversational multi-step routines**: added coordinated routines such as leaving home, bedtime and cinema mode. KNX AI can now perform a first pass with up to 20 fresh KNX state reads, use the authoritative bus results to prepare an ordered plan of up to 12 validated writes, request one confirmation and then execute the complete routine. After confirmation it waits up to four seconds for immediate matching bus feedback, reports verified and unverified operations without treating missing immediate feedback as a device failure, and dispatches any explicitly requested TTS Ultimate announcement only after execution. Routine details, preliminary readings and execution results are exposed as structured chat metadata. The importable confirmation example, editor help and wiki documentation were updated in EN, IT, DE, FR, ES and zh-CN.<br/>
17
+ - **KNX AI — localized output labels**: corrected the four output-pin labels to use the node-scoped Node-RED translation catalog, so Summary, Anomalies, Assistant and KNX Commands follow the active editor language.<br/>
18
+
9
19
  **Version 6.3.18** - August 2026<br/>
10
20
 
11
21
  - **KNX AI — focused configuration with fixed defaults**: aligned the hidden traffic-analysis defaults to a 600-second history, disk archival enabled for 10 days, automatic summaries disabled, a 120-second analysis window, 5,000 in-memory events and a Top-12 list. The Node-RED project inventory is now always included, while traffic analysis, chat input/output mappings and their obsolete editor controls remain hidden. Documentation language selection was removed because the AI now chooses the appropriate language. Proactive-home switches and advanced proactive settings were removed without legacy-value migration: user-managed AI Education is now the sole configuration surface for this behaviour. Editor help, examples and wiki documentation were updated in EN, IT, DE, FR, ES and zh-CN.<br/>
@@ -4,7 +4,7 @@
4
4
  "type": "tab",
5
5
  "label": "KNX AI - Conversational control",
6
6
  "disabled": false,
7
- "info": "Example of fresh KNX state reads and conversational actuator control with a mandatory confirmation step for writes."
7
+ "info": "Example of fresh KNX state reads, conversational multi-step routines and actuator control with a mandatory confirmation step for writes."
8
8
  },
9
9
  {
10
10
  "id": "cmt_knx_ai_control_setup",
@@ -192,6 +192,45 @@
192
192
  ]
193
193
  ]
194
194
  },
195
+ {
196
+ "id": "inj_knx_ai_control_routine",
197
+ "type": "inject",
198
+ "z": "tab_knx_ai_control",
199
+ "name": "Routine: sto uscendo",
200
+ "props": [
201
+ {
202
+ "p": "payload",
203
+ "v": "Sto uscendo: controlla gli stati aggiornati della casa e prepara una routine sicura per spegnere le luci, abbassare le tapparelle e ridurre il clima. Segnalami porte o finestre aperte.",
204
+ "vt": "str"
205
+ },
206
+ {
207
+ "p": "topic",
208
+ "v": "ask",
209
+ "vt": "str"
210
+ },
211
+ {
212
+ "p": "chatId",
213
+ "v": "demo-chat-1",
214
+ "vt": "str"
215
+ },
216
+ {
217
+ "p": "language",
218
+ "v": "it",
219
+ "vt": "str"
220
+ }
221
+ ],
222
+ "repeat": "",
223
+ "crontab": "",
224
+ "once": false,
225
+ "onceDelay": 0.1,
226
+ "x": 170,
227
+ "y": 340,
228
+ "wires": [
229
+ [
230
+ "node_knx_ai_control"
231
+ ]
232
+ ]
233
+ },
195
234
  {
196
235
  "id": "node_knx_ai_control",
197
236
  "type": "knxUltimateAI",
@@ -282,10 +282,10 @@
282
282
  outputs: 4,
283
283
  outputLabels: function (i) {
284
284
  switch (i) {
285
- case 0: return RED._('knxUltimateAI.outputs.summary');
286
- case 1: return RED._('knxUltimateAI.outputs.anomalies');
287
- case 2: return RED._('knxUltimateAI.outputs.assistant');
288
- case 3: return RED._('knxUltimateAI.outputs.knxCommands');
285
+ case 0: return this._('knxUltimateAI.outputs.summary');
286
+ case 1: return this._('knxUltimateAI.outputs.anomalies');
287
+ case 2: return this._('knxUltimateAI.outputs.assistant');
288
+ case 3: return this._('knxUltimateAI.outputs.knxCommands');
289
289
  }
290
290
  },
291
291
  icon: "node-eye-icon.svg",
@@ -635,6 +635,7 @@
635
635
 
636
636
  const sourceLabels = {
637
637
  knxTraffic: t("knxUltimateAI.messages.chatContextSourceKnxTraffic", "Live KNX summary, anomalies, topology and selected telegrams."),
638
+ adapterHistory: t("knxUltimateAI.messages.chatContextSourceAdapterHistory", "Persistent history of automatically detected adapter events."),
638
639
  etsProject: t("knxUltimateAI.messages.chatContextSourceEtsProject", "ETS semantics and the full Node-RED project inventory."),
639
640
  memoryEducation: t("knxUltimateAI.messages.chatContextSourceMemoryEducation", "Session context, AI Education and bounded home memory."),
640
641
  camerasDocs: t("knxUltimateAI.messages.chatContextSourceCamerasDocs", "Detected cameras and relevant help, README and example snippets."),
@@ -668,7 +669,9 @@
668
669
 
669
670
  const directoryLabels = {
670
671
  archiveRoot: t("knxUltimateAI.messages.chatContextDirectoryRoot", "Telegram archive root"),
671
- nodeArchive: t("knxUltimateAI.messages.chatContextDirectoryNode", "This node's telegram archive")
672
+ nodeArchive: t("knxUltimateAI.messages.chatContextDirectoryNode", "This node's telegram archive"),
673
+ adapterArchiveRoot: t("knxUltimateAI.messages.chatContextDirectoryAdapterRoot", "Adapter event archive root"),
674
+ adapterNodeArchive: t("knxUltimateAI.messages.chatContextDirectoryAdapterNode", "This node's adapter event archive")
672
675
  };
673
676
  (Array.isArray(overview.telegramDirectories) ? overview.telegramDirectories : []).forEach(function (item) {
674
677
  if (!item || !item.path) return;
@@ -677,7 +680,9 @@
677
680
  directoryLabels[item.id] || String(item.id || ""),
678
681
  "",
679
682
  item.path,
680
- t("knxUltimateAI.messages.chatContextDirectoryBadge", "KNX")
683
+ /^adapter/.test(String(item.id || ""))
684
+ ? t("knxUltimateAI.messages.chatContextDirectoryAdapterBadge", "Adapter")
685
+ : t("knxUltimateAI.messages.chatContextDirectoryBadge", "KNX")
681
686
  );
682
687
  });
683
688