fix and harden BatteryStats update timestamp handling
* updating the SoC or value shall also update the general timestamp, as the latter is defined as "any value changed", which includes SoC and voltage, of course. * if the last update is not a valid timestamp at all, the updateAvailable method must always return false, obviously.
This commit is contained in:
parent
d935283d1f
commit
1c51c2de40
@ -45,12 +45,12 @@ class BatteryStats {
|
|||||||
void setSoC(float soc, uint8_t precision, uint32_t timestamp) {
|
void setSoC(float soc, uint8_t precision, uint32_t timestamp) {
|
||||||
_soc = soc;
|
_soc = soc;
|
||||||
_socPrecision = precision;
|
_socPrecision = precision;
|
||||||
_lastUpdateSoC = timestamp;
|
_lastUpdateSoC = _lastUpdate = timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setVoltage(float voltage, uint32_t timestamp) {
|
void setVoltage(float voltage, uint32_t timestamp) {
|
||||||
_voltage = voltage;
|
_voltage = voltage;
|
||||||
_lastUpdateVoltage = timestamp;
|
_lastUpdateVoltage = _lastUpdate = timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
String _manufacturer = "unknown";
|
String _manufacturer = "unknown";
|
||||||
|
|||||||
@ -53,6 +53,8 @@ static void addLiveViewAlarm(JsonVariant& root, std::string const& name,
|
|||||||
|
|
||||||
bool BatteryStats::updateAvailable(uint32_t since) const
|
bool BatteryStats::updateAvailable(uint32_t since) const
|
||||||
{
|
{
|
||||||
|
if (_lastUpdate == 0) { return false; } // no data at all processed yet
|
||||||
|
|
||||||
auto constexpr halfOfAllMillis = std::numeric_limits<uint32_t>::max() / 2;
|
auto constexpr halfOfAllMillis = std::numeric_limits<uint32_t>::max() / 2;
|
||||||
return (_lastUpdate - since) < halfOfAllMillis;
|
return (_lastUpdate - since) < halfOfAllMillis;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user