node-red-contrib-knx-ultimate 6.3.30 → 6.3.32

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.
@@ -20,9 +20,9 @@ El inventario muestra el número exacto de señales KNX con dirección de grupo
20
20
  Envía `/start` o `/help` desde un chat para recibir en la salida de chat (salida 3) una bienvenida determinista y localizada, con estadísticas personalizadas de la instalación y hasta tres sugerencias seguras. Este onboarding no llama al LLM, no lee ni escribe KNX y no genera TTS. Con el preajuste de Telegram, las sugerencias aparecen como botones del teclado de respuesta y solo se ejecutan cuando el usuario selecciona o envía una de ellas de forma explícita. Tras esa selección explícita, una sugerencia inicial puede realizar lecturas KNX exactas cuando sean necesarias; las escrituras y rutinas KNX, las acciones de cámara, TTS, los cambios de memoria persistente y el aprendizaje de roles GA permanecen bloqueados.
21
21
 
22
22
  ### Inteligencia Web
23
- El acceso Web está desactivado de forma predeterminada. Cuando se activa **Permitir que la IA use la Web**, el modelo conversacional puede elegir la herramienta Web estructurada directamente a partir de la solicitud actual; no se usan palabras clave, lógica específica por tema ni clasificadores de intención. Cada turno del usuario o ciclo proactivo puede realizar como máximo tres operaciones Web en total. Todas las operaciones Web externas reales comparten el presupuesto horario deslizante configurado.
23
+ El acceso Web está desactivado de forma predeterminada. Cuando se activa **Permitir que la IA use la Web**, el modelo conversacional decide en cada solicitud actual si necesita información pública actualizada y puede elegir la herramienta Web estructurada sin palabras clave, lógica específica por tema ni clasificadores de intención. Cada turno del usuario o ejecución de una tarea programada creada por el usuario puede realizar como máximo tres operaciones Web en total. Todas las operaciones Web externas reales comparten el presupuesto horario deslizante configurado.
24
24
 
25
- **Permitir comprobaciones Web proactivas** es una autorización independiente. También requiere instrucciones explícitas escritas por el usuario en **Educación IA**, respeta el intervalo mínimo configurado y solo empieza después de que KNX AI haya aprendido un chat destinatario a partir de al menos una solicitud normal. Sin ambas autorizaciones no se realiza ninguna operación Web en segundo plano.
25
+ KNX AI no inicia ningún ciclo fijo de consultas Web en segundo plano. Si un detalle esencial cambiaría sustancialmente la respuesta o la consulta—por ejemplo el tema, el alcance, el lugar, el intervalo temporal o el resultado deseado—el modelo hace una única pregunta concisa y no realiza ninguna operación Web hasta que el usuario responda. Las comprobaciones futuras o recurrentes se crean únicamente a partir de una solicitud explícita en lenguaje natural mediante el planificador.
26
26
 
27
27
  Cada respuesta basada en la Web contiene citas validadas por el runtime, con la URL de origen saneada y la hora de consulta, además de la hora de publicación cuando está disponible. El contenido externo son datos no confiables, nunca instrucciones, y no puede sustituir las reglas ni los permisos del asistente. Solo se aceptan recursos HTTPS públicos y limitados; se bloquean los destinos privados, locales, link-local y de metadatos cloud, las redirecciones inseguras, la navegación autenticada y las cookies. Si no se puede verificar ninguna fuente, KNX AI informa de esa limitación en lugar de generar una respuesta sin fuentes.
28
28
 
@@ -51,7 +51,12 @@ Si el procesamiento tarda más de 1,2 segundos, la salida 3 emite inmediatamente
51
51
 
52
52
  Cada solicitud de chat LLM usa un tiempo de espera mínimo de 30 minutos, independientemente del proveedor. No hay ningún campo de tiempo de espera que gestionar en el editor. Es una espera máxima, no un retraso artificial: los modelos más rápidos siguen terminando en cuanto tienen lista la respuesta. Si también se alcanza este límite, KNX AI indica que el modelo no terminó y recomienda volver a intentarlo o reducir el contexto del prompt.
53
53
 
54
- Para los proveedores locales, **Cantidad de contexto del chat** permite elegir explícitamente 4K, 8K, 16K o sin límite de KNX AI; 16K sigue siendo el valor predeterminado. Sin límite de KNX AI se usa la ventana de contexto declarada o activa del modelo, sin superar nunca su máximo físico. La selección limita proporcionalmente los datos KNX, de memoria, del proyecto Node-RED y de los adaptadores enviados al modelo, manteniendo completo el contrato de herramientas del agente. Ninguna capacidad se activa o desactiva según frases, palabras clave o intents lingüísticos.
54
+ KNX AI ya no ofrece un selector de tamaño de contexto en la aplicación. El catálogo ETS seleccionado completo permanece en el nodo y el modelo lo consulta mediante acciones limitadas de retrieval local; solo los objetos recuperados entran en el prompt. La búsqueda cubre direcciones exactas, nombres ETS, alias, jerarquía, áreas, semántica, DPT y etiquetas de valores, con ranking insensible a acentos y tolerante a errores, además de consulta exacta, navegación por áreas y descubrimiento de pares comando/estado. Sin un intervalo explícito, los eventos KNX y de adaptadores cubren los últimos 20 minutos. La ayuda, README, wiki, ejemplos y changelog incluidos nunca se incorporan; cuando sea necesario, el modelo puede consultar la documentación pública de GitHub mediante la herramienta Web. Los datos ETS recuperados, la solicitud actual y las filas del archivo aparecen una sola vez; en el bloque de análisis solo quedan agregados derivados del bus. El código Function completo solo se añade para una solicitud explícita de revisión. KNX AI no reintenta una solicitud demasiado grande compactando el prompt.
55
+
56
+ Antes de cada solicitud a un modelo local, KNX AI reserva espacio para la respuesta en la ventana activa de 8K/16K. Limita automáticamente los turnos de conversación más recientes, las filas exactas del archivo, la memoria doméstica aprendida, los resultados Web, las planificaciones, el código Function solicitado, los objetos ETS recuperados y los metadatos de las cámaras. Es una construcción preventiva del prompt, no un reintento después de un error de tamaño, y el catálogo ETS seleccionado completo sigue disponible localmente mediante retrieval.
57
+
58
+ ### Acceso a objetos ETS
59
+ Esta sección reproduce el selector de direcciones de grupo del perfil MQTT de IoT Bridge. Filtra la lista importada, selecciona todo o nada y aplica solo lectura a las direcciones visibles en bloque o fila por fila. Solo las direcciones seleccionadas están disponibles para el modelo. Todas las direcciones seleccionadas están activas y se pueden leer; las de solo lectura siguen visibles, pero la validación local rechaza todo `GroupValue_Write` hacia ellas. No existe migración ni fallback heredado: tras actualizar, abre cada nodo KNX AI existente, guarda su selección explícita y haz Deploy; hasta entonces, su catálogo de IA estará vacío.
55
60
 
56
61
  El estado del nodo en el canvas está reservado deliberadamente para la última solicitud recibida y el mensaje localizado «Estoy pensando…» mientras se ejecuta el LLM. Los telegramas KNX, las actualizaciones del gateway, las tasas de tráfico, los mensajes ready y los resultados técnicos nunca lo sobrescriben; siguen disponibles mediante las salidas, los registros y los datos del Asistente.
57
62
 
@@ -85,7 +90,7 @@ Los paquetes de cámaras instalados pueden publicar en tiempo de ejecución un a
85
90
 
86
91
  El usuario puede pedir una captura actual o preguntar al modelo de visión qué se ve. Los preajustes de Telegram y RedBot envían la imagen como foto nativa con pie. También se pueden crear notificaciones persistentes por movimiento, cruce de una línea inteligente o entrada en una zona de intrusión/merodeo, limitadas opcionalmente a personas detectadas y a una línea o zona concreta por nombre. Estas reglas se guardan en el mismo archivo `knxai-chat-context.knxctx` y se restauran después de reiniciar Node-RED. Las suscripciones a eventos UniFi y las solicitudes de captura se realizan directamente a través del proveedor detectado; no interviene la salida 4 de KNX AI ni hace falta cableado intermedio en el flujo.
87
92
 
