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

@@ -9,6 +9,8 @@
#include <WiFi.h>
#include <time.h>
#include <new>
#include <limits.h>
#include <math.h>
#include <stdlib.h>
static WebServer server(80);
@@ -55,6 +57,20 @@ static HistoryJob g_history = {};
static constexpr size_t SD_LIST_MAX_FILES = 200;
static constexpr size_t SD_DOWNLOAD_MAX_PATH = 160;
static int32_t round_power_w(float value) {
if (isnan(value)) {
return 0;
}
long rounded = lroundf(value);
if (rounded > INT32_MAX) {
return INT32_MAX;
}
if (rounded < INT32_MIN) {
return INT32_MIN;
}
return static_cast<int32_t>(rounded);
}
static bool auth_required() {
return g_is_ap ? WEB_AUTH_REQUIRE_AP : WEB_AUTH_REQUIRE_STA;
}
@@ -360,10 +376,11 @@ static String render_sender_block(const SenderStatus &status) {
if (!status.has_data) {
s += "No data";
} else {
s += "Energy: " + String(status.last_data.energy_total_kwh, 3) + " kWh<br>";
s += "Power: " + String(status.last_data.total_power_w, 1) + " W<br>";
s += "P1/P2/P3: " + String(status.last_data.phase_power_w[0], 1) + " / " + String(status.last_data.phase_power_w[1], 1) +
" / " + String(status.last_data.phase_power_w[2], 1) + " W<br>";
s += "Energy: " + String(status.last_data.energy_total_kwh, 2) + " kWh<br>";
s += "Power: " + String(round_power_w(status.last_data.total_power_w)) + " W<br>";
s += "P1/P2/P3: " + String(round_power_w(status.last_data.phase_power_w[0])) + " / " +
String(round_power_w(status.last_data.phase_power_w[1])) + " / " +
String(round_power_w(status.last_data.phase_power_w[2])) + " W<br>";
s += "Battery: " + String(status.last_data.battery_percent) + "% (" + String(status.last_data.battery_voltage_v, 2) + " V)";
}
s += "</div>";
@@ -597,11 +614,11 @@ static void handle_sender() {
html += "<tr>";
html += "<td>" + String(r) + "</td>";
html += "<td>" + String(d.ts_utc) + "</td>";
html += "<td>" + String(d.energy_total_kwh, 3) + "</td>";
html += "<td>" + String(d.total_power_w, 1) + "</td>";
html += "<td>" + String(d.phase_power_w[0], 1) + "</td>";
html += "<td>" + String(d.phase_power_w[1], 1) + "</td>";
html += "<td>" + String(d.phase_power_w[2], 1) + "</td>";
html += "<td>" + String(d.energy_total_kwh, 2) + "</td>";
html += "<td>" + String(round_power_w(d.total_power_w)) + "</td>";
html += "<td>" + String(round_power_w(d.phase_power_w[0])) + "</td>";
html += "<td>" + String(round_power_w(d.phase_power_w[1])) + "</td>";
html += "<td>" + String(round_power_w(d.phase_power_w[2])) + "</td>";
html += "<td>" + String(d.battery_voltage_v, 2) + "</td>";
html += "<td>" + String(d.battery_percent) + "</td>";
html += "<td>" + String(d.link_rssi_dbm) + "</td>";
@@ -754,7 +771,8 @@ static void handle_history_data() {
if (bin.count == 0) {
server.sendContent(String("[") + bin.ts + ",null]");
} else {
server.sendContent(String("[") + bin.ts + "," + String(value, 2) + "]");
int32_t rounded = round_power_w(value);
server.sendContent(String("[") + bin.ts + "," + String(rounded) + "]");
}
}
server.sendContent("]}");