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