diy solar

diy solar

Sunny Webbox RS485 w/SMA 6048-US

Olibri

New Member
Joined
Oct 14, 2020
Messages
19
I intend to create a big write-up in the future, but I'm still in the middle of my offgrid journey, so I'll save it for a little later once I have better conclusions. Today I just wanted to write a few notes about using the Sunny Webbox with my 2Phase2 6048-US system. This is information that I haven't found elsewhere and simply discovered by trying things.

The Sunny Webbox RS485 is discontinued, but you can find it periodically on places like EBay. To get the webbox to discover your inverters, you need the RS485 Piggyback module installed (also found on EBay).

Once the Webbox is connected, you can both monitor and configure your inverters on the local network in real time. This eliminates the need to sit in front of the inverter and try settings to get the behavior that you want. Note that the webbox itself is not the most stable design, so attaching wifi power control helps to not have to walk over and power cycle the box. You can also connect to Sunny Portal, but I haven't found this to be particularly useful.

Via the webbox you can find settings that are not available via the front-panel as it appears that the hardware/firmware was reused across product lines. Particularly interesting was that I can now see/control the Sunny Backup settings (google Sunny Backup 5000 to find the manual). As an example, I can set FedInMod to Time and then set times/BatSoc levels to dump battery power to the grid (I'm on a TOU NM plan). This particular setting is a little unreliable and I haven't experimented enough to get it to work correctly, but it's there and I've seen it work. It's also a little frustrating because I'm still using LiFEPO4 batteries in VRLA mode, so you the BatSoc that the setting relies on is always wrong (a problem to solve in the future).

The Sunny Webbox has an RPC interface (google sunny webbox rpc manual. Yesterday I wrote some simple python code to pull status information and change settings. From there I installed Ubuntu via WSL 2 to a home PC that is always on (my Plex server) and then set a cron job to disconnect from the grid at the start of expensive TOU and reconnect at the start at inexpensive TOU. I do use GdSocEn = Enable, but this resulted in throttling my Midnite Classic 200's production when the battery is full, so this is my workaround for now. Even if you don't have this use case, being able to control the inverter from my desk/via automation is really nice. The interface is pretty simple and once I have cleaned it up and have some specific use cases I will post the code somewhere. If I were a little more ambitious and had more time I'd probably reverse engineer the rs485 interface and then connect it to a RPi, but I do have a day job so that's not going to happen.
 
Wow.. You go!

I have a couple 6048's myself and have always been disappointed with the user interface. I'm actually kind of surprised no one has written software to tap into these things yet.
 
I have my WebBox connected and working.
Just using a crossover cable, and had to set IPv4 address and disable firewall on the PC.

I extended one of the SI-6048 RS-232 RJ-45 ports to a knockout on the bottom. Terminator goes there when nothing else connected, but I can plug in WebBox or Sunny Boy Control for monitoring and adjusting settings.


Don't think I'll be connecting it to my network.

 
Olibri, Hedges, any updates on your automation and communication with sunny islands & webbox?

I have a system with 2 SI6048US from a DC solar trailer, running the whole house primarily off grid. We'll see how winter goes this year, likely still need some grid power. I have FLA battery on the SIs which now mostly just float around 90% and handle intermittent loads. There is a bunch of other AC coupled solar, a DC array, and separate ~9kwhr lithium battery banks in an Electrak mower which are the normal daily cycled storage discharged with microinverters AC coupled at night. I have a CAN-usb to RPi on the SMA CAN bus where I've figured out some of the signals to make controls work ok (useful to anyone if they're using lead acid mode, I've mentioned somewhere I think). The RPi controls some loads in the house to make direct use of solar, switches a gridtied array back to the grid if it can't be consumed in the house, and charges & discharges the current lithium bank, talks to bmss on the lithium battery banks.

I need main battery bank voltage, which I'm currently getting from my midnite charge controller as a work around. The DC array I want to move to charge some additional lithium banks, but I lose my important FLA battery voltage signal then.

So I'm now working on trying to get data from the Sunny Islands from the rs485 / SMA-Net interface. I _need_ battery voltage, but really want other available data like battery current, and be able to change SI inverter settings like the WebBox can do. I have just plugged in a rs485 piggyback board and cable to a rs485-usb adapter on RPi. This would be the same communication method that your webbox uses.

I'm looking for some github project that I'm hoping to start from or maybe already works, there might be, we'll see. Or start with a terminal type of program to request individual data signals.

This is another one to google: webbox sc-com modbus
The SUNNY WEBBOX / SC-COM Modbus® Interface document lists the supported parameters and values, for the SI inverters.
 
All I did was connect and use WebBox to configure some Sunny Boys, and left it logging data. I think that would include battery voltage from SI.
I ought to look and see if it has filled the SD card by now.

I'm curious about to to communicate with Sunny Boys to implement export limit, produce power to use on both sides of Sunny Island while maxing out but not exceeding allowed export to grid.
 
Oh boy, tiny first success: RPi and yasdi sees the Sunny Island!! New device found: 'SI6048UM SN:1260037647'

Code:
pi@hassbian:~ $ sudo yasdishell yasdi.conf
************************************************************

        YASDI Mini Shell (build for Linux)

      (This is an test program using YASDI)

************************************************************
Switching driver 'COM1' on...success

Command ('?' for help): ?
Commands:
 ? : This help...
 e : Start device detection (sync)
 b : Start device detection (async)
 z : Stop (async) device detection
 d : Show device list
 a : Show spot channel values
 p : Show parameter channel values
 t : Show test channel values
 s : Set parameter
 m : Remove device
 l : Change access level
 q : Exit
Command ('?' for help): e
Starting device detection (sync).
How many devices should be searched? 1
New device found: 'SI6048UM SN:1260037647'


Oh wow o wow, this is nuts!!!
Code:
Command ('?' for help): a
Device handle: 1
Device 'SI6048UM SN:1260037647' has 142 Spot channels:
Reading channel values, please wait...
------------------------------------------------------------
Channel handle |    Channel name    | Channel value (Unit) |
------------------------------------------------------------
     517       | '             Msg' | '0.000'  
     518       | '             Soh' | '99.000' (%)
     519       | '     TotInvPwrAt' | '0.400' (kW)
     520       | '       TotInvCur' | '8.700' (A)
     521       | '     TotInvPwrRt' | '-0.900' (kVAr)
     522       | '          BatSoc' | '91.700' (%)
     523       | '          BatVtg' | '51.000' (V)
     524       | '      BatChrgVtg' | '56.130' (V)
     525       | '        AptTmRmg' | '0.000' (hhmmss)
     526       | '       TotBatCur' | '8.700' (A)
     527       | '          BatTmp' | '15.200' (degC)
     528       | '        RmgTmFul' | '7.000' (d)
     529       | '        RmgTmEqu' | '15.000' (d)
     530       | '       BatSocErr' | '5.300' (%)
     531       | '         GnRmgTm' | '0.000' (hhmmss)
     532       | '        InvPwrAt' | '0.200' (kW)
     533       | '    InvPwrAtSlv1' | '0.100' (kW)
     534       | '    InvPwrAtSlv2' | '0.000' (kW)
     535       | '    InvPwrAtSlv3' | '0.000' (kW)
     536       | '          InvVtg' | '119.996' (V)
     537       | '      InvVtgSlv1' | '119.900' (V)
     538       | '      InvVtgSlv2' | '0.000' (V)
     539       | '      InvVtgSlv3' | '0.000' (V)
     540       | '          InvCur' | '4.600' (A)
     541       | '      InvCurSlv1' | '4.100' (A)
     542       | '      InvCurSlv2' | '0.000' (A)
     543       | '      InvCurSlv3' | '0.000' (A)
     544       | '          InvFrq' | '59.996' (Hz)
     545       | '        InvPwrRt' | '-0.400' (kVAr)
     546       | '    InvPwrRtSlv1' | '-0.400' (kVAr)
     547       | '    InvPwrRtSlv2' | '0.000' (kVAr)
     548       | '    InvPwrRtSlv3' | '0.000' (kVAr)
     549       | '        ExtPwrAt' | '0.000' (kW)
     550       | '    ExtPwrAtSlv1' | '0.000' (kW)
     551       | '    ExtPwrAtSlv2' | '0.000' (kW)
     552       | '    ExtPwrAtSlv3' | '0.000' (kW)
     553       | '          ExtVtg' | '121.479' (V)
     554       | '      ExtVtgSlv1' | '121.400' (V)
     555       | '      ExtVtgSlv2' | '0.000' (V)
     556       | '      ExtVtgSlv3' | '0.000' (V)
     557       | '          ExtCur' | '0.100' (A)
     558       | '      ExtCurSlv1' | '0.300' (A)
     559       | '      ExtCurSlv2' | '0.000' (A)
     560       | '      ExtCurSlv3' | '0.000' (A)
     561       | '          ExtFrq' | '59.996' (Hz)
     562       | '        ExtPwrRt' | '0.000' (kVAr)
     563       | '    ExtPwrRtSlv1' | '0.000' (kVAr)
     564       | '    ExtPwrRtSlv2' | '0.000' (kVAr)
     565       | '    ExtPwrRtSlv3' | '0.000' (kVAr)
     566       | '     TotExtPwrAt' | '0.000' (kW)
     567       | '       TotExtCur' | '0.500' (A)
     568       | '     TotExtPwrRt' | '0.000' (kVAr)
     569       | '       TotLodPwr' | '0.400' (kW)
     570       | '         GdRmgTm' | '0.000' (hhmmss)
     571       | '             Pac' | '0.400' (kW)
     572       | '        Firmware' | '7.304'  
     573       | '             Iac' | '4.600' (A)
     574       | '             Vac' | '119.900' (V)
     575       | '             Fac' | '59.900' (Hz)
     576       | '        ChpPwrAt' | '0.000' (kW)
     577       | '        ChpRmgTm' | '0.000' (hhmmss)
     578       | '     ChpStrRmgTm' | '0.000' (hhmmss)
     579       | '       Sic1PvPwr' | '0.000' (W)
     580       | '       Sic2PvPwr' | '0.000' (W)
     581       | '       Sic3PvPwr' | '0.000' (W)
     582       | '       Sic4PvPwr' | '0.000' (W)
     587       | '     TotSicPvPwr' | '0.000' (W)
     588       | '    TotSicBatCur' | '0.000' (A)
     589       | '    TotMccLodPwr' | '0.000' (kW)
     590       | '      TotPvPwrAt' | '0.000' (kW)
     591       | '     TotLodPwrAt' | '0.418' (kW)
     592       | '    SlfCsmpPwrAt' | '0.000' (kW)
     593       | '   SlfCsmpIncPwr' | '0.000' (kW)
     594       | '   BatCpyThrpCnt' | '51.000'  
     595       | '     GdCsmpPwrAt' | '0.000' (kW)
     596       | '     GdFeedPwrAt' | '0.000' (kW)
     597       | '           PacPV' | '0.000' (kW)
     598       | '      PacFeed-In' | '0.000' (kW)
     599       | '  PacConsumption' | '0.000' (kW)
     600       | '           kWhPV' | '0.000' (kWh)
     601       | '           FwVer' | '7.304'  
     602       | '           OnTmh' | '28682.500' (h)
     603       | '          FwVer2' | '7.300'  
     604       | '        EgyCntIn' | '2931.000' (kWh)
     605       | '       EgyCntOut' | '4566.600' (kWh)
     606       | '        EgyCntTm' | '9256.400' (h)
     607       | '        GnEgyCnt' | '0.000' (kWh)
     608       | '         GnEgyTm' | '0.000' (h)
     609       | '         GnOpTmh' | '10.100' (h)
     610       | '        GnStrCnt' | '0.000'  
     611       | '      GdEgyCntIn' | '1.400' (kWh)
     612       | '     GdEgyCntOut' | '2968.800' (kWh)
     613       | '        GdEgyTmh' | '1861.100' (h)
     614       | '         GdOpTmh' | '2367.700' (h)
     615       | '        GdCtcCnt' | '0.000'  
     616       | '          TotTmh' | '11.000' (h)
     617       | '    Sic1EgyCntIn' | '0.000' (kWh)
     618       | '    Sic2EgyCntIn' | '0.000' (kWh)
     619       | '    Sic3EgyCntIn' | '0.000' (kWh)
     620       | '    Sic4EgyCntIn' | '0.000' (kWh)
     621       | '  TotSicEgyCntIn' | '0.000' (kWh)
     622       | ' Sic1TdyEgyCntIn' | '0.000' (kWh)
     623       | ' Sic2TdyEgyCntIn' | '0.000' (kWh)
     624       | ' Sic3TdyEgyCntIn' | '0.000' (kWh)
     625       | ' Sic4TdyEgyCntIn' | '0.000' (kWh)
     626       | ' TotSicDyEgyCntI' | '0.000' (kWh)
     627       | '   Serial Number' | '1260037647.000'  
     628       | '      E-Total-In' | '2931.000' (kWh)
     629       | '         E-Total' | '4566.600' (kWh)
     630       | '            h-On' | '28682.500' (h)
     631       | '    TotLodEgyCnt' | '0.000' (kWh)
     632       | '   SlfCsmpIncEgy' | '0.000' (kWh)
     633       | '      SlfCsmpEgy' | '0.000' (kWh)
     634       | '   SlfCsmpIncTdy' | '0.000' (kWh)
     635       | '    GdCsmpEgyTdy' | '0.000' (kWh)
     636       | '      kWhFeed-In' | '0.000' (kWh)
     637       | '  kWhConsumption' | '0.000' (kWh)
     638       | '    GdFeedEgyTdy' | '0.000' (kWh)
     639       | '             Adr' | 'Master'  
     640       | '           OpStt' | 'Operating'  
     641       | '       OpSttSlv1' | 'Operating'  
     642       | '       OpSttSlv2' | '---'  
     643       | '       OpSttSlv3' | '---'  
     644       | '         CardStt' | 'Operational'  
     645       | '            Prio' | 'Ina'  
     646       | '       BatChrgOp' | 'Float'  
     647       | '          AptPhs' | 'Off'  
     648       | '        GnDmdSrc' | 'None'  
     649       | '           GnStt' | 'Off'  
     650       | '        InvOpStt' | 'Run'  
     651       | '    InvOpSttSlv1' | 'Run'  
     652       | '    InvOpSttSlv2' | '---'  
     653       | '    InvOpSttSlv3' | '---'  
     654       | '         Rly1Stt' | 'Off'  
     655       | '         Rly2Stt' | '---'  
     656       | '         GnRnStt' | 'Off'  
     657       | '            Mode' | 'Operation'  
     658       | '           Error' | '-----'  
     659       | '          ChpStt' | 'Idle'  
     660       | '      PvGdConStt' | '---'  
     661       | '     LodGdConStt' | '---'  
     662       | '       BatMntStt' | 'Off'  
Command ('?' for help):
 
Last edited:
Parameters available to set:
Code:
Command ('?' for help): ?
Commands:
 ? : This help...
 e : Start device detection (sync)
 b : Start device detection (async)
 z : Stop (async) device detection
 d : Show device list
 a : Show spot channel values
 p : Show parameter channel values
 t : Show test channel values
 s : Set parameter
 m : Remove device
 l : Change access level
 q : Exit
Command ('?' for help): e
Starting device detection (sync).
How many devices should be searched? 2
Sorry, but not all devices were found.
-------------------------------------------
Device handle | Device Name 
-------------------------------------------
     1        | 'SI6048UM SN:1260037647'
-------------------------------------------

Command ('?' for help): p
Device handle: 1
Device 'SI6048UM SN:1260037647' has 160 Parameter channels:
Reading channel values, please wait...
------------------------------------------------------------
Channel handle |    Channel name    | Channel value (Unit) |
------------------------------------------------------------
     333       | '         AutoStr' | '3.000'   
     334       | '              Dt' | '20211112.000' (yyyymmdd)
     335       | '              Tm' | '171809.000' (hhmmss)
     336       | '       BatCpyNom' | '1294.000' (Ah)
     337       | '       BatVtgNom' | '48.000' (V)
     338       | '   BatChrgCurMax' | '130.000' (A)
     339       | '       BatTmpMax' | '48.000' (degC)
     340       | '       BatTmpStr' | '40.000' (degC)
     342       | '      AptTmBoost' | '140.000' (min)
     343       | '        AptTmFul' | '2.800' (h)
     344       | '        AptTmEqu' | '8.300' (h)
     345       | '        CycTmFul' | '14.000' (d)
     346       | '        CycTmEqu' | '180.000' (d)
     347       | '    ChrgVtgBoost' | '2.400' (V)
     348       | '      ChrgVtgFul' | '2.460' (V)
     349       | '      ChrgVtgEqu' | '2.600' (V)
     350       | '      ChrgVtgFlo' | '2.300' (V)
     351       | '       BatTmpCps' | '4.000' (mV/degC)
     352       | '       GnAutoStr' | '3.000'   
     353       | '     GnSocTm1Str' | '50.000' (%)
     354       | '     GnSocTm1Stp' | '95.000' (%)
     355       | '     GnSocTm2Str' | '50.000' (%)
     356       | '     GnSocTm2Stp' | '95.000' (%)
     357       | '        GnTm1Str' | '0.000' (hhmmss)
     358       | '        GnTm2Str' | '0.000' (hhmmss)
     359       | '        GnPwrStr' | '5.500' (kW)
     360       | '        GnPwrStp' | '5.000' (kW)
     361       | '        GnVtgMin' | '80.000' (V)
     362       | '        GnVtgMax' | '150.000' (V)
     363       | '        GnCurNom' | '30.000' (A)
     364       | '        GnFrqNom' | '60.000' (Hz)
     365       | '        GnFrqMin' | '54.000' (Hz)
     366       | '        GnFrqMax' | '66.000' (Hz)
     367       | '      GnPwrAvgTm' | '60.000' (sec)
     368       | '       GnOpTmMin' | '15.000' (min)
     369       | '      GnStpTmMin' | '15.000' (min)
     370       | '        GnCoolTm' | '5.000' (min)
     371       | '      GnErrStpTm' | '1.000' (h)
     372       | '        GnWarmTm' | '60.000' (sec)
     373       | '         GnRvPwr' | '100.000' (W)
     374       | '          GnRvTm' | '30.000' (sec)
     375       | '     GnTmOpStrDt' | '20100101.000' (yyyymmdd)
     376       | '     GnTmOpStrTm' | '0.000' (hhmmss)
     377       | '     GnTmOpRnDur' | '0.000' (hhmmss)
     378       | '        GdVtgMin' | '105.600' (V)
     379       | '        GdVtgMax' | '132.000' (V)
     380       | '        GdCurNom' | '35.000' (A)
     381       | '        GdFrqNom' | '60.000' (Hz)
     382       | '        GdFrqMin' | '59.300' (Hz)
     383       | '        GdFrqMax' | '60.500' (Hz)
     384       | '         GdVldTm' | '7.000' (sec)
     385       | '         GdRvPwr' | '150.000' (W)
     386       | '          GdRvTm' | '10.000' (sec)
     394       | '     GdSocTm1Str' | '58.000' (%)
     395       | '     GdSocTm1Stp' | '59.000' (%)
     396       | '     GdSocTm2Str' | '79.000' (%)
     397       | '     GdSocTm2Stp' | '86.000' (%)
     398       | '        GdTm1Str' | '105900.000' (hhmmss)
     399       | '        GdTm2Str' | '190100.000' (hhmmss)
     400       | '        GdPwrStr' | '2.200' (kW)
     401       | '        GdPwrStp' | '1.500' (kW)
     402       | '        SlpStrTm' | '210000.000' (hhmmss)
     403       | '        SlpStpTm' | '61500.000' (hhmmss)
     404       | '       InvVtgNom' | '120.000' (V)
     405       | '   InvChrgCurMax' | '40.000' (A)
     406       | '       InvFrqNom' | '60.000' (Hz)
     407       | '    InvTmOpStrDt' | '20100101.000' (yyyymmdd)
     408       | '    InvTmOpStrTm' | '0.000' (hhmmss)
     409       | '    InvTmOpRnDur' | '0.000' (hhmmss)
     410       | '   Lod1SocTm1Str' | '30.000' (%)
     411       | '   Lod1SocTm1Stp' | '50.000' (%)
     412       | '   Lod1SocTm2Str' | '30.000' (%)
     413       | '   Lod1SocTm2Stp' | '50.000' (%)
     414       | '      Lod1Tm1Str' | '0.000' (hhmmss)
     415       | '      Lod1Tm2Str' | '0.000' (hhmmss)
     416       | '   Lod2SocTm1Str' | '30.000' (%)
     417       | '   Lod2SocTm1Stp' | '50.000' (%)
     418       | '   Lod2SocTm2Str' | '30.000' (%)
     419       | '   Lod2SocTm2Stp' | '50.000' (%)
     420       | '      Lod2Tm1Str' | '0.000' (hhmmss)
     421       | '      Lod2Tm2Str' | '0.000' (hhmmss)
     422       | '    RlyTmr1StrDt' | '20100101.000' (yyyymmdd)
     423       | '    RlyTmr1StrTm' | '0.000' (hhmmss)
     424       | '      RlyTmr1Dur' | '0.000' (hhmmss)
     425       | '    RlyTmr2StrDt' | '20100101.000' (yyyymmdd)
     426       | '    RlyTmr2StrTm' | '0.000' (hhmmss)
     427       | '      RlyTmr2Dur' | '0.000' (hhmmss)
     428       | '    BatFanTmpStr' | '30.000' (degC)
     429       | '         GnTmStr' | '0.000' (hhmmss)
     430       | '         ExtLkTm' | '0.000' (min)
     431       | '     SilentTmFlo' | '2.000' (h)
     432       | '     SilentTmMax' | '12.000' (h)
     434       | '    BatPro1TmStr' | '220000.000' (hhmmss)
     435       | '    BatPro1TmStp' | '70000.000' (hhmmss)
     436       | '    BatPro2TmStr' | '160000.000' (hhmmss)
     437       | '    BatPro2TmStp' | '90000.000' (hhmmss)
     438       | '      BatPro1Soc' | '55.000' (%)
     439       | '      BatPro2Soc' | '55.000' (%)
     440       | '      BatPro3Soc' | '45.000' (%)
     443       | '          Plimit' | '5.000' (kW)
     444       | '      ChpOpTmMin' | '60.000' (min)
     445       | '     ChpStpTmMin' | '10.000' (min)
     446       | '    ChpSocTm1Str' | '40.000' (%)
     447       | '    ChpSocTm1Stp' | '80.000' (%)
     448       | '    ChpSocTm2Str' | '40.000' (%)
     449       | '    ChpSocTm2Stp' | '80.000' (%)
     450       | '       ChpTm1Str' | '0.000' (hhmmss)
     451       | '       ChpTm2Str' | '0.000' (hhmmss)
     452       | '       ChpPwrStr' | '4.000' (kW)
     453       | '    ChpPwrStrDly' | '5.000' (min)
     454       | '        PvEgyMtr' | '0.000' (kWh)
     457       | '   SlfCsmpSOCMin' | '50.000' (%)
     458       | '              SN' | '1260037647.000'   
     459       | '          SNSlv1' | '1260036958.000'   
     460       | '          SNSlv2' | '0.000'   
     461       | '          SNSlv3' | '0.000'   
     462       | '    GdCsmpEgyMtr' | '0.000' (kWh)
     463       | '    GdFeedEgyMtr' | '0.000' (kWh)
     464       | '          BatTyp' | 'FLA'   
     465       | '  AutoEquChrgEna' | 'Disable'   
     466       | '       GnAutoEna' | 'Off'   
     467       | '        GnPwrEna' | 'Off'   
     468       | '        GnStrMod' | 'Manual'   
     469       | '       GnTmOpEna' | 'Disable'   
     470       | '       GnTmOpCyc' | 'Single'   
     471       | '           GdMod' | 'GridCharge'   
     472       | '       SilentEna' | 'Enable'   
     478       | '        GdSocEna' | 'Enable'   
     479       | '        GdPwrEna' | 'Disable'   
     480       | '        GdManStr' | 'Stop'   
     481       | '         ClstCfg' | '2Phase2'   
     482       | '         ComBaud' | '1200'   
     483       | '        SleepEna' | 'Enable'   
     484       | '         AfraEna' | 'Disable'   
     485       | '        SlpAtNgt' | 'Disable'   
     486       | '           InvRs' | '---'   
     487       | '         ParaSto' | '---'   
     488       | '      InvTmOpEna' | 'Disable'   
     489       | '      InvTmOpCyc' | 'Single'   
     490       | '          ManStr' | '---'   
     491       | '         ErrAckn' | '---'   
     494       | '      RlyTmr1Cyc' | 'Single'   
     495       | '      RlyTmr2Cyc' | 'Single'   
     496       | '          Rly1Op' | 'BatFan'   
     497       | '      Rly1OpSlv1' | 'Off'   
     498       | '      Rly1OpSlv2' | 'Off'   
     499       | '          Rly2Op' | 'MccBatFan'   
     500       | '      Rly2OpSlv1' | 'On'   
     501       | '      Rly2OpSlv2' | 'Off'   
     502       | '        GnManStr' | '---'   
     503       | '           GnAck' | '---'   
     504       | '      ChrgSelMan' | '---'   
     505       | '        GnCtlMod' | 'Cur'   
     506       | '        CardFunc' | '---'   
     508       | '         BkupTst' | '---'   
     509       | '          ExtSrc' | 'Grid'   
     512       | '       ChpPwrEna' | 'Enable'   
     513       | '       ChpManStr' | 'Auto'   
     514       | '           RnMod' | 'RunAlways'   
     515       | '   SlfCsmpIncEna' | 'Disable'   
Command ('?' for help):
 
Olibri, Hedges, when you use the Webbox to change parameters in the SI (or SunnyBoy) inverters, is there a username and password that is required to give, to set the inverter into installer level?

I can't figure that part out yet, and SMA didn't give a clear answer that worked yet. They gave me a PUK number that might work if it was a newer bluetooth enabled inverter, but that doesn't work.
 
RTFM? :)

Yes, I think so. It may have started out with some dumb default password, can't remember now.

PUK is an unlocking key for a specific serial number inverter, in case you don't have the password.
I have a "Grid Guard" code assigned to me.
When I used Sunny Boy Control, password was "ID00nn_ _", where "nn" was sum of month, day, (2 digit) year

[opens manual]

Sunny Web Box manual indicates a reset button will reset passwords, other things depending on how long depressed.

Log in as "Installer". Upon delivery the password for the installer is: "sma."
(You would need Grid Guard as well for some changes.)
 
Thanks Hedges, yes I agree, rtfm, and some trial and error when that's not enough information. The yasdi security code does something with the current date, so the SunnyBoy password format you mention might be something.

It didn't work the ways I tried: ID00 then 2 digits sum of month, day, year 11+12+(20)21=44 and two underscore char?
like this ID0044__ or ID002123

Code:
Command ('?' for help): l
Username:inst
Password:ID002321
No access! Please try again...
Command ('?' for help): l
Username:inst
Password:ID0044__
No access! Please try again...
Command ('?' for help):

Code:
more ysecurity.c
/*
 *      YASDI - (Y)et (A)nother (S)MA(D)ata (I)mplementation
 *      Copyright(C) 2001-2008 SMA Solar Technology AG
 *
 *      This library is free software; you can redistribute it and/or
 *      modify it under the terms of the GNU Lesser General Public
 *      License as published by the Free Software Foundation; either
 *      version 2.1 of the License, or (at your option) any later version.
 *
 *      This library is distributed in the hope that it will be useful,
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *      Lesser General Public License for more details.
 *
 *      You should have received a copy of the GNU Lesser General Public
 *      License along with this library in the file COPYING.LIB;
 *      if not, write to the Free Software Foundation, Inc.,
 *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 *
 */
/**************************************************************************
* Project       : YASDI
***************************************************************************
* Project-no.   :
***************************************************************************
* Filename      : security.h
***************************************************************************
* Description   : No comments here are not an fault but an feature...:-)
*                 I will not explain the "security" here...
*                 This code here in this file is coded as possible "unreadable"
*                 so please don't ask me...
***************************************************************************
* Preconditions :
***************************************************************************
* Changes       : Author, Date, Version, Reason
*                 *********************************************************
*                 Pruessing, 06.10.2006, Created
***************************************************************************/

#include "os.h"
#include "smadef.h"

#include "ysecurity.h"


static TLevel currLevel = LEV_1;

static char p1_[] = "H�llenhorst";
static char p1[]  = {0x2d,0x2b,0x2d,0x4b,0x5d,0x50,0x48,0x4d,0x4f,0x00};
static char p2_[] = "Himberheinz";
static char p2[]  = {0x51,0x5c,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00};


/**************************************************************************
*
* NAME        : TSecurity_SetNewAccessLevel
*
* DESCRIPTION : Set the new security level
*
*
***************************************************************************
*
* IN     : ---
*
* OUT    : ---
*
* RETURN : TRUE  = success
*          FALSE = not success: If not level is unchanged...
*
* THROWS : ---
*
**************************************************************************/
BOOL TSecurity_SetNewAccessLevel(char * user, char * passwd)
{
   char * tpsw = passwd;
   size_t l=0;
   p1_[9] = 0;
   p2_[9] = 0;

   assert(user);

   if (strcmp("user", user) == 0)
   {
      currLevel = LEV_1;
      return true;   
   }
   else if (strcmp("inst", user) == 0)
   {
      char * b  = p2;
      char * p3 = &p2[4];
      int y, y2;

      /* I hope the system call "time" is no problem here.
         It's in std c ...*/
      const struct tm * gtime = os_GetSystemTimeTm(NULL);
      assert(gtime);
      y = gtime->tm_year;
      if (y >= 100) y -= 100;
      y2 = gtime->tm_mon+1 + gtime->tm_mday + y;
      sprintf(p3,"%d", y2);
      while(*p3 != 0)
      {
         *p3 = *p3 ^ 0x18;
         p3++;
      }

      if (!passwd) return false;

      /* check it... */
      while(*b != 0 && *tpsw != 0)
      {
         if ( (*b ^ 0x18) != *tpsw )
            return false;
         b++;
         tpsw++;
         l++;
      }
      if (l != strlen( p2 ) || l != strlen( passwd ) )
         return false;

      currLevel = LEV_2;
      return true;
   }
   else if (strcmp("sma", user) == 0)
   {
      char * b = p1;
      while(*b != 0 && *tpsw != 0)
      {
         if ( (*b ^ 0x18) != *tpsw )
            return false;
         b++;
         tpsw++;
         l++;
      }

      if (l != strlen( p1 ) || l != strlen( passwd ) )
         return false;

      currLevel = LEV_3;
      return true;   
   }
   else
      return false;   
}
 
It was "ID0044__" for my Sunny Boy Control (on that particular date).

iu


Not for Sunny Web Box. Can't remember clearly, but manual said password was "sma"

iu
 
Hah, well at least pulling data to mqtt works and is easy! This project works: https://github.com/pkwagner/yasdi2mqtt

A dump of mqtt messages now shows up the data from the Sunny Islands. That gets me what I want for now so I can do some changes to my system. Maybe I'll come back to the issue of the access level password and ability to change parameters remotely.

Code:
1E1_b14 0
1E1_b58 0
201_b12 93
201_b34 0
201_b56 -286
201_b78 -1
/SI6048/1260037647 {"sn":1260037647,"time":1636823296,"values":{"Msg":0,"Soh":99,"TotInvPwrAt":0.10009765625,"TotInvCur":4.8000977262854576,"TotInvPwrRt":-0.49990235269069672,"BatSoc":86.500098943710327,"BatVtg":51.80000077188015,"BatChrgVtg":56.315003280565179,"AptTmRmg":0,"TotBatCur":-2.7999023869633675,"BatTmp":13.300097852945328,"RmgTmFul":7,"RmgTmEqu":15,"BatSocErr":5.7000000849366188,"GnRmgTm":0,"InvPwrAt":9.7654759883880615e-05,"InvPwrAtSlv1":9.7654759883880615e-05,"InvPwrAtSlv2":9.7654759883880615e-05,"InvPwrAtSlv3":9.7654759883880615e-05,"InvVtg":120.02600570092909,"InvVtgSlv1":119.90000178664923,"InvVtgSlv2":0,"InvVtgSlv3":0,"InvCur":2.3000976890325546,"InvCurSlv1":2.4000976905226707,"InvCurSlv2":9.7654759883880615e-05,"InvCurSlv3":9.7654759883880615e-05,"InvFrq":60.003002849989571,"InvPwrRt":-0.19990234822034836,"InvPwrRtSlv1":-0.19990234822034836,"InvPwrRtSlv2":9.7654759883880615e-05,"InvPwrRtSlv3":9.7654759883880615e-05,"ExtPwrAt":9.7654759883880615e-05,"ExtPwrAtSlv1":9.7654759883880615e-05,"ExtPwrAtSlv2":9.7654759883880615e-05,"ExtPwrAtSlv3":9.7654759883880615e-05,"ExtVtg":122.00600579497404,"ExtVtgSlv1":121.90000181645155,"ExtVtgSlv2":0,"ExtVtgSlv3":0,"ExtCur":0.10009765625,"ExtCurSlv1":0.30009765923023224,"ExtCurSlv2":9.7654759883880615e-05,"ExtCurSlv3":9.7654759883880615e-05,"ExtFrq":60.02300285093952,"ExtPwrRt":9.7654759883880615e-05,"ExtPwrRtSlv1":9.7654759883880615e-05,"ExtPwrRtSlv2":9.7654759883880615e-05,"ExtPwrRtSlv3":9.7654759883880615e-05,"TotExtPwrAt":9.7654759883880615e-05,"TotExtCur":0.50009766221046448,"TotExtPwrRt":9.7654759883880615e-05,"TotLodPwr":0.10009765625,"GdRmgTm":0,"Pac":0.10009765625,"Firmware":7.3040003469213843,"Iac":2.3000976890325546,"Vac":120.00000178813934,"Fac":60.000000894069672,"ChpPwrAt":9.7654759883880615e-05,"ChpRmgTm":0,"ChpStrRmgTm":0,"Sic1PvPwr":0,"Sic2PvPwr":0,"Sic3PvPwr":0,"Sic4PvPwr":0,"TotSicPvPwr":0,"TotSicBatCur":9.7654759883880615e-05,"TotMccLodPwr":9.7654759883880615e-05,"TotPvPwrAt":0,"TotLodPwrAt":0.13700000650715083,"SlfCsmpPwrAt":0,"SlfCsmpIncPwr":0,"BatCpyThrpCnt":51,"GdCsmpPwrAt":0,"GdFeedPwrAt":0,"PacPV":9.7654759883880615e-05,"PacFeed-In":9.7654759883880615e-05,"PacConsumption":9.7654759883880615e-05,"kWhPV":0,"FwVer":7.3040003469213843,"OnTmh":28701.500427685678,"FwVer2":7.3000003467313945,"EgyCntIn":2932.300043694675,"EgyCntOut":4570.2000681012869,"EgyCntTm":9275.40013821423,"GnEgyCnt":0,"GnEgyTm":0,"GnOpTmh":10.100000150501728,"GnStrCnt":0,"GdEgyCntIn":1.4000000208616257,"GdEgyCntOut":2968.8000442385674,"GdEgyTmh":1861.1000277325511,"GdOpTmh":2367.7000352814794,"GdCtcCnt":0,"TotTmh":11.000000163912773,"Sic1EgyCntIn":0,"Sic2EgyCntIn":0,"Sic3EgyCntIn":0,"Sic4EgyCntIn":0,"TotSicEgyCntIn":0,"Sic1TdyEgyCntIn":0,"Sic2TdyEgyCntIn":0,"Sic3TdyEgyCntIn":0,"Sic4TdyEgyCntIn":0,"TotSicDyEgyCntI":0,"Serial Number":1260037647,"E-Total-In":2932.300043694675,"E-Total":4570.2000681012869,"h-On":28701.500427685678,"TotLodEgyCnt":0,"SlfCsmpIncEgy":0,"SlfCsmpEgy":0,"SlfCsmpIncTdy":0,"GdCsmpEgyTdy":0,"kWhFeed-In":0,"kWhConsumption":0,"GdFeedEgyTdy":0,"Adr":"Master","OpStt":"Operating","OpSttSlv1":"Operating","OpSttSlv2":"---","OpSttSlv3":"---","CardStt":2,"Prio":"Ina","BatChrgOp":"Float","AptPhs":"Off","GnDmdSrc":"None","GnStt":"Off","InvOpStt":"Run","InvOpSttSlv1":"Run","InvOpSttSlv2":"---","InvOpSttSlv3":"---","Rly1Stt":"On","Rly2Stt":"---","GnRnStt":"Off","Mode":"Operation","Error":"-----","ChpStt":"Idle","PvGdConStt":"---","LodGdConStt":"---","BatMntStt":"Off"}}
031_b12 8195
031_b34 -10632
031_b56 145
031_b78 215
060_BatTgtV 56.3
ClassicMQTT/MNC250CP/stat/readings {"BatTemperature":13.5,"NetAmpHours":0,"ChargeState":4,"InfoFlagsBits":-1308610556,"ReasonForResting":5,"NegativeAmpHours":0,"BatVoltage":51.5,"PVVoltage":112.1,"VbattRegSetPTmpComp":58.4,"TotalAmpHours":400,"WhizbangBatCurrent":0.0,"BatCurrent":5.0,"PVCurrent":2.3,"ConnectionState":0,"EnergyToday":1.2,"EqualizeTime":3600,"SOC":100,"Aux1":false,"Aux2":false,"Power":258.0,"FETTemperature":35.1,"PositiveAmpHours":0,"TotalEnergy":4282.4,"FloatTimeTodaySeconds":0,"RemainingAmpHours":400,"AbsorbTime":45000,"ShuntTemperature":-50.0,"PCBTemperature":36.1}
ClassicMQTT/MNC250CP/stat/info {"appVersion":2126,"deviceName":"CLASSIC\u0000","buildDate":"Wednesday, January 11, 2017","deviceType":"Classic","endingAmps":0.5,"hasWhizbang":true,"lastVOC":118.7,"model":"Classic 250V (rev 4)","mpptMode":9,"netVersion":2122,"nominalBatteryVoltage":48,"unitID":-446205605,"macAddress":"60:1D:0F:00:BC:82"}
010_b1 3
010_b2 2
010_b34 15360
 
I'm interested in how Sunny Boy production can be controlled even while at 60.0 Hz.
I've seen stored parameters setting maximum production lower than what the Sunny Boy is rated for.
Don't know if parameters get stored in flash (1000 write cycles endurance) or EEPROM (1,000,000 write cycles.)
For real-time or near-real-time automated adjustment, e.g. zero-export and limited export, the settings should be in RAM not non-volatile so as to not wear out the hardware.
The Sunny Boy Control and Sunny Explorer seemed to have a "save" command/function, but not sure if that meant "write from controller to Sunny Boy" or "now that change has already been written to Sunny Boy, tell it to store in non-volatile". With RS-485, bit rate is only 1200 baud.
 
The parameter settings stored long term on the SD card? Flash life could be a good point about changing parameters to accomplish control of the system.
 
SD card isn't used for operating parameters. It may be used for periodic logging, also updates and backup.
If it was, being field replaceable would address the wear-out issue. Assuming you can find obsolete full size SD cards of old format, up to 2GB.

I'm hoping there are ways to command output power that use volatile memory, to implement export limit while grid tied.
 
I got the RPI to change access level and allow setting parameters, using the yasdishell script. It's like you said Hedges, but with a little telephone game translation issue. There's a doc here which explains it. (it has another minor issue, lower case 'inst', not 'Inst'). https://www.solarsm.vn/support_center/installer-password-id00xx/

user is 'inst'
pwd is 'ID00' plus the two digit sum of month, day, last 2 of year = 35 today, so 'ID0035'

Other advice:
Switching to a higher security level could be dangerous.
Keep in mind you can brick or damage the inverter when set a parameter to a wrong value.
Not recommend to switch to a higher level only to record some hidden channel.
So you will do at your own risk.
 
Obviously bad electrical settings could overstress something.

I bricked a SWR2500U trying to get it to do frequency/watts.
I was given ROMs supposedly implementing that, but changing of some parameters wasn't supported.
With original ROMS I set minimum grid voltage incorrectly to half of nominal (based on one document indicating that was the minimum.) A document appropriate for the inverter gave a different value.
When the inverter operated, it set an error due to different limits being calculated by two routines.
All attempts to reset the error according to instructions failed. It is just a bit somewhere, but it disables operation.
 
Hi folks, looking for help on the communication on the Sunny Islands. I have 2 SI 6048 units (master and slave for 240V AC voltage output) with 2 48V DC battery banks of 30kw-hr each plus a pair of 7KW Sunny Boys and 32 each 445W solar panels from Canadian Solar (14KW system). I have the SMA Data Manager M and am already able to monitor the Sunny boys through ethernet cable through their factory ethernet connection.

I was told needed to purchase the RS-485 piggy back cards in order to be able to get data from the Sunny Islands and just install them but don't know how should I do the connection to pull the data. They each have COMSMAIn and COMSMAOut RS-485 / ethernet ports. I have run ethernet cables from each SI to the router (where the SB's are currently connected, as well as the Data Manager M) and not sure how to connect each to the router to get the communication. Individually connect them to the router? Daisy chain them and then to the router? The manuals does not provide details and have not found a video or tutorial anywhere.

