@ -161,15 +161,17 @@ void app::tickNtpUpdate(void) { 
			
		
	
		
			
				
					            mMqtt . connect ( ) ;  
			
		
	
		
			
				
					            everySec ( std : : bind ( & PubMqttType : : tickerSecond ,  & mMqtt ) ,  " mqttS " ) ;  
			
		
	
		
			
				
					            everyMin ( std : : bind ( & PubMqttType : : tickerMinute ,  & mMqtt ) ,  " mqttM " ) ;  
			
		
	
		
			
				
					            mMqttReconnect  =  false ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        // only install schedulers once even if NTP wasn't successful in first loop
  
			
		
	
		
			
				
					        if ( mMqttReconnect )  {  // @TODO: mMqttReconnect is wrong name here
  
			
		
	
		
			
				
					            if ( mConfig - > inst . rstValsNotAvail )  
			
		
	
		
			
				
					                everyMin ( std : : bind ( & app : : tickMinute ,  this ) ,  " tMin " ) ;  
			
		
	
		
			
				
					            if ( mConfig - > inst . rstYieldMidNight )  {  
			
		
	
		
			
				
					                uint32_t  midTrig  =  mTimestamp  -  ( ( mTimestamp  -  1 )  %  86400 )  +  86400 ;  // next midnight
  
			
		
	
		
			
				
					                onceAt ( std : : bind ( & app : : tickMidnight ,  this ) ,  midTrig ,  " midNi " ) ;  
			
		
	
		
			
				
					            }  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        nxtTrig  =  isOK  ?  43200  :  60 ;  // depending on NTP update success check again in 12 h or in 1 min
  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -183,6 +185,8 @@ void app::tickNtpUpdate(void) { 
			
		
	
		
			
				
					            mSendFirst  =  false ;  
			
		
	
		
			
				
					            once ( std : : bind ( & app : : tickSend ,  this ) ,  2 ,  " senOn " ) ;  
			
		
	
		
			
				
					        }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        mMqttReconnect  =  false ;  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					    once ( std : : bind ( & app : : tickNtpUpdate ,  this ) ,  nxtTrig ,  " ntp " ) ;  
			
		
	
		
			
				
					}  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -233,7 +237,17 @@ void app::tickSun(void) { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//-----------------------------------------------------------------------------
  
			
		
	
		
			
				
					void  app : : tickComm ( void )  {  
			
		
	
		
			
				
					    if ( ! mIVCommunicationOn  & &  ( mConfig - > inst . rstValsCommStop ) )  {  
			
		
	
		
			
				
					    if ( ( ! mIVCommunicationOn )  & &  ( mConfig - > inst . rstValsCommStop ) )  
			
		
	
		
			
				
					        once ( std : : bind ( & app : : tickZeroValues ,  this ) ,  mConfig - > nrf . sendInterval ,  " tZero " ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if  ( mMqttEnabled )  {  
			
		
	
		
			
				
					        if  ( ! mMqtt . tickerComm ( ! mIVCommunicationOn ) )  
			
		
	
		
			
				
					            once ( std : : bind ( & app : : tickComm ,  this ) ,  5 ,  " mqCom " ) ;     // MQTT not connected, retry after 5s
  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//-----------------------------------------------------------------------------
  
			
		
	
		
			
				
					void  app : : tickZeroValues ( void )  {  
			
		
	
		
			
				
					    Inverter < >  * iv ;  
			
		
	
		
			
				
					    // set values to zero, except yields
  
			
		
	
		
			
				
					    for  ( uint8_t  id  =  0 ;  id  <  mSys . getNumInverters ( ) ;  id + + )  {  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -243,12 +257,6 @@ void app::tickComm(void) { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        mPayload . zeroInverterValues ( iv ) ;  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if  ( mMqttEnabled )  {  
			
		
	
		
			
				
					        if  ( ! mMqtt . tickerComm ( ! mIVCommunicationOn ) )  
			
		
	
		
			
				
					            once ( std : : bind ( & app : : tickComm ,  this ) ,  5 ,  " mqCom " ) ;     // MQTT not connected, retry after 5s
  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					//-----------------------------------------------------------------------------
  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -273,6 +281,8 @@ void app::tickMidnight(void) { 
			
		
	
		
			
				
					    uint32_t  nxtTrig  =  mTimestamp  -  ( ( mTimestamp  -  1 )  %  86400 )  +  86400 ;  // next midnight
  
			
		
	
		
			
				
					    onceAt ( std : : bind ( & app : : tickMidnight ,  this ) ,  nxtTrig ,  " mid2 " ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    DPRINTLN ( DBG_INFO ,  " tickMidnight  "  +  String ( nxtTrig ) ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    Inverter < >  * iv ;  
			
		
	
		
			
				
					    // set values to zero, except yield total
  
			
		
	
		
			
				
					    for  ( uint8_t  id  =  0 ;  id  <  mSys . getNumInverters ( ) ;  id + + )  {