88
- Cada evento publicado por un adaptador detectado automáticamente se normaliza y se añade directamente, en el formato nativo compacto por filas de KNX AI, a un archivo diario `YYYY-MM-DD.knxctx` bajo `knxultimatestorage/knxai/adapter-history/<id-nodo>/`. El archivo de telegramas KNX usa el mismo formato compacto, sin serialización JSON intermedia. El archivo conserva 10 días, garantiza más de 24 horas de historial y guarda metadatos, pero no imágenes. Los archivos JSONL existentes no se leen ni se migran. Los totales abarcan todas las filas almacenadas; los detalles seleccionados son solo una muestra relevante.
93
+ Cada evento publicado por un adaptador detectado automáticamente se normaliza y se añade directamente, en el formato nativo compacto por filas de KNX AI, a un archivo diario `YYYY-MM-DD.knxctx` bajo `knxultimatestorage/knxai/adapter-history/<id-nodo>/`. El archivo de telegramas KNX usa el mismo formato compacto, sin serialización JSON intermedia. El archivo conserva 10 días, garantiza más de 24 horas de historial y guarda metadatos, pero no imágenes. Los archivos JSONL existentes no se leen ni se migran. El prompt usa las filas exactas más recientes del intervalo suministrado, limitadas automáticamente a la ventana activa del modelo local.
89
94
 
90
95
  ### Anuncios con TTS Ultimate
91
96
  Conecta la salida 5 a uno o más nodos `ttsultimate` del paquete opcional `node-red-contrib-tts-ultimate`. El cableado normal de Node-RED determina el destino y la distribución; usa Link Out/Link In si el nodo TTS está en otra pestaña del flow. Se han eliminado el selector anterior del nodo TTS y la inyección interna. Las posiciones de las salidas 1–4 no cambian, pero los flows actualizados deben conectar físicamente la salida 5 antes de que los anuncios de voz lleguen a TTS Ultimate.
@@ -93,9 +98,11 @@ Conecta la salida 5 a uno o más nodos `ttsultimate` del paquete opcional `node-
93
98
  El modelo decide si prepara un anuncio razonando sobre la solicitud actual, las instrucciones persistentes del chat y la Educación IA gestionada por el usuario; no existe un intent de anuncio ni una lista de frases activadoras. Los valores KNX, eventos de adaptadores, imágenes y archivos siguen siendo datos y no instrucciones, aunque las indicaciones fiables del usuario pueden enseñar al modelo cómo actuar sobre ellos. La salida 5 emite el texto exacto que se debe pronunciar en `msg.payload`, define `msg.topic = "knx_ai_announcement"` y añade `msg.knxAi.type = "tts_announcement"` junto con `msg.knxAi.sourceNodeId`, `msg.knxAi.sessionId` y `msg.knxAi.reason`. TTS Ultimate gestiona después el reproductor, la voz, el volumen, el aviso inicial y la cola.
94
99
 
95
100
  ### Resumen del contexto del chat
96
- 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, planificaciones activas y cámaras detectadas. También muestra el contexto operativo máximo elegido por el usuario 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 las rutas absolutas de los archivos de planificación JSON autoritativo y Markdown legible, junto con los archivos de telegramas KNX y eventos de adaptadores y el patrón diario `YYYY-MM-DD.knxctx`. La Educación IA se guarda en la configuración del nodo y, por tanto, no tiene un archivo de ejecución separado.
101
+ El editor del nodo muestra una tarjeta compacta con las fuentes disponibles para el chat: eventos KNX y de adaptadores de los últimos 20 minutos o de un intervalo explícito, catálogo ETS seleccionado completo consultable localmente del que solo se añaden los objetos recuperados a cada prompt, código Function bajo demanda, memoria de sesión y del hogar, Educación IA, planificaciones activas y cámaras detectadas. También muestra el contexto operativo máximo declarado por el modelo 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 las rutas absolutas de los archivos de planificación JSON autoritativo y Markdown legible, junto con los archivos de telegramas KNX y eventos de adaptadores y el patrón diario `YYYY-MM-DD.knxctx`. La Educación IA se guarda en la configuración del nodo y, por tanto, no tiene un archivo de ejecución separado.
97
102
 
98
- El modelo recibe lecturas/escrituras KNX, adaptadores de cámara, anuncios TTS, memoria persistente, acceso Web y planificaciones/recordatorios como herramientas estructuradas. Puede seleccionarlas y combinarlas semánticamente a partir de la solicitud actual y de las indicaciones fiables aprendidas, sin routing por intents lingüísticos. El runtime solo valida argumentos, disponibilidad de adaptadores de cámara y límites de seguridad; las escrituras KNX conservan la validación ETS/DPT local y la confirmación configurada.
103
+ El modelo recibe retrieval local del catálogo ETS, lecturas/escrituras KNX, adaptadores de cámara, anuncios TTS, memoria persistente, acceso Web y planificaciones/recordatorios como herramientas estructuradas. Puede seleccionarlas y combinarlas semánticamente a partir de la solicitud actual y de las indicaciones fiables aprendidas, sin routing por intents lingüísticos. El retrieval del catálogo es determinista y local; el runtime valida argumentos, disponibilidad de adaptadores de cámara y límites de seguridad, mientras las escrituras KNX conservan la validación ETS/DPT local completa y la confirmación configurada.
104
+
105
+ El archivo de depuración local temporal `knxai-last-chat-prompt-<id-nodo>.txt` contiene el último texto exacto de los mensajes system/user, se sobrescribe antes de cada llamada de chat y no contiene claves API ni cabeceras HTTP.
99
106
 
100
107
  ### Edición y copia del aprendizaje CHAT
101
108
  La pestaña **Conversaciones y hogar** de la configuración Node-RED de KNX AI incluye el botón **Abrir aprendizaje del chat IA**, que abre la interfaz web Vue directamente en este editor para el nodo actual.
@@ -104,10 +111,8 @@ En la interfaz web Vue, abre **Ajustes → Aprendizaje del chat IA** para ver y
104
111
 
105
112
  Solo se admite el formato nativo V3. Los archivos Markdown/JSON V2 y Base64 V1 anteriores no se leen, importan ni migran deliberadamente; el archivo `.md` antiguo se deja intacto y KNX AI inicia un contexto `.knxctx` nuevo. Se mantienen los límites de 50 sesiones y 512 KB.
106
113
 
107
- ### Roles aprendidos de las direcciones de grupo KNX
108
- El rol `neutral` expresa una incertidumbre inicial, no una prohibición permanente de control. El modelo puede usar la herramienta estructurada `gaRoleActions` para aprender que una dirección de grupo ETS exacta es un objeto de comando, estado o neutro a partir de una enseñanza fiable del usuario, instrucciones persistentes del chat, Educación IA o una semántica inequívoca del proyecto ETS. No se requiere ninguna palabra clave ni intent de rol; si las pruebas son ambiguas, el modelo pide una aclaración en vez de aprender.
109
-
110
- El rol, el motivo y la prueba aprendidos se guardan por nodo en `<userDir>/knxai/config/knxai-config-<id-nodo>.json` y se sincronizan en la memoria semántica doméstica limitada. Un rol aprendido como `command` puede validar una escritura en la misma respuesta y permanece disponible después de reiniciar; el modelo también puede olvidarlo y restaurar la clasificación automática. El aprendizaje no puede inventar una GA, cambiar su DPT ETS, eludir la validación del payload ni omitir la confirmación de escritura configurada.
114
+ ### Acceso a objetos ETS
115
+ El acceso a objetos ETS es la única autoridad operativa. Toda dirección seleccionada en **Acceso a objetos ETS** está activa y se puede leer; también se puede escribir salvo que esté marcada como **Solo lectura**. No se envía al modelo de chat ninguna clasificación de rol inferida ni se usa para autorizar una escritura.
111
116
 
112
117
  ## Inteligencia doméstica proactiva guiada por Educación y memoria limitada
113
118
  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.
@@ -161,12 +166,10 @@ Aquí tienes todos los campos tal como se muestran en el editor de KNX AI.
161
166
  - **Model**: ID/nombre de modelo.
162
167
  - **Esfuerzo de razonamiento**: preferencia independiente del proveedor para modelos que permiten controlar el esfuerzo de razonamiento. **Automático** no envía ninguna preferencia y conserva el valor predeterminado del modelo/proveedor. Las opciones explícitas son `none`, `minimal`, `low`, `medium`, `high`, `xhigh` y `max`; la compatibilidad depende del protocolo de solicitud y del modelo, y KNX AI reintenta sin la preferencia si se rechaza.
163
168
  - **Permitir que la IA use la Web**: desactivado de forma predeterminada. Permite al modelo elegir semánticamente la herramienta Web general y devolver fuentes verificadas y citadas.
164
- - **Permitir comprobaciones Web proactivas**: autorización independiente para comprobaciones en segundo plano; también requiere instrucciones explícitas escritas por el usuario en **Educación IA**.
165
- - **Intervalo mínimo de las comprobaciones proactivas**: tiempo mínimo entre ciclos proactivos; no retrasa las operaciones Web solicitadas durante un turno de usuario activo.
166
- - **Máximo de llamadas Web por hora**: presupuesto deslizante compartido por las operaciones Web interactivas y proactivas. Cada turno o ciclo puede usar como máximo tres operaciones en total.
169
+ - **Máximo de llamadas Web por hora**: presupuesto deslizante compartido por las conversaciones y las tareas programadas creadas por el usuario. Cada turno o ejecución programada puede usar como máximo tres operaciones en total.
167
170
  - **Voz de Telegram**: disponible únicamente con el proveedor **OpenAI-compatible**. Reutiliza automáticamente su endpoint y clave API con los valores integrados `gpt-4o-mini-transcribe`, `gpt-4o-mini-tts` y `alloy`; no existen ajustes de voz separados.
168
171
  - **Compatibilidad del modelo de chat**: el modelo seleccionado debe admitir el endpoint Chat Completions configurado. Los modelos antiguos disponibles solo mediante completions, como `gpt-3.5-turbo-instruct`, se excluyen al actualizar la lista. Si el proveedor rechaza un valor personalizado de temperatura o el parámetro de límite de tokens, KNX AI vuelve a intentarlo eliminando o sustituyendo únicamente el campo incompatible.
169
- - **Permitir que la IA lea estados KNX y controle actuadores**: habilita la salida 4 y está desactivado por defecto. Los objetos exactos del catálogo ETS se pueden leer; solo se aceptan escrituras hacia objetos clasificados como `command`. Las operaciones desconocidas, con DPT distinto, inválidas o excesivas, y las escrituras hacia objetos de estado o neutrales, se rechazan localmente.
172
+ - **Permitir que la IA lea estados KNX y controle actuadores**: habilita la salida 4 y está desactivado por defecto. Todos los objetos ETS seleccionados se pueden leer; todos los objetos seleccionados que no estén marcados como **Solo lectura** se pueden escribir. Las operaciones desconocidas, con DPT distinto, inválidas o excesivas, y las escrituras hacia objetos de solo lectura, se rechazan localmente.
170
173
  - **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.
171
174
  - **Adaptador de mensajes de entrada/salida**: usa **Sin adaptador** por defecto. La selección carga el par predefinido de mapeos de entrada y salida; ambos permanecen ocultos en el editor.
172
175
  - **Educación de la IA**: instrucciones fijas y autoritativas del nodo, modificadas solo por el usuario y aplicadas con Deploy. El modelo las lee, pero nunca las escribe. Aquí se definen las políticas proactivas permanentes del hogar; los hechos y preferencias solicitados en el chat van a la memoria aprendida, mientras que las planificaciones, recordatorios, monitorizaciones y comandos futuros, únicos o recurrentes, van al planificador semántico sin frases activadoras ni routing por intents.
@@ -181,7 +184,7 @@ Aquí tienes todos los campos tal como se muestran en el editor de KNX AI.
181
184
  - **2) Install it**: descarga e instala el modelo localmente (p. ej. `llama3.1`).
182
185
  - Durante refresh/instalación, KNX AI también intenta iniciar automáticamente el servidor Ollama.
183
186
  - Si la instalación falla con error de conexión, verifica que Ollama esté ejecutándose (app de escritorio o `ollama serve`).
184
- - El contexto máximo declarado por `/api/show` queda solo como información. KNX AI envía como `num_ctx` el presupuesto elegido de 4K, 8K o 16K; sin límite de KNX AI usa el contexto declarado por el modelo, sin superar nunca su máximo físico. Cada fuente de contexto se limita proporcionalmente sin eliminar capacidades del agente.
187
+ - El contexto máximo declarado por `/api/show` se usa directamente como `num_ctx`. KNX AI no aplica un presupuesto inferior y envía el prompt operativo sin duplicados ni compactación basada en el tamaño, sin superar nunca el máximo físico declarado por el modelo.
185
188
  - Si Node-RED se ejecuta en Docker, usa `host.docker.internal` en lugar de `localhost` en el endpoint.
186
189
 
187
190
  ### Configuración rápida de Bionic LM Studio (local)
@@ -189,7 +192,7 @@ Aquí tienes todos los campos tal como se muestran en el editor de KNX AI.
189
192
  - Inicia el servidor API de LM Studio desde la página **Developer** o con `lms server start`.
190
193
  - Endpoint por defecto: `http://localhost:1234/v1/chat/completions`.
