Skip to main content

Get information from Deye Microinverter

Project description

inverter

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

Get information from Deye Microinverter

The whole thing is just a learning exercise for now. We will see.

quickstart

overview

  • clone the sources
  • Bootstrap and create default user settings by just call ./cli.py edit-settings
  • Change the settings for your needs
  • ...use the commands... ;)
  • Setup systemd service to publish the inventer values to a Home Assistant instance via MQTT

Currently just clone the project and just start the cli (that will create a virtualenv and installs every dependencies)

Note: Please enable https://www.piwheels.org/ if you are on a Raspberry Pi !

e.g.:

~$ git clone https://github.com/jedie/inverter-connect.git
~$ cd inverter-connect
~/inverter-connect$ ./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                     │
│ edit-settings         Edit the settings file. On first call: Create the default one.             │
│ inverter-version      Print all version information of the inverter                              │
│ print-at-commands     Print one or more AT command values from Inverter.                         │
│ print-values          Print all known register values from Inverter, e.g.:                       │
│ publish-loop          Publish current data via MQTT for Home Assistant (endless loop)            │
│ read-register         Read register(s) from the inverter                                         │
│ set-time              Set current date time in the inverter device.                              │
│ systemd-debug         Print Systemd service template + context + rendered file content.          │
│ systemd-remove        Write Systemd service file, enable it and (re-)start the service. (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)                                 │
│ test-mqtt-connection  Test connection to MQTT Server                                             │
│ version               Print version and exit                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

Setup systemd services for Home Assistant

Update your settings via: ./cli.py edit-settings and insert MQTT credentials in section [mqtt]

Check also the config section [systemd] and [systemd.template_context] but normally they must not be changed ;)

To verify your settings, call: ./cli.py debug-settings

To see the systemd service file content, just call: ./cli.py systemd-debug

Note: Some of the systemd commands, needs sudo because a normal user can't change systemd services! You will see permission errors with a hint to call the cli with sudo ;)

If everything looks okay, setup and start the systemd service with: sudo ./cli.py systemd-setup

Check the services with: sudo ./cli.py systemd-status

most important commands

publish-loop

Help from ./cli.py print-values --help Looks like:

Usage: ./cli.py publish-loop [OPTIONS]

 Publish current data via MQTT for Home Assistant (endless loop)
 The "Daily Production" count will be cleared in the night, by set the current date time via
 AT-command.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --ip             TEXT                     IP address of your inverter [required]              │
│ *  --port           INTEGER                  Port of inverter services [default: 48899]          │
│                                              [required]                                          │
│ *  --inverter       TEXT                     Prefix of yaml config files in                      │
│                                              inverter/definitions/                               │
│                                              [default: deye_2mppt]                               │
│                                              [required]                                          │
│    --verbosity  -v  INTEGER RANGE [0<=x<=3]  Verbosity level; Accepts integer value e.g.:        │
│                                              "--verbose 2" or can be count e.g.: "-vv"           │
│                                              [default: 1; 0<=x<=3]                               │
│    --help                                    Show this message and exit.                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

print-values

Help from ./cli.py print-values --help Looks like:

Usage: ./cli.py print-values [OPTIONS]

 Print all known register values from Inverter, e.g.:
 .../inverter-connect$ ./cli.py print-values

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --ip             TEXT                     IP address of your inverter [required]              │
│ *  --port           INTEGER                  Port of inverter services [default: 48899]          │
│                                              [required]                                          │
│ *  --inverter       TEXT                     Prefix of yaml config files in                      │
│                                              inverter/definitions/                               │
│                                              [default: deye_2mppt]                               │
│                                              [required]                                          │
│    --verbosity  -v  INTEGER RANGE [0<=x<=3]  Verbosity level; Accepts integer value e.g.:        │
│                                              "--verbose 2" or can be count e.g.: "-vv"           │
│                                              [default: 1; 0<=x<=3]                               │
│    --help                                    Show this message and exit.                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

Example output of print-values call:

print-values


print-at-commands

Help from ./cli.py print-at-commands --help Looks like:

