Solaredge
SolarEdge inverter logging data capture
Install / Use
/learn @jbuehl/SolaredgeREADME
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! September 2025 update ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
Support for the SolarEdge homegrown encryption has been removed, as has the local DHCP/DNS server. Ethernet active and passive modes are still supported assuming that the inverter has old firmware that does not do encryption and it is not communicating with the actual SolarEdge server.
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! September 2023 update ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
When this project was started ten years ago, SolarEdge inverters communicated with their monitoring server using a proprietary data format that was sent in the clear. It was possible to reverse engineer most of the messages in order to obtain the optimizer level data which was not otherwise available. The same data was also available on the RS232 and RS485 interfaces which were provided on their inverters. A few years later, SolarEdge implemented a homegrown encryption algorithm for the communications to their monitoring server, which prevented access for a while until an effort by a number of contributors to this project was successful in figuring out the algorithm which got it working again.
In the years since then, SolarEdge has introduced new products which no longer support the RS232 interface, and they have dropped their encryption algorithm and are now using the far more secure and mainstream SSL/TLS encryption method which is essentially not hackable. This means that if you have a newer inverter or if the firmware in your older inverter is up to date, the only way to access performance data is going to be via the RS485 interface.
Also, please note that this software is made available here without any expectation of support. If you use it and have a problem that you can't solve, you can open an issue, however there may not be a response, given the relatively small number of contributors and the fact that SolarEdge does not support this project in any way. Contributors are only familiar with the particular SolarEdge equipment that they personally own and are not motivated to maintain the software beyond their particular needs.
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
SolarEdge Monitoring
This project enables monitoring the performance data of SolarEdge inverters and optimizers. Solaredge supports the open Sunspec Alliance logging protocols, however this data is only accessible via an RS485 interface on the inverter and does not include module level (optimizer) data. Solaredge publishes an API that allows access to their portal, however this also does not include module level data.
How it works
SolarEdge inverter monitoring data can be accessed by any of 3 hardware interfaces - ethernet, RS232, or RS485. Data can be parsed by semonitor.py either in an active mode, where semonitor.py interacts with the inverter directly, or in a passive mode where the data that is being sent to the SolarEdge monitoring portal is captured.
interface modes
--------- -----
ethernet active, passive
RS232 active
RS485 active, passive
Access modes
Ethernet active
The inverter is made to connect to semonitor.py instead of the SolarEdge monitoring
portal by resolving its hostname (usually prod.solaredge.com) to the IP address of
the server running semonitor.py. This may be done by connecting the ethernet interface
of the inverter to a dedicated ethernet interface on the server running semonitor.py.
The inverter will attempt to connect to the SolarEdge server using a solaredge.com
hostname, so some method of resolving this name to the address of the server running
semonitor.py must be implemented. Details of how to do this are out of scope of this
project.
In this mode, the inverter will no longer be communicating with the SolarEdge server so monitoring services and firmware updates will no longer be available.
Ethernet passive
Data sent between an inverter and the SolarEdge monitoring portal is captured and fed into semonitor.py. In order to do this the network traffic between them must be monitored by a server on the network. This will not work if the inverter and the local server are connected to an ethernet switch. Either they could be connected through an ethernet hub, or the inverter could be connected to a dedicated network interface on a server that bridges to the local network.
Traffic may be captured to a pcap file using wireshark or tcpdump or some other program.
The resulting file must be processed through seextract.py before it is fed into
semonitor.py. In this mode, semonitor.py is reading data from a file or stdin and
isn't actually reading from the network directly.
RS485 active
The server running semonitor.py is connected to one or more inverters through a
serial port with an RS485 adapter. All inverters must be configured as RS485 slaves
and semonitor.py functions as the RS485 master. The inverter serial numbers are
specified to semonitor.py using the -s option and the -m option specifies master mode.
There cannot be another master device on the RS485 bus.
RS485 passive
The server running semonitor.py is connected to one or more inverters through a serial port with an RS485 adapter. Some other device such as an inverter or a SolarEdge Control and Communication Gateway functions as the RS485 master and semonitor.py just monitors the data on the bus. Depending on capability of the hardware running semonitor.py, there may be issues with it being able to keep up with the data rate so there may be lost or corrupted data.
RS232 active
RS232 is a point to point interface so only active mode is meaningful. While it is technically possible to capture RS232 traffic into a file and process the file using semonitor.py, that is out of scope of this discussion.
Specified commands may be sent to the inverter from semonitor.py using the -c option over any of the 3 hardware interfaces, but there are certain commands that the inverter will only accept when coming from the RS232 interface. If an inverter is in encrypted mode, commands to get the encryption key or to place the inverter in unencrypted mode must be sent over RS232.
Hardware configurations
Ethernet hardware configurations
Active
semonitor
inverter -------- server
Passive using ethernet hub
capture
inverter --- --- server
| |
ethernet
hub
|
|
|
SolarEdge
server
Passive using dual capture server interfaces
capture
inverter --------- server ----
|
|
|
SolarEdge
server
RS485 hardware configurations
Active
inverter ---
|
|
| semonitor
inverter -------- server
|
|
|
inverter ---
Passive
RS485
inverter -------- master
|
|
| semonitor
inverter -------- server
|
|
|
inverter ---
RS232 hardware configuration
semonitor
inverter -------- server
How to use it
This describes how to use the programs.
semonitor.py is a program that implements a subset of the SolarEdge protocol. It can be used to parse the performance data that has been previously captured to a file, or it can interact directly with a SolarEdge inverter over the RS232, RS485, or ethernet interface. Performance data is output to a file in JSON format.
seextract.py (removed)
seprint.py prints a subset of data in human readable form from a file containing JSON performance data.
sekey.py is used to extract the unique encryption key from an inverter.
se2state.py follows a file containing JSON performance data and outputs a JSON file that contains the current state of the inverter and optimizer values.
se2csv.py reads a file containing JSON performance data and outputs a separate comma delimited file for each device type (eg inverter, optimizer, battery) encountered that is suitable for input to a spreadsheet.
se2graphite.py and pickle2graphite.py both read a file containing JSON performance data and send it to a graphite server. se2graphite.py sends it to the graphite server's "text listener" port one metric at a time, while pickle2graphite.py sends it to the graphite server's "pickle listener" port, with multiple metrics per transmission.
semonitor.py
SolarEdge inverter performance monitoring using the SolarEdge protocol.
Usage
python semonitor.py [options] [datasource]
Arguments
datasource Input filename or serial port.
If no data source is specified, the program reads from
stdin, unless the data source type is specified as network.
If a file name is specified, the program processes the
data in that file and terminates, unless the -f option
is specified, in which case it waits for further data
to be written to the file.
If the data source corresponds to a serial port or network,
send commands to and process the data from that port or
network interface.
Options
Related Skills
node-connect
331.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
81.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
331.2kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
81.5kCommit, push, and open a PR
