Modbus binding with Sunny Boy SMA inverter

Not sure whether this will help but I’ll try to give my 50 ct…

Concerning modbus an sunspec I read some questions before: modbus is a protocol. Sunspec uses modbus protocol. The sunspec modbus profile defines specific registers and data types for measurements or parameters. Some of them are read only, some of them can also be written. Take care, not all of them are meant to be changed but only to be set once. Changing them continuously will destroy flash memory. SMA has documented this well.

At least in some SMA devices Modbus TCP is not activated by default. For Sunny Boy Tripower as well as for Sunny Boy Storage you’ll have to enable “Modbus TCP Server” to use it with openHAB.

When you try to read out sunspec modbus values you have to take care of the registers adresses, theres an offset. SMA:

To read or to write Modbus registers in each case use register numbers reduced by the
offset of 1. Example: Modbus register address = Modbus register number in SunSpec
Modbus profile – offset = 40001 - 1 = 40000.

Not all SMA devices serve all values.

SMA Documentation:
https://www.sma.de/fileadmin/content/landingpages/pl/FAQ/SunSpec_Modbus-TI-en-15.pdf

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.

1 Like

Hi Steen.
My SMA inverters have bluetooth as well as ethernet interface. The modbus protocol is activated through the ethernet (TCP/IP) protocol. But it needs to get activated inside the configuration of the inverter. Its default set to OFF.

Thank you @Kim_Andersen
Great job, this will really help.
I see you’re reference a function in smalimit1000.js . What is that script doing?

I wonder if you’ve worked on any graphical representation or only on data value ?

And for sunspec modbus there is also separate binding to make it even easier for users (no need think register numbers etc.) : https://www.openhab.org/addons/bindings/modbus.sunspec/#sunspec

Not sure if you can get more data out with generic modbus binding but I thought it was worth mentioning

I would also agree with this.
Just one more information which might be important if you want to read out data with the SunSpec-Profile:

The SunSpec Modbus profile for SMA devices starts at the Modbus register number 40001 and can be addressed via the Unit ID = 126 (see Section 3.4 “Addressing and Data Transmission in the Modbus Protocol”, page 11).

I will do a commissioning of a SMA Tripower soon and also want to try SunSpec. So I will keep you updated.

Ahh crap… Forgot to add… :frowning:

The smalimit.js just divide by 1000, like the other, divide1000.js. Difference is, the smalilimts1000.jz take care if the readings are less than zero, its equal to UNDEF…
Like this:
smalimits1000.js

(function(i) {
    if(i < 0) return "UNDEF";
    return parseFloat(i) / 1000
})(input)

Thats because some of the registers return a negative number, when the register isn´t active, (like when the sun has gone down, there will be no producing of power, ofcouse. The registers of the power producing will return to negative. It´s all in the official SMA modbus documents).

And this is the divide1000.js

// Wrap everything in a function
(function(i) {
    return parseFloat(i) / 1000;
})(input)
// input variable contains data passed by openhab

I havn´t made any any graphical presentation, except for whats in the sitemap. I mainly use it to monitor. My plan was to make somekind of grafical interface in my svg I use in habpanel. But I havn´t got as far yet.

I have not tried the sunspec modbus. Mainly because I prefere to do it manually, as it makes me feel I´m in more controle of things :slight_smile: But it would be fun to see, which registers sunspec actually gets in auto discovery.

Unfortunaly my modbus/openhab has screwed up for a coupple of weeks now.
For some reason I can no longer install modbus binding without getting an error. I´m very sure this has be caused by openhab sreewing things up, somewhere. Most of my systems works as it used to, but modbus and Ring binding simply refuses to install. I havnt had time to investigate this futher. So atm my modbus is offline. I have no idea how this happened. Log shows it just restarted (rebooted my Odroid running ubuntu). After that, It just happened out of the blue at the 16. october, but only for the modbus binding and Ring binding :frowning:

