SolarEdge solar panels support

I did, I’ve mirrored the port on my switch, to which the inverter is connect, to another port where a raspberry pi is connected. I’m dumping the traffic the inverter sends/receives using tcpdump, piping it into a Python script.

The traffic is TLS encrypted… but that’s not always the case. Just after installation (or after factory reset), the Solar Edge will communicate un-encrypted. After 24-48 hours ish, an encryption key will be send to the inverter by the Solar Edge platform. Since I was listening already at the time, that key was intercepted as well.

So now I am able to keep listening in, even when it is in an encrypted state.

3 Likes

+1 for this addon

Using the current solution using jsonrest sensors, I run into the issue that the values are stored with the timestamp on which they are received - instead of the “lastUpdateTime” timestamp. This causes the values to shift in time.

Normally this is not a big issue, but I use the “currentPower” value to calculate the net consumption of our house:

[inverter production] - [smart meter production] + [smart meter consumption]

Because the SolarEdge values have the wrong timestamps, this calculation provides wrong values which sometimes even results into negative net consumption. Does anyone have a workaround for this?

See: https://gathering.tweakers.net/forum/list_messages/1721977

Yes!! :ok_hand: Smart meter and SolarEdge using REST up and running.

My sensor config in configuration.yaml:

# Sensors
sensor:
  - platform: yr
  - platform: systemmonitor
    resources:
      - type: disk_use_percent
        arg: /home
      - type: memory_free
  - platform: dsmr
    port: /dev/ttyUSB0
    dsmr_version: 4
  - platform: rest
    name: solaredge_overview
    scan_interval: 400
    json_attributes:
      - overview
    value_template: '{{ value_json.states }}'
    resource: https://monitoringapi.solaredge.com/site/xxx/overview?api_key=xxxx
  - platform: template
    sensors:
      solaredge_currentpower:
        friendly_name: 'SolarEdge Current Power Production'
        value_template: '{{ states.sensor.solaredge_overview.attributes.overview.currentPower.power | float | round(2) }}'
        unit_of_measurement: 'W'
      solaredge_lastdayenergy:
        friendly_name: 'SolarEdge Last Day Energy Production'
        value_template: '{{ (states.sensor.solaredge_overview.attributes.overview.lastDayData.energy | float / 1000) | round(2) }}'
        unit_of_measurement: 'kWh'
      solaredge_lastmonthenergy:
        friendly_name: 'SolarEdge Last Month Energy Production'
        value_template: '{{ (states.sensor.solaredge_overview.attributes.overview.lastMonthData.energy | float / 1000) | round(2) }}'
        unit_of_measurement: 'kWh'
      solaredge_lastyearenergy:
        friendly_name: 'SolarEdge Last Year Energy Production'
        value_template: '{{ (states.sensor.solaredge_overview.attributes.overview.lastYearData.energy | float / 1000000) | round(2) }}'
        unit_of_measurement: 'MWh'
      solaredge_lifetimeenergy:
        friendly_name: 'SolarEdge Life Energy Production'
        value_template: '{{ (states.sensor.solaredge_overview.attributes.overview.lifeTimeData.energy | float / 1000000) | round(2) }}'
        unit_of_measurement: 'MWh'
6 Likes

@frenck Can you share a more detailed write up of this? Our install is slated for November. I can mirror the traffic in my edgerouter and…just setup packet capture for 48h? Then hunt for a specific something?

I don’t want to intercept such that their platform doesn’t work I just want to spy on the data by mirroring the port.

2 Likes

Can you share the steps taken to get that result please?

There is an installation summary on the website of solaredge monitoring. Here you can find the site id of your installation. Send a request to [email protected] for an API key based on your site ID. The site ID (xxx) and API key (xxxx) can be entered in the code that I have shared:

resource: https://monitoringapi.solaredge.com/site/xxx/overview?api_key=xxxx

2 Likes

But this appears not to give as much data as intercepting the packets the device sends to its monitoring server?

Has anyone started working on a standard component for SolarEdge?

Just used your rest config and worked for me, tnx!

Just jumped into this and would like to say thanks for the effort to make this happen. Works very nice with the jsonrest.
Is there any way to make the queries stop for a certain period of time? I would rather use up the 300 api calls only daytime as the panels do not produce any power night time. Thanks.

1 Like

Hi there, received my solar panels earlier this year with also a SolarEdge setup. Have been working on a SolarEdge component to integrate the setup in my Home Assistant installation. The component has been merged into the development branch. For now it only supports the overview request but I will add more sensors in the near future. You can find some more information at https://github.com/home-assistant/home-assistant/pull/18846. Will post the link to the component page when it has been added to the next release. Any input / questions / feedback is of course welcome.

11 Likes

Hi @GidoHakvoort, that would be very nice! We will recieve our SolarEdge system in februari. Not sure how to implement it right now, so a component would be very nice!

From release 0.85 Home Assistant has a Solar Edge component! Check it out at: https://www.home-assistant.io/components/sensor.solaredge/. I’m working on an update which will add support for site details and equipment overview. Feedback is of course always welcome.

5 Likes

Thanks for making an official component happen, would be nice if there was at least an option to only poll solaredge when the sun is up.

1 Like

My first contribution just to thank! It would be great to have the possibility to access to the house consumption also.

1 Like

Hi @divirg, if you have something like a digital/smart meter you should be able to get details about your energy consumption. Have a look at the DSMR or the Duke Energy sensors.

I have it actually embedded in my Solaredge device. It’s an option. It would be “just” a matter of decoding additional json values.

For instance, my current output:
{"siteCurrentPowerFlow":{"updateRefreshRate":3,"unit":"kW","connections":[{"from":"PV","to":"Load"},{"from":"GRID","to":"Load"}],"GRID":{"status":"Active","currentPower":0.78},"LOAD":{"status":"Active","currentPower":1.31},"PV":{"status":"Active","currentPower":0.53}}}

which results in:
Cattura

2 Likes