docs: retrait du nom « optimiseur ETM » des fichiers publiés (brief 4 T0.5)
Ce dépôt est GPL et public : le nom commercial de l'optimiseur propriétaire n'y figure plus. Remplacé par « l'optimiseur ETM » dans la prose et « etm-optimizer » là où l'on désigne le composant (feuille de route, schéma). Sens inchangé. Aucun code touché. `git grep -nIi 'h[ée]os'` : vide. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
e5c649e69a
commit
e0b83f55a7
10
README.md
10
README.md
@ -26,9 +26,9 @@ Chaque bloc affiche son état réel. On ne documente pas une promesse.
|
||||
Deux couches, frontière nette. Le plugin de ce repo est **entièrement GPL-3.0**.
|
||||
|
||||
- **Couche A — ce repo (GPL-3.0).** Toute la mécanique HEMS : ingestion d'état, sécurité, arbitrage, stratégie par défaut basée sur règles, adaptateurs de charge. Tourne seul, sans aucun composant externe. C'est aussi le candidat à une contribution amont chez nymea.
|
||||
- **Couche B — optimiseur externe (hors de ce repo).** Un processus séparé (propriétaire **optimiseur ETM**, ou tiers communautaire) qui se branche par un socket local documenté. Il *propose* des décisions ; il ne peut jamais contourner la sécurité.
|
||||
- **Couche B — optimiseur externe (hors de ce repo).** Un processus séparé (l'optimiseur ETM, propriétaire, ou un optimiseur tiers communautaire) qui se branche par un socket local documenté. Il *propose* des décisions ; il ne peut jamais contourner la sécurité.
|
||||
|
||||
Principe directeur : **le plugin est agnostique à l'optimiseur.** optimiseur ETM et un optimiseur tiers sont des backends interchangeables derrière le même contrat. Aucun code propriétaire ne vit dans ce repo — la séparation se fait par processus + protocole publié, pas par linkage.
|
||||
Principe directeur : **le plugin est agnostique à l'optimiseur.** L'optimiseur ETM et un optimiseur tiers sont des backends interchangeables derrière le même contrat. Aucun code propriétaire ne vit dans ce repo — la séparation se fait par processus + protocole publié, pas par linkage.
|
||||
|
||||
Conséquence pratique, et invariant testé : **socket absent ou muet → repli automatique sur la stratégie de règles intégrée.** En mode Community, le plugin fonctionne intégralement sans optimiseur.
|
||||
|
||||
@ -151,7 +151,7 @@ Cycle de vie d'un backend (optimiseur ETM ou tiers) :
|
||||
2. **Boucle** — à chaque cycle le plugin pousse un `SurplusContext` (surplus disponible, charges avec type/puissance/min-max/priorité/état, batterie SoC, tarif, contrainte réseau) ; le backend renvoie un `LoadAction[]` (`{ loadId, action, targetPowerW, reason }`) ou `abstain`.
|
||||
3. **Heartbeat** — la cadence des requêtes *est* le heartbeat. Pas de réponse dans le délai → `optimizerAlive=false` → repli règles, sans interruption du pilotage.
|
||||
|
||||
Le contrat est **générique-domaine**, pas spécifique à optimiseur ETM : n'importe qui peut écrire un serveur (Python+ML, Rust, etc.) qui répond au même protocole. La spécification est publiée sous licence libre — voir `docs/OPTIMIZER_PROTOCOL.md` (ROADMAP).
|
||||
Le contrat est **générique-domaine**, pas spécifique à l'optimiseur ETM : n'importe qui peut écrire un serveur (Python+ML, Rust, etc.) qui répond au même protocole. La spécification est publiée sous licence libre — voir `docs/OPTIMIZER_PROTOCOL.md` (ROADMAP).
|
||||
|
||||
> Sécurité : quelle que soit la sortie du backend, la boucle de sécurité et les bornes min/max par charge **plafonnent** l'allocation. Un optimiseur défaillant ne peut, au pire, que proposer une mauvaise répartition — bornée et clampée.
|
||||
|
||||
@ -229,13 +229,13 @@ Simulations (plots de vérification de la logique métier dans `results/`) :
|
||||
## Roadmap
|
||||
|
||||
- **Beta** : arbitrage central généralisé, adaptateur ECS/relais, frontière `requestOptimization` posée, stratégie règles par défaut. Mode `community` : tout fonctionne sans optimiseur.
|
||||
- **Post-beta** : adaptateurs PAC/HVAC et batterie ; socket + protocole optimiseur documenté (GPL) ; backend propriétaire optimiseur ETM ; contrainte réseau §14a EnWG comme source de plafond ; tarification FR (Linky TIC, Tempo) ; namespace EMS générique.
|
||||
- **Post-beta** : adaptateurs PAC/HVAC et batterie ; socket + protocole optimiseur documenté (GPL) ; backend propriétaire `etm-optimizer` ; contrainte réseau §14a EnWG comme source de plafond ; tarification FR (Linky TIC, Tempo) ; namespace EMS générique.
|
||||
- **Amont** : une fois la beta opérationnelle, discussion avec l'équipe nymea sur une intégration possible dans l'arbre upstream.
|
||||
|
||||
---
|
||||
|
||||
## Licence
|
||||
|
||||
`etm-powersync-energy-etm` est sous **GNU General Public License v3.0 ou ultérieure**, comme l'amont dont il dérive. Tout le code de ce repo est GPL — il n'y a, et il n'y aura, aucun composant propriétaire ici. La valeur propriétaire (l'optimiseur **optimiseur ETM**) vit dans un processus séparé, derrière le socket documenté, et n'est pas distribuée dans ce dépôt.
|
||||
`etm-powersync-energy-etm` est sous **GNU General Public License v3.0 ou ultérieure**, comme l'amont dont il dérive. Tout le code de ce repo est GPL — il n'y a, et il n'y aura, aucun composant propriétaire ici. La valeur propriétaire (l'optimiseur ETM, `etm-optimizer`) vit dans un processus séparé, derrière le socket documenté, et n'est pas distribuée dans ce dépôt.
|
||||
|
||||
Une copie de la licence est incluse dans ce repo ; si elle manque : <https://www.gnu.org/licenses/gpl-3.0.html>.
|
||||
|
||||
@ -79,7 +79,7 @@ CREATE TABLE forecastPv (
|
||||
|
||||
**La clé est la paire, et c'est tout le lot.** Avec `targetAt` seul, chaque rafraîchissement
|
||||
écrase le précédent : on perd les révisions, donc la comparaison prévu/réalisé — c'est-à-dire
|
||||
exactement ce qu'on veut montrer, et ce dont optimiseur ETM aura besoin.
|
||||
exactement ce qu'on veut montrer, et ce dont l'optimiseur ETM aura besoin.
|
||||
|
||||
> C'est la même distinction que `measuredSince` : **quand on a mesuré**, et **ce qu'on a mesuré**.
|
||||
> Deux dates, deux questions, et les confondre en perd une.
|
||||
@ -130,7 +130,7 @@ conversion est la plus grande.
|
||||
> plus rassurant exactement quand il se trompe le plus. Il ne s'agit pas d'un indicateur
|
||||
> imparfait qu'on affinerait : il pointe dans la mauvaise direction, et l'affiner l'empire.
|
||||
|
||||
Elle peut être **stockée** (elle décrit le ciel, et optimiseur ETM en fera peut-être quelque chose). Elle
|
||||
Elle peut être **stockée** (elle décrit le ciel, et l'optimiseur ETM en fera peut-être quelque chose). Elle
|
||||
ne doit **jamais être publiée comme une qualité de la prévision de production**.
|
||||
|
||||
*(Famille des modes d'érosion d'`AGENTS.md` : l'instrument dont le silence ressemble à un
|
||||
@ -159,7 +159,7 @@ résultat. Ici, c'est l'instrument dont la confiance ressemble à une garantie.)
|
||||
Mais la conséquence est constructive, et c'est elle qui justifie la table bitemporelle :
|
||||
|
||||
> **Le GPL n'apprend pas ; il rend l'apprentissage POSSIBLE.** La table `(targetAt, issuedAt)`
|
||||
> est l'interface entre les deux. Sans elle, optimiseur ETM n'aurait pas la matière — et l'écraser à chaque
|
||||
> est l'interface entre les deux. Sans elle, l'optimiseur ETM n'aurait pas la matière — et l'écraser à chaque
|
||||
> révision détruirait cette matière pour toujours, sans que rien ne le signale.
|
||||
|
||||
Le GPL publie donc la série et le réalisé côte à côte, **sans les rapprocher**. Le rapprochement
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<svg width="100%" viewBox="0 0 680 486" role="img" style="" xmlns="http://www.w3.org/2000/svg">
|
||||
<title style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">Structogramme du fork etm-powersync-energy-etm : couche A GPL et couche B optimiseur externe</title>
|
||||
<desc style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">Couche A, fork GPL, contient ingestion d'état, boucle de sécurité, arbitrage central, stratégie rule-based par défaut, frontière interface optimiseur et adaptateurs de charge. Couche B, process séparé post-beta, contient optimiseur ETM propriétaire, socket GPL avec heartbeat, et optimiseur communautaire.</desc>
|
||||
<desc style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">Couche A, fork GPL, contient ingestion d'état, boucle de sécurité, arbitrage central, stratégie rule-based par défaut, frontière interface optimiseur et adaptateurs de charge. Couche B, process séparé post-beta, contient l'optimiseur ETM propriétaire, socket GPL avec heartbeat, et optimiseur communautaire.</desc>
|
||||
<defs>
|
||||
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse"><path d="M2 1L8 5L2 9" fill="none" stroke="context-stroke" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></marker>
|
||||
</defs>
|
||||
@ -45,10 +45,10 @@
|
||||
<text x="58" y="324" style="fill:rgb(211, 209, 199);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:start;dominant-baseline:auto">Couche B — optimiseur externe</text>
|
||||
<text x="58" y="342" style="fill:rgb(180, 178, 169);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:start;dominant-baseline:auto">process séparé · post-beta</text></g>
|
||||
|
||||
<g onclick="sendPrompt('Quel est le rôle de optimiseur ETM / Predict AI derrière le socket, et pourquoi propriétaire ?')" style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">
|
||||
<g onclick="sendPrompt('Quel est le rôle de l’optimiseur ETM / Predict AI derrière le socket, et pourquoi propriétaire ?')" style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">
|
||||
<rect x="60" y="352" width="180" height="56" rx="8" stroke-width="0.5" style="fill:rgb(60, 52, 137);stroke:rgb(175, 169, 236);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
|
||||
<text x="150" y="374" text-anchor="middle" dominant-baseline="central" style="fill:rgb(206, 203, 246);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">optimiseur ETM — Predict AI</text>
|
||||
<text x="150" y="392" text-anchor="middle" dominant-baseline="central" style="fill:rgb(175, 169, 236);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">propriétaire · IA</text></g>
|
||||
<text x="150" y="374" text-anchor="middle" dominant-baseline="central" style="fill:rgb(206, 203, 246);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:14px;font-weight:500;text-anchor:middle;dominant-baseline:central">etm-optimizer</text>
|
||||
<text x="150" y="392" text-anchor="middle" dominant-baseline="central" style="fill:rgb(175, 169, 236);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:12px;font-weight:400;text-anchor:middle;dominant-baseline:central">Predict AI · propriétaire</text></g>
|
||||
|
||||
<g onclick="sendPrompt('Spécifie le protocole socket GPL et le heartbeat (pas de heartbeat = pas d optimiseur)')" style="fill:rgb(0, 0, 0);stroke:none;color:rgb(251, 251, 254);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto">
|
||||
<rect x="260" y="352" width="160" height="56" rx="8" stroke-width="0.5" style="fill:rgb(8, 80, 65);stroke:rgb(93, 202, 165);color:rgb(251, 251, 254);stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;opacity:1;font-family:"Anthropic Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-size:16px;font-weight:400;text-anchor:start;dominant-baseline:auto"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
@ -108,8 +108,8 @@ propriété est **acquise et non négociable** ; toute évolution la préserve.
|
||||
**ECS-007** — Aucune couche ECS NE DOIT décider quelle part du surplus lui
|
||||
revient. Acquis (`rulebasedscheduler.cpp:97-121`).
|
||||
|
||||
**ECS-008** — L'ECS publie `available` et `energyRemaining` ; optimiseur ETM les consomme.
|
||||
L'ems exécute, optimiseur ETM optimise.
|
||||
**ECS-008** — L'ECS publie `available` et `energyRemaining` ; l'optimiseur ETM les consomme.
|
||||
L'ems exécute, l'optimiseur ETM optimise.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -34,7 +34,7 @@ ECS-001 constat résolu, négatif — reconfirmé contre le libnymea du build
|
||||
ECS-002 négatif : ni integration-plugin, ni dépôt, ni ThingClass
|
||||
ECS-003 découpage documentaire, pas une exigence de comportement
|
||||
ECS-007 interdiction — aucune couche ECS ne décide de sa part du surplus
|
||||
ECS-008 contrat d'un AUTRE produit (optimiseur ETM consomme, l'ECS publie)
|
||||
ECS-008 contrat d'un AUTRE produit (l'optimiseur ETM consomme, l'ECS publie)
|
||||
ECS-203 CLOS : aucune ThingClass exposée, donc aucune interface à implémenter
|
||||
|
||||
# — §1 : ce que le modèle EST, avant tout mécanisme
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user