This is my setup for my SMA devices:
Main Inverter - Sunny Tripower 6000 TL-20
Batery inverter: Sunnyboy storage 2.5 10.
My .things setup (Sunny Tripower)
Bridge modbus:tcp:inverter1 [ host="10.4.28.248", port=502, id=3, connectMaxTries=3] {
// SMA Inverter Device Type
Bridge poller DevType [ start=30053, length=4, refresh=5000, type="input" ] {
Thing data type [ readStart="30053", readValueType="uint32" ]
}
// SMA Inverter Status
Bridge poller SMA_Status [ start=30201, length=36, refresh=6000, type="input" ] {
Thing data status [ readStart="30201", readValueType="int32" ]
Thing data Grid_Contactor [ readStart="30217", readValueType="int32" ]
Thing data Max_Power [ readStart="30231", readValueType="int32" ]
Thing data Set_Max_Power [ readStart="30233", readValueType="int32" ]
}
// SMA Inverter Yield
Bridge poller Yield [ start=30517, length=16, refresh=5000, type="input" ] {
Thing data Day_Yield [ readStart="30517", readValueType="int64", readTransform="JS(divide1000.js)" ]
Thing data Total_Yield [ readStart="30529", readValueType="int32", readTransform="JS(divide1000.js)" ]
}
// SMA Inverter Power Section West & Total
Bridge poller power_a [ start=30769, length=20, refresh=5000, type="input" ] {
Thing data current_input [ readStart="30769", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
Thing data voltage_input [ readStart="30771", readValueType="int32", readTransform="JS(smalimit100.js)" ]
Thing data power_west [ readStart="30773", readValueType="int32", readTransform="JS(smalimit.js)" ]
Thing data active_power [ readStart="30775", readValueType="int32", readTransform="JS(smalimit.js)" ]
Thing data power_L1 [ readStart="30777", readValueType="int32", readTransform="JS(smalimit.js)" ]
Thing data power_L2 [ readStart="30779", readValueType="int32", readTransform="JS(smalimit.js)" ]
Thing data power_L3 [ readStart="30781", readValueType="int32", readTransform="JS(smalimit.js)" ]
Thing data volt_G1 [ readStart="30783", readValueType="uint32", readTransform="JS(divide100.js)" ]
Thing data volt_G2 [ readStart="30785", readValueType="uint32", readTransform="JS(divide100.js)" ]
Thing data volt_G3 [ readStart="30787", readValueType="uint32", readTransform="JS(divide100.js)" ]
}
// SMA Inverter Power Section East
Bridge poller power_b [ start=30957, length=8, refresh=5000, type="input" ] {
Thing data currentB_input [ readStart="30957", readValueType="int32", readTransform="JS(smalimit1000.js)" ]
Thing data voltageB_input [ readStart="30959", readValueType="int32", readTransform="JS(smalimit100.js)" ]
Thing data power_east [ readStart="30961", readValueType="int32", readTransform="JS(smalimit.js)" ]
}
// SMA Inverter Operation
Bridge poller SMA_Status_Operate [ start=40029, length=4, refresh=5000, type="holding" ] {
Thing data operatestatus [ readStart="40029", readValueType="uint32" ]
}
}
My .things setup (Sunnyboy storage)
Bridge modbus:tcp:inverter2 [ host="10.4.28.197", port=502, id=3, connectMaxTries=3] {
// SMA SunnyBoy Storage 2.5
Bridge poller device_typ [ start=30053, length=4, refresh=5000, type="input" ] {
Thing data device_typ [ readStart="30053", readValueType="int32"]
}
// SMA SunnyBoy Storage 2.5 Condition
Bridge poller status [ start=30201, length=4, refresh=5000, type="input" ] {
Thing data status [ readStart="30201", readValueType="int32"]
}
// SMA SunnyBoy Storage 2.5 GridRelay on/off
Bridge poller GridRelay [ start=30217, length=4, refresh=5000, type="input" ] {
Thing data GridRelay [ readStart="30217", readValueType="int32"]
}
// SMA SunnyBoy Storage 2.5 Total Yield.
Bridge poller TotalYield [ start=30529, length=4, refresh=5000, type="input" ] {
Thing data TotalYield [ readStart="30529", readValueType="int32", readTransform="JS(divide1000.js)" ]
}
// SMA SunnyBoy Storage 2.5 Daily Yield
Bridge poller DayYield [ start=30535, length=4, refresh=5000, type="input" ] {
Thing data DayYield [ readStart="30535", readValueType="int32", readTransform="JS(divide1000.js)" ]
}
// SMA SunnyBoy Storage 2.5 Power
Bridge poller Power [ start=30775, length=4, refresh=5000, type="input" ] {
Thing data Power [ readStart="30775", readValueType="int32" ]
Thing data PowerL1 [ readStart="30777", readValueType="int32" ]
}
// SMA SunnyBoy Storage 2.5 Grid Voltage L1
Bridge poller GVoltageL1 [ start=30783, length=4, refresh=5000, type="input" ] {
Thing data GVoltageL1 [ readStart="30783", readValueType="int32", readTransform="JS(divide100.js)" ]
}
// SMA SunnyBoy Storage 2.5 Current battery state of charge
Bridge poller CurrentBatStatCharge [ start=30845, length=4, refresh=5000, type="input" ] {
Thing data CurrentBatStatCharge [ readStart="30845", readValueType="int32" ]
Thing data CurrentBatcapacity [ readStart="30847", readValueType="int32" ]
}
// SMA SunnyBoy Storage 2.5 PowerDrawn
Bridge poller PowerDrawn [ start=30865, length=4, refresh=5000, type="input" ] {
Thing data PowerDrawn [ readStart="30865", readValueType="int32" ]
Thing data PowerGridFeedIn [ readStart="30867", readValueType="int32" ]
}
// SMA SunnyBoy Storage 2.5 Battery oper. status
Bridge poller BatteryStatus [ start=30955, length=4, refresh=5000, type="input" ] {
Thing data BatteryStatus [ readStart="30955", readValueType="int32" ]
}
// SMA SunnyBoy Storage 2.5 Status battery application area:
Bridge poller BatteryAppArea [ start=31057, length=4, refresh=5000, type="input" ] {
Thing data BatteryAppArea [ readStart="31057", readValueType="int32" ]
}
// SMA SunnyBoy Storage 2.5
Bridge poller PowerDrawnGridL1 [ start=31259, length=16, refresh=5000, type="input" ] {
Thing data PowerGridFeedL1 [ readStart="31259", readValueType="int32" ]
Thing data PowerGridFeedL2 [ readStart="31261", readValueType="int32" ]
Thing data PowerGridFeedL3 [ readStart="31263", readValueType="int32" ]
Thing data PowerDrawnGridL1 [ readStart="31265", readValueType="int32" ]
Thing data PowerDrawnGridL2 [ readStart="31267", readValueType="int32" ]
Thing data PowerDrawnGridL3 [ readStart="31269", readValueType="int32" ]
}
// SMA SunnyBoy Storage 2.5 Present battery charge
Bridge poller PresBatCharge [ start=31393, length=4, refresh=5000, type="input" ] {
Thing data PresBatCharge [ readStart="31393", readValueType="int32" ]
Thing data PresBattDischarge [ readStart="31395", readValueType="int32" ]
}
// SMA SunnyBoy Storage 2.5 Present battery charge/discharge Wh
Bridge poller PresBattDischargeWh [ start=31397, length=8, refresh=5000, type="input" ] {
Thing data PresBattchargeWh [ readStart="31397", readValueType="int64", readTransform="JS(divide1000.js)" ]
Thing data PresBattDischargeWh [ readStart="31401", readValueType="int64", readTransform="JS(divide1000.js)" ]
}
// SMA SunnyBoy Storage 2.5 Battery nominal capacity
Bridge poller BattNormCap [ start=40187, length=2, refresh=10000, type="input" ] {
Thing data BattNorminalcapac [ readStart="40187", readValueType="int32" ]
}
}
My .items setup (for both):
// Inverter 1 TriPower 6000
Number inverter1DevType "Inverter Type [MAP(SMA.map):%s]" <solarinverter> {channel="modbus:data:inverter1:DevType:type:number"}
Number inverter1Status "Device Status [MAP(SMA.map):%s]" <switch> {channel="modbus:data:inverter1:SMA_Status:status:number"}
Switch inverterGridContactor "Grid contactor [MAP(SMA.map):%s]" <cu_switch> {channel="modbus:data:inverter1:SMA_Status:Grid_Contactor:switch"}
Number inverter1MaxPower "Max Power [%s W]" <Energy> {channel="modbus:data:inverter1:SMA_Status:Max_Power:number"}
Number inverter1SetMaxPower "Max Power Set [%s W]" <Energy> {channel="modbus:data:inverter1:SMA_Status:Set_Max_Power:number"}
Number inverter1DaylyYield "Inverter Dayly Yield [%s kWh]" <line> {channel="modbus:data:inverter1:Yield:Day_Yield:number"}
Number inverter1TotalYield "Inverter Total Yield [%s kWh]" <line> {channel="modbus:data:inverter1:Yield:Total_Yield:number"}
Number inverter1DC1Cur_input "Current input [%s A]" <solarpanel> {channel="modbus:data:inverter1:power_a:current_input:number"}
Number inverter1DC1Volt_input "Voltgae input [%s V]" <solarpanel> {channel="modbus:data:inverter1:power_a:voltage_input:number"}
Number inverter1PowerA "Panel SydVest [%s W]" <solarpanel> {channel="modbus:data:inverter1:power_a:power_west:number"}
Number inverter1ActivePower "Active Power [%s W]" <solarpanel> (PV) {channel="modbus:data:inverter1:power_a:active_power:number"}
Number inverter1PowerL1 "Active Power L1 [%s W]" <solarpanel> (PV) {channel="modbus:data:inverter1:power_a:power_L1:number"}
Number inverter1PowerL2 "Active Power L2 [%s W]" <solarpanel> (PV) {channel="modbus:data:inverter1:power_a:power_L2:number"}
Number inverter1PowerL3 "Active Power L3 [%s W]" <solarpanel> (PV) {channel="modbus:data:inverter1:power_a:power_L3:number"}
Number inverter1_voltG1 "Grid voltage phase L1 [%s V]" <solarpanel> {channel="modbus:data:inverter1:power_a:volt_G1:number"}
Number inverter1_voltG2 "Grid voltage phase L2 [%s V]" <solarpanel> {channel="modbus:data:inverter1:power_a:volt_G2:number"}
Number inverter1_voltG3 "Grid voltage phase L3 [%s V]" <solarpanel> {channel="modbus:data:inverter1:power_a:volt_G3:number"}
Number inverter1DC2Cur_input "Current input B [%s A]" <solarpanel> {channel="modbus:data:inverter1:power_b:currentB_input:number"}
Number inverter1DC2Volt_input "Voltgae input B [%s V]" <solarpanel> {channel="modbus:data:inverter1:power_b:voltageB_input:number"}
Number inverter1PowerB "Panel SydØst [%s W]" <solarpanel> {channel="modbus:data:inverter1:power_b:power_east:number"}
Number inverter1OpMode "Operation Mode [MAP(SMA.map):%s]" <text> {channel="modbus:data:inverter1:SMA_Status_Operate:operatestatus:number"}
// Inverter 2 SunnyBoy Storage 2.5
String inverter2DevType "Inverter type [MAP(SMA.map):%s]" <solarinverter> {channel="modbus:data:inverter2:device_typ:device_typ:string"}
String inverter2Status "Device Status [MAP(SMA.map):%s]" <switch> {channel="modbus:data:inverter2:status:status:string"}
Switch inverter2GridRelay "Grid Relay [%s]" <cu_switch> {channel="modbus:data:inverter2:GridRelay:GridRelay:switch"}
String inverter2TotalYield "Total Yield [%s Wh]" <line> {channel="modbus:data:inverter2:TotalYield:TotalYield:string"}
String inverter2DayYield "Dayli Yield [%s Wh]" <line> {channel="modbus:data:inverter2:DayYield:DayYield:string"}
String inverter2Power "Power [%s W]" <Energy> {channel="modbus:data:inverter2:Power:Power:string"}
String inverter2PowerL1 "Power L1 [%s W]" <Energy> {channel="modbus:data:inverter2:Power:PowerL1:string"}
String inverter2GVoltageL1 "Grid Voltage L1 [%s V]" {channel="modbus:data:inverter2:GVoltageL1:GVoltageL1:string"}
Number inverter2BatStateCharge "Current Battery State Charge [%s %%]" <batterylevel> (PV) {channel="modbus:data:inverter2:CurrentBatStatCharge:CurrentBatStatCharge:number"}
Number inverter2BatCapacity "Current Battery Capacity [%s %%]" <status> {channel="modbus:data:inverter2:CurrentBatStatCharge:CurrentBatcapacity:number"}
Number inverter2PowerDrawn "Power Drawn [%s W]" <cu_grid> (PV) {channel="modbus:data:inverter2:PowerDrawn:PowerDrawn:number"}
Number inverter2PowerGridFeedIn "Power Grid Feed-in [%s W]" <cu_grid> {channel="modbus:data:inverter2:PowerDrawn:PowerGridFeedIn:number"}
Number inverter2BatteryStatus "Battery status [MAP(SMA.map):%s]" <switch> {channel="modbus:data:inverter2:BatteryStatus:BatteryStatus:number"}
Number inverter2BatAppArea "Battery Application Area [MAP(SMA.map):%s]" <text> {channel="modbus:data:inverter2:BatteryAppArea:BatteryAppArea:number"}
Number inverter2PowGridFeedL1 "Power Feedin Grid L1 [%s W]" <cu_grid> (PV) {channel="modbus:data:inverter2:PowerDrawnGridL1:PowerGridFeedL1:number"}
Number inverter2PowGridFeedL2 "Power Feedin Grid L2 [%s W]" <cu_grid> (PV) {channel="modbus:data:inverter2:PowerDrawnGridL1:PowerGridFeedL2:number"}
Number inverter2PowGridFeedL3 "Power Feedin Grid L3 [%s W]" <cu_grid> (PV) {channel="modbus:data:inverter2:PowerDrawnGridL1:PowerGridFeedL3:number"}
Number inverter2PowDraGridL1 "Power drawn from Grid L1 [%s W]" <cu_grid> (PV) {channel="modbus:data:inverter2:PowerDrawnGridL1:PowerDrawnGridL1:number"}
Number inverter2PowDraGridL2 "Power drawn from Grid L2 [%s W]" <cu_grid> (PV) {channel="modbus:data:inverter2:PowerDrawnGridL1:PowerDrawnGridL2:number"}
Number inverter2PowDraGridL3 "Power drawn from Grid L3 [%s W]" <cu_grid> (PV) {channel="modbus:data:inverter2:PowerDrawnGridL1:PowerDrawnGridL3:number"}
Number inverter2PreBatCharge "Present Battery Charge [%s W]" <batterylevel> (PV) {channel="modbus:data:inverter2:PresBatCharge:PresBatCharge:number"}
Number inverter2PreBatDischarge "Present Battery Discharge [%s W]" <batterylevel> (PV) {channel="modbus:data:inverter2:PresBatCharge:PresBattDischarge:number"}
Number inverter2BatNormCapac "Battery Norminal Capacity [%s Wh]" <text> {channel="modbus:data:inverter2:BattNormCap:BattNorminalcapac:number"}
And the .sitemap setup:
sitemap inverters label="Invertere"
{
Frame label="SMA Inverter 1" {
Text item=inverter1Status
Text item=inverter1DevType
Text item=inverterGridContactor
Text item=inverter1OpMode
Text item=inverter1MaxPower
Text item=inverter1SetMaxPower
}
Frame label="Paneler" {
Text item=inverter1PowerA {
Text item=inverter1DC1Volt_input
Text item=inverter1DC1Cur_input
Text item=inverter1PowerA
}
Text item=inverter1PowerB {
Text item=inverter1DC2Volt_input
Text item=inverter1DC2Cur_input
Text item=inverter1PowerB
}
Text item=inverter1ActivePower label="Total Watt"
Text item=inverter2BatStateCharge
Text item=inverter2PreBatCharge
Text item=inverter2PreBatDischarge
}
Frame label="Yield" {
Text item=inverter1DaylyYield
Text item=inverter1TotalYield
}
Frame label="Grid voltage & Power" {
Text item=inverter1_voltG1
Text item=inverter1PowerL1
Text item=inverter1_voltG2
Text item=inverter1PowerL2
Text item=inverter1_voltG3
Text item=inverter1PowerL3
}
Frame label="SMA Inverter 2" {
Text item=inverter2Status
Text item=inverter2DevType
Text item=inverter2Power
Text item=inverter2PowerL1
Text item=inverter2GVoltageL1
Text item=inverter2GridRelay
Text item=inverter2DayYield
Text item=inverter2TotalYield
}
Frame label="PowerDrawn/Feed-in" {
Text item=inverter2PowerDrawn
Text item=inverter2PowerGridFeedIn
Text item=inverter2PowDraGridL1
Text item=inverter2PowGridFeedL1
Text item=inverter2PowDraGridL2
Text item=inverter2PowGridFeedL2
Text item=inverter2PowDraGridL3
Text item=inverter2PowGridFeedL3
// Image refresh=10000 url="http://10.4.28.3:3000/render/d-solo/5098Wzrik/solcelleanlaeg?refresh=30s&orgId=1&from=now-12h&to=now&panelId=6&width=1000&height=500"
// Image refresh=10000 url="http://10.4.28.3:3000/render/d-solo/5098Wzrik/solcelleanlaeg?refresh=30s&orgId=1&from=now-12h&to=now&panelId=8&width=1000&height=500"
}
Frame label="LG Chem Resu10 Battery" {
Text item=inverter2BatteryStatus
Text item=inverter2BatAppArea
Text item=inverter2BatCapacity
Text item=inverter2BatNormCapac
Text item=inverter2BatStateCharge
Text item=none
Text item=inverter2PreBatCharge
Text item=inverter2PreBatDischarge
}
}
Hope it will do.