Skip to main content

Collect data from Hichi Smartmeter and expose it via MQTT

Project description

pysmartmeter

tests codecov pysmartmeter @ PyPi Python Versions License GPL-3.0-or-later

Collect data from Hichi Smartmeter aka volkszaehler.org (USB Version) and expose it via MQTT.

In the end it can looks like the following Home Assistant dashboard screenshot, using MQTT integration:

2022-11-21_13-47.png

With my "eBZ DD3" energy meterby eBZ GmbH the values update live every second ;)

quickstart

Install minimum requirements, e.g.:

~$ sudo apt install make 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 ───────────────────────────────────────────────────────────────────────────────────────╮
│ check-code-style            Check code style by calling darker + flake8                          │
│ coverage                    Run and show coverage.                                               │
│ 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                                              │
│ 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                                │
│ publish-loop                Publish current data via MQTT (endless loop)                         │
│ safety                      Run safety check against current requirements files                  │
│ 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                        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                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

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

Setup systemd service:

~/pysmartmeter$ sudo ./cli.py setup-systemd-service

This will create a systemd service that automaticly starts on every boot.

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.

Backwards-incompatible changes

v0.2.x -> v0.3.x

Packages changes:

  • We switched from poetry to pip-tools
  • Makefile was removed
  • "Renamed" cli.sh to cli.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

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

pysmartmeter-0.3.2.tar.gz (35.8 kB view details)

Uploaded Source

Built Distribution

pysmartmeter-0.3.2-py3-none-any.whl (41.3 kB view details)

Uploaded Python 3

File details

Details for the file pysmartmeter-0.3.2.tar.gz.

File metadata

  • Download URL: pysmartmeter-0.3.2.tar.gz
  • Upload date:
  • Size: 35.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.6

File hashes

Hashes for pysmartmeter-0.3.2.tar.gz
Algorithm Hash digest
SHA256 0ce24e5390fe331bee31ad6c080247d7286d48bf33765b285723a9cb4b2605d0
MD5 32a152b02d94d76c06f041596a09c621
BLAKE2b-256 5fa42545af743cf7534c06d4f08fad6509f120c9f80c54fbb53a232607ae1bde

See more details on using hashes here.

File details

Details for the file pysmartmeter-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: pysmartmeter-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 41.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.6

File hashes

Hashes for pysmartmeter-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0ed1d6be039eb9bdb75dd6ab60ae474987e8ac6707ef489fb9eaedecc3f6b629
MD5 7ee11c3a81d2cc6b8d9f55841252ac64
BLAKE2b-256 4c6cafd9a79d829b6351c5a1b156881f68862ae835f99dd7276d79a71fca1ce6

See more details on using hashes here.

Supported by

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