No, got a canned reply saying there was no public API and no plans for one. Unless someone can reverse engineer it from the app we are stuck
That’s interesting as Pod Point are part of the Electric Vehicle Homecharge Scheme (List of supported chargers).
And a requirement of that scheme is that OCPP or equivalent should be supported.
So my understanding of that is that Pod Point should support the OCPP API or offer an equivalent API.
I will email the Pod Point contact listed on the charger list regarding OCPP support and report back, I guess it may be the case customer support might not be aware of this functionality.
I think the pushback you will get is that it does have OCPP support but there is no requirement to make it public. (Probably under the guise of “Cybersecurity”) but good luck! Let us know how you get on. If enough of us complain, maybe they will do something.
Unfortunately no response so far, so I guess there won’t be one.
It’s a shame as I was considering getting a Pod Point, however I will probably go with Wallbox instead as they make access OCPP fairly straight forward.
Hi,
Sorry to jump in to this late, but having just waited 20 minutes for a taxi to get his last 2% in at a pod-point public charger I thought it’d be worth looking for an API.
I found the link to POD Point API v3.0 but it just spins a loading wheel, did any one manage to get any of the docs?
I’ve also found their git hub repo Pod Point · GitHub but there’s not much there either. There is a contact email address of [email protected] might be worth seeing if they have a dev there with interest in home automation
I’m going to play with proxying the mobile app through my laptop to see if I can figure out the API that way, at this point all I want is some charging status that I can put in a rest command
Dan
Thanks, that’s a big help. I had a bit of a play with postman yesterday but couldn’t get my creds to work.
I’ll have another go today as looking at that postman collection it feels like it’s on the right track.
I’ve also had a look at the web scraper for the location pages (e.g. Hank-Will | Westminster - Whitehall Place | Pod Point Network) which might have legs. I was hoping to see some API calls in the web page but it looks like it’s all processed on the back end.
This might just be postman and it’s less than fantastic update of variables. (When you change the variables for username & password you click save as expected. But often you then need to click reset all then save again to actually pull it through…)
It is possible to get the live status of every PUBLIC (not home ones don’t panic) pod point - i use this as part of a big tracker which attempts to work out the current loads on the grid imposed by public EV charging (currently 25MW from the top 5 charge networks.)
Okay, I have managed to get some charge data from the PodPoint APIs using the Postman collection and interrogating some public NPM packages that PodPoint have released. Primarily @pod-point/api3-js - npm.
With some modification of the collection I have discovered that once autorised you can make a GET call to:
https://api.pod-point.com/v4/users/{{user_id}}/charges?perpage=all
Which is returning the following for a charge I did today at home:
{
"charges": [
{
"id": ***,
"kwh_used": 2.2,
"duration": 66,
"starts_at": "2022-02-14T09:45:32+00:00",
"ends_at": "2022-02-14T10:51:40+00:00",
"billing_event": {
"id": null,
"amount": null,
"currency": null,
"exchange_rate": 0,
"presentment_amount": null,
"presentment_currency": null
},
"location": {
"id": ***,
"home": true,
"address": {
"id": ***,
"business_name": ""
},
"timezone": "Europe/London"
},
"pod": {
"id": ***
},
"energy_cost": 40
},
...
}
From this you can get the energy burned in KWHs (rounded), energy_cost in (for me pence as I am GBP), also rounded. If I used 2.2kwh on my rate of 18.35p/kwh it would be 40.37 as well as start and end.
Using the location.home value you could filter the return to only show you charges you made at home, or not, depending on your preference.
This isn’t exactly EARTH SHATTERING, but feels like a start. I’m running through the other endpoints defined in the NPM package to see if I can get anything useful
I’ve discovered that you can get the status of your charger, as well as the power config and schedules with is API:
https://api.pod-point.com/v4/users/{{user_id}}/pods?perpage=all&include=statuses,model,charges,unit_connectors,charge_schedules
This will give you:
{
"pods": [
{
"id": ***,
"name": null,
"ppid": "PSL-***",
"payg": false,
"home": true,
"public": false,
"evZone": false,
"location": {
"lat": ***,
"lng": ***
},
"address_id": ***,
"description": "",
"commissioned_at": "2022-01-25T09:00:00+00:00",
"created_at": "2022-02-13T10:39:05+00:00",
"last_contact_at": "2022-02-14T14:18:13+00:00",
"contactless_enabled": false,
"unit_id": ***,
"timezone": "UTC",
"model": {
"id": ***,
"name": "***",
"vendor": "Pod Point",
"supports_payg": false,
"supports_ocpp": false,
"supports_contactless": false,
"image_url": null
},
"price": null,
"statuses": [
{
"id": 1,
"name": "Available",
"key_name": "available",
"label": "Available",
"door": "A",
"door_id": 1
}
],
"charges": [],
"unit_connectors": [
{
"connector": {
"id": ***,
"door": "A",
"door_id": 1,
"power": 7,
"current": 32,
"voltage": 230,
"charge_method": "Single Phase AC",
"has_cable": false,
"socket": {
"type": "IEC 62196-2 Type 2",
"description": "Type 2 socket",
"ocpp_name": "sType2",
"ocpp_code": 3
}
}
}
],
"charge_schedules": [
{
"uid": "***",
"start_day": 1,
"start_time": "06:00:00",
"end_day": 2,
"end_time": "00:00:00",
"status": {
"is_active": false
}
},
{
"uid": "***",
"start_day": 2,
"start_time": "02:00:00",
"end_day": 2,
"end_time": "07:00:00",
"status": {
"is_active": false
}
},
{
"uid": "***",
"start_day": 3,
"start_time": "02:00:00",
"end_day": 3,
"end_time": "07:00:00",
"status": {
"is_active": false
}
},
{
"uid": "***",
"start_day": 4,
"start_time": "02:00:00",
"end_day": 4,
"end_time": "07:00:00",
"status": {
"is_active": false
}
},
{
"uid": "***",
"start_day": 5,
"start_time": "02:00:00",
"end_day": 5,
"end_time": "07:00:00",
"status": {
"is_active": false
}
},
{
"uid": "***",
"start_day": 6,
"start_time": "02:00:00",
"end_day": 6,
"end_time": "07:00:00",
"status": {
"is_active": false
}
},
{
"uid": "***",
"start_day": 7,
"start_time": "02:00:00",
"end_day": 7,
"end_time": "07:00:00",
"status": {
"is_active": false
}
}
]
}
],
"meta": {
"pagination": {
"current_page": 1,
"per_page": 1,
"page_count": 1,
"item_count": 1
}
}
}
The possible key_name values are:
'out-of-service',
'available',
'unavailable',
'charging'
Off the back of these two APIs, plus the API for updating charge schedules I feel there is enough here for me to start working on an integration. I’ll start this tonight, looking at setting it up through HACS to get the status of the charger with the aim of exposing energy use historically in a way that the home assistant energy dashboard can understand.
Wish me luck!
This is awesome, thanks Matt. If you need help with any testing, I’d be very happy to help.
Sounds great, keep us posted.
Are these APIs promoted by pod point, or is there an element of reverse engineering going on using an API for something else?
Second the testing above, I have a charger outside ready for this.
Thanks.
This is great. Will watch for further updates! The podpoint app is definitely lacking. For now, I’ve more or less bypassed the whole thing with a combination of Shellys. I have an em that measures the house tail on one side and the charger tail on the other, so get the power through that and I stuck a shelly 1 inside the podpoint. There are pins on the board that give +12v and ground and then there are 2 pins that the optional lock connects to. I’m using that to activate charging via ha on a schedule for cheap nightly charging and I can easily override it too.
The APIs aren’t promoted by PodPoint, but looking at the node libraries they are publicly publishing I have ‘reverse engineered’ the URLs.
It’s using their official APIs in a supported way, the question really is how STABLE the API is. By which I mean, how often are they making breaking changes to the v3 and v4 APIs which may break this. Only time will tell I think.
So, I am progressing well with my custom component for Pod Point. One thing I have noticed from the APIs is that it couts the vehicle being plugged in as ‘Charging’ even if not drawing power. Once I’ve release I’ll look at ways of deciding if it is actually charging vs just connected based on the power usage going up.
At the moment I will output a sensor for each of the pods on your account along with the status of that pod.
The sensor has these attributes:
{
"base_api_version": "v4",
"connector": 123,
"connector_charge_method": "Single Phase AC",
"connector_current": 32,
"connector_door": "A",
"connector_door_id": 1,
"connector_has_cable": False,
"connector_power": 7,
"connector_socket": "Type 2 socket",
"connector_socket_ocpp_code": 3,
"connector_socket_ocpp_name": "sType2",
"connector_socket_type": "IEC 62196-2 Type 2",
"connector_voltage": 230,
"contactless_enabled": False,
"date_commissioned": "2022-01-25T09:00:00+00:00",
"date_created": "2022-02-13T10:39:05+00:00",
"ev_zone": False,
"home": True,
"last_contacted_at": "2022-02-15T11:18:56+00:00",
"lat": 0.12345,
"lng": 2.45678901,
"model": "S7-UC-03-ACA",
"payg": False,
"pod_id": 12234,
"price": None,
"psl": "PSL-123456",
"public": False,
"status": 2,
"status_door": "A",
"status_door_id": 1,
"status_name": "Charging",
"status_label": "Charging",
"status_key_name": "charging",
"timezone": "UTC",
"unit_id": 123456,
}
This is basically all of the information I can get for a given pod
The main ‘state’ is the ‘status_name’ value.
IF you have a device on your account with multiple connectors it picks the most ‘important’ status across all connectors
EG:
1 Charging & 1 Available = Charging
1 Charging & 1 Out of Service = Out of Service
1 Charging & 1 RandomUnknownStatus = RandomUnknownStatus
I’ll include a full roadmap on the repository when I’ve got this ready for others to test (hopefully the next few days)
I have discovered that you can update the schedules by PUT-ing to
https://api.pod-point.com/v4/units/******/charge-schedules
with the data:
{
"data": [
{
"uid": "24b342c8-8cbb-11ec-xxxx-0a9268fc07a0",
"start_day": 1,
"start_time": "00:00:00",
"end_day": 2,
"end_time": "00:00:00",
"status": {
"is_active": false
}
},
{
"uid": "24b8aeac-8cbb-11ec-xxxx-0a9268fc07a0",
"start_day": 2,
"start_time": "02:00:00",
"end_day": 2,
"end_time": "07:00:00",
"status": {
"is_active": false
}
},
{
"uid": "24bb6606-8cbb-11ec-xxxx-0a9268fc07a0",
"start_day": 3,
"start_time": "02:00:00",
"end_day": 3,
"end_time": "07:00:00",
"status": {
"is_active": false
}
},
{
"uid": "24be0168-8cbb-11ec-xxxx-0a9268fc07a0",
"start_day": 4,
"start_time": "02:00:00",
"end_day": 4,
"end_time": "07:00:00",
"status": {
"is_active": false
}
},
{
"uid": "24c089b0-8cbb-11ec-xxxx-0a9268fc07a0",
"start_day": 5,
"start_time": "02:00:00",
"end_day": 5,
"end_time": "07:00:00",
"status": {
"is_active": false
}
},
{
"uid": "24c346aa-8cbb-11ec-xxxx-0a9268fc07a0",
"start_day": 6,
"start_time": "02:00:00",
"end_day": 6,
"end_time": "07:00:00",
"status": {
"is_active": false
}
},
{
"uid": "24c6bf10-8cbb-11ec-xxxx-0a9268fc07a0",
"start_day": 7,
"start_time": "02:00:00",
"end_day": 7,
"end_time": "07:00:00",
"status": {
"is_active": false
}
}
]
}
Which I have confirmed will update the schedule for a given pod. Currently I’m thinking of a switch which when you turn it ‘off’ will create a schedule where no charging is allowed, effectively disabling the pod, and when you turn it on, disables all of the schedules, allowing charging. What does everyone think?
This will effectively set a schedule on the pod of “00:00:00” → “00:00:01” for each day and ‘enable’ that when the switch is off, and ‘disable’ it for when the switch is on.
This will override any schedule in the app though, how do we feel about that?
Seems like a reasonable solution to me. Will obviously need some testing to ensure reliability but can’t see any reason why it wouldn’t be ok.
Okay everyone, I’ve got a v0.0.1-alpha to test
Quick question, does anyone have a tethered solo / solo3 on their account? I’ve only got a universal so would be interested to see what the difference is API-wise
Awesome news, very happy to do some testing. Not sure if mine is a Solo/Solo3 by it’s certainly tethered.