tmkasun / solar-hybrid-inverter-monitor

Monintor Hybrid inverters
https://energy.knnect.com/
MIT License
9 stars 3 forks source link
choreo energy inverter-control python

Solar Inverter USB Driver + Monitoring Dashboard

No need to cut cables or connect to adaptors, Just plug the USB cable and play with your inverter

This is an Solar inverter monitoring and controlling system for hybrid inverters, Following are the main components in the system.

Currently we have tested this on

Architecture

image

Supported compute devices

Hardware setup

How it works

Most of the Hybrid(Chinees) inverters comes with the following Serial interface

Bus 001 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial

For this VendorID and ProductID there are several UPS and inverter devices using this serial com device. But this device had no drivers for Raspberry pi, So when the inverter is connected to a Raspberry pi(or similar) compute device , it detects as a USB block storage device

/dev/usb/hiddev0

not as a USB serial communication device.

i:e

/dev/ttyS0 or /dev/USB0

To establish communication between the inverter and the compute device we had to use pyUSB approach described in here. For the basic working principles of Inverter - Compute device (Raspberry pi) communication check the above article.

Another important piece of the puzzle was to find out the communication protocol. This document from a random generous Czech inverter site.

Without this, Decoding the values sent from inverter was a challenge

and the meanings of

and

were like greek!

Once the communication is established it's was just a matter of routing the data to client application (React app) to present the data.

We use Flask to implement REST API and ReactJS, MUI , React Query in the UIs.

Install

Most of the Raspberry pi & Orange Pi variations doesn't come with pip pre-installed, Hence we have to run this

Install the Python USB communication library

This is required for the following crc16 library

CRC16 is used to generate the 2 byte CRC, CRC is a way of detecting accidental changes in data storage or transmission

| Note: This only works upto python 3.9 versions, If you have a latest version of Python 3.10+, This will not work

Add a Udev rule as shown below, This is required to allow communicating with the USB device for none-sudoers users. Example file is given in

references/99-knnect.rules

in this repo

example

  sudo cp references/99-knnect.rules /etc/udev/rules.d/

Restart the Udev admin to apply the changes

Deploying the REST API

Need following 2 packages

  python -m pip install flask gunicorn

Accessing from anyway

Currently this only support monitoring through the local network, If you want to monitor or control the device through internet, Then you need to expose the APIs through Choreo (It's free) like API proxy service or Buy a Blynk subscription and publish data to blynk.

Troubleshoot

Similar projects

TODO

Protocol Docs

Web UI

image

image

TODO: