Some checks failed
Build & Deploy docs / build-deploy (push) Failing after 13m58s
6.9 KiB
6.9 KiB
Suivi des points à remonter à nymea (upstream)
Registre transverse des feature requests, bugs, clarifications et divergences identifiés vis-à-vis de nymea upstream (cœur, experience-plugin-energy, libnymea, protocole JSON-RPC). Source unique de vérité pour ce qui doit être communiqué à nymea, et pour nos contournements en attendant.
Repo d'accueil :
etm-powersync-docs(autorité transverse). Mise à jour : à chaque interaction upstream (issue ouverte, PR, réponse, contournement).
Légende
| Champ | Valeurs |
|---|---|
| Type | feature · bug · question · divergence/observation |
| Statut | à formuler · à investiguer · issue ouverte · PR soumise · accepté · refusé · contourné |
Entrées
1. [feature] Exposer selfConsumptionRate / autonomyRate sur PowerBalance
- Type : feature request
- Statut : à formuler
- Sujet : Exposer les deux taux canoniques d'un HEMS — autoconsommation et autonomie — directement sur la réponse
Energy.GetPowerBalance(+ notificationPowerBalanceChanged). - Pourquoi ça compte : Ce sont les KPI de base de tout système de gestion d'énergie domestique. Ils sont entièrement dérivables des cumuls déjà présents dans
PowerBalance(totalConsumption,totalProduction,totalAcquisition,totalReturn). Aujourd'hui chaque client (app) doit les recalculer côté UI — duplication et risque d'incohérence entre clients. - Formules (bilan pur, mesure) :
autonomie = (Δ totalConsumption − Δ totalAcquisition) / Δ totalConsumptionautoconsommation = (Δ totalProduction − Δ totalReturn) / Δ totalProduction- Unité : % dans [0, 100]. Fenêtre : depuis minuit local (baseline quotidienne). Reseed si compteur non-monotone (
Δ < 0: restart, re-add thing, rollover). Garde : dénominateur ≤ 0 → valeur non disponible (champ omis).
- Argument upstream : générique (pas un besoin ETM spécifique), pure mesure/bilan (pas d'optimisation), faible surface de patch (handler JSON-RPC uniquement, aucun changement d'ABI dans
libnymea-energy). - Notre contournement actuel : calculé dans notre experience-plugin (
powersync-energy-plugin-nymea) via une méthode RPCNymeaEnergy.GetEnergyRatios+ notificationNymeaEnergy.EnergyRatiosChanged, à partir des mêmes cumuls canoniques (energyManager()->totalX()). Si upstream expose ces champs surPowerBalance→ migration triviale côté app (lire 2 champs au lieu d'appeler notre RPC), et on peut retirer notre contournement. - Référence pour la PR : notre implémentation validée servira de référence (code + formules + alignement testé contre le calcul historique de l'app).
2. [bug?] Logging.GetLogEntries rejette sortOrder="Qt::AscendingOrder"
- Type : bug à confirmer (app vs API)
- Statut : à investiguer
- Sujet : Appel
Logging.GetLogEntriesrejeté :"Expected enum value for SortOrder but got Qt::AscendingOrder" in "Logging.GetLogEntries, param sortOrder." - Contexte : observé dans les logs de la box
hems(nymead 1.15.2). Le client envoie"Qt::AscendingOrder"comme valeur desortOrder, là où l'API attend une valeur d'enum nymea (ex."SortOrderAscending"ou équivalent). - À trancher : est-ce un bug côté client (mauvaise sérialisation de l'enum Qt au lieu de l'enum API), ou une incohérence/documentation manquante côté nymea sur les valeurs acceptées de
sortOrder? - Contournement actuel : N/A (n'a pas bloqué le travail en cours ; à corriger côté client si c'est bien une erreur de sérialisation).
3. [question] Hello obligatoire avant le premier appel sur une session WebSocket neuve
- Type : question / clarification
- Statut : à clarifier
- Sujet : Sur une session WebSocket fraîche, un appel direct (ex.
NymeaEnergy.SetLoadConfig) sansJSONRPC.Hellopréalable provoque :TransportRouter: Unsupported initial method from client ... "NymeaEnergy.SetLoadConfig"et fermeture de la connexion. - Contexte : rencontré en poussant
SetLoadConfigvia un client WS minimal surhems. Le même appel passe une foisJSONRPC.Helloenvoyé en premier (initialisation de session). Box ouverte (authenticationRequired: false), donc ce n'est pas une question d'auth. - À clarifier : est-ce un comportement attendu (le premier message d'une session DOIT être
Hello) ? Si oui, à documenter explicitement côté nymea (protocole JSON-RPC). Le message d'erreur"Unsupported initial method"gagnerait à être plus explicite (ex. « session must start with JSONRPC.Hello »). - Contournement actuel : toujours envoyer
JSONRPC.Helloen premier sur une nouvelle connexion WS. (Appliqué dans nos scripts/clients.)
4. [divergence/observation] Un integration-plugin ne peut pas commander les things d'un autre plugin
- Type : divergence / observation structurante (pas forcément un bug)
- Statut : observé, contournement en place
- Sujet : Un
IntegrationPluginn'a pas accès auThingManagerglobal pour exécuter une action sur un thing appartenant à un autre plugin.m_thingManagerest privé, sans accesseur ; le protected n'expose quemyThings(),hardwareManager(),pluginStorage(). Seuls les experience-plugins (ExperiencePlugin::thingManager()) et le cœur (rule engine, script engine) peuvent commander des things tiers viaThingManager::executeAction. - Contexte : a conditionné toute notre architecture ECS (charge pilotée multipalier). Comme l'orchestration de relais
powerappartenant au plugin GPIO/Modbus/MQTT nécessite de commander des things tiers, elle ne peut vivre que côté experience-plugin (là où leThingManagerest accessible). D'où notreRelayRouterimplémenté dans l'experience-plugin energy, et non comme integration-plugin séparé. - À remonter (optionnel) : ce n'est pas nécessairement un défaut — c'est une frontière de conception nymea (isolation des integration-plugins). Mais elle mérite d'être documentée clairement pour les développeurs de plugins, car elle détermine où peut vivre toute logique d'orchestration cross-thing. Une discussion upstream pourrait clarifier le pattern recommandé pour l'orchestration cross-plugin (experience-plugin ? autre mécanisme ?).
- Contournement actuel : orchestration (RelayRouter, watts→relais) implémentée dans l'experience-plugin energy, qui détient le
ThingManageret peut commander les thingspowerde n'importe quel transport.