homebridge-fordpass icon indicating copy to clipboard operation
homebridge-fordpass copied to clipboard

[Feature Request]: can we control the other door (van door) ?

Open sommo opened this issue 3 years ago • 33 comments

Enhancement of issue

the plugin is amazing and work perfect, but you can open/close only the 2 doors.

Solution

With fordpass app you can also open the van door (i have a fordtransit camper), is there a way to add also the "alternative" door to control to? thank you

Alternatives

No response

Additional Context

No response

sommo avatar Aug 21 '21 09:08 sommo

Hi! I'm sure there is a way to add this but unfortunately I cannot test it or see the network calls to hook it up since I do not have a camper.

Brandawg93 avatar Aug 21 '21 11:08 Brandawg93

Is there a way that I can do it for you? Maybe with wire shark? Could you you guide me to intercept the api call?

sommo avatar Aug 21 '21 12:08 sommo

Take a look at #143. It has all the info you need for getting the calls.

Brandawg93 avatar Aug 21 '21 12:08 Brandawg93

From what you linked I found:

hoodDoor: [Object], tailgateDoor: [Object], innerTailgateDoor: [Object]

Could it be considered the tailgatedoor

sommo avatar Aug 21 '21 12:08 sommo

It could. But [Object] holds information that I would need to make it work.

Brandawg93 avatar Aug 21 '21 13:08 Brandawg93

Cause it seems it has been translate like the charging door on the back(tail)

sommo avatar Aug 21 '21 13:08 sommo

Ford's API is not very consistent. I would prefer to see what is in [Object] to make the changes as opposed to "shooting in the dark" based on another part of the API.

Brandawg93 avatar Aug 21 '21 13:08 Brandawg93

Anyway is there a way that your plugin once connected to the fordpass account could read what it can be done? For example I can't turn on and off the engine, but I can read oil, adblue and of course open/close van doors and also that "backdoor"

sommo avatar Aug 21 '21 13:08 sommo

Anyway is there a way that your plugin once connected to the fordpass account could read what it can be done? For example I can't turn on and off the engine, but I can read oil, adblue and of course open/close van doors and also that "backdoor"

The plugin can see all of this info but it doesn't utilize all of it. The plugin still has to play within the boundaries of Homebridge and since there is no official "oil" accessory for HomeKit, it is not implemented. The "backdoor" could be considered a lock accessory. I just don't know what the network call looks like for that particular section.

Brandawg93 avatar Aug 21 '21 13:08 Brandawg93

It's really like shooting in the dark 😅 but couldn't be so simple like trigger that "name" instead of the one you use for lock the vehicle. There is no way (also with phisical key) to lock this door (only by locking the entire vehicle) but it can be individualy open (also no way to check its status). The doubt is if its tailgatedoor or innertailgatedoor

sommo avatar Aug 21 '21 13:08 sommo

I watched https://github.com/Brandawg93/homebridge-fordpass/issues/143 but really do not understand how to inspect what's into [object]

sommo avatar Aug 21 '21 13:08 sommo

I watched https://github.com/Brandawg93/homebridge-fordpass/issues/143 but really do not understand how to inspect what's into [object]

It takes a bit of development work to be able to see it. If you follow the numbered steps there and add console.log where the other person did, it should show you what we're looking for.

Brandawg93 avatar Aug 21 '21 13:08 Brandawg93

