Or even simpler:
secrets.yaml:
tibber: '{"email":"YourEMAIL","password":"YourPASSWORD"}'
config (as config package)
rest:
- resource: https://app.tibber.com/login.credentials
scan_interval: 21600 #6h
timeout: 60
method: POST
payload: !secret tibber
headers:
Content-Type: "application/json"
sensor:
- name: "Tibber API Access Token"
value_template: "Bearer {{ value_json.token }}"
- resource: https://app.tibber.com/v4/gql
method: POST
payload: '{ "query": "{ me { homes { electricVehicles { lastSeen battery { percent }}}}}"}'
headers:
Authorization: "{{ states.sensor.tibber_api_access_token.state }}"
Content-Type: "application/json"
scan_interval: 600 #10m
sensor:
- name: "Polestar 2 SOC"
unique_id: polestar2_soc
value_template: "{{ value_json.data.me.homes[0].electricVehicles[0].battery.percent | int }}"
unit_of_measurement: "%"
icon: mdi:car-electric
device_class: battery
- name: "Polestar 2 Range"
unique_id: polestar2_range
value_template: "{{ (value_json.data.me.homes[0].electricVehicles[0].battery.percent / 100 * 487) | int }}"
unit_of_measurement: "km"
icon: mdi:car-electric
device_class: distance
- name: "Polestar 2 SOC Last Update"
unique_id: polestar2_soc_lastupdate
device_class: timestamp
value_template: "{{ value_json.data.me.homes[0].electricVehicles[0].lastSeen | as_datetime | as_local }}"