GithubHelp home page GithubHelp logo

neibi / deye-inverter-mqtt Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kbialek/deye-inverter-mqtt

0.0 0.0 0.0 153 KB

Reads Deye solar inverter metrics and posts them over mqtt

License: Apache License 2.0

Shell 0.08% Python 96.01% Makefile 2.46% Dockerfile 1.45%

deye-inverter-mqtt's Introduction

Deye solar inverter MQTT bridge

Reads Deye solar inverter metrics using Modbus over TCP and publishes them over MQTT.

Supported inverters and metrics

The meaning of certain inverter registers depends on the inverter type. You should choose metric group(s) that are appropriate to your inverter model. If your inverter is not listed below, it may still work with one of the already existing metric groups. Give it a try and experiment. In the worst case it won't work.

When your inverter is not supported, feel free to open an issue in this github project. Maybe, together we will find a way to add the support.

When your inverter turns out to work well with an already exiting metrics group, then please be so kind, and let me know in this issue. This will help in building the list of supported inverters below. Thanks!

Inverter model Metric groups
Deye SUN-4K-G05 string
Deye SUN1300G3 micro
Deye SUN600G3 micro
Bosswerk MI600 micro
Deye SUN-5/6/8/10/12K-SG04LP3 deye_sg04lp3, deye_sg04lp3_battery

Additional MQTT topics

Availability topic

Reports deye-inverter-mqtt service status (not the inverter/logger status):

  • online - when the service is connected to the MQTT broker
  • offline - when the service is disconnected from the MQTT broker

The default topic name is status and can be changed in the configuration.

Logger status topic

Reports solar inverter's logger connectivity status

  • online - when the service connect to the logger successfully
  • offline - when the service can't connect to the logger

The default topic name is logger_status and can be changed in the configuration.

Additional features

Automatically set logger/inverter time

Monitors current logger status and sets the time at the logger/inverter once the connection to it can be established. This is useful in a setup where the inverter has no access to the public internet, or is cut off from the Solarman cloud services. This feature is disabled by default and must be activated by setting DEYE_FEATURE_SET_TIME in the config file.

Installation

  1. Copy config.env.example as config.env

  2. Fill in values in config.env, see Configuration for more details

  3. Run the container

    docker run --rm --env-file config.env ghcr.io/kbialek/deye-inverter-mqtt
    

Installation troubleshooting

Docker container fails to start with error message: PermissionError: [Errno 1] Operation not permitted

It can happen on debian buster based linux distributions, including raspbian.

Solution: Install libseccomp2 from the backports

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC 648ACFD622F3D138
echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee -a /etc/apt/sources.list.d/buster-backports.list
sudo apt update
sudo apt install -t buster-backports libseccomp2

Configuration

All configuration options are controlled through environment variables.

  • LOG_LEVEL - application log level, can be any of DEBUG, INFO, WARN, ERROR
  • DEYE_DATA_READ_INTERVAL - interval between subsequent data reads, in seconds, defaults to 60
  • DEYE_METRIC_GROUPS - a comma delimited set of:
    • string - string inverter
    • micro - micro inverter
    • deye_sg04lp3 - sg04lp3 inverter
    • deye_sg04lp3_battery - sg04lp3 battery
  • DEYE_LOGGER_SERIAL_NUMBER - inverter data logger serial number
  • DEYE_LOGGER_IP_ADDRESS - inverter data logger IP address
  • DEYE_LOGGER_PORT - inverter data logger communication port, typically 8899
  • DEYE_FEATURE_MQTT_PUBLISHER - controls, if the service will publish metrics over mqtt, defaults to true
  • DEYE_FEATURE_SET_TIME - when set to true, the service will automatically set the inverter/logger time, defaults to false
  • MQTT_HOST - MQTT Broker IP address
  • MQTT_PORT - MQTT Broker port, typically 1883
  • MQTT_USERNAME - MQTT Broker username for authentication
  • MQTT_PASSWORD - MQTT Broker password for authentication
  • MQTT_TOPIC_PREFIX - mqtt topic prefix used for all inverter metrics
  • MQTT_AVAILIBILITY_TOPIC - mqtt availability topic, defaults to status
  • MQTT_LOGGER_STATUS_TOPIC - logger connectivity status topic, defaults to logger_status

Reading and writing raw register values

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)

Development

  1. Install python dependencies
    pip install -r requirements.txt
    
  2. Running the code
    1. Option 1 - Run the code locally without using Docker
      1. Fill in config.env file
      2. Execute make run
    2. Option 2 - Build a new docker image locally (for amd64 architecture)
      1. Execute make docker-build-local
      2. Fill in config.env file
      3. Execute make docker-run
  3. To run the tests use:
    1. make test
    2. make test-mqtt - requires mosquitto MQTT broker binary

deye-inverter-mqtt's People

Contributors

antagor avatar geeks-r-us avatar jenshori avatar kbialek avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.