Files
dotfiles/systems/brain/services/home_assistant/gps_location.yaml
2026-01-22 21:26:38 -05:00

108 lines
3.7 KiB
YAML

automation:
- id: update_home_location_from_gps
alias: Update Home Location from GPS
description: Updates the Home zone location based on GPS coordinates from Modbus
trigger:
- platform: state
entity_id:
- sensor.gps_latitude
- sensor.gps_longitude
condition:
- condition: template
value_template: >-
{% set lat = states('sensor.gps_latitude')|float(0) %}
{% set lon = states('sensor.gps_longitude')|float(0) %}
{% set fix = states('sensor.gps_fix')|int(0) %}
{{ lat != 0 and lon != 0 and fix > 0 }}
action:
- service: homeassistant.set_location
data:
latitude: "{{ states('sensor.gps_latitude') }}"
longitude: "{{ states('sensor.gps_longitude') }}"
- id: update_home_location_on_startup
alias: Update Home Location on Startup
description: Sets home location from last known GPS coordinates on HA restart
trigger:
- platform: homeassistant
event: start
condition:
- condition: template
value_template: >-
{% set lat = states('sensor.gps_latitude')|float(0) %}
{% set lon = states('sensor.gps_longitude')|float(0) %}
{{ lat != 0 and lon != 0 }}
action:
- delay:
seconds: 10
- service: homeassistant.set_location
data:
latitude: "{{ states('sensor.gps_latitude') }}"
longitude: "{{ states('sensor.gps_longitude') }}"
- id: refresh_weather_hourly
alias: Refresh Weather Hourly
description: Forces weather to refresh hourly with current GPS location
trigger:
- platform: time_pattern
hours: "/1"
condition:
- condition: state
entity_id: binary_sensor.gps_fix_available
state: "on"
action:
- service: homeassistant.update_entity
target:
entity_id: weather.home
template:
- sensor:
- name: GPS Location
unique_id: gps_location
state: >-
{% set lat = states('sensor.gps_latitude')|float(0) %}
{% set lon = states('sensor.gps_longitude')|float(0) %}
{% if lat != 0 and lon != 0 %}
{{ lat }}, {{ lon }}
{% else %}
unavailable
{% endif %}
attributes:
latitude: "{{ states('sensor.gps_latitude') }}"
longitude: "{{ states('sensor.gps_longitude') }}"
speed: "{{ states('sensor.gps_speed') }}"
course: "{{ states('sensor.gps_course') }}"
altitude: "{{ states('sensor.gps_altitude') }}"
satellites: "{{ states('sensor.gps_satellites') }}"
fix: "{{ states('sensor.gps_fix') }}"
last_updated: "{{ now().isoformat() }}"
# Weather sensors based on current GPS location
- name: Current Weather Temperature
unique_id: current_weather_temperature
unit_of_measurement: "°F"
device_class: temperature
state: "{{ state_attr('weather.home', 'temperature') }}"
- name: Current Weather Humidity
unique_id: current_weather_humidity
unit_of_measurement: "%"
device_class: humidity
state: "{{ state_attr('weather.home', 'humidity') }}"
- name: Current Weather Condition
unique_id: current_weather_condition
state: "{{ states('weather.home') }}"
- name: Current Weather Wind Speed
unique_id: current_weather_wind_speed
unit_of_measurement: "mph"
device_class: wind_speed
state: "{{ state_attr('weather.home', 'wind_speed') }}"
- binary_sensor:
- name: GPS Fix Available
unique_id: gps_fix_available
device_class: connectivity
state: "{{ states('sensor.gps_fix')|int(0) > 0 }}"