Solaredge inverter plug-in Modbus TCP

Please use template to report bugs and problems. Post here your questions when not sure where else to post
Only for bugs in the Domoticz application! other problems go in different subforums!

Moderators: leecollings, remb0

Forum rules
Before posting here, make sure you are on the latest Beta or Stable version.
If you have problems related to the web gui, clear your browser cache + appcache first.

Use the following template when posting here:

Version: xxxx
Platform: xxxx
Plugin/Hardware: xxxx
Description:
.....

If you are having problems with scripts/blockly, always post the script (in a spoiler or code tag) or screenshots of your blockly

If you are replying, please do not quote images/code from the first post

Please mark your topic as Solved when the problem is solved.
Xenon
Posts: 5
Joined: Thursday 09 March 2017 9:05
Target OS: Raspberry Pi / ODroid
Domoticz version:
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by Xenon »

I have the same issue here. My guess is that solar panel power is not a measured value, but a calculated (by SolardEdge) value, and therefore not available for Domoticz to feed in. Domoticz expects Grid Power / P1 values to be in kWh (which is Watt x Hour) instead of actual power consumption in W (which is in Watts only), like actual Battery Power and Solar Panels Power are. So you can't simply add nor substract values which are not presented in the exact same units (Wh is not equal to W).

For example, if I turn on an electical 1000W heater for an hour, it will consume 1000W x 1h = 1kWh.
However, if I turn on the exact same heater for only half an hour, it will consume 1000W x 0.5h = 0.5kWh.
And if tumed on for only 6 minutes, you'll end up with a consumption of 1000W x 0.1h = 0.1kWh.
Nevertheless, in all situations it will actually consume 1kW to generate heat. This indicates why you can't mix up / add / subtract values in (k)W and (k)Wh.

Domoticz' energy dashboard presents Grid Power in W, but allows input devices for Grid Power in kWh only, which appears to be incorrect imho.
jannl
Posts: 673
Joined: Thursday 02 October 2014 6:36
Target OS: Raspberry Pi / ODroid
Domoticz version: 2022.2
Location: Geleen
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by jannl »

More or less my lua script does the trick now.
Only the power to the ev charger is unknown, mixing up the computation.

The only solution I see so far is diving into Python to create a plugin that at least reads the data from the charger, a Solaredge charger (Keba P30 under the hood). For the latter one a python script is already present I found. So now I need to do the magic myself ;-)

But this will take some time I am afraid.
JayDotR
Posts: 9
Joined: Thursday 02 January 2025 21:15
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: Lux
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by JayDotR »

I have the plugin running since 2021 on a Raspberry Pi4 with the following global config :
1° Domoticz is beta trunk (since 2020

2° Python is 3.9.2

3° Operating System is
Linux <hostname> 6.6.66-v8+ #1830 SMP PREEMPT Mon Dec 16 14:40:26 GMT 2024 aarch64 GNU/Linux

4° modules installed by pip3
pymodbus 3.0.2
modbus-proxy 0.6.8
solaredge-modbus 0.7.2

5° Manual added plugin via Github (not the master, but the meter branch in release 2.0.4), where in late 2023 I helped him with my installation data to fine-tune and validate the plugin
# Source: https://github.com/addiejanssen/domotic ... tcp-plugin

On my Raspberry, I am using the Modbus Proxy Python plugin in order to bypass the uniqueness to connect to the Inverters on their Modbus socket ...
On Domoticz, the Port of the ModBus Proxy is used to connect to SolarEdge (following)

6° SolarEdge installation
- 38 Aleo Solar 305W Panels with SolarEDGE Performance Optimizers
- connected to a SolarEdge 3phase SE16K with ModBus activated (Follower)
- also part of the installation : a SolarEdge SE6000H Monophase with Modbus activated (Master) to convert AC back to DC Storage on a LG 16kWh Battery
- to guide the electric flows : The SolarEdge Meter
- as my Energy Provider forced me : a second P1 Meter on the Solar Side of my House, but the entire SolarEdge installation is 'behind' the 2nd P1 Meter ;).

To fine-tune the real Energy Flows in my house, an additional dzvents Script calculates the Own Usage per Device Update based on realtime data ...
--
Domoticz Beta on Raspberry 3b (2x), and 4 (2x) on Rasbian Bullseye / Raspbian Bookworm / OSMC
Using: PiHole, SolarEdge Modbus, Sainlogic / Weather Underground, MQTT, Fritzbox, P1 Meter(s), dzvents Scripting
jannl
Posts: 673
Joined: Thursday 02 October 2014 6:36
Target OS: Raspberry Pi / ODroid
Domoticz version: 2022.2
Location: Geleen
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by jannl »

Not sure what your point is, because my setup differs a lot from yours.

I also use a Lua script to compute the solar energy, but because I do not know what the power delivered to the charger is, I have a gap for now.

I use lua iso dzvents, because I find it much more straight forward as a more or less old-skool programmer.
JayDotR
Posts: 9
Joined: Thursday 02 January 2025 21:15
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: Lux
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by JayDotR »

My Setup was a reply to the following open question
jannl wrote: Monday 31 March 2025 13:22 Still wondering how the Solaredge app does this.

