Reads Deye solar inverter metrics using Modbus over TCP and publishes them over MQTT.
Tested with:
- Deye SUN-4K-G05 and Logger S/N 23xxxxxxxx
- Deye SUN1300G3 and Logger S/N 41xxxxxxxx
- Deye SUN600G3 and Logger S/N 41xxxxxxxx
The meaning of certain registers depends on the inverter type.
For example, string inverters use registers 0x46 - 0x4e to report AC phase voltage/current.
On the other hand, micro inverters use this same registers to report pv1-pv4 cumulative energy.
Generally there are three types of inverters documented in the specification: string, micro and hybrid.
In the table below you can see, that the metrics are assigned to specific groups.
You should specify the set of groups that is appropriate for your inverter in DEYE_METRIC_GROUPS
environment variable.
Typically you should set it to either string or micro.
Additional groups may be added in the future.
Metric | Modbus address | MQTT topic suffix | Unit | Groups |
---|---|---|---|---|
Production today | 0x3c | day_energy |
kWh | string, micro |
Uptime | 0x3e | uptime |
minutes | string, micro |
Total Production (Active) | 0x3F - 0x40 | total_energy |
kWh | string, micro |
Daily Production 1 | 0x41 | dc/pv1/day_energy |
kWh | micro |
Daily Production 2 | 0x42 | dc/pv2/day_energy |
kWh | micro |
Daily Production 3 | 0x43 | dc/pv3/day_energy |
kWh | micro |
Daily Production 4 | 0x44 | dc/pv4/day_energy |
kWh | micro |
Total Production 1 | 0x45 - 0x46 | dc/pv1/total_energy |
kWh | micro |
Total Production 2 | 0x47 - 0x48 | dc/pv2/total_energy |
kWh | micro |
Total Production 3 | 0x4a - 0x4b | dc/pv3/total_energy |
kWh | micro |
Total Production 4 | 0x4d - 0x4e | dc/pv4/total_energy |
kWh | micro |
AC Phase 1 voltage | 0x49 | ac/l1/voltage |
V | string, micro |
AC Phase 2 voltage | 0x4a | ac/l2/voltage |
V | string |
AC Phase 3 voltage | 0x4b | ac/l3/voltage |
V | string |
AC Phase 1 current | 0x4c | ac/l1/current |
A | string, micro |
AC Phase 2 current | 0x4d | ac/l2/current |
A | string |
AC Phase 3 current | 0x4e | ac/l3/current |
A | string |
AC Phase 1 power | computed | ac/l1/power |
W | string, micro |
AC Phase 2 power | computed | ac/l2/power |
W | string |
AC Phase 3 power | computed | ac/l3/power |
W | string |
AC Frequency | 0x4f | ac/freq |
Hz | string, micro |
Operating power | 0x50 | operating_power |
W | string, micro |
DC total power | 0x52 | dc/total_power |
W | string |
DC total power | computed | dc/total_power |
W | micro |
AC apparent power | 0x54 | ac/apparent_power |
W | string |
AC active power | 0x56 - 0x57 | ac/active_power |
W | string, micro |
AC reactive power | 0x58 | ac/reactive_power |
W | string |
Radiator temperature | 0x5a | radiator_temp |
C | string, micro |
IGBT temperature | 0x5b | igbt_temp |
C | string |
DC PV1 voltage | 0x6d | dc/pv1/voltage |
V | string, micro |
DC PV1 current | 0x6e | dc/pv1/current |
A | string, micro |
DC PV1 power | computed | dc/pv1/power |
W | string, micro |
DC PV2 voltage | 0x6f | dc/pv2/voltage |
V | string, micro |
DC PV2 current | 0x70 | dc/pv2/current |
A | string, micro |
DC PV2 power | computed | dc/pv2/power |
W | string, micro |
DC PV3 voltage | 0x71 | dc/pv3/voltage |
V | string, micro |
DC PV3 current | 0x72 | dc/pv3/current |
A | string, micro |
DC PV3 power | computed | dc/pv3/power |
W | string, micro |
DC PV4 voltage | 0x73 | dc/pv4/voltage |
V | string, micro |
DC PV4 current | 0x74 | dc/pv4/current |
A | string, micro |
DC PV4 power | computed | dc/pv4/power |
W | string, micro |
Reports deye-inverter-mqtt service status (not the inverter/logger status):
online
- when the service is connected to the MQTT brokeroffline
- when the service is disconnected from the MQTT broker
The default topic name is status
and can be changed in the configuration.
Reports solar inverter's logger connectivity status
online
- when the service connect to the logger successfullyoffline
- when the service can't connect to the logger
The default topic name is logger_status
and can be changed in the configuration.
-
Copy
config.env.example
asconfig.env
-
Fill in values in
config.env
-
Run the container
docker run --rm --env-file config.env ghcr.io/kbialek/deye-inverter-mqtt
All configuration options are controlled through environment variables.
LOG_LEVEL
- application log level, can be any ofDEBUG
,INFO
,WARN
,ERROR
DEYE_DATA_READ_INTERVAL
- interval between subsequent data reads, in seconds, defaults to 60DEYE_METRIC_GROUPS
- a comma delimited set of:string
- set when connecting to a string invertermicro
- set when connecting to a micro inverter
DEYE_LOGGER_SERIAL_NUMBER
- inverter data logger serial numberDEYE_LOGGER_IP_ADDRESS
- inverter data logger IP addressDEYE_LOGGER_PORT
- inverter data logger communication port, typically 8899MQTT_HOST
MQTT_PORT
MQTT_USERNAME
MQTT_PASSWORD
MQTT_TOPIC_PREFIX
- mqtt topic prefix used for all inverter metricsMQTT_AVAILIBILITY_TOPIC
- mqtt availability topic, defaults tostatus
MQTT_LOGGER_STATUS_TOPIC
- logger connectivity status topic, defaults tologger_status
The tool allows reading and writing raw register values directly in the terminal.
USE AT YOUR OWN RISK! Be sure to know what you are doing. Writing invalid values may damage the inverter. By using this tool you accept this risk and you take full responsiblity for the consequences.
-
To read register value execute:
docker run --rm --env-file config.env ghcr.io/kbialek/deye-inverter-mqtt r <reg_address>
where
<reg_address>
is register address (decimal) -
To write register value execute:
docker run --rm --env-file config.env ghcr.io/kbialek/deye-inverter-mqtt w <reg_address> <reg_value>
where
<reg_address>
is register address (decimal), and <reg_value> is a value to set (decimal)
- Install python dependencies
pip install -r requirements.txt
- Running the code
- Option 1 - Run the code locally without using Docker
- Fill in
config.env
file - Execute
make run
- Fill in
- Option 2 - Build a new docker image locally (for amd64 architecture)
- Execute
make docker-build-local
- Fill in
config.env
file - Execute
make docker-run
- Execute
- Option 1 - Run the code locally without using Docker
- To run the tests use:
make test
make test-mqtt
- requires mosquitto MQTT broker binary