Visão geral das notificações

Ajuda das notificações

Tudo o que é preciso para pôr o Notifier a correr ao lado do seu TeslaMate, e o que verificar quando um evento não chega.

Antes de começar

Três coisas, e a maioria das instalações do TeslaMate já tem as duas primeiras.

  • TeslaMate com um broker MQTT. O Mosquitto faz parte do ficheiro Compose predefinido do TeslaMate.
  • Docker na mesma máquina que o TeslaMate, ou em qualquer host que alcance o broker.
  • Acesso de saída à internet. Sem porta de entrada, e o seu TeslaMate não tem de ser público.

Instalar o Notifier

O seu TeslaMate não consegue chegar ao telemóvel sozinho, e uma notificação iOS só pode chegar através da Apple. O Notifier é o pequeno contentor que observa o MQTT e entrega os eventos. Corre ao lado do TeslaMate e nunca abre uma porta.

  1. Obtenha o token na app

    Abra a HedgieMate, vá a Definições e depois a Notificações push e ative-as. A app mostra um token de ligação começado por hm_ e o ID do servidor TeslaMate a que está ligado. Copie ambos.

    O token liga a app ao contentor. Trate-o como uma palavra-passe.

  2. Adicione o contentor ao ficheiro Compose

    Abra o docker-compose.yml a partir do qual corre o TeslaMate e acrescente o serviço abaixo. Ficando no mesmo ficheiro partilha a rede com o broker, por isso MQTT_HOST é apenas o nome do serviço do broker.

    docker-compose.yml
    # add under services: in the docker-compose.yml you run TeslaMate from
      hedgiemate-notifier:
        image: hedgiemate/notifier:latest
        restart: unless-stopped
        depends_on:
          - mosquitto
        environment:
          HEDGIEMATE_USER_TOKEN: "hm_your_token_here"
          SERVER_ID: "your-server-uuid"
          MQTT_HOST: "mosquitto"
          MQTT_PORT: "1883"
          CAR_IDS: "1"
          LOG_LEVEL: "info"
        volumes:
          - hedgiemate-notifier-data:/data
    
    # and under the top-level volumes: key, adding it if the file has none
      hedgiemate-notifier-data:

    O volume é opcional. Mantém os nomes dos carros entre reinícios; sem ele, o relay preenche-os na mesma. Use um volume com nome em vez de um bind mount: o contentor corre com um utilizador sem privilégios e não consegue escrever numa pasta do host criada pelo Docker como root.

  3. Arranque-o

    Levante o novo serviço. O resto da sua stack não precisa de reiniciar.

    Terminal
    docker compose up -d hedgiemate-notifier

    Depois leia o registo. Um arranque saudável mostra a ligação ao broker e os IDs dos carros que está a observar.

    Terminal
    docker compose logs -f hedgiemate-notifier
  4. Confirme na app

    A app marca o servidor como ligado em poucos segundos. A partir daí pode ligar ou desligar cada evento, carro a carro.

    Nada chega até o carro mudar mesmo de estado. Ligar o cabo de carregamento é a forma mais rápida de ver o primeiro evento.

Sem Compose

Se o TeslaMate não for gerido por Compose, o docker run faz o mesmo. Aponte MQTT_HOST para um host que o contentor consiga alcançar.

Terminal
docker run -d \
  --name hedgiemate-notifier \
  --restart unless-stopped \
  -e HEDGIEMATE_USER_TOKEN="hm_your_token_here" \
  -e SERVER_ID="your-server-uuid" \
  -e MQTT_HOST="your-mqtt-host" \
  -e CAR_IDS="1" \
  hedgiemate/notifier:latest

Mais do que um TeslaMate

Corra um Notifier ao lado de cada servidor. O mesmo token de ligação funciona em todos. O que os distingue na app é o ID do servidor.

Configuração

Tudo se define por variáveis de ambiente. Três são obrigatórias, as restantes têm predefinições que funcionam.

Variável Predefinição Descrição
HEDGIEMATE_USER_TOKEN obrigatória nenhuma Token de ligação dado pela app. Começa por hm_.
MQTT_HOST obrigatória nenhuma Nome do host do seu broker MQTT. Dentro do Compose é o nome do serviço, normalmente mosquitto.
SERVER_ID obrigatória nenhuma UUID do servidor dado pela app. O contentor arranca sem ele, mas as definições por servidor e por carro feitas na app passam a ser ignoradas.
MQTT_PORT 1883 Porta do broker.
MQTT_USERNAME nenhuma Utilizador do broker, se o seu exigir autenticação.
MQTT_PASSWORD nenhuma Palavra-passe do broker.
MQTT_CLIENT_ID hedgiemate-notifier Client ID usado no broker. Mude-o se já houver outra coisa a ligar-se com este.
MQTT_TLS false Defina true para um broker com TLS. A porta predefinida passa então para 8883.
MQTT_NAMESPACE nenhuma Tem de coincidir com o MQTT_NAMESPACE do seu TeslaMate, se tiver definido um. Os tópicos passam a teslamate<namespace>/cars/#.
CAR_IDS 1 IDs dos carros a observar, separados por vírgulas, por exemplo 1,2. Cada carro tem a sua própria máquina de estados.
LOG_LEVEL info debug, info, warn ou error.
RELAY_URL https://push.hedgiemate.com Endereço do relay. Não há razão para o alterar.

