Skip to main content

Emit MQTT events from victron-ble

Project description

victron_ble2mqtt

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

Emit MQTT events from Victron Energy Solar Charger via victron-ble

Tested with:

2024-03-12 Home Assistant.png

Usage

preperation

victron_ble used Bleak and the Linux backend of Bleak communicates with BlueZ over DBus. So you have to install this, e.g.:

~$ sudo apt install bluez

Bootstrap

Clone the sources and just call the CLI to create a Python Virtualenv, e.g.:

~$ git clone https://github.com/jedie/victron-ble2mqtt.git
~$ cd victron-ble2mqtt
~/victron-ble2mqtt$ ./cli.py --help

app CLI

Usage: ./cli.py [OPTIONS] COMMAND [ARGS]...

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --help      Show this message and exit.                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
│ debug-read      Read data from specified devices and print them. MAC / KEY are used from config  │
│                 file, if not given.                                                              │
│ discover        Discover Victron devices with Instant Readout                                    │
│ edit-settings   Edit the settings file. On first call: Create the default one.                   │
│ print-settings  Display (anonymized) MQTT server username and password                           │
│ publish-loop    Publish MQTT messages in endless loop (Entrypoint from systemd)                  │
│ systemd-debug   Print Systemd service template + context + rendered file content.                │
│ systemd-remove  Remove Systemd service file. (May need sudo)                                     │
│ systemd-setup   Write Systemd service file, enable it and (re-)start the service. (May need      │
│                 sudo)                                                                            │
│ systemd-status  Display status of systemd service. (May need sudo)                               │
│ systemd-stop    Stops the systemd service. (May need sudo)                                       │
│ version         Print version and exit                                                           │
│ wifi-info       Just display the WiFi info                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

dev CLI

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 cli_base source code files via darker          │
│ install                     Run pip-sync and install 'cli_base' via pip as editable.             │
│ mypy                        Run Mypy (configured in pyproject.toml)                              │
│ pip-audit                   Run pip-audit check against current requirements files               │
│ publish                     Build and upload this project to PyPi                                │
│ 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                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

Setup Device

Detect your device first, e.g.:

~/victron-ble2mqtt$ ./cli.py discover
...
{
    'name': 'SmartSolar HQ2248AM79D',
    'address': 'E7:37:97:XX:XX:XX',
    'details': {
        'path': '/org/bluez/hci0/dev_E7_37_97_XX_XX_XX',
        'props': {
            'Address': 'E7:37:97:XX:XX:XX',
            'AddressType': 'random',
            'Name': 'SmartSolar HQ2248AM79D',
            'Alias': 'SmartSolar HQ2248AM79D',
            'Paired': False,
            'Trusted': False,
            'Blocked': False,
            'LegacyPairing': False,
            'RSSI': -89,
            'Connected': False,
            'UUIDs': [],
            'Adapter': '/org/bluez/hci0',
            'ManufacturerData': {737: bytearray(b'...')},
            'ServicesResolved': False
        }
    }
}
...
(Hit Ctrl-C to abort)

Device Key

You need the Device MAC address and the key.

The easiest way to get the device key: Install the official Victron Smartphone and and copy&paste the key:

  • Click on your SmartSolar device
  • Go to detail page about the SmartSolar Bluetooth Interface
  • Click on SHOW at Instant readout via Bluetooth / Encryption data
  • Copy the Connectionkey by click on the key

(I send the key via Signal as "my note" and use the Desktop Signal app to receive the key on my Computer)

See also: https://community.victronenergy.com/questions/187303/victron-bluetooth-advertising-protocol.html

setting

Just call edit-settings command, e.g.:

~/victron-ble2mqtt$ ./cli.py edit-settings

At least insert your MQTT settings and the device MAC and key.

Test

Start publish MQTT endless look, just call publish-loop command, e.g.:

~/victron-ble2mqtt$ ./cli.py publish-loop

setup systemd services

Check systemd setup:

~/victron-ble2mqtt$ ./cli.py systemd-debug

Setup services:

~/victron-ble2mqtt$ ./cli.py systemd-setup

Check the services:

~/victron-ble2mqtt$ ./cli.py systemd-status

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

victron_ble2mqtt-0.3.0rc1.tar.gz (65.3 kB view details)

Uploaded Source

Built Distribution

victron_ble2mqtt-0.3.0rc1-py3-none-any.whl (23.3 kB view details)

Uploaded Python 3

File details

Details for the file victron_ble2mqtt-0.3.0rc1.tar.gz.

File metadata

  • Download URL: victron_ble2mqtt-0.3.0rc1.tar.gz
  • Upload date:
  • Size: 65.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for victron_ble2mqtt-0.3.0rc1.tar.gz
Algorithm Hash digest
SHA256 0a2c083450348e24fc5802a584cafee7cec951548f91e3041a971ff43e069ce5
MD5 a55ecf1131a9fd609c104dff42c4a3b8
BLAKE2b-256 877a1654691221da10aefd81b2cf24e27cc992016e7e5d2749b8df1648bdaa11

See more details on using hashes here.

Provenance

File details

Details for the file victron_ble2mqtt-0.3.0rc1-py3-none-any.whl.

File metadata

File hashes

Hashes for victron_ble2mqtt-0.3.0rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 87e4ca4a82e0ff5c98aa48d5eb7f49116411bbe8fe86f4e9d348766ace966c29
MD5 0ae78bc8ecb5e5b80e7a9f33f631500c
BLAKE2b-256 839df0b5cf0661cf99baf2600d65b2fd4002550a687d27768e426416489cd884

See more details on using hashes here.

Provenance

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