Skip to content

fix: end the heated seat and steering wheel commands with PARAMS_MAX - #57

Merged
nanomad merged 1 commit into
developfrom
fix/send-params-max-on-seat-and-wheel
Oct 25, 2026
Merged

nanomad merged 1 commit into
developfrom
fix/send-params-max-on-seat-and-wheel

Conversation

@nanomad

@nanomad nanomad commented Oct 25, 2026

Copy link
Copy Markdown
Contributor

Ends the heated seat and heated steering wheel commands with PARAMS_MAX (param 255), like the other control commands.

Changes

  • control_heated_steering_wheel: sends {24: 1 or 0, 255: 0} (was {24}).
  • control_heated_seat: sends {seat, 255: 0} (was {seat}).
  • 255 is encoded as 4 zero bytes, the same as control_heated_seats, climate and rear window heat.
  • Tests and docstrings updated. control_door_windows is unchanged.

Why

The iSmart app appends 255 to these commands. The first versions (#49, #50) left it out, matching a capture from one car and app build.

Draft: needs a test on a real car

  • The old form (no 255) is the one proven on an MG S6 EV. This form is not tested on any car yet.
  • The app's own value for 255 sometimes depends on a build flag (for example 1 when turning a front seat off). This PR always sends 0, the value on the app's normal path. If a car or build wants 1, it's a small follow-up.
  • Please test heated seats and the steering wheel on a real car, on and off, before merging. @townsmcp, could you try this on your MG S6 EV?

https://claude.ai/code/session_013xKSpu8ev4cxQNsitcCidm

The iSmart app appends parameter 255 to these commands. Send it with the value 0, encoded like the other control commands, so they follow the app and the rest of the client. Door windows are unchanged: the app sends no 255 there.
@nanomad
nanomad marked this pull request as ready for review October 25, 2026 15:05
@nanomad
nanomad merged commit 43ac59b into develop Oct 25, 2026
5 checks passed
@townsmcp

Copy link
Copy Markdown

@nanomad, I tested #57 on my MG S6 EV (UK, iOS app). Both commands work with the 255 marker:

  • Heated seat, front right (driver), request type 5, params [(18, 01), (255, 00000000)]: accepted. frontRightSeatHeatLevel went to 1, and level 0 turned it off again.
  • Steering wheel, request type 8, params [(24, 01), (255, 00000000)]: accepted, and the wheel heated up.

They also work without it, which is how the iOS app sends them in my capture, and how mg-saic-ha has sent them since September. So the car accepts either, and you're right that it's harmless.

One thing worth knowing for the status: with the wheel on, the car reports steeringHeatLevel = 3, even though "on" is sent as 1. Anything reading it should treat any value above 0 as on.

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.

2 participants