Skip to main content

Unified Modbus TCP driver library for solar plant hardware used in Direktvermarktung

Project description

dv-interfaces

PyPI version Python versions CI License: MIT

Unified Modbus TCP driver library for solar plant hardware used in Direktvermarktung (direct energy marketing).

Each device — SolarLog, SMA, Meteocontrol, Smartdog — exposes a different Modbus register map. dv-interfaces abstracts all of it into one consistent Python API for reading production data and sending output curtailment commands.

Full documentation →


Context

Each device — SolarLog, SMA, Meteocontrol, SmartDog — exposes a different Modbus register map with different byte orders, slave IDs, and conventions. Without a shared layer, every integration has to rediscover and reimplement the same mapping work.

dv-interfaces removes that undifferentiated effort so you can build polling jobs, control paths, and validation tooling without touching raw register math.

The library covers Modbus TCP, the most common protocol for Fernsteuerbarkeit in Direktvermarktung. IEC 60870-5-104 is used in this space too but is not currently supported.


Installation

uv add dv-interfaces
# or
pip install dv-interfaces

Try it without installing

uvx --from dv-interfaces dv-detect 192.168.1.100
uvx --from dv-interfaces dv-read solarlog 192.168.1.100

dv-read output

Quick example

from dv_interfaces import get_interface

with get_interface('solarlog', '192.168.1.100') as iface:
    ds = iface.read_dataset()
    print(f'Production: {ds.production} W')
    print(f'Grid feed:  {ds.grid_feed:+d} W')

Supported devices

Driver Device Protocol Spec
solarlog SolarLog (Modbus TCP DPM licence required) Modbus TCP Datasheet
sma SMA cluster Modbus TCP TI Direktvermarktung
meteocontrol Meteocontrol blue'Log XC Modbus TCP Remote Power Control
smartdog ecodata PowerDog / SmartDog Modbus TCP Modbus Register List

Features

  • Unified read_dataset()DVDataset across all drivers
  • Write API: turn_on(), turn_off(), limit_plant(percent)
  • Typed Modbus configuration with driver default slave IDs
  • stream(iface) generator — yields readings continuously, errors yielded not raised
  • detect_interface(host) — identify an unknown device by probing Modbus registers
  • read_dataset_result().to_dict() — flat dict for direct DB insertion or task queue backends
  • Auto-reconnect on dropped TCP connections
  • PEP 561 typed

Issues and bugs

If you find a bug, a wrong register interpretation, or a device-specific edge case, please open an issue. Include the driver name, device model/firmware if known, the relevant Modbus register values, and the expected behaviour.


Development

uv sync
uv run pytest -m "not hardware"
uv run ruff check src/ tests/
uv run ty check
uv run mkdocs serve   # local docs preview

Hardware tests

Set one or more DV_TEST_<DRIVER>_HOST variables and run the hardware marker:

DV_TEST_SOLARLOG_HOST=192.168.1.100 uv run pytest -m hardware -v

Tests for drivers whose host variable is not set are automatically skipped. Multiple drivers can be tested at once:

DV_TEST_SOLARLOG_HOST=192.168.1.100 \
DV_TEST_SMA_HOST=192.168.1.101 \
uv run pytest -m hardware -v

See the hardware testing docs for the full variable reference.

Hardware tests

License

MIT, see LICENSE.


About

Built by Gregorio Rodrigo
Making energy market data easier to work with

grrodre@gmail.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dv_interfaces-2.0.1.tar.gz (286.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dv_interfaces-2.0.1-py3-none-any.whl (25.0 kB view details)

Uploaded Python 3

File details

Details for the file dv_interfaces-2.0.1.tar.gz.

File metadata

  • Download URL: dv_interfaces-2.0.1.tar.gz
  • Upload date:
  • Size: 286.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dv_interfaces-2.0.1.tar.gz
Algorithm Hash digest
SHA256 f52420a7faed67bb2add8cb0ad57f2ce547cf285bddb376bda534692b9a1d80d
MD5 aacb0117eca9818643cb9ef6d0f3f61a
BLAKE2b-256 89c6335227547f144851c8cec07b49ed5246ddf3fcbb90626afb08bacb1050bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for dv_interfaces-2.0.1.tar.gz:

Publisher: publish.yml on grrodre/dv-interfaces

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dv_interfaces-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: dv_interfaces-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 25.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dv_interfaces-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 be6c7d99db7b366a1bcf66488ed8d58d66fa0a57b00146844a7b3fc3e93813e4
MD5 564eb51380f8e1c5820886cc50ce6370
BLAKE2b-256 ae219035835bf8e3db69c713d73810ef27056d23e3fcb0ab62c1b631cd871fc6

See more details on using hashes here.

Provenance

The following attestation bundles were made for dv_interfaces-2.0.1-py3-none-any.whl:

Publisher: publish.yml on grrodre/dv-interfaces

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page