Publish inverter stats only if values are updated
This commit is contained in:
parent
0cc80126fa
commit
e3ded34020
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "Configuration.h"
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <Hoymiles.h>
|
#include <Hoymiles.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -11,6 +12,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void publishField(String subtopic, std::shared_ptr<InverterAbstract> inv, uint8_t channel, uint8_t fieldId);
|
void publishField(String subtopic, std::shared_ptr<InverterAbstract> inv, uint8_t channel, uint8_t fieldId);
|
||||||
|
|
||||||
|
uint32_t _lastPublishStats[INV_MAX_COUNT];
|
||||||
};
|
};
|
||||||
|
|
||||||
extern MqttPublishingClass MqttPublishing;
|
extern MqttPublishingClass MqttPublishing;
|
||||||
@ -111,10 +111,16 @@ uint8_t InverterAbstract::verifyAllFragments()
|
|||||||
memcpy(&_payloadStats[offs], _rxFragmentBuffer[i].fragment, _rxFragmentBuffer[i].len);
|
memcpy(&_payloadStats[offs], _rxFragmentBuffer[i].fragment, _rxFragmentBuffer[i].len);
|
||||||
offs += (_rxFragmentBuffer[i].len);
|
offs += (_rxFragmentBuffer[i].len);
|
||||||
}
|
}
|
||||||
|
_lastStatsUpdate = millis();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t InverterAbstract::getLastStatsUpdate()
|
||||||
|
{
|
||||||
|
return _lastStatsUpdate;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t InverterAbstract::getChannelCount()
|
uint8_t InverterAbstract::getChannelCount()
|
||||||
{
|
{
|
||||||
const byteAssign_t* b = getByteAssignment();
|
const byteAssign_t* b = getByteAssignment();
|
||||||
|
|||||||
@ -111,6 +111,8 @@ public:
|
|||||||
const char* getUnit(uint8_t channel, uint8_t fieldId);
|
const char* getUnit(uint8_t channel, uint8_t fieldId);
|
||||||
const char* getName(uint8_t channel, uint8_t fieldId);
|
const char* getName(uint8_t channel, uint8_t fieldId);
|
||||||
|
|
||||||
|
uint32_t getLastStatsUpdate();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
serial_u _serial;
|
serial_u _serial;
|
||||||
char _name[MAX_NAME_LENGTH];
|
char _name[MAX_NAME_LENGTH];
|
||||||
@ -120,4 +122,5 @@ private:
|
|||||||
uint8_t _rxFragmentRetransmitCnt = 0;
|
uint8_t _rxFragmentRetransmitCnt = 0;
|
||||||
|
|
||||||
uint8_t _payloadStats[MAX_RF_FRAGMENT_COUNT * MAX_RF_PAYLOAD_SIZE];
|
uint8_t _payloadStats[MAX_RF_FRAGMENT_COUNT * MAX_RF_PAYLOAD_SIZE];
|
||||||
|
uint32_t _lastStatsUpdate = 0;
|
||||||
};
|
};
|
||||||
@ -1,5 +1,4 @@
|
|||||||
#include "MqttPublishing.h"
|
#include "MqttPublishing.h"
|
||||||
#include "Configuration.h"
|
|
||||||
#include "MqttSettings.h"
|
#include "MqttSettings.h"
|
||||||
#include <Every.h>
|
#include <Every.h>
|
||||||
|
|
||||||
@ -34,22 +33,27 @@ void MqttPublishingClass::loop()
|
|||||||
|
|
||||||
MqttSettings.publish(subtopic + "/name", inv->name());
|
MqttSettings.publish(subtopic + "/name", inv->name());
|
||||||
|
|
||||||
// Loop all channels
|
uint32_t lastUpdate = inv->getLastStatsUpdate();
|
||||||
for (uint8_t c = 0; c <= inv->getChannelCount(); c++) {
|
if (lastUpdate > 0 && lastUpdate != _lastPublishStats[i]) {
|
||||||
publishField(subtopic, inv, c, FLD_UDC);
|
_lastPublishStats[i] = lastUpdate;
|
||||||
publishField(subtopic, inv, c, FLD_IDC);
|
|
||||||
publishField(subtopic, inv, c, FLD_PDC);
|
// Loop all channels
|
||||||
publishField(subtopic, inv, c, FLD_YD);
|
for (uint8_t c = 0; c <= inv->getChannelCount(); c++) {
|
||||||
publishField(subtopic, inv, c, FLD_YW);
|
publishField(subtopic, inv, c, FLD_UDC);
|
||||||
publishField(subtopic, inv, c, FLD_YT);
|
publishField(subtopic, inv, c, FLD_IDC);
|
||||||
publishField(subtopic, inv, c, FLD_UAC);
|
publishField(subtopic, inv, c, FLD_PDC);
|
||||||
publishField(subtopic, inv, c, FLD_IAC);
|
publishField(subtopic, inv, c, FLD_YD);
|
||||||
publishField(subtopic, inv, c, FLD_PAC);
|
publishField(subtopic, inv, c, FLD_YW);
|
||||||
publishField(subtopic, inv, c, FLD_F);
|
publishField(subtopic, inv, c, FLD_YT);
|
||||||
publishField(subtopic, inv, c, FLD_T);
|
publishField(subtopic, inv, c, FLD_UAC);
|
||||||
publishField(subtopic, inv, c, FLD_PCT);
|
publishField(subtopic, inv, c, FLD_IAC);
|
||||||
publishField(subtopic, inv, c, FLD_EFF);
|
publishField(subtopic, inv, c, FLD_PAC);
|
||||||
publishField(subtopic, inv, c, FLD_IRR);
|
publishField(subtopic, inv, c, FLD_F);
|
||||||
|
publishField(subtopic, inv, c, FLD_T);
|
||||||
|
publishField(subtopic, inv, c, FLD_PCT);
|
||||||
|
publishField(subtopic, inv, c, FLD_EFF);
|
||||||
|
publishField(subtopic, inv, c, FLD_IRR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
yield();
|
yield();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user