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

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.
@@ -2,14 +2,19 @@
2
2
  "knxUltimateAI": {
3
3
  "title": "KNX AI (Analisi Traffico)",
4
4
  "sections": {
5
- "quickSetup": "Configurazione rapida",
6
- "capture": "Cattura",
7
- "storage": "Storico e Summary",
8
- "detection": "Rilevamento e Avvisi",
5
+ "groupAssistant": "Assistente AI",
6
+ "groupChatHome": "Conversazioni e casa",
7
+ "groupKnxAnalysis": "Analisi traffico KNX",
8
+ "quickSetup": "Configurazione assistente",
9
+ "capture": "Telegrammi dal bus",
10
+ "storage": "Storico e riepiloghi KNX",
11
+ "detection": "Anomalie e pattern",
9
12
  "llmConnection": "Connessione Assistente AI",
10
- "llmContext": "Contesto Assistente AI",
11
- "chatAdapter": "Adattatori chat",
12
- "advanced": "AI avanzata"
13
+ "llmContext": "Conoscenza e contesto AI",
14
+ "chatAdapter": "Canali chat",
15
+ "homeIntelligence": "Casa proattiva e memoria",
16
+ "homeIntelligenceAdvanced": "Impostazioni proattive avanzate",
17
+ "advanced": "Provider e limiti"
13
18
  },
14
19
  "properties": {
15
20
  "server": "Gateway",
@@ -46,6 +51,14 @@
46
51
  "chatAdapterPreset": "Preset adattatore",
47
52
  "chatInputCode": "Mappatura ingresso (chat → KNX AI)",
48
53
  "chatOutputCode": "Mappatura uscita (KNX AI → chat)",
54
+ "proactiveEnabled": "Abilita notifiche domestiche proattive",
55
+ "proactiveRecipient": "Destinatario principale / chat ID",
56
+ "proactiveOpenMinutes": "Avvisa dopo apertura (minuti)",
57
+ "proactiveCooldownMinutes": "Intervallo prima di ripetere (minuti)",
58
+ "proactiveQuietStart": "Inizio ore silenziose",
59
+ "proactiveQuietEnd": "Fine ore silenziose",
60
+ "homeMemoryMaxKb": "Dimensione massima memoria casa (KB)",
61
+ "aiEducation": "Educazione AI (gestita dall'utente)",
49
62
  "llmIncludeDocsSnippets": "Includi estratti documentazione (help/README/esempi)",
50
63
  "llmDocsLanguage": "Lingua documentazione"
51
64
  },
@@ -82,13 +95,18 @@
82
95
  "ollamaInstallSteps": "1) Apri la libreria, scegli un modello e copiane il nome (es. llama3.1). 2) Inserisci il nome nel campo Modello e clicca Installalo.",
83
96
  "ollamaStartedAuto": "Server Ollama avviato automaticamente.",
84
97
  "chatAdapterIntro": "Scegli un preset per inserire il codice di mappatura in ingresso e in uscita. La lista viene caricata dal file degli adattatori chat incluso nel pacchetto; il codice generato resta modificabile.",
85
- "chatAdapterCodeHelp": "Le mappature sono sincrone. Restituisci msg per continuare oppure nessun valore per scartarlo. Gli errori vengono intercettati e segnalati senza arrestare Node-RED."
98
+ "chatAdapterCodeHelp": "Le mappature sono sincrone. Restituisci msg per continuare oppure nessun valore per scartarlo. Gli errori vengono intercettati e segnalati senza arrestare Node-RED.",
99
+ "homeIntelligenceIntro": "Il nodo crea un modello ETS semantico multilingue e può avvisare la chat quando una persiana, finestra o porta riconosciuta con sufficiente affidabilità rimane aperta. Non invia mai autonomamente comandi KNX.",
100
+ "aiEducationHelp": "Solo l'utente può modificare questa sezione. L'AI la legge come istruzione autorevole, ma la memoria appresa non può mai sovrascriverla. Massimo 16.000 caratteri.",
101
+ "homeMemoryLimitHelp": "La memoria Markdown viene riscritta atomicamente ogni 15 minuti ed è sempre limitata tra 64 e 1.024 KB. Le osservazioni vecchie vengono eliminate prima delle abitudini e degli oggetti semantici."
86
102
  },
