PVOutput.org uploader for Samil Power inverters. Supports:
- SolarRiver TL series
- SolarRiver TL-D series (confirmed)
- SolarLake TL series works only with v2, which is not tested in production and likely needs some work to get running properly.
- For SolarLake TL-PM series check out this fork! -> semonet/solar
Project is not actively maintained but feel free to open an issue or PR. If you're planning on modifying or extracting parts of the source code for your different needs I recommend to check out v2 which has a much better code structure.
- Linux. Windows is not tested and the code likely needs modifications to work on Windows.
- Python 3
- Ensure both the system you're running this script on and the inverter are on the same network.
- Obtain your PVOutput.org API key and system ID and put this in
samil_upload.ini. If you have multiple inverters, see the section on multiple inverters configuration. - Run
samil_upload.py(for Linux:./samil_upload.py).
If you are using a Linux distro with SysV (/etc/init.d) like the Raspberry Pi
you can use a service script to run it automatically on startup.
See here. Alternatively you
could also make a cron entry: run crontab -e and add
@reboot /path/to/samil_upload.py to the cron file.
If your system has multiple network interfaces, you can optionally force the
script to use the correct one by specifying the system's IP address on the
network in samil_upload.ini (should not be needed).
Skip if you have only 1 inverter
For using multiple inverters, you add a section for each inverter, in which you can specify the inverter serial number or IP address. The settings in the DEFAULT section apply to all inverters (useful for the API key). These can also be overridden in an inverter section. When a new inverter is found in the network, it is matched to all sections with equal and/or empty serial number and IP address. A section will only match one inverter, which is the first inverter found in the network that applies to the section filter. Thus if you have multiple sections without a specified serial number and IP address, the first inverter found is matched to all these sections.
[DEFAULT]
# Number of minutes between uploads
Status interval = 5
# Interface to bind to, optional
Interface IP =
API key = YourApiKey
System ID = YourSystemId
Note: filtering by serial number is not yet implemented! Use IP address instead.
When multiple sections point to the same PVOutput system ID, the data of each section is combined before it is send to PVOutput. The energy data is accumulated and all other data (temperature, voltage) is averaged.
When the serial number is ommited, this configuration will behave differently: the first inverter that is connected will match both systems (since both systems don't have serial number or IP address specified). Therefore only the data of that first inverter is combined (doubled) and sent to PVOutput.
[DEFAULT]
Status interval = 5
API key = AnkieIsLiev
System ID = 44819
[System1]
Serial number = DWB8080SDF
[System2]
Serial number = HELLO
[DEFAULT]
Status interval = 5
API key = NoortjeOok
[System1]
System ID = 12345
IP address = 192.168.80.30
[System2]
System ID = 12346
IP address = 192.168.80.31
It is also possible to add more inverters, have separate API keys or use different status intervals. If anything is unclear or you need more help setting up your systems, make an issue or contact me.
The protocol used by these inverters is described here.
This project was originally a fork of zombiekipling/solriv but is now completely rewritten to implement new requirements.