Le lot plugin B-bis (1.15.2+etm15) est sur .75 et GetLoadConfig/GetLoadTelemetry concordent : les critères 4 à 8 du brief deviennent atteignables. - models/load_telemetry.dart : vue en lecture. timestamp/budget/mechanism/lock/ faultCode nullables — omis porte un sens que zéro ne porterait pas. - services/telemetry_text.dart : rendu français des CODES (19 motifs, 3 défauts, 3 verrous, 4 mécanismes). Repli lisible sur un code inconnu ET sur un code connu privé d'un paramètre : une phrase trouée a l'air d'une donnée, le code brut a l'air de ce qu'il est. - providers/load_telemetry_provider.dart : instantané + LoadTelemetryChanged, fraîcheur à trois signaux (âge du timestamp, silence des trames, timestamp qui cesse d'avancer), machine à états de ClearLoadFault qui ne conclut JAMAIS sur l'acquittement du RPC. - load_config_provider : assignDomain() en brouillon, énumération fermée. - load_order_screen : budget, fraîcheur, mode dégradé, bloc par charge, encart défaut, menu de domaine. - nymea_service : getLoadTelemetry(), clearLoadFault(), aiguillage de la notification. Une box sans la méthode s'annonce comme telle, pas comme en panne. Seuil de fraîcheur à 180 s : le battement de cœur du plugin est de 60 s et le timestamp avance d'un cycle par minute. Un seuil plus court crierait « données anciennes » sur une installation vivante. Fixtures v3 prises sur .75 après déploiement, dont un cycle porteur d'un verrou — « lock » étant optionnel, un dump pris au mauvais moment ne l'éprouverait pas. 57 tests (30 avant), flutter analyze inchangé à 25 issues. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XPUo3RMr8SzK6qbFtfBm8H
88 lines
2.4 KiB
JSON
88 lines
2.4 KiB
JSON
{
|
|
"_source": "dump réel HEMS 192.168.1.75, NymeaEnergy.GetLoadConfig, 2026-08-25 — plugin 1.15.2+etm15 (lot B-bis : la PAC entre en configuration).",
|
|
"_note": "Deux charges : 'chauffe-eau' (relay-router) et 'pac-terrain' (sg-ready), cette dernière n'était PAS configurable avant etm15. Les deux ont domain:'' = non classé. Conserve les charges utiles VIDES des mécanismes inutilisés (sgReady:{}, powerLevels:[], relays:[]) — sérialisation par méta-objet. Ne PAS nettoyer : c'est ce qui rend l'aller-retour Get→Set neutre.",
|
|
"loadConfigs": [
|
|
{
|
|
"adapter": "relay-router",
|
|
"domain": "",
|
|
"enabled": true,
|
|
"id": "chauffe-eau",
|
|
"label": "chauffe-eau",
|
|
"maxPowerW": 0,
|
|
"minOffS": 60,
|
|
"minOnS": 60,
|
|
"mode": "fixed",
|
|
"needs": {
|
|
"dailyDeadline": "",
|
|
"minEnergyWhPerDay": 0
|
|
},
|
|
"powerLevels": [],
|
|
"priority": 1,
|
|
"relays": [
|
|
{
|
|
"powerW": 500,
|
|
"thingId": "{8538782f-2c8c-4a30-bfce-c8140f791c9b}"
|
|
},
|
|
{
|
|
"powerW": 1000,
|
|
"thingId": "{2ebe6bef-829b-4695-9d11-ddb4c16c5448}"
|
|
},
|
|
{
|
|
"powerW": 2000,
|
|
"thingId": "{b033b212-1adb-4df0-ba2b-8fa477de52a2}"
|
|
}
|
|
],
|
|
"sgReady": {}
|
|
},
|
|
{
|
|
"adapter": "sg-ready",
|
|
"domain": "",
|
|
"enabled": true,
|
|
"id": "pac-terrain",
|
|
"label": "PAC banc",
|
|
"maxPowerW": 0,
|
|
"minOffS": 0,
|
|
"minOnS": 0,
|
|
"mode": "fixed",
|
|
"needs": {
|
|
"dailyDeadline": "",
|
|
"minEnergyWhPerDay": 0
|
|
},
|
|
"powerLevels": [],
|
|
"priority": 2,
|
|
"relays": [],
|
|
"sgReady": {
|
|
"minStateHoldS": 300,
|
|
"states": [
|
|
{
|
|
"estimatedPowerW": 0,
|
|
"relays": [
|
|
"{beaf92e1-aedc-4b84-9ce4-e423648638cc}"
|
|
],
|
|
"state": 1
|
|
},
|
|
{
|
|
"estimatedPowerW": 0,
|
|
"relays": [],
|
|
"state": 2
|
|
},
|
|
{
|
|
"estimatedPowerW": 1500,
|
|
"relays": [
|
|
"{bf236e64-5ae7-4bf1-82a6-4ede03de75a6}"
|
|
],
|
|
"state": 3
|
|
},
|
|
{
|
|
"estimatedPowerW": 3000,
|
|
"relays": [
|
|
"{beaf92e1-aedc-4b84-9ce4-e423648638cc}",
|
|
"{bf236e64-5ae7-4bf1-82a6-4ede03de75a6}"
|
|
],
|
|
"state": 4
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
} |