191
194
  - Pulsa **Refresh** para cargar todos los modelos expuestos por `/v1/models`; si no hay un modelo configurado se selecciona el primero.
192
- - 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. KNX AI usa el presupuesto de prompt elegido de 4K, 8K o 16K, o la ventana declarada o activa del modelo cuando se selecciona sin límite de KNX AI, sin superar su máximo físico; el razonamiento, KNX, las rutinas, las cámaras y TTS permanecen disponibles.
195
+ - 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. Todo el contexto disponible se envía sin presupuesto de aplicación; si no cabe en la ventana activa, la solicitud falla explícitamente.
193
196
  - 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`.
194
197
 
195
198
  ## Nota de seguridad
@@ -10,6 +10,7 @@
10
10
  "chatContextOverview": "Resumen del contexto del chat",
11
11
  "chatLearning": "Aprendizaje del chat IA",
12
12
  "quickSetup": "Configurar el asistente",
13
+ "etsAccess": "Acceso a objetos ETS",
13
14
  "llmConnection": "Conexion del Asistente IA",
14
15
  "chatAdapter": "Pines de entrada y salida del chat",
15
16
  "homeIntelligence": "Educación IA y memoria",
@@ -25,20 +26,17 @@
25
26
  "llmApiKey": "API key",
26
27
  "llmModel": "Model",
27
28
  "llmReasoningEffort": "Esfuerzo de razonamiento",
28
- "llmPromptContextTokens": "Cantidad de contexto del chat",
29
+ "llmLocalContextTokens": "Ventana de contexto local",
29
30
  "llmSystemPrompt": "System prompt",
30
31
  "llmIncludeRaw": "Include raw payload hex",
31
32
  "llmAllowKnxCommands": "Permitir que la IA lea estados KNX y controle actuadores",
32
33
  "llmRequireCommandConfirmation": "Pedir confirmación antes de enviar comandos KNX",
33
34
  "webAccessEnabled": "Permitir que la IA use la Web",
34
- "webProactiveEnabled": "Permitir comprobaciones Web proactivas",
35
- "webProactiveIntervalMinutes": "Intervalo mínimo de las comprobaciones proactivas",
36
35
  "webMaxCallsPerHour": "Máximo de llamadas Web por hora",
37
36
  "chatAdapterPreset": "Adaptador de mensajes de entrada/salida",
38
37
  "chatInputCode": "Mapeo de entrada (chat → KNX AI)",
39
38
  "chatOutputCode": "Mapeo de salida (KNX AI → chat)",
40
- "aiEducation": "Educación IA (gestionada por el usuario)",
41
- "llmIncludeDocsSnippets": "Include documentation snippets (help/README/examples)"
39
+ "aiEducation": "Educación IA (gestionada por el usuario)"
42
40
  },
43
41
  "outputs": {
44
42
  "summary": "Resumen/Estadísticas",
@@ -49,17 +47,11 @@
49
47
  },
50
48
  "selectlists": {
51
49
  "llmProvider": {
52
- "openai_compat": "OpenAI-compatible (chat/completions)",
50
+ "openai_compat": "OpenAI / compatible con OpenAI",
53
51
  "anthropic": "Anthropic (Claude)",
54
52
  "ollama": "Ollama (local)",
55
53
  "lmstudio": "Bionic LM Studio"
56
54
  },
57
- "promptContext": {
58
- "small": "Reducido (4K, más rápido)",
59
- "medium": "Medio (8K)",
60
- "full": "Completo (16K)",
61
- "unlimited": "Sin límite de KNX AI (usar el contexto del modelo)"
62
- },
63
55
  "reasoningEffort": {
64
56
  "default": "Automático (valor del modelo/proveedor)",
65
57
  "none": "Ninguno",
@@ -70,16 +62,18 @@
70
62
  "xhigh": "Muy alto",
71
63
  "max": "Máximo"
72
64
  },
65
+ "localContext": {
66
+ "maximum": "Máximo",
67
+ "k4": "4K",
68
+ "k8": "8K",
69
+ "k16": "16K",
70
+ "k32": "32K",
71
+ "k64": "64K",
72
+ "k128": "128K",
73
+ "k256": "256K"
74
+ },
73
75
  "chatAdapter": {
74
76
  "none": "Sin adaptador"
75
- },
76
- "webProactiveInterval": {
77
- "5": "5 minutos",
78
- "10": "10 minutos",
79
- "15": "15 minutos",
80
- "30": "30 minutos",
81
- "60": "1 hora",
82
- "180": "3 horas"
83
77
  }
84
78
  },
85
79
  "messages": {
@@ -92,18 +86,25 @@
92
86
  "setupDoctorWarn": "Revisar",
93
87
  "setupDoctorFail": "Corregir",
94
88
  "setupDoctorInfo": "Opcional",
95
- "webAccessHint": "El modelo elige semánticamente esta herramienta Web general; no se usan palabras clave ni clasificadores de intención. Los sitios externos y el servicio de búsqueda reciben la consulta y la IP pública de este servidor. Los datos privados de KNX, cámaras, chat, memoria y credenciales nunca se añaden automáticamente.",
96
- "webProactiveHint": "Esta autorización independiente también requiere instrucciones explícitas en Educación IA y un chat destinatario aprendido de una solicitud normal. El modelo decide qué comprobar; siguen vigentes los permisos de las demás herramientas y las reglas de confirmación KNX.",
97
- "webBudgetHint": "El presupuesto deslizante cuenta las llamadas externas reales del chat y de las comprobaciones proactivas.",
89
+ "webAccessHint": "El modelo elige semánticamente esta herramienta Web general para cada solicitud clara del chat o programada. Si falta un alcance esencial, pide una aclaración al usuario antes de buscar; no se usan consultas periódicas en segundo plano, palabras clave ni clasificadores de intención. Los sitios externos y el servicio de búsqueda reciben la consulta y la IP pública de este servidor. Los datos privados de KNX, cámaras, chat, memoria y credenciales nunca se añaden automáticamente.",
90
+ "webBudgetHint": "El presupuesto deslizante cuenta las llamadas externas reales de las conversaciones y las tareas programadas creadas por el usuario.",
98
91
  "lmStudioContextAvailable": "Contexto máximo del modelo",
99
92
  "lmStudioContextLoading": "Comprobando el contexto activo del modelo",
100
93
  "lmStudioContextInactive": "Modelo inactivo; se usarán los valores predeterminados de Bionic en la primera solicitud",
101
94
  "lmStudioContextConfigured": "Contexto activo del modelo",
102
95
  "lmStudioContextFailed": "No se pudo configurar el contexto del modelo",
103
96
  "lmStudioContextCurrentlyLoaded": "cargado actualmente",
104
- "localContextBudget": "Presupuesto de contexto de KNX AI",
105
- "promptContextHint": "Controla la cantidad de contexto KNX, memoria, proyecto y adaptadores enviada a los modelos locales. Elige «Sin límite de KNX AI» para usar la ventana declarada o activa del modelo. No activa ni desactiva herramientas ni usa enrutamiento por intents.",
97
+ "etsAccessHint": "Selecciona las direcciones de grupo disponibles para KNX AI. Todas las direcciones seleccionadas están activas y se pueden leer; todas las direcciones seleccionadas no marcadas como Solo lectura se pueden escribir. Los proveedores cloud reciben todo el catálogo ETS semántico seleccionado; los modelos locales reciben lo que cabe en la ventana de contexto elegida y pueden recuperar localmente los detalles que falten.",
98
+ "etsFilterPlaceholder": "Filtrar por nombre, GA o DPT…",
99
+ "etsSelected": "seleccionadas",
100
+ "etsReadOnly": "Solo lectura",
101
+ "etsReadOnlyBulk": "Solo lectura para las direcciones mostradas",
102
+ "etsNoGateway": "Selecciona una pasarela KNX.",
103
+ "etsNoGa": "No se encontraron direcciones de grupo. Importa la lista ETS en la pasarela KNX.",
104
+ "etsCsvError": "No se pudo cargar la lista de direcciones de grupo desde la pasarela.",
106
105
  "reasoningEffortHint": "Preferencia opcional para los modelos que admiten esfuerzo de razonamiento. Automático no envía ninguna preferencia; si el proveedor o el modelo rechaza el valor elegido, KNX AI reintenta sin él.",
106
+ "localContextBudget": "Ventana de contexto local",
107
+ "localContextHint": "Establece el contexto máximo solo para modelos locales. Máximo usa la ventana conocida del modelo y oculta los tamaños no disponibles. Los proveedores cloud ignoran este selector y reciben todo el catálogo ETS semántico seleccionado.",
107
108
  "ollamaNotSupported": "Ollama local mode: API key not required. Default endpoint is http://localhost:11434/api/chat.",
108
109
  "ollamaNoModels": "No local Ollama model found. Install one or pick one from the library.",
109
110
  "installingOllamaModel": "Starting Ollama and installing model…",
@@ -133,9 +134,9 @@
133
134
  "chatContextSourcesTitle": "Fuentes incluidas",
134
135
  "chatContextFilesTitle": "Archivos de contexto persistentes",
135
136
  "chatContextDirectoriesTitle": "Archivo de telegramas KNX",
136
- "chatContextSourceKnxTraffic": "Resumen KNX actual, anomalías, topología y telegramas seleccionados.",
137
- "chatContextSourceAdapterHistory": "Historial diario persistente de eventos de los adaptadores detectados, incluidas las detecciones de cámaras.",
138
- "chatContextSourceEtsProject": "Semántica ETS e inventario completo del proyecto Node-RED.",
137
+ "chatContextSourceKnxTraffic": "Análisis KNX derivado y los eventos exactos más recientes del intervalo predeterminado de 20 minutos o explícito, limitados automáticamente a la ventana activa del modelo local.",
138
+ "chatContextSourceAdapterHistory": "Eventos exactos más recientes de adaptadores del mismo intervalo, limitados automáticamente a la ventana activa del modelo local.",
139
+ "chatContextSourceEtsProject": "Catálogo ETS semántico seleccionado completo para modelos cloud. Los modelos locales reciben el catálogo completo cuando cabe en la ventana; de lo contrario reciben un índice ajustado y los detalles exactos solicitados por el modelo. Código Function solo para una revisión explícita.",
139
140
  "chatContextSourceMemoryEducation": "Contexto de sesión, Educación IA, memoria doméstica limitada y planificaciones activas.",
140
141
  "chatContextSourceCameras": "Cámaras detectadas y sus capacidades disponibles.",
141
142
  "chatContextSourceBadge": "Fuente",
@@ -144,6 +145,7 @@
144
145
  "chatContextFileSchedules": "Estado de ejecución persistente y autoritativo de las planificaciones y recordatorios de este nodo.",
145
146
  "chatContextFileSchedulesReadable": "Vista legible generada de las planificaciones y recordatorios de este nodo.",
146
147
  "chatContextFileAssistantConfig": "Configuración persistente del Asistente web y áreas semánticas de este nodo.",
148
+ "chatContextFileLastChatPrompt": "Copia local temporal de los últimos mensajes system y user enviados al modelo de chat; se sobrescribe en cada solicitud.",
147
149
  "chatContextFileBadge": "Archivo",
148
150
  "chatContextDirectoryRoot": "Raíz del archivo de telegramas",
149
151
  "chatContextDirectoryNode": "Archivo de telegramas de este nodo",
@@ -216,7 +218,11 @@
216
218
  "installOllamaModel": "2) Install it",
217
219
  "ollamaLibrary": "Model library",
218
220
  "downloadOllamaModel": "1) Download model",
219
- "openChatLearning": "Abrir aprendizaje del chat IA"
221
+ "openChatLearning": "Abrir aprendizaje del chat IA",
222
+ "etsSelectAll": "Seleccionar todo",
223
+ "etsSelectNone": "Deseleccionar todo",
224
+ "etsReadOnlyAll": "Marcar solo lectura",
225
+ "etsReadOnlyNone": "Quitar solo lectura"
220
226
  }
221
227
  }
222
228
  }
@@ -20,9 +20,9 @@ L'inventaire indique le nombre exact de signaux KNX à adresse de groupe unique,
20
20
  Envoyez `/start` ou `/help` depuis un chat pour recevoir sur la sortie chat (sortie 3) un accueil déterministe et localisé, avec des statistiques personnalisées de l'installation et jusqu'à trois suggestions sûres. Cet onboarding n'appelle pas le LLM, ne lit ni n'écrit KNX et ne génère aucun TTS. Avec le préréglage Telegram, les suggestions apparaissent sous forme de boutons du clavier de réponse et ne sont exécutées qu'après la sélection ou l'envoi explicite de l'une d'elles par l'utilisateur. Après cette sélection explicite, une suggestion de démarrage peut effectuer des lectures KNX exactes si nécessaire ; les écritures et routines KNX, les actions de caméra, le TTS, les modifications de la mémoire persistante et l'apprentissage des rôles GA restent bloqués.
21
21
 
22
22
  ### Intelligence Web
23
- L'accès Web est désactivé par défaut. Lorsque **Autoriser l'IA à utiliser le Web** est activé, le modèle conversationnel peut choisir l'outil Web structuré directement à partir de la demande courante ; aucun mot-clé, aucune logique propre à un sujet ni aucun classificateur d'intention n'est utilisé. Chaque demande utilisateur ou cycle proactif peut effectuer au maximum trois opérations Web au total. Toutes les opérations Web externes réelles partagent le budget horaire glissant configuré.
23
+ L'accès Web est désactivé par défaut. Lorsque **Autoriser l'IA à utiliser le Web** est activé, le modèle conversationnel décide pour chaque demande courante si des informations publiques à jour sont nécessaires et peut choisir l'outil Web structuré sans mot-clé, logique propre à un sujet ni classificateur d'intention. Chaque demande utilisateur ou exécution d'une tâche planifiée créée par l'utilisateur peut effectuer au maximum trois opérations Web au total. Toutes les opérations Web externes réelles partagent le budget horaire glissant configuré.
24
24
 
25
- **Autoriser les vérifications Web proactives** est une autorisation distincte. Elle exige aussi des instructions explicites rédigées par l'utilisateur dans **Éducation de l'IA**, respecte l'intervalle minimal configuré et ne démarre qu'après que KNX AI a appris un chat destinataire depuis au moins une demande normale. Sans ces deux autorisations, aucune opération Web n'est effectuée en arrière-plan.
25
+ KNX AI ne démarre aucun cycle fixe de polling Web en arrière-plan. Si un détail essentiel modifierait sensiblement la réponse ou la requête—par exemple le sujet, la portée, le lieu, la période ou le résultat attendu—le modèle pose une seule question concise et n'effectue aucune opération Web avant la réponse de l'utilisateur. Les vérifications futures ou récurrentes sont créées uniquement à partir d'une demande explicite en langage naturel via le planificateur.
26
26
 
27
27
  Toute réponse fondée sur le Web contient des citations validées par le runtime, avec une URL source assainie et l'heure de consultation, ainsi que l'heure de publication lorsqu'elle est disponible. Le contenu externe est une donnée non fiable, jamais une instruction, et ne peut remplacer les règles ou autorisations de l'assistant. Seules des ressources HTTPS publiques et limitées sont acceptées ; les destinations privées, locales, link-local et de métadonnées cloud, les redirections non sûres, la navigation authentifiée et les cookies sont bloqués. Si aucune source ne peut être vérifiée, KNX AI signale cette limite au lieu de générer une réponse sans source.
28
28
 
@@ -51,7 +51,12 @@ Si le traitement dure plus de 1,2 seconde, la sortie 3 émet immédiatement le m
51
51
 
52
52
  Chaque requête de chat LLM utilise un délai d’attente minimal de 30 minutes, indépendamment du fournisseur. Aucun champ de délai n’est à gérer dans l’éditeur. Il s’agit d’une attente maximale, et non d’un délai artificiel : les modèles plus rapides terminent toujours dès que leur réponse est prête. Si même cette limite est atteinte, KNX AI indique que le modèle n’a pas terminé et conseille de réessayer ou de réduire le contexte du prompt.
53
53
 
54
- Pour les fournisseurs locaux, **Quantité de contexte du chat** permet de choisir explicitement 4K, 8K, 16K ou aucune limite KNX AI ; 16K reste la valeur par défaut. Sans limite KNX AI, la fenêtre de contexte déclarée ou active du modèle est utilisée sans jamais dépasser son maximum physique. Ce choix limite proportionnellement les données KNX, de mémoire, du projet Node-RED et des adaptateurs fournies au modèle, tout en conservant le contrat complet des outils de l’agent. Aucune capacité n’est activée ou désactivée selon une formulation, des mots-clés ou des intents linguistiques.
54
+ KNX AI ne propose plus de sélecteur applicatif pour la taille du contexte. Le catalogue ETS sélectionné complet reste dans le nœud et le modèle l’interroge via des actions de retrieval local limitées ; seuls les objets récupérés entrent dans le prompt. La recherche couvre les adresses exactes, noms ETS, alias, hiérarchie, zones, sémantique, DPT et libellés de valeurs, avec un classement insensible aux accents et tolérant aux fautes, ainsi que la consultation exacte, la navigation par zone et la découverte des couples commande/état. Sans intervalle explicite, les événements KNX et adaptateurs couvrent les 20 dernières minutes. L’aide, le README, le wiki, les exemples et le changelog fournis ne sont jamais intégrés ; si nécessaire, le modèle peut consulter la documentation GitHub publique via l’outil Web. Les données ETS récupérées, la requête courante et les lignes d’archive n’apparaissent qu’une fois ; le bloc d’analyse ne conserve que les agrégats dérivés du bus. Le source Function complet n’est ajouté que pour une demande explicite de revue de code Function. KNX AI ne réessaie pas une requête trop volumineuse en compactant le prompt.
55
+
56
+ Avant chaque requête à un modèle local, KNX AI réserve de la place pour la réponse dans la fenêtre active de 8K/16K. Il limite automatiquement les tours de conversation les plus récents, les lignes exactes des archives, la mémoire apprise de la maison, les résultats Web, les planifications, le source Function demandé, les objets ETS récupérés et les métadonnées des caméras. Il s’agit d’une construction préventive du prompt, et non d’une nouvelle tentative après une erreur de taille ; le catalogue ETS sélectionné complet reste disponible localement par retrieval.
57
+
58
+ ### Accès aux objets ETS
59
+ Cette section reprend le sélecteur d’adresses de groupe du profil MQTT d’IoT Bridge. Filtrez la liste importée, sélectionnez tout ou rien et appliquez la lecture seule aux adresses visibles en bloc ou ligne par ligne. Seules les adresses sélectionnées sont accessibles au modèle. Toute adresse sélectionnée est active et lisible ; les adresses en lecture seule restent visibles, mais la validation locale refuse tout `GroupValue_Write` vers elles. Il n’existe ni migration ni repli hérité : après la mise à jour, ouvrez chaque nœud KNX AI existant, enregistrez sa sélection explicite et déployez ; jusque-là, son catalogue IA est vide.
55
60
 
56
61
  L’état du nœud sur le canvas est volontairement réservé à la dernière demande reçue et au message localisé « Je réfléchis… » pendant l’exécution du LLM. Les télégrammes KNX, mises à jour de la passerelle, débits de trafic, messages ready et résultats techniques ne l’écrasent jamais ; ils restent disponibles via les sorties, les journaux et les données de l’Assistant.
57
62
 
@@ -85,7 +90,7 @@ Les paquets de caméra installés peuvent publier à l’exécution un adaptateu
85
90
 
86
91
  L’utilisateur peut demander une capture actuelle ou demander au modèle de vision ce qui est visible. Les préréglages Telegram et RedBot envoient l’image comme photo native avec une légende. L’utilisateur peut aussi créer des notifications persistantes pour un mouvement, le franchissement d’une ligne intelligente ou l’entrée dans une zone d’intrusion/de stationnement, avec une limitation facultative aux personnes détectées et à une ligne ou zone nommée précise. Ces règles sont stockées dans le même fichier `knxai-chat-context.knxctx` et restaurées après les redémarrages de Node-RED. Les abonnements aux événements UniFi et les demandes de capture passent directement par le fournisseur détecté ; la sortie 4 de KNX AI et un câblage intermédiaire ne sont pas nécessaires.
87
92
 
88
- Chaque événement publié par un adaptateur détecté automatiquement est normalisé puis ajouté directement, dans le format natif compact par lignes de KNX AI, à un fichier quotidien `YYYY-MM-DD.knxctx` sous `knxultimatestorage/knxai/adapter-history/<id-nœud>/`. L’archive des télégrammes KNX utilise le même format compact, sans sérialisation JSON intermédiaire. L’archive conserve 10 jours, garantit plus de 24 heures d’historique et stocke les métadonnées, mais pas les images. Les archives JSONL existantes ne sont ni lues ni migrées. Les totaux couvrent toutes les lignes stockées ; les détails sélectionnés ne sont qu’un échantillon pertinent.
93
+ Chaque événement publié par un adaptateur détecté automatiquement est normalisé puis ajouté directement, dans le format natif compact par lignes de KNX AI, à un fichier quotidien `YYYY-MM-DD.knxctx` sous `knxultimatestorage/knxai/adapter-history/<id-nœud>/`. L’archive des télégrammes KNX utilise le même format compact, sans sérialisation JSON intermédiaire. L’archive conserve 10 jours, garantit plus de 24 heures d’historique et stocke les métadonnées, mais pas les images. Les archives JSONL existantes ne sont ni lues ni migrées. Le prompt utilise les lignes exactes les plus récentes de l’intervalle fourni, automatiquement limitées à la fenêtre active du modèle local.
89
94
 
90
95
  ### Annonces avec TTS Ultimate
91
96
  Reliez la sortie 5 à un ou plusieurs nœuds `ttsultimate` du paquet facultatif `node-red-contrib-tts-ultimate`. Le câblage Node-RED habituel détermine la destination et la diffusion ; utilisez Link Out/Link In si le nœud TTS se trouve dans un autre onglet de flow. L'ancien sélecteur de nœud TTS et l'injection interne ont été supprimés. Les positions des sorties 1 à 4 restent inchangées, mais les flows mis à niveau doivent relier physiquement la sortie 5 avant que les annonces vocales puissent atteindre TTS Ultimate.
@@ -93,9 +98,11 @@ Reliez la sortie 5 à un ou plusieurs nœuds `ttsultimate` du paquet facultatif
93
98
  Le modèle décide de préparer ou non une annonce en raisonnant sur la demande actuelle, les instructions persistantes du chat et l’Éducation IA gérée par l’utilisateur ; il n’existe ni intent d’annonce ni liste de phrases déclencheuses. Les valeurs KNX, événements d’adaptateur, images et archives restent des données et non des instructions, mais les consignes fiables de l’utilisateur peuvent apprendre au modèle comment agir sur ces données. La sortie 5 émet le texte exact à prononcer dans `msg.payload`, définit `msg.topic = "knx_ai_announcement"` et ajoute `msg.knxAi.type = "tts_announcement"` avec `msg.knxAi.sourceNodeId`, `msg.knxAi.sessionId` et `msg.knxAi.reason`. TTS Ultimate gère ensuite le lecteur, la voix, le volume, le signal et la file d’attente.
94
99
 
95
100
  ### Aperçu du contexte du chat
96
- 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, planifications actives et caméras détectées. Elle affiche aussi le contexte opérationnel maximal choisi par l’utilisateur 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 les chemins absolus des fichiers de planification JSON faisant autorité et Markdown lisible, ainsi que les archives des télégrammes KNX et des événements d’adaptateurs avec le format quotidien `YYYY-MM-DD.knxctx`. L’Éducation IA est enregistrée dans la configuration du nœud et ne possède donc aucun fichier d’exécution distinct.
101
+ L’éditeur du nœud affiche une carte compacte résumant les sources disponibles pour le chat : événements KNX et adaptateurs des 20 dernières minutes ou d’un intervalle explicite, catalogue ETS sélectionné complet consultable localement dont seuls les objets récupérés sont ajoutés à chaque prompt, source Function à la demande, mémoire de session et de la maison, Éducation IA, planifications actives et caméras détectées. Elle affiche aussi le contexte opérationnel maximal déclaré par le modèle 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 les chemins absolus des fichiers de planification JSON faisant autorité et Markdown lisible, ainsi que les archives des télégrammes KNX et des événements d’adaptateurs avec le format quotidien `YYYY-MM-DD.knxctx`. L’Éducation IA est enregistrée dans la configuration du nœud et ne possède donc aucun fichier d’exécution distinct.
97
102
 
98
- Le modèle reçoit les lectures/écritures KNX, les adaptateurs caméra, les annonces TTS, la mémoire persistante, l'accès Web et les planifications/rappels comme outils structurés. Il peut les sélectionner et les combiner sémantiquement à partir de la demande actuelle et des consignes fiables apprises, sans routage par intents linguistiques. Le runtime ne valide que les arguments, la disponibilité des adaptateurs caméra et les limites de sécurité ; les écritures KNX conservent la validation ETS/DPT locale et la confirmation configurée.
103
+ Le modèle reçoit le retrieval local du catalogue ETS, les lectures/écritures KNX, les adaptateurs caméra, les annonces TTS, la mémoire persistante, l'accès Web et les planifications/rappels comme outils structurés. Il peut les sélectionner et les combiner sémantiquement à partir de la demande actuelle et des consignes fiables apprises, sans routage par intents linguistiques. Le retrieval du catalogue est déterministe et local ; le runtime valide les arguments, la disponibilité des adaptateurs caméra et les limites de sécurité, tandis que les écritures KNX conservent la validation ETS/DPT locale complète et la confirmation configurée.
104
+
105
+ Le fichier de débogage local temporaire `knxai-last-chat-prompt-<id-nœud>.txt` contient le dernier texte exact des messages système/utilisateur, est remplacé avant chaque appel de chat et ne contient ni clé API ni en-tête HTTP.
99
106
 
100
107
  ### Modification et sauvegarde de l'apprentissage CHAT
101
108
  L'onglet **Conversations et maison** de la configuration Node-RED de KNX AI contient le bouton **Ouvrir l'apprentissage du chat IA**, qui ouvre l'interface web Vue directement sur cet éditeur pour le nœud actuel.
@@ -104,10 +111,8 @@ Dans l'interface web Vue, ouvrez **Paramètres → Apprentissage du chat IA** po
104
111
 
105
112
  Seul le format natif V3 est pris en charge. Les anciens fichiers Markdown/JSON V2 et Base64 V1 ne sont volontairement ni lus, ni importés, ni migrés ; l'ancien fichier `.md` reste intact et KNX AI démarre un nouveau contexte `.knxctx`. Les limites de 50 sessions et 512 Ko restent applicables.
106
113
 
107
- ### Rôles appris des adresses de groupe KNX
108
- Le rôle `neutral` représente une incertitude initiale, pas une interdiction permanente de commande. Le modèle peut utiliser l’outil structuré `gaRoleActions` pour apprendre qu’une adresse de groupe ETS exacte est un objet de commande, d’état ou neutre à partir d’un enseignement fiable de l’utilisateur, de consignes persistantes du chat, de l’Éducation IA ou d’une sémantique non équivoque du projet ETS. Aucun mot-clé ni intent de rôle n’est requis ; si les preuves sont ambiguës, le modèle demande une précision au lieu d’apprendre.
109
-
110
- Le rôle, la justification et la preuve appris sont enregistrés par nœud dans `<userDir>/knxai/config/knxai-config-<id-nœud>.json` et synchronisés dans la mémoire sémantique domestique limitée. Un rôle appris comme `command` peut valider une écriture dans la même réponse et reste disponible après redémarrage ; le modèle peut aussi l’oublier et rétablir la classification automatique. L’apprentissage ne peut pas inventer une GA, modifier son DPT ETS, contourner la validation du payload ni ignorer la confirmation d’écriture configurée.
114
+ ### Accès aux objets ETS
115
+ L’accès aux objets ETS est la seule autorité opérationnelle. Toute adresse sélectionnée dans **Accès aux objets ETS** est active et lisible ; elle est également inscriptible sauf si elle est marquée **Lecture seule**. Aucune classification de rôle déduite n’est envoyée au modèle de chat ni utilisée pour autoriser une écriture.
111
116
 
112
117
  ## Intelligence domestique proactive guidée par l’Éducation et mémoire limitée
113
118
  À 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é.
@@ -161,12 +166,10 @@ Voici tous les champs tels qu'affichés dans l'éditeur KNX AI.
161
166
  - **Model** : ID/nom du modèle.
162
167
  - **Effort de raisonnement** : préférence indépendante du fournisseur pour les modèles qui permettent de régler l’effort de raisonnement. **Automatique** n’envoie aucune préférence et conserve la valeur par défaut du modèle/fournisseur. Les choix explicites sont `none`, `minimal`, `low`, `medium`, `high`, `xhigh` et `max` ; leur prise en charge dépend du protocole de requête et du modèle, et KNX AI réessaie sans la préférence si elle est refusée.
163
168
  - **Autoriser l'IA à utiliser le Web** : désactivé par défaut. Permet au modèle de choisir sémantiquement l'outil Web général et de fournir des sources vérifiées et citées.
164
- - **Autoriser les vérifications Web proactives** : autorisation distincte pour les vérifications en arrière-plan ; elle exige aussi des instructions explicites rédigées par l'utilisateur dans **Éducation de l'IA**.
165
- - **Intervalle minimal des vérifications proactives** : durée minimale entre les cycles proactifs ; elle ne retarde pas les opérations Web demandées pendant un échange utilisateur actif.
166
- - **Nombre maximal d'appels Web par heure** : budget glissant partagé entre les opérations Web interactives et proactives. Chaque échange ou cycle peut utiliser au maximum trois opérations au total.
169
+ - **Nombre maximal d'appels Web par heure** : budget glissant partagé entre les conversations et les tâches planifiées créées par l'utilisateur. Chaque échange ou exécution planifiée peut utiliser au maximum trois opérations au total.
167
170
  - **Voix Telegram** : disponible uniquement avec le fournisseur **OpenAI-compatible**. Elle réutilise automatiquement son endpoint et sa clé API avec les valeurs intégrées `gpt-4o-mini-transcribe`, `gpt-4o-mini-tts` et `alloy` ; il n’existe aucun réglage vocal distinct.
168
171
  - **Compatibilité du modèle de chat** : le modèle sélectionné doit prendre en charge l'endpoint Chat Completions configuré. Les anciens modèles réservés aux completions, comme `gpt-3.5-turbo-instruct`, sont exclus lors de l'actualisation de la liste. Si le fournisseur refuse une valeur de température personnalisée ou le paramètre de limite de tokens, KNX AI réessaie en supprimant ou remplaçant uniquement le champ incompatible.
169
- - **Autoriser l’IA à lire les états KNX et commander les actionneurs** : active la sortie 4 et reste désactivé par défaut. Les objets exacts du catalogue ETS peuvent être lus ; seules les écritures vers des objets classés `command` sont acceptées. Les opérations inconnues, avec DPT discordant, invalides ou trop nombreuses, ainsi que les écritures vers des objets d'état ou neutres, sont rejetées localement.
172
+ - **Autoriser l’IA à lire les états KNX et commander les actionneurs** : active la sortie 4 et reste désactivé par défaut. Tout objet ETS sélectionné peut être lu ; tout objet sélectionné non marqué **Lecture seule** peut être écrit. Les opérations inconnues, avec DPT discordant, invalides ou trop nombreuses, ainsi que les écritures vers des objets en lecture seule, sont rejetées localement.
170
173
  - **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.
171
174
  - **Adaptateur des messages d’entrée/sortie** : 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.
172
175
  - **Éducation de l’IA** : consignes fixes du nœud faisant autorité, modifiées uniquement par l’utilisateur et appliquées avec Deploy. Le modèle les lit mais ne les écrit jamais. Les politiques domotiques proactives permanentes se définissent ici ; les faits et préférences demandés dans le chat vont dans la mémoire apprise, tandis que les planifications, rappels, surveillances et commandes futures, ponctuels ou récurrents, vont dans le planificateur sémantique sans phrase déclencheuse ni routage par intent.
@@ -181,7 +184,7 @@ Voici tous les champs tels qu'affichés dans l'éditeur KNX AI.
181
184
  - **2) Install it** : télécharge et installe le modèle localement (ex. `llama3.1`).
182
185
  - Pendant refresh/install, KNX AI tente aussi de démarrer automatiquement le serveur Ollama.
183
186
  - Si l'installation échoue avec une erreur de connexion, vérifier qu'Ollama est lancé (app desktop ou `ollama serve`).
184
- - Le contexte maximal déclaré par `/api/show` reste informatif. KNX AI envoie le budget choisi de 4K, 8K ou 16K comme `num_ctx` ; sans limite KNX AI, il utilise le contexte déclaré par le modèle, sans jamais dépasser son maximum physique. Chaque source de contexte est limitée proportionnellement sans retirer de capacités à l’agent.
187
+ - Le contexte maximal déclaré par `/api/show` est utilisé directement comme `num_ctx`. KNX AI n'applique aucun budget inférieur et envoie le prompt opérationnel dédupliqué sans compaction liée à la taille, sans jamais dépasser le maximum physique déclaré par le modèle.
185
188
  - Si Node-RED tourne dans Docker, utiliser `host.docker.internal` au lieu de `localhost` dans l'endpoint.
186
189
 
187
190
  ### Démarrage rapide Bionic LM Studio (local)
@@ -189,7 +192,7 @@ Voici tous les champs tels qu'affichés dans l'éditeur KNX AI.
189
192
  - Démarrer le serveur API LM Studio depuis la page **Developer** ou avec `lms server start`.
190
193
  - Endpoint par défaut : `http://localhost:1234/v1/chat/completions`.
191
194
  - 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é.
192
- - 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. KNX AI utilise le budget de prompt choisi de 4K, 8K ou 16K, ou la fenêtre déclarée ou active du modèle lorsque l’absence de limite KNX AI est sélectionnée, sans dépasser son maximum physique ; les capacités de raisonnement, KNX, routines, caméras et TTS restent disponibles.
195
+ - 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. Tout le contexte disponible est envoyé sans budget applicatif ; s'il ne tient pas dans la fenêtre active, la requête échoue explicitement.
193
196
  - 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`.
194
197
 
195
198
  ## Note sécurité
@@ -10,6 +10,7 @@
10
10
  "chatContextOverview": "Aperçu du contexte du chat",
11
11
  "chatLearning": "Apprentissage du chat IA",
12
12
  "quickSetup": "Configurer l'assistant",
13
+ "etsAccess": "Accès aux objets ETS",
13
14
  "llmConnection": "Connexion Assistant IA",
14
15
  "chatAdapter": "Ports d’entrée et de sortie du chat",
15
16
  "homeIntelligence": "Éducation IA et mémoire",
@@ -25,20 +26,17 @@
25
26
  "llmApiKey": "API key",
26
27
  "llmModel": "Model",
27
28
  "llmReasoningEffort": "Effort de raisonnement",
28
- "llmPromptContextTokens": "Quantité de contexte du chat",
29
+ "llmLocalContextTokens": "Fenêtre de contexte locale",
29
30
  "llmSystemPrompt": "System prompt",
30
31
  "llmIncludeRaw": "Include raw payload hex",
31
32
  "llmAllowKnxCommands": "Autoriser l’IA à lire les états KNX et commander les actionneurs",
32
33
  "llmRequireCommandConfirmation": "Demander confirmation avant d’envoyer les commandes KNX",
33
34
  "webAccessEnabled": "Autoriser l’IA à utiliser le Web",
34
- "webProactiveEnabled": "Autoriser les vérifications Web proactives",
35
- "webProactiveIntervalMinutes": "Intervalle minimal des vérifications proactives",
36
35
  "webMaxCallsPerHour": "Nombre maximal d’appels Web par heure",
37
36
  "chatAdapterPreset": "Adaptateur des messages d’entrée/sortie",
38
37
  "chatInputCode": "Mappage d’entrée (chat → KNX AI)",
39
38
  "chatOutputCode": "Mappage de sortie (KNX AI → chat)",
40
- "aiEducation": "Éducation IA (gérée par l'utilisateur)",
41
- "llmIncludeDocsSnippets": "Include documentation snippets (help/README/examples)"
39
+ "aiEducation": "Éducation IA (gérée par l'utilisateur)"
42
40
  },
43
41
  "outputs": {
44
42
  "summary": "Résumé/Stats",
@@ -49,17 +47,11 @@
49
47
  },
50
48
  "selectlists": {
51
49
  "llmProvider": {
52
- "openai_compat": "OpenAI-compatible (chat/completions)",
50
+ "openai_compat": "OpenAI / compatible OpenAI",
53
51
  "anthropic": "Anthropic (Claude)",
54
52
  "ollama": "Ollama (local)",
55
53
  "lmstudio": "Bionic LM Studio"
56
54
  },
57
- "promptContext": {
58
- "small": "Réduit (4K, plus rapide)",
59
- "medium": "Moyen (8K)",
60
- "full": "Complet (16K)",
61
- "unlimited": "Aucune limite KNX AI (utiliser le contexte du modèle)"
62
- },
63
55
  "reasoningEffort": {
64
56
  "default": "Automatique (valeur du modèle/fournisseur)",
65
57
  "none": "Aucun",
@@ -70,16 +62,18 @@
70
62
  "xhigh": "Très élevé",
71
63
  "max": "Maximum"
72
64
  },
65
+ "localContext": {
66
+ "maximum": "Maximum",
67
+ "k4": "4K",
68
+ "k8": "8K",
69
+ "k16": "16K",
70
+ "k32": "32K",
71
+ "k64": "64K",
72
+ "k128": "128K",
73
+ "k256": "256K"
74
+ },
73
75
  "chatAdapter": {
74
76
  "none": "Aucun adaptateur"
75
- },
76
- "webProactiveInterval": {
77
- "5": "5 minutes",
78
- "10": "10 minutes",
79
- "15": "15 minutes",
80
- "30": "30 minutes",
81
- "60": "1 heure",
82
- "180": "3 heures"
83
77
  }
84
78
  },
85
79
  "messages": {
@@ -92,18 +86,25 @@
92
86
  "setupDoctorWarn": "Vérifier",
93
87
  "setupDoctorFail": "Corriger",
94
88
  "setupDoctorInfo": "Optionnel",
95
- "webAccessHint": "Le modèle choisit sémantiquement cet outil Web général ; aucun mot-clé ni classificateur d’intention n’est utilisé. Les sites externes et le service de recherche reçoivent la requête et l’adresse IP publique de ce serveur. Les données privées KNX, caméra, chat, mémoire et identifiants d’accès ne sont jamais ajoutées automatiquement.",
96
- "webProactiveHint": "Cette autorisation distincte exige aussi des instructions explicites dans l’Éducation de l’IA et un chat destinataire appris depuis une demande normale. Le modèle décide quoi vérifier ; les autorisations des autres outils et les règles de confirmation KNX restent applicables.",
97
- "webBudgetHint": "Le budget glissant compte les appels externes réels du chat et des vérifications proactives.",
89
+ "webAccessHint": "Le modèle choisit sémantiquement cet outil Web général pour chaque demande claire du chat ou planifiée. Si une portée essentielle est ambiguë, il demande une précision à l’utilisateur avant la recherche ; aucun polling en arrière-plan, mot-clé ni classificateur d’intention n’est utilisé. Les sites externes et le service de recherche reçoivent la requête et l’adresse IP publique de ce serveur. Les données privées KNX, caméra, chat, mémoire et identifiants d’accès ne sont jamais ajoutées automatiquement.",
90
+ "webBudgetHint": "Le budget glissant compte les appels externes réels des conversations et des tâches planifiées créées par l’utilisateur.",
98
91
  "lmStudioContextAvailable": "Contexte maximal du modèle",
99
92
  "lmStudioContextLoading": "Vérification du contexte actif du modèle",
100
93
  "lmStudioContextInactive": "Modèle inactif ; les valeurs par défaut de Bionic seront utilisées à la première requête",
101
94
  "lmStudioContextConfigured": "Contexte actif du modèle",
102
95
  "lmStudioContextFailed": "Impossible de configurer le contexte du modèle",
103
96
  "lmStudioContextCurrentlyLoaded": "actuellement chargé",
104
- "localContextBudget": "Budget de contexte KNX AI",
105
- "promptContextHint": "Contrôle la quantité de contexte KNX, mémoire, projet et adaptateurs envoyée aux modèles locaux. Choisissez « Aucune limite KNX AI » pour utiliser la fenêtre déclarée ou active du modèle. Cela n’active ni ne désactive les outils et n’utilise aucun routage par intent.",
97
+ "etsAccessHint": "Sélectionnez les adresses de groupe disponibles pour KNX AI. Toute adresse sélectionnée est active et lisible ; toute adresse sélectionnée non marquée Lecture seule est inscriptible. Les fournisseurs cloud reçoivent tout le catalogue ETS sémantique sélectionné ; les modèles locaux reçoivent ce qui tient dans la fenêtre de contexte choisie et peuvent récupérer localement les détails manquants.",
98
+ "etsFilterPlaceholder": "Filtrer par nom, GA ou DPT…",
99
+ "etsSelected": "sélectionnées",
100
+ "etsReadOnly": "Lecture seule",
101
+ "etsReadOnlyBulk": "Lecture seule pour les adresses affichées",
102
+ "etsNoGateway": "Sélectionnez une passerelle KNX.",
103
+ "etsNoGa": "Aucune adresse de groupe trouvée. Importez la liste ETS dans la passerelle KNX.",
104
+ "etsCsvError": "Impossible de charger la liste des adresses de groupe depuis la passerelle.",
106
105
  "reasoningEffortHint": "Préférence facultative pour les modèles prenant en charge l'effort de raisonnement. Automatique n'envoie aucune préférence ; si le fournisseur ou le modèle refuse la valeur choisie, KNX AI réessaie sans elle.",
106
+ "localContextBudget": "Fenêtre de contexte locale",
107
+ "localContextHint": "Définit le contexte maximal uniquement pour les modèles locaux. Maximum utilise la fenêtre connue du modèle et masque les tailles indisponibles. Les fournisseurs cloud ignorent ce sélecteur et reçoivent tout le catalogue ETS sémantique sélectionné.",
107
108
  "ollamaNotSupported": "Ollama local mode: API key not required. Default endpoint is http://localhost:11434/api/chat.",
108
109
  "ollamaNoModels": "No local Ollama model found. Install one or pick one from the library.",
109
110
  "installingOllamaModel": "Starting Ollama and installing model…",
@@ -133,9 +134,9 @@
133
134
  "chatContextSourcesTitle": "Sources incluses",
134
135
  "chatContextFilesTitle": "Fichiers de contexte persistants",
135
136
  "chatContextDirectoriesTitle": "Archive des télégrammes KNX",
136
- "chatContextSourceKnxTraffic": "Résumé KNX actuel, anomalies, topologie et télégrammes sélectionnés.",
137
- "chatContextSourceAdapterHistory": "Historique quotidien persistant des événements des adaptateurs détectés, y compris les détections des caméras.",
138
- "chatContextSourceEtsProject": "Sémantique ETS et inventaire complet du projet Node-RED.",
137
+ "chatContextSourceKnxTraffic": "Analyse KNX dérivée et événements exacts les plus récents de l’intervalle implicite de 20 minutes ou explicite, automatiquement limités à la fenêtre active du modèle local.",
138
+ "chatContextSourceAdapterHistory": "Événements exacts les plus récents des adaptateurs pour le même intervalle, automatiquement limités à la fenêtre active du modèle local.",
139
+ "chatContextSourceEtsProject": "Catalogue ETS sémantique sélectionné complet pour les modèles cloud. Les modèles locaux reçoivent le catalogue complet lorsqu’il tient dans la fenêtre, sinon un index adapté et les détails exacts demandés par le modèle. Source Function uniquement pour une revue explicite du code.",
139
140
  "chatContextSourceMemoryEducation": "Contexte de session, Éducation IA, mémoire domestique limitée et planifications actives.",
140
141
  "chatContextSourceCameras": "Caméras détectées et leurs fonctionnalités disponibles.",
141
142
  "chatContextSourceBadge": "Source",
@@ -144,6 +145,7 @@
144
145
  "chatContextFileSchedules": "État d’exécution persistant faisant autorité pour les planifications et rappels de ce nœud.",
145
146
  "chatContextFileSchedulesReadable": "Vue lisible générée des planifications et rappels de ce nœud.",
146
147
  "chatContextFileAssistantConfig": "Configuration persistante de l'Assistant web et zones sémantiques de ce nœud.",
148
+ "chatContextFileLastChatPrompt": "Copie locale temporaire des derniers messages système et utilisateur envoyés au modèle de chat ; remplacée à chaque requête.",
147
149
  "chatContextFileBadge": "Fichier",
148
150
  "chatContextDirectoryRoot": "Racine de l'archive des télégrammes",
149
151
  "chatContextDirectoryNode": "Archive des télégrammes de ce nœud",
@@ -216,7 +218,11 @@
216
218
  "installOllamaModel": "2) Install it",
217
219
  "ollamaLibrary": "Model library",
218
220
  "downloadOllamaModel": "1) Download model",
219
- "openChatLearning": "Ouvrir l’apprentissage du chat IA"
221
+ "openChatLearning": "Ouvrir l’apprentissage du chat IA",
222
+ "etsSelectAll": "Tout sélectionner",
223
+ "etsSelectNone": "Tout désélectionner",
224
+ "etsReadOnlyAll": "Activer lecture seule",
225
+ "etsReadOnlyNone": "Retirer lecture seule"
220
226
  }
221
227
  }
222
228
  }