ETM PowerSync · maquette à valider · 8 septembre 2026

Écran Énergie — ce que la box permet, et ce qu'elle ne permet pas

Quatre demandes, quatre séries traçables, et deux qui n'ont aucune source. Tout ce qui suit est mesuré sur .75 ce matin — pas déduit d'un contrat.

01 — le relevéCe que la box publie, par consommateur

Energy.GetThingPowerLogs existe et répond. Sonde de 00:00 à 09:00, pas de 15 min, six Things demandés — cinq répondent.

Série demandéeSourceInterfaces du Thing Relevé ce matinVerdict
MaisonGrid + PV, dérivée smartmeter 284 → 3 095 Wtraçable
PACPAC-Meter smartmeterconsumer 0 W toute la journéetraçable
ECSECS-Meter smartmeterconsumer 0 W toute la journéetraçable
VE 2Simulated wallbox evcharger · smartmeterconsumer 0 W toute la journéetraçable
VE 1V2C Trydan evcharger · power — pas smartmeter absente de la réponsepas d'historique
Batterie (charge / décharge, SOC)— aucun Thing battery · energystorage · batterymonitor —aucune source
Prévision météo— aucun Thing météo sur la box —hors nymea
La V2C n'a pas d'historique de puissance, et ce n'est pas un oubli. Sa classe trydan ne déclare pas l'interface smartmeter, donc elle n'entre pas dans GetThingPowerLogs — la borne simulée, elle, la déclare et répond. On peut afficher sa puissance instantanée (currentPower, et measurement dans la télémétrie), mais pas sa courbe. Deux bornes côte à côte dont une seule a un passé : l'écran doit le dire, pas tracer une ligne à zéro.
Il n'y a pas de batterie sur cette installation. Aucun Thing ne porte les interfaces que l'app cherche. Donc ni SOC, ni charge, ni décharge — et le Batterie 0 % affiché aujourd'hui sur le tableau de bord est un zéro forgé : EnergyData.batterySOC vaut 0 par défaut et personne ne l'écrase. À corriger dans le même lot.

02 — le premier grapheTrois courbes invisibles, trois causes différentes

Aucune n'est un problème de dessin. Les trois sont dans les données ou dans leur lecture, et deux partagent la même racine.

Production — sous l'axe

La box publie production négatif : −103 W ce matin. Le transport garde les signes bruts (§7.1 du contrat, à raison), donc la courbe est tracée à −0,1 kW pendant que l'échelle monte à 3,1 — invisible, collée à l'axe.

Autoconsommation — clouée à zéro

selfConsumptionPower calcule production − export puis > 0 ? … : 0. Avec une production négative le résultat est toujours zéro. Même racine que la précédente.

SOC — rien à tracer

batterySOCSource cherche un Thing battery/energystorage/batterymonitor et n'en trouve aucun : il rend null, la courbe n'est pas construite. Comportement correct — ce qui manque, c'est de le dire.

Le signe se corrige au RENDU, jamais au transport. Le magnitude est juste : l'identité acquisition = consommation − |production| tient sur 97 échantillons sur 97. Mais poser un .abs() dans le transport effacerait la seule trace qu'on ait du défaut, et masquerait un vrai zéro le jour où la box changera de convention. La dérivation prend la magnitude ; le champ reste brut.

03 — la propositionL'écran

Trois blocs. Les cartes disent la journée, le premier graphe dit les flux, le second dit qui consomme. Chaque nombre porte de quoi il est la fraction.

1 — cartes journalières + flux
Énergie08 sept.
Aujourd'hui depuis 00:00
0,08 kWh
Production
79 Wh — journée couverte
6,47 kWh
Consommation
0,02 kWh
Vers réseau
6,42 kWh
Depuis réseau
70 %
Autoconsommation
sur 79 Wh produits
1 %
Autonomie
sur 6,47 kWh consommés
Flux de la journée kW
43 210 00h09h24h
Production Consommation Autoconsommation SOC batterie
SOC — non affichable
Aucune batterie déclarée sur cette installation. La courbe n'est pas masquée : elle n'existe pas.
2 — répartition par consommateur
Qui consomme kW empilés
43 210 00h09h24h PAC · ECS · VE 2 — 0 W mesuré
Maison PAC ECS VE 2 VE 1 · Batterie
VE 1 (V2C) — pas d'historique
La borne ne déclare pas d'interface de comptage : sa puissance instantanée est lisible, sa courbe n'existe pas. Une ligne à zéro dirait « elle n'a rien tiré », ce qui est une autre affirmation.
Batterie — aucune source
Ni charge ni décharge : rien à empiler.
Prévision solaire Open-Meteo
Hors nymea. Aucun Thing météo sur la box : la prévision viendrait d'un appel HTTP direct de l'app à Open-Meteo, avec les coordonnées de l'installation. C'est une source externe, donc une décision à part — et une fonctionnalité de palier Auto.

04 — à trancherCe que je ne décide pas seul

  1. Les couleurs des consommateurs n'existent pas dans le thème.

    app_theme.dart fixe les couleurs de flux (solaire, maison, réseau, batterie) mais rien pour PAC / ECS / VE. Je propose ambre pour la PAC, sarcelle pour l'ECS, indigo pour les bornes — trois teintes qui ne rentrent en collision avec aucune couleur de flux existante. À valider, elles deviendront des tokens.

  2. Une série sans passé : ligne absente ou ligne à zéro ?

    Je propose absente, et nommée sous le graphe. Une ligne plate à zéro affirme « cette charge n'a rien tiré », ce que personne n'a mesuré. C'est la règle déjà appliquée aux cartes de charge, portée au graphe.

  3. Le taux avec son dénominateur — partout, ou seulement quand il est petit ?

    Je propose partout. Un seuil demanderait une constante inventée, et celle que j'avais proposée samedi (0,05 kWh) aurait laissé passer les 79 Wh de ce matin. « 70 % sur 79 Wh produits » se lit juste toute l'année ; « 70 % » ne se lit juste que les bons jours.

  4. La météo, maintenant ou plus tard ?

    Elle sort du périmètre nymea : appel externe, coordonnées de l'installation à saisir, gestion du hors-ligne. C'est un lot en soi. Je propose de finir les deux graphes d'abord et de garder la place à l'écran.