Files
EVCS/AGENTS.md

3.2 KiB

AGENTS.md — Projet n8n / Home Assistant / EVCS Solaire

🎯 Environnement

  • Serveur n8n : https://n8n.airtria.pro (API v1)
  • Accès n8n via le MCP n8n-mcp (lecture/écriture de workflows).
  • Pilotage énergie via MCP dédiés. Modèle local : Qwen3.6-35B (contexte limité).

🔧 OUTILS — RÈGLES STRICTES

Noms d'outils MCP (TIRETS, jamais underscores)

  • ha-get-state · lire un état Home Assistant
  • ha-set-helper · écrire un helper HA
  • grid-set-state · piloter le grid
  • victron-set-charge-limits · limites de charge Victron
  • pv-get-forecast · prévision solaire
  • n8n-mcp · workflows n8n ⚠️ Recopie ces noms EXACTEMENT. N'invente jamais un nom d'outil.

Interdictions

  • JAMAIS de curl / wget / appel HTTP direct vers HA, n8n, Victron. Tout passe par les MCP (le shell bloque curl de toute façon).
  • JAMAIS d'IP, d'URL ni de token inventés. Info manquante → utilise le MCP ou demande-moi. Ne devine pas.
  • ripgrep/rg N'EST PAS installé. Utilise grep.

📂 LIRE UN WORKFLOW n8n (méthode obligatoire)

Le MCP n8n-mcp_get_workflow renvoie le workflow ENTIER (~357K, trop gros pour le contexte). opencode l'écrit alors dans un fichier ~/.local/share/opencode/tool-output/tool_* et te le tronque.

⚠️ Ce fichier commence par une ligne de texte Retrieved workflow: <nom> AVANT le JSON. Donc :

  • N'utilise JAMAIS json.load(f) ni json.loads(text) directement → ÉCHEC garanti (JSONDecodeError, le fichier ne commence pas par {).

MÉTHODE VALIDÉE pour extraire UN nœud (ex: DECISION_ENGINEV2) :

  1. Localise-le : grep -n '"name": "NOM_DU_NOEUD"' <fichier_tool-output>
  2. Extrais sa section : sed -n 'DEBUT,FINp' <fichier_tool-output> (repère les bornes d'accolades autour du nœud avec le grep). Si tu tiens à Python, retire d'abord le préfixe texte : text = open(f).read(); json_text = text[text.index('{'):]

🧭 MÉTHODE DE TRAVAIL

  • UN nœud / UNE tâche à la fois. Ne charge JAMAIS le workflow complet.
  • Avant toute écriture (patch/PUT/set) : backup ou dry-run, puis attends ma validation. Applique une seule action, vérifie, puis continue.
  • Si un outil ou un parse échoue 2 fois : ARRÊTE et demande-moi comment procéder. Ne pars jamais en boucle de réessais.
  • Toutes les valeurs d'énergie (SOC, PV, charge, grid, courant EVCS) se lisent via ha-get-state, jamais en dur.

⚡ CONTEXTE MÉTIER — Workflow "HA Snapshot EVCS Surplus Controller V2.6"

ID: ATswvGfG4KJUls0K (les V1/V1.2/V2.0 sont INACTIFS, ne pas y toucher). Nœud central de décision : DECISION_ENGINEV2 (id 1a8271fd-...). Stratégies (entrées via strategy.userStrategy) → context.sourceMode :

  • auto_solar → sourceMode solar_only / solar_potential
  • force_grid_now → strategy.forceGridRequested=true → grid_forced / grid_hc_allowed Garde-fous connus : effectiveSocStartFloor, commonSafetyStartOk, gridAllowedBySoc (SOC<=35 OU forceGridRequested → bypass), batteryAssistSolarStartOk (SOC>=90).

Quand tu analyses le pipeline complet (plusieurs nœuds), n'extrais que les lignes pertinentes (grep -n "name"/"jsCode" puis sed sur la plage), jamais le workflow JSON entier en mémoire Python. Traite un nœud, résume, libère.