You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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).
@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?
Share your capture (or just the request bodies, with the VIN removed), so I can compare it with the draft.
@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
@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.
@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
@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.
@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.
@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.
@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.
Activity
nanomad commentedon Oct 25, 2026
@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?
What a capture would settle:
If you already have a PR for this in progress, tell me. We can close #59 and use yours.
townsmcp commentedon Oct 25, 2026
@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
townsmcp commentedon Oct 26, 2026
@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,secondRowLeftSeatVentLevelandsecondRowRightSeatVentLevelare all absent (None), whilefrontLeftSeatHeatLevel/frontRightSeatHeatLevelcome back as0as 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_RIGHTlevel 1, with 255FRONT_RIGHTlevel 2, with 255FRONT_RIGHTlevel 1, without 255Remote 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.
nanomad commentedon Oct 26, 2026
@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
nanomad commentedon Oct 26, 2026
Btw, for #57, feel free to test them if you can. I'd rather replicate the official iOS app behaviour
townsmcp commentedon Oct 26, 2026
@nanomad, I tested #57 on my MG S6 EV (UK, iOS app). Both commands work with the 255 marker:
[(18, 01), (255, 00000000)]: accepted.frontRightSeatHeatLevelwent to1, and level0turned it off again.[(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 as1. Anything reading it should treat any value above 0 as on.nanomad commentedon Nov 7, 2026
@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 thevehicleModelConfigurationlist from your vehicle list response) and share theitemCode/itemValuepairs? 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 exactly1, so we expect1on your car.HeatedSeatandHEATEDSEAT2(front and rear heated seats)SEATVENTandSEATVENT2(ventilated seats),CTRLWIN(window control) andRWH(rear window heat)The full list is welcome too. It tells us whether a
0can be trusted on real cars, so we don't hide entities that work.townsmcp commentedon Nov 7, 2026
@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
SEATVENTand no app controlMy S6 EV has ventilated front seats, but:
SEATVENTorSEATVENT2in the model configuration at all, not even as0.So on this car, a missing
SEATVENTdoesn'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:secondRowLeftSeatHeatLevel= 1secondRowLeftSeatHeatLevel= 0Rear right stayed at 0 throughout. One detail: the car reports an active rear seat as
1, not the3we 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 hasHEATEDSEAT2=2.The model configuration
This is the
vehicleModelConfigurationfrom the vehicle list response for my MG S6 EV (seriesMIS3E S, model year 2024, UK).itemValueValidmatcheditemValuefor every item, so I've only listed the value.0111110000000000001000000100101000000010100000000000000000000110For 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).SEATVENTandSEATVENT2aren't in the list, though the car has ventilated front seats (see above).CTRLWINandRWHaren'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
0be trusted?Not on this car:
EVis0on a battery-electric car, andENGINEis1.EXTEMPis0, but the car reports the outside temperature fine and keeps my sensor up to date.CTRLWINandRWHare missing, but both features work.SEATVENTis missing, but the seats are fitted.So I wouldn't hide an entity on a
0or a missing code alone.SWHlooks more reliable, given that the app gates on it.Happy to run anything else against the car if it helps.
townsmcp commentedon Nov 7, 2026
@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 noSEATVENTin 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):
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
frontLeftSeatVentLevelappears in the raw response.So on the S6, remote seat ventilation isn't supported, at least with this command. That also suggests a missing
SEATVENTcode 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.