Collect data from Hichi Smartmeter and expose it via MQTT
Project description
pysmartmeter
Collect data from Hichi Smartmeter aka volkszaehler.org
(USB Version) and expose it via MQTT.
Discussion: https://www.photovoltaikforum.com/thread/188160-pysmartmeter (de)
In the end it can looks like the following Home Assistant dashboard screenshot, using MQTT integration:
With my "eBZ DD3" energy meter by eBZ GmbH the values update live every second ;)
Currently only energy meters that send OBIS text protocol are supported! (Test this with ./cli.py dump
)
TODO: #37 - Add support for SML (Smart Message Language) binary protocol
quickstart
Install minimum requirements, e.g.:
~$ sudo apt install python3-venv
Clone sources and install project:
~$ git clone https://github.com/jedie/pysmartmeter.git
~$ cd pysmartmeter
~/pysmartmeter$ ./cli.py --help
The output of ./cli.py --help
looks like:
Usage: ./cli.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
│ debug-settings Display (anonymized) MQTT server username and password │
│ debug-systemd-service Just print the systemd service file content │
│ detect-serial Just print the detected serial port instance │
│ dump Just dump serial output │
│ publish-loop Publish current data via MQTT (endless loop) │
│ setup-systemd-service Setup PySmartMeter systemd services and starts it. │
│ store-settings Store MQTT server settings. │
│ systemd-restart Restart PySmartMeter systemd services │
│ systemd-status Call systemd status of PySmartMeter services │
│ systemd-stop Stop PySmartMeter systemd services │
│ test-mqtt-connection Test connection to MQTT Server │
│ version Print version and exit │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
Test if you Hichi Smartmeter with CP2102 USB to UART Bridge Controller will be found, e.g.:
~/pysmartmeter$ ./cli.py detect-serial
Maybe you didn't have permissions to access the port, e.g.:
~/pysmartmeter$ ./cli.py dump
...
try: /dev/ttyUSB0 CP2102 USB to UART Bridge Controller - CP2102 USB to UART Bridge Controller USB VID:PID=10C4:EA60
/dev/ttyUSB0 file mode: 0o20660
/dev/ttyUSB0 user ID: 0
/dev/ttyUSB0 user group ID: 20
/dev/ttyUSB0 user group: 'dialout'
ERROR: [Errno 13] could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'
...
Fix fiy by add the user to the group, e.g.:
sudo usermod -a -G dialout $USER
publish smartmeter data via MQTT
You have to store your MQTT settings (host, port, username, password) one time, e.g.:
~/pysmartmeter$ ./cli.py store-settings
This will create a JSON file here: ~/.pysmartmeter
You can test reading this settings file with:
~/pysmartmeter$ ./cli.py debug-settings
Test your MQTT settings with:
~/pysmartmeter$ ./cli.py test-mqtt-connection
Setup systemd service:
~/pysmartmeter$ sudo ./cli.py setup-systemd-service
This will create a systemd service that automaticly starts on every boot.
Note: Before you start the systemd service, check if everything works correctly with ./cli.py dump
and ./cli.py publish-loop
Otherwise you may start a services that will just deal wie gabage (e.g.: your energy meters speaks no OBIS text protocol) and restarts on and on again ;)
Check if service is running:
~/pysmartmeter$ sudo ./cli.py systemd-status
If everything is fine: Go to your Home Assistant and check the MQTT integration The device discovery will be made automaticly.
Start hacking
~$ git clone https://github.com/jedie/pysmartmeter.git
~$ cd pysmartmeter
~/pysmartmeter$ ./dev-cli.py --help
Usage: ./dev-cli.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
│ check-code-style Check code style by calling darker + flake8 │
│ coverage Run tests and show coverage report. │
│ fix-code-style Fix code style of all pysmartmeter source code files via darker │
│ install Run pip-sync and install 'pysmartmeter' via pip as editable. │
│ mypy Run Mypy (configured in pyproject.toml) │
│ publish Build and upload this project to PyPi │
│ safety Run safety check against current requirements files │
│ test Run unittests │
│ tox Run tox │
│ update Update "requirements*.txt" dependencies files │
│ update-test-snapshot-files Update all test snapshot files (by remove and recreate all snapshot │
│ files) │
│ version Print version and exit │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
Backwards-incompatible changes
v0.4.x -> v0.5.x
We split the CLI files into:
./cli.py
- Commands for end users./dev-cli.py
- Commands for developers
v0.2.x -> v0.3.x
Packages changes:
- We switched from
poetry
topip-tools
Makefile
was removed- "Renamed"
cli.sh
tocli.py
The Makefile
is no longer needed, because "Bootstrapping" will be made, just by call cli.py
To migrate, just remove the existing .venv
and create a fresh one, e.g.:
~$ cd pysmartmeter
~/pysmartmeter$ git pull origin main
~/pysmartmeter$ rm -Rf .venv
~/pysmartmeter$ ./cli.py --help
various links
- Discussion: https://www.photovoltaikforum.com/thread/188160-pysmartmeter (de)
- https://github.com/pyserial/pyserial
- https://github.com/eclipse/paho.mqtt.python
- https://github.com/eclipse/mosquitto
- https://dewiki.de/Lexikon/OBIS-Kennzahlen (de) | https://www.promotic.eu/en/pmdoc/Subsystems/Comm/PmDrivers/IEC62056_OBIS.htm (en)
- https://www.photovoltaikforum.com/thread/145886-habe-lesk%C3%B6pfe-mit-usb-%C3%BCber/ (de)
- https://www.heise.de/tests/Ausprobiert-Guenstiger-IR-Lesekopf-fuer-Smart-Meter-mit-Tastmota-Firmware-7065559.html (de)
- https://www.home-assistant.io
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pysmartmeter-0.5.0.tar.gz
.
File metadata
- Download URL: pysmartmeter-0.5.0.tar.gz
- Upload date:
- Size: 90.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d62b106713061d40e41ab61d36a8c46eb8834ee20b8eb84eb06436dd59f555a7 |
|
MD5 | 28ac10a09525b8cdad6397b285942202 |
|
BLAKE2b-256 | f40744da4831fbe6b44daa092e29f880b3e4a2843e2d32b8c541261c2784bc57 |
File details
Details for the file pysmartmeter-0.5.0-py3-none-any.whl
.
File metadata
- Download URL: pysmartmeter-0.5.0-py3-none-any.whl
- Upload date:
- Size: 54.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.12
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | dd925f0a5d92a667ce5d932d96a70a53c47b3572015971106b9e9eae03c15d37 |
|
MD5 | 8a2ec04bf9fc5a2dc07ea0b6e1ae770d |
|
BLAKE2b-256 | 9736112a3b29b1efb75aa23617bf745c47cabb03b74e7fef9271465bc9255c9c |