From ea7d3cd44208ec4e4bf176d902e120c642c0ded5 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 19 May 2025 23:33:06 -0500 Subject: [PATCH] Add user string for host metrics --- src/modules/Telemetry/HostMetrics.cpp | 15 +++++++++++---- src/platform/portduino/PortduinoGlue.cpp | 2 ++ src/platform/portduino/PortduinoGlue.h | 3 ++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/modules/Telemetry/HostMetrics.cpp b/src/modules/Telemetry/HostMetrics.cpp index d1e5bdd00..61fdb25ce 100644 --- a/src/modules/Telemetry/HostMetrics.cpp +++ b/src/modules/Telemetry/HostMetrics.cpp @@ -30,11 +30,11 @@ bool HostMetricsModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, #ifdef DEBUG_PORT const char *sender = getSenderShortName(mp); - LOG_INFO("(Received Host Metrics from %s): uptime=%u, diskfree=%lu, memory free=%lu, load=%04.2f, %04.2f, %04.2f", sender, + LOG_INFO("(Received Host Metrics from %s): uptime=%u, diskfree=%lu, memory free=%lu, load=%04.2f, %04.2f, %04.2f, %s", sender, t->variant.host_metrics.uptime_seconds, t->variant.host_metrics.diskfree1_bytes, t->variant.host_metrics.freemem_bytes, static_cast(t->variant.host_metrics.load1) / 100, static_cast(t->variant.host_metrics.load5) / 100, - static_cast(t->variant.host_metrics.load15) / 100); + static_cast(t->variant.host_metrics.load15) / 100, t->variant.host_metrics.user_string); #endif } return false; // Let others look at this message also if they want @@ -107,18 +107,25 @@ meshtastic_Telemetry HostMetricsModule::getHostMetrics() proc_loadavg.close(); } } + if (settingsStrings[hostMetrics_user_command] != "") { + std::string userCommandResult = exec(settingsStrings[hostMetrics_user_command].c_str()); + if (userCommandResult.length() > 1) { + strncpy(t.variant.host_metrics.user_string, userCommandResult.c_str(), 200); + t.variant.host_metrics.has_user_string = true; + } + } return t; } bool HostMetricsModule::sendMetrics() { meshtastic_Telemetry telemetry = getHostMetrics(); - LOG_INFO("Send: uptime=%u, diskfree=%lu, memory free=%lu, load=%04.2f, %04.2f, %04.2f", + LOG_INFO("Send: uptime=%u, diskfree=%lu, memory free=%lu, load=%04.2f, %04.2f, %04.2f %s", telemetry.variant.host_metrics.uptime_seconds, telemetry.variant.host_metrics.diskfree1_bytes, telemetry.variant.host_metrics.freemem_bytes, static_cast(telemetry.variant.host_metrics.load1) / 100, static_cast(telemetry.variant.host_metrics.load5) / 100, - static_cast(telemetry.variant.host_metrics.load15) / 100); + static_cast(telemetry.variant.host_metrics.load15) / 100, telemetry.variant.host_metrics.user_string); meshtastic_MeshPacket *p = allocDataProtobuf(telemetry); p->to = NODENUM_BROADCAST; diff --git a/src/platform/portduino/PortduinoGlue.cpp b/src/platform/portduino/PortduinoGlue.cpp index c6aa30629..cd528549e 100644 --- a/src/platform/portduino/PortduinoGlue.cpp +++ b/src/platform/portduino/PortduinoGlue.cpp @@ -603,6 +603,8 @@ bool loadConfig(const char *configPath) if (yamlConfig["HostMetrics"]) { settingsMap[hostMetrics_channel] = (yamlConfig["HostMetrics"]["Channel"]).as(0); settingsMap[hostMetrics_interval] = (yamlConfig["HostMetrics"]["ReportInterval"]).as(0); + settingsStrings[hostMetrics_user_command] = (yamlConfig["HostMetrics"]["UserStringCommand"]).as(""); + } if (yamlConfig["General"]) { diff --git a/src/platform/portduino/PortduinoGlue.h b/src/platform/portduino/PortduinoGlue.h index 0cf0201aa..d324aaf47 100644 --- a/src/platform/portduino/PortduinoGlue.h +++ b/src/platform/portduino/PortduinoGlue.h @@ -102,7 +102,8 @@ enum configNames { available_directory, mac_address, hostMetrics_interval, - hostMetrics_channel + hostMetrics_channel, + hostMetrics_user_command }; enum { no_screen, x11, fb, st7789, st7735, st7735s, st7796, ili9341, ili9342, ili9486, ili9488, hx8357d }; enum { no_touchscreen, xpt2046, stmpe610, gt911, ft5x06 };