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
- Résumé/Stats (
msg.payloadJSON) - Anomalies (
msg.payloadJSON) - Assistant IA (
msg.payloadtexte, avecmsg.summary) - 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Ă©diatementreset: efface lâhistorique, les compteurs et la mĂ©moire domestique apprise ; lâĂducation de lâIA reste inchangĂ©eask: envoie une question au LLM configurĂ©confirm/cancel: confirme ou annule les commandes KNX en attente sans rappeler le LLMclear_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
- Importez le CSV ETS dans la passerelle et configurez le fournisseur, le modĂšle et les identifiants LLM.
- Activez Assistant LLM et lecture des états KNX et commande des actionneurs ; laissez la confirmation activée.
- Connectez lâentrĂ©e du chat Ă KNX AI en conservant un identifiant de session/chat stable.
- Connectez la sortie 3 à la réponse du chat et la sortie 4 à KNX Ultimate en mode universel.
- 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.
- Dans les 5 minutes, le mĂȘme chat rĂ©pond exactement
CONFIRMERouANNULER. - Seul
CONFIRMERrevalide 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
commandsont 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.internalau lieu delocalhostdans 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.