A proxy for
for easy
integration
This proxy enables a reliable connection between TSUN third generation inverters and an MQTT broker. With the proxy, you can easily retrieve real-time values such as power, current and daily energy and integrate the inverter into typical home automations. This works even without an internet connection. The optional connection to the TSUN Cloud can be disabled!
In detail, the inverter establishes a TCP connection to the TSUN cloud to transmit current measured values every 300 seconds. To be able to forward the measurement data to an MQTT broker, the proxy must be looped into this TCP connection.
Through this, the inverter then establishes a connection to the proxy and the proxy establishes another connection to the TSUN Cloud. The transmitted data is interpreted by the proxy and then passed on to both the TSUN Cloud and the MQTT broker. The connection to the TSUN Cloud is optional and can be switched off in the configuration (default is on). Then no more data is sent to the Internet, but no more remote updates of firmware and operating parameters (e.g. rated power, grid parameters) are possible.
By means of docker
a simple installation and operation is possible. By using docker-composer
, a complete stack of proxy, MQTT-brocker
and home-assistant
can be started easily.
ℹ️ This project is not related to the company TSUN. It is a private initiative that aims to connect TSUN inverters with an MQTT broker. There is no support and no warranty from TSUN.
❗An essential requirement is that the proxy can be looped into the connection
between the inverter and TSUN Cloud.
There are various ways to do this, for example via an DNS host entry or via firewall
rules (iptables) in your router. However, depending on the circumstances, not all
of them are possible.
If you use a Pi-hole, you can also store the host entry in the Pi-hole.
MQTT
supportHome-Assistant
auto-discovery supportMODBUS
support via MQTT topicsAT-Command
support via MQTT topics (GEN3PLUS only)AT-commands
Here are some screenshots of how the inverter is displayed in the Home Assistant:
https://github.com/s-allius/tsun-gen3-proxy/wiki/home-assistant#home-assistant-screenshots
To run the proxy, you first need to create the image. You can do this quite simply as follows:
docker build https://github.com/s-allius/tsun-gen3-proxy.git#main:app -t tsun-proxy
after that you can run the image:
docker run --dns '8.8.8.8' --env 'UID=1000' -p '5005:5005' -p '10000:10000' -v ./config:/home/tsun-proxy/config -v ./log:/home/tsun-proxy/log tsun-proxy
You will surely see a message that the configuration file was not found. So that we can create this without admin rights, the uid
must still be adapted. To do this, simply stop the proxy with ctrl-c and use the id
command to determine your own UserId:
% id
uid=1050(sallius) gid=20(staff) ...
With this information we can customize the docker run
` statement:
docker run --dns '8.8.8.8' --env 'UID=1050' -p '5005:5005' -p '10000:10000' -v ./config:/home/tsun-proxy/config -v ./log:/home/tsun-proxy/log tsun-proxy
The configuration consists of several parts. First, the container and the proxy itself must be configured, and then the connection of the inverter to the proxy must be set up, which is done differently depending on the inverter generation
For GEN3PLUS inverters, this can be done easily via the web interface of the inverter. The GEN3 inverters do not have a web interface, so the proxy is integrated via a modified DNS resolution.
No special configuration is required for the Docker container if it is built and started as described above. It is recommended to start the container with docker-compose. The configuration is then specified in a docker-compose.yaml file. An example of a stack consisting of the proxy, MQTT broker and home assistant can be found here.
On the host, two directories (for log files and for config files) must be mapped. If necessary, the UID of the proxy process can be adjusted, which is also the owner of the log and configuration files.
A description of the configuration parameters can be found here.
The proxy can be configured via the file ‘config.toml’. When the proxy is started, a file ‘config.example.toml’ is copied into the config directory. This file shows all possible parameters and their default values. Changes in the example file itself are not evaluated. To configure the proxy, the config.example.toml file should be renamed to config.toml. After that the corresponding values can be adjusted. To load the new configuration, the proxy must be restarted.
The configration uses the TOML format, which aims to be easy to read due to obvious semantics. You find more details here: https://toml.io/en/v1.0.0
GEN3PLUS inverters offer a web interface that can be used to configure the inverter. This is very practical for sending the data directly to the proxy. On the one hand, the inverter broadcasts its own SSID on 2.4GHz. This can be recognized because it is broadcast with AP_<Montoring SN>
. You will find the Monitor SN
and the password for the WLAN connection on a small sticker enclosed with the inverter.
If you have already connected the inverter to the cloud via the TSUN app, you can also address the inverter directly via WiFi. In the first case, the inverter uses the fixed IP address 10.10.100.254
, in the second case you have to look up the IP address in your router.
The standard web interface of the inverter can be accessed at http://<ip-adress>/index_cn.html
. Here you can set up the WLAN connection or change the password. The default user and password is admin
/admin
.
For our purpose, the hidden URL http://<ip-adress>/config_hide.html
should be called. There you can see and modify the parameters for accessing the cloud. Here we enter the IP address of our proxy and the IP port 10000
for the Server A Setting
and for Optional Server Setting
. The second entry is used as a backup in the event of connection problems.
❗If the IP port is set to 10443 in the inverter configuration, you probably have a firmware with SSL support.
In this case, you MUST NOT change the port or the host address, as this may cause the inverter to hang and
require a complete reset. Use the configuration in client mode instead.
If access to the web interface does not work, it can also be redirected via DNS redirection, as is necessary for the GEN3 inverters.
Newer GEN3PLUS inverters support SSL encrypted connections over port 10443 to the TSUN cloud. In this case you can’t loop the proxy into this connection, since the certicate verification of the inverter don’t allow this. You can configure the proxy in client-mode to establish an unencrypted connection to the inverter. For this porpuse the inverter listen on port 8899
.
There are some requirements to be met:
To include the proxy in the connection between the inverter and the TSUN Cloud, you must adapt the DNS record of logger.talent-monitoring.com within the network that your inverter uses. You need a mapping from logger.talent-monitoring.com to the IP address of the host running the Docker engine.
The new GEN3 PLUS inverters use a different URL. Here, iot.talent-monitoring.com must be redirected.
This can be done, for example, by adding a local DNS record to the Pi-hole if you are using it.
If you are using a router as local DNS server, the router may have DNS rebind protection that needs to be adjusted. For security reasons, DNS rebind protection blocks DNS queries that refer to an IP address on the local network.
If you are using a FRITZ!Box, you can do this in the Network Settings tab under Home Network / Network. Add logger.talent-monitoring.com as a hostname exception in DNS rebind protection.
The proxy itself must use a different DNS server to connect to the TSUN Cloud. If you use the DNS server with the adapted record, you will end up in an endless loop as soon as the proxy tries to send data to the TSUN Cloud.
As described above, set a DNS sever in the Docker command or Docker compose file.
Even if the proxy is connected between the inverter and the TSUN Cloud, an OTA update is supported. To do this, the inverter must be able to reach the website http://www.talent-monitoring.com:9002/ in order to download images from there.
It must be ensured that this address is not mapped to the proxy!
In the following table you will find an overview of which inverter model has been tested for compatibility with which firmware version. A combination with a red question mark should work, but I have not checked it in detail.
Micro Inverter Model | Fw. 1.00.06 | Fw. 1.00.17 | Fw. 1.00.20 | Fw. 4.0.10 | Fw. 4.0.20 |
---|---|---|---|---|---|
GEN3 micro inverters (single MPPT): MS300, MS350, MS400 MS400-D | ❓ | ❓ | ❓ | ➖ | ➖ |
GEN3 micro inverters (dual MPPT): MS600, MS700, MS800 MS600-D, MS800-D | ✔️ | ✔️ | ✔️ | ➖ | ➖ |
GEN3 PLUS micro inverters: MS1600, MS1800, MS2000 MS2000-D | ➖ | ➖ | ➖ | ✔️ | ✔️ |
TITAN micro inverters: TSOL-MP3000, MP2250, MS3000 | ❓ | ❓ | ❓ | ❓ | ❓ |
Legend
➖: Firmware not available for this devices
✔️: proxy support testet
❓: proxy support possible but not testet
🚧: Proxy support in preparation
❗The new inverters of the GEN3 Plus generation (e.g. MS-2000) use a completely different protocol for data transmission to the TSUN server. These inverters are supported from proxy version 0.6. The serial numbers of these inverters start with Y17E
or Y47E
instead of R17E
If you have one of these combinations with a red question mark, it would be very nice if you could send me a proxy trace so that I can carry out the detailed checks and adjust the device and system tests. Ask here how to send a trace
This project is licensed under the BSD 3-clause License.
Note the aiomqtt library used is based on the paho-mqtt library, which has a dual license. One of the licenses is the so-called Eclipse Distribution License v1.0. It is almost word-for-word identical to the BSD 3-clause License. The only differences are:
This project adheres to Semantic Versioning. Breaking changes will only occur in major X.0.0
releases.
We’re very happy to receive contributions to this project! You can get started by reading CONTRIBUTING.md.
The changelog lives in CHANGELOG.md. It follows the principles of Keep a Changelog.