|  | @ -14,7 +14,6 @@ app::app() : Main() { | 
			
		
	
		
		
			
				
					|  |  |     mSerialTicker   = 0xffff; |  |  |     mSerialTicker   = 0xffff; | 
			
		
	
		
		
			
				
					|  |  |     mSerialInterval = 0; |  |  |     mSerialInterval = 0; | 
			
		
	
		
		
			
				
					|  |  |     mMqttActive     = false; |  |  |     mMqttActive     = false; | 
			
		
	
		
		
			
				
					|  |  |     mMqttNewDataAvail = false; |  |  |  | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     mTicker = 0; |  |  |     mTicker = 0; | 
			
		
	
		
		
			
				
					|  |  |     mRxTicker = 0; |  |  |     mRxTicker = 0; | 
			
		
	
	
		
		
			
				
					|  | @ -27,6 +26,7 @@ app::app() : Main() { | 
			
		
	
		
		
			
				
					|  |  |     memset(mPayload, 0, (MAX_NUM_INVERTERS * sizeof(invPayload_t))); |  |  |     memset(mPayload, 0, (MAX_NUM_INVERTERS * sizeof(invPayload_t))); | 
			
		
	
		
		
			
				
					|  |  |     mRxFailed     = 0; |  |  |     mRxFailed     = 0; | 
			
		
	
		
		
			
				
					|  |  |     mRxSuccess    = 0; |  |  |     mRxSuccess    = 0; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     mLastPacketId = 0x00; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     mSys = new HmSystemType(); |  |  |     mSys = new HmSystemType(); | 
			
		
	
		
		
			
				
					|  |  | } |  |  | } | 
			
		
	
	
		
		
			
				
					|  | @ -162,8 +162,11 @@ void app::loop(void) { | 
			
		
	
		
		
			
				
					|  |  |                         } |  |  |                         } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |                         if((*pid & 0x80) == 0x80) { |  |  |                         if((*pid & 0x80) == 0x80) { | 
			
		
	
		
		
			
				
					
					|  |  |                             if((*pid & 0x7f) > mPayload[iv->id].maxPackId) |  |  |                             if((*pid & 0x7f) > mPayload[iv->id].maxPackId) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |                                 mPayload[iv->id].maxPackId = (*pid & 0x7f); |  |  |                                 mPayload[iv->id].maxPackId = (*pid & 0x7f); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 if(*pid > 0x81) | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                     mLastPacketId = *pid; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             } | 
			
		
	
		
		
			
				
					|  |  |                         } |  |  |                         } | 
			
		
	
		
		
			
				
					|  |  |                     } |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |                 } |  |  |                 } | 
			
		
	
	
		
		
			
				
					|  | @ -182,7 +185,6 @@ void app::loop(void) { | 
			
		
	
		
		
			
				
					|  |  |         mMqtt.loop(); |  |  |         mMqtt.loop(); | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |     if(checkTicker(&mTicker, 1000)) { |  |  |     if(checkTicker(&mTicker, 1000)) { | 
			
		
	
		
		
			
				
					|  |  |         if(mMqttNewDataAvail) { |  |  |  | 
			
		
	
		
		
			
				
					|  |  |         if(++mMqttTicker >= mMqttInterval) { |  |  |         if(++mMqttTicker >= mMqttInterval) { | 
			
		
	
		
		
			
				
					|  |  |             mMqttTicker = 0; |  |  |             mMqttTicker = 0; | 
			
		
	
		
		
			
				
					|  |  |             mMqtt.isConnected(true); |  |  |             mMqtt.isConnected(true); | 
			
		
	
	
		
		
			
				
					|  | @ -190,6 +192,7 @@ void app::loop(void) { | 
			
		
	
		
		
			
				
					|  |  |             for(uint8_t id = 0; id < mSys->getNumInverters(); id++) { |  |  |             for(uint8_t id = 0; id < mSys->getNumInverters(); id++) { | 
			
		
	
		
		
			
				
					|  |  |                 Inverter<> *iv = mSys->getInverterByPos(id); |  |  |                 Inverter<> *iv = mSys->getInverterByPos(id); | 
			
		
	
		
		
			
				
					|  |  |                 if(NULL != iv) { |  |  |                 if(NULL != iv) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     if(iv->isAvailable(mTimestamp)) { | 
			
		
	
		
		
			
				
					|  |  |                         for(uint8_t i = 0; i < iv->listLen; i++) { |  |  |                         for(uint8_t i = 0; i < iv->listLen; i++) { | 
			
		
	
		
		
			
				
					|  |  |                             snprintf(topic, 30, "%s/ch%d/%s", iv->name, iv->assign[i].ch, fields[iv->assign[i].fieldId]); |  |  |                             snprintf(topic, 30, "%s/ch%d/%s", iv->name, iv->assign[i].ch, fields[iv->assign[i].fieldId]); | 
			
		
	
		
		
			
				
					|  |  |                             snprintf(val, 10, "%.3f", iv->getValue(i)); |  |  |                             snprintf(val, 10, "%.3f", iv->getValue(i)); | 
			
		
	
	
		
		
			
				
					|  | @ -199,10 +202,9 @@ void app::loop(void) { | 
			
		
	
		
		
			
				
					|  |  |                         } |  |  |                         } | 
			
		
	
		
		
			
				
					|  |  |                     } |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |                 } |  |  |                 } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |             snprintf(val, 10, "%d", ESP.getFreeHeap()); |  |  |             snprintf(val, 10, "%d", ESP.getFreeHeap()); | 
			
		
	
		
		
			
				
					|  |  |             mMqtt.sendMsg("free_heap", val); |  |  |             mMqtt.sendMsg("free_heap", val); | 
			
		
	
		
		
			
				
					|  |  |                 mMqttNewDataAvail = false; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |  | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         if(mSerialValues) { |  |  |         if(mSerialValues) { | 
			
		
	
	
		
		
			
				
					|  | @ -212,6 +214,7 @@ void app::loop(void) { | 
			
		
	
		
		
			
				
					|  |  |                 for(uint8_t id = 0; id < mSys->getNumInverters(); id++) { |  |  |                 for(uint8_t id = 0; id < mSys->getNumInverters(); id++) { | 
			
		
	
		
		
			
				
					|  |  |                     Inverter<> *iv = mSys->getInverterByPos(id); |  |  |                     Inverter<> *iv = mSys->getInverterByPos(id); | 
			
		
	
		
		
			
				
					|  |  |                     if(NULL != iv) { |  |  |                     if(NULL != iv) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         if(iv->isAvailable(mTimestamp)) { | 
			
		
	
		
		
			
				
					|  |  |                             for(uint8_t i = 0; i < iv->listLen; i++) { |  |  |                             for(uint8_t i = 0; i < iv->listLen; i++) { | 
			
		
	
		
		
			
				
					|  |  |                                 if(0.0f != iv->getValue(i)) { |  |  |                                 if(0.0f != iv->getValue(i)) { | 
			
		
	
		
		
			
				
					|  |  |                                     snprintf(topic, 30, "%s/ch%d/%s", iv->name, iv->assign[i].ch, iv->getFieldName(i)); |  |  |                                     snprintf(topic, 30, "%s/ch%d/%s", iv->name, iv->assign[i].ch, iv->getFieldName(i)); | 
			
		
	
	
		
		
			
				
					|  | @ -224,6 +227,7 @@ void app::loop(void) { | 
			
		
	
		
		
			
				
					|  |  |                     } |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |                 } |  |  |                 } | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         if(++mSendTicker >= mSendInterval) { |  |  |         if(++mSendTicker >= mSendInterval) { | 
			
		
	
		
		
			
				
					|  |  |             mSendTicker = 0; |  |  |             mSendTicker = 0; | 
			
		
	
	
		
		
			
				
					|  | @ -318,6 +322,9 @@ void app::processPayload(bool retransmit) { | 
			
		
	
		
		
			
				
					|  |  |                         else { |  |  |                         else { | 
			
		
	
		
		
			
				
					|  |  |                             if(mSerialDebug) |  |  |                             if(mSerialDebug) | 
			
		
	
		
		
			
				
					|  |  |                                 DPRINTLN(F("Error while retrieving data: last frame missing: Request Retransmit")); |  |  |                                 DPRINTLN(F("Error while retrieving data: last frame missing: Request Retransmit")); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             if(0x00 != mLastPacketId) | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 mSys->Radio.sendCmdPacket(iv->radioId.u64, 0x15, mLastPacketId, true); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             else | 
			
		
	
		
		
			
				
					|  |  |                                 mSys->Radio.sendTimePacket(iv->radioId.u64, mPayload[iv->id].ts); |  |  |                                 mSys->Radio.sendTimePacket(iv->radioId.u64, mPayload[iv->id].ts); | 
			
		
	
		
		
			
				
					|  |  |                         } |  |  |                         } | 
			
		
	
		
		
			
				
					|  |  |                         mSys->Radio.switchRxCh(100); |  |  |                         mSys->Radio.switchRxCh(100); | 
			
		
	
	
		
		
			
				
					|  | @ -343,7 +350,6 @@ void app::processPayload(bool retransmit) { | 
			
		
	
		
		
			
				
					|  |  |                         iv->addValue(i, payload); |  |  |                         iv->addValue(i, payload); | 
			
		
	
		
		
			
				
					|  |  |                     } |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |                     iv->doCalculations(); |  |  |                     iv->doCalculations(); | 
			
		
	
		
		
			
				
					|  |  |                     mMqttNewDataAvail = true; |  |  |  | 
			
		
	
		
		
			
				
					|  |  |                 } |  |  |                 } | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
	
		
		
			
				
					|  | 
 |