diy solar

diy solar

The Electrodacus SBMS thread (SBMS0, DSSR50, etc)

In my 10S clip i do see wide variation in cell level voltages on each. All vary at least 40mV and cell 3 varies by 70mV.
This could be a statistical anomaly. I didn’t take more video.
They sort of seem consistent.
Is the same reported on all ED BMSs?
 
I am in the early stages of researching the electric/solar system for my RV and I am really considering going the SBMS0 and DSSR50 route and DIY battery pack, but I am actually concerned about panel availability.

Will PV manufacturers still make 60/120HC panels in the future? I looked at the new offerings from several big companies (Trina, Rec, CanadianSolar) and it looks like all of them are going for more cells, higher voltage etc. Is this a real trend? What do folks think?

My timeline to purchase the panels will be mid next year and let's say I find and I purchase 10 120HC panels and then in two years I damage one or more, will I be able to find replacements? I guess I can always add MPPT with a non 60/120HC panel ?
 
I would call a solar wholesaler / supplier and ask them. It never occurred to me you couldn't find 60 cell panels. I have 3 on my RV for 3 years. I assume they'll last a very long time, since they only see 4 to 6 weeks of use each year. And normal are 25 year rated.
Why not buy a spare panel or two. My 60 cell units were $160 each 3 years ago. I assume the price will go down, even.

BTW - in thinking further, I assume mfg's will have replacements for broken panels for those already in service on roof tops. If a 60 cell breaks, I can't just swap in a 72, including 10 years from now.
That isn't an obscure size.
Doug
 
I am in the early stages of researching the electric/solar system for my RV and I am really considering going the SBMS0 and DSSR50 route and DIY battery pack, but I am actually concerned about panel availability.

Will PV manufacturers still make 60/120HC panels in the future? I looked at the new offerings from several big companies (Trina, Rec, CanadianSolar) and it looks like all of them are going for more cells, higher voltage etc. Is this a real trend? What do folks think?

My timeline to purchase the panels will be mid next year and let's say I find and I purchase 10 120HC panels and then in two years I damage one or more, will I be able to find replacements? I guess I can always add MPPT with a non 60/120HC panel ?
You can use 72 cell panels, the extra 12 cells would be wasted, or like you said, add MPPT.
 
I think the sbsms0 has a flexible enough deisgn that the used market will always allow you to get a few used ones. I'm talking with a guy on facebook marketplace right now who has 290w 60 cell panels for $100 if I get enough. You may be on to something, as the 60 aren't all over the place. They still seem to have 230-250w cells all over ebay from various places.

If you need an inverter anyway, they make some inexpensive inverter/solar charger combo boxes at 24v which are almost the same price as a similar inverter without charger. I figured if I ever got the sbms0 I may still use the DSSR20 or 50 and get one, just to have some cheap redundancy built in (charge with inverter combo or dssr50).
 
Has anyone succeeded in decoding the text string sent from the UART on an Electrodacus SBMS (appears on pins 1&2 of the 10 pin header connector if onboard wifi is disabled)?

According to the Electrodacus manual this is encoded base 91 and a full frame of info with all monitored parameters is sent out at a baud rate you can set. I would ideally like to accomplish this on arduino nano, just because that’s the hardware I already have, but lacking experience of coding I really need to piggyback on someone else’s successful effort (ie. find some working code), hence asking here!
 
I am in the early stages of researching the electric/solar system for my RV and I am really considering going the SBMS0 and DSSR50 route and DIY battery pack, but I am actually concerned about panel availability.

Will PV manufacturers still make 60/120HC panels in the future? I looked at the new offerings from several big companies (Trina, Rec, CanadianSolar) and it looks like all of them are going for more cells, higher voltage etc. Is this a real trend? What do folks think?

My timeline to purchase the panels will be mid next year and let's say I find and I purchase 10 120HC panels and then in two years I damage one or more, will I be able to find replacements? I guess I can always add MPPT with a non 60/120HC panel ?
you can buy new 60-cell panels and new 72-cell panels right now
you can buy used ones on eBay also..
the Electrodacus dssr20 has a 20 amp rating
up to 25 amp maximum is my understanding... for the Electrodaus dssr20's but better to stay 20amps or less into each of them.... don't overdo it to get the magic smoke....
the new Electrodacu dssr50 will have a higher amp rating
the reason to utilize 60-cell panels is 2 of them in parallel configuration match up the closest with the right amount of amps without going over the rated limits of the dssr20....
the Electrodacus dssr20's are designed for the new Electrodacu sbms0
I have 4 of the Electrodacu sbms0 and use 60-cell panels in parallel....
when the Electrodacus dssr50 is available I will utilize some of those also...
you can use 72-cell panels now without a problem.... and if you have wire runs longer than 60 feet then the 72-cell panels do match up and become more sensible for use with dssr20 charge controllers...
 
Last edited:
Has anyone succeeded in decoding the text string sent from the UART on an Electrodacus SBMS (appears on pins 1&2 of the 10 pin header connector if onboard wifi is disabled)?

According to the Electrodacus manual this is encoded base 91 and a full frame of info with all monitored parameters is sent out at a baud rate you can set. I would ideally like to accomplish this on arduino nano, just because that’s the hardware I already have, but lacking experience of coding I really need to piggyback on someone else’s successful effort (ie. find some working code), hence asking here!
I have done this for a project I was working on, although I haven't touched the project since 2021. I was surprised at the time that no one else had done this before as I too was frustrated by the complexity and was hoping like you to build off from someone else's code. But even emailing Dacian, there really wasn't much he could provide, as it didn't sound like he or anyone he knew of had written any actual functional code.

Took me a while of staring cross-eyed at the manual (my only real source of a cryptic answer) until I had a few assorted "aha!" moments of revelation where something clicked in my head, then a bunch of trial and error trying to make functional code. I can supply relevant Arduino code snippets here... (I don't think I ever posted this publicly before... sorry, folks).

First, some constants:
C:
char Months[12][9] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
char AMPM[2] = "xm";

// set up defines for easily testing bits in "ERR" data from SBMS40 serial UART datastream
#define OV        1               // Bit 0 over-voltage. Battery full, charging stopped (not an error)
#define OVLK      2               // Bit 1 charge MOSFET has probably failed
#define UV        4               // Bit 2 under-voltage. Battery empty (below min voltage). Not an error (but not good)
#define UVLK      8               // Bit 3 discharge MOSTFET has probably failed
#define IOT       0x10            // Bit 4 Internal over temperature. SBMS40 has gotten too hot.
#define COC       0x20            // Bit 5 charge over-current. Error, can be caused by several things
#define DOC       0x40            // Bit 6 discharge over-current. Error, can be caused by several things
#define DSC       0x80            // Bit 7 (discharge?) short-circuit. Error, can be caused by several things
#define CELF      0x100           // Bit 8 cell fail. A cell has a voltage below what is acceptable. Bad cell or bad connection between cells
#define OPEN      0x200           // Bit 9 open cell wire. Bad connection in one of the cell monitoring wires
#define LVC       0x400           // Bit 10 low-voltage cell. A cell has a voltage so low that normal charging is not allowed. Charging the cell independently outside of the BMS might recover it
#define ECCF      0x800           // Bit 11 EEPROM fail.
#define CFET      0x1000          // Bit 12 charge FET active. Not an error. When fully charged, will clear and OV will light
#define EOC       0x2000          // Bit 13 end of charge. Battery full, not an error.
#define DFET      0x4000          // Bit 14 discharge FET active. Will go out when battery is exhausted and UV will light. Not an error.
unsigned int Flags = 0;

char SBMSdata[61] = "                                                            ";      // each data packet from the SBMS40 is a 59-character bunch of data encoded in base-91 using printable characters from 35 "#" to 125 "}"
char nullbuffer[64];

Then, the main read function:
C:
void readSBMSdata() {
  //code to read serial stream off from SBMS40 goes here

  // for now just populate the global variable with a static sample value of working data
  // strcpy(SBMSdata, "3';2LD$,I)I*I+I+H}I%I+I**h##+#)P####->##################%N(");
  // Serial.print("Buffer size: ");
  //Serial.println(Serial.available());

  // data packet is 60 bytes but there's a newline char so a complete buffer is actually 61 bytes. For sanity we
  // keep at it until we see a complete 61 byte buffer, waiting if it's too small or flushing if it's too big.
  // First few loops can be off until the SBMS sends its first data packet after Arduino boot. Depends on log refresh
  // rate on SBMS. Don't set too small... weird stuff happens and more sanity checking would be necessary.
  // 5 seconds seems to work pretty well but depends on how big the loop() routine becomes.
 
  if (Serial.available() < 61 ) {
    // Serial.println("Waiting for full buffer...");
  }

  if (Serial.available() > 61) {
    // Serial.println("Buffer too big, flushing...");
    Serial.readBytes(nullbuffer,Serial.available());
  }

  if (Serial.available() == 61) {
    Serial.readBytes(SBMSdata,61); 
  }
  return;
}

Set up the serial port within the setup() section:
C:
void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB
  }

