Uso traccar para rastrear meus veículos. É realmente muito bom. Mas tenho um problema: meu pai tem uma casa de praia e lá não tem sinal de operadora alguma. Então, é comum que ele chegue lá de carro e passe 5 dias. No HA, durante todos os dias estará sendo exibido algo como: “VELOCIDADE: 80km / STATUS: Em movimento”, uma vez que este foi o último sinal recebido na estrada, quando ainda havia sinal GPRS. Então fiz uma pequena automação para que, quando o carro estiver a 1h em movimento contínuo, que seja automaticamente mudado para “parado”. Caso o carro realmente ainda esteja em movimento não há problema algum: em alguns segundos chegará uma nova localização REAL e o carro “volta” a estar em movimento.
Para isto, fiz a seguinte automação (automation) YAML:
- alias: "Carro perdeu sinal"
initial_state: on
trigger:
platform: state
entity_id: sensor.carro_speed
for: 01:00:00
condition:
- condition: state
entity_id: sensor.carro_status
state: "Em movimento"
action:
- service: rest_command.enviar_localizacao_traccar
data:
id: "12345"
lat: "{{ state_attr('device_tracker.carro, 'latitude') }}"
lon: "{{ state_attr('device_tracker.carro, 'longitude') }}"
speed: "0"
O sensor.carro_status serve para facilitar (em vez de usar o atributto motion do device_traccer) e tem o seguinte código (sensor):
- platform: template
sensors:
carro_status:
friendly_name: "Estado"
icon_template: mdi:directions-fork
value_template: >-
{% if (states.device_tracker.carro.attributes.motion == true) %}
Em movimento
{% elif (states.device_tracker.carro.attributes.motion == false) %}
Parado
{% else %}
Desconhecido
{% endif %}
O comando rest serve para enviar uma localização diretamente ao traccar (simulando uma localização fake). Aqui está ele (diretamente no configuration.yaml):
rest_command:
enviar_localizacao_traccar:
url: http://XXXXXX.duckdns.org:5055/?id={{ id }}&lat={{ lat }}&lon={{ lon }}&speed={{ speed }}
method: GET
headers:
accept: "application/json, text/html"
user-agent: "Mozilla/5.0 {{ useragent }}"
content_type: "application/json; charset=utf-8"
verify_ssl: false
Pronto. Com isto, o carro vai aparecer como “parado” após ter perdido o sinal de celular.