Solaredge life data not reported

Hi,
I have a (new) solaredge inverter for solar panels installed. I installed the solaredge binding in openhab 3.3. The inverter is using and external meter and I’m using the private API to access the solaredge web platform.

The good news is: the connection works. The bad news is: it only reports aggregate and no live data. Here are my items, linked to the standard solaredge channels:

// ---------------------
// Inverter
// ---------------------
Group Inverter "Inverter" <inverter> (Cellars) ["Inverter"] {widgetOrder=1}

Number:Power    SolarEdge_Production_Live   "PV Production [%.2f %unit%]"  {channel="solaredge:generic:inverter:live#production"}
Number:Energy   SolarEdge_Production_Day    "PV Production Day"   {channel="solaredge:generic:inverter:aggregate_day#production"}
Number:Energy   SolarEdge_Production_Week   "PV Production Week [%.0f %unit%]"   {channel="solaredge:generic:inverter:aggregate_week#production"}
Number:Energy   SolarEdge_Production_Month  "PV Production Month [%.0f %unit%]"   {channel="solaredge:generic:inverter:aggregate_month#production"}
Number:Energy   SolarEdge_Production_Year   "PV Production Month [%.0f %unit%]"   {channel="solaredge:generic:inverter:aggregate_year#production"}

I set the debug level to TRACE, and the problem seems to be that nothign is coming back from the inverter in the HTTP call:

==> /var/log/openhab/openhab.log <==
2022-08-09 12:23:23.812 [DEBUG] [nal.handler.SolarEdgeLiveDataPolling] - polling SolarEdge live data org.openhab.binding.solaredge.internal.config.SolarEdgeConfiguration@1ea49b6[tokenOrApiKey=disguised,solarId=disguised,meterInstalled=true,usePrivateApi=true,live data pollingInterval=10,aggregate data pollingInterval=10,asyncTimeout=120,syncTimeout=120]
2022-08-09 12:23:28.934 [DEBUG] [nal.callback.AbstractCommandCallback] - received content, length: 27
2022-08-09 12:23:28.951 [DEBUG] [nal.callback.AbstractCommandCallback] - HTTP response 200
2022-08-09 12:23:28.964 [DEBUG] [nal.callback.AbstractCommandCallback] - onComplete()
2022-08-09 12:23:28.975 [DEBUG] [nal.callback.AbstractCommandCallback] - JSON String: {"siteCurrentPowerFlow":null}
2022-08-09 12:23:28.997 [DEBUG] [odel.AbstractDataResponseTransformer] - Could not determine power unit: 'null'
2022-08-09 12:23:29.008 [DEBUG] [odel.AbstractDataResponseTransformer] - Channel live#import: no value/unit provided
2022-08-09 12:23:29.021 [DEBUG] [odel.AbstractDataResponseTransformer] - Could not determine power unit: 'null'
2022-08-09 12:23:29.033 [DEBUG] [odel.AbstractDataResponseTransformer] - Channel live#export: no value/unit provided
2022-08-09 12:23:29.045 [DEBUG] [odel.AbstractDataResponseTransformer] - Could not determine power unit: 'null'
2022-08-09 12:23:29.056 [DEBUG] [odel.AbstractDataResponseTransformer] - Channel live#battery_charge: no value/unit provided
2022-08-09 12:23:29.070 [DEBUG] [odel.AbstractDataResponseTransformer] - Could not determine power unit: 'null'
2022-08-09 12:23:29.081 [DEBUG] [odel.AbstractDataResponseTransformer] - Channel live#battery_discharge: no value/unit provided
2022-08-09 12:23:29.093 [DEBUG] [odel.AbstractDataResponseTransformer] - Could not determine power unit: 'null'
2022-08-09 12:23:29.105 [DEBUG] [odel.AbstractDataResponseTransformer] - Channel live#battery_charge_discharge: no value/unit provided
2022-08-09 12:23:29.116 [DEBUG] [nternal.handler.SolarEdgeBaseHandler] - Handling channel update.
2022-08-09 12:23:29.129 [DEBUG] [nternal.handler.SolarEdgeBaseHandler] - Channel is to be updated: solaredge:generic:inverter:live#export: UNDEF
2022-08-09 12:23:29.143 [DEBUG] [nternal.handler.SolarEdgeBaseHandler] - Channel is to be updated: solaredge:generic:inverter:live#import: UNDEF
2022-08-09 12:23:29.156 [DEBUG] [nternal.handler.SolarEdgeBaseHandler] - Channel is to be updated: solaredge:generic:inverter:live#battery_charge_discharge: UNDEF
2022-08-09 12:23:29.171 [DEBUG] [nternal.handler.SolarEdgeBaseHandler] - Channel is to be updated: solaredge:generic:inverter:live#battery_discharge: UNDEF
2022-08-09 12:23:29.184 [DEBUG] [nternal.handler.SolarEdgeBaseHandler] - Channel is to be updated: solaredge:generic:inverter:live#battery_charge: UNDEF

