Implement pymodbus register map for SigenStor (T05)

Complete T05: pymodbus_client.py — TCP Modbus client that reads battery/inverter/PV registers, returns structured dict. Needs connection handling, register definitions for SoC/power/status, error handling, and unit test stub with mocked responses.

Acceptance criteria:

  • src/pymodbus_client.py created with ModbusTcpClient class
  • Reads battery (SoC), inverter (power, status), PV production registers
  • Returns dict from each read cycle
  • Handles connection timeout and modbus exceptions
  • Unit test stub with mocked responses exists

Note (2026-06-29T18:55:19Z)

Picked up by ralph at 2026-06-30T04:35:00+10:00. Starting SigenStor T05 pymodbus implementation.

Note (2026-06-29T18:56:31Z)

Picked up by autopilot at 2026-06-29T22:30 UTC. Plan: create src/pymodbus_client.py with ModbusTcpClient class reading battery/inverter/PV registers from the existing register map in telemetry_poller/registers.py, add unit test stub with mocked responses, and handle connection errors + modbus exceptions.

Note (2026-06-29T19:37:59Z)

Ralph taking over at 2026-06-30T04:35:00+10:00. SigenStor T05: implement pymodbus_client.py with ModbusTcpClient reading battery/inverter/PV registers, returning structured dict with connection/exception handling + unit test stub.