From da88f3a2e88cc8dd815fd4ac194054edcf2315b8 Mon Sep 17 00:00:00 2001 From: Bjoern Hempel Date: Mon, 12 Jan 2026 22:31:04 +0100 Subject: [PATCH 1/2] feat: add background stats functionality and initialize stats task --- src/SCRIPTS/RF2/background.lua | 11 +++++++ src/SCRIPTS/RF2/background_stats.lua | 48 ++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/SCRIPTS/RF2/background_stats.lua diff --git a/src/SCRIPTS/RF2/background.lua b/src/SCRIPTS/RF2/background.lua index 21eb4268..d33f8e1c 100644 --- a/src/SCRIPTS/RF2/background.lua +++ b/src/SCRIPTS/RF2/background.lua @@ -1,6 +1,7 @@ local initTask = nil local adjTellerTask = nil local customTelemetryTask = nil +local statsTask = nil local isInitialized = false local modelIsConnected = false local lastTimeRssi = nil @@ -37,6 +38,7 @@ local function run() end adjTellerTask = nil customTelemetryTask = nil + statsTask = nil modelIsConnected = false isInitialized = false collectgarbage() @@ -46,6 +48,7 @@ local function run() if not isInitialized then adjTellerTask = nil customTelemetryTask = nil + statsTask = nil collectgarbage() initTask = initTask or rf2.executeScript("background_init") local initTaskResult = initTask.run(modelIsConnected) @@ -56,6 +59,9 @@ local function run() if initTaskResult.crsfCustomTelemetryEnabled then local requestedSensorsBySid = rf2.executeScript("rf2tlm_sensors", initTaskResult.crsfCustomTelemetrySensors) customTelemetryTask = rf2.executeScript("rf2tlm", requestedSensorsBySid) + if rf2.apiVersion >= 12.09 then + statsTask = rf2.executeScript("background_stats") + end end if initTask.useAdjustmentTeller then adjTellerTask = rf2.executeScript("adj_teller") @@ -76,6 +82,11 @@ local function run() if customTelemetryTask then customTelemetryTask.run() end + if rf2.apiVersion >= 12.09 then + if statsTask then + statsTask.readStats() + end + end end local function runProtected() diff --git a/src/SCRIPTS/RF2/background_stats.lua b/src/SCRIPTS/RF2/background_stats.lua new file mode 100644 index 00000000..a0f0028d --- /dev/null +++ b/src/SCRIPTS/RF2/background_stats.lua @@ -0,0 +1,48 @@ +local mspFlightStats = rf2.useApi("mspFlightStats") +local flighStats = mspFlightStats.getDefaults() + +local doReadStats = true +local lastArmedState = false +local lastTelemetryUpdate = 0 +local lastReadAttempt = 0 + +local function checkArmedChanged() + local arm = getValue("ARM") + local currentArmedState = (arm == 1 or arm == 3) + if lastArmedState == true and currentArmedState == false then + doReadStats = true + end + lastArmedState = currentArmedState +end + +local function readStats() + checkArmedChanged() + + local now = rf2.clock() + + if (doReadStats or flighStats.stats_total_flights.value == nil) and (now - lastReadAttempt > 2) then + if rf2.mspQueue:isProcessed() then + mspFlightStats.read(nil, nil, flighStats) + lastReadAttempt = now + doReadStats = false + end + end + + if not rf2.mspQueue:isProcessed() then + rf2.mspQueue:processQueue() + end + + if flighStats.statsEnabled.value and flighStats.statsEnabled.value == 1 then + if now - lastTelemetryUpdate >= 1 then + lastTelemetryUpdate = now + if flighStats.stats_total_flights.value then + setTelemetryValue(0x2001, 0, 0, flighStats.stats_total_flights.value, UNIT_RAW, 0, "STFl") + setTelemetryValue(0x2002, 0, 0, flighStats.stats_total_time_s.value, UNIT_RAW, 0, "STTs") + setTelemetryValue(0x2003, 0, 0, flighStats.stats_total_dist_m.value, UNIT_RAW, 0, "STTm") + end + end + end + +end + +return { readStats = readStats } \ No newline at end of file From ce8e8090d9d66cab07d1dd3e0fa90fb536bb8451 Mon Sep 17 00:00:00 2001 From: Bjoern Hempel Date: Tue, 13 Jan 2026 19:14:06 +0100 Subject: [PATCH 2/2] fix: update stats task initialization and telemetry value identifiers --- src/SCRIPTS/RF2/background.lua | 6 +++--- src/SCRIPTS/RF2/background_stats.lua | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/SCRIPTS/RF2/background.lua b/src/SCRIPTS/RF2/background.lua index d33f8e1c..f83ba852 100644 --- a/src/SCRIPTS/RF2/background.lua +++ b/src/SCRIPTS/RF2/background.lua @@ -59,9 +59,6 @@ local function run() if initTaskResult.crsfCustomTelemetryEnabled then local requestedSensorsBySid = rf2.executeScript("rf2tlm_sensors", initTaskResult.crsfCustomTelemetrySensors) customTelemetryTask = rf2.executeScript("rf2tlm", requestedSensorsBySid) - if rf2.apiVersion >= 12.09 then - statsTask = rf2.executeScript("background_stats") - end end if initTask.useAdjustmentTeller then adjTellerTask = rf2.executeScript("adj_teller") @@ -83,6 +80,9 @@ local function run() customTelemetryTask.run() end if rf2.apiVersion >= 12.09 then + if not statsTask and customTelemetryTask and hasSensor("ARM") then + statsTask = rf2.executeScript("background_stats") + end if statsTask then statsTask.readStats() end diff --git a/src/SCRIPTS/RF2/background_stats.lua b/src/SCRIPTS/RF2/background_stats.lua index a0f0028d..f085fc76 100644 --- a/src/SCRIPTS/RF2/background_stats.lua +++ b/src/SCRIPTS/RF2/background_stats.lua @@ -36,9 +36,9 @@ local function readStats() if now - lastTelemetryUpdate >= 1 then lastTelemetryUpdate = now if flighStats.stats_total_flights.value then - setTelemetryValue(0x2001, 0, 0, flighStats.stats_total_flights.value, UNIT_RAW, 0, "STFl") - setTelemetryValue(0x2002, 0, 0, flighStats.stats_total_time_s.value, UNIT_RAW, 0, "STTs") - setTelemetryValue(0x2003, 0, 0, flighStats.stats_total_dist_m.value, UNIT_RAW, 0, "STTm") + setTelemetryValue(0x2001, 0, 0, flighStats.stats_total_flights.value, UNIT_RAW, 0, "FlyC") + setTelemetryValue(0x2002, 0, 0, flighStats.stats_total_time_s.value, UNIT_RAW, 0, "FlyT") + setTelemetryValue(0x2003, 0, 0, flighStats.stats_total_dist_m.value, UNIT_RAW, 0, "FlyD") end end end