I have a plan to reinstall everything (fresh setup), cause I couldnt fix the openhab setup with an update to 2.5.10 either (infact upgrading openhab also resulted in an error). But due to lack of time I havn´t yet.

@Kim_Andersen, thank you for your help.:+1:
I’ve successfully implemented your scripts in a few minutes with my SMA 10000TL-20 , without any knowledge of the MODBUS.
May be a last detail … where can I find the ‘SMA.map’ config file or at least, the values to recreate it?
Regards

Hi Kim
Thank you, it looks like my Sonny Boys are able to send Modbus, not even if I get an ethernet connection module, unless anyone know better

Great you got up and running.

Damit! yet another file I forgot to add :roll_eyes:
Here you go… SMA.map:

/ Device Type
9098=STP 5000TL-20
9099=STP 6000TL-20
9100=STP 7000TL-20
9102=STP 9000TL-20
9103=STP 8000TL-20
9281=STP 10000TL-20
9282=STP 11000TL-20
9283=STP 12000TL-20
9326=Sunny Boy Storage 2.5

// Condition
35=Fault
303=OFf
307=Ok
308=On
455=Warning

// Recommended action:
336=Contact manufacturer
337=Contact installer
338=invalid
887=none

// Grid relay/contactor:
51=Closed
311=Open
16777213=Information not available

// Operating status:
295=MPP
381=Stop
443=Constant voltage
1392=Fault
1393=Waiting for PV voltage
1467=Start
1469=Shut down
1480=Waiting for utilities company
2119=Derating
ON=On

// Battery oper. status:
2291=Battery standby
2292=Charge battery
2293=Discharge battery

Status battery application area:
2614=Own consumption area
2615=State of charge conservation area
2616=Backup power area
2617=Deep discharge protection area
2618=Deep discharge area

Please notice, not all codes has been mapped, only those I cared for adding :slight_smile:
For the first section, there really isnt no need to add devices which you havnt got. I just added all of them directly from the Excel document by the use of copy/paste… Ie… it takes longer to leave out those I dont need.
I know, stupid explanation. But I love to use copy/paste, and sometimes things just doesnt make sense, but doesnt ruin anything. So I leave it at that. :rofl:

In case you´re missing something, please consult the official SMA modbus list of registers. (Its an Excel document with all registers for most of their devices).
If you havn´t already got it, I can add it later.

1 Like

Hmm… How would you connect the modbus interface, if it hasnt got ethernet? Does the manual tell?
(It could be a serial connection. It could also be Wifi. But I really doubt it will work from bluetooth).

it’s perfect for me … my installation is listed :wink:

1 Like

There is an option for a RS485 expansion module, but my Sonny Boy 2500HF and 3000HF is not listed for Sonny Boy that support modbus that I found here

If your manual doesnt say, you probably have to ask SMA. They´re usually quite nice to answer fast for questions like that. The list you refere to does not help you.

2.5.9 Modbus binding distribution has messed up packaging, will not install.
Under some circumstances - don’t know what - the installer helpfully tries to upgrade 2.5.x to that version, and fails.
With 2.5.10 now released this should all be sorted, but you may have to clear it up manually.

Yeah, but I use the special version ssalone made to fix the modbus issue in previous version. Thats the one I can no longer install, even though I´m at 2.5.9 and it has been running since he released it and untill the 16. of october.
I tried to upgrade openhab to 2.5.10, but that failed as well.
So right now I´m kinda stucked without modbus, and probably need to start from a fresh 2.5.10… Just need the spare time :frowning:

Well now it’s probably being "helpful’ and trying to autoupgrade to 2.5.10 … but someone has put a manual jar in the addons folder, which will cause it to fail.

I´m not sure I understand what you mean?
Will the modbus 2.5.10 binding jar fail on openhab 2.5.9 ?

I don’t know. It certainly won’t work if you have a jar in addons. You can look in your openhab.log and find out if it is the installer is messing up on modbus, instead of us all guessing.