The smartmeter-datacollector tool is a Python software which allows you to continuously retrieve data from supported smart meters (listed below).
The acquired values can be forwarded to one or more data sinks like a MQTT broker.
This tool is an open source software funded by EKZ (Elektrizitätswerke des Kantons Zürich) and developed by Supercomputing Systems AG. The goal of this voluntary initiative is to create a tool that can read, decode and decrypt data (if necessary) from the local interface of various smart meters and convert it into human-readable and simple formats. This should eliminate the complexity of decoding DLMS and similar protocols for the user. The user has the data in a format, which he can easily use in various use-cases ranging from simple visualization (see Method 1: Raspberry Pi image with demo) to integration into energy management algorithms or into custom home automation software.
The following smart meters are supported (see Wiki/Home for detailed information):
- Landis+Gyr E450:
Data pushed by smart meter over CII interface (wired M-Bus, HDLC, DLMS/COSEM) - Landis+Gyr E570:
Data pushed by smart meter over CII interface (wired M-Bus, HDLC, DLMS/COSEM) - Landis+Gyr E360:
Data pushed by smart meter over P1 interface (HDLC, DLMS/COSEM only, no DSMR) - Iskraemeco AM550:
Data pushed by smart meter over P1 interface (HDLC, DLMS/COSEM only, no DSMR) - Kamstrup OMNIPOWER with HAN-NVE:
Data pushed by smart meter over inserted HAN-NVE module (wired M-Bus, HDLC, DLMS/COSEM) - Siemens TD-351x:
Data fetched over bidirectional IR interface (IEC 62056-21, Mode C, unencrypted)
Note: All smart meters integrated so far push binary data encoded with HDLC (IEC 62056-46) and DLMS/COSEM. Both unencrypted and encrypted DLMS messages are accepted by the software.
The following data sinks are implemented:
- MQTT (v3.1.1):
- Encryption
- Unencrypted connection
- Encrypted connection
- TLS
- optional custom CA certificate
- Authentication
- Unauthenticated
- Authenticated with username / password
- Authenticated with client certificate
- Encryption
- Logger to
stdout
smartmeter-datacollector is fully configurable through a .ini configuration file. The smartmeter-datacollector-configurator web interface can help to create and modify the configuration.
There are different methods how to use smartmeter-datacollector.
- Raspberry Pi image with demo
- Python package
- Debian package
For a very easy first time usage of smartmeter-datacollector we provide a Raspberry Pi image (based on Raspberry Pi OS) which contains the following parts:
smartmeter-datacollectoras a systemd servicesmartmeter-datacollector-configuratorweb interface- Demo setup with:
See Wiki/Demo for detailed setup instructions.
smartmeter-datacollector can be installed as a Python3 package either from PyPi or manually using a released wheel.
The Python3 package does not contain any infrastructure to run smartmeter-datacollector in the background or to automatically start it during a boot sequence. If such infrastructure is required either see Method 3: Debian package or provide it yourself.
- Python >= 3.8 (tested with 3.9)
Install the package either as global Python package or in a virtualenv with
python3 -m pip install smartmeter-datacollectorSimilarly the smartmeter-datacollector-configurator web interface can be installed with
python3 -m pip install smartmeter-datacollector-configuratorsmartmeter-datacollector is also available as a Debian (.deb) package from the releases which installs the application bundled with its Python dependencies system wide. The Debian package includes a systemd service file which enables smartmeter-datacollector to automatically start after booting the system.
- Distribution: Debian based (like Debian, Ubuntu, ..)
- Release: Bullseye
- CPU architecture
- amd64
- armhf
Download the Debian package from releases and install it with
sudo apt install ./python3-smartmeter-datacollector_*.debSimilarly the smartmeter-datacollector-configurator web interface can be installed with a Debian package from its releases with
sudo apt install ./python3-smartmeter-datacollector-configurator_*.debThe usage of smartmeter-datacollector depends on the installation method. Independent of the installation method a .ini configuration file is required to properly run smartmeter-datacollector.
See Wiki/Configuration for more details on the available configuration options.
To simplify the process of generating a valid .ini configuration for smartmeter-datacollector the companion smartmeter-datacollector-configurator web interface can be used. It supports
- a graphical approach to manage the configuration
- input validation to avoid invalid configurations
- loading / saving / discarding a configuration
- restarting
smartmeter-datacollector(only if installed as a Debian package)
See Wiki/smartmeter-datacollector-configurator for more details on the web interface and the configuration possibilities.
Run smartmeter-datacollector with the following command:
smartmeter-datacollector --config datacollector.ini
The following command line arguments are supported:
-h, --help: Shows the help output ofsmartmeter-datacollector-c, --config CONFIG: Path to the.iniconfiguration file-s,--saveconfig: Create a default.iniconfiguration file-d, --dev: Enable development mode
The configuration file can be located anywhere and use any filename. If no .ini configuration file is specified a default configuration with the following options is used:
- Landys+Gyr E450 smart meter in unencrypted mode connected to
/dev/ttyUSB0 LOGGERsinkMQTTsink connected to a local broker without encryption or authentication
When smartmeter-datacollector has been installed as a Debian package it provides a systemd .service file named smartmeter-datacollector.service. Therefore the service can be managed using the systemctl command. See Run as a systemd service for possible commands.
Help from the community for the smartmeter-datacollector project is always welcome. Please follow the next few chapters to setup a working development environment.
- Python >= 3.8, <= 3.10
poetry- Optional software packages (Debian bullseye/ Ubuntu 22.04)
- debhelper
- dh-make
- rename
To install the listed minimal requirements run the following command:
sudo apt install git python3
Also install poetry according to Poetry - Installation.
To install the optional requirements also run the following command:
sudo apt install debhelper dh-make rename
Use git to clone / checkout smartmeter-datacollector from GitHub using
git clone https://github.com/scs/smartmeter-datacollector.git
smartmeter-datacollector uses poetry to manage its dependencies and setup a virtual environment. Run the following command to setup the initial development environment:
poetry install
This will install all runtime and development dependencies for smartmeter-datacollector in a new virtual environment. Now you are ready to start working on smartmeter-datacollector.
smartmeter-datacollector offers a few custom poetry run poe commands to simplify certain development workflows:
build_pybuilds a Python package which can be uploaded toPyPIbuild_shivbuilds a self-contained zipapp (.pyz) including dependencies (but without interpreter) usingshivbuild_debbuilds a Debian package for the current development platformbuild_srcdebbuilds a Debian source package which can be used to build a Debian (binary) package for any platform (e.g. usingpbuilder)cleanremoves build output from the working directorydebianizecreates adebian/directory used to build Debian source / binary packagesformatautomatically adjusts the code to follow theautopep8code formatting rulesformat_checkchecks if the code follows theautopep8code formatting rulesisortautomatically re-orders the import statements usingisortisort_checkchecks if the order of the import statements is correct usingisortlicensemakes sure every Python (*.py) file contains the proper license headerlintautomatically adjust the code to follow thepylintrules defined inpyproject.tomllint_checkchecks if the code follows thepylintrules defined inpyproject.tomltestruns all unit tests usingpytest
Make sure to run format_check / format, isort_check / isort, lint_check / lint, license before committing changes to the repository to avoid unnecessary development cycles. smartmeter-datacollector uses GitHub Actions to check if these rules apply.
smartmeter-datacollector and its companion project smartmeter-datacollector-configurator have been developed by Supercomputing Systems AG on behalf of and funded by EKZ.
