diy solar

diy solar

EG4 LifePOwer4 Alarm A3

wildbillpdx

Solar Enthusiast
Joined
Jun 24, 2023
Messages
420
Location
Oregon
I have six EG4 LifePOwer4 batteries that I'm monitoring with Solar Assistant and several show up in the app with messages about Alarm A3. I can't find anything in EG4 documentation describing the error nor can I find anything when searching online. The batteries seem to charge and discharge correctly so I'm not sure if I should be concerned. Any suggestions or input? Forgot to mention, no alarm lights on the batteries.
 

Attachments

  • Screenshot 2024-06-29 at 13-36-57 SolarAssistant.png
    Screenshot 2024-06-29 at 13-36-57 SolarAssistant.png
    41.7 KB · Views: 5
Probably just an overvoltage alarm set a bit low. What displays the screen of the BMS or.the EG4 software?

Alarm lights are generally only when protection level is reached, not alarm.

Or just a bug in SA. They removed the displayed (false) alarms for some batteries in the last version ...
 
The EG4 documentation for the EG4 LifePower4 battery communications protocol is sorely lacking to almost non-existent. Solar Assistant processes all the alarm data it receives from the batteries and simply displays "Alarm Ax" or "Alarm xx" except where there is documentation. for each alarm "bit", Each alarm is represented by a "Bit" in the alarm data, if there were documentation SA with display the actual alarm condition.

You will need to use the BMS_Test software downloadable from the EG4 website connected to your batteries (instead of SA). You can probably use the same cable you are using for SA. The BMS_Test software should display the actual alarm condition in some kind of text that hopefully has more meaning than "Alarm A3"

I am working on a "Software Master BMS" and this is one of the issues I am running into. I have "Tentatively" mapped out a number of the EG4 LifePower4 alarms:

BitOperation.SetBitInByte(ref responseBuffer[66], 0); //alarm 11
BitOperation.SetBitInByte(ref responseBuffer[66], 1); //alarm 12
BitOperation.SetBitInByte(ref responseBuffer[66], 2); //alarm 13
BitOperation.SetBitInByte(ref responseBuffer[66], 3); //Cell_VOL_Low_False alarm 14
BitOperation.SetBitInByte(ref responseBuffer[66], 4); //VOL_Line_Break alarm 15
BitOperation.SetBitInByte(ref responseBuffer[66], 5); //Charge MOSFET Error alarm 16
BitOperation.SetBitInByte(ref responseBuffer[66], 6); //Discharge MOSFET Error alarm 17
BitOperation.SetBitInByte(ref responseBuffer[66], 7); //Voltage Module Error alarm 18


BitOperation.SetBitInByte(ref responseBuffer[67], 0); //Discharge overtemp protection or NTC_Disconnection alarm 21
BitOperation.SetBitInByte(ref responseBuffer[67], 1); //Discharge under temp protection or ADC_MOD_Fault alarm 22
BitOperation.SetBitInByte(ref responseBuffer[67], 2); //Reverse_Battery alarm 23
BitOperation.SetBitInByte(ref responseBuffer[67], 3); //Fan_On_Failure alarm 24
BitOperation.SetBitInByte(ref responseBuffer[67], 4); //Battery_Locked alarm 25
BitOperation.SetBitInByte(ref responseBuffer[67], 5); //alarm 26
BitOperation.SetBitInByte(ref responseBuffer[67], 6); //alarm 27
BitOperation.SetBitInByte(ref responseBuffer[67], 7); //alarm 28

BitOperation.SetBitInByte(ref responseBuffer[68], 0); //Charging or DISC_OV_TEMP_Protection alarm 31
BitOperation.SetBitInByte(ref responseBuffer[68], 1); //Discharging or DISC_UN_TEMP_Protection alarm 32
BitOperation.SetBitInByte(ref responseBuffer[68], 2); //Short current protection or Pack_OV_VOL_Protection alarm 43
BitOperation.SetBitInByte(ref responseBuffer[68], 3); //Over current protection or Startup_Failed
BitOperation.SetBitInByte(ref responseBuffer[68], 4); //Over voltage protection
BitOperation.SetBitInByte(ref responseBuffer[68], 5); //Under voltage protection
BitOperation.SetBitInByte(ref responseBuffer[68], 6); //Charging over temp protection
BitOperation.SetBitInByte(ref responseBuffer[68], 7); //Charging under temp protectionor or Pack_UN_Vol_Protection

