Skip to content

Instantly share code, notes, and snippets.

@ditdafivo
Forked from jrgutier/abrp-rivian-ha.yaml
Last active March 26, 2024 04:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ditdafivo/1026600450f4963d1b81e9cc1740923b to your computer and use it in GitHub Desktop.
Save ditdafivo/1026600450f4963d1b81e9cc1740923b to your computer and use it in GitHub Desktop.
- id: '1710304207312'
alias: ABRP R1S Telemetry - Standard Update
description: ''
trigger:
- platform: state
entity_id:
- sensor.abrp_r1s_misc_telemetry_last_update
condition:
- condition: not
conditions:
- condition: state
entity_id: timer.abrp_r1s_telemetry_update_holdoff_timer
state: active
- condition: state
state: unknown
entity_id: sensor.abrp_r1s_telemetry_last_update
- condition: state
entity_id: sensor.abrp_r1s_telemetry_last_update
state: unavailable
action:
- service: timer.start
target:
entity_id: timer.abrp_r1s_telemetry_update_holdoff_timer
data: {}
- service: rest_command.update_abrp_r1s
data: {}
mode: single
- id: '1710389395198'
alias: ABRP R1S Telemetry - Delayed Update
description: ''
trigger:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.abrp_r1s_telemetry_update_holdoff_timer
condition:
- condition: state
entity_id: input_boolean.abrp_r1s_telemetry_update_holdoff_retrigger_flag
state: 'on'
action:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.abrp_r1s_telemetry_update_holdoff_retrigger_flag
data: {}
- service: rest_command.update_abrp_r1s
data: {}
mode: single
- id: '1710390329117'
alias: ABRP R1S Telemetry Holdoff Retrigger
description: ''
trigger:
- platform: state
entity_id:
- sensor.abrp_r1s_misc_telemetry_last_update
condition:
- condition: state
entity_id: timer.abrp_r1s_telemetry_update_holdoff_timer
state: active
action:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.abrp_r1s_telemetry_update_holdoff_retrigger_flag
data: {}
mode: single
- id: '1710994587428'
alias: ABRP R1S Telemetry - SoC update
description: ''
trigger:
- platform: state
entity_id:
- sensor.abrp_r1s_soc_last_update
condition:
- condition: not
conditions:
- condition: state
state: unknown
entity_id: sensor.abrp_r1s_telemetry_last_update
- condition: state
entity_id: sensor.abrp_r1s_telemetry_last_update
state: unavailable
action:
- service: timer.start
target:
entity_id: timer.abrp_r1s_telemetry_update_holdoff_timer
data: {}
- service: timer.start
target:
entity_id: timer.abrp_r1s_unchanged_soc_timer
data: {}
- service: rest_command.update_abrp_r1s_with_power
data: {}
mode: single
- id: '1711115090605'
alias: ABRP R1S Telemetry - Zero Power Update
description: ''
trigger:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.abrp_r1s_unchanged_soc_timer
condition: []
action:
- service: rest_command.update_abrp_r1s_with_zero_power
data: {}
mode: single
{
"version": 1,
"minor_version": 1,
"key": "core.config_entries",
"data": {
"entries": [
{
"entry_id": "3e802be924d12c47e6d1bbd2e60c7536",
"version": 1,
"domain": "derivative",
"title": "R1S Power",
"data": {},
"options": {
"name": "R1S Power",
"source": "sensor.r1s_pack_energy",
"round": 4.0,
"time_window": {
"hours": 0,
"minutes": 0,
"seconds": 0
},
"unit_time": "h"
},
"pref_disable_new_entities": false,
"pref_disable_polling": false,
"source": "user",
"unique_id": null,
"disabled_by": null
}
]
}
}
{
"version": 1,
"minor_version": 1,
"key": "input_boolean",
"data": {
"items": [
{
"id": "abrp_r1s_holdoff_retrigger_flag",
"name": "ABRP R1S Telemetry Update Holdoff Retrigger Flag"
}
]
}
}
{
"version": 1,
"minor_version": 1,
"key": "input_number",
"data": {
"items": [
{
"id": "r1s_manual_soh",
"min": 0.0,
"max": 100.0,
"name": "R1S Manual SoH",
"step": 0.1,
"mode": "slider",
"unit_of_measurement": "%"
},
{
"id": "abrp_r1s_power_consumption_telemetry_multiplier",
"min": 0.0,
"max": 2.0,
"name": "ABRP R1S Power Consumption Telemetry Multiplier",
"step": 0.001,
"mode": "box"
},
{
"id": "abrp_r1s_power_charging_telemetry_multiplier",
"min": 0.0,
"max": 2.0,
"name": "ABRP R1S Power Charging Telemetry Multiplier",
"mode": "box",
"step": 0.001
}
]
}
}
{
"version": 1,
"minor_version": 1,
"key": "timer",
"data": {
"items": [
{
"id": "abrp_r1s_telemetry_update_holdoff_timer",
"name": "ABRP R1S Telemetry Update Holdoff Timer",
"duration": "0:00:05",
"restore": false
},
{
"id": "abrp_r1s_unchanged_soc_timer",
"name": "ABRP R1S Unchanged SoC Timer",
"duration": "0:02:00",
"restore": false
}
]
}
}
rest_command:
update_abrp_r1s:
url: >
{% set params = states('sensor.abrp_r1s_common_telemetry_parameters') %}
{{states('sensor.abrp_r1s_common_telemetry_prefix')}}&tlm={{'{'}}{{params}}{{'}'}}
method: POST
headers:
authorization: !secret APIKEY_abrp
verify_ssl: true
update_abrp_r1s_with_power:
url: >
{% set params = states('sensor.abrp_r1s_power_telemetry_parameters') %}
{{states('sensor.abrp_r1s_common_telemetry_prefix')}}&tlm={{'{'}}{{params}}{{'}'}}
method: POST
headers:
authorization: !secret APIKEY_abrp
verify_ssl: true
update_abrp_r1s_with_zero_power:
url: >
{% set params = states('sensor.abrp_r1s_zero_power_telemetry_parameters') %}
{{states('sensor.abrp_r1s_common_telemetry_prefix')}}&tlm={{'{'}}{{params}}{{'}'}}
method: POST
headers:
authorization: !secret APIKEY_abrp
verify_ssl: true
template:
- sensor:
- name: "R1S Heading"
state: >
{{ ( 2 * ( (states('sensor.r1s_bearing')|float(0.0)) / 2 )|round() ) % 360 }}
- name: "R1S Latitude"
state: >
{{ state_attr('device_tracker.r1s_location','latitude') }}
- name: "R1S Longitude"
state: >
{{ state_attr('device_tracker.r1s_location','longitude') }}
- name: "R1S Pack Energy"
unit_of_measurement: "kWh"
state_class: measurement
state: >
{% set pack_useful_capacity = 131.0 %}
{% set pack_total_capacity = 135.0 %}
{% set pack_floor = pack_total_capacity - pack_useful_capacity %}
{% set soc = states("sensor.r1s_battery_state_of_charge")|float(0.0) / 100.0 %}
{% set soh = states("input_number.r1s_manual_soh")|float(0.0) / 100.0 %}
{{ ( soc * soh * pack_useful_capacity ) + pack_floor }}
- name: "ABRP R1S Misc Telemetry Last Update"
state: >
{% set last_changed = 0.0 %}
{% set last_changed = max(last_changed, states.sensor.r1s_latitude.last_changed|as_timestamp(0.0)) %}
{% set last_changed = max(last_changed, states.sensor.r1s_longitude.last_changed|as_timestamp(0.0)) %}
{% set last_changed = max(last_changed, states.sensor.r1s_heading.last_changed|as_timestamp(0.0)) %}
{% set last_changed = max(last_changed, states.sensor.r1s_speed.last_changed|as_timestamp(0.0)) %}
{% set last_changed = max(last_changed, states.binary_sensor.r1s_charging_status.last_changed|as_timestamp(0.0)) %}
{% set last_changed = max(last_changed, states.sensor.r1s_gear_selector.last_changed|as_timestamp(0.0)) %}
{% set last_changed = max(last_changed, states.sensor.r1s_odometer.last_changed|as_timestamp(0.0)) %}
{% set last_changed = max(last_changed, states.sensor.r1s_estimated_vehicle_range.last_changed|as_timestamp(0.0)) %}
{% set last_changed = max(last_changed, states.sensor.r1s_charging_energy_delivered.last_changed|as_timestamp(0.0)) %}
{{ last_changed }}
- name: "ABRP R1S SoC Last Update"
state: >
{% set last_changed = 0.0 %}
{% set last_changed = max(last_changed, states.sensor.r1s_battery_state_of_charge.last_changed|as_timestamp(0.0)) %}
{{ last_changed }}
- name: "ABRP R1S Telemetry Last Update"
state: >
{% set last_changed = 0.0 %}
{% set last_changed = max(last_changed, states("sensor.abrp_r1s_misc_telemetry_last_update")|float(0.0)) %}
{% set last_changed = max(last_changed, states("sensor.abrp_r1s_soc_last_update")|float(0.0)) %}
{{ last_changed }}
- name: "ABRP R1S Token"
state: !secret r1s_token_abrp
- name: "ABRP R1S Common Telemetry Prefix"
state: >
https://api.iternio.com/1/tlm/send?token={{ states('sensor.abrp_r1s_token') }}
- name: "ABRP R1S Common Telemetry Parameters"
state: >
{% set params = [] %}
{% set telem_last_upd = ((states('sensor.abrp_r1s_telemetry_last_update') | float(0.0))) | round(3) %}
{% set params = params + ['"utc":' ~ telem_last_upd ] %}
{% set params = params + ['"soc":' ~ states('sensor.r1s_battery_state_of_charge')] %}
{% set params = params + ['"lat":' ~ state_attr('device_tracker.r1s_location', 'latitude')|float(0.0)|round(6)] %}
{% set params = params + ['"lon":' ~ state_attr('device_tracker.r1s_location', 'longitude')|float(0.0)|round(6)] %}
{% set params = params + ['"heading":' ~ states('sensor.r1s_heading')] %}
{% set params = params + ['"speed":' ~ (0 if is_state('sensor.r1s_gear_selector', 'Park') else states('sensor.r1s_speed') | float(0.0) * 1.609344) | round(1)] %}
{% set is_charging = (1 if is_state('binary_sensor.r1s_charging_status', 'on') else 0) %}
{% set params = params + ['"is_charging":' ~ is_charging ] %}
{% set params = params + ['"is_parked":' ~ (1 if is_state('sensor.r1s_gear_selector', 'Park') else 0)] %}
{% set odometer = ((states('sensor.r1s_odometer') | float(0.0)) * 1.609344) | round(2) %}
{% set params = params + ['"odometer":' ~ odometer ] %}
{% set est_batt_range = ((states('sensor.r1s_estimated_vehicle_range') | float(0.0)) * 1.609344) | round(2) %}
{% set params = params + ['"est_battery_range":' ~ est_batt_range ] %}
{% set params = params + ['"car_model":"rivian:r1s:21:135:w22"'] %}
{{ params | join(',') }}
- name: "ABRP R1S Power Telemetry Parameters"
state: >
{% set params = [ states("sensor.abrp_r1s_common_telemetry_parameters") ] %}
{% set power = states('sensor.abrp_r1s_power_estimate') | float(0.0) | round(1) %}
{% set params = params + ['"power":' ~ power ] %}
{% if power < -19.2 and is_state('binary_sensor.r1s_charging_status', 'on') %}
{% set params = params + ['"is_dcfc":1'] %}
{% endif %}
{{ params | join(',') }}
- name: "ABRP R1S Zero Power Telemetry Parameters"
state: >
{% set params = [ states("sensor.abrp_r1s_common_telemetry_parameters") ] %}
{% set params = params + ['"power":0' ] %}
{{ params | join(',') }}
- name: "R1S Power Estimate"
device_class: power
state_class: measurement
unit_of_measurement: "kW"
state: >
{% if state_attr("timer.abrp_r1s_unchanged_soc_timer","finishes_at") != None %}
{{ states("sensor.r1s_power") | float(0.0) }}
{% else %}
0.0
{% endif %}
- name: "R1S Corrected Power Estimate"
device_class: power
state_class: measurement
unit_of_measurement: "kW"
state: >
{% if is_state('binary_sensor.r1s_charging_status', 'on') %}
{% set pwrscale = states('input_number.abrp_r1s_power_charging_telemetry_multiplier')|float(0.0) %}
{% else %}
{% set pwrscale = states('input_number.abrp_r1s_power_consumption_telemetry_multiplier')|float(0.0) %}
{% endif %}
{{ pwrscale * (states("sensor.r1s_power_estimate") | float(0.0)) }}
- name: "ABRP R1S Power Estimate"
device_class: power
state_class: measurement
unit_of_measurement: "kW"
state: >
{{ -1.0 * states("sensor.r1s_corrected_power_estimate") | float(0.0) }}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment