      # save rhd virtual toggle every 5 mins
      if (sm['driverStateV2'].frameId % 6000 == 0 and
       driver_status.wheelpos_learner.filtered_stat.n > driver_status.settings._WHEELPOS_FILTER_MIN_COUNT and
       driver_status.wheel_on_right == (driver_status.wheelpos_learner.filtered_stat.M > driver_status.settings._WHEELPOS_THRESHOLD)):
        params.put_bool_nonblocking("IsRhdDetected", driver_status.wheel_on_right)
  
  def main(sm=None, pm=None):
    dmonitoringd_thread(sm, pm)
  
  
 
</s> remove         self.params.put_nonblocking("CarBatteryCapacity", str(int(self.car_battery_capacity_uWh)))
 </s> add         put_nonblocking("CarBatteryCapacity", str(int(self.car_battery_capacity_uWh))) </s> remove         params_reader.put_nonblocking("LiveParameters", json.dumps(params))
 </s> add         put_nonblocking("LiveParameters", json.dumps(params)) </s> remove   params = Params()

 </s> add  </s> remove     Use the put_nonblocking, put_bool_nonblocking in time sensitive code, but
 </s> add     Use the put_nonblocking helper function in time sensitive code, but
      put_bool_nonblocking("IsRhdDetected", driver_status.wheel_on_right)
      # save rhd virtual toggle every 5 mins
      if (sm['driverStateV2'].frameId % 6000 == 0 and
       driver_status.wheelpos_learner.filtered_stat.n > driver_status.settings._WHEELPOS_FILTER_MIN_COUNT and
       driver_status.wheel_on_right == (driver_status.wheelpos_learner.filtered_stat.M > driver_status.settings._WHEELPOS_THRESHOLD)):
      put_bool_nonblocking("IsRhdDetected", driver_status.wheel_on_right)
  
  def main(sm=None, pm=None):
    dmonitoringd_thread(sm, pm)
  
  
keep keep keep keep replace keep keep keep keep keep
 Revert "params: safe and efficient async writing parameters (#25912)"

This reverts commit 0d797f4e8b2552192669d0329c14849f0a970066. 
selfdrive/monitoring/dmonitoringd.py