feat(battery): round bat_v and derive bat_pct locally

This commit is contained in:
2026-01-20 22:58:56 +01:00
parent cfbab84f97
commit 8c9520f7e5
6 changed files with 53 additions and 16 deletions

View File

@@ -1,9 +1,10 @@
#include "json_codec.h"
#include <ArduinoJson.h>
#include <math.h>
#include "power_manager.h"
bool meterDataToJson(const MeterData &data, String &out_json) {
StaticJsonDocument<256> doc;
StaticJsonDocument<192> doc;
doc["id"] = data.device_id;
doc["ts"] = data.ts_utc;
doc["energy_kwh"] = data.energy_total_kwh;
@@ -14,8 +15,9 @@ bool meterDataToJson(const MeterData &data, String &out_json) {
doc["v1_v"] = data.phase_voltage_v[0];
doc["v2_v"] = data.phase_voltage_v[1];
doc["v3_v"] = data.phase_voltage_v[2];
doc["bat_v"] = data.battery_voltage_v;
doc["bat_pct"] = data.battery_percent;
char bat_buf[8];
snprintf(bat_buf, sizeof(bat_buf), "%.2f", data.battery_voltage_v);
doc["bat_v"] = serialized(bat_buf);
out_json = "";
size_t len = serializeJson(doc, out_json);
@@ -23,7 +25,7 @@ bool meterDataToJson(const MeterData &data, String &out_json) {
}
bool jsonToMeterData(const String &json, MeterData &data) {
StaticJsonDocument<256> doc;
StaticJsonDocument<192> doc;
DeserializationError err = deserializeJson(doc, json);
if (err) {
return false;
@@ -43,7 +45,11 @@ bool jsonToMeterData(const String &json, MeterData &data) {
data.phase_voltage_v[1] = doc["v2_v"] | NAN;
data.phase_voltage_v[2] = doc["v3_v"] | NAN;
data.battery_voltage_v = doc["bat_v"] | NAN;
data.battery_percent = doc["bat_pct"] | 0;
if (doc["bat_pct"].isNull() && !isnan(data.battery_voltage_v)) {
data.battery_percent = battery_percent_from_voltage(data.battery_voltage_v);
} else {
data.battery_percent = doc["bat_pct"] | 0;
}
data.valid = true;
if (strlen(data.device_id) >= 8) {