Como resolver o problema do carro "eternamente em movimento" quando perde sinal de celular

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.

3 curtidas