i managed to did so now i can see this: lockStatus: { value: 'UNLOCKED', status: 'CURRENT', timestamp: '08-21-2021 14:12:47' }, alarm: { value: 'NOTSET', status: 'CURRENT', timestamp: '08-21-2021 14:12:47' }, PrmtAlarmEvent: { value: 'Null', status: 'CURRENT', timestamp: '08-21-2021 14:12:47' }, odometer: { value: 1049, status: 'CURRENT', timestamp: '08-21-2021 14:12:47' }, fuel: { fuelLevel: 44.891448, distanceToEmpty: 313.3, status: 'CURRENT', timestamp: '08-21-2021 14:12:47' }, gps: { latitude: '43.4999200', longitude: '11.1043467', gpsState: 'UNSHIFTED', status: 'LAST_KNOWN', timestamp: '06-29-2021 12:39:06' }, remoteStart: { remoteStartDuration: 10, remoteStartTime: 0, status: 'CURRENT', timestamp: '08-21-2021 14:12:47' }, remoteStartStatus: { value: 0, status: 'CURRENT', timestamp: '08-21-2021 14:12:47' }, battery: { batteryHealth: [Object], batteryStatusActual: [Object] }, oil: { oilLife: 'STATUS_GOOD', oilLifeActual: 99, status: 'CURRENT', timestamp: '08-21-2021 14:12:47' }, tirePressure: { value: 'STATUS_GOOD', timestamp: '08-21-2021 14:12:46' }, authorization: 'AUTHORIZED', TPMS: { tirePressureByLocation: [Object], tirePressureSystemStatus: [Object], dualRearWheel: [Object], leftFrontTireStatus: [Object], leftFrontTirePressure: null, rightFrontTireStatus: [Object], rightFrontTirePressure: null, outerLeftRearTireStatus: [Object], outerLeftRearTirePressure: null, outerRightRearTireStatus: [Object], outerRightRearTirePressure: null, innerLeftRearTireStatus: [Object], innerLeftRearTirePressure: null, innerRightRearTireStatus: [Object], innerRightRearTirePressure: null, recommendedFrontTirePressure: [Object], recommendedRearTirePressure: [Object] }, firmwareUpgInProgress: { value: false, timestamp: '08-01-2021 19:14:13' }, deepSleepInProgress: { value: false, timestamp: '08-01-2021 19:14:13' }, ccsSettings: { timestamp: '08-21-2021 12:20:43', location: 1, vehicleConnectivity: 1, vehicleData: 1, drivingCharacteristics: -1, contacts: -1 }, lastRefresh: '08-21-2021 14:12:46', lastModifiedDate: '08-21-2021 14:12:47', serverTime: '08-21-2021 14:13:45', batteryFillLevel: null, elVehDTE: null, hybridModeStatus: null, chargingStatus: null, plugStatus: null, chargeStartTime: null, chargeEndTime: null, preCondStatusDsply: null, chargerPowertype: null, batteryPerfStatus: null, outandAbout: { value: 'PwPckOffTqNotAvailable', status: 'CURRENT', timestamp: '08-21-2021 14:12:47' }, batteryChargeStatus: null, dcFastChargeData: null, windowPosition: null, doorStatus: { rightRearDoor: [Object], leftRearDoor: [Object], driverDoor: [Object], passengerDoor: [Object], hoodDoor: [Object], tailgateDoor: [Object], innerTailgateDoor: [Object] }, ignitionStatus: { value: 'Off', status: 'CURRENT', timestamp: '08-21-2021 14:12:47' }, batteryTracLowChargeThreshold: null, battTracLoSocDDsply: null, dieselSystemStatus: { exhaustFluidLevel: [Object], filterSoot: [Object], ureaRange: [Object], metricType: [Object], filterRegenerationStatus: [Object] } }, version: '4.0.0', status: 200 }

sommo avatar Aug 21 '21 14:08 sommo

this output is after open the "back" door, but now how to manage it? the only different when close is:

