mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-13 08:32:08 +00:00
Device telemetry uptime in seconds (#3614)
This commit is contained in:
parent
5047468d9f
commit
4f205718f0
@ -15,14 +15,14 @@
|
|||||||
|
|
||||||
int32_t DeviceTelemetryModule::runOnce()
|
int32_t DeviceTelemetryModule::runOnce()
|
||||||
{
|
{
|
||||||
uint32_t now = millis();
|
refreshUptime();
|
||||||
if (((lastSentToMesh == 0) ||
|
if (((lastSentToMesh == 0) ||
|
||||||
((now - lastSentToMesh) >= Default::getConfiguredOrDefaultMs(moduleConfig.telemetry.device_update_interval))) &&
|
((uptimeLastMs - lastSentToMesh) >= Default::getConfiguredOrDefaultMs(moduleConfig.telemetry.device_update_interval))) &&
|
||||||
airTime->isTxAllowedChannelUtil(config.device.role != meshtastic_Config_DeviceConfig_Role_SENSOR) &&
|
airTime->isTxAllowedChannelUtil(config.device.role != meshtastic_Config_DeviceConfig_Role_SENSOR) &&
|
||||||
airTime->isTxAllowedAirUtil() && config.device.role != meshtastic_Config_DeviceConfig_Role_REPEATER &&
|
airTime->isTxAllowedAirUtil() && config.device.role != meshtastic_Config_DeviceConfig_Role_REPEATER &&
|
||||||
config.device.role != meshtastic_Config_DeviceConfig_Role_CLIENT_HIDDEN) {
|
config.device.role != meshtastic_Config_DeviceConfig_Role_CLIENT_HIDDEN) {
|
||||||
sendTelemetry();
|
sendTelemetry();
|
||||||
lastSentToMesh = now;
|
lastSentToMesh = uptimeLastMs;
|
||||||
} else if (service.isToPhoneQueueEmpty()) {
|
} else if (service.isToPhoneQueueEmpty()) {
|
||||||
// Just send to phone when it's not our time to send to mesh yet
|
// Just send to phone when it's not our time to send to mesh yet
|
||||||
// Only send while queue is empty (phone assumed connected)
|
// Only send while queue is empty (phone assumed connected)
|
||||||
@ -68,16 +68,12 @@ meshtastic_Telemetry DeviceTelemetryModule::getDeviceTelemetry()
|
|||||||
|
|
||||||
t.time = getTime();
|
t.time = getTime();
|
||||||
t.which_variant = meshtastic_Telemetry_device_metrics_tag;
|
t.which_variant = meshtastic_Telemetry_device_metrics_tag;
|
||||||
|
|
||||||
t.variant.device_metrics.air_util_tx = airTime->utilizationTXPercent();
|
t.variant.device_metrics.air_util_tx = airTime->utilizationTXPercent();
|
||||||
if (powerStatus->getIsCharging()) {
|
t.variant.device_metrics.battery_level =
|
||||||
t.variant.device_metrics.battery_level = MAGIC_USB_BATTERY_LEVEL;
|
powerStatus->getIsCharging() ? MAGIC_USB_BATTERY_LEVEL : powerStatus->getBatteryChargePercent();
|
||||||
} else {
|
|
||||||
t.variant.device_metrics.battery_level = powerStatus->getBatteryChargePercent();
|
|
||||||
}
|
|
||||||
|
|
||||||
t.variant.device_metrics.channel_utilization = airTime->channelUtilizationPercent();
|
t.variant.device_metrics.channel_utilization = airTime->channelUtilizationPercent();
|
||||||
t.variant.device_metrics.voltage = powerStatus->getBatteryVoltageMv() / 1000.0;
|
t.variant.device_metrics.voltage = powerStatus->getBatteryVoltageMv() / 1000.0;
|
||||||
|
t.variant.device_metrics.uptime_seconds = getUptimeSeconds();
|
||||||
|
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@ -85,9 +81,10 @@ meshtastic_Telemetry DeviceTelemetryModule::getDeviceTelemetry()
|
|||||||
bool DeviceTelemetryModule::sendTelemetry(NodeNum dest, bool phoneOnly)
|
bool DeviceTelemetryModule::sendTelemetry(NodeNum dest, bool phoneOnly)
|
||||||
{
|
{
|
||||||
meshtastic_Telemetry telemetry = getDeviceTelemetry();
|
meshtastic_Telemetry telemetry = getDeviceTelemetry();
|
||||||
LOG_INFO("(Sending): air_util_tx=%f, channel_utilization=%f, battery_level=%i, voltage=%f\n",
|
LOG_INFO("(Sending): air_util_tx=%f, channel_utilization=%f, battery_level=%i, voltage=%f, uptime=%i\n",
|
||||||
telemetry.variant.device_metrics.air_util_tx, telemetry.variant.device_metrics.channel_utilization,
|
telemetry.variant.device_metrics.air_util_tx, telemetry.variant.device_metrics.channel_utilization,
|
||||||
telemetry.variant.device_metrics.battery_level, telemetry.variant.device_metrics.voltage);
|
telemetry.variant.device_metrics.battery_level, telemetry.variant.device_metrics.voltage,
|
||||||
|
telemetry.variant.device_metrics.uptime_seconds);
|
||||||
|
|
||||||
meshtastic_MeshPacket *p = allocDataProtobuf(telemetry);
|
meshtastic_MeshPacket *p = allocDataProtobuf(telemetry);
|
||||||
p->to = dest;
|
p->to = dest;
|
||||||
|
@ -12,6 +12,8 @@ class DeviceTelemetryModule : private concurrency::OSThread, public ProtobufModu
|
|||||||
: concurrency::OSThread("DeviceTelemetryModule"),
|
: concurrency::OSThread("DeviceTelemetryModule"),
|
||||||
ProtobufModule("DeviceTelemetry", meshtastic_PortNum_TELEMETRY_APP, &meshtastic_Telemetry_msg)
|
ProtobufModule("DeviceTelemetry", meshtastic_PortNum_TELEMETRY_APP, &meshtastic_Telemetry_msg)
|
||||||
{
|
{
|
||||||
|
uptimeWrapCount = 0;
|
||||||
|
uptimeLastMs = millis();
|
||||||
setIntervalFromNow(45 * 1000); // Wait until NodeInfo is sent
|
setIntervalFromNow(45 * 1000); // Wait until NodeInfo is sent
|
||||||
}
|
}
|
||||||
virtual bool wantUIFrame() { return false; }
|
virtual bool wantUIFrame() { return false; }
|
||||||
@ -28,8 +30,27 @@ class DeviceTelemetryModule : private concurrency::OSThread, public ProtobufModu
|
|||||||
*/
|
*/
|
||||||
bool sendTelemetry(NodeNum dest = NODENUM_BROADCAST, bool phoneOnly = false);
|
bool sendTelemetry(NodeNum dest = NODENUM_BROADCAST, bool phoneOnly = false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the uptime in seconds
|
||||||
|
* Loses some accuracy after 49 days, but that's fine
|
||||||
|
*/
|
||||||
|
uint32_t getUptimeSeconds() { return (0xFFFFFFFF / 1000) * uptimeWrapCount + (uptimeLastMs / 1000); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
meshtastic_Telemetry getDeviceTelemetry();
|
meshtastic_Telemetry getDeviceTelemetry();
|
||||||
uint32_t sendToPhoneIntervalMs = SECONDS_IN_MINUTE * 1000; // Send to phone every minute
|
uint32_t sendToPhoneIntervalMs = SECONDS_IN_MINUTE * 1000; // Send to phone every minute
|
||||||
uint32_t lastSentToMesh = 0;
|
uint32_t lastSentToMesh = 0;
|
||||||
|
|
||||||
|
void refreshUptime()
|
||||||
|
{
|
||||||
|
auto now = millis();
|
||||||
|
// If we wrapped around (~49 days), increment the wrap count
|
||||||
|
if (now < uptimeLastMs)
|
||||||
|
uptimeWrapCount++;
|
||||||
|
|
||||||
|
uptimeLastMs = now;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t uptimeWrapCount;
|
||||||
|
uint32_t uptimeLastMs;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user