Thanks,

Francisco
 
I was told needed to purchase the RS-485 piggy back cards in order to be able to get data from the Sunny Islands and just install them but don't know how should I do the connection to pull the data. They each have COMSMAIn and COMSMAOut RS-485 / ethernet ports. I have run ethernet cables from each SI to the router (where the SB's are currently connected, as well as the Data Manager M) and not sure how to connect each to the router to get the communication. Individually connect them to the router? Daisy chain them and then to the router? The manuals does not provide details and have not found a video or tutorial anywhere.

Thanks,

Francisco
The master SI inverter needs an rs485 piggyback card, not the slave, and daisy chain that with the PV inverters if you're connecting those. The chain needs (should have) termination at each end, there might be rj termination plugs in the SI socket already.

Keep reading the manuals, here's part of it for the DataManagerM, https://my.sma-service.com/s/article/SMA-Data-Manager-M-Connecting-RS485-Devices?language=en_US and similar section in the SI6048US manual discusses rs485 connections.

I could be wrong, are you sure the DataManagerM works with the SI6048US inverters? I thought maybe that is for speedwire / ethernet equipped inverters. (newer SI battery inverters and PV inverters) The DataManagerM says "The product is suitable for the communication with RS485 devices via Modbus RTU.", which might not be the older SI inverters do on the rs485 line. The older SI inverters do "SMA Data Protocol" on the rs485 line.