lockStatus: { value: 'LOCKED',

sommo avatar Aug 21 '21 14:08 sommo

so how to get deeper informational data under: doorStatus: { rightRearDoor: [Object], leftRearDoor: [Object], driverDoor: [Object], passengerDoor: [Object], hoodDoor: [Object], tailgateDoor: [Object], innerTailgateDoor: [Object] ? to see if it can see what is open and control it?

sommo avatar Aug 21 '21 14:08 sommo

This data could be also useful to have in homekit:

gps: { latitude: '43.4999200', longitude: '11.1043467',

tirePressure: { value: 'STATUS_GOOD',

oil: { oilLife: 'STATUS_GOOD', oilLifeActual: 99,

distanceToEmpty: 313.3,

sommo avatar Aug 21 '21 14:08 sommo

so how to get deeper informational data under:

doorStatus: {

  rightRearDoor: [Object],

  leftRearDoor: [Object],

  driverDoor: [Object],

  passengerDoor: [Object],

  hoodDoor: [Object],

  tailgateDoor: [Object],

  innerTailgateDoor: [Object]

?

to see if it can see what is open and control it?

console.log(data.tailgateDoor);

Brandawg93 avatar Aug 21 '21 20:08 Brandawg93

Thank you, I will try!

sommo avatar Aug 22 '21 06:08 sommo

i get this error while compiling with npm run build:

src/fordpass.ts:63:14 - error TS2304: Cannot find name 'data'.

63 console.log(data.tailgateDoor); ~~~~

src/fordpass.ts:64:14 - error TS2304: Cannot find name 'data'.

64 console.log(data.innerTailgateDoor); ~~~~

sommo avatar Aug 22 '21 07:08 sommo

I'm not sure what the variable was called. Just add .tailDoor to the end of it.

Brandawg93 avatar Aug 22 '21 12:08 Brandawg93

i didn't understand what you mean, also with .tailDoor, do not work:

src/fordpass.ts:63:14 - error TS2304: Cannot find name 'data'.

63 console.log(data.tailDoor);

tried without success also with:

src/fordpass.ts:63:14 - error TS1135: Argument expression expected.

63 console.log(.tailDoor); ~

sommo avatar Aug 22 '21 13:08 sommo

i have also tried with:

src/fordpass.ts:63:21 - error TS2339: Property 'tailDoor' does not exist on type 'AxiosResponse'.

63 console.log(result.tailDoor); ~~~~~~~~

now i'm really shooting in the dark ;( cause i don't know the logic on behind this string, what it expect to point to ?

sommo avatar Aug 22 '21 13:08 sommo

Whoops...autocorrect got me. console.log(result.tailgateDoor).

Brandawg93 avatar Aug 22 '21 14:08 Brandawg93

sorry but it give me error too:

src/fordpass.ts:63:21 - error TS2339: Property 'tailgateDoor' does not exist on type 'AxiosResponse'.

63 console.log(result.tailgateDoor); ~~~~~~~~~~~~

Found 1 error.

sommo avatar Aug 23 '21 04:08 sommo

@Brandawg93 any idea on how to check that door? thank you

sommo avatar Aug 24 '21 08:08 sommo

I did some digging into this. The tailgateDoor is most likely the status of the door, but it isn't the action. In other words, the plugin could see if the door is open/closed but can't tell the door to open/close. If the Fordpass app can control the door then there is a way, but it would take a much more advanced way of debugging to see it (mitmproxy). Unfortunately, since I don't have a camper, I can't debug it myself.

Brandawg93 avatar Aug 25 '21 12:08 Brandawg93

Thank you @Brandawg93, i have never used mitmproxy software, but it seems like a wireshark. Anyway i can control the tailgateDoor via app, i don't think it can intercept query/httpcall in the network if the source is another device in LAN, or am i wrong? if so i need to have the mitmproxy installed on the device that make the httpcall to intercept it, right?

sommo avatar Aug 25 '21 14:08 sommo

the question is, if i install mitmproxy on an raspberry in my lan (it can be installed via github) and i trigger the door via my smartphone (same lan) i could see the call? if so, how could i have to set the mitmproxy to intercept that call, by filtering the destination directed to ford's server? how could you will do? thank you

sommo avatar Aug 25 '21 14:08 sommo

It works like a proxy so it can do it..

sommo avatar Aug 25 '21 16:08 sommo

You would need to install a profile on your phone. When you trigger the call, your RPi will see what the call and parameters were. It's how I created the plugin in the first place. 😃

Brandawg93 avatar Aug 25 '21 22:08 Brandawg93