From 2f3a66993b02617f3cc6ef6c4a6097bf393fc0fa Mon Sep 17 00:00:00 2001 From: Tallagrand Thierry Date: Sat, 18 Jul 2026 02:14:22 +0200 Subject: [PATCH] Update AGENTS.md with Qwen3-VL screen analysis procedure, add MANUEL_COMPLET.md and vision-notes.md --- .../n8n-code-python/COMMON_PATTERNS.md | 0 .../n8n-code-python/DATA_ACCESS.md | 0 .../n8n-code-python/ERROR_PATTERNS.md | 0 .../n8n-code-python/README.md | 0 .../n8n-code-python/SKILL.md | 0 .../n8n-code-python/STANDARD_LIBRARY.md | 0 .../n8n-workflow-patterns/README.md | 0 .../n8n-workflow-patterns/SKILL.md | 0 .../ai_agent_workflow.md | 0 .../database_operations.md | 0 .../http_api_integration.md | 0 .../n8n-workflow-patterns/scheduled_tasks.md | 0 .../webhook_processing.md | 0 AGENTS.md | 67 +++ docs/MANUEL_COMPLET.md | 420 ++++++++++++++++++ docs/vision-notes.md | 172 +++++++ 16 files changed, 659 insertions(+) rename .opencode/{skills-off => skills}/n8n-code-python/COMMON_PATTERNS.md (100%) rename .opencode/{skills-off => skills}/n8n-code-python/DATA_ACCESS.md (100%) rename .opencode/{skills-off => skills}/n8n-code-python/ERROR_PATTERNS.md (100%) rename .opencode/{skills-off => skills}/n8n-code-python/README.md (100%) rename .opencode/{skills-off => skills}/n8n-code-python/SKILL.md (100%) rename .opencode/{skills-off => skills}/n8n-code-python/STANDARD_LIBRARY.md (100%) rename .opencode/{skills-off => skills}/n8n-workflow-patterns/README.md (100%) rename .opencode/{skills-off => skills}/n8n-workflow-patterns/SKILL.md (100%) rename .opencode/{skills-off => skills}/n8n-workflow-patterns/ai_agent_workflow.md (100%) rename .opencode/{skills-off => skills}/n8n-workflow-patterns/database_operations.md (100%) rename .opencode/{skills-off => skills}/n8n-workflow-patterns/http_api_integration.md (100%) rename .opencode/{skills-off => skills}/n8n-workflow-patterns/scheduled_tasks.md (100%) rename .opencode/{skills-off => skills}/n8n-workflow-patterns/webhook_processing.md (100%) create mode 100644 docs/MANUEL_COMPLET.md create mode 100644 docs/vision-notes.md diff --git a/.opencode/skills-off/n8n-code-python/COMMON_PATTERNS.md b/.opencode/skills/n8n-code-python/COMMON_PATTERNS.md similarity index 100% rename from .opencode/skills-off/n8n-code-python/COMMON_PATTERNS.md rename to .opencode/skills/n8n-code-python/COMMON_PATTERNS.md diff --git a/.opencode/skills-off/n8n-code-python/DATA_ACCESS.md b/.opencode/skills/n8n-code-python/DATA_ACCESS.md similarity index 100% rename from .opencode/skills-off/n8n-code-python/DATA_ACCESS.md rename to .opencode/skills/n8n-code-python/DATA_ACCESS.md diff --git a/.opencode/skills-off/n8n-code-python/ERROR_PATTERNS.md b/.opencode/skills/n8n-code-python/ERROR_PATTERNS.md similarity index 100% rename from .opencode/skills-off/n8n-code-python/ERROR_PATTERNS.md rename to .opencode/skills/n8n-code-python/ERROR_PATTERNS.md diff --git a/.opencode/skills-off/n8n-code-python/README.md b/.opencode/skills/n8n-code-python/README.md similarity index 100% rename from .opencode/skills-off/n8n-code-python/README.md rename to .opencode/skills/n8n-code-python/README.md diff --git a/.opencode/skills-off/n8n-code-python/SKILL.md b/.opencode/skills/n8n-code-python/SKILL.md similarity index 100% rename from .opencode/skills-off/n8n-code-python/SKILL.md rename to .opencode/skills/n8n-code-python/SKILL.md diff --git a/.opencode/skills-off/n8n-code-python/STANDARD_LIBRARY.md b/.opencode/skills/n8n-code-python/STANDARD_LIBRARY.md similarity index 100% rename from .opencode/skills-off/n8n-code-python/STANDARD_LIBRARY.md rename to .opencode/skills/n8n-code-python/STANDARD_LIBRARY.md diff --git a/.opencode/skills-off/n8n-workflow-patterns/README.md b/.opencode/skills/n8n-workflow-patterns/README.md similarity index 100% rename from .opencode/skills-off/n8n-workflow-patterns/README.md rename to .opencode/skills/n8n-workflow-patterns/README.md diff --git a/.opencode/skills-off/n8n-workflow-patterns/SKILL.md b/.opencode/skills/n8n-workflow-patterns/SKILL.md similarity index 100% rename from .opencode/skills-off/n8n-workflow-patterns/SKILL.md rename to .opencode/skills/n8n-workflow-patterns/SKILL.md diff --git a/.opencode/skills-off/n8n-workflow-patterns/ai_agent_workflow.md b/.opencode/skills/n8n-workflow-patterns/ai_agent_workflow.md similarity index 100% rename from .opencode/skills-off/n8n-workflow-patterns/ai_agent_workflow.md rename to .opencode/skills/n8n-workflow-patterns/ai_agent_workflow.md diff --git a/.opencode/skills-off/n8n-workflow-patterns/database_operations.md b/.opencode/skills/n8n-workflow-patterns/database_operations.md similarity index 100% rename from .opencode/skills-off/n8n-workflow-patterns/database_operations.md rename to .opencode/skills/n8n-workflow-patterns/database_operations.md diff --git a/.opencode/skills-off/n8n-workflow-patterns/http_api_integration.md b/.opencode/skills/n8n-workflow-patterns/http_api_integration.md similarity index 100% rename from .opencode/skills-off/n8n-workflow-patterns/http_api_integration.md rename to .opencode/skills/n8n-workflow-patterns/http_api_integration.md diff --git a/.opencode/skills-off/n8n-workflow-patterns/scheduled_tasks.md b/.opencode/skills/n8n-workflow-patterns/scheduled_tasks.md similarity index 100% rename from .opencode/skills-off/n8n-workflow-patterns/scheduled_tasks.md rename to .opencode/skills/n8n-workflow-patterns/scheduled_tasks.md diff --git a/.opencode/skills-off/n8n-workflow-patterns/webhook_processing.md b/.opencode/skills/n8n-workflow-patterns/webhook_processing.md similarity index 100% rename from .opencode/skills-off/n8n-workflow-patterns/webhook_processing.md rename to .opencode/skills/n8n-workflow-patterns/webhook_processing.md diff --git a/AGENTS.md b/AGENTS.md index e34e541..35e2123 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -63,3 +63,70 @@ 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. +## Qwen3-VL — Traitement obligatoire des captures d'ecran + +Quand le modele actif est `qwen3-vl` et que l'utilisateur fournit une ou plusieurs captures d'ecran, images d'interface, screenshots, photos d'ecran ou pieces jointes image, tu DOIS systematiquement appliquer cette procedure avant toute autre analyse. + +### Procedure obligatoire + +Pour chaque image recue, produire une sortie structuree avec exactement les sections suivantes : + +1. OCR brut + - Recopier tout le texte visible dans l'image. + - Conserver les chemins, noms de fichiers, commandes, messages d'erreur, URLs visibles, noms de modeles, ports, statuts et valeurs numeriques. + - Ne pas corriger silencieusement le texte : si un caractere est incertain, l'indiquer avec `[incertain]`. + +2. Elements UI visibles + - Decrire les boutons, menus, onglets, listes, champs, cases cochees, selection active, panneaux ouverts et zones importantes. + - Indiquer les elements selectionnes ou mis en evidence. + +3. Erreurs, warnings et indices techniques + - Lister tous les messages d'erreur, warnings, traces, logs, codes HTTP, statuts Docker/vLLM/OpenCode/MCP ou signaux visuels de probleme. + - Si aucun probleme n'est visible, ecrire : `Aucune erreur visible`. + +4. Etat actuel deduit + - Resumer ce que l'image montre concretement. + - Distinguer les faits visibles des hypotheses. + - Ne jamais inventer d'IP, URL, token, nom d'outil MCP ou valeur absente de l'image. + +5. Actions recommandees + - Proposer les prochaines actions sous forme courte et operationnelle. + - Si l'image concerne n8n, Home Assistant, Victron, grid ou EVCS, respecter les regles MCP du projet : ne pas proposer de curl/wget/appel HTTP direct. + - Si une information manque, demander a l'utilisateur au lieu de deviner. + +### Memoire partagee avec les autres modeles + +Apres l'analyse, si la capture contient une information utile pour la suite de la session OpenCode, tu DOIS proposer ou creer un resume exploitable en texte dans : + +`docs/vision-notes.md` + +Format recommande : + +```md +# Vision notes +Source +Image(s) analysee(s) : + +# OCR brut +... + +# Éléments UI +... + +# Erreurs visibles +... + +# État actuel +... + +# Actions recommandées +... + + +Objectif : permettre a un autre modele texte, par exemple `minimax-m2.5`, de reutiliser l'information extraite sans avoir acces aux pixels de l'image. + +### Regle critique + +Ne considere jamais que les autres modeles ont acces a l'image originale. Toute information importante vue dans la capture doit etre explicitement convertie en texte dans la reponse ou dans `docs/vision-notes.md`. + +Cette analyse doit précéder toute modification de workflow ou configuration. diff --git a/docs/MANUEL_COMPLET.md b/docs/MANUEL_COMPLET.md new file mode 100644 index 0000000..df9eda2 --- /dev/null +++ b/docs/MANUEL_COMPLET.md @@ -0,0 +1,420 @@ +# Manuel Utilisateur - Système EVCS Solaire + +> Document généré le 17/07/2026 +> Projet: n8n / Home Assistant / EVCS Solaire sans injection réseau + +--- + +## 1. Architecture Globale + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ DGX Spark (10.10.10.8) │ +│ ┌─────────────────┐ ┌─────────────────┐ │ +│ │ Qwen3.6-35B │ │ Qwen3-VL │ │ +│ │ (texte, code) │ │ (vision) │ │ +│ └────────┬────────┘ └────────┬────────┘ │ +└───────────┼──────────────────────┼──────────────────────────────┘ + │ │ + ▼ ▼ +┌───────────────────────────────────────────────────────────────────┐ +│ opencode (minimax-m2.5) │ +│ ┌─────────────────────────────────────────────────────────────┐ │ +│ │ Skills: n8n-code-javascript, n8n-expression-syntax, │ │ +│ │ n8n-mcp-tools-expert, n8n-node-configuration, │ │ +│ │ n8n-validation-expert │ │ +│ └─────────────────────────────────────────────────────────────┘ │ +└───────────┬──────────────────────┬───────────────────────────────┘ + │ │ + ▼ ▼ +┌──────────────────────┐ ┌──────────────────────────────────────┐ +│ n8n (cloud) │ │ Home Assistant (10.10.10.17:8123) │ +│ https://n8n.airtria.pro │ ┌──────────────────────────────────┐ │ +│ ┌────────────────┐ │ │ │ Dashboards YAML (17 fichiers) │ │ +│ │ 40 workflows │ │ │ │ - evcs_master.yaml │ │ +│ │ 13 actifs │ │ │ │ - evcs_mobile.yaml │ │ +│ └────────┬───────┘ │ │ │ - victron_master.yaml │ │ +│ │ │ │ │ - etc. │ │ +│ ▼ │ │ └──────────────────────────────────┘ │ +│ ┌────────────────┐ │ └──────────────────────────────────────┘ +│ │ MCP Servers │ │ +│ │ (6 outils) │ │ +│ └────────┬───────┘ │ +└───────────┼─────────┘ + │ + ▼ +┌───────────────────────────────────────────────────────────────────┐ +│ Équipements physiques │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ EVCS HQ229 │ │ Victron ESS │ │ MultiPlus │ │ +│ │ (borne VE) │ │ (batterie) │ │ (onduleur) │ │ +│ └─────────────┘ └─────────────┘ └─────────────┘ │ +└───────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 2. Workflows n8n Actifs + +### 2.1 Gestion Énergie (EVCS + Grid) + +| ID | Nom | Fréquence | Fonction | +|---|---|---|---| +| `ATswvGfG4KJUls0K` | HA Snapshot EVCS Surplus Controller V2.6 | 30s | Pilotage borne EVCS, décision charge solaire/réseau | +| `7iIlu7LLTW7TZA8o` | Victron - Battery / Grid Hysteresis Fix V1 | 1 min | Hystérésis réseau EDF (ON ≤20%, OFF ≥30%) | +| `cTeeHy4ePiVeELLh` | Victron - Auto Charge Manager V1.2 | 30s | Limites DVCC batterie (MaxChargeCurrent/Voltage) | + +### 2.2 Gestion Charges + +| ID | Nom | Fréquence | Fonction | +|---|---|---|---| +| `2NhrfxuGm4pTUNs9` | SDB Climate & Surplus Manager V2.2 | 1 min | Pilotage chauffage SDB selon surplus | +| `FtPVF7byhtu4o6Oh` | Victron - Garage Thermal Surplus Manager V2.2 | 1 min | Gestion garage thermique | +| `A11aOb50cGtpJmvn` | Water Heater Advisor V2.3 | 10 min | Advisor ballon ECS | +| `yX2j8m04e3pxaoQq` | Water Heater Advisor ECS 6 Nodes + Build + Execute | 10 min | Pilotage ballon ECS | +| `YjiNCpEoVhPT8JMw` | Victron - Flexible Load Advisor V1 | 5 min | Charge flexible | + +### 2.3 Advisor / Monitoring + +| ID | Nom | Fréquence | Fonction | +|---|---|---|---| +| `U0nRmdS9Pa0qzpWm` | Victron - PV Surplus Advisor V1 | 15 min | Advisor surplus PV | + +### 2.4 MCP (Machine Communication Protocol) + +| ID | Nom | Fonction | +|---|---|---| +| `76hHlVYIgt1lEHyR` | MCP - ha.get_state | Lecture états HA | +| `eeDmEICJ3ArjwpCt` | MCP - ha.set_helper | Écriture helpers HA | +| `uGZAOJjKegRuRNyb` | MCP - grid-set-state | Pilotage ON/OFF réseau EDF | +| `a92quWH4pokpIqdn` | MCP - victron-set-charge-limits | Limites courant/tension batterie | +| `RVTMdsvR4i8wSc18` | MCP - pv.get_forecast | Prévisions Forecast.Solar | + +--- + +## 3. Skills opencode + +| Skill | Chemin | Fonction | +|---|---|---| +| n8n-code-javascript | `.opencode/skills/n8n-code-javascript/SKILL.md` | Analyse/patch code JS dans nodes n8n | +| n8n-expression-syntax | `.opencode/skills/n8n-expression-syntax/SKILL.md` | Validation syntaxe {{ }} | +| n8n-mcp-tools-expert | `.opencode/skills/n8n-mcp-tools-expert/SKILL.md` | Utilisation outils MCP | +| n8n-node-configuration | `.opencode/skills/n8n-node-configuration/SKILL.md` | Configuration nœuds n8n | +| n8n-validation-expert | `.opencode/skills/n8n-validation-expert/SKILL.md` | Interprétation erreurs validation | + +--- + +## 4. MCP - Outils disponibles + +### 4.1 Lecture + +- **ha-get-state** : Lire un état Home Assistant + - Input: `entity_id` (ex: `sensor.victron_battery_soc`) + - Output: état + attributs + +- **pv-get-forecast** : Prévisions solaires + - Input: aucun + - Output: `today_remaining_kwh`, `tomorrow_kwh`, `tomorrow_peak_time` + +### 4.2 Écriture + +- **ha-set-helper** : Écrire un helper HA + - Input: `entity_id`, `value` + +- **grid-set-state** : Piloter le réseau EDF + - Input: `state` ('on' ou 'off') + +- **victron-set-charge-limits** : Limites de charge + - Input: `max_charge_current_a`, `max_charge_voltage_v` + +### 4.3 Workflows n8n + +- **n8n-mcp** : CRUD workflows + - List workflows, get workflow, update workflow, activate/deactivate + +--- + +## 5. Dashboards Home Assistant + +### 5.1 Principaux + +| Fichier | Titre | Description | +|---|---|---| +| `evcs_master.yaml` | EVCS Master | Dashboard principal borne VE | +| `evcs_mobile.yaml` | EVCS Mobile | Version mobile | +| `victron_master.yaml` | Victron Master | Dashboard principal système Victron | +| `victron_mobile.yaml` | Victron Mobile | Version mobile | + +### 5.2 Debug + +| Fichier | Titre | Description | +|---|---|---| +| `big_victron_debug.yaml` | Victron Debug (complet) | Debug étendu | +| `victron_debug.yaml` | Victron Debug | Debug standard | +| `EVCS_SOLAR.yaml` | EVCS Solar | Vue solaire EVCS | + +### 5.3 Pilotage + +| Fichier | Titre | Description | +|---|---|---| +| `ECS_PILOTAGE.yaml` | ECS Pilotage | Pilotage ECS | +| `ECS_PILOTAGE_PREMIUM.yaml` | ECS Pilotage Premium | Pilotage ECS avancé | +| `GARAGE_PREMIUM_PILOTAGE.yaml` | Garage Premium Pilotage | Pilotage garage | +| `SDB_PREMIUM_PILOTAGE.yaml` | SDB Premium Pilotage | Pilotage SDB | + +### 5.4 Debug Premium + +| Fichier | Titre | Description | +|---|---|---| +| `ECS_DEBUG_REGLAGES.yaml` | ECS Debug Réglages | Debug ECS | +| `ECS_DEBUG_REGLAGES_PREMIUM.yaml` | ECS Debug Réglages Premium | Debug ECS avancé | +| `GARAGE_DEBUG_PREMIUM.yaml` | Garage Debug Premium | Debug garage | +| `SDB_DEBUG_PREMIUM.yaml` | SDB Debug Premium | Debug SDB | + +--- + +## 6. Helpers Home Assistant (principaux) + +### 6.1 Configuration EVCS + +| Entity ID | Type | Description | +|---|---|---| +| `input_select.victron_evcs_strategy` | select | Stratégie (auto_solar_plus, force_grid_now, etc.) | +| `input_number.victron_evcs_required_energy_kwh` | number | Énergie demandée (kWh) | +| `input_boolean.victron_evcs_departure_priority_enabled` | boolean | Priorité départ | +| `input_datetime.victron_evcs_departure_time` | datetime | Heure de départ | +| `input_boolean.victron_evcs_allow_grid_hc_night` | boolean | Réseau HC nuit | +| `input_boolean.victron_evcs_allow_grid_hc_midday` | boolean | Réseau HC midi | +| `input_boolean.victron_evcs_surplus_auto_enabled` | boolean | Contrôleur surplus actif | + +### 6.2 État système + +| Entity ID | Type | Description | +|---|---|---| +| `input_text.victron_evcs_operating_mode` | text | Profil actif | +| `input_text.victron_evcs_surplus_state` | text | État interne | +| `input_text.victron_evcs_surplus_current_decision` | text | Décision logique | +| `input_text.victron_evcs_source_mode` | text | Source autorisée (Solaire/Réseau) | +| `input_text.victron_evcs_surplus_reason` | text | Raison courte | +| `input_text.victron_evcs_last_block_reason` | text | Dernier blocage | + +### 6.3 Paramètres seuils + +| Entity ID | Type | Description | Valeur actuelle | +|---|---|---|---| +| `input_number.victron_evcs_soc_start_min` | number | Seuil SOC démarrage | 80% | +| `input_number.victron_evcs_soc_stop_min` | number | Seuil SOC arrêt | 70% | +| `input_number.victron_evcs_midday_soc_min` | number | Seuil SOC midi | 75% | +| `input_number.victron_evcs_night_target_soc` | number | Cible SOC nuit | 70% | +| `input_number.evcs_plafond_courant_edf_on` | number | Plafond EDF ON | 20A | +| `input_number.victron_evcs_current_max_auto_a` | number | Plafond modes auto | 22A | + +### 6.4 Hystérésis réseau + +| Entity ID | Type | Description | +|---|---|---| +| `input_boolean.victron_grid_hysteresis_latch` | boolean | Latch hystérésis | +| `input_boolean.victron_evcs_night_session_active` | boolean | Session nuit active | +| `input_boolean.victron_evcs_night_grid_takeover_needed` | boolean | Takeover réseau nuit | + +--- + +## 7. Capteurs clés (lecture seule) + +| Entity ID | Description | +|---|---| +| `sensor.victron_battery_soc` | SOC batterie (%) | +| `sensor.victron_battery_current` | Courant batterie (A) | +| `sensor.victron_pv_power_system` | Puissance PV totale (W) | +| `sensor.victron_consumption_power_l1` | Consommation maison (W) | +| `sensor.victron_grid_power_l1` | Puissance réseau (W) | +| `sensor.victron_evcs_current` | Courant EVCS réel (A) | +| `sensor.victron_evcs_set_current` | Consigne lue borne (A) | +| `sensor.victron_evcs_ac_power` | Puissance EVCS (W) | +| `sensor.victron_evcs_charging_time` | Durée de charge | +| `sensor.victron_evcs_statut_fr` | Statut FR borne | +| `sensor.victron_evcs_mode_fr` | Mode FR borne | +| `switch.edf_general_ok_switch` | Interrupteur réseau EDF | +| `binary_sensor.victron_evcs_vehicle_connected` | Véhicule connecté | +| `binary_sensor.victron_evcs_device_connected` | Borne détectée | + +--- + +## 8. Scripts HA + +| Script | Fonction | +|---|---| +| `script.evcs_boost_edf` | BOOST EDF 28A (plafonds 28A + force_grid_now) | +| `script.evcs_boost_off` | Retour normal (plafonds 20/22 + auto_solar_plus) | +| `script.edf_urgence_off` | EDF Urgence OFF (hystérésis OFF + latch OFF + stratégie stop) | +| `script.edf_force_on` | EDF forcé ON | +| `script.edf_rendre_la_main` | Rendre la main au système auto | + +--- + +## 9. Stratégies de charge + +| Stratégie | Description | SourceMode | Conditions | +|---|---|---|---|---| +| `auto_solar_plus` | Solaire uniquement + assistance batterie haute | solar_only / solar_potential | SOC ≥ 90% + dette nuageuse faible | +| `auto_solar` | Solaire classique | solar_only | - | +| `force_grid_now` | Préservation batterie (remonter à seuil) | grid_forced / grid_hc_allowed | Si SOC < 22% → remonter à 35% été / 50% mi-saison / 75% hiver | +| `force_charge_now` | Charge immédiate (solution de secours manuelle) | solar_only si possible, grid_forced si SOC < 35% | À la discrétion du conducteur qui doit prendre sa voiture | +| `stop` | Arrêt complet | - | - | + +--- + +## 10. Profils temporels + +| Profil | Horaire | Description | +|---|---|---| +| `morning_solar` | 07:30 - 11:00 | Fenêtre solaire matin | +| `midday_hc_or_solar` | 12:24 - 14:24 | HC midi ou solaire | +| `evening_high_soc` | 17:00 - 20:30 | Soir haute priorité SOC | +| `night_hc` | 01:24 - 07:24 | Heures creuses nuit | +| `outside_window` | Autres | Hors fenêtres → Mode probe (sonde) pour relancer le PV si besoin | + +--- + +## 11. Logique de décision (DECISION_ENGINEV2) + +### 11.1 Garde-fous (Safety) + +- **commonSafetyStartOk** : Vérifications sécurité au démarrage +- **commonSafetyHoldOk** : Vérifications sécurité au maintien +- **mustStopHard** : Arrêt d'urgence (batterie basse, surcharge) + +### 11.2 Conditions de démarrage + +| Condition | Seuil | Description | +|---|---|---| +| `solarStartOk` | SOC ≥ profil + PV ≥ 1000W | Démarrage solaire | +| `gridStartOk` | SOC ≤ 35% + réseau dispo | Démarrage réseau | +| `batteryAssistSolarStartOk` | SOC ≥ 90% + dette nuageuse faible | Assistance batterie solaire | +| `probeStartOk` | Mode probe actif | Sonde PV | + +### 11.3 Step-up / Step-down + +- **Step-up** : Augmente le courant si PV suffisant ou batterie en charge +- **Step-down** : Diminue si batterie décharge trop ou dette nuageuse + +### 11.4 Cloud Debt (Dette Nuageuse) & Probe + +#### Problème +Quand les batteries sont pleines (SOC > 90%) et que la maison consomme peu (< 1200W), le MPPT de l'onduleur Victron se bride à la consommation maison uniquement. Le PV visible reste bas tant que l'EVCS ne démarre pas. + +#### Dette Nuageuse +- **Définition** : La batterie se décharge pour alimenter la maison + VE sans production PV suffisante +- **Seuil max** : 1.5 kWh +- **Durée max** : 30 min +- Cette dette doit être "remboursée" par du surplus PV ultérieur + +#### Mode Probe (Sonde) +- **Principe** : Lancer la borne à 10A pour "provoquer" une production PV qui va s'adapter en quelques secondes +- **Courant probe** : 10A (augmenté de 6A à 10A) +- **Durée probe** : 3 minutes +- **Retry** : 45 minutes si échec +- **Activation** : En dehors des fenêtres définies (`outside_window`) ou lors de passages nuageux + +#### Bypass outside_window +En mode `auto_solar_plus` ou `force_charge_now`, le profil `outside_window` ne bloque plus la charge solaire locale si : +- SOC batterie ≥ 90% +- Forecast solaire fort +- Maison consommation faible + +### 11.5 Logique Heure de départ (Night EVCS) + +#### Objectif +S'assurer que le véhicule est chargé avant l'heure de départ prévue. + +#### Comportement + +| Scénario | Action | +|---|---| +| Heure départ proche + batteries suffisantes | Charge solaire prioritaire | +| Heure départ proche + batteries insuffisantes | grid_forced (HC) si disponible | +| Heure départ proche + pas de HC | grid_forced (plein tarif) | + +#### Paramètres +- **batteryHardFloorPct** : Plancher dur batterie (ex: 22%) +- **batteryMorningTargetPct** : Objectif SOC matin selon forecast + - Forecast fort (> 15 kWh) : 40% + - Forecast moyen (8-15 kWh) : 50% + - Forecast faible (< 8 kWh) : 75% +- **gridTakeoverTriggerPct** : Seuil de basculement réseau +- **batteryRecoveryUrgent** : Si temps restant < temps de charge nécessaire + +--- + +## 12. Configuration opencode.json + +```json +{ + "provider": { + "openrama": { + "models": { + "minimax-m2.5": { "name": "minimax-m2.5" } + } + }, + "qwen-dgx-vl": { + "models": { + "qwen3-vl": { "attachment": true, "modalities": {"input": ["text","image"]} }, + "qwen3.6-35b": { "options": { "temperature": 0.15, "reasoningEffort": "none" } } + } + } + }, + "mcp": { + "n8n-mcp": { "type": "local", "command": ["npx", "-y", "n8n-mcp-server"] }, + "ha-get-state": { "type": "remote", "url": "https://n8n.airtria.pro/mcp/..." }, + "ha-set-helper": { "type": "remote", "url": "https://n8n.airtria.pro/mcp/..." }, + "grid-set-state": { "type": "remote", "url": "https://n8n.airtria.pro/mcp/grid-set-state/sse" }, + "victron-set-charge-limits": { "type": "remote", "url": "https://n8n.airtria.pro/mcp/..." }, + "pv-get-forecast": { "type": "remote", "url": "https://n8n.airtria.pro/mcp/..." } + }, + "permission": { + "bash": { "curl *": "deny", "wget *": "deny", "*": "ask" } + } +} +``` + +--- + +## 13. Méthode de travail + +### 13.1 Lecture d'un workflow n8n + +1. Utiliser `n8n-mcp_get_workflow` avec l'ID +2. Le fichier est écrit dans `~/.local/share/opencode/tool-output/tool_*` +3. **Attention** : Le fichier commence par "Retrieved workflow: " AVANT le JSON +4. Extraction par nœud : + ```bash + grep -n '"name": "NOM_DU_NOEUD"' + sed -n 'DEBUT,FINp' + ``` + +### 13.2 Modification + +1. **TOUJOURS** backup avant modification +2. Une seule modification à la fois +3. Vérifier avec dry-run +4. Valider en production + +### 13.3 Interdiction + +- **JAMAIS** de curl/wget direct vers HA/n8n/Victron +- **JAMAIS** d'IP/URL/token inventés +- Utiliser les MCP uniquement + +--- + +## 14. À compléter par l'utilisateur + +- [ ] Tableau détaillé des fonctionnalités (entrées/sorties/conditions) +- [ ] Documentation EDF Urgence (créé par FABLE) +- [ ] Liste des incidents récurrents +- [ ] Procédures de dépannage +- [ ] Glossaire des termes techniques + +--- + +*Document généré automatiquement le 17/07/2026* \ No newline at end of file diff --git a/docs/vision-notes.md b/docs/vision-notes.md new file mode 100644 index 0000000..5976bdd --- /dev/null +++ b/docs/vision-notes.md @@ -0,0 +1,172 @@ +# OCR brut + +[Image 1] +AIRTRIA / MR TALLAGRAND 3,1KW (2X5RECOM) LANNION +Dernière mise à jour: OK 20:14 +Temps réel +Temps: 24°C +Charges CA 3615 W +L1 3615 W 49.9 Hz +Charguer VE 1256 W +Statut charge +Véhicule: Guest EV +Temps de charge: 1h, 53m, 43s +Mode: Manual +Courant de charge: 6.0 A +Énergie chargée: 4 kWh +Énergie totale: 3266 kWh +Décharge en cours: 78.0% +Tension: 49.75 V +Courant: -19.9 A +Température: 25°C +Chargeur PV: 2421 W +AIRTRIA MPPT1 164 V 0.9 A 141 W +V1 57.77 V 3.7 A 215 W +V2 - - - +MPPT 450/200 HQ2449YR9PT-Solar 1 257 V 1.6 A 409 W +MPPT 450/200 HQ2449YR9PT-Solar 2 281 V 1.6 A 447 W +MPPT 450/200 HQ2449YR9PT-Solar 3 331 V 1.4 A 456 W +MPPT 450/200 HQ2449YR9PT-Solar 4 68.62 V 5.5 A 375 W +AIRTRIA MP2 78.0% 49.60 V -77.1 A -3605 W Discharging + +[Image 2] +EVCS Master +Vue borne / session / stratégie / énergie +Charge EVCS active +État borne +Statut global +EVCS: unavailable - Mode Manuell - 6.0 A +Statut FR: Indisponible +Mode FR: Manuell +Statut brut: 2 +Mode brut: 0 +EVCS détecté: Connecté +Branché +Durée charge: 1h 54m +Contrôleur surplus actif +Session +Courant / puissance / énergie +Courant EVCS: 6.0 A +Session en cours: 1234 W - 6.0 A - Consigne 6.0 A - 1h 54m +Puissance EVCS: 1234 W +Courant réel: 6.0 A +Consigne lue: 6 A +Durée charge: 1h 54m +Énergie session: Inconnu +Stratégie & décision +Mode utilisateur: auto_solar_plus - Profil: evening_high_soc - Décision: hold - Source: Solaire +Paramètres utilisateur +Véhicule cible: Jeep +Énergie demandée: 10.5 kWh +Priorité départ: On +Heure départ: 8:50 + +[Image 3] +EVCS Master +Énergie demandée: 10,5 kWh +Priorité départ: On +Heure départ: 8:50 +Stratégie EVCS: auto_solar_plus +Réseau HC nuit: On +Réseau HC midi: On +Contrôleur surplus actif: On +Décision contrôleur +Profil actif: evening_high_soc +État interne: hold_min_run +Décision logique: hold +Source autorisée: Solaire +Raison courte: Maintien jusqu'au temps mini ON | VehicleDemandFilter déliv +Dernier blocage: none +Blocqué jusqu'à: 17/07/2026 +Contexte énergie +Batterie / PV / réseau +Contexte instantané: SOC 78.0% - PV 2758 W - Maison 3645 W - Grid 0 W +SOC batterie: 78.0% +Courant batterie: -22.70 A +Puissance PV: 2758 W +Charges maison: 3645 W +Puissance réseau: 0 W +Réseau EDF: Off +Actions rapides +Contrôle direct EVCS +Charge: On +Contrôleur surplus: Activé + +[Image 4] +EVCS Master +ON +Activé +Véhicule: Branché +Courant demandé: 6 A +Commandes manuelles +Start / Stop charge: On +Courant demandé: 6 A +Permission charge: On +Latch contrôle: On +Auto Start borne (diagnostic): Off +BOOST EDF 28A +Retour normal +Plafonds courant EVCS +Plafond EDF ON tous modes: 28 A +Plafond modes auto: 28 A +Diagnostic +Identité / version / brut +Produit: EV Charging Station +Nom borne: EVCS-HQ229DNT7P +Numéro de série: HQ229DNT7P +Firmware: 13375 +Statut brut: 2 +Mode brut: 0 +Auto Start borne: Off +Dernier start: 17/07/2026 19:54 +Dernier stop: 17/07/2026 19:30 +Dernier changement courant: 17/07/2026 19:54 +Début probe: 31/03/2026 0:00 +Début cloud deb: 16/07/2026 19:41 +Cloud deb: 0.49 kWh +Signature: hold_min_runprofile=evening_high_socsource=solar_onlych + +# Éléments UI +- Charge EVCS active +- Mode: Manual (mais stratégie configurée: auto_solar_plus) +- Courant EVCS: 6.0 A +- SOC batterie: 78.0% +- Puissance PV: 2758 W +- Réseau EDF: Off (autoconsommation sans injection) +- Stratégie: auto_solar_plus +- Profil actif: evening_high_soc +- Contrôleur surplus: Activé + +# Erreurs visibles +- Mode Manual actif alors que stratégie auto_solar_plus est configurée +- Statut FR: Indisponible (mode français non disponible) +- EVCS: unavailable (même si charge active) +- Grid 0 W - pas d'injection réseau (configuration recherchée) +- Tension batterie 49.60V - proche de la tension de Floating + +# État actuel +- Session de charge en cours (1h 54m) +- Courant de charge: 6.0 A (mode manuel) +- SOC batterie: 78.0% (en décharge: -22.70A) +- Puissance PV: 2758 W +- Grid: 0 W (autoconsommation pure, pas d'injection) +- Maison: 3645 W de consommation +- Contrôleur surplus actif +- Décision: hold (maintien du courant minimum) +- Profil: evening_high_soc + +# Actions recommandées +- Vérifier si le passage en mode auto_solar_plus est souhaité (actuellement en Manual) +- Le système est en autoconsommation sans injection - comportement normal avec Grid 0W +- La batterie se décharge (-22.70A) pour alimenter la maison + VE +- PV 2758W couvre partiellement la consommation maison (3645W) + charge VE (1234W) +- Le courant de charge pourrait être augmenté si plus de PV disponible +- Surveiller le SOC pour ne pas descendre sous le seuil critique + +# Contexte HANDOFF.md +Suite à la session de débogage du 17/07/2026: +- 4 bugs critiques corrigés (typo DECISION_ENGINEV2, artefacts WINDOWS_SOURCEV2, session nuit stuck, EDF rebranché en journée) +- Configuration actuelle: soc_start_min=80%, night_target_soc=70%, battery_discharge_soft_a=0A +- Mode sonde activé (probe_enabled: ON) +- Système fonctionnel avec delivery 99.9% +- EDF OFF la journée, uniquement la nuit \ No newline at end of file