I'm pretty sure that SunnyWebboxRS485 would work with your SI inverter (others here have that set up), and I did get my SI6048US working (reading data only so far) over rs485 to a RPi with yasdi / yasdi2mqtt s/w.

Maybe SMA's idea for your combination of inverters is to have SI --- SunnyWebbox rs485 ---- speedwire/ethernet + newer PV inverters ---- DataManagerM to get them all talking together.
 
The master SI inverter needs an rs485 piggyback card, not the slave, and daisy chain that with the PV inverters if you're connecting those. The chain needs (should have) termination at each end, there might be rj termination plugs in the SI socket already.

Keep reading the manuals, here's part of it for the DataManagerM, https://my.sma-service.com/s/article/SMA-Data-Manager-M-Connecting-RS485-Devices?language=en_US and similar section in the SI6048US manual discusses rs485 connections.

I could be wrong, are you sure the DataManagerM works with the SI6048US inverters? I thought maybe that is for speedwire / ethernet equipped inverters. (newer SI battery inverters and PV inverters) The DataManagerM says "The product is suitable for the communication with RS485 devices via Modbus RTU.", which might not be the older SI inverters do on the rs485 line. The older SI inverters do "SMA Data Protocol" on the rs485 line.

I'm pretty sure that SunnyWebboxRS485 would work with your SI inverter (others here have that set up), and I did get my SI6048US working (reading data only so far) over rs485 to a RPi with yasdi / yasdi2mqtt s/w.

Maybe SMA's idea for your combination of inverters is to have SI --- SunnyWebbox rs485 ---- speedwire/ethernet + newer PV inverters ---- DataManagerM to get them all talking together.
Hi Daklein. I was told by SMA tech that needed one RS485 Piggy back for each SI, and that could use a data logger (EDMM Lite) instead of a web box to have the network communication (as the web box has been discontinued). About the daisy chain, should I, for example, but a termination ethernet plug on the COM-SMA-In plug of my SI master, connect an ethernet cable on its COM-SMA-out which would then go to the COM-SMA-In of the SI slave and then connect the Ethernet cable going to my router, which connects to the Data Manager M, on the COM-SMA- out of the SI slave port?
 
Back
Top