Skip to main content

Send data from Hoymiles photovoltaic installation to MQTT server.

Project description

Hoymiles MQTT

pypi python Build Status codecov

Send data from Hoymiles photovoltaic installation to Home Assistant through MQTT broker.

The tool periodically communicates with Hoymiles DTU (Pro) trough ModbusTCP and sends gathered data to MQTT broker. Data to MQTT broker are sent with topics that can be recognized by Home Assistant. In a result DTU and each micro-inverter can be represented in Home Assistant as a separate device with set of entities. Example:

MQTT Devices

MQTT Entities

DTU device represent overall data for the installation:

  • pv_power - current power - sum from all micro-inverters

  • today_production - today energy production - sum from all micro-inverters, for each micro-inverter last known good value is cached to prevent disturbances in statistics when part of the installation is temporarily off or off-line. This entity can be used in Home Assistant energy panel as a production from solar panels. An example chart:

    Solar production

  • total_production - lifetime energy production - sum from all micro-inverters

Each micro-inverter has the following entities:

  • grid_voltage
  • grid_frequency
  • temperature
  • operating_status
  • alarm_code
  • alarm_count
  • link_status

Depending on the installation (number of micro-inverter), the tool may create many entities. One may limit the entities or with the option --mi-entities.

A micro-inverter can support multiple ports (PV panels), their states are represented by:

  • pv_voltage
  • pv_current
  • pv_power
  • today_production
  • total_production

Publishing of these entities can be controlled with --port-entities.

Usage

Prerequisites

From command line

usage: python3 -m hoymiles_mqtt [-h] [-c CONFIG] --mqtt-broker MQTT_BROKER [--mqtt-port MQTT_PORT] [--mqtt-user MQTT_USER] [--mqtt-password MQTT_PASSWORD] --dtu-host DTU_HOST [--dtu-port DTU_PORT]
                                [--modbus-unit-id MODBUS_UNIT_ID] [--query-period QUERY_PERIOD] [--microinverter-type {MI,HM}] [--mi-entities MI_ENTITIES [MI_ENTITIES ...]]
                                [--port-entities PORT_ENTITIES [PORT_ENTITIES ...]] [--expire-after EXPIRE_AFTER] [--comm-timeout COMM_TIMEOUT] [--comm-retries COMM_RETRIES] [--comm-retry-on-empty COMM_RETRY_ON_EMPTY]
                                [--comm-close-comm-on-error COMM_CLOSE_COMM_ON_ERROR] [--comm-strict COMM_STRICT] [--comm-reconnect-delay COMM_RECONNECT_DELAY]

