@ -94,26 +94,22 @@ void app::loop(void) { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if ( 0  ! =  len )  {  
			
		
	
		
			
				
					                    Inverter < >  * iv  =  mSys - > findInverter ( & p - > packet [ 1 ] ) ;  
			
		
	
		
			
				
					                    if ( NULL  ! =  iv  & &  p - > packet [ 0 ]  = =  ( TX_REQ_INFO  +  0x80 ) )  {  // response from get information command
  
			
		
	
		
			
				
					                    if ( ( NULL  ! =  iv ) & &  ( p - > packet [ 0 ]  = =  ( TX_REQ_INFO  +  0x80 ) ) )  {  // response from get information command
  
			
		
	
		
			
				
					                        mPayload [ iv - > id ] . txId  =  p - > packet [ 0 ] ;  
			
		
	
		
			
				
					                        DPRINTLN ( DBG_DEBUG ,  F ( " Response from info request received " ) ) ;  
			
		
	
		
			
				
					                        uint8_t  * pid  =  & p - > packet [ 9 ] ;  
			
		
	
		
			
				
					                        if  ( * pid  = =  0x00 )  
			
		
	
		
			
				
					                        {  
			
		
	
		
			
				
					                            DPRINT ( DBG_DEBUG ,  " fragment number zero received and ignored " ) ;  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                        else  
			
		
	
		
			
				
					                        {  
			
		
	
		
			
				
					                            if  ( ( * pid  &  0x7F )  <  5 )  
			
		
	
		
			
				
					                            {  
			
		
	
		
			
				
					                        else  {  
			
		
	
		
			
				
					                            DPRINTLN ( DBG_DEBUG ,  " PID: 0x "  +  String ( * pid ,  HEX ) ) ;  
			
		
	
		
			
				
					                            if  ( ( * pid  &  0x7F )  <  5 )  {  
			
		
	
		
			
				
					                                memcpy ( mPayload [ iv - > id ] . data [ ( * pid  &  0x7F )  -  1 ] ,  & p - > packet [ 10 ] ,  len  -  11 ) ;  
			
		
	
		
			
				
					                                mPayload [ iv - > id ] . len [ ( * pid  &  0x7F )  -  1 ]  =  len  -  11 ;  
			
		
	
		
			
				
					                            }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                            if  ( ( * pid  &  0x80 )  = =  0x80 )  
			
		
	
		
			
				
					                            {  // Last packet
  
			
		
	
		
			
				
					                                if  ( ( * pid  &  0x7f )  >  mPayload [ iv - > id ] . maxPackId )  
			
		
	
		
			
				
					                                {  
			
		
	
		
			
				
					                            if  ( ( * pid  &  0x80 )  = =  0x80 )  {  
			
		
	
		
			
				
					                                // Last packet
  
			
		
	
		
			
				
					                                if  ( ( * pid  &  0x7f )  >  mPayload [ iv - > id ] . maxPackId )  {  
			
		
	
		
			
				
					                                    mPayload [ iv - > id ] . maxPackId  =  ( * pid  &  0x7f ) ;  
			
		
	
		
			
				
					                                    if  ( * pid  >  0x81 )  
			
		
	
		
			
				
					                                        mLastPacketId  =  * pid ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -121,34 +117,34 @@ void app::loop(void) { 
			
		
	
		
			
				
					                            }  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                    if ( NULL  ! =  iv  & &  p - > packet [ 0 ]  = =  ( TX_REQ_DEVCONTROL  +  0x80 ) )  {  // response from dev control command
  
			
		
	
		
			
				
					                    if ( ( NULL  ! =  iv ) & &  ( p - > packet [ 0 ]  = =  ( TX_REQ_DEVCONTROL  +  0x80 ) ) )  {  // response from dev control command
  
			
		
	
		
			
				
					                        mPayload [ iv - > id ] . txId  =  p - > packet [ 0 ] ;  
			
		
	
		
			
				
					                        DPRINTLN ( DBG_DEBUG ,  F ( " Response from devcontrol request received " ) ) ;  
			
		
	
		
			
				
					                        iv - > devControlRequest  =  false ;  
			
		
	
		
			
				
					                        switch  ( p - > packet [ 12 ] )  {  
			
		
	
		
			
				
					                        case  ActivePowerContr :  
			
		
	
		
			
				
					                                if  ( iv - > devControlCmd  > =  ActivePowerContr  & &  iv - > devControlCmd  < =  PFSet )  {  // ok inverter accepted the set point copy it to dtu eeprom
  
			
		
	
		
			
				
					                                    if  ( ( iv - > powerLimit [ 1 ]  &  0xff00 )  >  0 )  {  // User want to have it persistent
  
			
		
	
		
			
				
					                                        mEep - > write ( ADDR_INV_PWR_LIM  +  iv - > id  *  2 ,  iv - > powerLimit [ 0 ] ) ;  
			
		
	
		
			
				
					                                        mEep - > write ( ADDR_INV_PWR_LIM_CON  +  iv - > id  *  2 ,  iv - > powerLimit [ 1 ] ) ;  
			
		
	
		
			
				
					                                    updateCrc ( ) ;  
			
		
	
		
			
				
					                                    mEep - > commit ( ) ;  
			
		
	
		
			
				
					                                        DPRINTLN ( DBG_INFO ,  F ( " Inverter  " )  +  String ( iv - > id )  +  F ( "  has accepted power limit set point  " )  +  String ( iv - > powerLimit [ 0 ] )  +  F ( "  with PowerLimitControl  " )   +  String ( iv - > powerLimit [ 1 ] )  +  F ( " , written to dtu eeprom " ) ) ;  
			
		
	
		
			
				
					                                    }  else  
			
		
	
		
			
				
					                                    DPRINTLN ( DBG_INFO ,  F ( " Inverter  " )  +  String ( iv - > id )  +  F ( "  has accepted power limit set point  " )  +  String ( iv - > powerLimit [ 0 ] )  +  F ( "  with PowerLimitControl  " )   +  String ( iv - > powerLimit [ 1 ] ) ) ;  
			
		
	
		
			
				
					                            case  ActivePowerContr :  
			
		
	
		
			
				
					                                    if  ( iv - > devControlCmd  > =  ActivePowerContr  & &  iv - > devControlCmd  < =  PFSet )  {  // ok inverter accepted the set point copy it to dtu eeprom
  
			
		
	
		
			
				
					                                        if  ( ( iv - > powerLimit [ 1 ]  &  0xff00 )  >  0 )  {  // User want to have it persistent
  
			
		
	
		
			
				
					                                            mEep - > write ( ADDR_INV_PWR_LIM  +  iv - > id  *  2 ,  iv - > powerLimit [ 0 ] ) ;  
			
		
	
		
			
				
					                                            mEep - > write ( ADDR_INV_PWR_LIM_CON  +  iv - > id  *  2 ,  iv - > powerLimit [ 1 ] ) ;  
			
		
	
		
			
				
					                                        updateCrc ( ) ;  
			
		
	
		
			
				
					                                        mEep - > commit ( ) ;  
			
		
	
		
			
				
					                                            DPRINTLN ( DBG_INFO ,  F ( " Inverter  " )  +  String ( iv - > id )  +  F ( "  has accepted power limit set point  " )  +  String ( iv - > powerLimit [ 0 ] )  +  F ( "  with PowerLimitControl  " )   +  String ( iv - > powerLimit [ 1 ] )  +  F ( " , written to dtu eeprom " ) ) ;  
			
		
	
		
			
				
					                                        }  else  
			
		
	
		
			
				
					                                        DPRINTLN ( DBG_INFO ,  F ( " Inverter  " )  +  String ( iv - > id )  +  F ( "  has accepted power limit set point  " )  +  String ( iv - > powerLimit [ 0 ] )  +  F ( "  with PowerLimitControl  " )   +  String ( iv - > powerLimit [ 1 ] ) ) ;  
			
		
	
		
			
				
					                                    iv - > devControlCmd  =  Init ;  
			
		
	
		
			
				
					                                }  
			
		
	
		
			
				
					                                break ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                            default :  
			
		
	
		
			
				
					                                    if  ( iv - > devControlCmd  = =  ActivePowerContr )  {  
			
		
	
		
			
				
					                                //case inverter did not accept the sent limit; set back to last stored limit
  
			
		
	
		
			
				
					                                mEep - > read ( ADDR_INV_PWR_LIM  +  iv - > id  *  2 ,  ( uint16_t  * ) & ( iv - > powerLimit [ 0 ] ) ) ;  
			
		
	
		
			
				
					                                mEep - > read ( ADDR_INV_PWR_LIM_CON  +  iv - > id  *  2 ,  ( uint16_t  * ) & ( iv - > powerLimit [ 1 ] ) ) ;  
			
		
	
		
			
				
					                                        DPRINTLN ( DBG_INFO ,  F ( " Inverter has not accepted power limit set point " ) ) ;  
			
		
	
		
			
				
					                                }  
			
		
	
		
			
				
					                                iv - > devControlCmd  =  Init ;  
			
		
	
		
			
				
					                            }  
			
		
	
		
			
				
					                            break ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                        default :  
			
		
	
		
			
				
					                                if  ( iv - > devControlCmd  = =  ActivePowerContr )  {  
			
		
	
		
			
				
					                            //case inverter did not accept the sent limit; set back to last stored limit
  
			
		
	
		
			
				
					                            mEep - > read ( ADDR_INV_PWR_LIM  +  iv - > id  *  2 ,  ( uint16_t  * ) & ( iv - > powerLimit [ 0 ] ) ) ;  
			
		
	
		
			
				
					                            mEep - > read ( ADDR_INV_PWR_LIM_CON  +  iv - > id  *  2 ,  ( uint16_t  * ) & ( iv - > powerLimit [ 1 ] ) ) ;  
			
		
	
		
			
				
					                                    DPRINTLN ( DBG_INFO ,  F ( " Inverter has not accepted power limit set point " ) ) ;  
			
		
	
		
			
				
					                            }  
			
		
	
		
			
				
					                            iv - > devControlCmd  =  Init ;  
			
		
	
		
			
				
					                            break ;  
			
		
	
		
			
				
					                                break ;  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                }  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -225,11 +221,13 @@ void app::loop(void) { 
			
		
	
		
			
				
					                int8_t  maxLoop  =  MAX_NUM_INVERTERS ;  
			
		
	
		
			
				
					                Inverter < >  * iv  =  mSys - > getInverterByPos ( mSendLastIvId ) ;  
			
		
	
		
			
				
					                do  {  
			
		
	
		
			
				
					                    if ( NULL  ! =  iv )  
			
		
	
		
			
				
					                        mPayload [ iv - > id ] . requested  =  false ;   
			
		
	
		
			
				
					                    //if(NULL != iv)
  
			
		
	
		
			
				
					                    //    mPayload[iv->id].requested = false;
  
			
		
	
		
			
				
					                    mSendLastIvId  =  ( ( MAX_NUM_INVERTERS - 1 )  = =  mSendLastIvId )  ?  0  :  mSendLastIvId  +  1 ;  
			
		
	
		
			
				
					                    iv  =  mSys - > getInverterByPos ( mSendLastIvId ) ;  
			
		
	
		
			
				
					                }  while ( ( NULL  = =  iv )  & &  ( ( maxLoop - - )  >  0 ) ) ;  
			
		
	
		
			
				
					                resetPayload ( iv ) ;  
			
		
	
		
			
				
					                mPayload [ iv - > id ] . requested  =  true ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                if ( NULL  ! =  iv )  {  
			
		
	
		
			
				
					                    if ( ! mPayload [ iv - > id ] . complete )  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -247,8 +245,6 @@ void app::loop(void) { 
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    resetPayload ( iv ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    yield ( ) ;  
			
		
	
		
			
				
					                    if ( mConfig . serialDebug )  {  
			
		
	
		
			
				
					                        DPRINTLN ( DBG_DEBUG ,  F ( " app:loop WiFi WiFi.status  " )  +  String ( WiFi . status ( ) ) ) ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -316,12 +312,13 @@ void app::processPayload(bool retransmit) { 
			
		
	
		
			
				
					    boolean  doMQTT  =  false ;  
			
		
	
		
			
				
					# endif  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    DPRINTLN ( DBG_VERBOSE ,  F ( " app::processPayload " ) ) ;  
			
		
	
		
			
				
					    //DPRINTLN(DBG_INFO, F("processPayload"));
  
			
		
	
		
			
				
					    for ( uint8_t  id  =  0 ;  id  <  mSys - > getNumInverters ( ) ;  id + + )  {  
			
		
	
		
			
				
					        Inverter < >  * iv  =  mSys - > getInverterByPos ( id ) ;  
			
		
	
		
			
				
					        if ( NULL  ! =  iv )  {  
			
		
	
		
			
				
					            if ( mPayload [ iv - > id ] . txId  ! =  ( TX_REQ_INFO  +  0x80 ) )  {  
			
		
	
		
			
				
					                // no processing needed if txId is not 0x95
  
			
		
	
		
			
				
					                DPRINTLN ( DBG_DEBUG ,  F ( " processPayload - set complete " ) ) ;  
			
		
	
		
			
				
					                mPayload [ iv - > id ] . complete  =  true ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					            if ( ! mPayload [ iv - > id ] . complete  )  {  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -334,7 +331,7 @@ void app::processPayload(bool retransmit) { 
			
		
	
		
			
				
					                                    for ( uint8_t  i  =  0 ;  i  <  ( mPayload [ iv - > id ] . maxPackId - 1 ) ;  i  + + )  {  
			
		
	
		
			
				
					                                        if ( mPayload [ iv - > id ] . len [ i ]  = =  0 )  {  
			
		
	
		
			
				
					                                            if ( mConfig . serialDebug )  
			
		
	
		
			
				
					                                                DPRINTLN ( DBG_ERROR  ,  F ( " while retrieving data: Frame  " )  +  String ( i + 1 )  +  F ( "  missing: Request Retransmit " ) ) ;  
			
		
	
		
			
				
					                                                DPRINTLN ( DBG_WARN  ,  F ( " while retrieving data: Frame  " )  +  String ( i + 1 )  +  F ( "  missing: Request Retransmit " ) ) ;  
			
		
	
		
			
				
					                                            mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 ,  TX_REQ_INFO ,  ( SINGLE_FRAME + i ) ,  true ) ;  
			
		
	
		
			
				
					                                            break ;  // only retransmit one frame per loop
  
			
		
	
		
			
				
					                                        }  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -343,11 +340,13 @@ void app::processPayload(bool retransmit) { 
			
		
	
		
			
				
					                                }  
			
		
	
		
			
				
					                                else  {  
			
		
	
		
			
				
					                                    if ( mConfig . serialDebug )  
			
		
	
		
			
				
					                                        DPRINTLN ( DBG_ERROR ,  F ( " while retrieving data: last frame missing: Request Retransmit " ) ) ;  
			
		
	
		
			
				
					                                    //if(0x00 != mLastPacketId)
  
			
		
	
		
			
				
					                                    //    mSys->Radio.sendCmdPacket(iv->radioId.u64, TX_REQ_INFO, mLastPacketId, true);
  
			
		
	
		
			
				
					                                    //else
  
			
		
	
		
			
				
					                                    mSys - > Radio . sendTimePacket ( iv - > radioId . u64 ,  mPayload [ iv - > id ] . txCmd ,  mPayload [ iv - > id ] . ts ,  iv - > alarmMesIndex ) ;  
			
		
	
		
			
				
					                                        DPRINTLN ( DBG_WARN ,  F ( " while retrieving data: last frame missing: Request Retransmit " ) ) ;  
			
		
	
		
			
				
					                                    if ( 0x00  ! =  mLastPacketId )  
			
		
	
		
			
				
					                                        mSys - > Radio . sendCmdPacket ( iv - > radioId . u64 ,  TX_REQ_INFO ,  mLastPacketId ,  true ) ;  
			
		
	
		
			
				
					                                    else  {  
			
		
	
		
			
				
					                                        mPayload [ iv - > id ] . txCmd  =  iv - > getQueuedCmd ( ) ;  
			
		
	
		
			
				
					                                        mSys - > Radio . sendTimePacket ( iv - > radioId . u64 ,  mPayload [ iv - > id ] . txCmd ,  mPayload [ iv - > id ] . ts ,  iv - > alarmMesIndex ) ;  
			
		
	
		
			
				
					                                    }  
			
		
	
		
			
				
					                                }  
			
		
	
		
			
				
					                                mSys - > Radio . switchRxCh ( 100 ) ;  
			
		
	
		
			
				
					                            }  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -356,14 +355,12 @@ void app::processPayload(bool retransmit) { 
			
		
	
		
			
				
					                }  
			
		
	
		
			
				
					                else  {  // payload complete
  
			
		
	
		
			
				
					                    DPRINTLN ( DBG_INFO ,  F ( " procPyld: cmd:   " )  +  String ( mPayload [ iv - > id ] . txCmd ) ) ;  
			
		
	
		
			
				
					                    DPRINTLN ( DBG_INFO ,  F ( " procPyld: txid:  " )  +  String ( mPayload [ iv - > id ] . txId ) ) ;  
			
		
	
		
			
				
					                    DPRINTLN ( DBG_INFO  ,  F ( " procPyld: max:   " )  +  String ( mPayload [ iv - > id ] . maxPackId ) ) ;  
			
		
	
		
			
				
					                    DPRINTLN ( DBG_INFO ,  F ( " procPyld: txid: 0x  " )  +  String ( mPayload [ iv - > id ] . txId ,  HEX ) ) ;  
			
		
	
		
			
				
					                    DPRINTLN ( DBG_DEBUG  ,  F ( " procPyld: max:   " )  +  String ( mPayload [ iv - > id ] . maxPackId ) ) ;  
			
		
	
		
			
				
					                    record_t < >  * rec  =  iv - > getRecordStruct ( mPayload [ iv - > id ] . txCmd ) ;  // choose the parser
  
			
		
	
		
			
				
					                    if ( NULL  = =  rec )  
			
		
	
		
			
				
					                        DPRINTLN ( DBG_ERROR ,  F ( " record is NULL! " ) ) ;  
			
		
	
		
			
				
					                    mPayload [ iv - > id ] . complete  =  true ;  
			
		
	
		
			
				
					                    rec - > ts  =  mPayload [ iv - > id ] . ts ;  
			
		
	
		
			
				
					                    mStat . rxSuccess + + ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    uint8_t  payload [ 128 ] ;  
			
		
	
		
			
				
					                    uint8_t  offs  =  0 ;  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -380,34 +377,38 @@ void app::processPayload(bool retransmit) { 
			
		
	
		
			
				
					                        mSys - > Radio . dumpBuf ( NULL ,  payload ,  offs ) ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    for ( uint8_t  i  =  0 ;  i  <  rec - > length ;  i + + )  {  
			
		
	
		
			
				
					                        iv - > addValue ( i ,  payload ,  rec ) ;  
			
		
	
		
			
				
					                        yield ( ) ;  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					                    iv - > doCalculations ( ) ;  
			
		
	
		
			
				
					                     
			
		
	
		
			
				
					                    iv - > setQueuedCmdFinished ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    // MQTT send out
  
			
		
	
		
			
				
					                    if ( mMqttActive )  {  
			
		
	
		
			
				
					                        char  topic [ 30 ] ,  val [ 10 ] ;  
			
		
	
		
			
				
					                        float  total [ 4 ] ;  
			
		
	
		
			
				
					                        memset ( total ,  0 ,  sizeof ( float )  *  4 ) ;  
			
		
	
		
			
				
					                        for  ( uint8_t  id  =  0 ;  id  <  mSys - > getNumInverters ( ) ;  id + + )  {  
			
		
	
		
			
				
					                            Inverter < >  * iv  =  mSys - > getInverterByPos ( id ) ;  
			
		
	
		
			
				
					                            if  ( NULL  ! =  iv )  {  
			
		
	
		
			
				
					                                if ( iv - > getRecordStruct ( RealTimeRunData_Debug )  = =  rec )  {  
			
		
	
		
			
				
					                    if ( NULL  = =  rec )  
			
		
	
		
			
				
					                        DPRINTLN ( DBG_ERROR ,  F ( " record is NULL! " ) ) ;  
			
		
	
		
			
				
					                    else  {  
			
		
	
		
			
				
					                        rec - > ts  =  mPayload [ iv - > id ] . ts ;  
			
		
	
		
			
				
					                        for ( uint8_t  i  =  0 ;  i  <  rec - > length ;  i + + )  {  
			
		
	
		
			
				
					                            iv - > addValue ( i ,  payload ,  rec ) ;  
			
		
	
		
			
				
					                            yield ( ) ;  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                        iv - > doCalculations ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                        // MQTT send out
  
			
		
	
		
			
				
					                        if ( mMqttActive )  {  
			
		
	
		
			
				
					                            record_t < >  * recRealtime  =  iv - > getRecordStruct ( RealTimeRunData_Debug ) ;  
			
		
	
		
			
				
					                            char  topic [ 30 ] ,  val [ 10 ] ;  
			
		
	
		
			
				
					                            float  total [ 4 ] ;  
			
		
	
		
			
				
					                            memset ( total ,  0 ,  sizeof ( float )  *  4 ) ;  
			
		
	
		
			
				
					                            for  ( uint8_t  id  =  0 ;  id  <  mSys - > getNumInverters ( ) ;  id + + )  {  
			
		
	
		
			
				
					                                Inverter < >  * iv  =  mSys - > getInverterByPos ( id ) ;  
			
		
	
		
			
				
					                                if  ( NULL  ! =  iv )  {  
			
		
	
		
			
				
					                                    if  ( iv - > isAvailable ( mTimestamp ,  rec ) )  {  
			
		
	
		
			
				
					                                        for  ( uint8_t  i  =  0 ;  i  <  rec - > length ;  i + + )  {  
			
		
	
		
			
				
					                                            snprintf ( topic ,  30 ,  " %s/ch%d/%s " ,  iv - > name ,  rec - > assign [ i ] . ch ,  fields [ rec - > assign [ i ] . fieldId ] ) ;  
			
		
	
		
			
				
					                                            snprintf ( val ,  10 ,  " %.3f " ,  iv - > getValue ( i ,  rec ) ) ;  
			
		
	
		
			
				
					                                            mMqtt . sendMsg ( topic ,  val ) ;  
			
		
	
		
			
				
					                                            if ( CH0  = =  rec - > assign [ i ] . ch )  {  
			
		
	
		
			
				
					                                                switch ( rec - > assign [ i ] . fieldId )  {  
			
		
	
		
			
				
					                                                    case  FLD_PAC :  total [ 0 ]  + =  iv - > getValue ( i ,  rec ) ;  break ;  
			
		
	
		
			
				
					                                                    case  FLD_YT :   total [ 1 ]  + =  iv - > getValue ( i ,  rec ) ;  break ;  
			
		
	
		
			
				
					                                                    case  FLD_YD :   total [ 2 ]  + =  iv - > getValue ( i ,  rec ) ;  break ;  
			
		
	
		
			
				
					                                                    case  FLD_PDC :  total [ 3 ]  + =  iv - > getValue ( i ,  rec ) ;  break ;  
			
		
	
		
			
				
					                                            if ( recRealtime  = =  rec )  {  
			
		
	
		
			
				
					                                                if ( CH0  = =  rec - > assign [ i ] . ch )  {  
			
		
	
		
			
				
					                                                    switch ( rec - > assign [ i ] . fieldId )  {  
			
		
	
		
			
				
					                                                        case  FLD_PAC :  total [ 0 ]  + =  iv - > getValue ( i ,  rec ) ;  break ;  
			
		
	
		
			
				
					                                                        case  FLD_YT :   total [ 1 ]  + =  iv - > getValue ( i ,  rec ) ;  break ;  
			
		
	
		
			
				
					                                                        case  FLD_YD :   total [ 2 ]  + =  iv - > getValue ( i ,  rec ) ;  break ;  
			
		
	
		
			
				
					                                                        case  FLD_PDC :  total [ 3 ]  + =  iv - > getValue ( i ,  rec ) ;  break ;  
			
		
	
		
			
				
					                                                    }  
			
		
	
		
			
				
					                                                }  
			
		
	
		
			
				
					                                            }  
			
		
	
		
			
				
					                                            yield ( ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -415,26 +416,30 @@ void app::processPayload(bool retransmit) { 
			
		
	
		
			
				
					                                    }  
			
		
	
		
			
				
					                                }  
			
		
	
		
			
				
					                            }  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                        // total values (sum of all inverters)
  
			
		
	
		
			
				
					                        if ( mSys - > getNumInverters ( )  >  1 )  {  
			
		
	
		
			
				
					                            uint8_t  fieldId  =  0 ;  
			
		
	
		
			
				
					                            for  ( uint8_t  i  =  0 ;  i  <  4 ;  i + + )  {  
			
		
	
		
			
				
					                                switch ( i )  {  
			
		
	
		
			
				
					                                    case  0 :  fieldId  =  FLD_PAC ;  break ;  
			
		
	
		
			
				
					                                    case  1 :  fieldId  =  FLD_YT ;   break ;  
			
		
	
		
			
				
					                                    case  2 :  fieldId  =  FLD_YD ;   break ;  
			
		
	
		
			
				
					                                    case  3 :  fieldId  =  FLD_PDC ;  break ;  
			
		
	
		
			
				
					                            // total values (sum of all inverters)
  
			
		
	
		
			
				
					                            if ( recRealtime  = =  rec )  {  
			
		
	
		
			
				
					                                if ( mSys - > getNumInverters ( )  >  1 )  {  
			
		
	
		
			
				
					                                    uint8_t  fieldId  =  0 ;  
			
		
	
		
			
				
					                                    for  ( uint8_t  i  =  0 ;  i  <  4 ;  i + + )  {  
			
		
	
		
			
				
					                                        switch ( i )  {  
			
		
	
		
			
				
					                                            case  0 :  fieldId  =  FLD_PAC ;  break ;  
			
		
	
		
			
				
					                                            case  1 :  fieldId  =  FLD_YT ;   break ;  
			
		
	
		
			
				
					                                            case  2 :  fieldId  =  FLD_YD ;   break ;  
			
		
	
		
			
				
					                                            case  3 :  fieldId  =  FLD_PDC ;  break ;  
			
		
	
		
			
				
					                                        }  
			
		
	
		
			
				
					                                        snprintf ( topic ,  30 ,  " total/%s " ,  fields [ fieldId ] ) ;  
			
		
	
		
			
				
					                                        snprintf ( val ,  10 ,  " %.3f " ,  total [ i ] ) ;  
			
		
	
		
			
				
					                                        mMqtt . sendMsg ( topic ,  val ) ;  
			
		
	
		
			
				
					                                    }  
			
		
	
		
			
				
					                                }  
			
		
	
		
			
				
					                                snprintf ( topic ,  30 ,  " total/%s " ,  fields [ fieldId ] ) ;  
			
		
	
		
			
				
					                                snprintf ( val ,  10 ,  " %.3f " ,  total [ i ] ) ;  
			
		
	
		
			
				
					                                mMqtt . sendMsg ( topic ,  val ) ;  
			
		
	
		
			
				
					                            }  
			
		
	
		
			
				
					                        }  
			
		
	
		
			
				
					                    }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    resetPayload ( iv ) ;  
			
		
	
		
			
				
					                    iv - > setQueuedCmdFinished ( ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                    //resetPayload(iv);
  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# ifdef __MQTT_AFTER_RX__  
			
		
	
		
			
				
					                    doMQTT  =  true ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -657,12 +662,7 @@ void app::resetSystem(void) { 
			
		
	
		
			
				
					    mShowRebootRequest  =  false ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    Inverter < >  * iv ;  
			
		
	
		
			
				
					    for ( uint8_t  i  =  0 ;  i  <  MAX_NUM_INVERTERS ;  i + + )  {  
			
		
	
		
			
				
					        iv  =  mSys - > getInverterByPos ( i ,  false ) ;  
			
		
	
		
			
				
					        if ( NULL  ! =  iv )  
			
		
	
		
			
				
					            resetPayload ( iv ) ;  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					    memset ( mPayload ,  0 ,  ( MAX_NUM_INVERTERS  *  sizeof ( invPayload_t ) ) ) ;  
			
		
	
		
			
				
					    memset ( & mStat ,  0 ,  sizeof ( statistics_t ) ) ;  
			
		
	
		
			
				
					    mLastPacketId  =  0x00 ;  
			
		
	
		
			
				
					}  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -757,6 +757,12 @@ void app::loadEEpconfig(void) { 
			
		
	
		
			
				
					                mMqttInterval  + =  mConfig . sendInterval ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        for ( uint8_t  i  =  0 ;  i  <  MAX_NUM_INVERTERS ;  i + + )  {  
			
		
	
		
			
				
					            iv  =  mSys - > getInverterByPos ( i ,  false ) ;  
			
		
	
		
			
				
					            if ( NULL  ! =  iv )  
			
		
	
		
			
				
					                resetPayload ( iv ) ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -825,11 +831,12 @@ void app::setupMqtt(void) { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//-----------------------------------------------------------------------------
  
			
		
	
		
			
				
					void  app : : resetPayload ( Inverter < > *  iv )  {  
			
		
	
		
			
				
					    DPRINTLN ( DBG_INFO ,  " resetPayload: id:  "  +  String ( iv - > id ) ) ;  
			
		
	
		
			
				
					    memset ( mPayload [ iv - > id ] . len ,  0 ,  MAX_PAYLOAD_ENTRIES ) ;  
			
		
	
		
			
				
					    mPayload [ iv - > id ] . txCmd        =  0 ;  
			
		
	
		
			
				
					    mPayload [ iv - > id ] . retransmits  =  0 ;  
			
		
	
		
			
				
					    mPayload [ iv - > id ] . maxPackId    =  0 ;  
			
		
	
		
			
				
					    mPayload [ iv - > id ] . complete     =  false ;  
			
		
	
		
			
				
					    mPayload [ iv - > id ] . requested    =  tru e;  
			
		
	
		
			
				
					    mPayload [ iv - > id ] . requested    =  fals e;  
			
		
	
		
			
				
					    mPayload [ iv - > id ] . ts           =  mTimestamp ;  
			
		
	
		
			
				
					}