Todos os eventos

Cada linha é um interruptor independente por carro na app. As atualizações das Live Activities não são notificações e não constam desta lista.

Notificação Enviada quando
Condução
Viagem iniciada state → driving
Viagem encerrada state leaves driving
Carregamento
Carregamento iniciado charging_state → Charging
Carregamento concluído charging_state → Complete
Carregamento interrompido charging_state leaves Charging without Complete
Carregador conectado plugged_in → true
Carregador desconectado plugged_in → false
Bateria
Bateria fraca battery_level ≤ BATTERY_LOW_THRESHOLD
Nível de bateria atingido battery_level ≥ BATTERY_HIGH_THRESHOLD
Localização
Entrada na geocerca geofence set
Saída da geocerca geofence cleared or changed
Segurança
Gravação Sentry center_display_state = 7
Veículo
Atualização de software update_available → true
Entrando em repouso state → asleep pending
Em repouso state → asleep
Veículo acordou state leaves asleep

Não chega nada

Percorra a lista de cima para baixo. A maioria dos casos é um dos três primeiros.

A app continua a dizer que o servidor não está ligado

Confirme com docker compose ps que o contentor está mesmo a correr e leia o registo. A causa habitual é um MQTT_HOST errado: dentro do Compose é o nome do serviço do broker, mosquitto, não localhost.

O contentor corre, mas nunca dispara um evento

CAR_IDS tem de corresponder ao ID de carro usado pelo TeslaMate. O TeslaMate numera os carros a partir de 1 e, com vários, listam-se: CAR_IDS=1,2.

O MQTT liga-se e o registo fica em silêncio

Se definiu MQTT_NAMESPACE no TeslaMate, defina o mesmo valor no Notifier. Sem isso os nomes dos tópicos não coincidem e o contentor não tem nada para ler.

Alguns eventos chegam, outros nunca

Cada evento é um interruptor por carro na app. Abra o servidor nas Definições e verifique a lista de eventos desse carro.

As notificações de bateria nunca disparam

BATTERY_LOW_THRESHOLD e BATTERY_HIGH_THRESHOLD estão por omissão em 20 e 90. São enviadas uma vez por sessão de carregamento, por isso um carro que não cruzou o limite desde que começou a carregar não envia nenhuma.

As notificações param ao fim de alguns dias

Garanta que o serviço tem restart: unless-stopped para voltar com o host. Depois verifique o iOS: um modo de Foco ou as definições de notificações da app podem estar a absorvê-las.

As Live Activities não aparecem

As Live Activities têm de estar permitidas para a HedgieMate nas Definições do iOS e tem de existir uma sessão ativa. A Dynamic Island precisa de um iPhone 14 Pro ou mais recente.

O broker pede autenticação ou TLS

Defina MQTT_USERNAME e MQTT_PASSWORD. Para TLS defina MQTT_TLS como true, o que muda a porta predefinida para 8883.

Precisa de ver o que está a acontecer

Ponha LOG_LEVEL em debug, reproduza o caso e volte a pôr como estava. O modo debug regista cada mensagem MQTT e cada decisão tomada a partir dela.

Perguntas

Porque preciso do Notifier?

O seu TeslaMate está no seu próprio servidor e não consegue chegar ao telemóvel, e uma notificação iOS só a Apple a consegue entregar. O Notifier fecha essa lacuna: observa os seus tópicos MQTT, deteta a mudança de estado e envia o evento para ser entregue.

O meu TeslaMate tem de estar acessível a partir da internet?

Não. O Notifier só faz ligações de saída, por isso não é preciso expor nada nem encaminhar portas para as notificações funcionarem.

O que sai realmente do meu servidor?

O tipo de evento, o nível da bateria, o estado de carregamento e o nome da geofence, se usar geofences. As coordenadas e as rotas ficam no seu TeslaMate, e o endereço do seu servidor nunca é enviado. Os dados dos eventos são apagados ao fim de algumas horas.

Pode correr numa máquina diferente do TeslaMate?

Sim, desde que alcance o seu broker MQTT. Aponte MQTT_HOST para esse host e confirme que a porta do broker está acessível a partir dali.

Funciona com vários carros?

Sim. Liste os IDs em CAR_IDS e cada carro fica com o seu próprio acompanhamento de estado e os seus próprios interruptores na app.

O que acontece se o relay estiver inacessível?

O contentor tenta de novo algumas vezes com um intervalo crescente e depois descarta esse evento. Continua a correr e trata normalmente da mudança de estado seguinte.

Guarda alguma coisa?

Apenas uma cache dos nomes dos carros, e só se montar o volume opcional. Todo o resto fica em memória enquanto o contentor estiver a correr.

Como o atualizo?

Volte a puxar a imagem e recrie o serviço. As notas de versão estão na página de releases no GitHub.

Como desligo as notificações?

Desligue-as na app ou pare o contentor. Qualquer uma das opções funciona por si, e mais nada na sua stack de TeslaMate depende dele.

Código-fonte

O Notifier é Go com licença MIT. Leia o código ou abra uma issue se algo estiver errado.

LukStankovic/hedgiemate-notifier

Imagem Docker hedgiemate/notifier:latest Docker Hub

Precisa de Ajuda?

Tem problemas com a configuração? Estamos aqui para ajudá-lo a começar.