Anyone got this working with an inverter, battery, charger and inline-meter?
So from the config part of SolarEdge, we are running almost the same (except I have a monophased SE6000H to connect a High-Voltage (410V) Battery on DC. As the battery was installed 5 years after the Panels + SE16K, the replacement of the initial inverter with a model being able to connect directly a Battery was no option :-/

Issues I encountered before being able to read all Data from (Battery, Battery Inverter, Inline Meter and Roof Inverter) and which could help to get readings
a) The Modbus has to be activated on the SolarEdge Inverter (if you are unsure what you are changing on the Setup of the Inverter, ask a professionnal to confirm) - this is normally accessible via the WIFI Connection in Pairing Mode. However, only 1 concurrential connection to the local Socket of your Inverter is possible ...
b) Depending on your Config, you have to note down the Modbus ID of your Inverter and to verify (if multiple inverters) which one is Master and which one is follower
In order to bypass technical limitations of the Socket on the Inverter, use the Modbus Proxy on your Raspberry. The Proxy opens the connection to the Inverter(s) and keeps them open. Another advantage is you can use multiple clients to connect to the same inverter

Config file for modbus-proxy

Code: Select all

pi@raspberry:/ $ more /srv/modbus-proxy/config.yml 
devices:
- modbus:
    url: <IP of the 1st Inverter>:1502
    timeout: 10
    connection_time: 0.1
  listen:
    bind: 0:2501
- modbus:
    url: <IP of the 2nd Inverter>:1502
    timeout: 10
    connection_time: 0.1
  listen:
    bind: 0:2502
Use the Meter Branch of the Plugin (git clone ... )
In the Hardware Config part :

Code: Select all

for the 1st Inverter (in my case the follower) : 
- try with the Modbus ID you have seen in the Pairing Mode / local setup (in my case : ID =3)
- Hardware Components = Inverter (only)
- use IP / Port of your Raspberry ;)
- Add Missing devices : yes
and then for the master device

Code: Select all

for the 1st Inverter (in my case the follower) : 
- try with the Modbus ID you have seen in the Pairing Mode / local setup (in my case : ID =1)
- Hardware Components = Inverter+Battery+Meter
- use IP / Port of your Raspberry ;)
- Add Missing devices : yes
Once this done, you should see a lot of devices.

In order to get to your question "what the power delivered to the charger" is, I understood you're meaning the charge/discharge rate of your battery ?

This could be the Device like
SolarEdge WR Batt 000300DE 222 SolarEdge WR Batt - Instant (W) Usage Electric -xxx Watt

Hoping this part could help you advancing ?
--
Domoticz Beta on Raspberry 3b (2x), and 4 (2x) on Rasbian Bullseye / Raspbian Bookworm / OSMC
Using: PiHole, SolarEdge Modbus, Sainlogic / Weather Underground, MQTT, Fritzbox, P1 Meter(s), dzvents Scripting
jannl
Posts: 673
Joined: Thursday 02 October 2014 6:36
Target OS: Raspberry Pi / ODroid
Domoticz version: 2022.2
Location: Geleen
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by jannl »

Thanks, but that are the things I already did.

The value I van not find is the number of watts coming from the solar panels, for some reason that needs to be computed I guess.
telewy
Posts: 7
Joined: Tuesday 10 January 2017 13:52
Target OS: Linux
Domoticz version:
Location: Poland
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by telewy »

Current inverter Wats is avaiable.
Total energy e.g. Watts per hour must be calculated.
jannl
Posts: 673
Joined: Thursday 02 October 2014 6:36
Target OS: Raspberry Pi / ODroid
Domoticz version: 2022.2
Location: Geleen
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by jannl »

Inverter power is wrong value, propably only works when no battery or charger is present
telewy
Posts: 7
Joined: Tuesday 10 January 2017 13:52
Target OS: Linux
Domoticz version:
Location: Poland
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by telewy »

OK, sure, I don't have battery
JayDotR
Posts: 9
Joined: Thursday 02 January 2025 21:15
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: Lux
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by JayDotR »

jannl wrote: Friday 04 April 2025 8:13 Thanks, but that are the things I already did.

The value I van not find is the number of watts coming from the solar panels, for some reason that needs to be computed I guess.
on the ModBus Plugin, in my case I have an Device, but I doubt that the DeviceID's will be the same on each inverter which gives the AC Instant Watts (1.48 Watt is now at 21 o'clock ..)

Code: Select all

