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