@ -136,8 +136,7 @@ class Inverter { 
			
		
	
		
		
			
				
					        }         }  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					        template  < typename  T >         template  < typename  T >  
			
		
	
		
		
			
				
					
					        void  enqueCommand ( uint8_t  cmd )         void  enqueCommand ( uint8_t  cmd )  {  
			
				
				
			
		
	
		
		
			
				
					        {  
			
		
	
		
		
	
		
		
			
				
					           _commandQueue . push ( std : : make_shared < T > ( cmd ) ) ;            _commandQueue . push ( std : : make_shared < T > ( cmd ) ) ;  
			
		
	
		
		
			
				
					           DPRINTLN ( DBG_INFO ,  " enqueuedCmd:  "  +  String ( cmd ) ) ;            DPRINTLN ( DBG_INFO ,  " enqueuedCmd:  "  +  String ( cmd ) ) ;  
			
		
	
		
		
			
				
					        }         }  
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -155,8 +154,8 @@ class Inverter { 
			
		
	
		
		
			
				
					                _commandQueue . pop ( ) ;                  _commandQueue . pop ( ) ;   
			
		
	
		
		
			
				
					            }             }  
			
		
	
		
		
			
				
					        }         }  
			
		
	
		
		
			
				
					
					    	uint8_t  getQueuedCmd ( )  
  
			
				
				
			
		
	
		
		
			
				
					
					          {     	uint8_t   getQueuedCmd ( ) {  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					            if  ( _commandQueue . empty ( ) ) {             if  ( _commandQueue . empty ( ) ) {  
			
		
	
		
		
			
				
					                // Fill with default commands
                 // Fill with default commands
  
			
		
	
		
		
			
				
					                enqueCommand < InfoCommand > ( RealTimeRunData_Debug ) ;                 enqueCommand < InfoCommand > ( RealTimeRunData_Debug ) ;  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -296,36 +295,30 @@ class Inverter { 
			
		
	
		
		
			
				
					            return  false ;             return  false ;  
			
		
	
		
		
			
				
					        }         }  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					
					        uint32_t  getLastTs ( void )         uint32_t  getLastTs ( void )  {  
			
				
				
			
		
	
		
		
			
				
					        {  
			
		
	
		
		
	
		
		
			
				
					            DPRINTLN ( DBG_VERBOSE ,  F ( " hmInverter.h:getLastTs " ) ) ;             DPRINTLN ( DBG_VERBOSE ,  F ( " hmInverter.h:getLastTs " ) ) ;  
			
		
	
		
		
			
				
					            return  ts ;             return  ts ;  
			
		
	
		
		
			
				
					        }         }  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					
					        void  getAssignment ( )         void  getAssignment ( )   {  
			
				
				
			
		
	
		
		
			
				
					        {  
			
		
	
		
		
	
		
		
			
				
					            DPRINTLN ( DBG_DEBUG ,  F ( " hmInverter.h:getAssignment " ) ) ;             DPRINTLN ( DBG_DEBUG ,  F ( " hmInverter.h:getAssignment " ) ) ;  
			
		
	
		
		
			
				
					            // Default assignment;
             // Default assignment;
  
			
		
	
		
		
			
				
					
					            if  ( INV_TYPE_1CH  = =  type )             if  ( INV_TYPE_1CH  = =  type )  {  
			
				
				
			
		
	
		
		
			
				
					            {  
			
		
	
		
		
	
		
		
			
				
					                listLen  =  ( uint8_t ) ( HM1CH_LIST_LEN ) ;                 listLen  =  ( uint8_t ) ( HM1CH_LIST_LEN ) ;  
			
		
	
		
		
			
				
					                assign  =  ( byteAssign_t  * ) hm1chAssignment ;                 assign  =  ( byteAssign_t  * ) hm1chAssignment ;  
			
		
	
		
		
			
				
					                channels  =  1 ;                 channels  =  1 ;  
			
		
	
		
		
			
				
					            }             }  
			
		
	
		
		
			
				
					
					            else  if  ( INV_TYPE_2CH  = =  type )             else  if  ( INV_TYPE_2CH  = =  type )  {  
			
				
				
			
		
	
		
		
			
				
					            {  
			
		
	
		
		
	
		
		
			
				
					                listLen  =  ( uint8_t ) ( HM2CH_LIST_LEN ) ;                 listLen  =  ( uint8_t ) ( HM2CH_LIST_LEN ) ;  
			
		
	
		
		
			
				
					                assign  =  ( byteAssign_t  * ) hm2chAssignment ;                 assign  =  ( byteAssign_t  * ) hm2chAssignment ;  
			
		
	
		
		
			
				
					                channels  =  2 ;                 channels  =  2 ;  
			
		
	
		
		
			
				
					            }             }  
			
		
	
		
		
			
				
					
					            else  if  ( INV_TYPE_4CH  = =  type )             else  if  ( INV_TYPE_4CH  = =  type )  {  
			
				
				
			
		
	
		
		
			
				
					            {  
			
		
	
		
		
	
		
		
			
				
					                listLen  =  ( uint8_t ) ( HM4CH_LIST_LEN ) ;                 listLen  =  ( uint8_t ) ( HM4CH_LIST_LEN ) ;  
			
		
	
		
		
			
				
					                assign  =  ( byteAssign_t  * ) hm4chAssignment ;                 assign  =  ( byteAssign_t  * ) hm4chAssignment ;  
			
		
	
		
		
			
				
					                channels  =  4 ;                 channels  =  4 ;  
			
		
	
		
		
			
				
					            }             }  
			
		
	
		
		
			
				
					
					            else             else  {  
			
				
				
			
		
	
		
		
			
				
					            {  
			
		
	
		
		
	
		
		
			
				
					                listLen  =  0 ;                 listLen  =  0 ;  
			
		
	
		
		
			
				
					                channels  =  0 ;                 channels  =  0 ;  
			
		
	
		
		
			
				
					                assign  =  NULL ;                 assign  =  NULL ;  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -352,217 +345,89 @@ class Inverter { 
			
		
	
		
		
			
				
					                    break ;                     break ;  
			
		
	
		
		
			
				
					            }             }  
			
		
	
		
		
			
				
					        }         }  
			
		
	
		
		
			
				
					
					        String  getAlarmStr ( u_int16_t  alarmCode ) 
 
			
				
				
			
		
	
		
		
			
				
					
					        {         bool  isLiveDataAssignment ( void )  {  
			
				
				
			
		
	
		
		
			
				
					
					            switch  ( alarmCode )             if ( assign  = =  ( byteAssign_t  * ) hm1chAssignment )  
			
				
				
			
		
	
		
		
			
				
					
					            {                 return  true ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  1 :             else  if ( assign  = =  ( byteAssign_t  * ) hm2chAssignment )  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Inverter start " ) ) ;                 return  true ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;             else  if ( assign  = =  ( byteAssign_t  * ) hm4chAssignment )  
			
				
				
			
		
	
		
		
			
				
					
					            case  2 :                 return  true ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " DTU command failed " ) ) ;             else  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 return  false ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  121 :         }  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Over temperature protection " ) ) ; 
 
			
				
				
			
		
	
		
		
			
				
					
					                break ;         String  getAlarmStr ( u_int16_t  alarmCode )  {  
			
				
				
			
		
	
		
		
			
				
					
					            case  125 :             switch  ( alarmCode )  {  // breaks are intentionally missing!
  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Grid configuration parameter error " ) ) ;                 case  1 :     return  String ( F ( " Inverter start " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  2 :     return  String ( F ( " DTU command failed " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  126 :                 case  121 :   return  String ( F ( " Over temperature protection " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Software error code 126 " ) ) ;                 case  125 :   return  String ( F ( " Grid configuration parameter error " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  126 :   return  String ( F ( " Software error code 126 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  127 :                 case  127 :   return  String ( F ( " Firmware error " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Firmware error " ) ) ;                 case  128 :   return  String ( F ( " Software error code 128 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  129 :   return  String ( F ( " Software error code 129 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  128 :                 case  130 :   return  String ( F ( " Offline " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Software error code 128 " ) ) ;                 case  141 :   return  String ( F ( " Grid overvoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  142 :   return  String ( F ( " Average grid overvoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  129 :                 case  143 :   return  String ( F ( " Grid undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Software error code 129 " ) ) ;                 case  144 :   return  String ( F ( " Grid overfrequency " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  145 :   return  String ( F ( " Grid underfrequency " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  130 :                 case  146 :   return  String ( F ( " Rapid grid frequency change " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Offline " ) ) ;                 case  147 :   return  String ( F ( " Power grid outage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  148 :   return  String ( F ( " Grid disconnection " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  141 :                 case  149 :   return  String ( F ( " Island detected " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Grid overvoltage " ) ) ;                 case  205 :   return  String ( F ( " Input port 1 & 2 overvoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  206 :   return  String ( F ( " Input port 3 & 4 overvoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  142 :                 case  207 :   return  String ( F ( " Input port 1 & 2 undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Average grid overvoltage " ) ) ;                 case  208 :   return  String ( F ( " Input port 3 & 4 undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  209 :   return  String ( F ( " Port 1 no input " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  143 :                 case  210 :   return  String ( F ( " Port 2 no input " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Grid undervoltage " ) ) ;                 case  211 :   return  String ( F ( " Port 3 no input " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  212 :   return  String ( F ( " Port 4 no input " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  144 :                 case  213 :   return  String ( F ( " PV-1 & PV-2 abnormal wiring " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Grid overfrequency " ) ) ;                 case  214 :   return  String ( F ( " PV-3 & PV-4 abnormal wiring " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  215 :   return  String ( F ( " PV-1 Input overvoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  145 :                 case  216 :   return  String ( F ( " PV-1 Input undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Grid underfrequency " ) ) ;                 case  217 :   return  String ( F ( " PV-2 Input overvoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  218 :   return  String ( F ( " PV-2 Input undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  146 :                 case  219 :   return  String ( F ( " PV-3 Input overvoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Rapid grid frequency change " ) ) ;                 case  220 :   return  String ( F ( " PV-3 Input undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  221 :   return  String ( F ( " PV-4 Input overvoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  147 :                 case  222 :   return  String ( F ( " PV-4 Input undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Power grid outage " ) ) ;                 case  301 :   return  String ( F ( " Hardware error code 301 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  302 :   return  String ( F ( " Hardware error code 302 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  148 :                 case  303 :   return  String ( F ( " Hardware error code 303 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Grid disconnection " ) ) ;                 case  304 :   return  String ( F ( " Hardware error code 304 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  305 :   return  String ( F ( " Hardware error code 305 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  149 :                 case  306 :   return  String ( F ( " Hardware error code 306 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Island detected " ) ) ;                 case  307 :   return  String ( F ( " Hardware error code 307 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  308 :   return  String ( F ( " Hardware error code 308 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  205 :                 case  309 :   return  String ( F ( " Hardware error code 309 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Input port 1 & 2 overvoltage " ) ) ;                 case  310 :   return  String ( F ( " Hardware error code 310 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  311 :   return  String ( F ( " Hardware error code 311 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  206 :                 case  312 :   return  String ( F ( " Hardware error code 312 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Input port 3 & 4 overvoltage " ) ) ;                 case  313 :   return  String ( F ( " Hardware error code 313 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  314 :   return  String ( F ( " Hardware error code 314 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  207 :                 case  5041 :  return  String ( F ( " Error code-04 Port 1 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Input port 1 & 2 undervoltage " ) ) ;                 case  5042 :  return  String ( F ( " Error code-04 Port 2 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  5043 :  return  String ( F ( " Error code-04 Port 3 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  208 :                 case  5044 :  return  String ( F ( " Error code-04 Port 4 " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Input port 3 & 4 undervoltage " ) ) ;                 case  5051 :  return  String ( F ( " PV Input 1 Overvoltage/Undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  5052 :  return  String ( F ( " PV Input 2 Overvoltage/Undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  209 :                 case  5053 :  return  String ( F ( " PV Input 3 Overvoltage/Undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Port 1 no input " ) ) ;                 case  5054 :  return  String ( F ( " PV Input 4 Overvoltage/Undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  5060 :  return  String ( F ( " Abnormal bias " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  210 :                 case  5070 :  return  String ( F ( " Over temperature protection " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Port 2 no input " ) ) ;                 case  5080 :  return  String ( F ( " Grid Overvoltage/Undervoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  5090 :  return  String ( F ( " Grid Overfrequency/Underfrequency " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  211 :                 case  5100 :  return  String ( F ( " Island detected " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Port 3 no input " ) ) ;                 case  5120 :  return  String ( F ( " EEPROM reading and writing error " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  5150 :  return  String ( F ( " 10 min value grid overvoltage " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  212 :                 case  5200 :  return  String ( F ( " Firmware error " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                return  String ( F ( " Port 4 no input " ) ) ;                 case  8310 :  return  String ( F ( " Shut down " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					                break ;                 case  9000 :  return  String ( F ( " Microinverter is suspected of being stolen " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					
					            case  213 :                 default :    return  String ( F ( " Unknown " ) ) ;  
			
				
				
			
		
	
		
		
			
				
					                return  String ( F ( " PV-1 & PV-2 abnormal wiring " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  214 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV-3 & PV-4 abnormal wiring " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  215 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV-1 Input overvoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  216 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV-1 Input undervoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  217 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV-2 Input overvoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  218 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV-2 Input undervoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  219 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV-3 Input overvoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  220 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV-3 Input undervoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  221 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV-4 Input overvoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  222 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV-4 Input undervoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  301 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 301 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  302 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 302 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  303 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 303 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  304 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 304 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  305 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 305 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  306 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 306 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  307 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 307 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  308 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 308 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  309 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 309 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  310 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 310 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  311 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 311 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  312 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 312 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  313 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 313 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  314 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Hardware error code 314 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5041 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Error code-04 Port 1 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5042 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Error code-04 Port 2 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5043 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Error code-04 Port 3 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5044 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Error code-04 Port 4 " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5051 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV Input 1 Overvoltage/Undervoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5052 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV Input 2 Overvoltage/Undervoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5053 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV Input 3 Overvoltage/Undervoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5054 :  
			
		
	
		
		
			
				
					                return  String ( F ( " PV Input 4 Overvoltage/Undervoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5060 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Abnormal bias " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5070 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Over temperature protection " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5080 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Grid Overvoltage/Undervoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5090 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Grid Overfrequency/Underfrequency " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5100 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Island detected " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5120 :  
			
		
	
		
		
			
				
					                return  String ( F ( " EEPROM reading and writing error " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5150 :  
			
		
	
		
		
			
				
					                return  String ( F ( " 10 min value grid overvoltage " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  5200 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Firmware error " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  8310 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Shut down " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            case  9000 :  
			
		
	
		
		
			
				
					                return  String ( F ( " Microinverter is suspected of being stolen " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
			
				
					            default :  
			
		
	
		
		
			
				
					                return  String ( F ( " Unknown " ) ) ;  
			
		
	
		
		
			
				
					                break ;  
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					            }             }  
			
		
	
		
		
			
				
					        }         }