| 
						
						
							
								
							
						
						
					 | 
					@ -594,14 +594,40 @@ class Inverter { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        static String getAlarmStr(uint16_t alarmCode) { | 
					 | 
					 | 
					        static String getAlarmStr(uint16_t alarmCode) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            switch (alarmCode) { // breaks are intentionally missing!
 | 
					 | 
					 | 
					            switch (alarmCode) { // breaks are intentionally missing!
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 1:    return String(F("Inverter start")); | 
					 | 
					 | 
					                case 1:    return String(F("Inverter start")); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 2:    return String(F("DTU command failed")); | 
					 | 
					 | 
					                case 2:    return String(F("Time calibration")); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 73:   return String(F("Temperature >80°C")); // https://github.com/tbnobody/OpenDTU/discussions/590#discussioncomment-6049750
 | 
					 | 
					 | 
					                case 3:    return String(F("EEPROM reading and writing error during operation")); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 4:    return String(F("Offline")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 11:   return String(F("Grid voltage surge")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 12:   return String(F("Grid voltage sharp drop")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 13:   return String(F("Grid frequency mutation")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 14:   return String(F("Grid phase mutation")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 15:   return String(F("Grid transient fluctuation")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 36:   return String(F("INV overvoltage or overcurrent")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 46:   return String(F("FB overvoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 47:   return String(F("FB overcurrent")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 48:   return String(F("FB clamp overvoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 49:   return String(F("FB clamp overvoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 61:   return String(F("Calibration parameter error")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 62:   return String(F("System configuration parameter error")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 63:   return String(F("Abnormal power generation data")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 71:   return String(F("Grid overvoltage load reduction (VW) function enable")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 72:   return String(F("Power grid over-frequency load reduction (FW) function enable")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 73:   return String(F("Over-temperature load reduction (TW) function enable")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 95:   return String(F("PV-1: Module in suspected shadow")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 96:   return String(F("PV-2: Module in suspected shadow")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 97:   return String(F("PV-3: Module in suspected shadow")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 98:   return String(F("PV-4: Module in suspected shadow")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 121:  return String(F("Over temperature protection")); | 
					 | 
					 | 
					                case 121:  return String(F("Over temperature protection")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 122:  return String(F("Microinverter is suspected of being stolen")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 123:  return String(F("Locked by remote control")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 124:  return String(F("Shut down by remote control")); | 
					 | 
					 | 
					                case 124:  return String(F("Shut down by remote control")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 125:  return String(F("Grid configuration parameter error")); | 
					 | 
					 | 
					                case 125:  return String(F("Grid configuration parameter error")); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 126:  return String(F("Software error code 126")); | 
					 | 
					 | 
					                case 126:  return String(F("EEPROM reading and writing error")); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                case 127:  return String(F("Firmware error")); | 
					 | 
					 | 
					                case 127:  return String(F("Firmware error")); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 128:  return String(F("Software error code 128")); | 
					 | 
					 | 
					                case 128:  return String(F("Hardware configuration error")); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                case 129:  return String(F("Abnormal bias")); | 
					 | 
					 | 
					                case 129:  return String(F("Abnormal bias")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 130:  return String(F("Offline")); | 
					 | 
					 | 
					                case 130:  return String(F("Offline")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 141:  return String(F("Grid: Grid overvoltage")); | 
					 | 
					 | 
					                case 141:  return String(F("Grid: Grid overvoltage")); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -613,7 +639,12 @@ class Inverter { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 147:  return String(F("Grid: Power grid outage")); | 
					 | 
					 | 
					                case 147:  return String(F("Grid: Power grid outage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 148:  return String(F("Grid: Grid disconnection")); | 
					 | 
					 | 
					                case 148:  return String(F("Grid: Grid disconnection")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 149:  return String(F("Grid: Island detected")); | 
					 | 
					 | 
					                case 149:  return String(F("Grid: Island detected")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 150:  return String(F("DCI exceeded")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 171:  return String(F("Grid: Abnormal phase difference between phase to phase")); | 
					 | 
					 | 
					                case 171:  return String(F("Grid: Abnormal phase difference between phase to phase")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 181:  return String(F("Abnormal insulation impedance")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 182:  return String(F("Abnormal grounding")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 205:  return String(F("MPPT-A: Input overvoltage")); | 
					 | 
					 | 
					                case 205:  return String(F("MPPT-A: Input overvoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 206:  return String(F("MPPT-B: Input overvoltage")); | 
					 | 
					 | 
					                case 206:  return String(F("MPPT-B: Input overvoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 207:  return String(F("MPPT-A: Input undervoltage")); | 
					 | 
					 | 
					                case 207:  return String(F("MPPT-A: Input undervoltage")); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -632,24 +663,33 @@ class Inverter { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 220:  return String(F("PV-3: Input undervoltage")); | 
					 | 
					 | 
					                case 220:  return String(F("PV-3: Input undervoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 221:  return String(F("PV-4: Input overvoltage")); | 
					 | 
					 | 
					                case 221:  return String(F("PV-4: Input overvoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 222:  return String(F("PV-4: Input undervoltage")); | 
					 | 
					 | 
					                case 222:  return String(F("PV-4: Input undervoltage")); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 301:  return String(F("Hardware error code 301")); | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 302:  return String(F("Hardware error code 302")); | 
					 | 
					 | 
					                case 301:  return String(F("FB short circuit failure")); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 303:  return String(F("Hardware error code 303")); | 
					 | 
					 | 
					                case 302:  return String(F("FB short circuit failure")); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 304:  return String(F("Hardware error code 304")); | 
					 | 
					 | 
					                case 303:  return String(F("FB overcurrent protection failure")); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 305:  return String(F("Hardware error code 305")); | 
					 | 
					 | 
					                case 304:  return String(F("FB overcurrent protection failure")); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 306:  return String(F("Hardware error code 306")); | 
					 | 
					 | 
					                case 305:  return String(F("FB clamp circuit failure")); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 307:  return String(F("Hardware error code 307")); | 
					 | 
					 | 
					                case 306:  return String(F("FB clamp circuit failure")); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 308:  return String(F("Hardware error code 308")); | 
					 | 
					 | 
					                case 307:  return String(F("INV power device failure")); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 308:  return String(F("INV overcurrent or overvoltage protection failure")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 309:  return String(F("Hardware error code 309")); | 
					 | 
					 | 
					                case 309:  return String(F("Hardware error code 309")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 310:  return String(F("Hardware error code 310")); | 
					 | 
					 | 
					                case 310:  return String(F("Hardware error code 310")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 311:  return String(F("Hardware error code 311")); | 
					 | 
					 | 
					                case 311:  return String(F("Hardware error code 311")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 312:  return String(F("Hardware error code 312")); | 
					 | 
					 | 
					                case 312:  return String(F("Hardware error code 312")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 313:  return String(F("Hardware error code 313")); | 
					 | 
					 | 
					                case 313:  return String(F("Hardware error code 313")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 314:  return String(F("Hardware error code 314")); | 
					 | 
					 | 
					                case 314:  return String(F("Hardware error code 314")); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 5041: return String(F("Error code-04 Port 1")); | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 5042: return String(F("Error code-04 Port 2")); | 
					 | 
					 | 
					                case 5011: return String(F("PV-1: MOSFET overcurrent (II)")); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 5043: return String(F("Error code-04 Port 3")); | 
					 | 
					 | 
					                case 5012: return String(F("PV-2: MOSFET overcurrent (II)")); | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 5044: return String(F("Error code-04 Port 4")); | 
					 | 
					 | 
					                case 5013: return String(F("PV-3: MOSFET overcurrent (II)")); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5014: return String(F("PV-4: MOSFET overcurrent (II)")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5020: return String(F("H-bridge MOSFET overcurrent or H-bridge overvoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5041: return String(F("PV-1: current overcurrent (II)")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5042: return String(F("PV-2: current overcurrent (II)")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5043: return String(F("PV-3: current overcurrent (II)")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5044: return String(F("PV-4: current overcurrent (II)")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 5051: return String(F("PV Input 1 Overvoltage/Undervoltage")); | 
					 | 
					 | 
					                case 5051: return String(F("PV Input 1 Overvoltage/Undervoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 5052: return String(F("PV Input 2 Overvoltage/Undervoltage")); | 
					 | 
					 | 
					                case 5052: return String(F("PV Input 2 Overvoltage/Undervoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 5053: return String(F("PV Input 3 Overvoltage/Undervoltage")); | 
					 | 
					 | 
					                case 5053: return String(F("PV Input 3 Overvoltage/Undervoltage")); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -659,10 +699,18 @@ class Inverter { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 5080: return String(F("Grid Overvoltage/Undervoltage")); | 
					 | 
					 | 
					                case 5080: return String(F("Grid Overvoltage/Undervoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 5090: return String(F("Grid Overfrequency/Underfrequency")); | 
					 | 
					 | 
					                case 5090: return String(F("Grid Overfrequency/Underfrequency")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 5100: return String(F("Island detected")); | 
					 | 
					 | 
					                case 5100: return String(F("Island detected")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5110: return String(F("GFDI")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 5120: return String(F("EEPROM reading and writing error")); | 
					 | 
					 | 
					                case 5120: return String(F("EEPROM reading and writing error")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5141: | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5142: | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5143: | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5144: | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                           return String(F("FB clamp overvoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 5150: return String(F("10 min value grid overvoltage")); | 
					 | 
					 | 
					                case 5150: return String(F("10 min value grid overvoltage")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 5160: return String(F("Grid transient fluctuation")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 5200: return String(F("Firmware error")); | 
					 | 
					 | 
					                case 5200: return String(F("Firmware error")); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                case 8310: return String(F("Shut down")); | 
					 | 
					 | 
					                case 8310: return String(F("Shut down by remote control")); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                case 8320: return String(F("Locked by remote control")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                case 9000: return String(F("Microinverter is suspected of being stolen")); | 
					 | 
					 | 
					                case 9000: return String(F("Microinverter is suspected of being stolen")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                default:   return String(F("Unknown")); | 
					 | 
					 | 
					                default:   return String(F("Unknown")); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            } | 
					 | 
					 | 
					            } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					
  |