fix: make repeater stats battery display board-aware
This commit is contained in:
@@ -28,6 +28,15 @@
|
||||
|
||||
namespace {
|
||||
|
||||
int clampBatteryPercentFromRange(uint16_t battery_mv, uint16_t min_mv, uint16_t max_mv) {
|
||||
if (max_mv <= min_mv) {
|
||||
return 0;
|
||||
}
|
||||
const long scaled = (static_cast<long>(battery_mv) - static_cast<long>(min_mv)) * 100L /
|
||||
static_cast<long>(max_mv - min_mv);
|
||||
return std::max(0L, std::min(100L, scaled));
|
||||
}
|
||||
|
||||
WebSensorSnapshot collectWebSensorSnapshot(mesh::MainBoard& board, SensorManager& sensors, uint16_t battery_mv) {
|
||||
WebSensorSnapshot snapshot;
|
||||
snapshot.has_battery = true;
|
||||
@@ -2481,6 +2490,11 @@ bool MyMesh::formatWebStatsSummaryJson(char* reply, size_t reply_size) {
|
||||
|
||||
const uint16_t battery_mv = getBatteryMilliVolts(true);
|
||||
const int battery_pct = board.getBatteryPercent();
|
||||
const uint16_t battery_min_mv = board.getBatteryMinMilliVolts();
|
||||
const uint16_t battery_max_mv = board.getBatteryMaxMilliVolts();
|
||||
const int battery_display_pct =
|
||||
(battery_pct >= 0) ? std::max(0, std::min(100, battery_pct))
|
||||
: clampBatteryPercentFromRange(battery_mv, battery_min_mv, battery_max_mv);
|
||||
const WebSensorSnapshot sensor_snapshot = collectWebSensorSnapshot(board, sensors, battery_mv);
|
||||
const bool archive_available = (_archive != nullptr) && _archive->isMounted();
|
||||
#ifdef WITH_MQTT_UPLINK
|
||||
@@ -2510,7 +2524,8 @@ bool MyMesh::formatWebStatsSummaryJson(char* reply, size_t reply_size) {
|
||||
"\"events\":%u,\"event_capacity\":%u},"
|
||||
"\"archive\":{\"logical\":\"%s\",\"available\":%s,\"path\":\"%s\",\"type\":\"%s\","
|
||||
"\"total_bytes\":%llu,\"used_bytes\":%llu},"
|
||||
"\"core\":{\"battery_mv\":%u,\"battery_pct\":%d,\"uptime_secs\":%lu,\"errors\":%u,\"queue_len\":%u,"
|
||||
"\"core\":{\"battery_mv\":%u,\"battery_pct\":%d,\"battery_display_pct\":%d,\"battery_min_mv\":%u,\"battery_max_mv\":%u,"
|
||||
"\"uptime_secs\":%lu,\"errors\":%u,\"queue_len\":%u,"
|
||||
"\"external_power\":%s,\"charging\":%s,\"vbus\":%s},"
|
||||
"\"radio\":{\"noise_floor\":%d,\"last_rssi\":%.2f,\"last_snr\":%.2f,\"tx_air_secs\":%lu,\"rx_air_secs\":%lu},"
|
||||
"\"packets\":{\"recv\":%u,\"sent\":%u,\"flood_tx\":%u,\"direct_tx\":%u,\"flood_rx\":%u,\"direct_rx\":%u,"
|
||||
@@ -2539,6 +2554,9 @@ bool MyMesh::formatWebStatsSummaryJson(char* reply, size_t reply_size) {
|
||||
static_cast<unsigned long long>(_archive != nullptr ? _archive->getUsedBytes() : 0),
|
||||
battery_mv,
|
||||
battery_pct,
|
||||
battery_display_pct,
|
||||
battery_min_mv,
|
||||
battery_max_mv,
|
||||
static_cast<unsigned long>(uptime_millis / 1000),
|
||||
_err_flags,
|
||||
static_cast<unsigned>(_mgr->getOutboundTotal()),
|
||||
|
||||
Reference in New Issue
Block a user