The call to the aggregate data - to the contrary - has some payload:

2022-08-09 12:24:23.814 [DEBUG] [andler.SolarEdgeAggregateDataPolling] - polling SolarEdge aggregate data org.openhab.binding.solaredge.internal.config.SolarEdgeConfiguration@10a3898[tokenOrApiKey=disguised,solarId=disguised,meterInstalled=true,usePrivateApi=true,live data pollingInterval=10,aggregate data pollingInterval=10,asyncTimeout=120,syncTimeout=120]
2022-08-09 12:24:23.991 [DEBUG] [nal.callback.AbstractCommandCallback] - received content, length: 4589
2022-08-09 12:24:24.012 [DEBUG] [nal.callback.AbstractCommandCallback] - HTTP response 200
2022-08-09 12:24:24.026 [DEBUG] [nal.callback.AbstractCommandCallback] - onComplete()
2022-08-09 12:24:24.044 [DEBUG] [nal.callback.AbstractCommandCallback] - JSON String: {"fieldStartDate":1657110102000,"fieldEndDate":1660089599000,"dataStartDate":1660003200000,"dataEndDate":1660089599000,"utilizationMeasures":{"production":{"value":6.611,"unit":"kWh"}},"isMSCMode":true,"measurementUnit":"W","systemProduction":

Any idea on what I need to change, to get the life data back as well?

Could this be related to used bandwidth for upload of data ?
According to

there is a low and a high bandwidth mode. In low bandwidth mode data upload rate is every four hours.

As I do not have any experience with this product this might not be the root cause.

Hi Wolfgang,
well, it could be, of course, related to that.

However, when I log in manually into the solaredge app, I can see both the live power (red) and the aggregated energy (green). So I think, the data is present in the inverter and it is also uploaded to the se server. The issue seems to be with the request the binding makes to the API of the se server, rather.

I’m not convinced this is an OH issue.

My SolarEdge has been properly reporting live values for several years, so the binding works. The api call you show still returns a 200 code which means that it’s a valid call. That the problem is the return payload, I think, means this is really outside of OH.

My guess is that it is something about how SolarEdge has your api access/account configured, and you might have to contact them.

Thanks Justin,
I wasn’t suggesting it’s an OH issue. From the payload that comes back in the binding JSON String: {"siteCurrentPowerFlow":null} it’s obvious that the binding isn’t getting back what it should from the SE server. I’m unable to say, why that is, but I have no possibility to influence what the OH API returns and what not, in the configuration of the inverter or the web interface.

Can you suggest a contact at SE or, failing that, a link to the API’s technical documentation, the binding is built on?

The panels and inverter was installed by a third party investor and he is being paid by the government subsidies for renewable production. The investor manages the inverter (interface) remotely. They were happy to provide me with an API key and told me, nothing has been configured different (hidden information, blocked access etc.). It’s also strange that the aggregate data is returned, while the current power data is not.

Alas, I cannot. I remember that I did find an API doc on their website once, but I found the binding worked so well I didn’t need it any more. I assume that they’ve got a support or contact us section on their main website.

Dirk_Albrecht,

I have the same problem the agregate data is available but the actual Power is NULL. Were you able to resolve this?

Best regards, Herman

Herman,

I suppose you are using the privateAPI with no meter installed?

  • usePrivateApi (optional)
    can be set to true to use the private API. Private API has no limit regarding query frequency but is less stable. Private API will only gather live data if a meter is available. The official public API has a limit of 300 queries per day but should be much more reliable/stable. Set this to true when using token retrieved from browser in tokenOrApiKey. See also meterInstalled. (default = false

I think that’s the problem. As for the solution, I don’t have a good one for the moment. I have increased the polling frequency on the aggregate data (to once every 6 mins), and I’m using the difference between state and previous state (multiplied by 10) as a proxy for the current power.

That’s obviously a dirty workaround. I’m wondering, why there is no possibility to access the inverter data directly, to start with.

Thanks for the reply. I will switch back to the normal API then.

I believe to get that sweet realtime data…you need to be connected via ethernet to the Inverter and use the modbus plugin.At least for my 2017 inverter.

It’s on my to-do list but have put it off due to a tricky cable run.