solaredge
solaredge copied to clipboard
Push interval
Hi,
I've read somewhere that there is a way to change the interval the solaredge pushes data over serial? Is this true and does somebody know how to do this? Or/and is there a way to pull the inverter and/or optimizer data via rs485?
Regards, Joris
Hey @vandalon I'm also pulling via RS485, and since the RS485/semonitor is the master, it probes the inverter quite often. The inverter however only responds whenever it has data. Some data for example is only available after an interval of 300 seconds.
When the inverter is the master, it pushes at these predetermined intervals.
What exactly are you after/trying to accomplish?
Hi oliV3r, thanks for the quick reply!
I would like to read data more often than every 300 minutes. It would be great to have at least once a minute the power production information of the inverter.
Have a look at this comment to issue #8 by me at 2 Apr 2016 00:16 CEST Disclaimer: totally untested!
EDIT: I see GitHub is not unhiding that comment if you just click the link... gah. I'll quote verbatim.
The commands we have seen so far are called 'SDP Packets'. We're now going into 'PLC Packets'. When the config tool sends out PLC Packets to the inverter, they are wrapped into the
0218
SDP Packet (PROT_CMD_VENUSMNGR_KA_DATA_SEND
). The contents of the SDP Packet: a 16-bit integer specifying the length of the PLC data, followed by the data itself.//Contents of 0218 SDP packet UINT16 dataSize; UINT8 data[dataSize]; //The data consists of a PLC packet
With that out of the way, we now turn our attention to the PLC packet format (the
data
member above).//Contents of PLC packet UINT8 dataSize; UINT8 opCode; UINT8 data[dataSize]; UINT16 checksum;
So, what exactly is the config tool sending to control the telemetry rate?
//Contents of PLC packet sent by config tool to control the telemetry rate UINT8 dataSize = 14; UINT8 opCode = 0x1A; //PLC_CMD_SET_VOLATILE; i.e., set volatile parameters UINT32 sourceAddress = inverter_id; //Either with or without the extra bit UINT32 destinationAddres = 0xffffffff; //Broadcast to all devices UINT16 paramIndex = 0x3D; //MERCURY_PARAM_TELEM_AVG_TIME_SEC UINT32 paramValue = 40; //Number of seconds (300=normal, 40=fast for 1phase, 80=fast for 3phase) UINT16 checksum = ...; //The usual type of checksum, init=23130 as usual
I actually saw that comment before but I did not get it working effectively. Mostly because of lack of knowledge I think 😊
Also, Mercury are the optimizers. I would like to get real time data from the inverter. If at all possible :)
I have test this command and it seems not to work with newer inverters and optimizers. I have send this command very often to one optimizer and finally he doesn't send no more data. After a power cycle of the inverter he finally came back.