- abbterra/ copié depuis nymea-plugins-modbus experimental-silo (a652793) - paquet nymea-plugin-abbterra (nom upstream, vendoring tracé dans VENDORED.md) - 3 paquets binaires => .install par paquet - abbterra ajouté à FORKED_PLUGINS du mirror (exclusion upstream) - changelog 1.15.0+etm3
6.3 KiB
REPRISE — Test atelier : borne ABB Terra AC + compteur ABB B2x (B21/B23/B24)
Contexte
Je teste EN ATELIER une borne ABB Terra AC + un compteur ABB B2x (en stock) avant une visite client. Objectif : faire reconnaître les deux par nymea, depuis MES propres paquets Debian, et valider les mesures (surtout le scaling du compteur).
On a rôdé tout le pipeline modbus aujourd'hui (plugin Eastron SDM construit et fonctionnel). Les deux plugins ABB suivent EXACTEMENT le même chemin.
Infrastructure (rappel)
- VM build : etm-powersync-dev, conteneur LXC
build-1-15(libnymea-dev 1.15.0)- déjà installés dans le conteneur : libnymea-modbus-dev, qt6-serialport-dev, qt6-serialbus-dev, nymea-dev-tools, qt6-base-dev(-tools)
- Edge de test : ssh etm@192.168.1.120 (etm-nymea-dev), nymead actif
- Dépôt APT : reprepro sur /mnt/builddisk/apt-repo ; publish-to-repo.sh ; clé GPG ETM
- canal de travail : powersync-testing ; edge branché dessus
- Repo modbus : git.etm-powersync.fr/ETM-Schurig/etm-powersync-plugins-modbus
- chemin local VM : ~/projects/etm-powersync/etm/etm-powersync-plugins-modbus
- contient déjà : eastron/ (fonctionne), modbus.pri recâblé sur paquets système (PKGCONFIG += nymea-modbus + include(/usr/include/nymea-modbus/modbus-tool.pri))
Règles de packaging (acquises aujourd'hui, à respecter)
- 1 seul paquet binaire par repo modbus actuel → PAS de fichier debian/*.install (qmake6 installe la .so, debhelper la ramasse). Le .install ne sert qu'en multi-binaire.
- debian/control Build-Depends modbus : debhelper, pkg-config, libnymea-dev, nymea-dev-tools:native, libnymea-modbus-dev, qt6-base-dev, qt6-base-dev-tools, qt6-serialport-dev, qt6-serialbus-dev
- debian/rules : nettoyer autogenerated/ + moc_* + *plugininfo.h au clean
- changelog : format strict (ligne vide avant le " --"), version +etm1 (plugins maison)
- .pro racine : PLUGIN_DIRS sans backslash après la dernière entrée
- nom paquet plugin maison = powersync-plugin-XXX (pas de Provides/Replaces si code original)
- Le conteneur CLONE depuis Gitea → toujours git push AVANT de builder dans le conteneur
Le pipeline qui marche (référence eastron)
git push, puis dans le conteneur : cd /root && rm -rf && git clone && cd qmake6 && make -j$(nproc) # valider compil + génération modbus AVANT debian/ dpkg-buildpackage -b -us -uc Puis vérif (dpkg-deb -c → la .so présente), lxc file pull, reprepro includedeb powersync-testing, publish-to-repo.sh, install sur .120, restart nymead.
TÂCHE 1 — Borne ABB Terra AC (code upstream, faible risque)
Le plugin existe DÉJÀ : nymea-plugins-modbus, branche experimental-silo, dossier abbterra/ (deux ThingClass : terraAcTcp {address, port=502, slaveId=1} et terraAcRtu {rtuMaster, slaveId=1}). À faire :
- Copier abbterra/ depuis l'upstream experimental-silo dans MON repo modbus.
- Ajouter "abbterra" à PLUGIN_DIRS (sans casser le backslash).
- Builder via le pipeline ci-dessus → powersync-plugin-abbterra_1.15.0+etm1.
- Import testing + install .120. À CONFIRMER en atelier : la borne en stock est-elle en Modbus TCP ou RTU ? (détermine quelle ThingClass utiliser à la config nymea:app)
TÂCHE 2 — Compteur ABB B2x (plugin NEUF, à valider sur matériel)
J'ai déjà un abbb2x-registers.json prêt (registres extraits/vérifiés des manuels B21 + B23/B24 — même mapping pour les 3 modèles ; puissances en int32 SIGNÉ pour gérer l'injection PV ; énergie import/export en uint64 size 4 ; scaling via "unit"). Reste à créer le plugin autour :
- Créer le dossier b2x/ (ou abbb2x/) dans MON repo modbus avec :
- abbb2x-registers.json (je l'ai)
- eastron.pro → adapter en abbb2x.pro (MODBUS_CONNECTIONS += abbb2x-registers.json ; include(../modbus.pri))
- integrationpluginabbb2x.cpp/.h/.json → ADAPTER depuis integrationplugineastron.* (même type d'appareil = compteur ; mapper les registres générés vers l'interface nymea smartmeter : currentPower, voltage/current/power par phase, énergie conso/prod). Vendor = "ABB". Nouveau pluginId/thingClassId/vendorId (générer des UUID, NE PAS réutiliser ceux d'eastron).
- Ajouter "abbb2x" à PLUGIN_DIRS.
- Builder → powersync-plugin-abbb2x_1.15.0+etm1, import, install .120.
POINTS À VALIDER FACE AU COMPTEUR (typiques d'un plugin neuf) :
- SCALING PUISSANCE : manuel dit "Signed, 0.01 W". Si la puissance lue est ×100 trop grande, le scaling réel est 1W → corriger le "unit" dans le registers.json.
- Comment le pipeline applique le "unit" (générateur vs code .cpp) : vérifier dans integrationpluginabbterra.cpp comment ABB applique le scaling (grep unit/toDouble/setVoltage).
- checkReachableRegister = voltagePhaseA : confirmer qu'il répond à l'init.
- Sur un compteur monophasé (B21), L2/L3 doivent rester à 0/invalide — normal.
Config Modbus RTU (si transport série)
- Vérifier l'adaptateur série sur .120 : ls -l /dev/ttyUSB* ; dmesg | grep -iE "ttyUSB|ftdi|ch341|cp210"
- nymead doit avoir accès au port : user nymea dans le groupe dialout (sudo usermod -aG dialout nymea + restart)
- Paramètres ligne ABB B2x par défaut : à confirmer sur l'écran du compteur (souvent 9600 8N1)
- Adresses esclaves : si borne RTU + compteur RTU sur le MÊME bus → slaveId DISTINCTS
- Dans nymea:app : si RTU, créer d'abord le "Modbus RTU master" (l'adaptateur), puis les things
À ne pas oublier (notes de fond, PAS pour aujourd'hui)
- Modélisation interfaces compteur : prévoir au ThingClass un param "role" (producteur/consommateur/raccordement) + un param "phase" (L1/L2/L3 pour mono) — donnée d'installation, inerte aujourd'hui, prérequis du DÉLESTAGE futur.
- Délestage : stratégie 2 niveaux (N1 = phases du compteur principal ; N2 = sous-compteurs par circuit). nymea-energy-plugin-nymea (chargebyte, GPL) contient déjà de la logique de délestage → l'INVESTIGUER avant de coder. Le délestage ira dans powersync-energy-plugin-etm (Community, rule-based, GPL) ; l'optimizer reste propriétaire (œuvre séparée via socket).
Mon environnement
Je travaille en français. Je préfère : affichage complet des fichiers (cat -n) plutôt que diffs, logs complets avant tout commit, pas de fallback silencieux. Va étape par étape, attends ma sortie de commande avant de passer à la suivante.