node-red-contrib-knx-ultimate 6.3.21 → 6.3.22
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 +10 -0
- package/nodes/knxUltimateAI.html +78 -10
- package/nodes/knxUltimateAI.js +209 -94
- package/nodes/locales/de/knxUltimateAI.html +5 -3
- package/nodes/locales/de/knxUltimateAI.json +13 -3
- package/nodes/locales/en/knxUltimateAI.html +5 -3
- package/nodes/locales/en/knxUltimateAI.json +13 -3
- package/nodes/locales/es/knxUltimateAI.html +5 -3
- package/nodes/locales/es/knxUltimateAI.json +13 -3
- package/nodes/locales/fr/knxUltimateAI.html +5 -3
- package/nodes/locales/fr/knxUltimateAI.json +13 -3
- package/nodes/locales/it/knxUltimateAI.html +5 -3
- package/nodes/locales/it/knxUltimateAI.json +13 -3
- package/nodes/locales/zh-CN/knxUltimateAI.html +5 -3
- package/nodes/locales/zh-CN/knxUltimateAI.json +13 -3
- package/package.json +1 -1
|
@@ -31,7 +31,7 @@ Every Ask/chat session keeps its last 8 turns and up to 20 explicit long-term in
|
|
|
31
31
|
For DPT 1.xxx writes, safe AI equivalents `true`/`false`, `1`/`0`, and `on`/`off` are normalized to a real boolean before local validation and output.
|
|
32
32
|
|
|
33
33
|
### Fresh KNX reads
|
|
34
|
-
When the user explicitly asks for a fresh/current state, the AI may query exact objects from the imported ETS catalog, including status and other read-only objects. Output 4 emits `msg.destination`, `msg.dpt`, `msg.event = "GroupValue_Read"`, and `msg.readstatus = true`. The node waits up to 6 seconds for each `GroupValue_Response` or fresh write, then returns the decoded values on output 3 and exposes details in `msg.knxAi.readResults`. Reads never require confirmation and never become writes.
|
|
34
|
+
When the user explicitly asks for a fresh/current state, the AI may query exact objects from the imported ETS catalog, including status and other read-only objects. Output 4 emits `msg.destination`, `msg.dpt`, `msg.event = "GroupValue_Read"`, and `msg.readstatus = true`. The node waits up to 6 seconds for each `GroupValue_Response` or fresh write, then returns the decoded values on output 3 and exposes details in `msg.knxAi.readResults`. Reads never require confirmation and never become writes. If a small local model omits the operation discriminator and payload, exact ETS items are safely normalized as reads; an item containing a payload remains a validated write.
|
|
35
35
|
|
|
36
36
|
### Conversational multi-step routines
|
|
37
37
|
Requests such as “I’m leaving”, “Good night”, or “Cinema mode” can coordinate a state-aware routine without a new editor option. In the first LLM pass, only exact ETS reads are accepted (up to 20); KNX AI sends them and supplies the fresh GA/DPT/value results to a second isolated planning pass. That pass may prepare up to 12 validated writes, but cannot request another read cycle. With confirmation enabled, the complete plan has one localized confirmation and no write or requested TTS announcement is emitted beforehand. After confirmation every write is revalidated, forwarded in order, and observed for up to 4 seconds for matching immediate bus feedback. The final reply distinguishes observed feedback from operations without immediate feedback—absence of feedback is not reported as device failure. Routine details are exposed in `msg.knxAi.routine`, `readResults`, `verifiedCount`, and `unverifiedCount`.
|
|
@@ -59,7 +59,7 @@ When the optional `node-red-contrib-tts-ultimate` package is installed, it appea
|
|
|
59
59
|
Only an explicit request in the current chat message can create an announcement. KNX AI sends the exact text directly to the selected node as `msg.payload`, with `msg.topic = "knx_ai_announcement"`; no intermediate flow wiring is required. TTS Ultimate then handles the configured Sonos player, voice, volume, hailing and queue. Persistent context, AI Education, camera content and inferred events never trigger speech by themselves.
|
|
60
60
|
|
|
61
61
|
### Chat context overview
|
|
62
|
-
The node editor shows a compact card summarizing the sources available to the chat: live and archived KNX traffic, persistent adapter events, ETS semantics and the Node-RED project, session and home memory, AI Education
|
|
62
|
+
The node editor shows a compact card summarizing the sources available to the chat: live and archived KNX traffic, persistent adapter events, ETS semantics and the Node-RED project, session and home memory, AI Education and detected cameras. It also shows the maximum operational context and the actual UTF-8 size of the last chat prompt; exact provider input tokens are used when reported, otherwise the token count is marked as estimated. The card lists the absolute KNX telegram and adapter-event archive directories and the `YYYY-MM-DD.jsonl` daily-file pattern.
|
|
63
63
|
|
|
64
64
|
## Education-driven proactive home intelligence and bounded memory
|
|
65
65
|
From ETS hierarchy, names, roles and DPTs, the node builds a deterministic semantic model for covers, windows, doors, lights, temperature, climate, occupancy and alarms using Italian, English, German, French, Spanish and Chinese terms. Its proactive detector watches only reliably recognized non-command cover/window/door states.
|
|
@@ -120,7 +120,7 @@ All fields exposed in the KNX AI editor are listed below.
|
|
|
120
120
|
- **Ask for confirmation before sending KNX commands**: Enabled by default. Shows the validated changes first and emits no KNX command until the same chat session confirms them. Whenever commands are awaiting confirmation, the response always appends the exact confirmation/cancellation instructions in the language of the current request. Commands are validated again immediately before output.
|
|
121
121
|
- **Adapter preset**: Defaults to **No adapter**. Selecting a preset loads its predefined input/output mapping pair; both mappings remain hidden in the editor.
|
|
122
122
|
- **AI Education**: User-only, authoritative guidance read by the AI and never modified by it. It is also the sole place to request proactive notifications and define their conditions, duration, quiet hours and repetition.
|
|
123
|
-
-
|
|
123
|
+
- Packaged help, README, changelog, wiki and example snippets are not included in Telegram, RedBot or custom CHAT prompts. They remain available only to the web Assistant for package-support questions.
|
|
124
124
|
- **Refresh** button: Queries the provider and loads available model IDs. Its icon spins while loading; successful completion is intentionally silent.
|
|
125
125
|
|
|
126
126
|
### Ollama quick setup (local)
|
|
@@ -131,6 +131,7 @@ All fields exposed in the KNX AI editor are listed below.
|
|
|
131
131
|
- **2) Install it**: downloads and installs the model locally (for example `llama3.1`).
|
|
132
132
|
- During model refresh/install, KNX AI also tries to auto-start the Ollama server when possible.
|
|
133
133
|
- If install fails with connection errors, ensure Ollama is running (desktop app or `ollama serve`).
|
|
134
|
+
- The maximum context reported by `/api/show` is informational. KNX AI always sends `num_ctx = 16384` (or the model maximum when it is smaller) and uses the same relevance-selected 16K semantic prompt, avoiding oversized KV-cache allocation without removing agent capabilities.
|
|
134
135
|
- If Node-RED runs in Docker, use `host.docker.internal` instead of `localhost` in the endpoint URL.
|
|
135
136
|
|
|
136
137
|
### Bionic LM Studio quick setup (local)
|
|
@@ -138,6 +139,7 @@ All fields exposed in the KNX AI editor are listed below.
|
|
|
138
139
|
- Start the LM Studio API server from the **Developer** page or with `lms server start`.
|
|
139
140
|
- Default endpoint: `http://localhost:1234/v1/chat/completions`.
|
|
140
141
|
- Click **Refresh** to load all models exposed by `/v1/models`; the first model is selected when none is configured.
|
|
142
|
+
- When a model is already loaded, KNX AI preserves its active context length. KNX AI never loads an inactive Bionic model through the management API: the first chat request lets Bionic JIT-load it with its saved per-model defaults. Independently of the context reported by Bionic, KNX AI always limits its own prompt to a relevance-selected 16K semantic view; this avoids sending the full 131K data set without removing reasoning, KNX, routine, camera or TTS capabilities.
|
|
141
143
|
- An API key is optional unless authentication is enabled in the LM Studio server settings. In Docker, replace `localhost` with `host.docker.internal`.
|
|
142
144
|
|
|
143
145
|
## Security note
|
|
@@ -63,10 +63,12 @@
|
|
|
63
63
|
"loadingModels": "Loading models…",
|
|
64
64
|
"loadedModels": "Models loaded",
|
|
65
65
|
"lmStudioContextAvailable": "Maximum model context",
|
|
66
|
-
"lmStudioContextLoading": "
|
|
67
|
-
"
|
|
66
|
+
"lmStudioContextLoading": "Checking the active model context",
|
|
67
|
+
"lmStudioContextInactive": "Model inactive; Bionic defaults will be used on the first request",
|
|
68
|
+
"lmStudioContextConfigured": "Active model context",
|
|
68
69
|
"lmStudioContextFailed": "Unable to configure the model context",
|
|
69
70
|
"lmStudioContextCurrentlyLoaded": "currently loaded",
|
|
71
|
+
"localContextBudget": "KNX AI context budget",
|
|
70
72
|
"ollamaNotSupported": "Ollama local mode: API key not required. Default endpoint is http://localhost:11434/api/chat.",
|
|
71
73
|
"ollamaNoModels": "No local Ollama model found. Install one or pick one from the library.",
|
|
72
74
|
"installingOllamaModel": "Starting Ollama and installing model…",
|
|
@@ -87,6 +89,14 @@
|
|
|
87
89
|
"chatContextLoading": "Loading chat context summary…",
|
|
88
90
|
"chatContextUnavailable": "The chat context summary is temporarily unavailable.",
|
|
89
91
|
"chatContextIntro": "The chat automatically receives these sources. The paths below are the actual paths used by this Node-RED installation.",
|
|
92
|
+
"chatContextLimitLabel": "Maximum operational context",
|
|
93
|
+
"chatContextProviderManaged": "managed by the selected provider/model",
|
|
94
|
+
"chatContextTokens": "tokens",
|
|
95
|
+
"chatContextLastPromptLabel": "Last chat prompt actual size",
|
|
96
|
+
"chatContextLastPromptUnavailable": "not available until the first chat request",
|
|
97
|
+
"chatContextExactInputTokens": "input tokens measured by the provider",
|
|
98
|
+
"chatContextEstimatedInputTokens": "estimated input tokens",
|
|
99
|
+
"chatContextImages": "images",
|
|
90
100
|
"chatContextSourcesTitle": "Included sources",
|
|
91
101
|
"chatContextFilesTitle": "Persistent context files",
|
|
92
102
|
"chatContextDirectoriesTitle": "KNX telegram archive",
|
|
@@ -94,7 +104,7 @@
|
|
|
94
104
|
"chatContextSourceAdapterHistory": "Persistent daily history of automatically detected adapter events, including camera detections.",
|
|
95
105
|
"chatContextSourceEtsProject": "ETS semantics and the full Node-RED project inventory.",
|
|
96
106
|
"chatContextSourceMemoryEducation": "Session context, AI Education and bounded home memory.",
|
|
97
|
-
"
|
|
107
|
+
"chatContextSourceCameras": "Detected cameras and their available capabilities.",
|
|
98
108
|
"chatContextSourceTtsUltimate": "Selected TTS Ultimate announcement target.",
|
|
99
109
|
"chatContextSourceBadge": "Source",
|
|
100
110
|
"chatContextFileChatContext": "Persistent conversation turns, instructions and camera notification rules.",
|
|
@@ -31,7 +31,7 @@ Cada sesión Ask/chat conserva sus últimos 8 turnos y hasta 20 instrucciones ex
|
|
|
31
31
|
Para las escrituras DPT 1.xxx, los equivalentes seguros producidos por la IA `true`/`false`, `1`/`0` y `on`/`off` se normalizan a booleanos reales antes de la validación local y la salida.
|
|
32
32
|
|
|
33
33
|
### Lecturas KNX actualizadas
|
|
34
|
-
Cuando el usuario solicita explícitamente un estado actual o actualizado, la IA puede consultar objetos exactos del catálogo ETS importado, incluidos objetos de estado y otros objetos de solo lectura. La salida 4 emite `msg.destination`, `msg.dpt`, `msg.event = "GroupValue_Read"` y `msg.readstatus = true`. El nodo espera hasta 6 segundos cada `GroupValue_Response` o escritura reciente, devuelve los valores decodificados por la salida 3 y expone los detalles en `msg.knxAi.readResults`. Las lecturas nunca requieren confirmación ni se convierten en escrituras.
|
|
34
|
+
Cuando el usuario solicita explícitamente un estado actual o actualizado, la IA puede consultar objetos exactos del catálogo ETS importado, incluidos objetos de estado y otros objetos de solo lectura. La salida 4 emite `msg.destination`, `msg.dpt`, `msg.event = "GroupValue_Read"` y `msg.readstatus = true`. El nodo espera hasta 6 segundos cada `GroupValue_Response` o escritura reciente, devuelve los valores decodificados por la salida 3 y expone los detalles en `msg.knxAi.readResults`. Las lecturas nunca requieren confirmación ni se convierten en escrituras. Si un modelo local pequeño omite el tipo de operación y el payload, los objetos ETS exactos se normalizan de forma segura como lecturas; un elemento con payload sigue siendo una escritura validada.
|
|
35
35
|
|
|
36
36
|
### Rutinas conversacionales de varios pasos
|
|
37
37
|
Solicitudes como «Me voy», «Buenas noches» o «Modo cine» pueden coordinar una rutina basada en el estado actual sin añadir opciones al editor. En la primera pasada del LLM solo se aceptan lecturas ETS exactas (hasta 20); KNX AI las envía y proporciona los resultados actualizados de GA/DPT/valor a una segunda pasada de planificación aislada. Esta puede preparar hasta 12 escrituras validadas, pero no iniciar otro ciclo de lecturas. Con la confirmación activa, todo el plan requiere una sola confirmación localizada y antes no se emite ninguna escritura ni anuncio TTS solicitado. Tras confirmar, cada escritura se vuelve a validar, se envía en orden y se observa hasta 4 segundos para detectar una respuesta inmediata coincidente en el bus. La respuesta final distingue las respuestas observadas de las operaciones sin respuesta inmediata, sin declarar por ello un fallo del dispositivo. Los detalles están disponibles en `msg.knxAi.routine`, `readResults`, `verifiedCount` y `unverifiedCount`.
|
|
@@ -59,7 +59,7 @@ Cuando está instalado el paquete opcional `node-red-contrib-tts-ultimate`, apar
|
|
|
59
59
|
Solo una solicitud explícita en el mensaje de chat actual puede crear un anuncio. KNX AI envía el texto exacto directamente al nodo elegido como `msg.payload`, con `msg.topic = "knx_ai_announcement"`; no hace falta cableado intermedio en el flow. TTS Ultimate gestiona después el reproductor Sonos configurado, la voz, el volumen, el aviso inicial y la cola. El contexto persistente, la Educación IA, el contenido de las cámaras y los eventos inferidos nunca activan la voz por sí solos.
|
|
60
60
|
|
|
61
61
|
### Resumen del contexto del chat
|
|
62
|
-
El editor del nodo muestra una tarjeta compacta con las fuentes disponibles para el chat: tráfico KNX actual, semántica ETS y proyecto Node-RED, memoria de sesión y del hogar, Educación IA
|
|
62
|
+
El editor del nodo muestra una tarjeta compacta con las fuentes disponibles para el chat: tráfico KNX actual, semántica ETS y proyecto Node-RED, memoria de sesión y del hogar, Educación IA y cámaras detectadas. También muestra el contexto operativo máximo y el tamaño UTF-8 real del último prompt del chat; se usan los tokens de entrada exactos cuando el proveedor los informa y, de lo contrario, el recuento se marca como estimado. También enumera `knxai-chat-context.md`, `knxai-home-memory.md` y `knxai-config-<id-nodo>.json`, junto con la raíz absoluta del archivo de telegramas KNX, la carpeta específica del nodo y el patrón diario `YYYY-MM-DD.jsonl`. Las rutas se resuelven en tiempo de ejecución desde el directorio de datos que usa realmente la pasarela configurada.
|
|
63
63
|
|
|
64
64
|
## Inteligencia doméstica proactiva guiada por Educación y memoria limitada
|
|
65
65
|
A partir de la jerarquía ETS, nombres, roles y DPT, el nodo crea un modelo semántico determinista. No existe un interruptor separado ni ajustes proactivos avanzados. Una notificación solo se evalúa si el LLM está activo y **Educación IA** la solicita explícitamente. Educación es la única política para condiciones, duración, horas silenciosas y repetición. Sin una regla explícita, o si el LLM no puede evaluarla, no se envía ningún mensaje.
|
|
@@ -114,7 +114,7 @@ Aquí tienes todos los campos tal como se muestran en el editor de KNX AI.
|
|
|
114
114
|
- **Pedir confirmación antes de enviar comandos KNX**: activado por defecto. Muestra primero los cambios validados y no emite comandos hasta que la misma sesión de chat los confirme. Cuando hay comandos pendientes, la respuesta añade siempre las instrucciones exactas para confirmar o cancelar en el idioma de la solicitud actual. Los comandos se validan de nuevo justo antes de la salida.
|
|
115
115
|
- **Preajuste del adaptador**: usa **Sin adaptador** por defecto. La selección carga el par predefinido de mapeos de entrada y salida; ambos permanecen ocultos en el editor.
|
|
116
116
|
- **Educación de la IA**: instrucciones vinculantes gestionadas solo por el usuario, leídas por la IA y nunca modificadas. Es el único lugar donde solicitar notificaciones proactivas y definir sus condiciones, duración, horas silenciosas y repetición.
|
|
117
|
-
- Los fragmentos
|
|
117
|
+
- Los fragmentos incluidos con el paquete procedentes de la ayuda, README, changelog, wiki y ejemplos no se añaden a los prompts de Telegram, RedBot ni CHAT personalizados. Solo permanecen disponibles para el Asistente web en preguntas técnicas sobre el paquete.
|
|
118
118
|
- Botón **Refresh**: consulta el provider y carga los modelos disponibles. El icono gira durante la carga; una finalización correcta no muestra ningún mensaje.
|
|
119
119
|
|
|
120
120
|
### Configuración rápida de Ollama (local)
|
|
@@ -125,6 +125,7 @@ Aquí tienes todos los campos tal como se muestran en el editor de KNX AI.
|
|
|
125
125
|
- **2) Install it**: descarga e instala el modelo localmente (p. ej. `llama3.1`).
|
|
126
126
|
- Durante refresh/instalación, KNX AI también intenta iniciar automáticamente el servidor Ollama.
|
|
127
127
|
- Si la instalación falla con error de conexión, verifica que Ollama esté ejecutándose (app de escritorio o `ollama serve`).
|
|
128
|
+
- El contexto máximo declarado por `/api/show` queda solo como información. KNX AI envía siempre `num_ctx = 16384` (o el máximo del modelo si es menor) y usa la misma vista semántica de 16K seleccionada por relevancia, evitando una caché KV sobredimensionada sin eliminar capacidades del agente.
|
|
128
129
|
- Si Node-RED se ejecuta en Docker, usa `host.docker.internal` en lugar de `localhost` en el endpoint.
|
|
129
130
|
|
|
130
131
|
### Configuración rápida de Bionic LM Studio (local)
|
|
@@ -132,6 +133,7 @@ Aquí tienes todos los campos tal como se muestran en el editor de KNX AI.
|
|
|
132
133
|
- Inicia el servidor API de LM Studio desde la página **Developer** o con `lms server start`.
|
|
133
134
|
- Endpoint por defecto: `http://localhost:1234/v1/chat/completions`.
|
|
134
135
|
- Pulsa **Refresh** para cargar todos los modelos expuestos por `/v1/models`; si no hay un modelo configurado se selecciona el primero.
|
|
136
|
+
- Si un modelo ya está cargado, KNX AI conserva la longitud de contexto activa. KNX AI nunca carga un modelo Bionic inactivo mediante la API de gestión: la primera solicitud de chat permite que Bionic lo cargue mediante JIT con los valores predeterminados guardados para el modelo. Independientemente del contexto declarado por Bionic, KNX AI limita siempre su propio prompt a una vista semántica de 16K seleccionada por relevancia; así evita enviar el conjunto completo de 131K sin eliminar capacidades de razonamiento, KNX, rutinas, cámaras o TTS.
|
|
135
137
|
- La clave API es opcional salvo que la autenticación esté activada en los ajustes del servidor LM Studio. En Docker, sustituye `localhost` por `host.docker.internal`.
|
|
136
138
|
|
|
137
139
|
## Nota de seguridad
|
|
@@ -55,10 +55,12 @@
|
|
|
55
55
|
},
|
|
56
56
|
"messages": {
|
|
57
57
|
"lmStudioContextAvailable": "Contexto máximo del modelo",
|
|
58
|
-
"lmStudioContextLoading": "
|
|
59
|
-
"
|
|
58
|
+
"lmStudioContextLoading": "Comprobando el contexto activo del modelo",
|
|
59
|
+
"lmStudioContextInactive": "Modelo inactivo; se usarán los valores predeterminados de Bionic en la primera solicitud",
|
|
60
|
+
"lmStudioContextConfigured": "Contexto activo del modelo",
|
|
60
61
|
"lmStudioContextFailed": "No se pudo configurar el contexto del modelo",
|
|
61
62
|
"lmStudioContextCurrentlyLoaded": "cargado actualmente",
|
|
63
|
+
"localContextBudget": "Presupuesto de contexto de KNX AI",
|
|
62
64
|
"ollamaNotSupported": "Ollama local mode: API key not required. Default endpoint is http://localhost:11434/api/chat.",
|
|
63
65
|
"ollamaNoModels": "No local Ollama model found. Install one or pick one from the library.",
|
|
64
66
|
"installingOllamaModel": "Starting Ollama and installing model…",
|
|
@@ -79,6 +81,14 @@
|
|
|
79
81
|
"chatContextLoading": "Cargando el resumen del contexto del chat…",
|
|
80
82
|
"chatContextUnavailable": "El resumen del contexto del chat no está disponible temporalmente.",
|
|
81
83
|
"chatContextIntro": "El chat recibe automáticamente estas fuentes. Las rutas siguientes son las que usa realmente esta instalación de Node-RED.",
|
|
84
|
+
"chatContextLimitLabel": "Contexto operativo máximo",
|
|
85
|
+
"chatContextProviderManaged": "gestionado por el proveedor/modelo seleccionado",
|
|
86
|
+
"chatContextTokens": "tokens",
|
|
87
|
+
"chatContextLastPromptLabel": "Tamaño real del último prompt del chat",
|
|
88
|
+
"chatContextLastPromptUnavailable": "no disponible hasta la primera solicitud del chat",
|
|
89
|
+
"chatContextExactInputTokens": "tokens de entrada medidos por el proveedor",
|
|
90
|
+
"chatContextEstimatedInputTokens": "tokens de entrada estimados",
|
|
91
|
+
"chatContextImages": "imágenes",
|
|
82
92
|
"chatContextSourcesTitle": "Fuentes incluidas",
|
|
83
93
|
"chatContextFilesTitle": "Archivos de contexto persistentes",
|
|
84
94
|
"chatContextDirectoriesTitle": "Archivo de telegramas KNX",
|
|
@@ -86,7 +96,7 @@
|
|
|
86
96
|
"chatContextSourceAdapterHistory": "Historial diario persistente de eventos de los adaptadores detectados, incluidas las detecciones de cámaras.",
|
|
87
97
|
"chatContextSourceEtsProject": "Semántica ETS e inventario completo del proyecto Node-RED.",
|
|
88
98
|
"chatContextSourceMemoryEducation": "Contexto de sesión, Educación IA y memoria doméstica limitada.",
|
|
89
|
-
"
|
|
99
|
+
"chatContextSourceCameras": "Cámaras detectadas y sus capacidades disponibles.",
|
|
90
100
|
"chatContextSourceTtsUltimate": "Nodo TTS Ultimate seleccionado para los anuncios.",
|
|
91
101
|
"chatContextSourceBadge": "Fuente",
|
|
92
102
|
"chatContextFileChatContext": "Turnos persistentes, instrucciones y reglas de notificación de cámaras.",
|
|
@@ -31,7 +31,7 @@ Chaque session Ask/chat conserve ses 8 derniers échanges et jusqu'à 20 instruc
|
|
|
31
31
|
Pour les écritures DPT 1.xxx, les équivalents sûrs produits par l’IA `true`/`false`, `1`/`0` et `on`/`off` sont normalisés en véritables booléens avant la validation locale et la sortie.
|
|
32
32
|
|
|
33
33
|
### Lectures KNX actualisées
|
|
34
|
-
Lorsque l’utilisateur demande explicitement un état actuel ou actualisé, l’IA peut interroger les objets exacts du catalogue ETS importé, y compris les objets d’état et autres objets en lecture seule. La sortie 4 émet `msg.destination`, `msg.dpt`, `msg.event = "GroupValue_Read"` et `msg.readstatus = true`. Le nœud attend jusqu’à 6 secondes chaque `GroupValue_Response` ou écriture récente, puis renvoie les valeurs décodées sur la sortie 3 et les détails dans `msg.knxAi.readResults`. Les lectures ne nécessitent jamais de confirmation et ne sont jamais transformées en écritures.
|
|
34
|
+
Lorsque l’utilisateur demande explicitement un état actuel ou actualisé, l’IA peut interroger les objets exacts du catalogue ETS importé, y compris les objets d’état et autres objets en lecture seule. La sortie 4 émet `msg.destination`, `msg.dpt`, `msg.event = "GroupValue_Read"` et `msg.readstatus = true`. Le nœud attend jusqu’à 6 secondes chaque `GroupValue_Response` ou écriture récente, puis renvoie les valeurs décodées sur la sortie 3 et les détails dans `msg.knxAi.readResults`. Les lectures ne nécessitent jamais de confirmation et ne sont jamais transformées en écritures. Si un petit modèle local omet le type d’opération et le payload, les objets ETS exacts sont normalisés en toute sécurité comme lectures ; un élément contenant un payload reste une écriture validée.
|
|
35
35
|
|
|
36
36
|
### Routines conversationnelles multi-étapes
|
|
37
37
|
Des demandes comme « Je pars », « Bonne nuit » ou « Mode cinéma » peuvent coordonner une routine tenant compte de l’état courant sans nouvelle option dans l’éditeur. Au premier passage LLM, seules les lectures ETS exactes sont acceptées (20 au maximum) ; KNX AI les envoie puis fournit les résultats actualisés GA/DPT/valeur à un second passage de planification isolé. Celui-ci peut préparer jusqu’à 12 écritures validées, sans lancer un nouveau cycle de lecture. Lorsque la confirmation est active, le plan complet ne demande qu’une confirmation localisée et aucune écriture ni annonce TTS demandée n’est émise auparavant. Après confirmation, chaque écriture est revalidée, transmise dans l’ordre et observée jusqu’à 4 secondes pour détecter un retour immédiat correspondant sur le bus. La réponse finale distingue les retours observés des opérations sans retour immédiat, sans déclarer pour autant une panne de l’appareil. Les détails figurent dans `msg.knxAi.routine`, `readResults`, `verifiedCount` et `unverifiedCount`.
|
|
@@ -59,7 +59,7 @@ Lorsque le paquet facultatif `node-red-contrib-tts-ultimate` est installé, il a
|
|
|
59
59
|
Seule une demande explicite dans le message de chat actuel peut créer une annonce. KNX AI envoie le texte exact directement au nœud choisi dans `msg.payload`, avec `msg.topic = "knx_ai_announcement"` ; aucun câblage intermédiaire n’est nécessaire. TTS Ultimate gère ensuite le lecteur Sonos configuré, la voix, le volume, le signal d’introduction et la file d’attente. Le contexte persistant, l’Éducation IA, le contenu des caméras et les événements déduits ne déclenchent jamais la parole de manière autonome.
|
|
60
60
|
|
|
61
61
|
### Aperçu du contexte du chat
|
|
62
|
-
L’éditeur du nœud affiche une carte compacte résumant les sources disponibles pour le chat : trafic KNX actuel, sémantique ETS et projet Node-RED, mémoire de session et de la maison, Éducation IA
|
|
62
|
+
L’éditeur du nœud affiche une carte compacte résumant les sources disponibles pour le chat : trafic KNX actuel, sémantique ETS et projet Node-RED, mémoire de session et de la maison, Éducation IA et caméras détectées. Elle affiche aussi le contexte opérationnel maximal et la taille UTF-8 réelle du dernier prompt du chat ; les jetons d’entrée exacts du fournisseur sont utilisés lorsqu’ils sont fournis, sinon leur nombre est signalé comme estimé. Elle répertorie aussi `knxai-chat-context.md`, `knxai-home-memory.md` et `knxai-config-<id-nœud>.json`, ainsi que la racine absolue de l’archive des télégrammes KNX, le dossier propre au nœud et le format quotidien `YYYY-MM-DD.jsonl`. Les chemins sont déterminés à l’exécution depuis le répertoire de données réellement utilisé par la passerelle configurée.
|
|
63
63
|
|
|
64
64
|
## Intelligence domestique proactive guidée par l’Éducation et mémoire limitée
|
|
65
65
|
À partir de la hiérarchie ETS, des noms, rôles et DPT, le nœud crée un modèle sémantique déterministe. Il n’existe ni interrupteur séparé ni paramètres proactifs avancés. Une notification n’est évaluée que si le LLM est actif et si **Éducation IA** la demande explicitement. L’Éducation définit seule les conditions, la durée, les heures silencieuses et la répétition. Sans règle explicite, ou si le LLM ne peut pas l’évaluer, aucun message n’est envoyé.
|
|
@@ -114,7 +114,7 @@ Voici tous les champs tels qu'affichés dans l'éditeur KNX AI.
|
|
|
114
114
|
- **Demander confirmation avant d’envoyer les commandes KNX** : activé par défaut. Affiche d'abord les modifications validées et n'émet aucune commande tant que la même session de chat ne les confirme pas. Lorsque des commandes attendent une confirmation, la réponse ajoute toujours les instructions exactes de confirmation ou d'annulation dans la langue de la demande courante. Les commandes sont à nouveau validées juste avant la sortie.
|
|
115
115
|
- **Préréglage d’adaptateur** : utilise **Aucun adaptateur** par défaut. La sélection charge la paire prédéfinie de mappages entrée/sortie ; les deux restent masqués dans l’éditeur.
|
|
116
116
|
- **Éducation de l’IA** : consignes autoritaires gérées uniquement par l'utilisateur, lues par l'IA et jamais modifiées. C’est le seul endroit où demander des notifications proactives et définir leurs conditions, durée, heures silencieuses et répétition.
|
|
117
|
-
- Les extraits
|
|
117
|
+
- Les extraits fournis avec le paquet depuis l’aide, le README, le changelog, le wiki et les exemples ne sont pas inclus dans les prompts Telegram, RedBot ou CHAT personnalisés. Ils restent disponibles uniquement pour l’Assistant web lors des questions techniques sur le paquet.
|
|
118
118
|
- Bouton **Refresh** : interroge le provider et charge les modèles disponibles. Son icône tourne pendant le chargement ; une réussite ne produit volontairement aucun message.
|
|
119
119
|
|
|
120
120
|
### Démarrage rapide Ollama (local)
|
|
@@ -125,6 +125,7 @@ Voici tous les champs tels qu'affichés dans l'éditeur KNX AI.
|
|
|
125
125
|
- **2) Install it** : télécharge et installe le modèle localement (ex. `llama3.1`).
|
|
126
126
|
- Pendant refresh/install, KNX AI tente aussi de démarrer automatiquement le serveur Ollama.
|
|
127
127
|
- Si l'installation échoue avec une erreur de connexion, vérifier qu'Ollama est lancé (app desktop ou `ollama serve`).
|
|
128
|
+
- Le contexte maximal déclaré par `/api/show` reste informatif. KNX AI envoie toujours `num_ctx = 16384` (ou le maximum du modèle s'il est inférieur) et utilise la même vue sémantique de 16K sélectionnée par pertinence, évitant une allocation KV cache surdimensionnée sans retirer de capacités à l'agent.
|
|
128
129
|
- Si Node-RED tourne dans Docker, utiliser `host.docker.internal` au lieu de `localhost` dans l'endpoint.
|
|
129
130
|
|
|
130
131
|
### Démarrage rapide Bionic LM Studio (local)
|
|
@@ -132,6 +133,7 @@ Voici tous les champs tels qu'affichés dans l'éditeur KNX AI.
|
|
|
132
133
|
- Démarrer le serveur API LM Studio depuis la page **Developer** ou avec `lms server start`.
|
|
133
134
|
- Endpoint par défaut : `http://localhost:1234/v1/chat/completions`.
|
|
134
135
|
- Cliquer sur **Refresh** pour charger tous les modèles exposés par `/v1/models` ; le premier est sélectionné si aucun modèle n’est configuré.
|
|
136
|
+
- Lorsqu’un modèle est déjà chargé, KNX AI conserve la longueur de contexte active. KNX AI ne charge jamais un modèle Bionic inactif via l’API de gestion : la première requête de chat laisse Bionic le charger en JIT avec les valeurs par défaut enregistrées pour ce modèle. Indépendamment du contexte déclaré par Bionic, KNX AI limite toujours son propre prompt à une vue sémantique de 16K sélectionnée par pertinence ; cela évite d’envoyer l’ensemble complet de 131K sans supprimer les capacités de raisonnement, KNX, routines, caméras ou TTS.
|
|
135
137
|
- La clé API est facultative sauf si l’authentification est activée dans les paramètres du serveur LM Studio. Dans Docker, remplacer `localhost` par `host.docker.internal`.
|
|
136
138
|
|
|
137
139
|
## Note sécurité
|
|
@@ -55,10 +55,12 @@
|
|
|
55
55
|
},
|
|
56
56
|
"messages": {
|
|
57
57
|
"lmStudioContextAvailable": "Contexte maximal du modèle",
|
|
58
|
-
"lmStudioContextLoading": "
|
|
59
|
-
"
|
|
58
|
+
"lmStudioContextLoading": "Vérification du contexte actif du modèle",
|
|
59
|
+
"lmStudioContextInactive": "Modèle inactif ; les valeurs par défaut de Bionic seront utilisées à la première requête",
|
|
60
|
+
"lmStudioContextConfigured": "Contexte actif du modèle",
|
|
60
61
|
"lmStudioContextFailed": "Impossible de configurer le contexte du modèle",
|
|
61
62
|
"lmStudioContextCurrentlyLoaded": "actuellement chargé",
|
|
63
|
+
"localContextBudget": "Budget de contexte KNX AI",
|
|
62
64
|
"ollamaNotSupported": "Ollama local mode: API key not required. Default endpoint is http://localhost:11434/api/chat.",
|
|
63
65
|
"ollamaNoModels": "No local Ollama model found. Install one or pick one from the library.",
|
|
64
66
|
"installingOllamaModel": "Starting Ollama and installing model…",
|
|
@@ -79,6 +81,14 @@
|
|
|
79
81
|
"chatContextLoading": "Chargement du résumé du contexte du chat…",
|
|
80
82
|
"chatContextUnavailable": "Le résumé du contexte du chat est temporairement indisponible.",
|
|
81
83
|
"chatContextIntro": "Le chat reçoit automatiquement ces sources. Les chemins ci-dessous sont ceux réellement utilisés par cette installation Node-RED.",
|
|
84
|
+
"chatContextLimitLabel": "Contexte opérationnel maximal",
|
|
85
|
+
"chatContextProviderManaged": "géré par le fournisseur/modèle sélectionné",
|
|
86
|
+
"chatContextTokens": "jetons",
|
|
87
|
+
"chatContextLastPromptLabel": "Taille réelle du dernier prompt du chat",
|
|
88
|
+
"chatContextLastPromptUnavailable": "indisponible jusqu'à la première demande du chat",
|
|
89
|
+
"chatContextExactInputTokens": "jetons d'entrée mesurés par le fournisseur",
|
|
90
|
+
"chatContextEstimatedInputTokens": "jetons d'entrée estimés",
|
|
91
|
+
"chatContextImages": "images",
|
|
82
92
|
"chatContextSourcesTitle": "Sources incluses",
|
|
83
93
|
"chatContextFilesTitle": "Fichiers de contexte persistants",
|
|
84
94
|
"chatContextDirectoriesTitle": "Archive des télégrammes KNX",
|
|
@@ -86,7 +96,7 @@
|
|
|
86
96
|
"chatContextSourceAdapterHistory": "Historique quotidien persistant des événements des adaptateurs détectés, y compris les détections des caméras.",
|
|
87
97
|
"chatContextSourceEtsProject": "Sémantique ETS et inventaire complet du projet Node-RED.",
|
|
88
98
|
"chatContextSourceMemoryEducation": "Contexte de session, Éducation IA et mémoire domestique limitée.",
|
|
89
|
-
"
|
|
99
|
+
"chatContextSourceCameras": "Caméras détectées et leurs fonctionnalités disponibles.",
|
|
90
100
|
"chatContextSourceTtsUltimate": "Nœud TTS Ultimate sélectionné pour les annonces.",
|
|
91
101
|
"chatContextSourceBadge": "Source",
|
|
92
102
|
"chatContextFileChatContext": "Tours de conversation persistants, instructions et règles de notification des caméras.",
|
|
@@ -31,7 +31,7 @@ Ogni sessione Ask/chat conserva gli ultimi 8 turni e fino a 20 istruzioni esplic
|
|
|
31
31
|
Per le scritture DPT 1.xxx, gli equivalenti sicuri prodotti dall'AI `true`/`false`, `1`/`0` e `on`/`off` vengono normalizzati in un vero booleano prima della validazione locale e dell'uscita.
|
|
32
32
|
|
|
33
33
|
### Letture KNX aggiornate
|
|
34
|
-
Quando l'utente chiede esplicitamente uno stato attuale o aggiornato, l'AI può interrogare gli oggetti esatti del catalogo ETS importato, compresi gli oggetti di stato e di sola lettura. L'uscita 4 emette `msg.destination`, `msg.dpt`, `msg.event = "GroupValue_Read"` e `msg.readstatus = true`. Il nodo attende fino a 6 secondi ogni `GroupValue_Response` o scrittura fresca, poi restituisce i valori decodificati sull'uscita 3 e i dettagli in `msg.knxAi.readResults`. Le letture non richiedono mai conferma e non vengono mai trasformate in scritture.
|
|
34
|
+
Quando l'utente chiede esplicitamente uno stato attuale o aggiornato, l'AI può interrogare gli oggetti esatti del catalogo ETS importato, compresi gli oggetti di stato e di sola lettura. L'uscita 4 emette `msg.destination`, `msg.dpt`, `msg.event = "GroupValue_Read"` e `msg.readstatus = true`. Il nodo attende fino a 6 secondi ogni `GroupValue_Response` o scrittura fresca, poi restituisce i valori decodificati sull'uscita 3 e i dettagli in `msg.knxAi.readResults`. Le letture non richiedono mai conferma e non vengono mai trasformate in scritture. Se un piccolo modello locale omette il tipo di operazione e il payload, gli oggetti ETS esatti vengono normalizzati in modo sicuro come letture; un elemento con payload resta una scrittura validata.
|
|
35
35
|
|
|
36
36
|
### Routine conversazionali multi-step
|
|
37
37
|
Richieste come «Sto uscendo», «Buonanotte» o «Modalità cinema» possono coordinare una routine basata sullo stato corrente senza aggiungere opzioni all'editor. Nel primo passaggio LLM vengono accettate soltanto letture ETS esatte (massimo 20); KNX AI le invia e passa i risultati aggiornati GA/DPT/valore a un secondo passaggio di pianificazione isolato. Quest'ultimo può preparare fino a 12 scritture validate, ma non può avviare un altro ciclo di letture. Con la conferma attiva, l'intero piano richiede una sola conferma localizzata e nessuna scrittura o annuncio TTS richiesto viene emesso prima. Dopo la conferma ogni scrittura viene rivalidata, inoltrata in ordine e osservata fino a 4 secondi per un feedback immediato corrispondente sul bus. La risposta finale distingue il feedback osservato dalle operazioni senza feedback immediato, senza considerare queste ultime come dispositivi guasti. I dettagli sono disponibili in `msg.knxAi.routine`, `readResults`, `verifiedCount` e `unverifiedCount`.
|
|
@@ -59,7 +59,7 @@ Quando è installato il pacchetto opzionale `node-red-contrib-tts-ultimate`, que
|
|
|
59
59
|
Solo una richiesta esplicita nel messaggio corrente della chat può creare un annuncio. KNX AI invia il testo esatto direttamente al nodo scelto come `msg.payload`, con `msg.topic = "knx_ai_announcement"`; non servono collegamenti intermedi nel flow. TTS Ultimate gestisce poi il player Sonos configurato, voce, volume, hailing e coda. Contesto persistente, Educazione AI, contenuto delle telecamere ed eventi dedotti non attivano mai autonomamente la voce.
|
|
60
60
|
|
|
61
61
|
### Riepilogo del contesto della chat
|
|
62
|
-
L'editor del nodo mostra una scheda compatta con le fonti disponibili alla chat: traffico KNX corrente e archiviato, eventi persistenti degli adapter, semantica ETS e progetto Node-RED, memoria di sessione e domestica, Educazione AI
|
|
62
|
+
L'editor del nodo mostra una scheda compatta con le fonti disponibili alla chat: traffico KNX corrente e archiviato, eventi persistenti degli adapter, semantica ETS e progetto Node-RED, memoria di sessione e domestica, Educazione AI e telecamere rilevate. Mostra anche il contesto operativo massimo e il peso UTF-8 effettivo dell'ultimo prompt della chat; quando il provider comunica i token di input viene usato il valore esatto, altrimenti il conteggio è indicato come stima. La scheda elenca le directory assolute degli archivi KNX e degli eventi adapter e il formato giornaliero `YYYY-MM-DD.jsonl`.
|
|
63
63
|
|
|
64
64
|
## Intelligenza domestica proattiva guidata dall'Educazione e memoria limitata
|
|
65
65
|
Da gerarchia ETS, nomi, ruoli e DPT, il nodo crea un modello semantico deterministico per persiane, finestre, porte, luci, temperatura, clima, presenza e allarmi usando termini italiani, inglesi, tedeschi, francesi, spagnoli e cinesi. Il rilevatore proattivo osserva soltanto stati non di comando di persiane, finestre e porte riconosciuti con sufficiente affidabilità.
|
|
@@ -120,7 +120,7 @@ Di seguito sono elencati tutti i campi presenti nell'editor del nodo KNX AI.
|
|
|
120
120
|
- **Chiedi conferma prima di inviare comandi KNX**: attivo per default. Mostra prima le modifiche validate e non emette comandi KNX finché la stessa sessione chat non le conferma. Quando ci sono comandi in attesa, la risposta aggiunge sempre le istruzioni esatte per confermare o annullare nella lingua della richiesta corrente. I comandi vengono validati nuovamente subito prima dell'uscita.
|
|
121
121
|
- **Preset adattatore**: parte da **Nessun adattatore**. La selezione carica la coppia predefinita di mappature ingresso/uscita; entrambe restano nascoste nell'editor.
|
|
122
122
|
- **Educazione AI**: istruzioni autorevoli gestite soltanto dall'utente, lette dall'AI e mai modificate. È anche l'unico punto in cui richiedere notifiche proattive e definirne condizioni, durata, ore silenziose e ripetizione.
|
|
123
|
-
- Gli estratti
|
|
123
|
+
- Gli estratti inclusi nel pacchetto da help, README, changelog, wiki ed esempi non vengono inviati nei prompt di Telegram, RedBot o CHAT personalizzate. Restano disponibili soltanto all'Assistente web per le domande tecniche sul pacchetto.
|
|
124
124
|
- Pulsante **Aggiorna**: interroga il provider e popola i modelli disponibili. Durante il caricamento l'icona ruota; il completamento corretto non mostra messaggi.
|
|
125
125
|
|
|
126
126
|
### Setup rapido Ollama (locale)
|
|
@@ -131,6 +131,7 @@ Di seguito sono elencati tutti i campi presenti nell'editor del nodo KNX AI.
|
|
|
131
131
|
- **2) Installalo**: scarica e installa localmente il modello (esempio `llama3.1`).
|
|
132
132
|
- Durante refresh/installazione, KNX AI prova anche ad avviare automaticamente il server Ollama quando possibile.
|
|
133
133
|
- Se l'installazione fallisce per errore di connessione, verifica che Ollama sia avviato (app desktop o `ollama serve`).
|
|
134
|
+
- Il contesto massimo dichiarato da `/api/show` resta informativo. KNX AI invia sempre `num_ctx = 16384` (oppure il massimo del modello se inferiore) e usa la stessa vista semantica di 16K selezionata per pertinenza, evitando una KV cache sovradimensionata senza rimuovere capacità dell'agente.
|
|
134
135
|
- Se Node-RED gira in Docker, usa `host.docker.internal` al posto di `localhost` nell'endpoint.
|
|
135
136
|
|
|
136
137
|
### Setup rapido Bionic LM Studio (locale)
|
|
@@ -138,6 +139,7 @@ Di seguito sono elencati tutti i campi presenti nell'editor del nodo KNX AI.
|
|
|
138
139
|
- Avvia il server API di LM Studio dalla pagina **Developer** oppure con `lms server start`.
|
|
139
140
|
- Endpoint predefinito: `http://localhost:1234/v1/chat/completions`.
|
|
140
141
|
- Premi **Aggiorna** per caricare tutti i modelli esposti da `/v1/models`; se non è configurato un modello viene selezionato il primo.
|
|
142
|
+
- Se un modello è già caricato, KNX AI conserva la lunghezza del contesto attiva. KNX AI non carica mai un modello Bionic inattivo tramite l'API di gestione: la prima richiesta chat lascia che Bionic lo carichi JIT con i valori predefiniti salvati per il modello. Indipendentemente dal contesto dichiarato da Bionic, KNX AI limita sempre il proprio prompt a una vista semantica di 16K selezionata per pertinenza; evita così di inviare l'intero insieme di dati da 131K senza rimuovere capacità di ragionamento, KNX, routine, telecamere o TTS.
|
|
141
143
|
- La API key è opzionale, salvo autenticazione attiva nelle impostazioni del server LM Studio. In Docker sostituisci `localhost` con `host.docker.internal`.
|
|
142
144
|
|
|
143
145
|
## Nota sicurezza
|
|
@@ -63,10 +63,12 @@
|
|
|
63
63
|
"loadingModels": "Carico i modelli…",
|
|
64
64
|
"loadedModels": "Modelli caricati",
|
|
65
65
|
"lmStudioContextAvailable": "Contesto massimo del modello",
|
|
66
|
-
"lmStudioContextLoading": "
|
|
67
|
-
"
|
|
66
|
+
"lmStudioContextLoading": "Verifica del contesto attivo del modello",
|
|
67
|
+
"lmStudioContextInactive": "Modello inattivo; alla prima richiesta verranno usati i valori predefiniti di Bionic",
|
|
68
|
+
"lmStudioContextConfigured": "Contesto attivo del modello",
|
|
68
69
|
"lmStudioContextFailed": "Impossibile configurare il contesto del modello",
|
|
69
70
|
"lmStudioContextCurrentlyLoaded": "attualmente caricato",
|
|
71
|
+
"localContextBudget": "Budget contesto KNX AI",
|
|
70
72
|
"ollamaNotSupported": "Modalita locale Ollama: API key non richiesta. Endpoint predefinito: http://localhost:11434/api/chat.",
|
|
71
73
|
"ollamaNoModels": "Nessun modello Ollama locale trovato. Installa un modello o scegli dalla libreria.",
|
|
72
74
|
"installingOllamaModel": "Avvio Ollama e installo il modello…",
|
|
@@ -87,6 +89,14 @@
|
|
|
87
89
|
"chatContextLoading": "Caricamento del riepilogo del contesto…",
|
|
88
90
|
"chatContextUnavailable": "Il riepilogo del contesto della chat non è momentaneamente disponibile.",
|
|
89
91
|
"chatContextIntro": "La chat riceve automaticamente queste fonti. I percorsi sottostanti sono quelli effettivi usati da questa installazione Node-RED.",
|
|
92
|
+
"chatContextLimitLabel": "Contesto operativo massimo",
|
|
93
|
+
"chatContextProviderManaged": "gestito dal provider/modello selezionato",
|
|
94
|
+
"chatContextTokens": "token",
|
|
95
|
+
"chatContextLastPromptLabel": "Peso effettivo dell'ultimo prompt della chat",
|
|
96
|
+
"chatContextLastPromptUnavailable": "non disponibile fino alla prima richiesta della chat",
|
|
97
|
+
"chatContextExactInputTokens": "token di input misurati dal provider",
|
|
98
|
+
"chatContextEstimatedInputTokens": "token di input stimati",
|
|
99
|
+
"chatContextImages": "immagini",
|
|
90
100
|
"chatContextSourcesTitle": "Fonti incluse",
|
|
91
101
|
"chatContextFilesTitle": "File persistenti di contesto",
|
|
92
102
|
"chatContextDirectoriesTitle": "Archivio telegrammi KNX",
|
|
@@ -94,7 +104,7 @@
|
|
|
94
104
|
"chatContextSourceAdapterHistory": "Storico giornaliero persistente degli eventi degli adapter rilevati, comprese le rilevazioni delle telecamere.",
|
|
95
105
|
"chatContextSourceEtsProject": "Semantica ETS e inventario completo del progetto Node-RED.",
|
|
96
106
|
"chatContextSourceMemoryEducation": "Contesto di sessione, Educazione AI e memoria domestica limitata.",
|
|
97
|
-
"
|
|
107
|
+
"chatContextSourceCameras": "Telecamere rilevate e relative funzionalità disponibili.",
|
|
98
108
|
"chatContextSourceTtsUltimate": "Nodo TTS Ultimate selezionato per gli annunci.",
|
|
99
109
|
"chatContextSourceBadge": "Fonte",
|
|
100
110
|
"chatContextFileChatContext": "Turni persistenti, istruzioni e regole di notifica delle telecamere.",
|
|
@@ -31,7 +31,7 @@ Canvas 上的节点状态专门用于显示最近收到的请求,以及 LLM
|
|
|
31
31
|
对于 DPT 1.xxx 写入,AI 生成的安全等价值 `true`/`false`、`1`/`0` 和 `on`/`off` 会在本地校验和输出前统一转换为真正的布尔值。
|
|
32
32
|
|
|
33
33
|
### 最新 KNX 读取
|
|
34
|
-
当用户明确要求当前或最新状态时,AI 可以查询已导入 ETS 目录中的精确对象,包括状态对象和其他只读对象。输出 4 会发送 `msg.destination`、`msg.dpt`、`msg.event = "GroupValue_Read"` 和 `msg.readstatus = true`。节点会为每个 `GroupValue_Response` 或最新写入等待最多 6 秒,然后在输出 3 返回解码值,并在 `msg.knxAi.readResults`
|
|
34
|
+
当用户明确要求当前或最新状态时,AI 可以查询已导入 ETS 目录中的精确对象,包括状态对象和其他只读对象。输出 4 会发送 `msg.destination`、`msg.dpt`、`msg.event = "GroupValue_Read"` 和 `msg.readstatus = true`。节点会为每个 `GroupValue_Response` 或最新写入等待最多 6 秒,然后在输出 3 返回解码值,并在 `msg.knxAi.readResults` 中提供详细信息。读取从不需要确认,也绝不会转换为写入。如果小型本地模型省略操作类型和 payload,精确的 ETS 对象会被安全规范化为读取;包含 payload 的项目仍作为经过验证的写入处理。
|
|
35
35
|
|
|
36
36
|
### 多步骤对话例行程序
|
|
37
37
|
“我要离家”“晚安”或“影院模式”等请求可以在不增加编辑器选项的情况下,根据当前状态协调例行程序。第一次 LLM 处理仅接受精确的 ETS 读取(最多 20 个);KNX AI 发送读取,并把最新的 GA/DPT/值结果交给隔离的第二次规划处理。第二次处理最多可准备 12 个已验证写入,但不能再次发起读取循环。启用确认时,整个计划只需一次本地化确认;确认前不会发送任何写入或所请求的 TTS 播报。确认后,每个写入都会重新验证、按顺序转发,并在最多 4 秒内观察总线上匹配的即时反馈。最终回复会区分已观察到反馈的操作与没有即时反馈的操作,但不会把后者报告为设备故障。详细信息位于 `msg.knxAi.routine`、`readResults`、`verifiedCount` 和 `unverifiedCount`。
|
|
@@ -59,7 +59,7 @@ Canvas 上的节点状态专门用于显示最近收到的请求,以及 LLM
|
|
|
59
59
|
只有当前聊天消息中的明确请求才能创建播报。KNX AI 会将准确文本作为 `msg.payload` 直接发送到所选节点,并设置 `msg.topic = "knx_ai_announcement"`;无需在 Flow 中增加中间连线。之后由 TTS Ultimate 处理已配置的 Sonos 播放器、语音、音量、提示音和队列。持久上下文、AI 教育、摄像机内容和推断事件绝不会自行触发语音。
|
|
60
60
|
|
|
61
61
|
### 聊天上下文概览
|
|
62
|
-
节点编辑器会显示一张紧凑卡片,汇总聊天可用的来源:当前 KNX 流量、ETS 语义与 Node-RED 项目、会话和家庭记忆、AI
|
|
62
|
+
节点编辑器会显示一张紧凑卡片,汇总聊天可用的来源:当前 KNX 流量、ETS 语义与 Node-RED 项目、会话和家庭记忆、AI 教育及检测到的摄像机。卡片还会显示最大运行上下文和上次聊天提示词的实际 UTF-8 大小;提供商返回输入令牌数时使用精确值,否则明确标为估算值。卡片还会列出 `knxai-chat-context.md`、`knxai-home-memory.md` 和 `knxai-config-<节点-id>.json`,以及 KNX 报文归档的绝对根目录、该节点专用目录和每日文件模式 `YYYY-MM-DD.jsonl`。这些路径会在运行时根据已配置网关实际使用的数据目录解析。
|
|
63
63
|
|
|
64
64
|
## 由 AI 教育驱动的主动家庭智能与有限记忆
|
|
65
65
|
节点会根据 ETS 层级、名称、角色和 DPT 建立确定性的语义模型。不再提供单独的开关或高级主动通知设置。只有启用 LLM 且 **AI 教育**明确要求时,系统才会评估通知。条件、持续时间、静默时段和重复频率完全由 AI 教育定义。没有明确规则或 LLM 无法评估时,不会发送任何消息。
|
|
@@ -114,7 +114,7 @@ Canvas 上的节点状态专门用于显示最近收到的请求,以及 LLM
|
|
|
114
114
|
- **发送 KNX 命令前请求确认**:默认启用。先显示已验证的修改,在同一聊天会话确认前不会发送任何 KNX 命令。有命令等待确认时,回复始终会使用当前请求的语言附加准确的确认或取消说明。命令会在输出前再次验证。
|
|
115
115
|
- **适配器预设**:默认为**无适配器**。选择后会加载预定义的输入和输出映射;两者在编辑器中始终保持隐藏。
|
|
116
116
|
- **AI 教育**:仅由用户管理的权威指导,AI 可以读取但永远不能修改。主动通知及其条件、持续时间、静默时段和重复频率只能在这里定义。
|
|
117
|
-
-
|
|
117
|
+
- 软件包附带的帮助、README、更新日志、Wiki 和示例片段不会加入 Telegram、RedBot 或自定义 CHAT 的提示词;仅网页助手在回答软件包技术问题时仍可使用这些内容。
|
|
118
118
|
- **Refresh** 按钮:请求 provider 并加载可用模型 ID。加载期间图标会旋转;成功完成时不会显示额外消息。
|
|
119
119
|
|
|
120
120
|
### Ollama 快速配置(本地)
|
|
@@ -125,6 +125,7 @@ Canvas 上的节点状态专门用于显示最近收到的请求,以及 LLM
|
|
|
125
125
|
- **2) Install it**:在本机下载并安装模型(例如 `llama3.1`)。
|
|
126
126
|
- 在刷新/安装模型时,KNX AI 也会在可能情况下尝试自动启动 Ollama 服务。
|
|
127
127
|
- 若安装因连接错误失败,请确认 Ollama 已运行(桌面应用或 `ollama serve`)。
|
|
128
|
+
- `/api/show` 报告的最大上下文仅用于显示。KNX AI 始终发送 `num_ctx = 16384`(若模型最大值更小则使用该值),并使用同一个按相关性选择的 16K 语义视图,从而避免分配过大的 KV 缓存,同时保留代理能力。
|
|
128
129
|
- 若 Node-RED 运行在 Docker 中,endpoint 请使用 `host.docker.internal` 替代 `localhost`。
|
|
129
130
|
|
|
130
131
|
### Bionic LM Studio 快速配置(本地)
|
|
@@ -132,6 +133,7 @@ Canvas 上的节点状态专门用于显示最近收到的请求,以及 LLM
|
|
|
132
133
|
- 在 LM Studio 的 **Developer** 页面启动 API 服务,或运行 `lms server start`。
|
|
133
134
|
- 默认 endpoint:`http://localhost:1234/v1/chat/completions`。
|
|
134
135
|
- 点击 **Refresh** 加载 `/v1/models` 提供的全部模型;未配置模型时会自动选择第一个。
|
|
136
|
+
- 如果模型已加载,KNX AI 会保留其当前上下文长度。KNX AI 不会通过管理 API 加载未运行的 Bionic 模型:首次聊天请求会让 Bionic 根据该模型已保存的默认值进行 JIT 加载。无论 Bionic 报告的上下文是多少,KNX AI 都会将自己的提示词限制为按相关性选择的 16K 语义视图;这样可避免发送完整的 131K 数据集,同时保留推理、KNX、例程、摄像头和 TTS 能力。
|
|
135
137
|
- 除非在 LM Studio 服务设置中启用了身份验证,否则 API Key 可留空。在 Docker 中请将 `localhost` 替换为 `host.docker.internal`。
|
|
136
138
|
|
|
137
139
|
## 安全说明
|
|
@@ -55,10 +55,12 @@
|
|
|
55
55
|
},
|
|
56
56
|
"messages": {
|
|
57
57
|
"lmStudioContextAvailable": "模型最大上下文",
|
|
58
|
-
"lmStudioContextLoading": "
|
|
59
|
-
"
|
|
58
|
+
"lmStudioContextLoading": "正在检查模型的当前上下文",
|
|
59
|
+
"lmStudioContextInactive": "模型未运行;首次请求时将使用 Bionic 默认值",
|
|
60
|
+
"lmStudioContextConfigured": "模型当前上下文",
|
|
60
61
|
"lmStudioContextFailed": "无法配置模型上下文",
|
|
61
62
|
"lmStudioContextCurrentlyLoaded": "当前已加载",
|
|
63
|
+
"localContextBudget": "KNX AI 上下文预算",
|
|
62
64
|
"ollamaNotSupported": "Ollama local mode: API key not required. Default endpoint is http://localhost:11434/api/chat.",
|
|
63
65
|
"ollamaNoModels": "No local Ollama model found. Install one or pick one from the library.",
|
|
64
66
|
"installingOllamaModel": "Starting Ollama and installing model…",
|
|
@@ -79,6 +81,14 @@
|
|
|
79
81
|
"chatContextLoading": "正在加载聊天上下文摘要…",
|
|
80
82
|
"chatContextUnavailable": "聊天上下文摘要暂时不可用。",
|
|
81
83
|
"chatContextIntro": "聊天会自动接收这些来源。以下路径是此 Node-RED 安装实际使用的路径。",
|
|
84
|
+
"chatContextLimitLabel": "最大运行上下文",
|
|
85
|
+
"chatContextProviderManaged": "由所选提供商/模型管理",
|
|
86
|
+
"chatContextTokens": "令牌",
|
|
87
|
+
"chatContextLastPromptLabel": "上次聊天提示词的实际大小",
|
|
88
|
+
"chatContextLastPromptUnavailable": "首次聊天请求前不可用",
|
|
89
|
+
"chatContextExactInputTokens": "提供商测量的输入令牌",
|
|
90
|
+
"chatContextEstimatedInputTokens": "估算输入令牌",
|
|
91
|
+
"chatContextImages": "图像",
|
|
82
92
|
"chatContextSourcesTitle": "包含的来源",
|
|
83
93
|
"chatContextFilesTitle": "持久化上下文文件",
|
|
84
94
|
"chatContextDirectoriesTitle": "KNX 报文归档",
|
|
@@ -86,7 +96,7 @@
|
|
|
86
96
|
"chatContextSourceAdapterHistory": "自动检测到的适配器事件的持久每日历史记录,包括摄像机检测事件。",
|
|
87
97
|
"chatContextSourceEtsProject": "ETS 语义和完整的 Node-RED 项目清单。",
|
|
88
98
|
"chatContextSourceMemoryEducation": "会话上下文、AI 教育和有界家庭记忆。",
|
|
89
|
-
"
|
|
99
|
+
"chatContextSourceCameras": "检测到的摄像机及其可用功能。",
|
|
90
100
|
"chatContextSourceTtsUltimate": "已选择用于播报的 TTS Ultimate 节点。",
|
|
91
101
|
"chatContextSourceBadge": "来源",
|
|
92
102
|
"chatContextFileChatContext": "持久化对话轮次、指令和摄像机通知规则。",
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"engines": {
|
|
4
4
|
"node": ">=20.18.1"
|
|
5
5
|
},
|
|
6
|
-
"version": "6.3.
|
|
6
|
+
"version": "6.3.22",
|
|
7
7
|
"description": "KNX Ultimate is the most advanced KNX integration for Node-RED, providing secure KNX/IP communication, routing, ETS project import, Philips Hue, Matter Controller and Matter Bridge (control matter device via KNX and expose KNX GA via Matter), MQTT, diagnostics with AI, virtual devices, and powerful automation nodes. Build professional, reliable, and scalable smart home and building automation projects with minimal effort.",
|
|
8
8
|
"files": [
|
|
9
9
|
"nodes/",
|