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
    Contributor

    @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
    Contributor

    @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
    Contributor

    @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.

  7. nanomad commented on Nov 7, 2026

    @nanomad
    ContributorAuthor

    @townsmcp, one more request, if you have a moment. We are working on gating Home Assistant entities on the vehicle model configuration (gateway PR #499), and your S6 EV is the one car we know has a working remote steering wheel heater.

    Could you capture the response of /vehicle/modelConfiguration (or the vehicleModelConfiguration list from your vehicle list response) and share the itemCode / itemValue pairs? No VIN is needed. The codes we care about most are:

    • SWH (heated steering wheel). The iOS app only shows the control when it is exactly 1, so we expect 1 on your car.
    • HeatedSeat and HEATEDSEAT2 (front and rear heated seats)
    • SEATVENT and SEATVENT2 (ventilated seats), CTRLWIN (window control) and RWH (rear window heat)

    The full list is welcome too. It tells us whether a 0 can be trusted on real cars, so we don't hide entities that work.

  8. townsmcp commented on Nov 7, 2026

    @townsmcp
    Contributor

    @nanomad, sure. No capture needed: it was already in my debug log. Details below, but first, something from this car you'll want for the gateway.

    Ventilated front seats: fitted, but no SEATVENT and no app control

    My S6 EV has ventilated front seats, but:

    • the iSmart app doesn't show any control for them;
    • there's no SEATVENT or SEATVENT2 in the model configuration at all, not even as 0.

    So on this car, a missing SEATVENT doesn't mean the seats aren't fitted. It might mean SAIC doesn't offer remote control of them, but I haven't found a command to test that.

    Heated rear seats: confirmed working remotely

    While checking this I tested the rear seat command from #50 (control_heated_seat, rear left) on the car. It works both ways:

    Sent SAIC's answer Next status In the car
    On rear left, level 3 code 0, about 10 s secondRowLeftSeatHeatLevel = 1 seat light on, seat warmed
    Off rear left, level 0 code 0, about 7 s secondRowLeftSeatHeatLevel = 0 —

    Rear right stayed at 0 throughout. One detail: the car reports an active rear seat as 1, not the 3 we send, so a rear seat's state should be read as on/off (non-zero = on). The app shows the rear seats as on/off too, and the config has HEATEDSEAT2 = 2.

    The model configuration

    This is the vehicleModelConfiguration from the vehicle list response for my MG S6 EV (series MIS3E S, model year 2024, UK). itemValueValid matched itemValue for every item, so I've only listed the value.

    itemCode itemName itemValue
    J17 Tire 1
    Q00 Airbag 1
    Q01 FAirbag 1
    Q09 AirbagS 1
    S35 Sunroof 0
    S61 Remote control 1
    T11 AC 1
    EPS EPS 1
    SA64 SA64 0111110000000000001000000100101000000010100000000000000000000110
    BONNUT BONNUT 1
    DOOR DOOR 1111
    BOOT BOOT 1
    ENGINE ENGINE 1
    EV EV 0
    HeatedSeat HeatedSeat 1
    KEYPOS KEYPOS 1
    ENERGY ENERGY 1
    BATTERY BATTERY 1
    INTEMP INTEMP 1
    EXTEMP EXTEMP 0
    WINDOW WINDOW 1111
    LRD LRD 1
    BTKEY BTKEY 2
    BType Battery 1
    SBH SBH 1
    TR TR 1
    BHI BHI 1
    HEATEDSEAT2 HeatedSeat2 2
    SWH SWH 1
    BTKNOTIFY BTKNOTIFY 1
    SS SS 0
    SC SC 5
    ROV ROV 25859

    For the codes you asked about:

    • SWH = 1, as you expected. The remote heated steering wheel works on this car.
    • HeatedSeat = 1: front heated seats work remotely.
    • HEATEDSEAT2 = 2: rear heated seats are fitted, shown in the app as on/off, and work remotely (see above).
    • SEATVENT and SEATVENT2 aren't in the list, though the car has ventilated front seats (see above).
    • CTRLWIN and RWH aren't in the list either, but this car does have remote window control (the door-window command in feat: window ventilation - close, ventilate or fully open door windows (#36) #53 came from it), and the app offers both front and rear windscreen heating.

    Can a 0 be trusted?

    Not on this car:

    • EV is 0 on a battery-electric car, and ENGINE is 1.
    • EXTEMP is 0, but the car reports the outside temperature fine and keeps my sensor up to date.
    • CTRLWIN and RWH are missing, but both features work.
    • SEATVENT is missing, but the seats are fitted.

    So I wouldn't hide an entity on a 0 or a missing code alone. SWH looks more reliable, given that the app gates on it.

    Happy to run anything else against the car if it helps.

  9. townsmcp commented on Nov 7, 2026

    @townsmcp
    Contributor

    @nanomad, I've tested the ventilated seat command from #59 on my MG S6 EV (UK, series MIS3E S). The car has ventilated front seats, but the iSmart app doesn't show any control for them, and there's no SEATVENT in its model configuration.

    Front left, level 1, sent twice about three minutes apart, with the car online (a status came back two minutes before the first):

    Sent Result
    Request type 22, parameter 27 = 1, then 255 (as in #59) Event id issued, then code 4 ("The remote control instruction failed") on every check for 30 s
    Request type 22, parameter 27 = 1, no 255 Same: code 4 for 30 s

    For comparison, the same car confirms the heated seat command (request type 5) in about 10 seconds, and the tailgate in a few. The vehicle status also has no seat ventilation fields at all; nothing like frontLeftSeatVentLevel appears in the raw response.

    So on the S6, remote seat ventilation isn't supported, at least with this command. That also suggests a missing SEATVENT code is a fair signal for ventilated seats, unlike the other missing codes I listed above. If you have a different command to try, I'm happy to test it.

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