Normalize power/energy output formatting

This commit is contained in:
2026-02-04 02:33:43 +01:00
parent 7e5e23e56c
commit f08d9a34d3
3 changed files with 69 additions and 28 deletions

View File

@@ -87,6 +87,17 @@ static void format_float_2(char *buf, size_t buf_len, float value) {
snprintf(buf, buf_len, "%.2f", round2(value));
}
static void set_int_or_null(JsonDocument &doc, const char *key, float value) {
if (!key || key[0] == '\0') {
return;
}
if (isnan(value)) {
doc[key] = nullptr;
return;
}
doc[key] = round_to_i32(value);
}
bool meterDataToJson(const MeterData &data, String &out_json) {
StaticJsonDocument<256> doc;
doc["id"] = short_id_from_device_id(data.device_id);
@@ -94,14 +105,10 @@ bool meterDataToJson(const MeterData &data, String &out_json) {
char buf[16];
format_float_2(buf, sizeof(buf), data.energy_total_kwh);
doc["e_kwh"] = serialized(buf);
format_float_2(buf, sizeof(buf), data.total_power_w);
doc["p_w"] = serialized(buf);
format_float_2(buf, sizeof(buf), data.phase_power_w[0]);
doc["p1_w"] = serialized(buf);
format_float_2(buf, sizeof(buf), data.phase_power_w[1]);
doc["p2_w"] = serialized(buf);
format_float_2(buf, sizeof(buf), data.phase_power_w[2]);
doc["p3_w"] = serialized(buf);
set_int_or_null(doc, "p_w", data.total_power_w);
set_int_or_null(doc, "p1_w", data.phase_power_w[0]);
set_int_or_null(doc, "p2_w", data.phase_power_w[1]);
set_int_or_null(doc, "p3_w", data.phase_power_w[2]);
format_float_2(buf, sizeof(buf), data.battery_voltage_v);
doc["bat_v"] = serialized(buf);
doc["bat_pct"] = data.battery_percent;