//no alarms
BitOperation.SetBitInByte(ref responseBuffer[69], 0); //alarm 51
BitOperation.SetBitInByte(ref responseBuffer[69], 1); //alarm 52
BitOperation.SetBitInByte(ref responseBuffer[69], 2); //Short_Circuit_Protection alarm 53
BitOperation.SetBitInByte(ref responseBuffer[69], 3); //OV_CUR_Protection alarm 54
BitOperation.SetBitInByte(ref responseBuffer[69], 4); //alarm 55
BitOperation.SetBitInByte(ref responseBuffer[69], 5); //UN_VOL_Protection alarm 56
BitOperation.SetBitInByte(ref responseBuffer[69], 6); //CHG_OV_TEMP_Protection alarm 57
BitOperation.SetBitInByte(ref responseBuffer[69], 7); //CHG_UN_TEMP_Protection alarm 58

BitOperation.SetBitInByte(ref responseBuffer[70], 0); //Ambient_Low_TEMP_Protection alarm 51
BitOperation.SetBitInByte(ref responseBuffer[70], 1); //ENV_High_TEMP_Protection alarm 52
BitOperation.SetBitInByte(ref responseBuffer[70], 2); //Serious_Alarm alarm 53
BitOperation.SetBitInByte(ref responseBuffer[70], 3); //alarm 54
BitOperation.SetBitInByte(ref responseBuffer[70], 4); //alarm 55
BitOperation.SetBitInByte(ref responseBuffer[70], 5); //alarm 56
BitOperation.SetBitInByte(ref responseBuffer[70], 6); //alarm 57
BitOperation.SetBitInByte(ref responseBuffer[70], 7); //alarm 58

BitOperation.SetBitInByte(ref responseBuffer[71], 0); //Manual_CHG_MOS_Open alarm 61
BitOperation.SetBitInByte(ref responseBuffer[71], 1); //Manual_CHG_MOS_Off alarm 62
BitOperation.SetBitInByte(ref responseBuffer[71], 2); //Manual_DISC_MOS_Open alarm 63
BitOperation.SetBitInByte(ref responseBuffer[71], 3); //Manual_DISC_MOS_Off alarm 64
BitOperation.SetBitInByte(ref responseBuffer[71], 4); //alarm 65
BitOperation.SetBitInByte(ref responseBuffer[71], 5); //MOSFET_OV_TEMP_Protection alarm 66
BitOperation.SetBitInByte(ref responseBuffer[71], 6); //MOSFET_LO_TEMP_Protection alarm 67
BitOperation.SetBitInByte(ref responseBuffer[71], 7); //CHG_Open_TEMP_Too_Low alarm 68

BitOperation.SetBitInByte(ref responseBuffer[72], 0); //alarm 71
BitOperation.SetBitInByte(ref responseBuffer[72], 1); //alarm 72
BitOperation.SetBitInByte(ref responseBuffer[72], 2); //alarm 73
BitOperation.SetBitInByte(ref responseBuffer[72], 3); //alarm 74
BitOperation.SetBitInByte(ref responseBuffer[72], 4); //alarm 75
BitOperation.SetBitInByte(ref responseBuffer[72], 5); //alarm 76
BitOperation.SetBitInByte(ref responseBuffer[72], 6); //alarm 77
BitOperation.SetBitInByte(ref responseBuffer[72], 7); //alarm 78

BitOperation.SetBitInByte(ref responseBuffer[73], 0); //SOCLow Alarm2 alarm 81
BitOperation.SetBitInByte(ref responseBuffer[73], 1); //Vibration Alarm alarm 82
BitOperation.SetBitInByte(ref responseBuffer[73], 2); //Dry contacts1 alarm 83
BitOperation.SetBitInByte(ref responseBuffer[73], 3); //Fire alarm alarm 84
BitOperation.SetBitInByte(ref responseBuffer[73], 4); //alarm 85
BitOperation.SetBitInByte(ref responseBuffer[73], 5); //alarm 86
BitOperation.SetBitInByte(ref responseBuffer[73], 6); //alarm 87
BitOperation.SetBitInByte(ref responseBuffer[73], 7); //alarm 88