Then, in the main loop() somewhere, you poll the serial line for data:
C:
readSBMSdata(); // pull a datapacket string from the SBMS40 UART serial line

This populates the previously-defined SBMSdata string, which you can then decode now. This code will dump decoded data to the serial console:

C:
  // now we'll decode the data and populate some standard variables that can be used later
  unsigned int Year = SBMSdata[0] - 35 + 2000;
  unsigned int Month = SBMSdata[1] - 36;
  unsigned int Day = SBMSdata[2] - 35;
  unsigned int Hour = SBMSdata[3] - 35;
  unsigned int Minute = SBMSdata[4] - 35;
  unsigned int Second = SBMSdata[5] - 35;
  unsigned int SOC = ((SBMSdata[6] - 35) * 91) + (SBMSdata[7] - 35); // battery state-of-charge percentage
  float intTemp = (((SBMSdata[24] - 35) * 91) + (SBMSdata[25] - 35) - 450) / 10; // internal temperature in celcius
  float extTemp = (((SBMSdata[26] - 35) * 91) + (SBMSdata[27] - 35) - 450) / 10; // external temperature in celcius
  // (C*(9/5))+32=F
  // deg symbol is ASCII 223 ?
  byte Charge = SBMSdata[28]; // + means charging, - means discharging. This is a simple char and doesn't need decoding
  float Battery = ((SBMSdata[29] - 35) * (91 * 91)) + ((SBMSdata[30] - 35) * 91) + (SBMSdata[31]); // battery milliamps
  float PV1 = ((SBMSdata[32] - 35) * (91 * 91)) + ((SBMSdata[33] - 35) * 91) + (SBMSdata[34]); // solar panel milliamps
  // we skip bytes 35-37 as the SMBS40 model doesn't have a PV2
  float extLoad = ((SBMSdata[38] - 35) * (91 * 91)) + ((SBMSdata[38] - 35) * 91) + (SBMSdata[40]); // external load milliamps
  if ( Charge == '-') {
    Battery = -Battery;
  }
  float intLoad = PV1 - Battery;
  Flags = ((SBMSdata[56] - 35) * (91 * 91)) + ((SBMSdata[57] - 35) * 91) + (SBMSdata[58]); // 15 flag bits

      Serial.println(SBMSdata);
      Serial.print(Months[Month]);
      Serial.print(" ");
      Serial.print(Day);
      Serial.print(", ");
      Serial.println(Year);

      if ( Hour > 11 ) {
      AMPM[0] = 'p';
      }  else {
      AMPM[0] = 'a';
      }
      AMPM[2] = 0;

      if ( Hour > 11 ) {
      Hour = Hour - 12;
      }
      Serial.print(Hour);
      Serial.print(":");
      Serial.print(Minute);
      Serial.print(":");
      Serial.print(Second);
      Serial.print(" ");
      Serial.println(AMPM);

      Serial.print("Battery: ");
      Serial.print(SOC);
      Serial.print("% ");
      Serial.print(Battery/1000);
      Serial.println("A");

      Serial.print("Internal: ");
      Serial.println(intTemp);
      Serial.print("External: ");
      Serial.println(extTemp);

      Serial.print("Ext load: ");
      Serial.print(extLoad/1000);
      Serial.println(" A");

      Serial.print("Int load: ");
      Serial.print(intLoad/1000);
      Serial.println(" A");

      // Flags override for testing
      // Flags = 32767;

      Serial.print("Flags: ");
      char FlagsB[10];
      itoa( Flags, FlagsB, 2);
      Serial.println(FlagsB);
      Serial.println(Flags);

      if ( Flags & OV) { Serial.print("OV ");}
      if ( Flags & OVLK) { Serial.print("OVLK ");}
      if ( Flags & UV) { Serial.print("UV ");}
      if ( Flags & UVLK) { Serial.print("UVLK ");}
      if ( Flags & IOT) { Serial.print("IOT ");}
      if ( Flags & COC) { Serial.print("COC ");}
      if ( Flags & DOC) { Serial.print("DOC ");}
      if ( Flags & DSC) { Serial.print("DSC ");}
      if ( Flags & CELF) { Serial.print("CELF ");}
      if ( Flags & OPEN) { Serial.print("OPEN ");}
      if ( Flags & LVC) { Serial.print("LVC ");}
      if ( Flags & ECCF) { Serial.print("ECCF ");}
      if ( Flags & CFET) { Serial.print("CFET ");}
      if ( Flags & EOC) { Serial.print("EOC ");}
      if ( Flags & DFET) { Serial.print("DFET ");}

I can't promise this code will run exactly as-is as I pulled the relevant sections out of a much-bigger project. But hopefully it gets you most of the way there.
 
I have done this for a project I was working on, although I haven't touched the project since 2021. I was surprised at the time that no one else had done this before as I too was frustrated by the complexity and was hoping like you to build off from someone else's code. But even emailing Dacian, there really wasn't much he could provide, as it didn't sound like he or anyone he knew of had written any actual functional code.

Took me a while of staring cross-eyed at the manual (my only real source of a cryptic answer) until I had a few assorted "aha!" moments of revelation where something clicked in my head, then a bunch of trial and error trying to make functional code. I can supply relevant Arduino code snippets here... (I don't think I ever posted this publicly before... sorry, folks).

First, some constants:
C:
char Months[12][9] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" };
char AMPM[2] = "xm";

// set up defines for easily testing bits in "ERR" data from SBMS40 serial UART datastream
#define OV        1               // Bit 0 over-voltage. Battery full, charging stopped (not an error)
#define OVLK      2               // Bit 1 charge MOSFET has probably failed
#define UV        4               // Bit 2 under-voltage. Battery empty (below min voltage). Not an error (but not good)
#define UVLK      8               // Bit 3 discharge MOSTFET has probably failed
#define IOT       0x10            // Bit 4 Internal over temperature. SBMS40 has gotten too hot.
#define COC       0x20            // Bit 5 charge over-current. Error, can be caused by several things
#define DOC       0x40            // Bit 6 discharge over-current. Error, can be caused by several things
#define DSC       0x80            // Bit 7 (discharge?) short-circuit. Error, can be caused by several things
#define CELF      0x100           // Bit 8 cell fail. A cell has a voltage below what is acceptable. Bad cell or bad connection between cells
#define OPEN      0x200           // Bit 9 open cell wire. Bad connection in one of the cell monitoring wires
#define LVC       0x400           // Bit 10 low-voltage cell. A cell has a voltage so low that normal charging is not allowed. Charging the cell independently outside of the BMS might recover it
#define ECCF      0x800           // Bit 11 EEPROM fail.
#define CFET      0x1000          // Bit 12 charge FET active. Not an error. When fully charged, will clear and OV will light
#define EOC       0x2000          // Bit 13 end of charge. Battery full, not an error.
#define DFET      0x4000          // Bit 14 discharge FET active. Will go out when battery is exhausted and UV will light. Not an error.
unsigned int Flags = 0;

char SBMSdata[61] = "                                                            ";      // each data packet from the SBMS40 is a 59-character bunch of data encoded in base-91 using printable characters from 35 "#" to 125 "}"
char nullbuffer[64];

Then, the main read function:
C:
void readSBMSdata() {
  //code to read serial stream off from SBMS40 goes here

  // for now just populate the global variable with a static sample value of working data
  // strcpy(SBMSdata, "3';2LD$,I)I*I+I+H}I%I+I**h##+#)P####->##################%N(");
  // Serial.print("Buffer size: ");
  //Serial.println(Serial.available());

  // data packet is 60 bytes but there's a newline char so a complete buffer is actually 61 bytes. For sanity we
  // keep at it until we see a complete 61 byte buffer, waiting if it's too small or flushing if it's too big.
  // First few loops can be off until the SBMS sends its first data packet after Arduino boot. Depends on log refresh
  // rate on SBMS. Don't set too small... weird stuff happens and more sanity checking would be necessary.
  // 5 seconds seems to work pretty well but depends on how big the loop() routine becomes.
 
  if (Serial.available() < 61 ) {
    // Serial.println("Waiting for full buffer...");
  }

  if (Serial.available() > 61) {
    // Serial.println("Buffer too big, flushing...");
    Serial.readBytes(nullbuffer,Serial.available());
  }

  if (Serial.available() == 61) {
    Serial.readBytes(SBMSdata,61);
  }
  return;
}

Set up the serial port within the setup() section:
C:
void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB
  }

Then, in the main loop() somewhere, you poll the serial line for data:
C:
readSBMSdata(); // pull a datapacket string from the SBMS40 UART serial line

This populates the previously-defined SBMSdata string, which you can then decode now. This code will dump decoded data to the serial console:

C:
  // now we'll decode the data and populate some standard variables that can be used later
  unsigned int Year = SBMSdata[0] - 35 + 2000;
  unsigned int Month = SBMSdata[1] - 36;
  unsigned int Day = SBMSdata[2] - 35;
  unsigned int Hour = SBMSdata[3] - 35;
  unsigned int Minute = SBMSdata[4] - 35;
  unsigned int Second = SBMSdata[5] - 35;
  unsigned int SOC = ((SBMSdata[6] - 35) * 91) + (SBMSdata[7] - 35); // battery state-of-charge percentage
  float intTemp = (((SBMSdata[24] - 35) * 91) + (SBMSdata[25] - 35) - 450) / 10; // internal temperature in celcius
  float extTemp = (((SBMSdata[26] - 35) * 91) + (SBMSdata[27] - 35) - 450) / 10; // external temperature in celcius
  // (C*(9/5))+32=F
  // deg symbol is ASCII 223 ?
  byte Charge = SBMSdata[28]; // + means charging, - means discharging. This is a simple char and doesn't need decoding
  float Battery = ((SBMSdata[29] - 35) * (91 * 91)) + ((SBMSdata[30] - 35) * 91) + (SBMSdata[31]); // battery milliamps
  float PV1 = ((SBMSdata[32] - 35) * (91 * 91)) + ((SBMSdata[33] - 35) * 91) + (SBMSdata[34]); // solar panel milliamps
  // we skip bytes 35-37 as the SMBS40 model doesn't have a PV2
  float extLoad = ((SBMSdata[38] - 35) * (91 * 91)) + ((SBMSdata[38] - 35) * 91) + (SBMSdata[40]); // external load milliamps
  if ( Charge == '-') {
    Battery = -Battery;
  }
  float intLoad = PV1 - Battery;
  Flags = ((SBMSdata[56] - 35) * (91 * 91)) + ((SBMSdata[57] - 35) * 91) + (SBMSdata[58]); // 15 flag bits

      Serial.println(SBMSdata);
      Serial.print(Months[Month]);
      Serial.print(" ");
      Serial.print(Day);
      Serial.print(", ");
      Serial.println(Year);

      if ( Hour > 11 ) {
      AMPM[0] = 'p';
      }  else {
      AMPM[0] = 'a';
      }
      AMPM[2] = 0;

      if ( Hour > 11 ) {
      Hour = Hour - 12;
      }
      Serial.print(Hour);
      Serial.print(":");
      Serial.print(Minute);
      Serial.print(":");
      Serial.print(Second);
      Serial.print(" ");
      Serial.println(AMPM);

      Serial.print("Battery: ");
      Serial.print(SOC);
      Serial.print("% ");
      Serial.print(Battery/1000);
      Serial.println("A");

      Serial.print("Internal: ");
      Serial.println(intTemp);
      Serial.print("External: ");
      Serial.println(extTemp);

      Serial.print("Ext load: ");
      Serial.print(extLoad/1000);
      Serial.println(" A");

      Serial.print("Int load: ");
      Serial.print(intLoad/1000);
      Serial.println(" A");

      // Flags override for testing
      // Flags = 32767;

      Serial.print("Flags: ");
      char FlagsB[10];
      itoa( Flags, FlagsB, 2);
      Serial.println(FlagsB);
      Serial.println(Flags);

      if ( Flags & OV) { Serial.print("OV ");}
      if ( Flags & OVLK) { Serial.print("OVLK ");}
      if ( Flags & UV) { Serial.print("UV ");}
      if ( Flags & UVLK) { Serial.print("UVLK ");}
      if ( Flags & IOT) { Serial.print("IOT ");}
      if ( Flags & COC) { Serial.print("COC ");}
      if ( Flags & DOC) { Serial.print("DOC ");}
      if ( Flags & DSC) { Serial.print("DSC ");}
      if ( Flags & CELF) { Serial.print("CELF ");}
      if ( Flags & OPEN) { Serial.print("OPEN ");}
      if ( Flags & LVC) { Serial.print("LVC ");}
      if ( Flags & ECCF) { Serial.print("ECCF ");}
      if ( Flags & CFET) { Serial.print("CFET ");}
      if ( Flags & EOC) { Serial.print("EOC ");}
      if ( Flags & DFET) { Serial.print("DFET ");}

I can't promise this code will run exactly as-is as I pulled the relevant sections out of a much-bigger project. But hopefully it gets you most of the way there.
Thanks @sremick, what a great answer! I’ll use this as a starting point (y) Out of curiosity, what was your larger project using the SMBS data for?
 
Last edited:
Thanks @sremick, what a great answer! I’ll use this as a starting point (y) Out of curiosity, what was your larger project using the SMBS data for?
A portable battery power kit (charge controller, batteries, inverter, connectors, etc all in a compact box). It began with wanting an external display showing specific data I cared about but then morphed into all sorts of other enhancements as I came up with ways I could control/respond to things using the Arduino based upon the data I was getting from the SBMS (cooling, heating, indicator lights, etc). Then I decided I wanted to use an e-ink display and that sent me down a whole 'nother rabbithole and I ended up writing my own custom code to simplify writing to it (since they're really weird/unique).

My code is extremely un-optimized but that's because it was the first stab at a working version so the emphasis was on clarity of what it was doing. I then started to rewrite the entire software but never got to the point on "v2" where I was re-incorporating the functional SBMS code I shared with you above. So that benefits you... hopefully it makes sense. I'm not a particularly-skilled C-programmer and didn't really get deep into C until I started microcontroller programming with the Arduino.

I haven't abandoned the project... just had some massive/catastrophic life changes so I've had to re-prioritize tasks/projects and shift my focus for a while. For a while I thought I lost all the code and was traumatized but I ultimately managed to get it back.
 
