<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Andreas Ahrens's thoughts]]></title><description><![CDATA[Home automation, thoughts, code and snippets]]></description><link>https://andreasahrens.se/</link><image><url>http://andreasahrens.se/favicon.png</url><title>Andreas Ahrens&apos;s thoughts</title><link>https://andreasahrens.se/</link></image><generator>Ghost 3.42</generator><lastBuildDate>Mon, 13 Apr 2026 19:46:39 GMT</lastBuildDate><atom:link href="https://andreasahrens.se/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Home Assistant TeslaFi integration]]></title><description><![CDATA[I wanted to get info from my TelsaFi account to my Home assistant installation, but couldn't find a workable example so I adapted what I could find.]]></description><link>https://andreasahrens.se/home-assistant-teslafi-integration/</link><guid isPermaLink="false">638c8cba6cd5f100011daaa2</guid><category><![CDATA[Tesla]]></category><category><![CDATA[TeslaFi]]></category><category><![CDATA[Home Assistant]]></category><category><![CDATA[YAML]]></category><dc:creator><![CDATA[Andreas Ahrens]]></dc:creator><pubDate>Sun, 04 Dec 2022 12:17:28 GMT</pubDate><media:content url="http://andreasahrens.se/content/images/2022/12/TeslaFi-integration-2.png" medium="image"/><content:encoded><![CDATA[<img src="http://andreasahrens.se/content/images/2022/12/TeslaFi-integration-2.png" alt="Home Assistant TeslaFi integration"><p>I wanted to get info from my TelsaFi account to my Home assistant installation, but couldn't find a workable example. The example from <a href="https://dancwilliams.com/monitoring-teslafi-in-home-assistant/">Dan C Williams</a> 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. </p><p>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 <strong>configuration.yaml</strong>:</p><pre><code class="language-YAML">rest: !include rest.yaml
template: !include template.yaml
</code></pre><p>I wanted to get all info imported so I can then pick what I want to use. I put the following into my <strong>rest.yaml</strong> file:</p><pre><code class="language-YAML"># 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
</code></pre><p>The token is best stored in a <strong>secrets.yaml</strong> file:</p><pre><code class="language-YAML">teslafi_token: TOKENFROMTESLAFI_NOT_FROMTESLA</code></pre><p>Now 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. </p><figure class="kg-card kg-image-card"><img src="http://andreasahrens.se/content/images/2022/12/image.png" class="kg-image" alt="Home Assistant TeslaFi integration"></figure><p>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).</p><figure class="kg-card kg-image-card"><img src="http://andreasahrens.se/content/images/2022/12/image-1.png" class="kg-image" alt="Home Assistant TeslaFi integration" srcset="http://andreasahrens.se/content/images/size/w600/2022/12/image-1.png 600w, http://andreasahrens.se/content/images/2022/12/image-1.png 828w" sizes="(min-width: 720px) 720px"></figure><p>In my <strong>template.yaml</strong> file I entered the following:</p><pre><code class="language-YAML">#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: energy</code></pre><p>By 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.</p><p>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:</p><pre><code class="language-YAML">  - 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:gauge</code></pre><p>The final result, with some modifications of friendly names in the GUI, is below:</p><figure class="kg-card kg-image-card"><img src="http://andreasahrens.se/content/images/2022/12/image-6.png" class="kg-image" alt="Home Assistant TeslaFi integration" srcset="http://andreasahrens.se/content/images/size/w600/2022/12/image-6.png 600w, http://andreasahrens.se/content/images/size/w1000/2022/12/image-6.png 1000w, http://andreasahrens.se/content/images/2022/12/image-6.png 1521w" sizes="(min-width: 720px) 720px"></figure>]]></content:encoded></item><item><title><![CDATA[Starting clean]]></title><description><![CDATA[<p>I had some problems with my previous installation of Ghost on DigitalOcean, so I opted to self-host and start anew. </p>]]></description><link>https://andreasahrens.se/test-post/</link><guid isPermaLink="false">604531be55bc5b0001afc8e9</guid><dc:creator><![CDATA[Andreas Ahrens]]></dc:creator><pubDate>Sun, 07 Mar 2021 20:04:18 GMT</pubDate><content:encoded><![CDATA[<p>I had some problems with my previous installation of Ghost on DigitalOcean, so I opted to self-host and start anew. </p>]]></content:encoded></item></channel></rss>