mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-10 23:46:37 +02:00
* inverter dependent mqtt (is avail)
* implemented heap stats #58 * inserted 'break' in ISR while loop
This commit is contained in:
parent
81943441e0
commit
df5a306bb2
6 changed files with 52 additions and 25 deletions
|
@ -14,7 +14,6 @@ app::app() : Main() {
|
|||
mSerialTicker = 0xffff;
|
||||
mSerialInterval = 0;
|
||||
mMqttActive = false;
|
||||
mMqttNewDataAvail = false;
|
||||
|
||||
mTicker = 0;
|
||||
mRxTicker = 0;
|
||||
|
@ -27,6 +26,7 @@ app::app() : Main() {
|
|||
memset(mPayload, 0, (MAX_NUM_INVERTERS * sizeof(invPayload_t)));
|
||||
mRxFailed = 0;
|
||||
mRxSuccess = 0;
|
||||
mLastPacketId = 0x00;
|
||||
|
||||
mSys = new HmSystemType();
|
||||
}
|
||||
|
@ -162,8 +162,11 @@ void app::loop(void) {
|
|||
}
|
||||
|
||||
if((*pid & 0x80) == 0x80) {
|
||||
if((*pid & 0x7f) > mPayload[iv->id].maxPackId)
|
||||
if((*pid & 0x7f) > mPayload[iv->id].maxPackId) {
|
||||
mPayload[iv->id].maxPackId = (*pid & 0x7f);
|
||||
if(*pid > 0x81)
|
||||
mLastPacketId = *pid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -182,7 +185,6 @@ void app::loop(void) {
|
|||
mMqtt.loop();
|
||||
|
||||
if(checkTicker(&mTicker, 1000)) {
|
||||
if(mMqttNewDataAvail) {
|
||||
if(++mMqttTicker >= mMqttInterval) {
|
||||
mMqttTicker = 0;
|
||||
mMqtt.isConnected(true);
|
||||
|
@ -190,6 +192,7 @@ void app::loop(void) {
|
|||
for(uint8_t id = 0; id < mSys->getNumInverters(); id++) {
|
||||
Inverter<> *iv = mSys->getInverterByPos(id);
|
||||
if(NULL != iv) {
|
||||
if(iv->isAvailable(mTimestamp)) {
|
||||
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(val, 10, "%.3f", iv->getValue(i));
|
||||
|
@ -199,10 +202,9 @@ void app::loop(void) {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
snprintf(val, 10, "%d", ESP.getFreeHeap());
|
||||
mMqtt.sendMsg("free_heap", val);
|
||||
mMqttNewDataAvail = false;
|
||||
}
|
||||
}
|
||||
|
||||
if(mSerialValues) {
|
||||
|
@ -212,6 +214,7 @@ void app::loop(void) {
|
|||
for(uint8_t id = 0; id < mSys->getNumInverters(); id++) {
|
||||
Inverter<> *iv = mSys->getInverterByPos(id);
|
||||
if(NULL != iv) {
|
||||
if(iv->isAvailable(mTimestamp)) {
|
||||
for(uint8_t i = 0; i < iv->listLen; i++) {
|
||||
if(0.0f != iv->getValue(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) {
|
||||
mSendTicker = 0;
|
||||
|
@ -318,6 +322,9 @@ void app::processPayload(bool retransmit) {
|
|||
else {
|
||||
if(mSerialDebug)
|
||||
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.switchRxCh(100);
|
||||
|
@ -343,7 +350,6 @@ void app::processPayload(bool retransmit) {
|
|||
iv->addValue(i, payload);
|
||||
}
|
||||
iv->doCalculations();
|
||||
mMqttNewDataAvail = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,6 +87,7 @@ class app : public Main {
|
|||
invPayload_t mPayload[MAX_NUM_INVERTERS];
|
||||
uint32_t mRxFailed;
|
||||
uint32_t mRxSuccess;
|
||||
uint8_t mLastPacketId;
|
||||
|
||||
// timer
|
||||
uint32_t mTicker;
|
||||
|
@ -100,9 +101,10 @@ class app : public Main {
|
|||
uint16_t mMqttTicker;
|
||||
uint16_t mMqttInterval;
|
||||
bool mMqttActive;
|
||||
|
||||
// serial
|
||||
uint16_t mSerialTicker;
|
||||
uint16_t mSerialInterval;
|
||||
bool mMqttNewDataAvail;
|
||||
};
|
||||
|
||||
#endif /*__APP_H__*/
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
//-------------------------------------
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 4
|
||||
#define VERSION_PATCH 10
|
||||
#define VERSION_PATCH 11
|
||||
|
||||
|
||||
//-------------------------------------
|
||||
|
|
|
@ -123,6 +123,7 @@ class HmRadio {
|
|||
bool tx_ok, tx_fail, rx_ready;
|
||||
mNrf24.whatHappened(tx_ok, tx_fail, rx_ready); // reset interrupt status
|
||||
mNrf24.flush_rx(); // drop the packet
|
||||
break;
|
||||
}
|
||||
}
|
||||
RESTORE_IRQ;
|
||||
|
|
|
@ -32,6 +32,8 @@ Main::Main(void) {
|
|||
mUptimeInterval = 1000;
|
||||
|
||||
mTimestamp = 0;
|
||||
|
||||
mHeapStatCnt = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -102,6 +104,11 @@ void Main::loop(void) {
|
|||
DPRINTLN("[NTP]: " + getDateTimeStr(mTimestamp));
|
||||
}
|
||||
}
|
||||
|
||||
if(++mHeapStatCnt >= 10) {
|
||||
mHeapStatCnt = 0;
|
||||
stats();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -134,6 +141,7 @@ bool Main::getConfig(void) {
|
|||
if(!mSettingsValid) {
|
||||
DPRINTLN(F("Settings not valid, erasing ..."));
|
||||
eraseSettings();
|
||||
saveValues(false);
|
||||
delay(100);
|
||||
DPRINTLN(F("... restarting ..."));
|
||||
delay(100);
|
||||
|
|
|
@ -81,6 +81,15 @@ class Main {
|
|||
return false;
|
||||
}
|
||||
|
||||
void stats(void) {
|
||||
uint32_t free;
|
||||
uint16_t max;
|
||||
uint8_t frag;
|
||||
ESP.getHeapStats(&free, &max, &frag);
|
||||
|
||||
Serial.printf("free: 0x%x - max: 0x%x - frag: %d%%\n", free, max, frag);
|
||||
}
|
||||
|
||||
char mStationSsid[SSID_LEN];
|
||||
char mStationPwd[PWD_LEN];
|
||||
bool mWifiSettingsValid;
|
||||
|
@ -115,6 +124,7 @@ class Main {
|
|||
uint32_t mUptimeTicker;
|
||||
uint16_t mUptimeInterval;
|
||||
uint32_t mUptimeSecs;
|
||||
uint8_t mHeapStatCnt;
|
||||
|
||||
DNSServer *mDns;
|
||||
ESP8266HTTPUpdateServer *mUpdater;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue