Save onroad/offroad uptime to param (#35769)

* default

* 60

* safer

* consist

* f
locationd-standstill
Maxime Desroches 1 week ago committed by GitHub
parent ad337f8830
commit 8ca0b82181
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      common/params_keys.h
  2. 20
      system/hardware/hardwared.py
  3. 2
      system/manager/manager.py

@ -120,5 +120,7 @@ inline static std::unordered_map<std::string, uint32_t> keys = {
{"UpdaterState", CLEAR_ON_MANAGER_START}, {"UpdaterState", CLEAR_ON_MANAGER_START},
{"UpdaterTargetBranch", CLEAR_ON_MANAGER_START}, {"UpdaterTargetBranch", CLEAR_ON_MANAGER_START},
{"UpdaterLastFetchTime", PERSISTENT}, {"UpdaterLastFetchTime", PERSISTENT},
{"UptimeOffroad", PERSISTENT},
{"UptimeOnroad", PERSISTENT},
{"Version", PERSISTENT}, {"Version", PERSISTENT},
}; };

@ -56,6 +56,11 @@ OFFROAD_DANGER_TEMP = 75
prev_offroad_states: dict[str, tuple[bool, str | None]] = {} prev_offroad_states: dict[str, tuple[bool, str | None]] = {}
def read_uptime_from_param(params, param: str) -> float:
try:
return float(params.get(param))
except (TypeError, ValueError):
return 0.0
def set_offroad_alert_if_changed(offroad_alert: str, show_alert: bool, extra_text: str | None=None): def set_offroad_alert_if_changed(offroad_alert: str, show_alert: bool, extra_text: str | None=None):
if prev_offroad_states.get(offroad_alert, None) == (show_alert, extra_text): if prev_offroad_states.get(offroad_alert, None) == (show_alert, extra_text):
@ -201,6 +206,10 @@ def hardware_thread(end_event, hw_queue) -> None:
params = Params() params = Params()
power_monitor = PowerMonitoring() power_monitor = PowerMonitoring()
uptime_offroad: float = read_uptime_from_param(params, "UptimeOffroad")
uptime_onroad: float = read_uptime_from_param(params, "UptimeOnroad")
last_uptime_ts: float = time.monotonic()
HARDWARE.initialize_hardware() HARDWARE.initialize_hardware()
thermal_config = HARDWARE.get_thermal_config() thermal_config = HARDWARE.get_thermal_config()
@ -444,6 +453,17 @@ def hardware_thread(end_event, hw_queue) -> None:
params.put_bool_nonblocking("NetworkMetered", msg.deviceState.networkMetered) params.put_bool_nonblocking("NetworkMetered", msg.deviceState.networkMetered)
now_ts = time.monotonic()
if off_ts:
uptime_offroad += now_ts - max(last_uptime_ts, off_ts)
elif started_ts:
uptime_onroad += now_ts - max(last_uptime_ts, started_ts)
last_uptime_ts = now_ts
if (count % int(60. / DT_HW)) == 0:
params.put("UptimeOffroad", str(uptime_offroad))
params.put("UptimeOnroad", str(uptime_onroad))
count += 1 count += 1
should_start_prev = should_start should_start_prev = should_start

@ -40,6 +40,8 @@ def manager_init() -> None:
("HasAcceptedTerms", "0"), ("HasAcceptedTerms", "0"),
("LanguageSetting", "main_en"), ("LanguageSetting", "main_en"),
("OpenpilotEnabledToggle", "1"), ("OpenpilotEnabledToggle", "1"),
("UptimeOffroad", "0.0"),
("UptimeOnroad", "0.0"),
("LongitudinalPersonality", str(log.LongitudinalPersonality.standard)), ("LongitudinalPersonality", str(log.LongitudinalPersonality.standard)),
] ]

Loading…
Cancel
Save