sqlite> select * from DeviceStatus where id = 1020;
ID|HardwareID|DeviceID|Unit|Name|Used|Type|SubType|SwitchType|Favorite|SignalLevel|BatteryLevel|nValue|sValue|LastUpdate|Order|AddjValue|AddjMulti|AddjValue2|AddjMulti2|StrParam1|StrParam2|LastLevel|Protected|CustomImage|Description|Options|Color|OrgHardwareID
1020|28|001C000D|13|WR Inverter Roof AC - Instant (W)|1|248|1|0|1|12|255|0|1.4833333333333334|2025-04-04 20:01:33|998|0.0|1.0|0.0|1.0|||0|0|0||||0
If you are looking for the Watts of the Panels, perhaps the dzVents / lua part could help you. You need a Dummy Hardware ID and to create for
- each String a sensor
- each Inverter a Sensor
- each Panel a sensor
- beware : SolarEdge API permits only 300 calls per Day, so a realistic value could be a timer on each 10 minutes or less if you are already using the API for other system calls ... (I use 30' as Modbus is far more accurate)
- you are required to use the Names of the Panels, i.e. "panel 1.1.10"
- based on this, you could add another lua/dzvents to calculate the accumulated power of the panels on your needs

Code: Select all

--------------------------------------------------------------------------------
-- Config
local enableDebugPrint = true
local isDecimalComma = true -- true for 1.000,00 :: false for 1,000.00 
local username = "<your e-mail>"
local password = "<your account password>"
local siteID = "<your site-id from SolarEdge>"

local vScriptName        = 'SolarEdge_API'
local vScriptVersion     = '1.01'

local function LogDebug(domoticz, log)
  if enableDebugPrint then
    print(string.format('dzRequestSolarInfo : %s', log))
  end
end


local function AddReportData(json, component)
  local id = tostring(component.id)
  if json.reportersData[id] then
    component.DayWh = json.reportersData[id].unscaledEnergy
  end
end


local function GetOptimizerData(json, component)
  if component.data and component.data.type == "POWER_BOX" then
    local optimizer = component.data
    AddReportData(json, optimizer)
    return optimizer
  end
end


local function GetStringData(json, info, component)
  if component.data and component.data.type == "STRING" then
    local powerstring = component.data
    AddReportData(json, powerstring)
    powerstring.Optimizers = {}
    for _, child in pairs(component.children) do
      local optimizer = GetOptimizerData(json, child)
      if optimizer then
        table.insert(powerstring.Optimizers, optimizer)
        table.insert(info.Optimizers, optimizer)
      end
    end
    return powerstring
  end
end


local function GetInverterData(json, info, component)
  if component.data and (component.data.type == "INVERTER" or component.data.type == "INVERTER_3PHASE") then
    local inverter = component.data
    AddReportData(json, inverter)
    inverter.Strings = {}
    for _, child in pairs(component.children) do
      local string = GetStringData(json, info, child)
      if string then
        table.insert(inverter.Strings, string)
        table.insert(info.Strings, string)
      end
    end
    return inverter
  end
end


local function RequestLogical(domoticz)
    
    local authorization = string.format("%s:%s", username, password)
    authorization = string.format("Basic %s", domoticz.utils.toBase64(authorization))

    local request = {}
    request.url = string.format("https://monitoring.solaredge.com/solaredge-apigw/api/sites/%s/layout/logical", siteID) 
    request.headers = { ['Authorization'] = authorization }
    request.method = 'GET'
    request.callback = 'ResponseLogical'

    domoticz.openURL(request)
end


local function RequestSystemData(domoticz, itemID)
  if itemID == nil then return end

  local request = {}
  request.url = string.format("https://monitoringpublic.solaredge.com/solaredge-web/p/publicSystemData?reporterId=%d&type=panel&activeTab=0&fieldId=%s&isPublic=true&locale=en_US", itemID, siteID) 
  request.method = 'GET'
  request.callback = 'ResponseSystemData'

  domoticz.openURL(request)
end


local function UpdateDevice(domoticz, deviceType, device)
    LogDebug(domoticz, device)
    LogDebug(domoticz, deviceType)
  device.Name = device.Name or device.name
  device.Name = string.gsub(device.Name, "Module", "Panel")

  if not domoticz.utils.deviceExists(device.Name) then
    LogDebug(domoticz, string.format('to monitor create an dummy device type="Electric (Instant+Counter) name="%s"', device.Name))
    return
  end

  local lastData = domoticz.data.LastData[device.Name]
  if lastData == nil then
    domoticz.data.LastData[device.Name] = {Watt = device.Watt, DayWh=device.DayWh}
    RequestSystemData(domoticz, device.id)
    return
  end

  local lastWatt = lastData.Watt or 0
  local lastDayWh = lastData.DayWh or 0
  device.Watt = device.Watt or lastWatt
  device.DayWh = device.DayWh or lastDayWh

  if device.DayWh == lastDayWh and device.Watt == lastWatt then
    return -- No new data
  end
  
  RequestSystemData(domoticz, device.id)

  if device.DayWh < lastDayWh  then
    lastDayWh = 0 -- Most likely a new day
  end

  local dzDevice = domoticz.devices(device.Name)
  local addWh = device.DayWh - lastDayWh
  local newWh = dzDevice.WhTotal + addWh

  if enableDebugPrint then -- and (device.Name == "Panel 1.0.1" or device.Name == "Panel 1.0.4" or device.Name == "Inverter 1") then
    LogDebug(domoticz, string.format('----- %s "%s" ----------------------------------', deviceType, device.Name))
    LogDebug(domoticz, string.format('device.DayWh=%0.3f  lastDayWh=%0.3f  device.Watt=%0.3f  lastWatt=%0.3f', device.DayWh, lastDayWh, device.Watt, lastWatt))
    LogDebug(domoticz, string.format('device.DayWh - lastDayWh = addWh => %0.3f - %0.3f = %0.3f', device.DayWh, lastDayWh, addWh))
    LogDebug(domoticz, string.format('old.WhTotal + addWh = newWh => %0.3f + %0.3f = %0.3f', dzDevice.WhTotal, addWh, newWh))
    LogDebug(domoticz, string.format('OldTotal=%0.3f   DomoticzToday=%0.3f   lastDayWh=%0.3f   PanelToday=%0.3f   newWh=%0.3f', dzDevice.WhTotal, dzDevice.WhToday, lastDayWh, device.DayWh, newWh))
    LogDebug(domoticz, string.format('%s "%s" Today = %0.2f Wh   Now = %0.2f W', deviceType, device.Name, device.DayWh, device.Watt))
  end
  dzDevice.updateElectricity(device.Watt, newWh)
  domoticz.data.LastData[device.Name] = {Watt = device.Watt, DayWh=device.DayWh}
end


local function OnLogicalResponse(domoticz, item)
    local info = { Inverters = {}, Strings = {}, Optimizers = {} }
    for _, child in pairs(item.json.logicalTree.children) do
      local inverter = GetInverterData(item.json, info, child)
      if inverter then
        table.insert(info.Inverters, inverter)
      end
    end
    
    for _, device in ipairs(info.Inverters) do
      UpdateDevice(domoticz, "Inverter", device)
    end
    
    for _, device in ipairs(info.Strings) do
      UpdateDevice(domoticz, "String", device)
    end
    
    for _, device in ipairs(info.Optimizers) do
      UpdateDevice(domoticz, "Optimizer", device)
    end
end


local function OnSystemDataResponse(domoticz, item)
    
    local reporterId = tonumber(string.match(item.data, "var reporterId = (.-);") or "0")
    local systemData = string.match(item.data, "SE%.systemData = (.-);") or "{}"
    local json = domoticz.utils.fromJSON(systemData)
    LogDebug(domoticz, json)
    local device = {}
    device.Name = json.description

    local powerstring = json.measurements["Power [W]"] or json.measurements["P AC [W]"]
    if powerstring == nil then
        return
    end
    powerstring = string.gsub(powerstring, ',', '')
    device.Watt = tonumber(powerstring)
    UpdateDevice(domoticz, "", device)
    LogDebug(domoticz, string.format("%d %s : %0.3f Watt", reporterId, device.Name, device.Watt))
end


--[[ ======================================================================== ]]
local interface = {}
interface.active = true

interface.on = {}
-- interface.on.timer = {'every hour between 59 minutes before sunrise and 59 minutes after sunset'}
-- interface.on.timer = {'every 15 minutes at civildaytime'}
interface.on.timer = {'every 30 minutes'}
interface.on.httpResponses = {'ResponseLogical', 'ResponseSystemData'}

interface.data = {}
interface.data.LastData = { initial = {} }

function interface.execute(domoticz, item)
    if (item.isTimer) then
      LogDebug(domoticz, os.date("%Y-%m-%d",os.time()) .. "-=[ Start HTTP Request ]======================================")
      RequestLogical(domoticz)
    elseif (item.isHTTPResponse) then
      LogDebug(domoticz, os.date("%Y-%m-%d",os.time()) .. "-=[ Start HTTP Response ]=====================================")
      if (item.ok) then
        if item.callback == "ResponseLogical" then
          OnLogicalResponse(domoticz, item)
        elseif item.callback == "ResponseSystemData" then
          OnSystemDataResponse(domoticz, item)
        end
      else
        LogDebug(domoticz, string.format("Error in HTTP request. Error %d - %s", item.statusCode, item.statusText))
      end
    end

    LogDebug(domoticz, os.date("%Y-%m-%d",os.time()) .. "-=[ End ]=====================================================")
end

return interface

--
Domoticz Beta on Raspberry 3b (2x), and 4 (2x) on Rasbian Bullseye / Raspbian Bookworm / OSMC
Using: PiHole, SolarEdge Modbus, Sainlogic / Weather Underground, MQTT, Fritzbox, P1 Meter(s), dzvents Scripting
User avatar
gizmocuz
Posts: 2537
Joined: Thursday 11 July 2013 18:59
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: Top of the world
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by gizmocuz »

Question, why not use the Domoticz build in support for Solaredge hardware?
Quality outlives Quantity!
jannl
Posts: 673
Joined: Thursday 02 October 2014 6:36
Target OS: Raspberry Pi / ODroid
Domoticz version: 2022.2
Location: Geleen
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by jannl »

For me the update frequency. The api calls are way to slow. Even the app is way slower compared to the modbus updates.

Basically the energy dashboard is useless when using the solaredge api updates.

Or are we talking about difgerent things?
JayDotR
Posts: 9
Joined: Thursday 02 January 2025 21:15
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: Lux
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by JayDotR »

jannl wrote: Saturday 05 April 2025 16:50 For me the update frequency. The api calls are way to slow. Even the app is way slower compared to the modbus updates.

Basically the energy dashboard is useless when using the solaredge api updates.

Or are we talking about difgerent things?
I understand your concern : indeed the API is far, far too slow here on Updates for being used on the Energy Dashboard.

As this Dashboard is in my opinion a nice Gadget - I did not put my efforts to get a perfect solution, but my result still looks acceptable for my needs :).
P1/Grid : I am using the P1 SMART meter which is read via USB/RJ11 as Slimme Meter on the Sagecom D210 of the Grid Provider
Solar : I am using the Reading I get via Modbus from the Roof Inverter (connected to the Panels) - used Register is the "Generated kWh of the Inverter"
Battery : I am using the Reading I get via Modbus from the Battery Inverter - used Register is the "Generated kWh of the Inverter"
Battery SOC : the Reading from the Battery via Modbus on the SOC
For the 3 custom widgets, I am using (as idea)
a) Solar Radiation in Watt per square Meter from my Weather Station
b) Via DzVents generated : Sum of kWh the House used, calculated from different Devices (Solar Production, Battery Charge and Discharge, Grid Import/Export)
c) via dzVents as well : Amount of kWh of Solar Production used by myself
--
Domoticz Beta on Raspberry 3b (2x), and 4 (2x) on Rasbian Bullseye / Raspbian Bookworm / OSMC
Using: PiHole, SolarEdge Modbus, Sainlogic / Weather Underground, MQTT, Fritzbox, P1 Meter(s), dzvents Scripting
jannl
Posts: 673
Joined: Thursday 02 October 2014 6:36
Target OS: Raspberry Pi / ODroid
Domoticz version: 2022.2
Location: Geleen
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by jannl »