Usage: ./cli.py print-at-commands [OPTIONS] [COMMANDS]...

 Print one or more AT command values from Inverter.
 Use all known AT commands, if no one is given, e.g.:
 .../inverter-connect$ ./cli.py print-at-commands
 Or specify one or more AT-commands, e.g.:
 .../inverter-connect$ ./cli.py print-at-commands WEBVER .../inverter-connect$ ./cli.py
 print-at-commands WEBVER WEBU
 e.g.: Set NTP server, enable NTP and check the values:
 .../inverter-connect$ ./cli.py print-at-commands NTPSER=192.168.1.1 NTPEN=on NTPSER NTPEN
 wait a while and request the current date time:
 .../inverter-connect$ ./cli.py print-at-commands NTPTM
 (Note: The prefix "AT+" will be added to every command)

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --ip             TEXT                     IP address of your inverter [required]              │
│ *  --port           INTEGER                  Port of inverter services [default: 48899]          │
│                                              [required]                                          │
│    --verbosity  -v  INTEGER RANGE [0<=x<=3]  Verbosity level; Accepts integer value e.g.:        │
│                                              "--verbose 2" or can be count e.g.: "-vv"           │
│                                              [default: 1; 0<=x<=3]                               │
│    --help                                    Show this message and exit.                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

Example output of print-at-commands call:

print-at-commands


read-register

Help from ./cli.py read-register --help Looks like:

Usage: ./cli.py read-register [OPTIONS] REGISTER LENGTH

 Read register(s) from the inverter
 e.g.: read 3 registers starting from 0x16:
 .../inverter-connect$ ./cli.py read-register 0x16 3
 e.g.: read the first 32 registers:
 .../inverter-connect$ ./cli.py read-register 0 32
 The start address can be pass as decimal number or as hex string, e.g.: 0x123

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --ip             TEXT                     IP address of your inverter [required]              │
│ *  --port           INTEGER                  Port of inverter services [default: 48899]          │
│                                              [required]                                          │
│    --verbosity  -v  INTEGER RANGE [0<=x<=3]  Verbosity level; Accepts integer value e.g.:        │
│                                              "--verbose 2" or can be count e.g.: "-vv"           │
│                                              [default: 1; 0<=x<=3]                               │
│    --help                                    Show this message and exit.                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

Example output of read-register call:

read-register


start development

For development, we have a separate CLI, just call it:

~/inverter-connect$ ./dev-cli.py --help

The output of ./dev-cli.py --help looks like:

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 and show coverage.                                               │
│ create-default-settings     Create a default user settings file. (Used by CI pipeline ;)         │
│ fix-code-style              Fix code style of all inverter source code files via darker          │
│ install                     Run pip-sync and install 'inverter' 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                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯

credits

Others before me have done good work. In particular, I have learned a lot from the following projects:

The included definitions yaml files are from:

https://github.com/StephanJoubert/home_assistant_solarman/tree/main/custom_components/solarman/inverter_definitions

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

inverter-connect-0.9.0.tar.gz (71.8 kB view details)

Uploaded Source

Built Distribution

inverter_connect-0.9.0-py3-none-any.whl (41.6 kB view details)

Uploaded Python 3

File details

Details for the file inverter-connect-0.9.0.tar.gz.

File metadata

  • Download URL: inverter-connect-0.9.0.tar.gz
  • Upload date:
  • Size: 71.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.6

File hashes

Hashes for inverter-connect-0.9.0.tar.gz
Algorithm Hash digest
SHA256 be9d67f977456d749892fe063375933a0b2f05f57b6e224b685d9422b46747e7
MD5 dd63b8f1d89dc0d8bfc154cbb3bb740e
BLAKE2b-256 901f01a6acd4e43039a5db83a0943d8c5ff07b6c67023d327a9a77e3bf897706

See more details on using hashes here.

Provenance

File details

Details for the file inverter_connect-0.9.0-py3-none-any.whl.

File metadata

File hashes

Hashes for inverter_connect-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b26729a2a3beaec812c3c6c977a60c11f8b9e4616165aea646ffa965d0a8453f
MD5 64fb25444080a0b7fd6dc0938c4bcfc2
BLAKE2b-256 f23d7982a95b686d1ad60d68e902bbbf0b46d180568be9c0de1da4d07727e7ce

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