Skip to content

feat: heated steering wheel control (#33) - #49

Merged
nanomad merged 2 commits into
SAIC-iSmart-API:developfrom
townsmcp:feat/heated-steering-wheel
Oct 25, 2026
Merged

nanomad merged 2 commits into
SAIC-iSmart-API:developfrom
townsmcp:feat/heated-steering-wheel

Conversation

@townsmcp

@townsmcp townsmcp commented Oct 25, 2026 •

Copy link
Copy Markdown

Closes #33. Part of #26.

Adds control_heated_steering_wheel(vin, *, enable: bool) to the climate API.

What it sends

Taken from decrypted iSmart app traffic on an MG S6 EV, UK account (EU servers):

  • rvcReqType 8 (new RvcReqType.HEATED_STEERING_WHEEL)
  • a single parameter, 24 (new RvcParamsId.HEATED_STEERING_WHEEL): 1 on, 0 off
  • no end-of-parameters (PARAMS_MAX) marker, matching the app

The car turns the heater off by itself after about 10 minutes. Its state is reported back in the existing BasicVehicleStatus.steeringHeatLevel.

We've been using this command in mg-saic-ha on an MG S6 EV since September.

Changes

  • api/vehicle/schema.py: RvcReqType.HEATED_STEERING_WHEEL = "8", RvcParamsId.HEATED_STEERING_WHEEL = 24
  • api/vehicle/climate/__init__.py: control_heated_steering_wheel()
  • tests/test_heated_steering_wheel.py: checks the request body byte for byte, on and off
  • README.md: "heated steering wheel" added to the feature list

Built on current master, with only the steering wheel change from our fork: no CI, publishing, metadata or close() changes. ruff (check and format), mypy, pylint and pytest all pass locally on Python 3.13.

I've kept this to #33 only so it's small to review. The others will follow as separate PRs: the front-seat left/right naming fix, rear heated seats (#34), window ventilation (#36), the error codes, and ventilated front seats (#35).

control_heated_steering_wheel(vin, enable=...) sends what the iSmart app
sends on an MG S6 EV (decrypted app traffic): request type 8 with a single
parameter, 24 = 1 (on) or 0 (off), and no end-of-parameters marker. The
car turns the heater off by itself after about 10 minutes; its state is
already parsed as BasicVehicleStatus.steeringHeatLevel.
@nanomad
nanomad changed the base branch from master to develop October 25, 2026 14:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Heated steering wheel control

2 participants