options:
  -h, --help            show this help message and exit
  -c CONFIG, --config CONFIG
                        Config file path (default: None)
  --mqtt-broker MQTT_BROKER
                        Address of MQTT broker [env var: MQTT_BROKER] (default: None)
  --mqtt-port MQTT_PORT
                        MQTT broker port [env var: MQTT_PORT] (default: 1883)
  --mqtt-user MQTT_USER
                        User name for MQTT broker [env var: MQTT_USER] (default: None)
  --mqtt-password MQTT_PASSWORD
                        Password to MQTT broker [env var: MQTT_PASSWORD] (default: None)
  --dtu-host DTU_HOST   Address of Hoymiles DTU [env var: DTU_HOST] (default: None)
  --dtu-port DTU_PORT   DTU modbus port [env var: DTU_PORT] (default: 502)
  --modbus-unit-id MODBUS_UNIT_ID
                        Modbus Unit ID [env var: MODBUS_UNIT_ID] (default: 1)
  --query-period QUERY_PERIOD
                        How often (in seconds) DTU shall be queried. [env var: QUERY_PERIOD] (default: 60)
  --microinverter-type {MI,HM}
                        Type od microinverters in the installation. Mixed types are not supported. [env var: MICROINVERTER_TYPE] (default: MI)
  --mi-entities MI_ENTITIES [MI_ENTITIES ...]
                        Microinverter entities that will be sent to MQTT. By default all entities are presented. [env var: MI_ENTITIES] (default: ['grid_voltage', 'grid_frequency', 'temperature', 'operating_status',
                        'alarm_code', 'alarm_count', 'link_status'])
  --port-entities PORT_ENTITIES [PORT_ENTITIES ...]
                        Microinverters' port entities (in fact PV panel entities) that will be sent to MQTT. By default all entities are presented. [env var: PORT_ENTITIES] (default: ['pv_voltage', 'pv_current',
                        'pv_power', 'today_production', 'total_production'])
  --expire-after EXPIRE_AFTER
                        Defines number of seconds after which DTU or microinverter entities expire, if updates are not received (for example due to communication issues). After expiry, entities become unavailable in Home
                        Assistant.By default it is 0, which means that entities never expire. When different than 0, the value shallbe greater than the query period. This setting does not apply to entities that represent
                        a total amount such as daily energy production (they never expire). [env var: EXPIRE_AFTER] (default: 0)
  --comm-timeout COMM_TIMEOUT
                        Additional low level modbus communication parameter - request timeout. [env var: COMM_TIMEOUT] (default: 3)
  --comm-retries COMM_RETRIES
                        Additional low level modbus communication parameter - max number of retries per request. [env var: COMM_RETRIES] (default: 3)
  --comm-retry-on-empty COMM_RETRY_ON_EMPTY
                        Additional low level modbus communication parameter - retry if received an empty response. [env var: COMM_RETRY_ON_EMPTY] (default: False)
  --comm-close-comm-on-error COMM_CLOSE_COMM_ON_ERROR
                        Additional low level modbus communication parameter - close connection on error. [env var: COMM_CLOSE_COMM_ON_ERROR] (default: False)
  --comm-strict COMM_STRICT
                        Additional low level modbus communication parameter - strict timing, 1.5 character between requests. [env var: COMM_STRICT] (default: True)
  --comm-reconnect-delay COMM_RECONNECT_DELAY
                        Additional low level modbus communication parameter - delay in milliseconds before reconnecting. [env var: COMM_RECONNECT_DELAY] (default: 300000)

Args that start with '--' (eg. --mqtt-broker) can also be set in a config file (specified via -c). Config file syntax allows: key=value, flag=true, stuff=[a,b,c] (for details, see syntax at https://goo.gl/R74nmi). If an
arg is specified in more than one place, then commandline values override environment variables which override config file values which override defaults.

Docker

Build an image

docker build https://github.com/wasilukm/hoymiles-mqtt.git#v0.3.0 -t hoymiles_mqtt

Run (replace IP addresses)

docker run -d -e MQTT_BROKER=192.168.1.101 -e DTU_HOST=192.168.1.100 hoymiles_mqtt

Please note, depending on the needs more options can be specified with -e. See above for all possible options.

Known issues

Hoymiles DUTs are not the most stable devices. Therefore, from time to time the tool may not be able to connect to DTU and will print the following exception:

Modbus Error: [Invalid Message] No response received, expected at least 8 bytes (0 received)

The tool will continue its operation and try communication with DTU with the next period.

If the exception is constantly repeating and data is not refreshed in Home Assistant it may mean that DTU has crashed and requires power cycle.

Credits

This package was created with Cookiecutter and the waynerv/cookiecutter-pypackage project template.

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

hoymiles_mqtt-0.3.0.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hoymiles_mqtt-0.3.0-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file hoymiles_mqtt-0.3.0.tar.gz.

File metadata

  • Download URL: hoymiles_mqtt-0.3.0.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.15

File hashes

Hashes for hoymiles_mqtt-0.3.0.tar.gz
Algorithm Hash digest
SHA256 c5ba97f1ed6e92ddebe70fec7a33ef4806c14623a84640259cda6fbb784d7bdf
MD5 72e1e2ac7de51e8212e07d809484a504
BLAKE2b-256 b1f544a99263abfc1bba6455a181fc7a0fe1fd908bce799266773cb54b50aa20

See more details on using hashes here.

File details

Details for the file hoymiles_mqtt-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: hoymiles_mqtt-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.15

File hashes

Hashes for hoymiles_mqtt-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 04d51936e89ed4330f4dc17289aff586b2f41d63a1ed1c052f0767d1a45cfa7a
MD5 f035fa22a1a992832f5802ad7e8ad945
BLAKE2b-256 cf7ce35873a5162087ca2e9af9a56a9f23914d9100b9c142218005b25d9dcf14

See more details on using hashes here.

Supported by

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