The inverter you are using is a Solaredge? I do not see that register I think.
JayDotR
Posts: 9
Joined: Thursday 02 January 2025 21:15
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: Lux
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by JayDotR »

jannl wrote: Sunday 06 April 2025 15:06 The inverter you are using is a Solaredge? I do not see that register I think.
Yes, I have two of them : For the Solar Installation, a 3-phase SE16K and on the battery Side a mono-phased SE6000H.

I activated logging (Info [checked], LogLevel [verbose/verbose+]) and hereby the readings I see (NB : attention, volumetry of the readings can get quite fast very large, perhaps change the standard reading interval on less aggressive - otherwise it could be the log is not able to follow the load :lol: )
On the SE16K -> 2025-04-06 20:49:06.209 "energy_total": 68621048, (to divide by 1000 to get the kWh)
On the SE6000H -> 2025-04-06 20:53:42.591 "energy_total": 5880620, (to divide by 1000 to get the kWh)

Code: Select all

2025-04-06 20:49:06.209 SolarEdge WR Roof: device: Inverter values: {
2025-04-06 20:49:06.209 "c_id": "SunS",
2025-04-06 20:49:06.209 "c_did": 1,
2025-04-06 20:49:06.209 "c_length": 65,
2025-04-06 20:49:06.209 "c_manufacturer": "SolarEdge",
2025-04-06 20:49:06.209 "c_model": "SE16K-RW000BNN4",
2025-04-06 20:49:06.209 "c_version": "0004.0019.0521",
2025-04-06 20:49:06.209 "c_deviceaddress": 3,
2025-04-06 20:49:06.209 "c_sunspec_did": 103,
2025-04-06 20:49:06.209 "c_sunspec_length": 50,
2025-04-06 20:49:06.209 "current": 0,
2025-04-06 20:49:06.209 "l1_current": 0,
2025-04-06 20:49:06.209 "l2_current": 0,
2025-04-06 20:49:06.209 "l3_current": 0,
2025-04-06 20:49:06.209 "current_scale": -2,
2025-04-06 20:49:06.209 "l1_voltage": 3980,
2025-04-06 20:49:06.209 "l2_voltage": 3976,
2025-04-06 20:49:06.209 "l3_voltage": 3978,
2025-04-06 20:49:06.209 "l1n_voltage": 2305,
2025-04-06 20:49:06.209 "l2n_voltage": 2298,
2025-04-06 20:49:06.209 "l3n_voltage": 2290,
2025-04-06 20:49:06.209 "voltage_scale": -1,
2025-04-06 20:49:06.209 "power_ac": 0,
2025-04-06 20:49:06.209 "power_ac_scale": 0,
2025-04-06 20:49:06.209 "frequency": 4998,
2025-04-06 20:49:06.209 "frequency_scale": -2,
2025-04-06 20:49:06.209 "power_apparent": 0,
2025-04-06 20:49:06.209 "power_apparent_scale": 0,
2025-04-06 20:49:06.209 "power_reactive": 0,
2025-04-06 20:49:06.209 "power_reactive_scale": 0,
2025-04-06 20:49:06.209 "power_factor": 0,
2025-04-06 20:49:06.209 "power_factor_scale": 0,
2025-04-06 20:49:06.209 "energy_total": 68621048,
2025-04-06 20:49:06.209 "energy_total_scale": 0,
2025-04-06 20:49:06.209 "current_dc": 0,
2025-04-06 20:49:06.209 "current_dc_scale": 0,
2025-04-06 20:49:06.209 "voltage_dc": 21,
2025-04-06 20:49:06.209 "voltage_dc_scale": -1,
2025-04-06 20:49:06.209 "power_dc": 0,
2025-04-06 20:49:06.209 "power_dc_scale": 0,
2025-04-06 20:49:06.209 "temperature": 0,
2025-04-06 20:49:06.209 "temperature_scale": -2,
2025-04-06 20:49:06.209 "status": 2,
2025-04-06 20:49:06.209 "vendor_status": 0,
2025-04-06 20:49:06.209 "rrcr_state": 0,
2025-04-06 20:49:06.209 "active_power_limit": 100,
2025-04-06 20:49:06.209 "cosphi": 0,
2025-04-06 20:49:06.209 "commit_power_control_settings": 0,
2025-04-06 20:49:06.209 "restore_power_control_default_settings": 0,
2025-04-06 20:49:06.209 "reactive_power_config": 0,
2025-04-06 20:49:06.209 "reactive_power_response_time": 200,
2025-04-06 20:49:06.209 "advanced_power_control_enable": 1,
2025-04-06 20:49:06.209 "export_control_mode": 0,
2025-04-06 20:49:06.209 "export_control_limit_mode": 0,
2025-04-06 20:49:06.209 "export_control_site_limit": 0
2025-04-06 20:49:06.209 }

Code: Select all

2025-04-06 20:53:42.591 SolarEdge WR Batt: device: Inverter values: {
2025-04-06 20:53:42.591 "c_id": "SunS",
2025-04-06 20:53:42.591 "c_did": 1,
2025-04-06 20:53:42.591 "c_length": 65,
2025-04-06 20:53:42.591 "c_manufacturer": "SolarEdge",
2025-04-06 20:53:42.591 "c_model": "SE6000H-RWS00BNO4",
2025-04-06 20:53:42.591 "c_version": "0004.0022.0044",
2025-04-06 20:53:42.591 "c_deviceaddress": 1,
2025-04-06 20:53:42.591 "c_sunspec_did": 101,
2025-04-06 20:53:42.591 "c_sunspec_length": 50,
2025-04-06 20:53:42.591 "current": 230,
2025-04-06 20:53:42.591 "l1_current": 230,
2025-04-06 20:53:42.591 "l2_current": 0,
2025-04-06 20:53:42.591 "l3_current": 0,
2025-04-06 20:53:42.591 "current_scale": -2,
2025-04-06 20:53:42.591 "l1_voltage": 2293,
2025-04-06 20:53:42.591 "l2_voltage": 0,
2025-04-06 20:53:42.591 "l3_voltage": 0,
2025-04-06 20:53:42.591 "l1n_voltage": 2293,
2025-04-06 20:53:42.591 "l2n_voltage": 0,
2025-04-06 20:53:42.591 "l3n_voltage": 0,
2025-04-06 20:53:42.591 "voltage_scale": -1,
2025-04-06 20:53:42.591 "power_ac": 5238,
2025-04-06 20:53:42.591 "power_ac_scale": -1,
2025-04-06 20:53:42.591 "frequency": 49996,
2025-04-06 20:53:42.591 "frequency_scale": -3,
2025-04-06 20:53:42.591 "power_apparent": 5292,
2025-04-06 20:53:42.591 "power_apparent_scale": -1,
2025-04-06 20:53:42.591 "power_reactive": 7512,
2025-04-06 20:53:42.591 "power_reactive_scale": -2,
2025-04-06 20:53:42.591 "power_factor": 9898,
2025-04-06 20:53:42.591 "power_factor_scale": -2,
2025-04-06 20:53:42.591 "energy_total": 5880620,
2025-04-06 20:53:42.591 "energy_total_scale": 0,
2025-04-06 20:53:42.591 "current_dc": 12951,
2025-04-06 20:53:42.591 "current_dc_scale": -4,
2025-04-06 20:53:42.591 "voltage_dc": 4106,
2025-04-06 20:53:42.591 "voltage_dc_scale": -1,
2025-04-06 20:53:42.591 "power_dc": 5318,
2025-04-06 20:53:42.591 "power_dc_scale": -1,
2025-04-06 20:53:42.591 "temperature": 3498,
2025-04-06 20:53:42.591 "temperature_scale": -2,
2025-04-06 20:53:42.591 "status": 4,
2025-04-06 20:53:42.591 "vendor_status": 0,
2025-04-06 20:53:42.591 "rrcr_state": 0,
2025-04-06 20:53:42.591 "active_power_limit": 100,
2025-04-06 20:53:42.591 "cosphi": 0,
2025-04-06 20:53:42.591 "commit_power_control_settings": 0,
2025-04-06 20:53:42.591 "restore_power_control_default_settings": 0,
2025-04-06 20:53:42.591 "reactive_power_config": 3,
2025-04-06 20:53:42.591 "reactive_power_response_time": 200,
2025-04-06 20:53:42.591 "advanced_power_control_enable": 1,
2025-04-06 20:53:42.591 "export_control_mode": 0,
2025-04-06 20:53:42.591 "export_control_limit_mode": 0,
2025-04-06 20:53:42.591 "export_control_site_limit": 0
2025-04-06 20:53:42.591 }
2025-04-06 20:53:42.870 SolarEdge WR Batt: Updated 12 values out of 19
2025-04-06 20:53:43.291 SolarEdge WR Batt: Inverter returned information for Meter1
2025-04-06 20:53:43.292 SolarEdge WR Batt: device: Meter1 values: {
2025-04-06 20:53:43.292 "c_manufacturer": "SolarEdge",
2025-04-06 20:53:43.292 "c_model": "SE-MTR-3Y-400V-A",
2025-04-06 20:53:43.292 "c_option": "Export+Import",
2025-04-06 20:53:43.292 "c_version": "79",
2025-04-06 20:53:43.292 "c_deviceaddress": 2,
2025-04-06 20:53:43.292 "c_sunspec_did": 203,
2025-04-06 20:53:43.292 "c_sunspec_length": 105,
2025-04-06 20:53:43.292 "current": 27715,
2025-04-06 20:53:43.292 "l1_current": 14121,
2025-04-06 20:53:43.292 "l2_current": 7069,
2025-04-06 20:53:43.292 "l3_current": 6524,
2025-04-06 20:53:43.292 "current_scale": -4,
2025-04-06 20:53:43.292 "voltage_ln": 22940,
2025-04-06 20:53:43.292 "l1n_voltage": 22940,
2025-04-06 20:53:43.292 "l2n_voltage": 22967,
2025-04-06 20:53:43.292 "l3n_voltage": 23013,
2025-04-06 20:53:43.292 "voltage_ll": 0,
2025-04-06 20:53:43.292 "l12_voltage": 0,
2025-04-06 20:53:43.292 "l23_voltage": 0,
2025-04-06 20:53:43.292 "l31_voltage": 0,
2025-04-06 20:53:43.292 "voltage_scale": -2,
2025-04-06 20:53:43.292 "frequency": 4999,
2025-04-06 20:53:43.292 "frequency_scale": -2,
2025-04-06 20:53:43.292 "power": -10568,
2025-04-06 20:53:43.292 "l1_power": -16441,
2025-04-06 20:53:43.292 "l2_power": 14415,
2025-04-06 20:53:43.292 "l3_power": -8542,
2025-04-06 20:53:43.292 "power_scale": -3,
2025-04-06 20:53:43.292 "power_apparent": 4265,
2025-04-06 20:53:43.292 "l1_power_apparent": 2142,
2025-04-06 20:53:43.292 "l2_power_apparent": 1439,
2025-04-06 20:53:43.292 "l3_power_apparent": 1333,
2025-04-06 20:53:43.292 "power_apparent_scale": -1,
2025-04-06 20:53:43.292 "power_reactive": -4264,
2025-04-06 20:53:43.292 "l1_power_reactive": -1810,
2025-04-06 20:53:43.292 "l2_power_reactive": -1345,
2025-04-06 20:53:43.292 "l3_power_reactive": -1108,
2025-04-06 20:53:43.292 "power_reactive_scale": -1,
2025-04-06 20:53:43.292 "power_factor": 1513,
2025-04-06 20:53:43.292 "l1_power_factor": -3499,
2025-04-06 20:53:43.292 "l2_power_factor": 3129,
2025-04-06 20:53:43.292 "l3_power_factor": 4909,
2025-04-06 20:53:43.292 "power_factor_scale": -2,
2025-04-06 20:53:43.292 "export_energy_active": 1285184100,
2025-04-06 20:53:43.292 "l1_export_energy_active": 655856750,
2025-04-06 20:53:43.292 "l2_export_energy_active": 660105450,
2025-04-06 20:53:43.292 "l3_export_energy_active": 662436350,
2025-04-06 20:53:43.292 "import_energy_active": 1310712500,
2025-04-06 20:53:43.292 "l1_import_energy_active": 867324600,
2025-04-06 20:53:43.292 "l2_import_energy_active": 527277900,
2025-04-06 20:53:43.292 "l3_import_energy_active": 609324400,
2025-04-06 20:53:43.292 "energy_active_scale": -2,
2025-04-06 20:53:43.292 "export_energy_apparent": 0,
2025-04-06 20:53:43.292 "l1_export_energy_apparent": 0,
2025-04-06 20:53:43.292 "l2_export_energy_apparent": 0,
2025-04-06 20:53:43.292 "l3_export_energy_apparent": 0,
2025-04-06 20:53:43.292 "import_energy_apparent": 0,
2025-04-06 20:53:43.292 "l1_import_energy_apparent": 0,
2025-04-06 20:53:43.292 "l2_import_energy_apparent": 0,
2025-04-06 20:53:43.292 "l3_import_energy_apparent": 0,
2025-04-06 20:53:43.292 "energy_apparent_scale": -32768,
2025-04-06 20:53:43.292 "import_energy_reactive_q1": 0,
2025-04-06 20:53:43.292 "l1_import_energy_reactive_q1": 0,
2025-04-06 20:53:43.292 "l2_import_energy_reactive_q1": 0,
2025-04-06 20:53:43.292 "l3_import_energy_reactive_q1": 0,
2025-04-06 20:53:43.292 "import_energy_reactive_q2": 0,
2025-04-06 20:53:43.292 "l1_import_energy_reactive_q2": 0,
2025-04-06 20:53:43.292 "l2_import_energy_reactive_q2": 0,
2025-04-06 20:53:43.292 "l3_import_energy_reactive_q2": 0,
2025-04-06 20:53:43.292 "export_energy_reactive_q3": 0,
2025-04-06 20:53:43.292 "l1_export_energy_reactive_q3": 0,
2025-04-06 20:53:43.292 "l2_export_energy_reactive_q3": 0,
2025-04-06 20:53:43.292 "l3_export_energy_reactive_q3": 0,
2025-04-06 20:53:43.292 "export_energy_reactive_q4": 0,
2025-04-06 20:53:43.292 "l1_export_energy_reactive_q4": 0,
2025-04-06 20:53:43.292 "l2_export_energy_reactive_q4": 0,
2025-04-06 20:53:43.292 "l3_export_energy_reactive_q4": 0,
2025-04-06 20:53:43.292 "energy_reactive_scale": -32768
2025-04-06 20:53:43.292 }
2025-04-06 20:53:43.888 SolarEdge WR Batt: Updated 25 values out of 37
2025-04-06 20:53:44.094 SolarEdge WR Batt: Inverter returned information for Battery1
2025-04-06 20:53:44.094 SolarEdge WR Batt: device: Battery1 values: {
2025-04-06 20:53:44.094 "c_manufacturer": "LG",
2025-04-06 20:53:44.094 "c_model": "EH257064P8S1DMA2206081106",
2025-04-06 20:53:44.094 "c_version": "DCDC 1.2.18 BMS 2.3.0.4",
2025-04-06 20:53:44.094 "c_deviceaddress": 15,
2025-04-06 20:53:44.094 "c_sunspec_did": 0,
2025-04-06 20:53:44.094 "rated_energy": 16038.0,
2025-04-06 20:53:44.094 "maximum_charge_continuous_power": 7000.0,
2025-04-06 20:53:44.094 "maximum_discharge_continuous_power": 7000.0,
2025-04-06 20:53:44.094 "maximum_charge_peak_power": 1644.0,
2025-04-06 20:53:44.094 "maximum_discharge_peak_power": 7000.0,
2025-04-06 20:53:44.094 "average_temperature": 18.399999618530273,
2025-04-06 20:53:44.094 "maximum_temperature": 0.0,
2025-04-06 20:53:44.094 "instantaneous_voltage": 410.6000061035156,
2025-04-06 20:53:44.094 "instantaneous_current": -1.3468095064163208,
2025-04-06 20:53:44.094 "instantaneous_power": -553.0,
2025-04-06 20:53:44.094 "lifetime_export_energy_counter": 4366858,
2025-04-06 20:53:44.094 "lifetime_import_energy_counter": 5532276,
2025-04-06 20:53:44.094 "maximum_energy": 16038.0,
2025-04-06 20:53:44.094 "available_energy": 15439.0,
2025-04-06 20:53:44.094 "soh": 96.19999694824219,
2025-04-06 20:53:44.094 "soe": 91.80000305175781,
2025-04-06 20:53:44.094 "status": 4,
2025-04-06 20:53:44.094 "status_internal": 3,
2025-04-06 20:53:44.094 "event_log": 0,
2025-04-06 20:53:44.094 "event_log_internal": 0
2025-04-06 20:53:44.094 }
--
Domoticz Beta on Raspberry 3b (2x), and 4 (2x) on Rasbian Bullseye / Raspbian Bookworm / OSMC
Using: PiHole, SolarEdge Modbus, Sainlogic / Weather Underground, MQTT, Fritzbox, P1 Meter(s), dzvents Scripting
jannl
Posts: 673
Joined: Thursday 02 October 2014 6:36
Target OS: Raspberry Pi / ODroid
Domoticz version: 2022.2
Location: Geleen
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by jannl »

Nope, that is not the correct value. At the moment you use a battery and charger next to your solarpanels there seems to be an issue.

I whish is was the correct value, my production be 2kW higher at times.

Either the solaredge_modbus python library is not giving al registers or the needed value is not present. I tested with the example.py which is in the repository.
JayDotR
Posts: 9
Joined: Thursday 02 January 2025 21:15
Target OS: Raspberry Pi / ODroid
Domoticz version: beta
Location: Lux
Contact:

Re: Solaredge inverter plug-in Modbus TCP

Post by JayDotR »

In that case I have to admin that "I'm sorry, but out of alternatives that help you". The Installation I have certainly another wiring / logic as yours.

Technically seen : my system is a PV Installation with own consumption that returns the non-used production to the Grid, where a Storage System is interconnected in the Wiring on the PV Side.

For my use case I found my values, but I admin : it took a lot of reflexion work and dzvents programming to calculate the missing parts ;)
--
Domoticz Beta on Raspberry 3b (2x), and 4 (2x) on Rasbian Bullseye / Raspbian Bookworm / OSMC
Using: PiHole, SolarEdge Modbus, Sainlogic / Weather Underground, MQTT, Fritzbox, P1 Meter(s), dzvents Scripting
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest