Closed kurts-gmail closed 11 months ago
Which version are you running?
v1.8.2
Are you able to sniff the payload from your mobile app and compare to the above? Interested to see if it matches what was mentioned in the other thread or not.
I’m not sure how to do that since the request from the app is sent with TLS and encrypted right? Was wondering if I could dump the strings from the iOS app.
I haven't tried it but https://www.charlesproxy.com/ should work for iOS. It is using TLS correct.
I didn’t have luck with this. Got charlesproxy installed and working with other ssl sites but bluelink app says the certificate is invalid. Charles proxy docs mention some apps use pinned certs preventing its use.
Another option is we give the bluelinky details a try and see if they work? Is that something you can help with? Happy to get the code ready for you to run.
I cloned bluelinky and I got the same "Your vehicle does not support this feature" error in both the master and develop (which has the new API) branches.
I misinterpreted the Bluelinky issue I linked. It looks like the API change was in Bluelinky -- the Hyundai API stayed the same.
I also put in a junk body for the start request and got the same error. That makes me wonder if the start API URL changed.
Looks like we will need something who finds a way to sniff the traffic to figure this one out. Any chance one of you could help: @TarheelGrad1998 @bvlaicu @TarheelGrad1998?
I have just purchased an Ioniq 5 SEL in the USA and have sniffed the traffic when sending a climate start command from my iPhone. Climate temp set to 72f and no heating functions toggled on.
POST /ac/v2/evc/fatc/start HTTP/1.1
Host: api.telematics.hyundaiusa.com
deviceId: ...
Accept: */*
deviceMeid: ...
Accept-Encoding: gzip, deflate, br
Location: ...
Content-Length: 76
User-Agent: MyHyundai/5.1.5 (iPhone; iOS 17.0; Scale/3.00)
deviceName: iPhone
gen: 2
Cookie: ...
Version: 1.4.7
pinToken: ...
registrationId: ....
osVersion: 17.0
from: SPA
access_token: ...
brandIndicator: H
Accept-Language: en-US;q=1
NADID: ...
requestId: 59
username: ...
Featureusage_time: 2023-09-04T16:43:11Z
Client_Id: ...
vin: ...
Offset: -7
Connection: keep-alive
Content-Type: application/json
osType: iOS
APPCLOUD-VIN: ...
appVersion: 5.1.5
Language: 0
To: ISS
appType: MyHyundai
{"airCtrl":1,"airTemp":{"value":"72","unit":1},"heating1":0,"defrost":false}
I would love to help get this working for the US Ioniq 5. If i removed any info you need, please let me know.
might be helpful for related issues as well
Hyundai-Kia-Connect/hyundai_kia_connect_api/issues/369 and Hacksore/bluelinky/issues/221
That looks to be exactly what is needed. Is this something you want to learn to assist with on development?
Yes, I would love to learn and help! Please, let me know what I can do
Yes, I would love to learn and help! Please, let me know what I can do
@zphaze do you have any example payloads that would include the SOC battery % ? I would love to add that feature.
I am using your info to update my blue link GO api and a proxy server so you can use it to setup SIRI integration if you like. I got siri integration working now to start/stop climate using Siri shortcut (simple HTTPS POST client)
@TaiPhamD A SIRI command was my ultimate goal with the home assistant integration, but this looks like it may do what I'm looking for. I will give it a try!
As far as the SOC, are you looking for a charge limit command or a current SOC request?
@zphaze can you share how you sniffed the traffic? I tried Charles Proxy to sniff the https stream but the app would no longer function. Any tips?
@kurts-gmail i had a lot of issue trying to sniff on android . On iOS is much simpler . On android starting newer version most app will ignore user imported CA so you need to add the CA to system root CA (requiring root privileges ) or decompile .APK to modify networking xml to tell it to also allow user CA files. I got close on sniffing on android but couldn't fully get it to work then switched to iOS and got it working in 5 minutes . Just import Charles CA on iOS and remember to enable (off by default) , set proxy on your wifi to hit your Charles proxy server. You might need to click "allow unknown client" once it detects your phone connected to it on the Charles proxy app. Also make sure you add in host name for the hosts that you want to decrypt .
https://github.com/Hyundai-Kia-Connect/hyundai_kia_connect_api/pull/429 Aligns URLs. To test it edit your manifest file and adjust the API version to 3.10.2.
Let me know what error you get or if it works. This touches both start_climate and stop.
@cdnninja I updated the manifest through VS Code and removed and re-added the integration. I send the start climate command with temperature, front defroster off, rear window and side mirrors off, and steering wheel heat off as those are the only features my app has available. The debug shows lots more settings that the car does not support. May that also be the cause of the "Your vehicle does not support this feature" error?
I also tried the stop climate command after starting the car from my phone and the same "Your vehicle does not support this feature" error occurred. Is there a way to confirm that the API change in the manifest worked?
This is my home assistant service call, which matches what settings I can set in my app:
service: kia_uvo.start_climate
data:
climate: true
heating: "0"
device_id: ...
temperature: 72
defrost: false
This is the log after that service:
2023-10-23 22:31:33.776 DEBUG (SyncWorker_16) [hyundai_kia_connect_api.HyundaiBlueLinkAPIUSA] hyundai_kia_connect_api - Start engine..
2023-10-23 22:31:33.776 DEBUG (SyncWorker_16) [hyundai_kia_connect_api.HyundaiBlueLinkAPIUSA] hyundai_kia_connect_api - Start engine headers: {'content-type': 'application/json;charset=UTF-8', 'accept': 'application/json, text/plain, */*', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'en-US,en;q=0.9', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36', 'host': 'api.telematics.hyundaiusa.com', 'origin': 'https://api.telematics.hyundaiusa.com', 'referer': 'https://api.telematics.hyundaiusa.com/login', 'from': 'SPA', 'to': 'ISS', 'language': '0', 'offset': '-7', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'refresh': 'false', 'encryptFlag': 'false', 'brandIndicator': 'H', 'gen': '2', 'client_id': '...', 'clientSecret': '...', 'username': '...', 'accessToken': '...', 'blueLinkServicePin': '...', 'registrationId': '...', 'vin': '...'}
2023-10-23 22:31:33.776 DEBUG (SyncWorker_16) [hyundai_kia_connect_api.HyundaiBlueLinkAPIUSA] hyundai_kia_connect_api - Start engine data: {'Ims': 0, 'airCtrl': 1, 'airTemp': {'unit': 1, 'value': 72}, 'defrost': False, 'heating1': 0, 'igniOnDuration': 5, 'seatHeaterVentInfo': {'drvSeatHeatState': 0, 'astSeatHeatState': 0, 'rlSeatHeatState': 0, 'rrSeatHeatState': 0}, 'username': '...', 'vin': '...'}
2023-10-23 22:31:33.915 DEBUG (SyncWorker_16) [hyundai_kia_connect_api.HyundaiBlueLinkAPIUSA] hyundai_kia_connect_api - Start engine response status code: 502
2023-10-23 22:31:33.915 DEBUG (SyncWorker_16) [hyundai_kia_connect_api.HyundaiBlueLinkAPIUSA] hyundai_kia_connect_api - Start engine response: {"errorSubCode":"GEN","systemName":"BLODS","errorSubMessage":"Feature Status is OFF","errorMessage":"Your vehicle does not support this feature.","errorCode":502}
Could you confirm in debug logs if the new endpoint is used?
I am not seeing the endpoints anywhere in the debug logs.
Looks like the USA one doesn't set vehicle type yet. We need to fix that. From your "data" sensor can you look in attributes for something that shows the engine type? Here is an example in Canada where we find the engine type.
https://github.com/Hyundai-Kia-Connect/hyundai_kia_connect_api/blob/0852669f1b65900544cce56d4a7cffcc28a6fa14/hyundai_kia_connect_api/KiaUvoApiCA.py#L154-L171
Vs USA Hyundai currently we just grab VIN and a few other details:
Oh yea thats a problem, looks like evStatus with letter E is the USA equivalent but heres the data in case you see something else.
Vehicle data
vehicleDetails:
svrStatus: NONE
dynamicBurgerMenu: >-
https://owners.hyundaiusa.com/content/dam/hyundai/us/myhyundai/image/2023/ioniq-5/sel/exterior/base/shooting-star/Dashboard-01.png/jcr:content/renditions/cq5dam.thumbnail.105.68.png
remoteStartWakeupDays: seven
enrollmentDate: '20230901'
svdDay: '28'
trim: SEL
modelCode: IONIQ 5
ubiCapabilityInd: 'Y'
vin: …
enrollmentId: '4815575'
sideMirrorHeatCapable: 'YES'
ownersuccession: '1'
odometer: '3476'
nickName: Winter Soldier
defaultBurgerMenu: >-
https://owners.hyundaiusa.com/content/dam/hyundai/us/myhyundai/image/2023/ioniq-5/sel/exterior/base/default/Dashboard-01.png/jcr:content/renditions/cq5dam.thumbnail.105.68.png
evStatus: E
modelYear: '2023'
steeringWheelHeatCapable: 'YES'
defaultDashboard: >-
https://owners.hyundaiusa.com/content/dam/hyundai/us/myhyundai/image/2023/ioniq-5/sel/exterior/base/default/Dashboard-01.png
vehicleGeneration: '2'
starttype: KEY
sapColorCode: T5R
bluelinkEnabled: true
odometerUpdateDate: '20231024175216'
fatcAvailable: 'Y'
color: MATTE GRAY
maintSyncCapable: 'YES'
brandIndicator: H
deviceStatus: ENROLLED
setOffPeak: '1'
mapProvider: HERE
generalBurgerMenu: >-
https://owners.hyundaiusa.com/content/dam/hyundai/us/myhyundai/image/2023/ioniq-5/general/exterior/base/default/Dashboard-01.png/jcr:content/renditions/cq5dam.thumbnail.105.68.png
interiorColor: VKE
accessoryCode: WAVN 5.0
nadid: ‘…’
mit: '7500'
regid: …
blueLink: 'Y'
waypointInd: 'NO'
billingInd: MONTHLY
dynamicDashboard: >-
https://owners.hyundaiusa.com/content/dam/hyundai/us/myhyundai/image/2023/ioniq-5/sel/exterior/base/shooting-star/Dashboard-01.png
imat: '7500'
additionalVehicleDetails:
temperatureRange: 'true'
tmuSleepMode: 'No'
enableHCAModule: 'Y'
maxTemp: 82
icpParking: 1
remoteLockConsentForRemoteStart: 'No'
calendarVehicleSyncEnable: 'Yes'
vehicleModemType: 4G (NEEV23.USA.S5W_M.V011.004.231004)
icpAACapable: 'Y'
icpDriveThru: 0
dkType: DK TYPE UNKNOWN
dynamicSOCText: >-
Use the slider above to set a charge limit. Charging will stop when this
battery level is reached. The limit cannot be set lower than 50% This
setting will override all other charge settings if set.
enableRoadSideAssitanceAAAModule: 'Y'
idleSpeedinValetAlert: 'N'
evAlarmOptionInfo: 'Yes'
mapOtaAccepted: 'N'
dkCapable: 'Y'
combinedHeatSettingsEnable: 'N'
icpChargingStation: 0
hyundaiHome: 'N'
wifiHotspotCapable: 'Y'
tmuSleepInMin: 69.48333333333333
dkEnrolled: 'N'
icpAvntCapable: 'Y'
enableEVTrip: 'N'
minTemp: 62
icpFuelStation: 0
targetSOCLevelMax: 100
remoteLockConsentForRemoteStartCapable: 'No'
eaPromotion:
expireOn: 3 years from vehicle purchase date
description: >-
Electrify America teamed up with Hyundai to offer 250 kWh (approx. 1,000
miles of EPA-estimated driving range*) of complimentary charging on its
nationwide ultra-fast charging network. To register, download the
Electrify America app, then input your activation code and vehicle's
VIN. Contact Electrify America Customer Assistance 24/7 at
1-833-632-2778 or <a
href="mailto:support@electrifyamerica.com">support@electrifyamerica.com</a>
for questions about this program. </br></br><a
href="https://owners.hyundaiusa.com/us/en/resources/getting-started/getting-started-with-the-electrify-america-hyundai-premium-charging-program.html">Learn
More</a>.</br></br>To claim the complimentary charging
for your vehicle enroll in the Electrify America Hyundai Premium
Charging Program by clicking <a
href="https://www.electrifyamerica.com/mobile-app/">here</a>.
enrollmentCode: …
msCapableOption: 'N'
icpCPCapable: 'Y'
enableValetActivate: 'Y'
energyConsoleCapable: 'No'
cpoVehicle: 'No'
transmissiontype: AUTO
bluelinkEnrolled: true
targetSOCLevel: '50'
rearWindowHeatCapable: 'YES'
preferredDealerCode: ...
hmaModel: NE1
series: IONIQ 5
enrollmentStatus: ACTIVE
generalDashboard: >-
https://owners.hyundaiusa.com/content/dam/hyundai/us/myhyundai/image/2023/ioniq-5/general/exterior/base/default/Dashboard-01.png
userprofilestatus: 'Y'
vehicleStatus:
dateTime: '20231025011307'
acc: true
defrostStatus: 'false'
transCond: true
doorLockStatus: 'false'
doorOpen:
frontRight: 0
frontLeft: 1
backLeft: 0
backRight: 0
washerFluidStatus: false
battery:
batSoc: 83
sjbDeliveryMode: 1
hazardStatus: 0
vehicleLocation:
coord:
lon: …
type: 0
lat: …
ign3: true
ignitionStatus: 'false'
lowFuelLight: false
sideBackWindowHeat: 0
engine: false
remoteWaitingTimeAlert:
remoteControlWaitingTime: 168
remoteControlAvailable: 1
hoodOpen: false
breakOilStatus: false
airConditionStatus: 'true'
smartKeyBatteryWarning: false
steerWheelHeat: 0
tailLampStatus: 0
trunkOpen: false
doorLock: false
airCtrlOn: true
airTemp:
unit: 1
hvacTempType: 1
value: '72'
evStatus:
valueDiff: 0
remainTime2:
etc3:
unit: 1
value: 0
etc2:
unit: 1
value: 0
atc:
unit: 1
value: 0
etc1:
unit: 1
value: 0
evIgnitionStatus: true
inletLockModeStatus: 0
batteryPlugin: 1
timeDiff: 6
batteryCharge: false
batteryStatus: 90
remainTime: []
batteryPreconditiong: false
drvDistance:
- rangeByFuel:
gasModeRange:
unit: 3
value: 0
totalAvailableRange:
unit: 3
value: 258
evModeRange:
unit: 3
value: 258
type: 2
reservChargeInfos:
targetSOClist:
- rangeByFuel:
gasModeRange:
unit: 3
value: 0
totalAvailableRange:
unit: 3
value: 258
evModeRange:
unit: 3
value: 258
plugType: 0
targetSOClevel: 90
type: 2
- rangeByFuel:
gasModeRange:
unit: 3
value: 0
totalAvailableRange:
unit: 3
value: 258
evModeRange:
unit: 3
value: 258
plugType: 1
targetSOClevel: 90
type: 2
reservChargeInfo:
dateTime: 2023/10/24T19:22:31Z
reservChargeInfoDetail:
reservChargeSet: false
reservEndTime: ''
reservFatcSet:
defrost: false
airTemp:
unit: 1
value: '76'
airCtrl: 0
reservInfo:
time:
timeSection: 0
time: '1200'
day:
- 9
reservFlag: 0
reserveChargeInfo2:
reservChargeInfoDetail:
reservChargeSet: false
reservEndTime: ''
reservFatcSet:
defrost: false
airTemp:
unit: 1
value: '76'
airCtrl: 0
reservInfo:
time:
timeSection: 0
time: '1200'
day:
- 9
offpeakPowerInfo:
offPeakPowerFlag: 0
offPeakPowerTime1:
startTime:
timeSection: 0
time: '1200'
endTime:
timeSection: 0
time: '1200'
lampWireStatus:
headLamp:
rightBifuncLamp: false
headLampStatus: false
leftLowLamp: false
rightHighLamp: false
leftBifuncLamp: false
leftHighLamp: false
rightLowLamp: false
stopLamp:
rightLamp: false
leftLamp: false
turnSignalLamp:
rightRearLamp: false
rightFrontLamp: false
leftRearLamp: false
leftFrontLamp: false
sleepModeCheck: false
defrost: false
tirePressureLamp:
tirePressureWarningLampRearLeft: 0
tirePressureWarningLampFrontLeft: 0
tirePressureWarningLampFrontRight: 0
tirePressureWarningLampAll: 0
tirePressureWarningLampRearRight: 0
trunkOpenStatus: 'false'
Vehicle name
Winter Soldier
I have created https://github.com/Hyundai-Kia-Connect/hyundai_kia_connect_api/pull/430 that may help. As a note you just need to change manifest and restart. No need to reinstall the integration. 3.10.3 is the new version to put into the manifest.
Thanks for the note, that makes testing easier.
Stop climate now works, so the endpoints are functioning!
However start climate now gives a different error and does not start:
2023-10-24 21:21:01.282 DEBUG (SyncWorker_7) [hyundai_kia_connect_api.HyundaiBlueLinkAPIUSA] hyundai_kia_connect_api - Start engine..
2023-10-24 21:21:01.282 DEBUG (SyncWorker_7) [hyundai_kia_connect_api.HyundaiBlueLinkAPIUSA] hyundai_kia_connect_api - Start engine headers: {'content-type': 'application/json;charset=UTF-8', 'accept': 'application/json, text/plain, */*', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'en-US,en;q=0.9', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36', 'host': 'api.telematics.hyundaiusa.com', 'origin': 'https://api.telematics.hyundaiusa.com', 'referer': 'https://api.telematics.hyundaiusa.com/login', 'from': 'SPA', 'to': 'ISS', 'language': '0', 'offset': '-7', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'refresh': 'false', 'encryptFlag': 'false', 'brandIndicator': 'H', 'gen': '2', 'client_id': '...', 'clientSecret': '...', 'username': '...', 'accessToken': '...', 'blueLinkServicePin': '...', 'registrationId': '...', 'vin': '...'}
2023-10-24 21:21:01.283 DEBUG (SyncWorker_7) [hyundai_kia_connect_api.HyundaiBlueLinkAPIUSA] hyundai_kia_connect_api - Start engine data: {'Ims': 0, 'airCtrl': 1, 'airTemp': {'unit': 1, 'value': 72}, 'defrost': False, 'heating1': 0, 'igniOnDuration': 5, 'seatHeaterVentInfo': {'drvSeatHeatState': 0, 'astSeatHeatState': 0, 'rlSeatHeatState': 0, 'rrSeatHeatState': 0}, 'username': '...', 'vin': '...'}
2023-10-24 21:21:01.589 DEBUG (SyncWorker_7) [hyundai_kia_connect_api.HyundaiBlueLinkAPIUSA] hyundai_kia_connect_api - Start engine response status code: 502
2023-10-24 21:21:01.589 DEBUG (SyncWorker_7) [hyundai_kia_connect_api.HyundaiBlueLinkAPIUSA] hyundai_kia_connect_api - Start engine response: {"errorSubCode":"GEN","systemName":"HATA","functionName":"remoteFATCStart","errorSubMessage":"HATA remoteFATCStart service failed while performing the operation RemoteFATCStart","errorMessage":"We're sorry, but we could not complete your request. Please try again later.","errorCode":502,"serviceName":"RemoteFATCStart"}
Here is the curl command for the US start climate that works with my Ioniq 5. Can double check the parameters here with your log.
curl --location 'https://api.telematics.hyundaiusa.com/ac/v2/evc/fatc/start' \ --header 'access_token: xxxxx' \ --header 'client_id: m66129Bb-em93-SPAHYN-bZ91-am4540zp19920' \ --header 'Host: api.telematics.hyundaiusa.com' \ --header 'User-Agent: okhttp/3.12.0' \ --header 'registrationId: xxx' \ --header 'gen: 2' \ --header 'username: xxxx' \ --header 'vin: xxxx' \ --header 'APPCLOUD-VIN: xxxx' \ --header 'Language: 0' \ --header 'to: ISS' \ --header 'encryptFlag: false' \ --header 'from: SPA' \ --header 'brandIndicator: H' \ --header 'bluelinkservicepin: xxxx' \ --header 'offset: -4' \ --header 'Content-Type: application/json' \ --data '{"airCtrl":1,"airTemp":{"value":"72","unit":1},"heating1":0,"defrost":false}'
Created my first Pull Request in an attempt to help out! Would that work to make the data match from the sniffed data?
https://github.com/Hyundai-Kia-Connect/hyundai_kia_connect_api/pull/431
Looks like we figured out the API issues, once they are pushed to a release I can hopefully do the final test inside Home Assistant.
A new api version exists to try in your manifest.
That works! successfully turned on my car!
Thank you for the work to get this resolved. The new API now is in this repo and a release created. https://github.com/Hyundai-Kia-Connect/kia_uvo/pull/733
Start/stop climate don't work with my USA Ioniq5. Lock does work. Did they change the API? There's mention of it over at bluelinky https://github.com/Hacksore/bluelinky/issues/221
2022-11-01 23:47:17.743 DEBUG (SyncWorker_1) [custom_components.kia_uvo.HyundaiBlueLinkAPIUSA] kia_uvo - Stop engine.. 2022-11-01 23:47:17.744 DEBUG (SyncWorker_1) [custom_components.kia_uvo.HyundaiBlueLinkAPIUSA] kia_uvo - Stop engine headers: {'content-type': 'application/json;charset=UTF-8', 'accept': 'application/json, text/plain, /', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'en-US,en;q=0.9', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36', 'host': 'api.telematics.hyundaiusa.com', 'origin': 'https://api.telematics.hyundaiusa.com', 'referer': 'https://api.telematics.hyundaiusa.com/login', 'from': 'SPA', 'to': 'ISS', 'language': '0', 'offset': '-6', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'refresh': 'false', 'encryptFlag': 'false', 'brandIndicator': 'H', 'gen': '2', 'username': '..., 'blueLinkServicePin': '...', 'client_id': '...', 'clientSecret': 'v...', 'accessToken': '...', 'vin': '...', 'vehicleId': '...', 'pAuth': None, 'registrationId': '...'} 2022-11-01 23:47:18.216 DEBUG (SyncWorker_1) [custom_components.kia_uvo.HyundaiBlueLinkAPIUSA] kia_uvo - Stop engine response status code: 502 2022-11-01 23:47:18.217 DEBUG (SyncWorker_1) [custom_components.kia_uvo.HyundaiBlueLinkAPIUSA] kia_uvo - Stop engine response: {"errorSubCode":"GEN","systemName":"BLODS","errorSubMessage":"Feature Status is OFF","errorMessage":"Your vehicle does not support this feature.","errorCode":502}