Reading Data from Solaredge inverters via Modbus TCP

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

1 Like