Add 3 second, 10 second moving averages for power balance data source (#61)

This commit is contained in:
timklge 2025-08-16 19:59:12 +02:00 committed by GitHub
parent 4c5b6aac15
commit 0ad7cf2451
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 17 additions and 3 deletions

View File

@ -188,7 +188,9 @@ class Window(
SelectedSource.ROUTE_PROGRESS -> streamRouteProgress(SelectedSource.ROUTE_PROGRESS, ::getRouteProgress) SelectedSource.ROUTE_PROGRESS -> streamRouteProgress(SelectedSource.ROUTE_PROGRESS, ::getRouteProgress)
SelectedSource.REMAINING_ROUTE -> streamRouteProgress(SelectedSource.REMAINING_ROUTE, ::getRemainingRouteProgress) SelectedSource.REMAINING_ROUTE -> streamRouteProgress(SelectedSource.REMAINING_ROUTE, ::getRemainingRouteProgress)
SelectedSource.GRADE -> streamGrade() SelectedSource.GRADE -> streamGrade()
SelectedSource.POWER_BALANCE -> streamBalance() SelectedSource.POWER_BALANCE -> streamBalance(PedalBalanceSmoothing.RAW)
SelectedSource.POWER_BALANCE_3S -> streamBalance(PedalBalanceSmoothing.SMOOTHED_3S)
SelectedSource.POWER_BALANCE_10S -> streamBalance(PedalBalanceSmoothing.SMOOTHED_10S)
SelectedSource.FRONT_GEAR -> streamGears(Gears.FRONT) SelectedSource.FRONT_GEAR -> streamGears(Gears.FRONT)
SelectedSource.REAR_GEAR -> streamGears(Gears.REAR) SelectedSource.REAR_GEAR -> streamGears(Gears.REAR)
SelectedSource.NONE -> {} SelectedSource.NONE -> {}
@ -207,10 +209,10 @@ class Window(
} }
} }
private suspend fun streamBalance() { private suspend fun streamBalance(smoothing: PedalBalanceSmoothing) {
data class StreamData(val powerBalanceLeft: Double?, val power: Double?) data class StreamData(val powerBalanceLeft: Double?, val power: Double?)
karooSystem.streamDataFlow(DataType.Type.PEDAL_POWER_BALANCE) karooSystem.streamDataFlow(smoothing.dataTypeId)
.map { .map {
val values = (it as? StreamState.Streaming)?.dataPoint?.values val values = (it as? StreamState.Streaming)?.dataPoint?.values
@ -605,6 +607,12 @@ class Window(
SMOOTHED_10S(DataType.Type.SMOOTHED_10S_AVERAGE_POWER), SMOOTHED_10S(DataType.Type.SMOOTHED_10S_AVERAGE_POWER),
} }
enum class PedalBalanceSmoothing(val dataTypeId: String){
RAW(DataType.Type.PEDAL_POWER_BALANCE),
SMOOTHED_3S(DataType.Type.SMOOTHED_3S_AVERAGE_PEDAL_POWER_BALANCE),
SMOOTHED_10S(DataType.Type.SMOOTHED_10S_AVERAGE_PEDAL_POWER_BALANCE),
}
private suspend fun streamPower(source: SelectedSource, smoothed: PowerStreamSmoothing) { private suspend fun streamPower(source: SelectedSource, smoothed: PowerStreamSmoothing) {
val powerFlow = karooSystem.streamDataFlow(smoothed.dataTypeId) val powerFlow = karooSystem.streamDataFlow(smoothed.dataTypeId)
.map { (it as? StreamState.Streaming)?.dataPoint?.singleValue } .map { (it as? StreamState.Streaming)?.dataPoint?.singleValue }

View File

@ -90,6 +90,8 @@ enum class SelectedSource(val id: String, val labelResId: Int) {
CADENCE_3S("cadence_3s", R.string.source_cadence_3s), CADENCE_3S("cadence_3s", R.string.source_cadence_3s),
GRADE("grade", R.string.source_grade), GRADE("grade", R.string.source_grade),
POWER_BALANCE("power_balance", R.string.source_power_balance), POWER_BALANCE("power_balance", R.string.source_power_balance),
POWER_BALANCE_3S("power_balance_3s", R.string.source_power_balance_3s),
POWER_BALANCE_10S("power_balance_10s", R.string.source_power_balance_10s),
ROUTE_PROGRESS("route_progress", R.string.source_route_progress), ROUTE_PROGRESS("route_progress", R.string.source_route_progress),
REMAINING_ROUTE("route_progress_remaining", R.string.source_route_remaining), REMAINING_ROUTE("route_progress_remaining", R.string.source_route_remaining),
FRONT_GEAR("front_gear", R.string.source_front_gear), FRONT_GEAR("front_gear", R.string.source_front_gear),

View File

@ -47,6 +47,8 @@
<string name="source_cadence_3s">Trittfrequenz (3 Sek. Ø)</string> <string name="source_cadence_3s">Trittfrequenz (3 Sek. Ø)</string>
<string name="source_grade">Steigung</string> <string name="source_grade">Steigung</string>
<string name="source_power_balance">Leistungsbalance</string> <string name="source_power_balance">Leistungsbalance</string>
<string name="source_power_balance_3s">Leistungsbalance (3 Sek. Ø)</string>
<string name="source_power_balance_10s">Leistungsbalance (10 Sek. Ø)</string>
<string name="source_route_progress">Routenfortschritt</string> <string name="source_route_progress">Routenfortschritt</string>
<string name="source_route_remaining">Verbleibende Route</string> <string name="source_route_remaining">Verbleibende Route</string>
<string name="source_front_gear">Vorderer Gang</string> <string name="source_front_gear">Vorderer Gang</string>

View File

@ -47,6 +47,8 @@
<string name="source_cadence_3s">Cadence (3 sec avg)</string> <string name="source_cadence_3s">Cadence (3 sec avg)</string>
<string name="source_grade">Grade</string> <string name="source_grade">Grade</string>
<string name="source_power_balance">Power Balance</string> <string name="source_power_balance">Power Balance</string>
<string name="source_power_balance_3s">Power Balance (3 sec avg)</string>
<string name="source_power_balance_10s">Power Balance (10 sec avg)</string>
<string name="source_route_progress">Route Progress</string> <string name="source_route_progress">Route Progress</string>
<string name="source_route_remaining">Route Remaining</string> <string name="source_route_remaining">Route Remaining</string>
<string name="source_front_gear">Front Gear</string> <string name="source_front_gear">Front Gear</string>