Skip to content

Ventilated front seats control #35

Open

Description

@nanomad

Add control for ventilated front seats. Nothing exists yet. The reporter says the feature may not appear in the iSmart app, so we first need to confirm it exists in the API.

Part of #26. Needs a live capture of the iSmart app traffic from an MG S6 (to be done separately).

Activity

  1. nanomad commented on Oct 25, 2026

    @nanomad
    ContributorAuthor

    @townsmcp, I opened a draft PR for this one so we don't both build it: #59.

    It sets one seat per command (front or rear, params 27 to 30, request type 22) and adds the seat ventilation levels to the vehicle status. I wrote it from the app's logic, not from a capture, and I haven't tested it on a car.

    Since you said you captured the controls on your S6, could you do one of these?

    1. Share your capture (or just the request bodies, with the VIN removed), so I can compare it with the draft.
    2. Or try feat: ventilated seat control and status (#35) #59 on your car and tell me what the seats do.

    What a capture would settle:

    • Which values the car accepts, and whether levels 1 and 2 differ.
    • Whether the request ends with parameter 255.
    • Whether the app sends one seat or both at once.
    • Which app version and platform (iOS or Android) you captured from.

    If you already have a PR for this in progress, tell me. We can close #59 and use yours.

  2. townsmcp commented on Oct 25, 2026

    @townsmcp

    @nanomad, a correction on my part and sorry for the confusion: I was wrong about ventilated front seats via iSmart. My car has it when in the car however iSmart doesn’t let me remotely command that. I remember seeing an iSmart image from either an IM5 or IM6 which does allow control via iSmart but the user didn’t have mitmproxy for me to share the script with so I have got a capture yet.
    If I come across an owner that can do the captures I can add an update here.
    In the mean time I can try your option 2 and let you know how that goes.

    Sorry again for the confusion - I rarely use iSmart these days, especially as today has proven yet again how useless it is - I usually get iSmart notifications that tyre pressure is low on one of the wheels when it isn’t. However today I didn’t get a notification (and a car scan showed fine) when it was wrong and should have notified me. In HA I have an automation that notifies me on low pressure (less than 35 psi) and HA pinged me today - I had a look at the tyres and I have a screw in the rear left

  3. townsmcp commented on Oct 26, 2026

    @townsmcp

    @nanomad, I tried #59 on my MG S6 EV (UK, right-hand drive, Trophy, which has ventilated front seats in the car but not in the iSmart app):

    Status: none of the new fields come back. frontLeftSeatVentLevel, frontRightSeatVentLevel, secondRowLeftSeatVentLevel and secondRowRightSeatVentLevel are all absent (None), while frontLeftSeatHeatLevel / frontRightSeatHeatLevel come back as 0 as usual.

    Control: with the car awake (a status read had just succeeded, so it wasn't asleep), every attempt came back as return code 4, "The remote control instruction failed, please try again later.":

    • FRONT_RIGHT level 1, with 255
    • FRONT_RIGHT level 2, with 255
    • FRONT_RIGHT level 1, without 255

    Remote heated seats and the heated steering wheel work on the same car. So I think the S6 simply doesn't accept request type 22 remotely, which fits the app not offering it. It doesn't tell us whether type 22 and params 27–30 are right for cars whose app does show it (IM5 / IM6). I'd keep #59 as a draft until someone with one of those can capture or test it. I'll pass it on if one of our users can help.

    One question on #57, while we're on the 255 marker: my S6 captures show the app sending the per-seat heated seat command and the steering wheel command without 255. That's what I based #50 and #49 on, and how they've worked on the car since September. Was adding it in #57 from the app's code for those specific commands? It may well be harmless, but it hasn't been tried on a car as far as I know, so it might be worth testing before it goes into a release.

  4. nanomad commented on Oct 26, 2026

    @nanomad
    ContributorAuthor

    @townsmcp the "255" is a marker sent by the app, I've added to avoid sending un-initialized data, it shows as 0 anyway so it should be harmless.

    For ventilated seats, they are feature-gated in the app so they won't show up on the MG S6, but sometimes the tbox still accepts them :) Too bad it did not

  5. nanomad commented on Oct 26, 2026

    @nanomad
    ContributorAuthor

    Btw, for #57, feel free to test them if you can. I'd rather replicate the official iOS app behaviour

  6. townsmcp commented on Oct 26, 2026

    @townsmcp

    @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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions