MQTT Protocol
This is a specification for the MQTT protocol that the server uses to communicate with the app.
Connection
Now requires MQTTv5!
- Host: mqtt.messagehub.de
3.72.252.2033.73.186.137- Port:: 8883
- Username:: MySkoda API user_id UUID
- Password:: MySkoda API JWT access_token
- Properties: Additional authentication properties (MQTTv5)
"auth_method": "totp_v1""auth_credentials", "TOTP"
TOTP is a 6-number Time-based One-Time Password generated from the FCM (Firebase Cloud Messaging) token. That token must be retrieved from FCM (using the MySkoda access_token) and then registered with the MySkoda API with PUT api/v1/notifications-subscriptions/<FCM_TOKEN>.
Message structure
/operation-request
These messages describe how the car reacts to requests by the app.
For example, if a start-stop-air-conditioning message is sent, the MQTT server will first answer with a IN_PROGRESS and then a COMPLETED_SUCCESS message.
Common Fields
| Field | Description | Example |
|---|---|---|
| version | Protocol version. | 1 |
| traceId | This id stays the same across a request. Unsure what this is used for. | "7620dfdabcf14fc5a3c832dccfb2510a" |
| requestId | This id stays the same across a request. Unsure what this is used for. | "df538725-66ff-4644-9a5d-7f3eac8838fb" |
| operation | The operation that is being performed / was requested. | "start-flash" |
| status | Status of the message. | "IN_PROGRESS" |
| errorCode | Only present in error messages. Describes the type of error. | timeout |
Status
"IN_PROGRESS": Operation is currently being executed by the car."COMPLETED_SUCCESS": Operation completed."ERROR": An error occurred. Additional information in field"errorCode"."COMPLETED_WARNING": Extracted from analysing the smali files. We don't know the implications.
/service-event
These messages are sent proactively from the vehicle, or somewhat periodically by some other participant that is not the app.
Common Fields
The following fields are present in every entity returned from the /service-event topic:
| Field | Description | Example |
|---|---|---|
| version | Protocol version. | 1 |
| traceId | This id stays the same across a request. Unsure what this is used for. | "c94de7d5a966c79c7666328b005b55ee" |
| timestamp | Timestamp from when the message originated in ISO format. | 2024-09-09T20:34:53.546Z |
| producer | Probably the origin of the message. | SKODA_MHUB |
| name | Name of the event. | "change-soc" |
| data.userId | User id. | "50f8b18c-d444-422c-998f-2b599f4f0ec7" |
| data.vin | Vehicle identification number. | "TMBJB9NY6RF999999" |
Subjects
The app subscribes to the following topics:
Generic
{user_id}/{vin}/account-event/privacy{user_id}/{vin}/operation-request/charging/update-battery-support{user_id}/{vin}/operation-request/vehicle-access/lock-vehicle{user_id}/{vin}/operation-request/vehicle-wakeup/wakeup{user_id}/{vin}/service-event/vehicle-status/access{user_id}/{vin}/service-event/vehicle-status/lights
Enyaq 2024
{user_id}/{vin}/operation-request/air-conditioning/set-target-temperature{user_id}/{vin}/operation-request/air-conditioning/start-stop-air-conditioning{user_id}/{vin}/operation-request/air-conditioning/start-stop-window-heating{user_id}/{vin}/operation-request/charging/start-stop-charging{user_id}/{vin}/operation-request/vehicle-services-backup/apply-backup{user_id}/{vin}/service-event/air-conditioning{user_id}/{vin}/service-event/charging
Octavia 3 2019
{user_id}/{vin}/operation-request/vehicle-access/honk-and-flash{user_id}/{vin}/operation-request/vehicle-services-backup/apply-backup
/operation-request/air-conditioning/set-target-temperature
Published when the user requests that the temperature of the air conditioning is changed:
Operations
set-air-conditioning-target-temperature
Example Messages
{
"version": 1,
"operation": "set-air-conditioning-target-temperature",
"status": "IN_PROGRESS",
"traceId": "c94de7d5a966c79c7666328b005b55ee",
"requestId": "e8f6fd16-d6c1-44fa-8b5e-2c7ddaae2cc2"
}
{
"version":1,
"operation":"start-air-conditioning",
"status":"ERROR",
"errorCode":"timeout",
"traceId":"0b1e16a2b5070e19842656f7691c52c9",
"requestId":"e379d91d-1b6b-442f-82ee-99b6f8c9c0af"
}
/operation-request/air-conditioning/start-stop-air-conditioning
Published when air conditioning is started or stopped and also when it is completed. Will report the status of the request while it is running.
Operations
stop-air-conditioningstart-air-conditioning
Example Messages
{
"version": 1,
"operation": "stop-air-conditioning",
"status": "IN_PROGRESS",
"traceId": "e063a0da2c324315b8f04477340dd4b1",
"requestId": "df538725-66ff-4644-9a5d-7f3eac8838fb"
}
{
"version": 1,
"operation": "start-air-conditioning",
"status": "COMPLETED_SUCCESS",
"traceId": "9ec9816ef8924036a32dfb8285192b31",
"requestId": "b0327db0-52a8-4822-8318-1411d237c707"
}
/operation-request/air-conditioning/start-stop-window-heating
Updated when window heating is started, stopped or completed.
Operations
stop-window-heatingstart-window-heating
Example Messages
{
"version": 1,
"operation": "start-window-heating",
"status": "IN_PROGRESS",
"traceId": "800a74737b5a4328862d958c35b71b74",
"requestId": "5a16b265-85e7-4502-bd24-c92091c3df31"
}
{
"version": 1,
"operation": "start-window-heating",
"status": "ERROR",
"errorCode": "timeout",
"traceId": "800a74737b5a4328862d958c35b71b74",
"requestId": "5a16b265-85e7-4502-bd24-c92091c3df31"
}
/operation-request/charging/start-stop-charging
Updated when the charging is started or stopped via the app (not when it is stopped due to unplugged cable, etc.).
Operations
start-chargingstop-charging
Example Messages
{
"version": 1,
"operation": "start-charging",
"status": "IN_PROGRESS",
"traceId": "036b76283bed18a1fe34fb319c21d2e0",
"requestId": "76908f3f-e0f1-47a7-9541-c40a52ca8e4b"
}
/operation-request/vehicle-access/honk-and-flash
Updated when the user requested the car to flash or honk and flash via the app.
Operations
start-flashstart-honk
Example Messages
{
"version": 1,
"operation": "start-flash",
"status": "IN_PROGRESS",
"traceId": "7620dfdabcf14fc5a3c832dccfb2510a",
"requestId": "531f8dc4-8c2e-44ca-ac43-3cf47003d8cc"
}
{
"version": 1,
"operation": "start-honk",
"status": "COMPLETED_SUCCESS",
"traceId": "2f546702916813538dce19ace9f6dac4",
"requestId": "48335d5d-7f82-482c-868a-3dc1bbf6e227"
}
/service-event/charging
Published to while the car is charging.
Name: "change-soc"
Special fields
| Field | Description | Example |
|---|---|---|
| data.mode | Unknown. Only known value is manual. |
"manual" |
| data.state | See documentation for this field below. | "charging" |
| data.soc | Current charge of battery in percent, encoded as string. | "77" |
| data.chargedRange | Estimated distance of the car in km, ecnoded as string. | "207" |
| data.timeToFinish | Estimation on when the target percentage is reached in minutes, encoded as string. | "25" |
Field data.state
"charging": Vehicle is currently charging."chargePurposeReachedAndNotConservationCharging": Vehicle is full and will stop charging."notReadyForCharging": Fired while the vehicle is discharging, e.g. while driving.
Example Messages
{
"version": 1,
"traceId": "cd2e3695-c136-4835-8e05-7e6fc305e0b2",
"timestamp": "2024-09-11T21:06:26Z",
"producer": "SKODA_MHUB",
"name": "change-soc",
"data": {
"mode": "manual",
"state": "charging",
"soc": "74",
"chargedRange": "207",
"timeToFinish": "25",
"userId": "50f8b18c-d444-422c-998f-2b599f4f0ec7",
"vin": "TMBJB9NY6RF999999"
}
}
{
"version": 1,
"traceId": "2b76b461-89cd-4a95-ac88-26d66e413241",
"timestamp": "2024-09-11T21:17:09Z",
"producer": "SKODA_MHUB",
"name": "change-soc",
"data": {
"mode": "manual",
"state": "charging",
"soc": "77",
"chargedRange": "215",
"timeToFinish": "15",
"userId": "50f8b18c-d444-422c-998f-2b599f4f0ec7",
"vin": "TMBJB9NY6RF999999"
}
}
{
"version": 1,
"traceId": "576f65fa-5c81-4b07-b6dd-8ef31957e79b",
"timestamp": "2024-09-11T21:27:48Z",
"producer": "SKODA_MHUB",
"name": "change-soc",
"data": {
"mode": "manual",
"state": "chargePurposeReachedAndNotConservationCharging",
"soc": "80",
"chargedRange": "223",
"timeToFinish": "0",
"userId": "50f8b18c-d444-422c-998f-2b599f4f0ec7",
"vin": "TMBJB9NY6RF999999"
}
}
/service-event/vehicle-status/access
Published whenever anything happens with the car (unlocked, door opened, charger plugged, etc.). Probably "access" doesn't mean physical access in this context, but rather digital access of the car's capabilities.
Name: "change-access"
Example Messages
{
"version": 1,
"traceId": "f9de3b45-9802-470d-ab45-221f4cf8fd97",
"timestamp": "2024-09-09T20:34:53.546Z",
"producer": "SKODA_MHUB",
"name": "change-access",
"data": {
"userId": "50f8b18c-d444-422c-998f-2b599f4f0ec7",
"vin": "TMBJB9NY6RF999999"
}
}
{
"version": 1,
"traceId": "f0961cdf-6909-4d62-a073-adb642908363",
"timestamp": "2024-09-09T20:49:27.564Z",
"producer": "SKODA_MHUB",
"name": "change-access",
"data": {
"userId": "50f8b18c-d444-422c-998f-2b599f4f0ec7",
"vin": "TMBJB9NY6RF999999"
}
}
/service-event/vehicle-status/lights
Published when the lights of the vehicle are turned on or off.
Name: "change-lights"
Example Messages
{
"version": 1,
"traceId": "6a9479b6-dc07-4691-9271-120c45b7b109",
"timestamp": "2024-09-09T20:53:39.560Z",
"producer": "SKODA_MHUB",
"name": "change-lights",
"data": {
"userId": "50f8b18c-d444-422c-998f-2b599f4f0ec7",
"vin": "TMBJB9NY6RF999999"
}
}