I would love to see it documented for the community in rhis section
The items could probably use some tidying up - I did this a while ago in OpenHAB 1.x which I stopped using then recently converted it to OH2. Unlike in the above example- I was able to use mutiple poll requests, so used a separate poll for each block of contiguous data. This may not be the most efficient, but it works.
modbus.cfg
#Separate connection blocks required for different register type polls
poll=2000
tcp.FroniusBlk1.connection=192.168.21.202:502
tcp.FroniusBlk1.id=1
tcp.FroniusBlk1.start=213
tcp.FroniusBlk1.length=1
tcp.FroniusBlk1.type=holding
tcp.FroniusBlk1.valuetype=uint16
tcp.FroniusBlk2.connection=192.168.21.202:502
tcp.FroniusBlk2.id=1
tcp.FroniusBlk2.start=499
tcp.FroniusBlk2.length=14
tcp.FroniusBlk2.type=holding
tcp.FroniusBlk2.valuetype=uint32
tcp.FroniusBlk3.connection=192.168.21.202:502
tcp.FroniusBlk3.id=1
tcp.FroniusBlk3.start=40071
tcp.FroniusBlk3.length=22
tcp.FroniusBlk3.type=holding
tcp.FroniusBlk3.valuetype=float32
tcp.FroniusBlk4.connection=192.168.21.202:502
tcp.FroniusBlk4.id=1
tcp.FroniusBlk4.start=40091
tcp.FroniusBlk4.length=20
tcp.FroniusBlk4.type=holding
tcp.FroniusBlk4.valuetype=float32
tcp.FroniusBlk5.connection=192.168.21.202:502
tcp.FroniusBlk5.id=1
tcp.FroniusBlk5.start=40117
tcp.FroniusBlk5.length=1
tcp.FroniusBlk5.type=holding
tcp.FroniusBlk5.valuetype=uint16
tcp.FroniusBlk6.connection=192.168.21.202:502
tcp.FroniusBlk6.id=1
tcp.FroniusBlk6.start=40123
tcp.FroniusBlk6.length=8
tcp.FroniusBlk6.type=holding
tcp.FroniusBlk6.valuetype=uint32
tcp.FroniusBlk7.connection=192.168.21.202:502
tcp.FroniusBlk7.id=1
tcp.FroniusBlk7.start=40281
tcp.FroniusBlk7.length=31
tcp.FroniusBlk7.type=holding
tcp.FroniusBlk7.valuetype=uint16
items
Group gMyOpenHab
Group gSolar
Group gSolarMain (gSolar)
Group gSolarPower (gSolar)
Group gSolarAC (gSolar)
Group gSolarDC (gSolar)
Group gSolarInfo (gSolar)
/* Solar
Number Solar_Active_StateCode "Current State [%d]" (gSolarMain) {modbus="FroniusBlk1:0"}
Number Solar_Site_Power "Actual Power [%d W]" (gSolarMain, gSolarPower) {modbus="FroniusBlk2:0"}
//Number Solar_Site_Energy_Day_HW "Generated Today HW [%d Wh]" (gSolarMain, gSolarPower) {modbus="FroniusBlk2:1"}
Number Solar_Site_Energy_Day "Generated Today [%d Wh]" (gSolarMain, gSolarPower) {modbus="FroniusBlk2:2"}
//Number Solar_F_Site_Energy_Year_HW "Generated Year HW [%d Wh]" (gSolarPower) {modbus="FroniusBlk2:3"}
Number Solar_F_Site_Energy_Year_LW "Generated Year [%d Wh]" (gSolarPower) {modbus="FroniusBlk2:4"}
//Number Solar_F_Site_Energy_Tot_HW"Generated Lifetime HW [%d Wh]" (gSolarPower) {modbus="FroniusBlk2:5"}
Number Solar_F_Site_Energy_Tot_LW "Generated Lifetime [%d Wh]" (gSolarPower) {modbus="FroniusBlk2:6"}
Number Solar_AC_Current "AC total current [%.2f A]" (gSolarAC) {modbus="FroniusBlk3:0"}
Number Solar_AphA "AC phase A current [%.2f A]" (gSolarAC) {modbus="FroniusBlk3:1"}
Number Solar_AphB "AC phase B current [%.2f A]" (gSolarAC) {modbus="FroniusBlk3:2"}
Number Solar_AphC "AC phase C current [%.2f A]" (gSolarAC) {modbus="FroniusBlk3:3"}
Number Solar_PPVphBC "AC voltage phase BC [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:5"}
Number Solar_PPVphCA "AC voltage phase CA [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:6"}
Number Solar_PPVphAB "AC voltage phase AB [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:4"}
Number Solar_PhVphA "AC voltage phase AN [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:7"}
Number Solar_PhVphB "AC voltage phase BN [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:8"}
Number Solar_PhVphC "AC voltage phase CN [%.2f V]" (gSolarAC) {modbus="FroniusBlk3:9"}
Number Solar_AC_Power "AC power [%.2f W]" (gSolarAC) {modbus="FroniusBlk4:0"}
Number Solar_AC_Freq "AC frequency [%.2f Hz]" (gSolarAC) {modbus="FroniusBlk4:1"}
Number Solar_WH "AC lifetime energy production [%.0f Wh]"(gSolarAC) {modbus="FroniusBlk4:5"}
//BCK 16/07/17 for some reason Solar_DCA & Solar_DCV below cause errors - need to look at it
//Number Solar_DCA "DC current [%.2f A]" (gSolarDC) {modbus="FroniusBlk4:6"}
//Number Solar_DCV "DC voltage [%.2f V]" (gSolarDC) {modbus="FroniusBlk4:7"}
Number Solar_DCW "DC power [%.2f W]" (gSolarDC) {modbus="FroniusBlk4:8"}
Number Solar_State "Operating state (enum)[%d]" (gSolarInfo) {modbus="FroniusBlk5:0"}
Number Solar_EvtVnd1 "Event Flag 1 [%d]Bit field" (gSolarInfo) {modbus="FroniusBlk6:0"}
Number Solar_EvtVnd2 "Event Flag 2 [%d]Bit field" (gSolarInfo) {modbus="FroniusBlk6:1"}
Number Solar_EvtVnd3 "Event Flag 3 [%d]Bit field" (gSolarInfo) {modbus="FroniusBlk6:2"}
Number Solar_EvtVnd4 "Event Flag 4 [%d]Bit field" (gSolarInfo) {modbus="FroniusBlk6:3"}
Number Solar_1_DCA "String 1 DC current [%d A]" (gSolarDC) {modbus="FroniusBlk7:0"}
Number Solar_1_DCV "String 1 DC voltage [%d V]" (gSolarDC) {modbus="FroniusBlk7:1"}
Number Solar_1_DCW "String 1 DC power [%d W]" (gSolarDC) {modbus="FroniusBlk7:2"}
Number Solar_1_Tmp "String 1 Temperature [%d C]" (gSolarDC) {modbus="FroniusBlk7:7"}
Number Solar_1_DCSt "String 1 Operating state [%d]" (gSolarDC) {modbus="FroniusBlk7:8"}
Number Solar_2_DCA "String 2 DC current [%d A]" (gSolarDC) {modbus="FroniusBlk7:20"}
Number Solar_2_DCV "String 2 DC voltage [%d V]" (gSolarDC) {modbus="FroniusBlk7:21"}
Number Solar_2_DCW "String 2 DC power [%d W]" (gSolarDC) {modbus="FroniusBlk7:22"}
Number Solar_2_Tmp "String 2 Temperature [%d C]" (gSolarDC) {modbus="FroniusBlk7:27"}
Number Solar_2_DCSt "String 2 Operating state [%d]" (gSolarDC) {modbus="FroniusBlk7:28"}
Hopefully somebody finds this useful.
Brent
Hello Thomas,
I don’t use openhab but iobroker - but maybe you can help anyway
You seem to be able to interpret the values that the inverter and the Modbus meter output.
Can you tell me how I can use the values to determine the current consumption of the house?
The value must be determined by the inverter as it is displayed in the SolarEdge web interface.
Here are the values I read from the Modbus counter:
address name description unit type len factor offset role room poll wp
40071 I_AC_Current AC Total Current value Amp uint16be 1 1 0 level true false
40075 I_AC_Current_SF AC Current scale factor int16be 1 1 0 level true false
40083 I_AC_Power AC Power value W int16be 1 1 0 level true false
40084 I_AC_Power_SF AC Power scale factor int16be 1 1 0 level true false
40085 I_AC_Frequency AC Frequency value Hz uint16be 1 0.01 0 level true false
40093 I_AC_Energy_WH AC Lifetime Energy production kWh int32be 2 0.001 0 level true false
40098 I_DC_Voltage DC Voltage value V uint16be 1 0.1 0 level true false
40100 I_DC_Power DC Power Value W int16be 1 0.1 0 level true false
40103 I_Temp_Sink Temperatur °C int16be 1 1 0 level true false
40107 I_Status Operation State uint16be 1 1 0 level true false
40154 C_Option Export + Import, Production, consumption, NA string 8 1 0 level true false
40189 M_AC_Current AC Current (sum of active phases) A int16be 1 1 0 level true false
40193 M_AC_Current_S F AC Current Scale Factor SF int16be 1 1 0 level true false
40194 M_AC_Voltage_L N Line to Neutral AC Voltage (average of active phases) V int16be 1 1 0 level true false
40198 M_AC_Voltage_L L Line to Line AC Voltage (average of active phases) V int16be 1 1 0 level true false
40202 M_AC_Voltage_S F AC Voltage Scale Factor V int16be 1 1 0 level true false
40203 M_AC_Freq AC Frequency Hz int16be 1 1 0 level true false
40204 M_AC_Freq_SF AC Frequency Scale Factor SF int16be 1 1 0 level true false
40205 M_AC_Power Total Real Power (sum of active phases) W uint16be 1 1 0 level true false
40209 M_AC_Power_SF AC Real Power Scale Factor SW int16be 1 1 0 level true false
40210 M_AC_VA Total AC Apparent Power (sum of active phases) VA int16be 1 1 0 level true false
40214 M_AC_VA_SF AC Apparent Power Scale Factor SF int16be 1 1 0 level true false
40215 M_AC_VAR Total AC Reactive Power (sum of active phases) VAR int16be 1 1 0 level true false
40219 M_AC_VAR_SF AC Reactive Power Scale Factor % int16be 1 1 0 level true false
40220 M_AC_PF Average Power Factor (average of active phases) % int16be 1 1 0 level true false
40224 M_AC_PF_SF AC Power Factor Scale Factor SF int16be 1 1 0 level true false
40225 M_Exported Total Exported Real Energy Wh uint32le 2 1 0 level true false
40233 M_Imported Total Imported Real Energy Wh uint32le 2 1 0 level true false
40233 M_Imported Total Imported Real Energy Wh uint32le 2 1 0 level true false
40241 M_Energy_W_SF Real Energy Scale Factor Wh int16be 1 1 0 level true false
40242 M_Exported_VA Total Exported Apparent Energy VAh uint32le 2 1 0 level true false
40106 I_Temp_SF Scale factor int16be 1 1 0 level true false
Kind regards,
Olli
The current consumption of your house would be:
House = inverter power (I_AC_Power) + modbus meter power (M_AC_Power)
Assuming, that the modbus meter counts exported energy as negative values and imported as positive values.
As highlighted above, you need to use the scaling factor (M_AC_Power_SF) to scale your power values:
Modbus meter power = M_AC_Power * exp (10, M_AC_Power_SF)
Interver meter power = I_AC_Power * exp (10, I_AC_Power_SF)
BR,
Thomas
thx Thomas,
FYI, there is a new 2.x binding for Solaredge inverters which is using the web monitoring portal API for data, which is very easy to install and setup.
It’s the only solution for older inverters which lacks modbus communication port. You don’t even need a website API key.
Only the Solaredge web monitoring credentials are needed.
Keep in mind that the Solaredge API lags minutes behind the actual solar production. Therefore, if you want to steer the power consumption in your house to capitalise on the actual solar power being available (i.e. for matching the power you feed to your e-car, or dumping the excess energy into a heat storage solution, that is not controlled directly by your inverter), you need real-time data, which is what the direct access to the Modbus data provides.
Best,
Thomas
Has anyone found out, which modbus address represents the battery level? I’m using a SE 5000H with LG RESU10H. The sunspec documents is pretty silent about batteries and using several tools to monitor the modbus made me NOT find anything about the battery.
Hi Thomas.
I newly own a se9k too, and am looking for ways to work with it.
I have an electronics background, but am currently absorbed with remodeling my house. It will take some months before I can dive deeper, but want to start with something basic now.
I have not yet started to use openhab or volkszähler, but am looking at both.
It seems like you have a setup quite close to what I might need.
Any chance to get in direct contact?
(Did not see a pm function here)
Ps: I am in Graubünden, Switzerland.
I think you are in Germany?
Being completely new to openHAB, i try to copy the code of @tkuehne (for inverter only).
As there are no file names given, i guess around a bit, and i do the following:
paste to
/etc/openhab2/services/modbus.cfg
change the IP
paste twice to
/etc/openhab2/items/solaredge9k.items
paste to
/etc/openhab2/sitemaps/solaredge9k.sitemap
paste to
/etc/openhab2/rules/solaredge9k.rules
Now i was not able to access the sitemap,
had to add 1st line sitemap solaredge9k label=“solaredge9k” { and last line }
Sounds like correct?
Is there anything more, or should this run?
next i’ll need to enable modbus TCP in the inverter…
As a reference for others who look for ways to get data from their solaredge inverters:
It does read directly from the inverter, by mimicking the solaredge portal server or by sniffing the traffic to the SE server.
This allows you to even get module-data if you have optimizers on your PV modules.
So, Modbus TCP is enabled, i can get data through an excel spreadsheet/VBA thing.
But i can’t read via OH following thomas’ instructions.
Am i using the right filenames?
/etc/openhab2/services/modbus.cfg
poll=10000
tcp.se9k.connection=192.168.188.21:502:60:0:0:3:500
tcp.se9k.id=1
tcp.se9k.type=holding
tcp.se9k.start=69
tcp.se9k.length=50
tcp.se9k.valuetype=uint16
/etc/openhab2/items/solaredge9k.items
Group se9kint "Wechselrichter PV-Anlage (int-Werte)"
Group se9k "Wechselrichter PV-Anlage"
Number se9k_DID_int “WR Typ (int) [%d]” (se9kint) {modbus=“se9k:0”}
// Amps acrosss all phases
Number se9k_Amps_int “WR Stromerzeugung gesamt (int) [%d A]” (se9kint) { modbus=“se9k:2” }
// Amps Phase A,B,C and scaling factor
Number se9k_AmpA_int “WR Stromerzeugung Ph.A (int) [%d A]” (se9kint) { modbus=“se9k:3” }
Number se9k_AmpB_int “WR Stromerzeugung Ph.B (int) [%d A]” (se9kint) { modbus=“se9k:4” }
Number se9k_AmpC_int “WR Stromerzeugung Ph.C (int) [%d A]” (se9kint) { modbus=“se9k:5” }
Number se9k_AmpSF_int “WR Skalierungsfaktor Strom (int) [%d]” (se9kint) { modbus=“se9k:6” }
// Voltage for Phases A,B,C and scaling factor
Number se9k_VoltA_int “WR Spannung Phase A (int) [%d V]” (se9kint) { modbus=“se9k:10” }
Number se9k_VoltB_int “WR Spannung Phase B (int) [%d V]” (se9kint) { modbus=“se9k:11” }
Number se9k_VoltC_int “WR Spannung Phase C (int) [%d V]” (se9kint) { modbus=“se9k:12” }
Number se9k_VoltSF_int “WR Skalierungsfaktor Spannung (int) [%d]” (se9kint) { modbus=“se9k:13” }
// Power and SF
Number se9k_Watt_int “WR Leistung Erzeugung (int) [%d W]” (se9kint) { modbus=“se9k:14” }
Number se9k_WattSF_int “WR Skalierungsfaktor Leistung (int) [%d]” (se9kint) { modbus=“se9k:15” }
// Frequency and SF
Number se9k_Hz_int “WR Netzfrequenz (int) [%d Hz]” (se9kint) { modbus=“se9k:16” }
Number se9k_HzSF_int “WR Skalierungsfaktor Netzfrequ. (int) [%d]” (se9kint) { modbus=“se9k:17” }
// Apparent Power and SF
Number se9k_VA_int “WR Scheinleistung gesamt (int) [%d VA]” (se9kint) { modbus=“se9k:18” }
Number se9k_VASF_int “WR Skalierungsfaktor Scheinleistung (int) [%d]” (se9kint) { modbus=“se9k:19” }
// Reactive Power and SF
Number se9k_VAR_int “WR Reaktive Leistung gesamt (int) [%d VA]” (se9kint) { modbus=“se9k:20” }
Number se9k_VARSF_int “WR Skalierungsfaktor reaktive Leistung (int) [%d]” (se9kint) { modbus=“se9k:21” }
// Power factor
Number se9k_PF_int “WR Leistungsfaktor (int) [%d cos phi]” (se9kint) { modbus=“se9k:22” }
Number se9k_PFSF_int “WR Skalierungsfaktor Leistungsfaktor (int) [%d]” (se9kint) { modbus=“se9k:23” }
// Lifetime generated energy
Number se9k_Wh1_int “WR Erzeugungszaehler Byte1 (int) [%d Wh]” (se9kint) { modbus=“se9k:24” }
Number se9k_Wh2_int “WR Erzeugungszaehler Byte2 (int) [%d Wh]” (se9kint) { modbus=“se9k:25” }
Number se9k_WhSF_int “WR Skalierungsfaktor Zaehler (int) [%d]” (se9kint) { modbus=“se9k:26” }
// DC side current
Number se9k_DCA_int “WR Strom DC Seite (int) [%d A]” (se9kint) { modbus=“se9k:27” }
Number se9k_DCASF_int “WR Skalierungsfaktor DC Strom (int) [%d]” (se9kint) { modbus=“se9k:28” }
// DC side voltage
Number se9k_DCV_int “WR Spannung DC Seite (int) [%d V]” (se9kint) { modbus=“se9k:29” }
Number se9k_DCVSF_int “WR Skalierungsfaktor DC Spannung (int) [%d]” (se9kint) { modbus=“se9k:30” }
// DC side power
Number se9k_DCW_int “WR Leistung DC Seite (int) [%d W]” (se9kint) { modbus=“se9k:31” }
Number se9k_DCWSF_int “WR Skalierungsfaktor DC Leistung (int) [%d]” (se9kint) { modbus=“se9k:32” }
// Temp Heat sink
Number se9k_THS_int “WR Temperatur Kuehlkorper (int) [%d C]” (se9kint) { modbus=“se9k:34” }
Number se9k_THSSF_int “WR Skalierungsfaktor Kuehlkoerper (int) [%d]” (se9kint) { modbus=“se9k:37” }
// Operating state
Number se9k_Status_int “WR Status (int) [%d]” (se9kint) { modbus=“se9k:38” }
Number se9k_Status_Vendor_int “WR Status Vendor (int) [%d]” (se9kint) { modbus=“se9k:39” }
// Se9K inverter Float values
String se9k_DID “WR Typ [%s]” (se9k)
// Amps acrosss all phases
Number se9k_Amps “WR Stromerzeugung gesamt [%.2f A]” (se9k)
// Amps Phase A,B,C
Number se9k_AmpA “WR Stromerzeugung Ph.A [%.2f A]” (se9k)
Number se9k_AmpB “WR Stromerzeugung Ph.B [%.2f A]” (se9k)
Number se9k_AmpC “WR Stromerzeugung Ph.C [%.2f A]” (se9k)
// Voltage for Phases A,B,C
Number se9k_VoltA “WR Spannung Phase A [%.1f V]” (se9k)
Number se9k_VoltB “WR Spannung Phase B [%.1f V]” (se9k)
Number se9k_VoltC “WR Spannung Phase C [%.1f V]” (se9k)
// Power
Number se9k_Watt “Erzeugungsleistung Photovolaik [%.2f W]” (se9k)
// Frequency
Number se9k_Hz “WR Netzfrequenz [%.2f Hz]” (se9k)
// Apparent Power
Number se9k_VA “WR Scheinleistung gesamt [%.2f VA]” (se9k)
// Reacive Power
Number se9k_VAR “WR reaktive Leistung gesamt [%.2f VA]” (se9k)
// Power factor
Number se9k_PF “WR Leistungsfaktor [%.1f cos phi]” (se9k)
// Lifetime generated energy
Number se9k_kWh “WR Erzeugungszaehler [%.3f kWh]” (se9k)
// the follwing two items allow you to display some derived values, i.e. the energy produced in the current year.
Number se9k_kWh_Jahr “WR Erzeugung seit Jahresanfang [%.3f kWh]” (se9k)
Number se9k_kWh_Jahr_Offset “WR Offset Erzeugungaehler zum 1.1. [%.3f kWh]” (se9k)
// DC side current
Number se9k_DCA “WR Strom DC Seite [%.2f A]” (se9k)
// DC side voltage
Number se9k_DCV “WR Spannung DC Seite [%.2f V]” (se9k)
// DC side power
Number se9k_DCW “WR Leistung DC Seite [%.2f W]” (se9k)
// Temp Heat sink
Number se9k_THS “WR Temperatur Kuehlkorper [%.2f C]” (se9k)
// Status
String se9k_Status “Status [%s]” (se9k)
String se9k_Status_Vendor “Status Vendor [%s]” (se9k)
/etc/openhab2/rules/solaredge9k.rules
Group se9kint "Wechselrichter PV-Anlage (int-Werte)"
Group se9k "Wechselrichter PV-Anlage"
Number se9k_DID_int “WR Typ (int) [%d]” (se9kint) {modbus=“se9k:0”}
// Amps acrosss all phases
Number se9k_Amps_int “WR Stromerzeugung gesamt (int) [%d A]” (se9kint) { modbus=“se9k:2” }
// Amps Phase A,B,C and scaling factor
Number se9k_AmpA_int “WR Stromerzeugung Ph.A (int) [%d A]” (se9kint) { modbus=“se9k:3” }
Number se9k_AmpB_int “WR Stromerzeugung Ph.B (int) [%d A]” (se9kint) { modbus=“se9k:4” }
Number se9k_AmpC_int “WR Stromerzeugung Ph.C (int) [%d A]” (se9kint) { modbus=“se9k:5” }
Number se9k_AmpSF_int “WR Skalierungsfaktor Strom (int) [%d]” (se9kint) { modbus=“se9k:6” }
// Voltage for Phases A,B,C and scaling factor
Number se9k_VoltA_int “WR Spannung Phase A (int) [%d V]” (se9kint) { modbus=“se9k:10” }
Number se9k_VoltB_int “WR Spannung Phase B (int) [%d V]” (se9kint) { modbus=“se9k:11” }
Number se9k_VoltC_int “WR Spannung Phase C (int) [%d V]” (se9kint) { modbus=“se9k:12” }
Number se9k_VoltSF_int “WR Skalierungsfaktor Spannung (int) [%d]” (se9kint) { modbus=“se9k:13” }
// Power and SF
Number se9k_Watt_int “WR Leistung Erzeugung (int) [%d W]” (se9kint) { modbus=“se9k:14” }
Number se9k_WattSF_int “WR Skalierungsfaktor Leistung (int) [%d]” (se9kint) { modbus=“se9k:15” }
// Frequency and SF
Number se9k_Hz_int “WR Netzfrequenz (int) [%d Hz]” (se9kint) { modbus=“se9k:16” }
Number se9k_HzSF_int “WR Skalierungsfaktor Netzfrequ. (int) [%d]” (se9kint) { modbus=“se9k:17” }
// Apparent Power and SF
Number se9k_VA_int “WR Scheinleistung gesamt (int) [%d VA]” (se9kint) { modbus=“se9k:18” }
Number se9k_VASF_int “WR Skalierungsfaktor Scheinleistung (int) [%d]” (se9kint) { modbus=“se9k:19” }
// Reactive Power and SF
Number se9k_VAR_int “WR Reaktive Leistung gesamt (int) [%d VA]” (se9kint) { modbus=“se9k:20” }
Number se9k_VARSF_int “WR Skalierungsfaktor reaktive Leistung (int) [%d]” (se9kint) { modbus=“se9k:21” }
// Power factor
Number se9k_PF_int “WR Leistungsfaktor (int) [%d cos phi]” (se9kint) { modbus=“se9k:22” }
Number se9k_PFSF_int “WR Skalierungsfaktor Leistungsfaktor (int) [%d]” (se9kint) { modbus=“se9k:23” }
// Lifetime generated energy
Number se9k_Wh1_int “WR Erzeugungszaehler Byte1 (int) [%d Wh]” (se9kint) { modbus=“se9k:24” }
Number se9k_Wh2_int “WR Erzeugungszaehler Byte2 (int) [%d Wh]” (se9kint) { modbus=“se9k:25” }
Number se9k_WhSF_int “WR Skalierungsfaktor Zaehler (int) [%d]” (se9kint) { modbus=“se9k:26” }
// DC side current
Number se9k_DCA_int “WR Strom DC Seite (int) [%d A]” (se9kint) { modbus=“se9k:27” }
Number se9k_DCASF_int “WR Skalierungsfaktor DC Strom (int) [%d]” (se9kint) { modbus=“se9k:28” }
// DC side voltage
Number se9k_DCV_int “WR Spannung DC Seite (int) [%d V]” (se9kint) { modbus=“se9k:29” }
Number se9k_DCVSF_int “WR Skalierungsfaktor DC Spannung (int) [%d]” (se9kint) { modbus=“se9k:30” }
// DC side power
Number se9k_DCW_int “WR Leistung DC Seite (int) [%d W]” (se9kint) { modbus=“se9k:31” }
Number se9k_DCWSF_int “WR Skalierungsfaktor DC Leistung (int) [%d]” (se9kint) { modbus=“se9k:32” }
// Temp Heat sink
Number se9k_THS_int “WR Temperatur Kuehlkorper (int) [%d C]” (se9kint) { modbus=“se9k:34” }
Number se9k_THSSF_int “WR Skalierungsfaktor Kuehlkoerper (int) [%d]” (se9kint) { modbus=“se9k:37” }
// Operating state
Number se9k_Status_int “WR Status (int) [%d]” (se9kint) { modbus=“se9k:38” }
Number se9k_Status_Vendor_int “WR Status Vendor (int) [%d]” (se9kint) { modbus=“se9k:39” }
// Se9K inverter Float values
String se9k_DID “WR Typ [%s]” (se9k)
// Amps acrosss all phases
Number se9k_Amps “WR Stromerzeugung gesamt [%.2f A]” (se9k)
// Amps Phase A,B,C
Number se9k_AmpA “WR Stromerzeugung Ph.A [%.2f A]” (se9k)
Number se9k_AmpB “WR Stromerzeugung Ph.B [%.2f A]” (se9k)
Number se9k_AmpC “WR Stromerzeugung Ph.C [%.2f A]” (se9k)
// Voltage for Phases A,B,C
Number se9k_VoltA “WR Spannung Phase A [%.1f V]” (se9k)
Number se9k_VoltB “WR Spannung Phase B [%.1f V]” (se9k)
Number se9k_VoltC “WR Spannung Phase C [%.1f V]” (se9k)
// Power
Number se9k_Watt “Erzeugungsleistung Photovolaik [%.2f W]” (se9k)
// Frequency
Number se9k_Hz “WR Netzfrequenz [%.2f Hz]” (se9k)
// Apparent Power
Number se9k_VA “WR Scheinleistung gesamt [%.2f VA]” (se9k)
// Reacive Power
Number se9k_VAR “WR reaktive Leistung gesamt [%.2f VA]” (se9k)
// Power factor
Number se9k_PF “WR Leistungsfaktor [%.1f cos phi]” (se9k)
// Lifetime generated energy
Number se9k_kWh “WR Erzeugungszaehler [%.3f kWh]” (se9k)
// the follwing two items allow you to display some derived values, i.e. the energy produced in the current year.
Number se9k_kWh_Jahr “WR Erzeugung seit Jahresanfang [%.3f kWh]” (se9k)
Number se9k_kWh_Jahr_Offset “WR Offset Erzeugungaehler zum 1.1. [%.3f kWh]” (se9k)
// DC side current
Number se9k_DCA “WR Strom DC Seite [%.2f A]” (se9k)
// DC side voltage
Number se9k_DCV “WR Spannung DC Seite [%.2f V]” (se9k)
// DC side power
Number se9k_DCW “WR Leistung DC Seite [%.2f W]” (se9k)
// Temp Heat sink
Number se9k_THS “WR Temperatur Kuehlkorper [%.2f C]” (se9k)
// Status
String se9k_Status “Status [%s]” (se9k)
String se9k_Status_Vendor “Status Vendor [%s]” (se9k)
/etc/openhab2/sitemaps/solaredge9k.sitemap
sitemap solaredge9k label="solaredge9k" {
Text item=se9k_Watt {
Frame label="Wechselrichter SE9k" {
Text item=se9k_Watt
Text item=se9k_kWh
Text item=se9k_kWh_Jahr
Setpoint item=se9k_kWh_Jahr_Offset minValue=-100000 maxValue=100000 step=0.1
Text item=se9k_Hz
Text item=se9k_VA
Text item=se9k_VAR
Text item=se9k_PF
Text item=se9k_Amps
Text item=se9k_AmpA
Text item=se9k_AmpB
Text item=se9k_AmpC
Text item=se9k_VoltA
Text item=se9k_VoltB
Text item=se9k_VoltC
Text item=se9k_DCA
Text item=se9k_DCV
Text item=se9k_DCW
Text item=se9k_THS
Text item=se9k_Status
Text item=se9k_Status_Vendor
}
Group item=se9kint label="Werte SE9K Wechselrichter (int)"
}
}
The file names look correct. The rules file seems to be the same as the items file, contentwise. If that is not a copy&paste error of the post, this would be wrong. Also, post/look at the /var/log/openhab2/openhab2.log if it still does not work after the correction, to geht a hint about what‘s going on.
Hi everyone!
@tkuehne 's great description about the modbus set up made me wonder if we could make this more userfriendly, so I’ve came up with a dedicated sunspec binding.
It uses the openhab2 compatible modbus binding from @ssalonen which is currently awaiting integration into the main openhab branch.
The sunspec addon supports reading data from inverters (single/split/three phase) at the moment but if someone can help me with testing I’ll add support for meters as well. (I do not have access to a smart meter)
Code can be found here, but if any of you would like to try out I can send the prebuild packages.
I would be very glad to get feedback testreports from you!
Hi
Thanks for creating this code to be used with modbus…
I have last we got a SolarEdge system and i have already got it to work. I really love that it picks up the data locally, that makes it both fast and more important i don’t have to trust external servers to get my information.
Most things worked with just copy paste but there was some problems with " and ”, yes they look almost the same but not the same in the editor. I guess this is some copy paste problem between systems.
I have also translated most things to Swedish now but i am lacking the correct term for Apparent Power and Reactive Power so if there are anyone that knows the electrical terms in Swedish please feel free to reply here…
But i have still one problem with the site map. The “Setpoint item=se9k_kWh_Jahr_Offset”, i cant get this to work. When i try to press it in the android app the app crashes and to be honest i don’t know what is should be used for. Anyone that can explain to me?
I would guess the crash is general and has nothing to do with this feature.
So a big than you Thomas Kuehne for making this really detailed and simple to use post, I would not have been able to do this feature myself but now i have a mush better understanding of how modbus is working.
Hi Thomas, I just got a SolarEdge inverter and same ModBus meter as you have but find that (excepting for the Common + Identification values) all of the meter 1 values (addresses 40190 onwards) are being reported as either 0 or 32768. The inverters own values are being reported correctly. Did you have any issues with the meter or did it just work? Many thanks. Ian.
Hi Ian,
It just worked. Does your inverter show you correct values for the meter in it‘s display? If not, maybe there is a modbus ID or other configuration error.
Best,
Thomas
Thanks for the reply, the meter readings (instantaneous grid import / export power) look fine when I check them on the inverters LCD screen. It’s a single phase meter (C_SunSpec_DID=201) and reports it’s C_Model as WND-3Y-400-MB when queried via Modbus over TCP from the inverter.
The meter shows up in the inverters RS-485 status menu as RS485-1 Dev=MLT Prot=01 ##=01. The solar edge meter installation guide example seems to suggest that this should be Dev=MTR Prot=WN but I don’t really know what impact that has.
Ian.
WN stands for WattNode, and your meter is a Wattnode Device. I guess I would switch it to Dev=MTR Prot=WN and try if this changes things.
Hallo tkuehne,
ich denke ich habe die selbe Konfiguration (Solaredge WR,…) und möchte Daten via Excel File auslesen.
Habe am WR Modbus TCP mit Port 502 aktiviert. bekomme aber keine Werte.
Eventuell irgendwelche Tipps für mich woran es liegen kann ?
Pingen kann ich den WR, bin aber kein VB Programmierer oder ähnliches und kann dem Code weiter oben nur bedingt folgen.
danke