node-red-contrib-knx-ultimate 6.3.25 → 6.3.26

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.
@@ -4,12 +4,14 @@
4
4
  "sections": {
5
5
  "groupAssistant": "Asistente IA",
6
6
  "groupChatHome": "Conversaciones y hogar",
7
- "detectedAdapters": "Adaptadores detectados automáticamente",
7
+ "setupDoctor": "Setup Doctor",
8
+ "webIntelligence": "Inteligencia Web",
9
+ "detectedAdapters": "Nodos compatibles detectados y utilizados en el chat",
8
10
  "chatContextOverview": "Resumen del contexto del chat",
9
11
  "chatLearning": "Aprendizaje del chat IA",
10
12
  "quickSetup": "Configurar el asistente",
11
13
  "llmConnection": "Conexion del Asistente IA",
12
- "chatAdapter": "Canales de chat",
14
+ "chatAdapter": "Pines de entrada y salida del chat",
13
15
  "homeIntelligence": "Educación IA y memoria",
14
16
  "advanced": "Proveedor y límites"
15
17
  },
@@ -27,10 +29,13 @@
27
29
  "llmIncludeRaw": "Include raw payload hex",
28
30
  "llmAllowKnxCommands": "Permitir que la IA lea estados KNX y controle actuadores",
29
31
  "llmRequireCommandConfirmation": "Pedir confirmación antes de enviar comandos KNX",
30
- "chatAdapterPreset": "Preajuste del adaptador",
32
+ "webAccessEnabled": "Permitir que la IA use la Web",
33
+ "webProactiveEnabled": "Permitir comprobaciones Web proactivas",
34
+ "webProactiveIntervalMinutes": "Intervalo mínimo de las comprobaciones proactivas",
35
+ "webMaxCallsPerHour": "Máximo de llamadas Web por hora",
36
+ "chatAdapterPreset": "Adaptador de mensajes de entrada/salida",
31
37
  "chatInputCode": "Mapeo de entrada (chat → KNX AI)",
32
38
  "chatOutputCode": "Mapeo de salida (KNX AI → chat)",
33
- "ttsUltimateNodeId": "Nodo TTS Ultimate para anuncios",
34
39
  "aiEducation": "Educación IA (gestionada por el usuario)",
35
40
  "llmIncludeDocsSnippets": "Include documentation snippets (help/README/examples)"
36
41
  },
@@ -38,7 +43,8 @@
38
43
  "summary": "Resumen/Estadísticas",
39
44
  "anomalies": "Anomalías",
40
45
  "assistant": "Asistente IA",
41
- "knxCommands": "Operaciones KNX"
46
+ "knxCommands": "Operaciones KNX",
47
+ "ttsUltimate": "Anuncios TTS Ultimate"
42
48
  },
43
49
  "selectlists": {
44
50
  "llmProvider": {
@@ -55,12 +61,28 @@
55
61
  "chatAdapter": {
56
62
  "none": "Sin adaptador"
57
63
  },
58
- "ttsUltimate": {
59
- "select": "Seleccionar un nodo TTS Ultimate",
60
- "none": "No se encontró ningún nodo TTS Ultimate"
64
+ "webProactiveInterval": {
65
+ "5": "5 minutos",
66
+ "10": "10 minutos",
67
+ "15": "15 minutos",
68
+ "30": "30 minutos",
69
+ "60": "1 hora",
70
+ "180": "3 horas"
61
71
  }
62
72
  },
63
73
  "messages": {
74
+ "setupDoctorLoading": "Analizando esta instalación…",
75
+ "setupDoctorUnavailable": "Setup Doctor no está disponible temporalmente.",
76
+ "setupDoctorPromptsTitle": "Probar tu instalación",
77
+ "setupDoctorPromptsHint": "Cada sugerencia abre el Asistente Web con una consulta personalizada y segura. Nada se ejecuta automáticamente.",
78
+ "setupDoctorDeployHint": "Setup Doctor lee el último flow desplegado. Despliega los cambios y vuelve a comprobar.",
79
+ "setupDoctorPass": "OK",
80
+ "setupDoctorWarn": "Revisar",
81
+ "setupDoctorFail": "Corregir",
82
+ "setupDoctorInfo": "Opcional",
83
+ "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.",
84
+ "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.",
85
+ "webBudgetHint": "El presupuesto deslizante cuenta las llamadas externas reales del chat y de las comprobaciones proactivas.",
64
86
  "lmStudioContextAvailable": "Contexto máximo del modelo",
65
87
  "lmStudioContextLoading": "Comprobando el contexto activo del modelo",
66
88
  "lmStudioContextInactive": "Modelo inactivo; se usarán los valores predeterminados de Bionic en la primera solicitud",
@@ -76,16 +98,13 @@
76
98
  "installOllamaModelFailed": "Failed to install Ollama model",
77
99
  "ollamaInstallSteps": "1) Open the model library and copy the model name (for example llama3.1). 2) Put the name in the Model field and click Install it.",
78
100
  "ollamaStartedAuto": "Ollama server started automatically.",
79
- "detectedAdaptersLoading": "Detectando adaptadores instalados…",
80
- "detectedAdaptersNone": "No se detectó ningún adaptador automático.",
81
- "detectedAdaptersUnavailable": "La detección automática de adaptadores no está disponible temporalmente.",
101
+ "detectedAdaptersLoading": "Detectando nodos compatibles instalados…",
102
+ "detectedAdaptersNone": "No se detectó ningún nodo compatible.",
103
+ "detectedAdaptersUnavailable": "La detección de nodos compatibles no está disponible temporalmente.",
82
104
  "detectedAdapterDetected": "Detectado",
83
105
  "detectedAdapterControllers": "Controladores",
84
106
  "detectedAdapterCameras": "Cámaras",
85
107
  "detectedAdapterNodes": "Nodos",
86
- "ttsUltimateUnknownFlow": "Flow sin nombre",
87
- "ttsUltimateUnavailable": "Nodo TTS Ultimate no disponible",
88
- "ttsUltimateHint": "Las solicitudes explícitas de anuncio del chat se envían directamente al nodo elegido; no hace falta cableado en el flow.",
89
108
  "chatContextLoading": "Cargando el resumen del contexto del chat…",
90
109
  "chatContextUnavailable": "El resumen del contexto del chat no está disponible temporalmente.",
91
110
  "chatLearningOpenHint": "Abre la interfaz web directamente en el editor de aprendizaje CHAT compartido para ver, editar, copiar o guardar una copia de su archivo persistente.",
@@ -106,7 +125,6 @@
106
125
  "chatContextSourceEtsProject": "Semántica ETS e inventario completo del proyecto Node-RED.",
107
126
  "chatContextSourceMemoryEducation": "Contexto de sesión, Educación IA y memoria doméstica limitada.",
108
127
  "chatContextSourceCameras": "Cámaras detectadas y sus capacidades disponibles.",
109
- "chatContextSourceTtsUltimate": "Nodo TTS Ultimate seleccionado para los anuncios.",
110
128
  "chatContextSourceBadge": "Fuente",
111
129
  "chatContextFileChatContext": "Turnos persistentes, instrucciones y reglas de notificación de cámaras.",
112
130
  "chatContextFileHomeMemory": "Educación IA y memoria doméstica aprendida y limitada.",
@@ -179,6 +197,7 @@
179
197
  }
180
198
  },
181
199
  "buttons": {
200
+ "refreshSetupDoctor": "Comprobar de nuevo",
182
201
  "installOllamaModel": "2) Install it",
183
202
  "ollamaLibrary": "Model library",
184
203
  "downloadOllamaModel": "1) Download model",
@@ -1,16 +1,33 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateAI">
2
2
  Ce nœud écoute **tous les télégrammes KNX** du gateway KNX Ultimate sélectionné, produit des statistiques de trafic, détecte des anomalies et peut interroger un LLM de façon optionnelle.
3
3
 
4
- L'éditeur utilise deux onglets horizontaux : **Assistant IA** contient la configuration, les connaissances/le contexte et les limites du fournisseur ; **Conversations et maison** contient les canaux de chat, la maison proactive et la mémoire limitée.
4
+ L'éditeur utilise deux onglets horizontaux : **Assistant IA** contient la configuration, les connaissances/le contexte et les limites du fournisseur ; **Conversations et maison** contient les ports d’entrée et de sortie du chat, la maison proactive et la mémoire limitée.
5
5
 
6
6
  ## Sorties
7
7
  1. **Résumé/Stats** (`msg.payload` JSON)
8
8
  2. **Anomalies** (`msg.payload` JSON)
9
9
  3. **Assistant IA** (`msg.payload` texte, avec `msg.summary`)
10
10
  4. **Opérations KNX** (un message Universal Mode par lecture ou écriture validée)
11
+ 5. **TTS Ultimate** (un message d'annonce par texte parlé choisi par le modèle)
11
12
 
12
13
  Chaque message émis par les sorties 3 et 4 contient également une copie du message d'entrée original dans `msg.inputMessage`. Le payload, le topic, les métadonnées du chat et toutes les autres propriétés d'entrée restent ainsi disponibles pour les nœuds suivants. Les erreurs de clonage ou d'envoi sont interceptées et signalées sans se propager au runtime Node-RED.
13
14
 
15
+ ### Setup Doctor et premier démarrage sûr
16
+ Le **Setup Doctor** automatique vérifie le gateway sélectionné et l'import ETS, l'activation de l'IA, le fournisseur, le modèle et la clé API, l'accessibilité du fournisseur, le câblage du flow, les caméras détectées et la connexion TTS Ultimate optionnelle. Son précontrôle gratuit du fournisseur appelle uniquement l'endpoint qui répertorie les modèles : il n'envoie jamais de requête de chat et ne consomme aucun token d'inférence. Les caméras et TTS sont optionnels ; ne pas les utiliser ne réduit donc pas l'état de préparation principal.
17
+
18
+ L'inventaire indique le nombre exact de signaux KNX à adresse de groupe unique, les zones/groupes ETS et une estimation des fonctions logiques. Il n'annonce volontairement aucun nombre d'appareils physiques, car celui-ci ne peut pas être déduit de façon fiable du CSV ETS. Le Setup Doctor lit le dernier flow déployé : déployez donc toute modification du fournisseur, du modèle, du préréglage, du gateway ou du câblage avant de cliquer sur **Actualiser** pour relancer les contrôles.
19
+
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
+
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é.
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.
26
+
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
+
29
+ Lorsque des résultats Web vérifiés sont disponibles, le modèle peut composer les autres outils activés si le chat courant ou l'Éducation de l'IA l'y autorise. L'accès Web n'étend jamais les autorisations : la disponibilité des caméras, du TTS et de la mémoire, ainsi que les lectures et écritures KNX, la validation locale ETS/DPT et la confirmation configurée des écritures KNX restent inchangées. Les requêtes Web exposent la requête et l'adresse IP publique de ce serveur aux sites externes ou au service de recherche ; les données KNX/ETS, images de caméra, identifiants de chat, mémoire apprise et identifiants d'accès ne sont jamais ajoutés automatiquement.
30
+
14
31
  ## Commandes (entrée)
15
32
  Envoyez `msg.topic` :
16
33
  - `summary` (ou vide) : envoie le résumé immédiatement
@@ -43,11 +60,15 @@ Des demandes comme « Je pars », « Bonne nuit » ou « Mode cinéma » peuvent
43
60
  ### Demande de confirmation pour les boutons du chat
44
61
  Lorsqu'un plan est en attente, la sortie 3 contient `msg.knxAi.confirmationRequest`. L'objet comprend `required`, `status`, `sessionId`, `expiresAt`, `commandCount` et deux éléments dans `actions`. Utilisez `action.label` comme texte du bouton Telegram, `action.callbackData` comme callback et renvoyez `action.message` à KNX AI pour confirmer ou annuler sans saisir de texte.
45
62
 
46
- ### Préréglages d’adaptateur de chat
47
- L’onglet **Adaptateurs de chat** charge ses mappages sélectionnables depuis `resources/KNXAIChatAdapterMappings.js`. Le choix d’un préréglage installe en interne deux mappages JavaScript synchrones prédéfinis : un avant le traitement de l’entrée par KNX AI et un avant l’émission sur la sortie 3. Les mappages restent masqués dans l’éditeur. Les erreurs de syntaxe et d’exécution sont interceptées et signalées sans arrêter Node-RED.
63
+ ### Adaptateurs des messages d’entrée/sortie
64
+ La section **Ports d’entrée et de sortie du chat** charge ses mappages sélectionnables depuis `resources/KNXAIChatAdapterMappings.js`. Le choix d’un adaptateur installe en interne deux mappages JavaScript synchrones prédéfinis : un avant le traitement de l’entrée par KNX AI et un avant l’émission sur la sortie 3. Les mappages restent masqués dans l’éditeur. Les erreurs de syntaxe et d’exécution sont interceptées et signalées sans arrêter Node-RED.
48
65
 
49
66
  Le préréglage inclus **windkh/node-red-contrib-telegrambot** suit le contrat receiver/sender du paquet. Connectez directement un `telegram receiver` à KNX AI et la sortie 3 à un `telegram sender`. La confirmation utilise un clavier de réponse Telegram temporaire : un appui sur **Confirmer** ou **Annuler** renvoie un message localisé normal par le même receiver ; aucun `telegram event` ni câblage de callback n’est nécessaire. Les anciens messages `callback_query` restent acceptés. Le mappage d’entrée extrait `msg.payload.content`, `msg.payload.chatId` et la langue Telegram. Le mappage de sortie crée `msg.payload.chatId`, `type` et `content`, puis ajoute `options.reply_markup` depuis `msg.knxAi.confirmationRequest` lorsqu’une écriture attend confirmation. Le paquet Telegram reste une dépendance optionnelle distincte.
50
67
 
68
+ Avec ce préréglage, un message vocal Telegram (`msg.payload.type = "voice"`) n’est traité automatiquement que lorsque **Provider** est réglé sur **OpenAI-compatible**. Avant tout téléchargement, KNX AI vérifie le fournisseur, réutilise son **Endpoint URL** et sa **API key**, puis dérive `/audio/transcriptions` et `/audio/speech` de cette même connexion. Le lien `msg.payload.weblink`, qui contient le jeton, sert uniquement au téléchargement limité et est supprimé avant que le message n’atteigne les sorties ou le LLM. L’entrée OGG/Opus est transcrite avec la valeur intégrée `gpt-4o-mini-transcribe` ; une demande réussie reçoit une réponse Telegram OGG/Opus native générée avec `gpt-4o-mini-tts` et `alloy`, tout en conservant la légende et l’éventuel clavier de confirmation. Si un autre fournisseur est sélectionné, l’utilisateur reçoit une instruction localisée lui demandant de choisir OpenAI-compatible ou d’envoyer du texte. Si la synthèse est indisponible, échoue ou dépasse la limite vocale, la réponse complète est envoyée sous forme de texte. L’audio téléchargé et le texte de réponse sont transmis au même fournisseur sélectionné. Les messages texte, les photos et les anciens mappages Telegram enregistrés restent compatibles.
69
+
70
+ La légende de chaque réponse vocale native commence par la mention localisée **Voix générée par l’IA**, visible par le destinataire Telegram.
71
+
51
72
  Le préréglage inclus **RedBot / node-red-contrib-chatbot (Telegram)** suit le format de message commun de RedBot. Connectez directement `chatbot-telegram-receive` à KNX AI et la sortie 3 à `chatbot-telegram-send` ; aucun nœud de callback séparé n’est nécessaire, car RedBot convertit les postbacks des boutons inline en messages entrants ordinaires. Le mappage d’entrée lit `transport`, `chatId`, `type`, `content` et la langue Telegram. Le mappage de sortie conserve les données de suivi RedBot `originalMessage`, `chat`, `api` et `client`, puis émet soit un payload `message`, soit un payload `inline-buttons` avec des actions `postback` de confirmation. RedBot reste une dépendance optionnelle distincte.
52
73
 
53
74
  ### Adaptateurs de caméra détectés automatiquement
@@ -58,14 +79,14 @@ L’utilisateur peut demander une capture actuelle ou demander au modèle de vis
58
79
  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.
59
80
 
60
81
  ### Annonces avec TTS Ultimate
61
- Lorsque le paquet facultatif `node-red-contrib-tts-ultimate` est installé, il apparaît parmi les adaptateurs détectés automatiquement. Le sélecteur recense tous les nœuds `ttsultimate` de tous les flows du projet, avec le flow, le nom du nœud et le lecteur configuré. Sélectionnez le nœud chargé des annonces du chat, puis déployez le flow.
82
+ 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.
62
83
 
63
- Le modèle décide d’utiliser cet adaptateur 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. KNX AI envoie le texte choisi directement au nœud dans `msg.payload`, avec `msg.topic = "knx_ai_announcement"`. TTS Ultimate gère ensuite le lecteur Sonos, la voix, le volume, le signal et la file d’attente.
84
+ 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.
64
85
 
65
86
  ### Aperçu du contexte du chat
66
87
  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 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 `knxai-chat-context.knxctx`, `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.knxctx`. Les chemins sont déterminés à l’exécution depuis le répertoire de données réellement utilisé par la passerelle configurée.
67
88
 
68
- Le modèle reçoit les lectures/écritures KNX, les adaptateurs caméra, les annonces TTS et la mémoire persistante 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 et les limites de sécurité ; les écritures KNX conservent la validation ETS/DPT locale et la confirmation configurée.
89
+ Le modèle reçoit les lectures/écritures KNX, les adaptateurs caméra, les annonces TTS et la mémoire persistante 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.
69
90
 
70
91
  ### Modification et sauvegarde de l'apprentissage CHAT
71
92
  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.
@@ -127,10 +148,15 @@ Voici tous les champs tels qu'affichés dans l'éditeur KNX AI.
127
148
  - **Endpoint URL** : URL endpoint chat/completions.
128
149
  - **API key** : clé API (non requise avec Ollama local ; facultative pour Bionic LM Studio sauf si l’authentification du serveur est activée).
129
150
  - **Model** : ID/nom du modèle.
151
+ - **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.
152
+ - **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**.
153
+ - **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.
154
+ - **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.
155
+ - **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.
130
156
  - **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.
131
157
  - **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.
132
158
  - **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.
133
- - **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.
159
+ - **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.
134
160
  - **É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.
135
161
  - 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.
136
162
  - 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.
@@ -4,12 +4,14 @@
4
4
  "sections": {
5
5
  "groupAssistant": "Assistant IA",
6
6
  "groupChatHome": "Conversations et maison",
7
- "detectedAdapters": "Adaptateurs détectés automatiquement",
7
+ "setupDoctor": "Setup Doctor",
8
+ "webIntelligence": "Intelligence Web",
9
+ "detectedAdapters": "Nœuds compatibles détectés et utilisés dans le chat",
8
10
  "chatContextOverview": "Aperçu du contexte du chat",
9
11
  "chatLearning": "Apprentissage du chat IA",
10
12
  "quickSetup": "Configurer l'assistant",
11
13
  "llmConnection": "Connexion Assistant IA",
12
- "chatAdapter": "Canaux de chat",
14
+ "chatAdapter": "Ports d’entrée et de sortie du chat",
13
15
  "homeIntelligence": "Éducation IA et mémoire",
14
16
  "advanced": "Fournisseur et limites"
15
17
  },
@@ -27,10 +29,13 @@
27
29
  "llmIncludeRaw": "Include raw payload hex",
28
30
  "llmAllowKnxCommands": "Autoriser l’IA à lire les états KNX et commander les actionneurs",
29
31
  "llmRequireCommandConfirmation": "Demander confirmation avant d’envoyer les commandes KNX",
30
- "chatAdapterPreset": "Préréglage d’adaptateur",
32
+ "webAccessEnabled": "Autoriser l’IA à utiliser le Web",
33
+ "webProactiveEnabled": "Autoriser les vérifications Web proactives",
34
+ "webProactiveIntervalMinutes": "Intervalle minimal des vérifications proactives",
35
+ "webMaxCallsPerHour": "Nombre maximal d’appels Web par heure",
36
+ "chatAdapterPreset": "Adaptateur des messages d’entrée/sortie",
31
37
  "chatInputCode": "Mappage d’entrée (chat → KNX AI)",
32
38
  "chatOutputCode": "Mappage de sortie (KNX AI → chat)",
33
- "ttsUltimateNodeId": "Nœud TTS Ultimate pour les annonces",
34
39
  "aiEducation": "Éducation IA (gérée par l'utilisateur)",
35
40
  "llmIncludeDocsSnippets": "Include documentation snippets (help/README/examples)"
36
41
  },
@@ -38,7 +43,8 @@
38
43
  "summary": "Résumé/Stats",
39
44
  "anomalies": "Anomalies",
40
45
  "assistant": "Assistant IA",
41
- "knxCommands": "Opérations KNX"
46
+ "knxCommands": "Opérations KNX",
47
+ "ttsUltimate": "Annonces TTS Ultimate"
42
48
  },
43
49
  "selectlists": {
44
50
  "llmProvider": {
@@ -55,12 +61,28 @@
55
61
  "chatAdapter": {
56
62
  "none": "Aucun adaptateur"
57
63
  },
58
- "ttsUltimate": {
59
- "select": "Sélectionner un nœud TTS Ultimate",
60
- "none": "Aucun nœud TTS Ultimate trouvé"
64
+ "webProactiveInterval": {
65
+ "5": "5 minutes",
66
+ "10": "10 minutes",
67
+ "15": "15 minutes",
68
+ "30": "30 minutes",
69
+ "60": "1 heure",
70
+ "180": "3 heures"
61
71
  }
62
72
  },
63
73
  "messages": {
74
+ "setupDoctorLoading": "Analyse de cette installation…",
75
+ "setupDoctorUnavailable": "Setup Doctor est temporairement indisponible.",
76
+ "setupDoctorPromptsTitle": "Essayer votre installation",
77
+ "setupDoctorPromptsHint": "Chaque suggestion ouvre l’Assistant Web avec une demande personnalisée et sûre. Rien n’est exécuté automatiquement.",
78
+ "setupDoctorDeployHint": "Setup Doctor lit le dernier flow déployé. Déployez les modifications, puis revérifiez.",
79
+ "setupDoctorPass": "OK",
80
+ "setupDoctorWarn": "Vérifier",
81
+ "setupDoctorFail": "Corriger",
82
+ "setupDoctorInfo": "Optionnel",
83
+ "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.",
84
+ "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.",
85
+ "webBudgetHint": "Le budget glissant compte les appels externes réels du chat et des vérifications proactives.",
64
86
  "lmStudioContextAvailable": "Contexte maximal du modèle",
65
87
  "lmStudioContextLoading": "Vérification du contexte actif du modèle",
66
88
  "lmStudioContextInactive": "Modèle inactif ; les valeurs par défaut de Bionic seront utilisées à la première requête",
@@ -76,16 +98,13 @@
76
98
  "installOllamaModelFailed": "Failed to install Ollama model",
77
99
  "ollamaInstallSteps": "1) Open the model library and copy the model name (for example llama3.1). 2) Put the name in the Model field and click Install it.",
78
100
  "ollamaStartedAuto": "Ollama server started automatically.",
79
- "detectedAdaptersLoading": "Détection des adaptateurs installés…",
80
- "detectedAdaptersNone": "Aucun adaptateur automatique détecté.",
81
- "detectedAdaptersUnavailable": "La détection automatique des adaptateurs est temporairement indisponible.",
101
+ "detectedAdaptersLoading": "Détection des nœuds compatibles installés…",
102
+ "detectedAdaptersNone": "Aucun nœud compatible détecté.",
103
+ "detectedAdaptersUnavailable": "La détection des nœuds compatibles est temporairement indisponible.",
82
104
  "detectedAdapterDetected": "Détecté",
83
105
  "detectedAdapterControllers": "Contrôleurs",
84
106
  "detectedAdapterCameras": "Caméras",
85
107
  "detectedAdapterNodes": "Nœuds",
86
- "ttsUltimateUnknownFlow": "Flow sans nom",
87
- "ttsUltimateUnavailable": "Nœud TTS Ultimate indisponible",
88
- "ttsUltimateHint": "Les demandes explicites d’annonce du chat sont envoyées directement au nœud sélectionné ; aucun câblage de flow n’est nécessaire.",
89
108
  "chatContextLoading": "Chargement du résumé du contexte du chat…",
90
109
  "chatContextUnavailable": "Le résumé du contexte du chat est temporairement indisponible.",
91
110
  "chatLearningOpenHint": "Ouvre l’interface web directement dans l’éditeur d’apprentissage CHAT partagé pour afficher, modifier, copier ou sauvegarder son fichier persistant.",
@@ -106,7 +125,6 @@
106
125
  "chatContextSourceEtsProject": "Sémantique ETS et inventaire complet du projet Node-RED.",
107
126
  "chatContextSourceMemoryEducation": "Contexte de session, Éducation IA et mémoire domestique limitée.",
108
127
  "chatContextSourceCameras": "Caméras détectées et leurs fonctionnalités disponibles.",
109
- "chatContextSourceTtsUltimate": "Nœud TTS Ultimate sélectionné pour les annonces.",
110
128
  "chatContextSourceBadge": "Source",
111
129
  "chatContextFileChatContext": "Tours de conversation persistants, instructions et règles de notification des caméras.",
112
130
  "chatContextFileHomeMemory": "Éducation IA et mémoire domestique apprise et limitée.",
@@ -179,6 +197,7 @@
179
197
  }
180
198
  },
181
199
  "buttons": {
200
+ "refreshSetupDoctor": "Revérifier",
182
201
  "installOllamaModel": "2) Install it",
183
202
  "ollamaLibrary": "Model library",
184
203
  "downloadOllamaModel": "1) Download model",
@@ -1,16 +1,33 @@
1
1
  <script type="text/markdown" data-help-name="knxUltimateAI">
2
2
  Questo nodo ascolta **tutti i telegrammi KNX** dal gateway KNX Ultimate selezionato, costruisce statistiche di traffico, rileva anomalie e può interrogare opzionalmente un LLM.
3
3
 
4
- L'editor usa due schede orizzontali: **Assistente AI** contiene configurazione, conoscenza/contesto, provider e limiti; **Conversazioni e casa** contiene canali chat, casa proattiva e memoria limitata.
4
+ L'editor usa due schede orizzontali: **Assistente AI** contiene configurazione, conoscenza/contesto, provider e limiti; **Conversazioni e casa** contiene i PIN di input e output della chat, casa proattiva e memoria limitata.
5
5
 
6
6
  ## Output
7
7
  1. **Summary/Statistiche** (`msg.payload` JSON)
8
8
  2. **Anomalie** (`msg.payload` JSON)
9
9
  3. **Assistente AI** (`msg.payload` testo, con `msg.summary`)
10
10
  4. **Operazioni KNX** (un messaggio Universal Mode per ogni lettura o scrittura validata)
11
+ 5. **TTS Ultimate** (un messaggio di annuncio per ogni testo parlato scelto dal modello)
11
12
 
12
13
  Ogni messaggio emesso dalle uscite 3 e 4 contiene anche una copia del messaggio originale in ingresso in `msg.inputMessage`. In questo modo payload, topic, metadati della chat e qualsiasi altra proprietà di ingresso restano disponibili per i nodi successivi. Gli errori di clonazione o di invio vengono intercettati e segnalati senza propagarsi al runtime di Node-RED.
13
14
 
15
+ ### Setup Doctor e primo avvio sicuro
16
+ Il **Setup Doctor** automatico controlla gateway selezionato e importazione ETS, attivazione AI, provider, modello e chiave API, raggiungibilità del provider, collegamenti del flow, telecamere rilevate e collegamento TTS Ultimate opzionale. Il preflight del provider, senza costi, chiama soltanto l'endpoint che elenca i modelli: non invia mai una richiesta chat e non consuma token di inferenza. Telecamere e TTS sono opzionali, quindi non usarli non riduce la prontezza di base.
17
+
18
+ L'inventario mostra il numero esatto di segnali KNX con indirizzo di gruppo univoco, le aree/i gruppi ETS e una stima delle funzioni logiche. Non dichiara volutamente il numero di dispositivi fisici, perché non è ricavabile in modo affidabile dal CSV ETS. Il Setup Doctor legge l'ultimo flow di cui è stato eseguito il deploy: dopo modifiche a provider, modello, preset, gateway o collegamenti, esegui quindi il deploy prima di fare clic su **Aggiorna** per ripetere i controlli.
19
+
20
+ Invia `/start` o `/help` da una chat per ricevere sull'uscita chat (uscita 3) un benvenuto deterministico e localizzato, con statistiche personalizzate dell'impianto e fino a tre suggerimenti sicuri. Questo onboarding non chiama l'LLM, non legge o scrive KNX e non genera TTS. Con il preset Telegram, i suggerimenti appaiono come pulsanti della tastiera di risposta e vengono eseguiti solo dopo che l'utente ne seleziona o invia uno esplicitamente. Dopo questa selezione esplicita, un suggerimento iniziale può eseguire letture KNX esatte quando necessarie; restano invece inibiti scritture e routine KNX, azioni sulle telecamere, TTS, modifiche alla memoria persistente e apprendimento dei ruoli GA.
21
+
22
+ ### Intelligenza Web
23
+ L'accesso Web è disattivato per impostazione predefinita. Quando **Consenti all'AI di usare il Web** è attivo, il modello conversazionale può scegliere il tool Web strutturato direttamente dalla richiesta corrente; non vengono usate parole chiave, logiche specifiche per argomento o classificatori d'intento. Ogni turno utente o ciclo proattivo può eseguire al massimo tre operazioni Web complessive. Tutte le operazioni Web esterne reali condividono il budget orario scorrevole configurato.
24
+
25
+ **Consenti controlli Web proattivi** è un opt-in separato. Richiede anche istruzioni esplicite scritte dall'utente in **Educazione AI**, rispetta l'intervallo minimo configurato e parte solo dopo che KNX AI ha appreso una chat destinataria da almeno una normale richiesta in chat. Senza entrambe le autorizzazioni non avviene alcuna operazione Web in background.
26
+
27
+ Ogni risposta basata sul Web contiene citazioni validate dal runtime con URL della fonte sanificato e ora di consultazione, oltre all'ora di pubblicazione quando disponibile. Il contenuto esterno è un dato non attendibile, mai un'istruzione, e non può sostituire le regole o i permessi dell'assistente. Sono accettate soltanto risorse HTTPS pubbliche e limitate; destinazioni private, locali, link-local e di metadata cloud, redirect non sicuri, navigazione autenticata e cookie vengono bloccati. Se nessuna fonte può essere verificata, KNX AI segnala il limite invece di generare una risposta priva di fonti.
28
+
29
+ Dopo che sono disponibili risultati Web verificati, il modello può comporre gli altri tool abilitati quando la chat corrente o Educazione AI lo autorizzano. L'accesso Web non amplia mai i permessi: disponibilità di telecamere, TTS e memoria, così come letture e scritture KNX, validazione locale ETS/DPT e conferma configurata per le scritture KNX, restano invariate. Le richieste Web espongono la query e l'IP pubblico del server ai siti esterni o al servizio di ricerca; dati KNX/ETS, contenuti delle telecamere, identificativi chat, memoria appresa e credenziali non vengono mai aggiunti automaticamente.
30
+
14
31
  ## Comandi (input)
15
32
  Invia `msg.topic`:
16
33
  - `summary` (o vuoto): emette subito la summary
@@ -43,11 +60,15 @@ Richieste come «Sto uscendo», «Buonanotte» o «Modalità cinema» possono co
43
60
  ### Richiesta di conferma per pulsanti chat
44
61
  Quando un piano è in attesa, l'uscita 3 contiene `msg.knxAi.confirmationRequest`. L'oggetto include `required`, `status`, `sessionId`, `expiresAt`, `commandCount` e due elementi in `actions`. Usa `action.label` per il testo del pulsante Telegram, `action.callbackData` per il callback e reinvia `action.message` al nodo KNX AI per confermare o annullare senza digitare testo.
45
62
 
46
- ### Preset adattatori chat
47
- La tab **Adattatori chat** carica le mappature selezionabili da `resources/KNXAIChatAdapterMappings.js`. Scegliendo un preset vengono installate internamente due mappature JavaScript sincrone predefinite: una eseguita prima che KNX AI elabori l'ingresso e una prima dell'emissione sull'uscita 3. Le mappature restano nascoste nell'editor. Errori di sintassi o esecuzione vengono intercettati e segnalati senza arrestare Node-RED.
63
+ ### Adattatori messaggi ingresso/uscita
64
+ La sezione **Chat PIN Input e Output** carica le mappature selezionabili da `resources/KNXAIChatAdapterMappings.js`. Scegliendo un adattatore vengono installate internamente due mappature JavaScript sincrone predefinite: una eseguita prima che KNX AI elabori l'ingresso e una prima dell'emissione sull'uscita 3. Le mappature restano nascoste nell'editor. Errori di sintassi o esecuzione vengono intercettati e segnalati senza arrestare Node-RED.
48
65
 
49
66
  Il preset incluso **windkh/node-red-contrib-telegrambot** segue il contratto receiver/sender del pacchetto. Collega direttamente un `telegram receiver` a KNX AI e l'uscita 3 direttamente a un `telegram sender`. La conferma usa una tastiera Telegram temporanea: premendo **Conferma** o **Annulla** viene inviato un normale messaggio localizzato attraverso lo stesso receiver, quindi non servono `telegram event` né collegamenti callback. I vecchi messaggi `callback_query` restano accettati. La mappatura d'ingresso estrae `msg.payload.content`, `msg.payload.chatId` e la lingua Telegram. Quella d'uscita crea i campi richiesti `msg.payload.chatId`, `type` e `content`, aggiungendo `options.reply_markup` da `msg.knxAi.confirmationRequest` quando una scrittura attende conferma. Il pacchetto Telegram resta una dipendenza opzionale separata.
50
67
 
68
+ Con questo preset, un messaggio vocale Telegram (`msg.payload.type = "voice"`) viene gestito automaticamente solo quando **Provider** è impostato su **OpenAI-compatible**. Prima di scaricare qualsiasi dato, KNX AI verifica il provider, riutilizza **URL endpoint** e **API key** già configurati e deriva `/audio/transcriptions` e `/audio/speech` dalla stessa connessione. Il collegamento `msg.payload.weblink`, che contiene il token, viene usato soltanto per il download limitato e rimosso prima che il messaggio raggiunga gli output o l'LLM. L'audio OGG/Opus viene trascritto con il default integrato `gpt-4o-mini-transcribe`; a una richiesta elaborata correttamente risponde con un vocale Telegram OGG/Opus generato con `gpt-4o-mini-tts` e `alloy`, conservando la didascalia testuale e l'eventuale tastiera di conferma. Se è selezionato un altro provider, l'utente riceve un'indicazione localizzata per scegliere OpenAI-compatible oppure inviare testo. Se la sintesi non è disponibile, fallisce o supera il limite vocale, viene inviato come fallback il testo completo. L'audio scaricato e il testo della risposta vengono inviati allo stesso provider selezionato. Messaggi di testo, foto e vecchie mappature Telegram salvate restano compatibili.
69
+
70
+ La didascalia di ogni vocale nativo inizia con l'indicazione localizzata **Voce generata dall’IA**, visibile al destinatario Telegram.
71
+
51
72
  Il preset incluso **RedBot / node-red-contrib-chatbot (Telegram)** segue il formato comune dei messaggi RedBot. Collega direttamente `chatbot-telegram-receive` a KNX AI e l'uscita 3 direttamente a `chatbot-telegram-send`; non serve un nodo callback separato perché RedBot converte i postback dei pulsanti inline in normali messaggi in ingresso. La mappatura d'ingresso legge `transport`, `chatId`, `type`, `content` e la lingua Telegram. Quella d'uscita conserva i dati di tracciamento RedBot `originalMessage`, `chat`, `api` e `client`, quindi emette un payload `message` oppure un payload `inline-buttons` con azioni `postback` per la conferma. RedBot resta una dipendenza opzionale separata.
52
73
 
53
74
  ### Adapter telecamera rilevati automaticamente
@@ -58,14 +79,14 @@ L'utente può chiedere uno snapshot aggiornato oppure domandare al modello visio
58
79
  Ogni evento pubblicato da un adapter rilevato automaticamente viene normalizzato e aggiunto direttamente nel formato nativo compatto a righe di KNX AI a un file giornaliero `YYYY-MM-DD.knxctx` sotto `knxultimatestorage/knxai/adapter-history/<id-nodo>/`. L'archivio dei telegrammi KNX usa lo stesso formato compatto, senza serializzazione JSON intermedia. L'archivio conserva 10 giorni, garantisce più di 24 ore di storico e salva i metadati degli eventi, non le immagini. Gli archivi JSONL esistenti non vengono letti né migrati. I totali comprendono tutte le righe memorizzate nell'intervallo richiesto; i dettagli selezionati sono soltanto un campione pertinente.
59
80
 
60
81
  ### Annunci con TTS Ultimate
61
- Quando è installato il pacchetto opzionale `node-red-contrib-tts-ultimate`, questo compare tra gli adapter rilevati automaticamente. Il selettore elenca tutti i nodi `ttsultimate` presenti in tutti i flow del progetto, indicando flow, nome del nodo e player configurato. Scegli il nodo che deve gestire gli annunci della chat e fai il deploy del flow.
82
+ Collega l'uscita 5 a uno o più nodi `ttsultimate` del pacchetto opzionale `node-red-contrib-tts-ultimate`. I normali collegamenti di Node-RED determinano destinazione e fan-out; usa Link Out/Link In quando il nodo TTS si trova in un'altra scheda del flow. Il precedente selettore del nodo TTS e l'iniezione interna sono stati rimossi. Le posizioni delle uscite 1–4 restano invariate, ma nei flow aggiornati occorre collegare fisicamente l'uscita 5 prima che gli annunci vocali possano raggiungere TTS Ultimate.
62
83
 
63
- Il modello decide se usare questo adapter ragionando sulla richiesta corrente, sulle istruzioni persistenti della chat e sull'Educazione AI gestita dall'utente: non esistono intent per gli annunci né liste di frasi di attivazione. Valori KNX, eventi degli adapter, immagini e archivi restano dati e non diventano istruzioni, ma le indicazioni autorevoli dell'utente possono insegnare al modello come agire su quei dati. KNX AI invia il testo scelto direttamente al nodo come `msg.payload`, con `msg.topic = "knx_ai_announcement"`; non servono collegamenti intermedi nel flow. TTS Ultimate gestisce poi player Sonos, voce, volume, hailing e coda.
84
+ Il modello decide se preparare un annuncio ragionando sulla richiesta corrente, sulle istruzioni persistenti della chat e sull'Educazione AI gestita dall'utente: non esistono intent per gli annunci né liste di frasi di attivazione. Valori KNX, eventi degli adapter, immagini e archivi restano dati e non diventano istruzioni, ma le indicazioni autorevoli dell'utente possono insegnare al modello come agire su quei dati. L'uscita 5 emette il testo esatto da pronunciare in `msg.payload`, imposta `msg.topic = "knx_ai_announcement"` e aggiunge `msg.knxAi.type = "tts_announcement"` insieme a `msg.knxAi.sourceNodeId`, `msg.knxAi.sessionId` e `msg.knxAi.reason`. TTS Ultimate gestisce poi player, voce, volume, hailing e coda.
64
85
 
65
86
  ### Riepilogo del contesto della chat
66
87
  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 scelto dall'utente 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.knxctx`.
67
88
 
68
- Il modello riceve letture e scritture KNX, adapter telecamera, annunci TTS e memoria persistente come strumenti strutturati. Può sceglierli e combinarli semanticamente partendo dalla richiesta corrente e dalle indicazioni autorevoli apprese, senza routing per intent linguistici. Il runtime valida soltanto argomenti, disponibilità degli adapter e confini di sicurezza; le scritture KNX conservano validazione ETS/DPT locale e conferma configurata.
89
+ Il modello riceve letture e scritture KNX, adapter telecamera, annunci TTS e memoria persistente come strumenti strutturati. Può sceglierli e combinarli semanticamente partendo dalla richiesta corrente e dalle indicazioni autorevoli apprese, senza routing per intent linguistici. Il runtime valida soltanto argomenti, disponibilità degli adapter telecamera e confini di sicurezza; le scritture KNX conservano validazione ETS/DPT locale e conferma configurata.
69
90
 
70
91
  ### Modifica e backup dell'apprendimento CHAT
71
92
  La scheda **Conversazioni e casa** nella configurazione Node-RED di KNX AI include il pulsante **Apri Apprendimento AI Chat**, che apre la Web UI Vue direttamente su questo editor per il nodo corrente.
@@ -133,10 +154,15 @@ Di seguito sono elencati tutti i campi presenti nell'editor del nodo KNX AI.
133
154
  - **URL endpoint**: URL endpoint chat/completions.
134
155
  - **API key**: chiave API (non necessaria con Ollama locale; opzionale per Bionic LM Studio, salvo autenticazione attiva sul server).
135
156
  - **Modello**: ID/nome modello.
157
+ - **Consenti all'AI di usare il Web**: disattivato per impostazione predefinita. Permette al modello di scegliere semanticamente il tool Web generale e restituire fonti verificate e citate.
158
+ - **Consenti controlli Web proattivi**: opt-in separato per i controlli in background; richiede anche istruzioni esplicite scritte dall'utente in **Educazione AI**.
159
+ - **Intervallo minimo dei controlli proattivi**: tempo minimo tra i cicli proattivi; non ritarda le operazioni Web richieste durante un turno utente attivo.
160
+ - **Numero massimo di chiamate Web all'ora**: budget scorrevole condiviso dalle operazioni Web interattive e proattive. Ogni turno o ciclo può usare al massimo tre operazioni complessive.
161
+ - **Voce Telegram**: disponibile soltanto con il provider **OpenAI-compatible**. Riutilizza automaticamente endpoint e API key di quel provider con i default integrati `gpt-4o-mini-transcribe`, `gpt-4o-mini-tts` e `alloy`; non esistono impostazioni vocali separate.
136
162
  - **Compatibilità modello chat**: il modello selezionato deve supportare l'endpoint Chat Completions configurato. I modelli legacy disponibili solo tramite completions, come `gpt-3.5-turbo-instruct`, vengono esclusi quando si aggiorna la lista. Se il provider rifiuta un valore personalizzato di temperature o il parametro del limite token, KNX AI riprova rimuovendo o sostituendo soltanto il campo incompatibile.
137
163
  - **Consenti all'AI di leggere stati KNX e comandare attuatori**: abilita l'uscita 4 ed è disattivato per default. Gli oggetti esatti del catalogo ETS possono essere letti; le scritture sono accettate solo per gli oggetti classificati come `command`. Operazioni sconosciute, con DPT discordante, non valide o eccessive e scritture verso oggetti di stato/neutrali vengono rifiutate localmente.
138
164
  - **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.
139
- - **Preset adattatore**: parte da **Nessun adattatore**. La selezione carica la coppia predefinita di mappature ingresso/uscita; entrambe restano nascoste nell'editor.
165
+ - **Adattatore messaggi ingresso/uscita**: parte da **Nessun adattatore**. La selezione carica la coppia predefinita di mappature ingresso/uscita; entrambe restano nascoste nell'editor.
140
166
  - **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.
141
167
  - 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.
142
168
  - Pulsante **Aggiorna**: interroga il provider e popola i modelli disponibili. Durante il caricamento l'icona ruota; il completamento corretto non mostra messaggi.
@@ -4,12 +4,14 @@
4
4
  "sections": {
5
5
  "groupAssistant": "Assistente AI",
6
6
  "groupChatHome": "Conversazioni e casa",
7
- "detectedAdapters": "Adapter rilevati automaticamente",
7
+ "setupDoctor": "Setup Doctor",
8
+ "webIntelligence": "Intelligenza Web",
9
+ "detectedAdapters": "Nodi compatibili rilevati ed usati in chat",
8
10
  "chatContextOverview": "Contesto disponibile alla chat",
9
11
  "chatLearning": "Apprendimento AI Chat",
10
12
  "quickSetup": "Configurazione assistente",
11
13
  "llmConnection": "Connessione Assistente AI",
12
- "chatAdapter": "Canali chat",
14
+ "chatAdapter": "Chat PIN Input e Output",
13
15
  "homeIntelligence": "Educazione AI e memoria",
14
16
  "advanced": "Provider e limiti"
15
17
  },
@@ -27,10 +29,13 @@
27
29
  "llmIncludeRaw": "Includi payload raw in hex",
28
30
  "llmAllowKnxCommands": "Consenti all'AI di leggere stati KNX e comandare attuatori",
29
31
  "llmRequireCommandConfirmation": "Chiedi conferma prima di inviare comandi KNX",
30
- "chatAdapterPreset": "Preset adattatore",
32
+ "webAccessEnabled": "Consenti all’AI di usare il Web",
33
+ "webProactiveEnabled": "Consenti controlli Web proattivi",
34
+ "webProactiveIntervalMinutes": "Intervallo minimo dei controlli proattivi",
35
+ "webMaxCallsPerHour": "Numero massimo di chiamate Web all’ora",
36
+ "chatAdapterPreset": "Adattatore messaggi ingresso/uscita",
31
37
  "chatInputCode": "Mappatura ingresso (chat → KNX AI)",
32
38
  "chatOutputCode": "Mappatura uscita (KNX AI → chat)",
33
- "ttsUltimateNodeId": "Nodo TTS Ultimate per gli annunci",
34
39
  "aiEducation": "Educazione AI (gestita dall'utente)",
35
40
  "llmIncludeDocsSnippets": "Includi estratti documentazione (help/README/esempi)"
36
41
  },
@@ -38,7 +43,8 @@
38
43
  "summary": "Summary/Statistiche",
39
44
  "anomalies": "Anomalie",
40
45
  "assistant": "Assistente AI",
41
- "knxCommands": "Operazioni KNX"
46
+ "knxCommands": "Operazioni KNX",
47
+ "ttsUltimate": "Annunci TTS Ultimate"
42
48
  },
43
49
  "selectlists": {
44
50
  "llmProvider": {
@@ -55,12 +61,17 @@
55
61
  "chatAdapter": {
56
62
  "none": "Nessun adattatore"
57
63
  },
58
- "ttsUltimate": {
59
- "select": "Seleziona un nodo TTS Ultimate",
60
- "none": "Nessun nodo TTS Ultimate trovato"
64
+ "webProactiveInterval": {
65
+ "5": "5 minuti",
66
+ "10": "10 minuti",
67
+ "15": "15 minuti",
68
+ "30": "30 minuti",
69
+ "60": "1 ora",
70
+ "180": "3 ore"
61
71
  }
62
72
  },
63
73
  "buttons": {
74
+ "refreshSetupDoctor": "Ricontrolla",
64
75
  "refreshModels": "Aggiorna",
65
76
  "installOllamaModel": "2) Installalo",
66
77
  "ollamaLibrary": "Libreria modelli",
@@ -68,6 +79,18 @@
68
79
  "openChatLearning": "Apri Apprendimento AI Chat"
69
80
  },
70
81
  "messages": {
82
+ "setupDoctorLoading": "Sto analizzando questo impianto…",
83
+ "setupDoctorUnavailable": "Setup Doctor non è temporaneamente disponibile.",
84
+ "setupDoctorPromptsTitle": "Prova il tuo impianto",
85
+ "setupDoctorPromptsHint": "Ogni suggerimento apre l’Assistant Web con una richiesta personalizzata e sicura. Nulla viene eseguito automaticamente.",
86
+ "setupDoctorDeployHint": "Setup Doctor legge l’ultimo flow distribuito. Fai Deploy delle modifiche e poi ricontrolla.",
87
+ "setupDoctorPass": "OK",
88
+ "setupDoctorWarn": "Controlla",
89
+ "setupDoctorFail": "Correggi",
90
+ "setupDoctorInfo": "Opzionale",
91
+ "webAccessHint": "Il modello sceglie semanticamente questo tool Web generale; non vengono usate parole chiave né classificatori d’intento. I siti esterni e il servizio di ricerca ricevono la query e l’IP pubblico del server. Dati privati KNX, telecamere, chat, memoria e credenziali non vengono mai aggiunti automaticamente.",
92
+ "webProactiveHint": "Questo opt-in separato richiede anche istruzioni esplicite in Educazione AI e una chat destinataria appresa da una normale richiesta. Il modello decide cosa controllare; restano valide le autorizzazioni degli altri strumenti e le conferme KNX.",
93
+ "webBudgetHint": "Il budget scorrevole conteggia le chiamate esterne reali della chat e dei controlli proattivi.",
71
94
  "loadingModels": "Carico i modelli…",
72
95
  "loadedModels": "Modelli caricati",
73
96
  "lmStudioContextAvailable": "Contesto massimo del modello",
@@ -85,16 +108,13 @@
85
108
  "installOllamaModelFailed": "Installazione modello Ollama non riuscita",
86
109
  "ollamaInstallSteps": "1) Apri la libreria, scegli un modello e copiane il nome (es. llama3.1). 2) Inserisci il nome nel campo Modello e clicca Installalo.",
87
110
  "ollamaStartedAuto": "Server Ollama avviato automaticamente.",
88
- "detectedAdaptersLoading": "Rilevamento degli adapter installati…",
89
- "detectedAdaptersNone": "Nessun adapter automatico rilevato.",
90
- "detectedAdaptersUnavailable": "Il rilevamento automatico degli adapter non è momentaneamente disponibile.",
111
+ "detectedAdaptersLoading": "Rilevamento dei nodi compatibili installati…",
112
+ "detectedAdaptersNone": "Nessun nodo compatibile rilevato.",
113
+ "detectedAdaptersUnavailable": "Il rilevamento dei nodi compatibili non è momentaneamente disponibile.",
91
114
  "detectedAdapterDetected": "Rilevato",
92
115
  "detectedAdapterControllers": "Controller",
93
116
  "detectedAdapterCameras": "Telecamere",
94
117
  "detectedAdapterNodes": "Nodi",
95
- "ttsUltimateUnknownFlow": "Flow senza nome",
96
- "ttsUltimateUnavailable": "Nodo TTS Ultimate non disponibile",
97
- "ttsUltimateHint": "Le richieste esplicite di annuncio della chat vengono inviate direttamente al nodo scelto; non servono collegamenti nel flow.",
98
118
  "chatContextLoading": "Caricamento del riepilogo del contesto…",
99
119
  "chatContextUnavailable": "Il riepilogo del contesto della chat non è momentaneamente disponibile.",
100
120
  "chatLearningOpenHint": "Apri la Web UI direttamente nell’editor dell’apprendimento CHAT condiviso per visualizzare, modificare, copiare o salvare il suo file persistente.",
@@ -115,7 +135,6 @@
115
135
  "chatContextSourceEtsProject": "Semantica ETS e inventario completo del progetto Node-RED.",
116
136
  "chatContextSourceMemoryEducation": "Contesto di sessione, Educazione AI e memoria domestica limitata.",
117
137
  "chatContextSourceCameras": "Telecamere rilevate e relative funzionalità disponibili.",
118
- "chatContextSourceTtsUltimate": "Nodo TTS Ultimate selezionato per gli annunci.",
119
138
  "chatContextSourceBadge": "Fonte",
120
139
  "chatContextFileChatContext": "Turni persistenti, istruzioni e regole di notifica delle telecamere.",
121
140
  "chatContextFileHomeMemory": "Educazione AI e memoria domestica appresa e limitata.",