I wanted to get info from my TelsaFi account to my Home assistant installation, but couldn't find a workable example. The example from Dan C Williams got me started, but didn't seem to work right in the latest installation of Home Assistant (I'm on 2022.11.4 at the moment). I started with Dan's exampels and got it working eventually.
I always put my configs into separate YAML files to make the config files more readable and easier to find things in. Therefore I started off by including two new YAML files by putting the following into my configuration.yaml:
rest: !include rest.yaml
template: !include template.yaml
I wanted to get all info imported so I can then pick what I want to use. I put the following into my rest.yaml file:
# TeslaFi
- resource: "https://www.teslafi.com/feed.php"
scan_interval: 60
method: POST
params:
token: !secret teslafi_token
command: lastGood
sensor:
- name: teslafi_report
unique_id: "somerandomid"
value_template: "{{ value_json.display_name }}"
json_attributes:
- api_version
- autopark_state
- autopark_state_v2
- autopark_style
- battery_current
- battery_heater
- battery_heater_on
- battery_level
- battery_range
- calendar_enabled
- calendar_supported
- car_type
- car_version
- carState
- center_display_state
- charge_current_request
- charge_current_request_max
- charge_enable_request
- charge_energy_added
- charge_limit_soc
- charge_limit_soc_max
- charge_limit_soc_min
- charge_limit_soc_std
- charge_miles_added_ideal
- charge_miles_added_rated
- charge_port_cold_weather_mode
- charge_port_door_open
- charge_port_latch
- charge_port_led_color
- charge_rate
- charge_to_max_range
- chargeNumber
- charger_actual_current
- charger_phases
- charger_pilot_current
- charger_power
- charger_voltage
- charging_state
- climate_keeper_mode
- color
- conn_charge_cable
- currency
- data_id
- Date
- defrost_mode
- df
- display_name
- dr
- driveNumber
- driver_temp_setting
- driver_temp_settingF
- elevation
- est_battery_range
- eu_vehicle
- exterior_color
- fan_status
- fast_charger_brand
- fast_charger_present
- fast_charger_type
- fd_window
- fp_window
- ft
- gps_as_of
- gui_24_hour_time
- gui_charge_rate_units
- gui_distance_units
- gui_range_display
- gui_temperature_units
- heading
- homelink_nearby
- id
- id_s
- ideal_battery_range
- idleNumber
- idleTime
- in_service
- inside_temp
- inside_tempF
- is_auto_conditioning_on
- is_climate_on
- is_front_defroster_on
- is_preconditioning
- is_rear_defroster_on
- is_user_present
- last_autopark_error
- latitude
- left_temp_direction
- location
- locked
- longitude
- managed_charging_active
- managed_charging_start_time
- managed_charging_user_canceled
- max_avail_temp
- max_range_charge_counter
- maxRange
- measure
- min_avail_temp
- motorized_charge_port
- newVersion
- newVersionStatus
- not_enough_power_to_heat
- Notes
- notifications_enabled
- notifications_supported
- odometer
- odometerF
- option_codes
- outside_temp
- outside_tempF
- parsed_calendar_supported
- passenger_temp_setting
- perf_config
- pf
- polling
- power
- pr
- rangeDisplay
- rd_window
- rear_seat_heaters
- remote_start
- remote_start_enabled
- remote_start_supported
- rhd
- right_temp_direction
- roof_color
- rp_window
- rt
- scheduled_charging_pending
- scheduled_charging_start_time
- seat_heater_left
- seat_heater_rear_center
- seat_heater_rear_left
- seat_heater_rear_left_back
- seat_heater_rear_right
- seat_heater_rear_right_back
- seat_heater_right
- seat_type
- sentry_mode
- shift_state
- side_mirror_heaters
- sleepNumber
- smart_preconditioning
- speed
- spoiler_type
- state
- steering_wheel_heater
- sun_roof_installed
- sun_roof_percent_open
- sun_roof_state
- temperature
- third_row_seats
- time_to_full_charge
- timestamp
- trip_charging
- usable_battery_level
- user_charge_enable_request
- valet_mode
- valet_pin_needed
- vehicle_id
- vehicle_name
- vin
- wheel_type
- wiper_blade_heater
The token is best stored in a secrets.yaml file:
teslafi_token: TOKENFROMTESLAFI_NOT_FROMTESLANow I have all the data in Home Assistant, but not in a usable form. I just get the car itself, with no usable data in the front end.

You can click the Eye icon and expand the attributes, you then see all values that you can use in the front end using template sensors (below).

In my template.yaml file I entered the following:
#Tesla sensors
- binary_sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' HVAC Status' }}"
state: "{{ state_attr('sensor.teslafi_report', 'is_climate_on') }}"
icon: mdi:temperature-celsius
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Status' }}"
state: "{{ state_attr('sensor.teslafi_report', 'carState') }}"
icon: mdi:battery-alert
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Charge limit' }}"
state: "{{ state_attr('sensor.teslafi_report', 'charge_limit_soc') }}"
unit_of_measurement: "%"
icon: mdi:battery-90
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Last Reading' }}"
state: "{{ as_datetime(state_attr('sensor.teslafi_report', 'Date')).astimezone().isoformat() }}"
device_class: timestamp
icon: mdi:clock-outline
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Odometer' }}"
state: "{{ (state_attr('sensor.teslafi_report', 'odometer') | float *1.60934) | round(1) }}"
unit_of_measurement: "km"
icon: mdi:counter
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Battery' }}"
state: "{{ state_attr('sensor.teslafi_report', 'battery_level') | int }}"
unit_of_measurement: "%"
icon: mdi:battery-80
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Battery Range' }}"
state: "{{ (state_attr('sensor.teslafi_report', 'battery_range') | float*1.60934) | round(1) }}"
unit_of_measurement: "km"
icon: mdi:gauge
- binary_sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Battery heater' }}"
state: "{{ state_attr('sensor.teslafi_report', 'battery_heater_on') }}"
icon: mdi:radiator
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Version' }}"
state: "{{ state_attr('sensor.teslafi_report', 'car_version') }}"
icon: mdi:car-connected
- binary_sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Charge port cold weather mode' }}"
state: "{{ state_attr('sensor.teslafi_report', 'charge_port_cold_weather_mode') }}"
icon: mdi:snowflake-alert
- binary_sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Charge port door open' }}"
state: "{{ state_attr('sensor.teslafi_report', 'charge_port_door_open') }}"
icon: mdi:ev-plug-ccs2
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Charge power' }}"
state: "{{ state_attr('sensor.teslafi_report', 'charger_power') }}"
unit_of_measurement: "kW"
icon: mdi:ev-station
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Charge voltage' }}"
state: "{{ state_attr('sensor.teslafi_report', 'charger_voltage') }}"
unit_of_measurement: "V"
icon: mdi:flash-triangle-outline
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Charge state' }}"
state: "{{ state_attr('sensor.teslafi_report', 'charge_state') }}"
icon: mdi:battery-charging-80
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Driver temp setting' }}"
state: "{{ state_attr('sensor.teslafi_report', 'driver_temp_setting') }}"
icon: mdi:temperature-celsius
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Inside temperature' }}"
state: "{{ state_attr('sensor.teslafi_report', 'inside_temp') }}"
icon: mdi:temperature-celsius
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Outside temperature' }}"
state: "{{ state_attr('sensor.teslafi_report', 'outside_temp') }}"
icon: mdi:temperature-celsius
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Time to full charge' }}"
state: "{{ state_attr('sensor.teslafi_report', 'time_to_full_charge') }}"
unit_of_measurement: "h"
icon: mdi:battery-clock
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Usable battery level' }}"
state: "{{ state_attr('sensor.teslafi_report', 'usable_battery_level') }}"
unit_of_measurement: "%"
icon: mdi:battery-charging-wireless
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' VIN' }}"
state: "{{ state_attr('sensor.teslafi_report', 'vin') }}"
icon: mdi:car-outline
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Charge energy added' }}"
state: "{{ state_attr('sensor.teslafi_report', 'charge_energy_added') }}"
icon: mdi:car-arrow-left
unit_of_measurement: "kWh"
state_class: total_increasing
device_class: energyBy adding the unit, state class and device class to the last charge energy, we can also use it as an individual device in the energy dashboard.
Note that range and odometer data is in Miles by default - being from Europe, I naturally wanted them in km instead. If you use miles, use the below substitutions:
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Odometer' }}"
state: "{{ state_attr('sensor.teslafi_report', 'odometer') | round(1) }}"
unit_of_measurement: "mi"
icon: mdi:counter
- sensor:
- name: "{{ state_attr('sensor.teslafi_report', 'vehicle_name') + ' Battery Range' }}"
state: "{{ state_attr('sensor.teslafi_report', 'battery_range') | round(1) }}"
unit_of_measurement: "mi"
icon: mdi:gaugeThe final result, with some modifications of friendly names in the GUI, is below:
