Pod Point EV Charger Integration

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! :smiley:

3 Likes

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)

1 Like

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?

1 Like

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 :smiley:

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.

It (for the most part) supports having multiple pods on your account (if someone does and is willing to test, that would be great).

You can add the integration via HACS as a custom repo. It’s available here:

I have published my current version as 0.0.1-alpha

Currently looks like this:

Since this screen shot was taken, energy sensors and total charge sensors have been added

CHARGING DISABLED:

CHARGING ENABLED:

Currently supported being added via the UI

1 Like

Seems all good so far. Can I just check this is what you expect in the app when the charger is set to active from the integration?

Now just waiting for the wife to get home so I can do some real testing :slight_smile:

So, if you have not ‘triggered’ the schedule then it reads what is there. Your schedule is not active which means charging is allowed

If it was active it’s currently 00:00:00 today to 00:00:00 tomorrow. So it would also be shown as ‘on’

The idea of the switch is that right now, if you plugged in, it would charge. If you toggle the switch off, it sets a new schedule of 00:00:00 - 00:00:01 today (1 second of charge time) and enables it.

Therefore when you plug in to the pod it won’t actually charge.

When you turn the switch ‘on’ again, it keeps that schedule (00:00:00-00:00:01) but disables to allow charging outside of that schedule. When plugging in with the switch toggled on in the integration will allow charging to happen.

Pairing this switch with something like an octopus to riff that has random cheaper times you can ensure you only toggle the switch on for the cheap periods and off when it’s more expensive.

Likewise for an economy 7, or if you want to disable it whilst on holiday etc

Would you be willing to share your credentials with me so that I can test on your account? I’d like to verify the tether

Alternatively I can talk you through setting up the Postman collection of toys be willing to send me your API responses?

Additionally, can you send me the ‘state’ of your sensor in HA? Ideally the full attributes list that gets set

Happy to import a Postman collection and give you some responses. Did you want to email me on [email protected] to carry this on?

That makes sense to me now, the wording in the Pod Point app can be a little confusing. They should just say if the schedule is off that the charger is always active that day.

:+1: just putting the kids to bed and will send something over

Sent over an email with the postman collection and some instructions :slight_smile:

Thanks to @danielsmith89 I can confirm that this works with the Solo and Solo 3 pod points, both tethered and universal :slight_smile:

I’m going to look at adding the usage of charging to the energy dashboard in HA. One quirk of the API though is I only get a single charge amount per-session (11kw) and a start and end time.

The start/end seems to be when you plug/unplug the cable rather than when it actually starts sending power. In the instance where.

REQUEST FOR FEEDBACK - If you plug in on say Friday, and unplug on Saturday. When would you like the 11kw counter? on the start day or end day? Somewhere in the middle?