23 Commits

Author SHA1 Message Date
Patrick Schurig
06b75b1b06 feat(v2c): add Modbus transport abstraction + TCP implementation
Architecture choice: separate the register map / business logic from the
physical transport.  TrydanModbusMaster (abstract QObject) holds:
  - the complete ReadRegister / WriteRegister enums with addresses
  - float32 Big/Big decode helpers (memcpy pattern, matches pymodbus
    BinaryPayloadDecoder byteorder=Endian.Big wordorder=Endian.Big)
  - all last-polled cached values accessible via simple getters

TrydanModbusTcpMaster (concrete, Étape 1) wraps libnymea-modbus
ModbusTcpMaster.  Each register read is a distinct FC3(addr, 2)
transaction via a recursive runReadSequence/doNextRead pattern —
never a block read, because the V2C firmware's register windows
overlap (0x0BC2 and 0x0BC3 each span 2 registers, so a range read
starting at 0x0BC2 for ≥3 registers returns garbage for the second
value).  Writes use FC6 (single uint16, not float).

writeCompleted(quint16 address, bool success) carries the originating
register address so that concurrent background writes (e.g. PauseDynamic
from the conflict manager firing during an action) do not interfere with
action handlers waiting on a specific register's acknowledgement.

0x177E (Dynamic) is intentionally absent from WriteRegister: writing it
to 0 silences ChargePower telemetry even though the charger keeps running.
cf. evcc charger/trydan.go and github.com/evcc-io/evcc/issues/28047.

Étape 2 (RTU) will add TrydanModbusRtuMaster on the same interface;
no changes to plugin or register logic will be required.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 13:49:11 +02:00
669f2fc73a Revert "Reapply "remove empty placeholder json (plugin en cours)""
This reverts commit 5fe2bf347f7f26458b1a00c6086c0ba8ea792764.
2026-06-02 15:22:42 +02:00
5fe2bf347f Reapply "remove empty placeholder json (plugin en cours)"
This reverts commit 2368bd96717d401711c2cc50866b5c560e963f38.
2026-06-02 15:17:48 +02:00
2368bd9671 Revert "remove empty placeholder json (plugin en cours)"
This reverts commit abdda8a246e7049b503569290410eaa6a33501d7.
2026-06-02 15:16:49 +02:00
abdda8a246 remove empty placeholder json (plugin en cours) 2026-06-02 15:05:40 +02:00
Patrick Schurig
6d4bb92798 abbterra: communicationTimeoutReadback en 1er niveau (update) pour generer la methode reclamee par applyTimeoutSetting 2026-06-01 09:58:37 +02:00
Patrick Schurig
2ce68acb2c abbterra: restaure le .h original (declaration applyTimeoutSetting manquait, .cpp et .h desynchronises) 2026-06-01 09:45:31 +02:00
Patrick Schurig
881ad458a8 abbterra: WO -> RW sur les 4 registres de commande (generateur 1.15 ne gere pas WO pur en 1er niveau) 2026-06-01 09:42:29 +02:00
Patrick Schurig
6d72d2176e abbterra: abbterra-registers.json) 2026-06-01 09:39:24 +02:00
Patrick Schurig
9a0d755731 abbterra: readSchedule:write sur les WO (cle presente, valeur neutre -> ni KeyError ni updateXxxCommand) 2026-06-01 09:16:06 +02:00
Patrick Schurig
d02b3ae779 abbterra: restaure pilotage (cpp+json upstream) + registers.json sans readSchedule vide (compat generateur 1.15) 2026-06-01 09:09:22 +02:00
Patrick Schurig
83113a1fdb abbb2x: registers.json avec cle registers au 1er niveau (vrai contenu, 11 registres) 2026-06-01 08:52:12 +02:00
Patrick Schurig
88f9dd2096 abbb2x: registers.json - cle 'registers' au 1er niveau (fix KeyError generateur) 2026-06-01 08:48:50 +02:00
Patrick Schurig
e3d5b39d2a abbterra: retire les registres WO pour build sur generateur 1.15 (lecture seule)
- abbterra-registers.json : suppression des 4 registres WO
  (chargingCurrentLimitCommand, socketLockCommand, startStopChargingSession,
  communicationTimeoutCommand) incompatibles avec le generateur libnymea-modbus 1.15
- integrationpluginabbterra.cpp/.h : suppression de executeAction + applyTimeoutSetting
- integrationpluginabbterra.json : power + maxChargingCurrent passes en lecture seule
  (writable/displayNameAction retires)
La borne sera reconnue et lira les mesures ; le pilotage sera rebranche
quand le generateur 1.16 sera disponible.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-01 08:29:36 +02:00
Patrick Schurig
d9cae4690c Ajout plugin ABB Terra AC (vendoring upstream experimental-silo)
- 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
2026-06-01 07:38:51 +02:00
0cbbf8ae9b Initial commit ABB meter B21/B23/B24 2026-06-01 07:05:07 +02:00
Patrick Schurig
79d11acbea debian: retire le .install (qmake6 installe deja la .so, cas paquet unique comme openmeteo) 2026-05-31 18:09:34 +02:00
Patrick Schurig
52008bf8a0 debian: packaging powersync-plugin-eastron (fix nom .install, format changelog/rules) 2026-05-31 18:07:28 +02:00
Patrick Schurig
1b1c47c231 modbus: retire les .depends vers les sous-projets libnymea-modbus/sunspec (lib systeme) 2026-05-31 17:49:31 +02:00
Patrick Schurig
19d982c2e7 modbus: retire le SUBDIRS local (dossiers elagues), gitignore artefacts 2026-05-31 17:47:26 +02:00
Patrick Schurig
228a30e585 modbus: build eastron via paquets systeme (pkgconfig nymea-modbus + modbus-tool.pri), nettoyage .pro 2026-05-31 17:43:28 +02:00
Patrick Schurig
b1da668036 Initial init etm-powersync 2026-05-31 11:50:55 +02:00
0e440ca25b Initial commit 2026-05-31 11:30:06 +02:00