I am also interested in this. The wifi module on the SBMS0 is unreliable and I have recently added a victron smart shunt for remote monitoring. But I would still love to get the SBMS0 hooked up to a Raspberry Pi and possibly be able to make decisions based on that.
 
Something else worth noting (that Dacian mentioned to me) is that, although the serial port is technically 2 wires, because the SBMS can't/doesn't receive any data you can get away with one wire.

There was also the necessity to opto-isolate or magneto-isolate the serial line between the two devices. This isn't obvious from my code. According to my notes I used an ADUM1201.
 
I am also interested in this. The wifi module on the SBMS0 is unreliable and I have recently added a victron smart shunt for remote monitoring. But I would still love to get the SBMS0 hooked up to a Raspberry Pi and possibly be able to make decisions based on that.
what infomation are you getting from the victron smart shunt? I have the sbms40. Considering adding something extra for monitoring
 
what infomation are you getting from the victron smart shunt? I have the sbms40. Considering adding something extra for monitoring
I want to know the state of charge without having to walk to the shed and back each time, it also shows the charge rate. The multiplus connected to the pi shows only the load.

The smartshunt does not show what the panels produce, but in my case (I do not have DC loads) that can be inferred by adding the load on the multiplus to the charge current. Or in the case of the smartshunt showing discharging, subtracting the discharge rate from the load.
 
I am very interested in the Solar BMS (website | kickstarter | youtube | message board). Dacian (the creator), makes some great and very innovative and creative products, and puts a lot of work into making sure to provide documentation (SBMS0 Manual | SMBS40/120 Manual | DSSR20 Manual), and I very much respect and appreciate his commitment to open hardware and open source software!

While he does a very good job documenting the technical spec's and capabilities of the SBMS, his website and user manual lacks a clear conceptual level overview (use-case, context, broad contours, FAQ, and so on). For electrical engineers and seasoned electrical tinkerers, this commentary probably isn't necessary, but for many of us it is.

@FilterGuy recently put together a very useful document outlining the I/O on the new version of the SBMS0 (version v03d)
Question/concern: From the positive battery terminal through shunt and disconnect switch/busbar, there is no fuse protecting this wire/shunt/disconnect switch/busbar. This is how you're suppose to wire Electrodacus. Do I have a concern or is there a way to protect this run?
 
Question/concern: From the positive battery terminal through shunt and disconnect switch/busbar, there is no fuse protecting this wire/shunt/disconnect switch/busbar. This is how you're suppose to wire Electrodacus. Do I have a concern or is there a way to protect this run?
I plan to place a class T fuse just after the shunt and before anything else.
 
I plan to place a class T fuse just after the shunt and before anything else.
That's what I got to thinking. I would then enclose two shunts in plastic electrical box??? I also heard that wire going from battery positive to battery charge shunt should be very short and image quite over sized
 
I want to know the state of charge without having to walk to the shed and back each time, it also shows the charge rate. The multiplus connected to the pi shows only the load.

The smartshunt does not show what the panels produce, but in my case (I do not have DC loads) that can be inferred by adding the load on the multiplus to the charge current. Or in the case of the smartshunt showing discharging, subtracting the discharge rate from the load.

I was about to suggest having something like a pi zero with camera attached close by so you could view the LCD over a network, but I guess you'd have to add some type of servo to adjust the buttons to get out of the screensaver mode of the lcd... ha.

Did you ever get anything more elegant than this idea working?
 
Back
Top