BitOperation.SetBitInByte(ref responseBuffer[74], 0); //Ambient Over Temperature Alarm alarm 91
BitOperation.SetBitInByte(ref responseBuffer[74], 1); //Ambient Under Temperature Warning alarm 92
BitOperation.SetBitInByte(ref responseBuffer[74], 2); //MOSOver Temperature Warning alarm 93
BitOperation.SetBitInByte(ref responseBuffer[74], 3); //SOCLow Alarm alarm 94
BitOperation.SetBitInByte(ref responseBuffer[74], 4); //Voltage Diff Alarm or Differential Pressure Warning Too Large
BitOperation.SetBitInByte(ref responseBuffer[74], 5); //Battery Release Temperature Alarm alarm 96
BitOperation.SetBitInByte(ref responseBuffer[74], 6); //BAT_DISC_Low_TEMP_Alarm alarm 97
BitOperation.SetBitInByte(ref responseBuffer[74], 7); //alarm 98

BitOperation.SetBitInByte(ref responseBuffer[75], 0); //Cell_Over_VOL_Alarm no alarm
BitOperation.SetBitInByte(ref responseBuffer[75], 1); //low voltage alarm or Cell_Low_VOL_Alarm
BitOperation.SetBitInByte(ref responseBuffer[75], 2); //Pack_Over_VOL_Alarm alarm A3
BitOperation.SetBitInByte(ref responseBuffer[75], 3); //Pack_Low_VOL_Alarm alarm A4
BitOperation.SetBitInByte(ref responseBuffer[75], 4); //CHG_Over_CUR_Alarm alarm A5
BitOperation.SetBitInByte(ref responseBuffer[75], 5); //DISC_Over_CURR_Alarm alarm A6
BitOperation.SetBitInByte(ref responseBuffer[75], 6); //BAT_Over_TEMP_Alarm alarm A7
BitOperation.SetBitInByte(ref responseBuffer[75], 7); //BAT_Low_TEMP_Alarm alarm A8
 
You could check Narada protocol documentation : I got some Narada batteries and the EG4 BMS test software allows to retrieved their info ...
 
Unfortunately the Narada/Shinwa protocol does not have the documentation for the two commands that Solar Assistant sends to each battery:

The first 7E-01-01-00-FE-0D is a command to get the battery analog data (i.e. cell voltages, SOC and battery voltage) and the response includes 10 bytes of alarm data/flags where each bit represents and alarm.

The second is 7E-01-33-00-FE-0D which gets the BMS firmware version and is displayed as "Model Name" and "Firmware".

I have created test software that SA is connected to that emulates an EG4 LifePower4 battery. I can set each "bit" is the alarm data being sent back to SA and see alarms such as "Alarm A3" displayed.

The BMS_Test software does not use the 7E-01-01-00-FE-0D command but instead uses 7E 32 30 30 31 34 41 34 32 30 30 30 30 46 44 41 32 0D which is a documented command to get the battery analog data so I cannot use my emulator to break down the 7E-01-01-00-FE-0D response to see what BMS_Test displays as I set the alarm bits.

Older versions of SA used 7E 32 30 30 31 34 41 34 32 30 30 30 30 46 44 41 32 0D and the latest shifted to 7E-01-01-00-FE-0D. Wonder where SA got the documentation but it is clear that SA does not have any documentation to decode all the alarm data.

As always, the documentation across the Solar Industry (except Victron) is very lacking
 
Thanks to all for the responses. I think it is probably an issue with SA and not the batteries. I recently upgraded to the 64bit version of SA and that's when I started noticing the errors in the SA screens. I sent a message to SA support asking about it but haven't heard back. The message randomly appears on all six batteries.
 

diy solar

diy solar
Back
Top