87
103
  "placeholder": {
88
104
  "llmBaseUrl": "https://api.openai.com/v1/chat/completions (o endpoint compatibile)",
89
105
  "llmApiKey": "Incolla la chiave (inizia con sk-)",
90
106
  "llmModel": "es. gpt-4o-mini",
91
- "llmSystemPrompt": "Opzionale. Lascia vuoto per default."
107
+ "llmSystemPrompt": "Opzionale. Lascia vuoto per default.",
108
+ "proactiveRecipient": "Opzionale: chat ID Telegram; altrimenti viene ricordata l'ultima sessione chat",
109
+ "aiEducation": "Esempio: non avvisarmi tra le 23:00 e le 07:00. La persiana dello studio può restare aperta di notte."
92
110
  },
93
111
  "sidebar": {
94
112
  "ui": {
@@ -1,7 +1,7 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateAI">
2
2
  此节点会监听所选 KNX Ultimate 网关上的**所有 KNX 电报**,生成流量统计、检测异常,并可选调用 LLM。
3
3
 
4
- 编辑器各部分使用与 Matter 节点相同的左侧垂直选项卡。**快速配置**仅包含常用 AI 选项(启用、提供商、凭据、模型、KNX 状态读取/执行器控制和确认);技术参数按主题归入其他选项卡。
4
+ 编辑器使用三个主要折叠面板:**AI 助手**包含配置、知识/上下文以及提供商限制;**对话与家庭**包含聊天渠道、主动家庭和受限记忆;**KNX 总线流量分析**包含总线报文、历史/摘要以及异常/模式。打开一个主要面板即可同时看到其中全部相关选项。已保存字段的 ID 和值保持不变。
5
5
 
6
6
  ## 输出
7
7
  1. **摘要/统计**(`msg.payload` 为 JSON)
@@ -14,7 +14,7 @@
14
14
  ## 命令(输入)
15
15
  发送 `msg.topic`:
16
16
  - `summary`(或空):立即输出摘要
17
- - `reset`:清空内部历史与计数器
17
+ - `reset`:清空内部历史、计数器和已学习的家庭记忆;AI 教育保持不变
18
18
  - `ask`:向已配置的 LLM 提问
19
19
  - `confirm` / `cancel`:无需再次调用 LLM,即可确认或取消待处理的 KNX 命令
20
20
  - `clear_chat`:清除当前会话的对话记忆
@@ -35,6 +35,40 @@
35
35
 
36
36
  随附的 **windkh/node-red-contrib-telegrambot** 预设遵循该包的 receiver/sender 消息约定。把 `telegram receiver` 直接连接到 KNX AI,并把输出 3 直接连接到 `telegram sender`。如需内联确认按钮,还要把配置为 `callback_query` 的 `telegram event` 连接到同一个 KNX AI 输入。输入映射会提取 `msg.payload.content`、`msg.payload.chatId` 和 Telegram 语言;输出映射会创建所需的 `msg.payload.chatId`、`type` 和 `content`,并在写入等待确认时从 `msg.knxAi.confirmationRequest` 添加 `options.reply_markup`。Telegram 包仍是独立的可选依赖项。
37
37
 
38
+ ## 主动家庭智能与有限记忆
39
+ **对话与家庭**中的**主动家庭与记忆**子部分以可选方式启用主动通知。节点会根据 ETS 层级、名称、角色和 DPT,使用意大利语、英语、德语、法语、西班牙语和中文术语,为卷帘、窗户、门、照明、温度、气候、占用和报警建立确定性的语义模型。首个主动检测器只监视可靠识别且非命令的卷帘/窗户/门状态。超过配置的打开时间且当前不在静默时段时,输出 3 会发送本地化消息,并设置 `msg.knxAi.type = "proactive_notification"`。节点绝不会主动使用输出 4,也不会自行修改 KNX;用户之后提出的任何操作仍须经过正常的校验与确认。
40
+
41
+ 最近一次聊天会话会被记为主人,也可以通过**主要接收者 / 聊天 ID**明确指定。合成的 `msg.inputMessage` 会保留接收者,使 Telegram 适配器能够发送主动通知。冷却时间和每小时最多三条主动通知可防止消息泛滥。
42
+
43
+ 学习到的参考文件会在启动时从 `<userDir>/knxai/memory/knxai-home-memory-<node-id>.md` 加载,每 15 分钟以原子方式重写,并严格限制在可配置的 64–1,024 KB(默认 256 KB)。最多保留 120 条重要观察、80 条聚合习惯、80 条通知和 300 个 ETS 语义对象,绝不会保存无限的原始报文流。较旧且优先级较低的项目会先被删除。**AI 教育**最多 16,000 个字符,并且始终来自节点配置:AI 可以将其作为权威指导读取,但不能修改或覆盖。如果已填写 AI 教育但 LLM 无法进行评估,候选通知会被抑制,以免违反用户指导。
44
+
45
+ ## 实用配置示例
46
+ 此示例创建一个简洁的助手:它会报告重要的长时间开启状态,但允许书房卷帘保持开启。
47
+
48
+ | 编辑器字段 | 示例值 | 结果 |
49
+ |---|---|---|
50
+ | **启用主动家庭通知** (`proactiveEnabled`) | 启用 | 节点评估可靠识别的卷帘、窗户和门开启状态。 |
51
+ | **主要接收者 / 聊天 ID** (`proactiveRecipient`) | `123456789` | 主动消息发送到该聊天;留空则记住最近一次 Ask 会话。 |
52
+ | **开启多久后通知** (`proactiveOpenMinutes`) | `120` | 开启两小时后评估是否需要通知。 |
53
+ | **静默时间开始 / 结束** | `23:00` / `07:00` | 夜间不会发送主动消息。 |
54
+ | **重复冷却时间** (`proactiveCooldownMinutes`) | `360` | 同一对象六小时内不会再次通知。 |
55
+ | **家庭记忆文件上限** (`homeMemoryMaxKb`) | `256` | 此节点的 Markdown 参考文件始终小于 256 KB。 |
56
+
57
+ **AI 教育** (`aiEducation`) 示例:
58
+
59
+ ```text
60
+ 称呼我为 Alex,并使用与我相同的语言回答。
61
+ 除非我要求技术细节,否则回答要简短。
62
+ 书房卷帘白天可以保持开启:不要因此通知我。
63
+ 其他卷帘、窗户或门异常长时间开启时请通知我。
64
+ 如果“客厅灯”指向多个灯,请先询问我具体是哪一个。
65
+ 在 KNX 状态对象确认之前,绝不要声称执行器已经改变。
66
+ ```
67
+
68
+ 使用这些设置后,客厅卷帘开启 120 分钟时,输出 3 可以发送本地化的 `proactive_notification`;而书房卷帘的候选通知会根据 AI 教育被抑制。如果 Alex 随后要求关闭客厅卷帘,KNX AI 会准备准确的 ETS 命令,但在输出 4 前仍执行正常的验证与确认。
69
+
70
+ 请使用清晰的 ETS 层级和对象名称,并正确设置状态/命令角色。AI 教育可以个性化决策和措辞,但不能虚构组地址、更改 DPT 或绕过 KNX 验证。
71
+
38
72
  ## 快速工作流程:KNX 控制
39
73
  1. 将 ETS CSV 导入网关,并配置 LLM 提供商、模型和凭据。
40
74
  2. 启用 **LLM 助手**和 **读取 KNX 状态并控制执行器**;保持确认选项启用。
@@ -90,6 +124,13 @@
90
124
  - **适配器预设**:从随附的聊天适配器文件加载一对输入/输出映射。选择预设会有意替换两个文本框,之后仍可编辑代码。
91
125
  - **输入映射(聊天 → KNX AI)**:在处理输入命令前运行的同步 JavaScript。
92
126
  - **输出映射(KNX AI → 聊天)**:仅应用于输出 3 消息的同步 JavaScript。
127
+ - **启用主动家庭通知**:可选检测器,仅处理可靠识别的卷帘、窗户和门开启状态;绝不会自主写入 KNX。
128
+ - **主要接收者 / 聊天 ID**:主动消息的可选目标;未填写时记住最近一次 Ask 会话。
129
+ - **开启多久后通知(分钟)**:考虑发送主动通知前的开启时长阈值。
130
+ - **静默时间开始 / 结束**:每天禁止主动消息的时间段。
131
+ - **AI 教育**:仅由用户管理的权威指导,AI 可以读取但永远不能修改。
132
+ - **重复冷却时间(分钟)**:同一对象再次通知前的最短间隔。
133
+ - **家庭记忆文件上限(KB)**:64 到 1,024 KB 的硬限制;默认 256 KB。
93
134
  - 如果启用了磁盘归档,**Ask** 默认会查询该归档:若问题里写了明确日期/时间范围就按其查询,否则默认查询最近 24 小时并补上当前 RAM 事件。
94
135
  - **Include raw payload hex**:在提示词中包含原始十六进制 payload。
95
136
  - **包含 Node-RED 项目清单**:在提示词中加入整个 Node-RED 项目的节点清单,不仅包含 KNX 节点,也包含 function/change/inject/template 等在内且带有 KNX 逻辑或组地址的有用节点。
@@ -2,14 +2,19 @@
2
2
  "knxUltimateAI": {
3
3
  "title": "KNX AI (Traffic Analyzer)",
4
4
  "sections": {
5
- "quickSetup": "快速配置",
6
- "capture": "Capture",
7
- "storage": "历史与摘要",
8
- "detection": "检测与告警",
5
+ "groupAssistant": "AI 助手",
6
+ "groupChatHome": "对话与家庭",
7
+ "groupKnxAnalysis": "KNX 总线流量分析",
8
+ "quickSetup": "助手配置",
9
+ "capture": "总线报文输入",
10
+ "storage": "KNX 历史与摘要",
11
+ "detection": "异常与模式",
9
12
  "llmConnection": "AI 助手连接",
10
- "llmContext": "AI 助手上下文",
11
- "chatAdapter": "聊天适配器",
12
- "advanced": "AI 高级设置"
13
+ "llmContext": "AI 知识与上下文",
14
+ "chatAdapter": "聊天渠道",
15
+ "homeIntelligence": "主动家庭与记忆",
16
+ "homeIntelligenceAdvanced": "高级主动通知设置",
17
+ "advanced": "提供商与限制"
13
18
  },
14
19
  "properties": {
15
20
  "server": "Gateway",
@@ -46,6 +51,14 @@
46
51
  "chatAdapterPreset": "适配器预设",
47
52
  "chatInputCode": "输入映射(聊天 → KNX AI)",
48
53
  "chatOutputCode": "输出映射(KNX AI → 聊天)",
54
+ "proactiveEnabled": "启用主动家庭通知",
55
+ "proactiveRecipient": "主要接收者 / 聊天 ID",
56
+ "proactiveOpenMinutes": "保持打开多少分钟后通知",
57
+ "proactiveCooldownMinutes": "重复通知冷却时间(分钟)",
58
+ "proactiveQuietStart": "静默时段开始",
59
+ "proactiveQuietEnd": "静默时段结束",
60
+ "homeMemoryMaxKb": "家庭记忆文件最大值(KB)",
61
+ "aiEducation": "AI 教育(由用户管理)",
49
62
  "llmIncludeDocsSnippets": "Include documentation snippets (help/README/examples)",
50
63
  "llmDocsLanguage": "Docs language"
51
64
  },
@@ -74,13 +87,18 @@
74
87
  "ollamaInstallSteps": "1) Open the model library and copy the model name (for example llama3.1). 2) Put the name in the Model field and click Install it.",
75
88
  "ollamaStartedAuto": "Ollama server started automatically.",
76
89
  "chatAdapterIntro": "选择预设即可插入输入和输出映射代码。列表从随包提供的聊天适配器文件加载;生成的代码仍可编辑。",
77
- "chatAdapterCodeHelp": "映射同步运行。返回 msg 以继续,或不返回值以丢弃消息。错误会被捕获并报告,不会停止 Node-RED。"
90
+ "chatAdapterCodeHelp": "映射同步运行。返回 msg 以继续,或不返回值以丢弃消息。错误会被捕获并报告,不会停止 Node-RED。",
91
+ "homeIntelligenceIntro": "节点会创建多语言 ETS 语义模型,并在可靠识别的卷帘、窗户或门长时间保持打开时主动通知聊天。它绝不会自行发送 KNX 命令。",
92
+ "aiEducationHelp": "只有用户可以编辑此部分。AI 会把它作为权威指导读取,但学习到的记忆绝不能覆盖它。最多 16,000 个字符。",
93
+ "homeMemoryLimitHelp": "Markdown 记忆每 15 分钟以原子方式重写,并始终限制在 64 到 1,024 KB。达到限制时会先删除较旧的观察,再删除习惯和语义对象。"
78
94
  },
79
95
  "placeholder": {
80
96
  "llmBaseUrl": "https://api.openai.com/v1/chat/completions (or your compatible endpoint)",
81
97
  "llmApiKey": "Paste API key (starts with sk-)",
82
98
  "llmModel": "e.g. gpt-4o-mini",
83
- "llmSystemPrompt": "Optional. Leave empty for default."
99
+ "llmSystemPrompt": "Optional. Leave empty for default.",
100
+ "proactiveRecipient": "可选:Telegram 聊天 ID;留空则记住最近一次聊天会话",
101
+ "aiEducation": "示例:23:00 到 07:00 之间不要通知我。书房卷帘夜间可以保持打开。"
84
102
  },
85
103
  "sidebar": {
86
104
  "ui": {