Andei entretido a lêr umas coisas e deparei-me com algo interessante que pode servir para quem anda de carro e tem certas rotinas para chegar ao trabalho.
Muitas das vezes, pelo menos a mim acontece-me, vou pela auto estrada e a meio do caminho há um acidente e tenho que estar na fila, ou então sei pelo rádio que há x acidente no sitio y, e tenho que arranjar alternativas… Alternativas essas que podem ser muito em cima do Joelho, o que nos faz chegar atrasados.
O que vou aqui partilhar, mais uma vez, usa a API da google, o google travel time, que com alguma matemática à mistura torna a coisa útil, contudo pode ser crucial saber que a informação é actualizada, apenas, de 5 em 5 minutos (obrigado @Maddoctor por esta info), mas vamos então ao que interessa.
Caso ainda não tenhas criado uma api para usares o google travel time terás que o fazer. Se tiveres dúvidas, pergunta.
Ok, algumas considerações:
- precisamos de converter as horas para decimal, ou seja, uma hora tem 60 minutos, mas vamos dividi-la em 100.
Exemplos:
- 10:15, faríamos as contas da seguinte maneira → 15 / 60 x 100 = 25 → 10.25
- 10:30 → 30 / 60 x 100 = 50 → 10.50
Vamos então imaginar o seguinte cenário:
No trabalho, entramos às 08:00 da manhã e sabemos que temos que sair de casa às 07:30 para chegarmos a horas.
Então a nossa rotina seria sair de casa todos os dias a mesma hora. Havendo um acidente no caminho, chegaríamos atrasados. Vamos então agora fazer para que o Home Assistant nos informe sempre a que horas devemos sair de casa, tendo em conta o estado do trânsito.
Código em modo package (altera as coordenadas GPS para as tuas), se não sabes como usar package consulta AQUI
homeassistant:
zone:
- name: trabalho
latitude: 36.123456
longitude: -76.123456
radius: 300
icon: mdi:domain
- name: casa
latitude: 35.123456
longitude: -75.123456
radius: 300
icon: mdi:home
binary_sensor:
- platform: workday
country: PT
workdays: [mon, tue, wed, thu, fri]
sensors:
- platform: time_date
- platform: uptime
name: "Tempo HA"
unit_of_measurement: minutes
- platform: google_travel_time
name: tempo trabalho
api_key: !secret google_maps_api_key
origin: zone.home
destination: zone.work
# Se entramos às 08:00 e queremos ser avisados 10 minutos antes da hora de saída, "fazemos de conta" que entramos às 7:50 que, pelas contas que fizemos acima são: 50 / 60 x 100 = 83 -> 7.83
- platform: template
sensors:
tempo ate ao trabalho:
value_template: >
{% set t = strptime(states.sensor.time.state,'%H:%M') %}
{{ ( t.hour + t.minute / 60 ) > ( 7.83 - states.sensor.tempo_trabalho.state | int / 60) }}
friendly_name: 'Hora de sair para o trabalho'
automations
- alias: "Notifica-me quando devo sair para o trabalho"
trigger:
- platform: state
entity_id: sensor.tempo_ate_ao_trabalho
to: 'True'
from: 'False'
condition:
- condition: numeric_state
entity_id: sensor.tempo_ha
above: 1
- condition: state
entity_id: binary_sensor.workday_sensor
state: 'on'
action:
- service: notify.telegram
data:
title: "Hora de dar corda aos sapatos"
message: "Vai vergar a mola que está quase na hora"
Poderás trocar a parte do action, para em vez de seres notificado no telegram ou outro notificador, seres antes notificado via TTS que é o que para mim faz mais sentido caso estejas em casa.
Com esta automação tens uma ajuda se tens que sair mais cedo ou não…
Isto dá para fazer de outras maneiras. Se usas de outra forma partilha conosco.
Além disso pode ser facilmente alterado para usar outras plataformas, como o waze.