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.

L’éditeur utilise trois sections principales en accordĂ©on : 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 ; Analyse du trafic KNX contient les tĂ©lĂ©grammes du bus, l’historique/les rĂ©sumĂ©s et les anomalies/motifs. L’ouverture d’une section principale affiche ensemble toutes ses options. Les identifiants et valeurs enregistrĂ©s restent inchangĂ©s.

Sorties

  1. Résumé/Stats (msg.payload JSON)
  2. Anomalies (msg.payload JSON)
  3. Assistant IA (msg.payload texte, avec msg.summary)
  4. Opérations KNX (un message Universal Mode par lecture ou écriture validée)

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.

Commandes (entrée)

Envoyez msg.topic :

  • summary (ou vide) : envoie le rĂ©sumĂ© immĂ©diatement
  • reset : efface l’historique, les compteurs et la mĂ©moire domestique apprise ; l’Éducation de l’IA reste inchangĂ©e
  • ask : envoie une question au LLM configurĂ©
  • confirm / cancel : confirme ou annule les commandes KNX en attente sans rappeler le LLM
  • clear_chat : efface la mĂ©moire de conversation de la session courante

Pour ask, mettez la question dans msg.prompt (recommandé), msg.payload (chaßne), ou les champs Telegram courants msg.payload.content / msg.payload.text.

Lorsque le contrĂŽle KNX est activĂ©, les Ă©changes rĂ©cents sont conservĂ©s en RAM par msg.knxAi.sessionId, msg.sessionId ou ID de chat Telegram dĂ©tectĂ©. Reliez la sortie 3 au nƓud d’envoi du chat et la sortie 4 Ă  un nƓud KNX Ultimate en mode universel. Avec la confirmation active, la premiĂšre rĂ©ponse affiche GA, DPT et payload sans Ă©mettre d’écriture ; la mĂȘme session doit rĂ©pondre CONFIRMER ou ANNULER dans les 5 minutes. Une nouvelle demande remplace tout plan prĂ©cĂ©dent. Chaque commande confirmĂ©e contient msg.destination, msg.dpt, msg.payload et msg.event = "GroupValue_Write". Pour les Ă©critures DPT 1.xxx, les Ă©quivalents sĂ»rs produits par l’IA true/false, 1/0 et on/off sont normalisĂ©s en vĂ©ritables boolĂ©ens avant la validation locale et la sortie.

Lectures KNX actualisées

Lorsque l’utilisateur demande explicitement un Ă©tat actuel ou actualisĂ©, l’IA peut interroger les objets exacts du catalogue ETS importĂ©, y compris les objets d’état et autres objets en lecture seule. La sortie 4 Ă©met msg.destination, msg.dpt, msg.event = "GroupValue_Read" et msg.readstatus = true. Le nƓud attend jusqu’à 6 secondes chaque GroupValue_Response ou Ă©criture rĂ©cente, puis renvoie les valeurs dĂ©codĂ©es sur la sortie 3 et les dĂ©tails dans msg.knxAi.readResults. Les lectures ne nĂ©cessitent jamais de confirmation et ne sont jamais transformĂ©es en Ă©critures.

Demande de confirmation pour les boutons du chat

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.

PrĂ©rĂ©glages d’adaptateur de chat

L’onglet Adaptateurs de chat charge ses mappages sĂ©lectionnables depuis resources/KNXAIChatAdapterMappings.js. Le choix d’un prĂ©rĂ©glage insĂšre deux mappages JavaScript synchrones et modifiables dans des zones de texte pleine largeur : un avant le traitement de l’entrĂ©e par KNX AI et un avant l’émission sur la sortie 3. Renvoyez msg pour continuer ou aucune valeur pour Ă©carter le message. Les erreurs de syntaxe et d’exĂ©cution sont interceptĂ©es et signalĂ©es sans arrĂȘter Node-RED.

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. Pour les boutons de confirmation inline, connectez aussi un telegram event configurĂ© pour callback_query Ă  la mĂȘme entrĂ©e KNX AI. 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.

Intelligence domestique proactive et mémoire limitée

La sous-section Maison proactive et mĂ©moire de Conversations et maison active les notifications proactives sur choix de l’utilisateur. À partir de la hiĂ©rarchie ETS, des noms, rĂŽles et DPT, le nƓud crĂ©e un modĂšle sĂ©mantique dĂ©terministe pour les volets, fenĂȘtres, portes, Ă©clairages, tempĂ©ratures, climat, prĂ©sence et alarmes avec des termes italiens, anglais, allemands, français, espagnols et chinois. Le premier dĂ©tecteur proactif surveille uniquement les Ă©tats hors commande de volets/fenĂȘtres/portes reconnus avec une fiabilitĂ© suffisante. AprĂšs la durĂ©e d’ouverture configurĂ©e et hors heures silencieuses, la sortie 3 Ă©met un message localisĂ© avec msg.knxAi.type = "proactive_notification". Il n’émet jamais sur la sortie 4 et ne modifie jamais KNX de façon autonome ; une demande ultĂ©rieure de l’utilisateur passe toujours par la validation et la confirmation normales.

La derniĂšre session de chat est mĂ©morisĂ©e comme propriĂ©taire, ou Destinataire principal / ID de chat permet de la dĂ©finir explicitement. Un msg.inputMessage synthĂ©tique conserve le destinataire afin que l’adaptateur Telegram puisse envoyer une notification spontanĂ©e. Le dĂ©lai de rĂ©pĂ©tition et la limite de trois notifications proactives par heure Ă©vitent les rafales.

La rĂ©fĂ©rence apprise est chargĂ©e au dĂ©marrage depuis <userDir>/knxai/memory/knxai-home-memory-<node-id>.md, réécrite atomiquement toutes les 15 minutes et strictement limitĂ©e entre 64 et 1 024 Ko configurables (256 Ko par dĂ©faut). Elle conserve au maximum 120 observations importantes, 80 habitudes agrĂ©gĂ©es, 80 notifications et 300 objets ETS sĂ©mantiques, jamais un flux illimitĂ© de tĂ©lĂ©grammes bruts. Les Ă©lĂ©ments anciens et moins prioritaires sont supprimĂ©s en premier. Éducation IA est limitĂ©e Ă  16 000 caractĂšres et provient toujours de la configuration du nƓud : l’IA peut la lire comme une consigne faisant autoritĂ©, mais ne peut ni la modifier ni l’écraser. Si cette Éducation est prĂ©sente mais que le LLM ne peut pas l’évaluer, la notification candidate est supprimĂ©e plutĂŽt que de risquer de la contredire.

Exemple pratique de configuration

Cet exemple crée un assistant concis qui signale les ouvertures importantes, tout en acceptant que le volet du bureau reste ouvert :

Champ de l’éditeur Valeur d’exemple RĂ©sultat
Activer les notifications domestiques proactives (proactiveEnabled) activĂ© Le nƓud Ă©value les Ă©tats ouverts de volet/fenĂȘtre/porte reconnus avec fiabilitĂ©.
Destinataire principal / ID de chat (proactiveRecipient) 123456789 Les messages spontanés vont vers ce chat ; laissez vide pour mémoriser la derniÚre session Ask.
Notifier aprÚs ouverture (proactiveOpenMinutes) 120 Une notification potentielle est évaluée aprÚs deux heures.
DĂ©but / fin des heures silencieuses 23:00 / 07:00 Aucun message proactif n’est Ă©mis pendant la nuit.
DĂ©lai de rĂ©pĂ©tition (proactiveCooldownMinutes) 360 Le mĂȘme objet ne peut pas notifier Ă  nouveau pendant six heures.
Taille maximale du fichier mĂ©moire (homeMemoryMaxKb) 256 La rĂ©fĂ©rence Markdown de ce nƓud reste sous 256 Ko.

Exemple pour Éducation IA (aiEducation) :

Appelle-moi Alex et rĂ©ponds dans la mĂȘme langue que moi.
Réponds briÚvement, sauf si je demande des détails techniques.
Le volet du bureau peut rester ouvert le jour : ne m’envoie pas de notification.
PrĂ©viens-moi lorsqu’un autre volet, une fenĂȘtre ou une porte reste ouvert anormalement longtemps.
Si « lumiÚre du salon » est ambigu, demande-moi quel éclairage je veux dire.
N’affirme jamais qu’un actionneur a changĂ© avant confirmation par un objet d’état KNX.

Avec ces rĂ©glages, la sortie 3 peut Ă©mettre une proactive_notification localisĂ©e aprĂšs 120 minutes pour le volet du salon, tandis que l’Éducation supprime la notification du volet du bureau. Si Alex demande ensuite de fermer le volet du salon, KNX AI prĂ©pare la commande ETS exacte, mais conserve la validation et la confirmation normales avant la sortie 4.

Utilisez des hiĂ©rarchies et noms d’objet ETS explicites, avec des rĂŽles Ă©tat/commande corrects. L’Éducation personnalise les dĂ©cisions et la formulation, mais ne peut ni inventer une adresse de groupe, ni changer un DPT, ni contourner la validation KNX.

Workflow rapide : contrĂŽle KNX

  1. Importez le CSV ETS dans la passerelle et configurez le fournisseur, le modĂšle et les identifiants LLM.
  2. Activez Assistant LLM et lecture des états KNX et commande des actionneurs ; laissez la confirmation activée.
  3. Connectez l’entrĂ©e du chat Ă  KNX AI en conservant un identifiant de session/chat stable.
  4. Connectez la sortie 3 à la réponse du chat et la sortie 4 à KNX Ultimate en mode universel.
  5. L’utilisateur envoie une demande ; les Ă©tats actuels sont lus immĂ©diatement, tandis que les Ă©critures affichent d’abord GA, DPT et valeur sans Ă©crire sur le bus.
  6. Dans les 5 minutes, le mĂȘme chat rĂ©pond exactement CONFIRMER ou ANNULER.
  7. Seul CONFIRMER revalide et Ă©met les commandes sur la sortie 4 ; vĂ©rifiez l’exĂ©cution avec une GA d’état KNX.

Champs de configuration

Voici tous les champs tels qu’affichĂ©s dans l’éditeur KNX AI.

Général

  • Gateway : gateway/config node KNX Ultimate utilisĂ© comme source des tĂ©lĂ©grammes.
  • Name : nom du nƓud et titre du dashboard.
  • Topic : topic de base utilisĂ© dans les sorties.
  • Bouton Open KNX AI Web : ouvre le dashboard web (/knxUltimateAI/sidebar/page).

KNX AI Ă©coute automatiquement les tĂ©lĂ©grammes GroupValue_Write, GroupValue_Response et GroupValue_Read. L’analyse des motifs et anomalies est toujours initialisĂ©e avec les valeurs intĂ©grĂ©es par dĂ©faut ; aucune configuration des Ă©vĂ©nements du bus ou de la dĂ©tection n’est nĂ©cessaire.

Analysis

  • Analysis window (seconds) : fenĂȘtre principale pour rĂ©sumĂ©/dĂ©bits.
  • History window (seconds) : fenĂȘtre de rĂ©tention de l’historique interne.
  • Archiver aussi sur disque les telegrammes captures : stocke aussi les tĂ©lĂ©grammes dans knxultimatestorage/knxai/history/<node-id>/YYYY-MM-DD.jsonl, en plus de la RAM.
  • Retention de l’archive disque (jours) : nombre de jours conservĂ©s sur disque avant suppression automatique des anciens fichiers.
  • Max stored events : nombre maximal de tĂ©lĂ©grammes en mĂ©moire.
  • Auto emit summary (seconds, 0=off) : intervalle pĂ©riodique d’émission du rĂ©sumĂ©.
  • Top list size : nombre de group addresses/sources dans le top.

Assistant IA

  • Enable LLM assistant : active les fonctions Ask/chat.
  • Provider : backend LLM (OpenAI-compatible ou Ollama).
  • Endpoint URL : URL endpoint chat/completions.
  • API key : clĂ© API (non requise avec Ollama local).
  • Model : ID/nom du modĂšle.
  • 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.
  • 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.
  • 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.
  • PrĂ©rĂ©glage d’adaptateur : utilise Aucun adaptateur par dĂ©faut. Les Ă©diteurs JavaScript restent masquĂ©s jusqu’à la sĂ©lection d’un adaptateur, puis les mappages entrĂ©e/sortie modifiables sont chargĂ©s et affichĂ©s.
  • Mappage d’entrĂ©e (chat → KNX AI) : JavaScript synchrone exĂ©cutĂ© avant le traitement de la commande d’entrĂ©e dans l’éditeur JavaScript vert.
  • Mappage de sortie (KNX AI → chat) : JavaScript synchrone appliquĂ© uniquement aux messages de la sortie 3 dans l’éditeur JavaScript jaune.
  • Activer les notifications domestiques proactives : dĂ©tecteur optionnel des Ă©tats ouverts de volet/fenĂȘtre/porte reconnus de façon fiable ; il n’écrit jamais de maniĂšre autonome sur KNX.
  • Destinataire principal / ID de chat : destination facultative des messages spontanĂ©s ; sinon la derniĂšre session Ask est mĂ©morisĂ©e.
  • Notifier aprĂšs ouverture (minutes) : seuil de durĂ©e avant d’envisager une notification proactive ; 120 minutes par dĂ©faut.
  • DĂ©but / fin des heures silencieuses : intervalle quotidien pendant lequel les messages proactifs sont supprimĂ©s.
  • Éducation de l’IA : consignes autoritaires gĂ©rĂ©es uniquement par l’utilisateur, lues par l’IA et jamais modifiĂ©es.
  • DĂ©lai de rĂ©pĂ©tition (minutes) : intervalle minimal avant qu’un mĂȘme objet puisse notifier Ă  nouveau ; 360 minutes par dĂ©faut.
  • Taille maximale du fichier mĂ©moire domestique (KB) : limite stricte de 64 Ă  1 024 KB ; 256 KB par dĂ©faut.
  • Si l’archive disque est active, Ask l’utilise par dĂ©faut : les dates/plages explicites sont respectĂ©es, sinon l’assistant cherche sur les derniĂšres 24 heures plus les Ă©vĂ©nements RAM courants.
  • Inclure l’inventaire du projet Node-RED : inclut dans le prompt l’inventaire de tout le projet Node-RED, avec les nƓuds KNX et d’autres nƓuds utiles comme function/change/inject/template lorsqu’ils contiennent de la logique KNX ou des adresses de groupe.
  • Les extraits pertinents de l’aide, du README et des exemples sont toujours inclus automatiquement.
  • Docs language : langue prĂ©fĂ©rĂ©e des extraits de documentation inclus automatiquement.
  • 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.

Advanced

  • Analysis window (seconds) : fenĂȘtre principale pour rĂ©sumĂ©/dĂ©bits.
  • Max stored events : nombre maximal de tĂ©lĂ©grammes en mĂ©moire.
  • Top list size : nombre de group addresses/sources dans le top.

Démarrage rapide Ollama (local)

  • Choisir Provider = Ollama.
  • Endpoint par dĂ©faut : http://localhost:11434/api/chat.
  • Si aucun modĂšle local n’est trouvĂ© :
    • 1) Download model : ouvre la page Model library.
    • 2) Install it : tĂ©lĂ©charge et installe le modĂšle localement (ex. llama3.1).
  • Pendant refresh/install, KNX AI tente aussi de dĂ©marrer automatiquement le serveur Ollama.
  • Si l’installation Ă©choue avec une erreur de connexion, vĂ©rifier qu’Ollama est lancĂ© (app desktop ou ollama serve).
  • Si Node-RED tourne dans Docker, utiliser host.docker.internal au lieu de localhost dans l’endpoint.

Note sécurité

Si le LLM est activĂ©, le contexte trafic KNX peut ĂȘtre envoyĂ© Ă  l’endpoint configurĂ©. Pour un usage strictement on-premise, utilisez un provider local. Une commande Ă©mise en sortie 4 a passĂ© la validation locale et a Ă©tĂ© transmise au flow, sans prouver son exĂ©cution par l’actionneur. Utilisez une GA d’état KNX pour la confirmation.