@ -20,16 +20,17 @@ union serial_u { 
			
		
	
		
		
			
				
					enum  { UNIT_V  =  0 ,  UNIT_A ,  UNIT_W ,   UNIT_WH ,  UNIT_KWH ,  UNIT_HZ ,  UNIT_C ,  UNIT_PCT ,  UNIT_VAR ,  UNIT_NONE } ; enum  { UNIT_V  =  0 ,  UNIT_A ,  UNIT_W ,   UNIT_WH ,  UNIT_KWH ,  UNIT_HZ ,  UNIT_C ,  UNIT_PCT ,  UNIT_VAR ,  UNIT_NONE } ;  
			
		
	
		
		
			
				
					const  char *  const  units [ ]  =  { " V " ,  " A " ,  " W " ,  " Wh " ,  " kWh " ,  " Hz " ,  " °C " ,  " % " ,  " var " ,  " " } ; const  char *  const  units [ ]  =  { " V " ,  " A " ,  " W " ,  " Wh " ,  " kWh " ,  " Hz " ,  " °C " ,  " % " ,  " var " ,  " " } ;  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					// field types
 // field types
  
			
		
	
		
		
			
				
					enum  { FLD_UDC  =  0 ,  FLD_IDC ,  FLD_PDC ,  FLD_YD ,  FLD_YW ,  FLD_YT , enum  { FLD_UDC  =  0 ,  FLD_IDC ,  FLD_PDC ,  FLD_YD ,  FLD_YW ,  FLD_YT ,  
			
		
	
		
		
			
				
					        FLD_UAC ,  FLD_IAC ,  FLD_PAC ,  FLD_F ,  FLD_T ,  FLD_PF ,  FLD_EFF ,         FLD_UAC ,  FLD_IAC ,  FLD_PAC ,  FLD_F ,  FLD_T ,  FLD_PF ,  FLD_EFF ,  
			
		
	
		
		
			
				
					
					        FLD_IRR ,  FLD_Q , FLD_ALARM_MES_ID , FLD_FW_VERSION , FLD_FW_BUILD_YEAR ,         FLD_IRR ,  FLD_Q ,  FLD_EVT ,  FLD_FW_VERSION ,  FLD_FW_BUILD_YEAR ,  
			
				
				
			
		
	
		
		
			
				
					
					        FLD_FW_BUILD_MONTH_DAY , FLD_HW_ID , FLD_ACT_PWR_LIMIT , FLD_LAST_ALARM_CODE } ;         FLD_FW_BUILD_MONTH_DAY ,  FLD_FW_BUILD_HOUR_MINUTE ,  FLD_HW_ID ,  
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					        FLD_ACT_ACTIVE_PWR_LIMIT ,  /*FLD_ACT_REACTIVE_PWR_LIMIT, FLD_ACT_PF,*/  FLD_LAST_ALARM_CODE } ;  
			
		
	
		
		
			
				
					                 
			
		
	
		
		
			
				
					const  char *  const  fields [ ]  =  { " U_DC " ,  " I_DC " ,  " P_DC " ,  " YieldDay " ,  " YieldWeek " ,  " YieldTotal " , const  char *  const  fields [ ]  =  { " U_DC " ,  " I_DC " ,  " P_DC " ,  " YieldDay " ,  " YieldWeek " ,  " YieldTotal " ,  
			
		
	
		
		
			
				
					        " U_AC " ,  " I_AC " ,  " P_AC " ,  " F_AC " ,  " Temp " ,  " PF_AC " ,  " Efficiency " ,  " Irradiation " , " Q_AC " ,         " U_AC " ,  " I_AC " ,  " P_AC " ,  " F_AC " ,  " Temp " ,  " PF_AC " ,  " Efficiency " ,  " Irradiation " , " Q_AC " ,  
			
		
	
		
		
			
				
					
					        " ALARM_MES_ID " , " FWVersion " , " FWBuildYear " , " FWBuildMonthDay " , " HWPartId " , " PowerLimit " , " LastAlarmCode " } ;         " ALARM_MES_ID " , " FWVersion " , " FWBuildYear " , " FWBuildMonthDay " , " FWBuildHourMinute " , " HWPartId " ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					        " active PowerLimit " , " reactive PowerLimit " , " Powerfactor " , " LastAlarmCode " } ;  
			
		
	
		
		
			
				
					const  char *  const  notAvail  =  " n/a " ; const  char *  const  notAvail  =  " n/a " ;  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					// mqtt discovery device classes
 // mqtt discovery device classes
  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -93,12 +94,15 @@ const byteAssign_t InfoAssignment[] = { 
			
		
	
		
		
			
				
					    {  FLD_FW_VERSION ,            UNIT_NONE ,    CH0 ,   0 ,  2 ,  1  } ,     {  FLD_FW_VERSION ,            UNIT_NONE ,    CH0 ,   0 ,  2 ,  1  } ,  
			
		
	
		
		
			
				
					    {  FLD_FW_BUILD_YEAR ,         UNIT_NONE ,    CH0 ,   2 ,  2 ,  1  } ,     {  FLD_FW_BUILD_YEAR ,         UNIT_NONE ,    CH0 ,   2 ,  2 ,  1  } ,  
			
		
	
		
		
			
				
					    {  FLD_FW_BUILD_MONTH_DAY ,    UNIT_NONE ,    CH0 ,   4 ,  2 ,  1  } ,     {  FLD_FW_BUILD_MONTH_DAY ,    UNIT_NONE ,    CH0 ,   4 ,  2 ,  1  } ,  
			
		
	
		
		
			
				
					    {  FLD_FW_BUILD_HOUR_MINUTE ,  UNIT_NONE ,    CH0 ,   6 ,  2 ,  1  } ,  
			
		
	
		
		
			
				
					    {  FLD_HW_ID ,                 UNIT_NONE ,    CH0 ,   8 ,  2 ,  1  }     {  FLD_HW_ID ,                 UNIT_NONE ,    CH0 ,   8 ,  2 ,  1  }  
			
		
	
		
		
			
				
					} ; } ;  
			
		
	
		
		
			
				
					# define HMINFO_LIST_LEN     (sizeof(InfoAssignment)  /  sizeof(byteAssign_t)) # define HMINFO_LIST_LEN     (sizeof(InfoAssignment)  /  sizeof(byteAssign_t))  
			
		
	
		
		
			
				
					
 
			
		
	
		
		
			
				
					const  byteAssign_t  SystemConfigParaAssignment [ ]  =  { const  byteAssign_t  SystemConfigParaAssignment [ ]  =  {  
			
		
	
		
		
			
				
					
					    {  FLD_ACT_PWR_LIMIT ,            UNIT_PCT ,    CH0 ,   2 ,  2 ,  10  }     {  FLD_ACT_ACTIVE_PWR_LIMIT ,     UNIT_PCT ,    CH0 ,   2 ,  2 ,  10    } /*,
  
			
				
				
			
		
	
		
		
	
		
		
			
				
					    {  FLD_ACT_REACTIVE_PWR_LIMIT ,   UNIT_PCT ,    CH0 ,   4 ,  2 ,  10    } ,  
			
		
	
		
		
			
				
					    {  FLD_ACT_PF ,                   UNIT_NONE ,   CH0 ,   6 ,  2 ,  1000  } */  
			
		
	
		
		
			
				
					} ; } ;  
			
		
	
		
		
			
				
					# define HMSYSTEM_LIST_LEN     (sizeof(SystemConfigParaAssignment)  /  sizeof(byteAssign_t)) # define HMSYSTEM_LIST_LEN     (sizeof(SystemConfigParaAssignment)  /  sizeof(byteAssign_t))  
			
		
	
		
		
			
				
					
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -125,9 +129,9 @@ const byteAssign_t hm1chAssignment[] = { 
			
		
	
		
		
			
				
					    {  FLD_PAC ,  UNIT_W ,     CH0 ,  18 ,  2 ,  10    } ,     {  FLD_PAC ,  UNIT_W ,     CH0 ,  18 ,  2 ,  10    } ,  
			
		
	
		
		
			
				
					    {  FLD_Q ,    UNIT_VAR ,   CH0 ,  20 ,  2 ,  10    } ,     {  FLD_Q ,    UNIT_VAR ,   CH0 ,  20 ,  2 ,  10    } ,  
			
		
	
		
		
			
				
					    {  FLD_F ,    UNIT_HZ ,    CH0 ,  16 ,  2 ,  100   } ,     {  FLD_F ,    UNIT_HZ ,    CH0 ,  16 ,  2 ,  100   } ,  
			
		
	
		
		
			
				
					
					    {  FLD_PF ,   UNIT_NONE , CH0 ,  24 ,  2 ,  1000  } ,     {  FLD_PF ,   UNIT_NONE ,   CH0 ,  24 ,  2 ,  1000  } ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					    {  FLD_T ,    UNIT_C ,     CH0 ,  26 ,  2 ,  10    } ,     {  FLD_T ,    UNIT_C ,     CH0 ,  26 ,  2 ,  10    } ,  
			
		
	
		
		
			
				
					
					    {  FLD_ALARM_MES_ID ,    UNIT_NONE ,     CH0 ,  28 ,  2 ,  1  } ,     {  FLD_EVT ,   UNIT_NONE ,  CH0 ,  28 ,  2 ,  1      } ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					    {  FLD_YD ,   UNIT_WH ,    CH0 ,  CALC_YD_CH0 ,   0 ,  CMD_CALC  } ,     {  FLD_YD ,   UNIT_WH ,    CH0 ,  CALC_YD_CH0 ,   0 ,  CMD_CALC  } ,  
			
		
	
		
		
			
				
					    {  FLD_YT ,   UNIT_KWH ,   CH0 ,  CALC_YT_CH0 ,   0 ,  CMD_CALC  } ,     {  FLD_YT ,   UNIT_KWH ,   CH0 ,  CALC_YT_CH0 ,   0 ,  CMD_CALC  } ,  
			
		
	
		
		
			
				
					    {  FLD_PDC ,  UNIT_W ,     CH0 ,  CALC_PDC_CH0 ,  0 ,  CMD_CALC  } ,     {  FLD_PDC ,  UNIT_W ,     CH0 ,  CALC_PDC_CH0 ,  0 ,  CMD_CALC  } ,  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -159,9 +163,9 @@ const byteAssign_t hm2chAssignment[] = { 
			
		
	
		
		
			
				
					    {  FLD_PAC ,  UNIT_W ,     CH0 ,  30 ,  2 ,  10    } ,     {  FLD_PAC ,  UNIT_W ,     CH0 ,  30 ,  2 ,  10    } ,  
			
		
	
		
		
			
				
					    {  FLD_Q ,    UNIT_VAR ,   CH0 ,  32 ,  2 ,  10    } ,     {  FLD_Q ,    UNIT_VAR ,   CH0 ,  32 ,  2 ,  10    } ,  
			
		
	
		
		
			
				
					    {  FLD_F ,    UNIT_HZ ,    CH0 ,  28 ,  2 ,  100   } ,     {  FLD_F ,    UNIT_HZ ,    CH0 ,  28 ,  2 ,  100   } ,  
			
		
	
		
		
			
				
					
					    {  FLD_PF ,   UNIT_NONE , CH0 ,  36 ,  2 ,  1000  } ,     {  FLD_PF ,   UNIT_NONE ,   CH0 ,  36 ,  2 ,  1000  } ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					    {  FLD_T ,    UNIT_C ,     CH0 ,  38 ,  2 ,  10    } ,     {  FLD_T ,    UNIT_C ,     CH0 ,  38 ,  2 ,  10    } ,  
			
		
	
		
		
			
				
					
					    {  FLD_ALARM_MES_ID ,     UNIT_NONE ,     CH0 ,  40 ,  2 ,  1    } ,     {  FLD_EVT ,   UNIT_NONE ,  CH0 ,  40 ,  2 ,  1      } ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					    {  FLD_YD ,   UNIT_WH ,    CH0 ,  CALC_YD_CH0 ,   0 ,  CMD_CALC  } ,     {  FLD_YD ,   UNIT_WH ,    CH0 ,  CALC_YD_CH0 ,   0 ,  CMD_CALC  } ,  
			
		
	
		
		
			
				
					    {  FLD_YT ,   UNIT_KWH ,   CH0 ,  CALC_YT_CH0 ,   0 ,  CMD_CALC  } ,     {  FLD_YT ,   UNIT_KWH ,   CH0 ,  CALC_YT_CH0 ,   0 ,  CMD_CALC  } ,  
			
		
	
		
		
			
				
					    {  FLD_PDC ,  UNIT_W ,     CH0 ,  CALC_PDC_CH0 ,  0 ,  CMD_CALC  } ,     {  FLD_PDC ,  UNIT_W ,     CH0 ,  CALC_PDC_CH0 ,  0 ,  CMD_CALC  } ,  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -208,9 +212,9 @@ const byteAssign_t hm4chAssignment[] = { 
			
		
	
		
		
			
				
					    {  FLD_PAC ,  UNIT_W ,     CH0 ,  50 ,  2 ,  10    } ,     {  FLD_PAC ,  UNIT_W ,     CH0 ,  50 ,  2 ,  10    } ,  
			
		
	
		
		
			
				
					    {  FLD_Q ,    UNIT_VAR ,   CH0 ,  52 ,  2 ,  10    } ,     {  FLD_Q ,    UNIT_VAR ,   CH0 ,  52 ,  2 ,  10    } ,  
			
		
	
		
		
			
				
					    {  FLD_F ,    UNIT_HZ ,    CH0 ,  48 ,  2 ,  100   } ,     {  FLD_F ,    UNIT_HZ ,    CH0 ,  48 ,  2 ,  100   } ,  
			
		
	
		
		
			
				
					
					    {  FLD_PF ,   UNIT_NONE , CH0 ,  56 ,  2 ,  1000  } ,     {  FLD_PF ,   UNIT_NONE ,   CH0 ,  56 ,  2 ,  1000  } ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					    {  FLD_T ,    UNIT_C ,     CH0 ,  58 ,  2 ,  10    } ,     {  FLD_T ,    UNIT_C ,     CH0 ,  58 ,  2 ,  10    } ,  
			
		
	
		
		
			
				
					
					    {  FLD_ALARM_MES_ID ,    UNIT_NONE ,     CH0 ,  60 ,  2 ,  1    } ,     {  FLD_EVT ,   UNIT_NONE ,  CH0 ,  60 ,  2 ,  1      } ,  
			
				
				
			
		
	
		
		
	
		
		
			
				
					    {  FLD_YD ,   UNIT_WH ,    CH0 ,  CALC_YD_CH0 ,   0 ,  CMD_CALC  } ,     {  FLD_YD ,   UNIT_WH ,    CH0 ,  CALC_YD_CH0 ,   0 ,  CMD_CALC  } ,  
			
		
	
		
		
			
				
					    {  FLD_YT ,   UNIT_KWH ,   CH0 ,  CALC_YT_CH0 ,   0 ,  CMD_CALC  } ,     {  FLD_YT ,   UNIT_KWH ,   CH0 ,  CALC_YT_CH0 ,   0 ,  CMD_CALC  } ,  
			
		
	
		
		
			
				
					    {  FLD_PDC ,  UNIT_W ,     CH0 ,  CALC_PDC_CH0 ,  0 ,  CMD_CALC  } ,     {  FLD_PDC ,  UNIT_W ,     CH0 ,  CALC_PDC_CH0 ,  0 ,  CMD_CALC  } ,