Resumen de notificaciones

Ayuda de notificaciones

Todo lo necesario para poner el Notifier a funcionar junto a tu TeslaMate, y qué revisar cuando un evento no llega.

Antes de empezar

Tres cosas, y la mayoría de instalaciones de TeslaMate ya tienen las dos primeras.

  • TeslaMate con un broker MQTT. Mosquitto viene en el archivo Compose por defecto de TeslaMate.
  • Docker en la misma máquina que TeslaMate, o en cualquier host que alcance el broker.
  • Acceso saliente a internet. Sin puerto entrante, y tu TeslaMate no tiene que ser público.

Instalar el Notifier

Tu TeslaMate no puede llegar a tu teléfono por sí solo, y una notificación de iOS solo puede llegar a través de Apple. El Notifier es el contenedor pequeño que vigila MQTT y entrega los eventos. Se ejecuta junto a TeslaMate y nunca abre un puerto.

  1. Consigue tu token en la app

    Abre HedgieMate, ve a Ajustes y luego a Notificaciones push y actívalas. La app muestra un token de vinculación que empieza por hm_ y el ID del servidor TeslaMate al que estás conectado. Copia ambos.

    El token vincula la app con el contenedor. Trátalo como una contraseña.

  2. Añade el contenedor a tu archivo Compose

    Abre el docker-compose.yml desde el que ejecutas TeslaMate y añade el servicio de abajo. Al quedarse en el mismo archivo comparte red con tu broker, así que MQTT_HOST es simplemente el nombre del servicio del 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:

    El volumen es opcional. Conserva los nombres de los coches entre reinicios; sin él, el relay los rellena igualmente. Usa un volumen con nombre en vez de un bind mount: el contenedor se ejecuta con un usuario sin privilegios y no puede escribir en un directorio del host creado por Docker como root.

  3. Arráncalo

    Levanta el nuevo servicio. El resto de tu stack no necesita reiniciarse.

    Terminal
    docker compose up -d hedgiemate-notifier

    Después lee el registro. Un arranque correcto muestra la conexión al broker y los IDs de coche que vigila.

    Terminal
    docker compose logs -f hedgiemate-notifier
  4. Confírmalo en la app

    La app marca el servidor como conectado en unos segundos. A partir de ahí puedes activar o desactivar cada evento, coche por coche.

    No llega nada hasta que el coche cambia de estado de verdad. Enchufarlo es la forma más rápida de ver el primer evento.

Sin Compose

Si TeslaMate no se gestiona con Compose, docker run hace lo mismo. Apunta MQTT_HOST a un host que el contenedor pueda alcanzar.

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

Más de un TeslaMate

Ejecuta un Notifier junto a cada servidor. El mismo token de vinculación sirve en todos. Lo que los distingue en la app es el ID de servidor.

Configuración

Todo se define con variables de entorno. Tres son obligatorias, el resto tiene valores por defecto que funcionan.

Variable Por defecto Descripción
HEDGIEMATE_USER_TOKEN obligatoria ninguno Token de vinculación de la app. Empieza por hm_.
MQTT_HOST obligatoria ninguno Nombre de host de tu broker MQTT. Dentro de Compose es el nombre del servicio, normalmente mosquitto.
SERVER_ID obligatoria ninguno UUID del servidor que da la app. El contenedor arranca sin él, pero entonces se ignoran los ajustes por servidor y por coche hechos en la app.
MQTT_PORT 1883 Puerto del broker.
MQTT_USERNAME ninguno Usuario del broker, si el tuyo requiere autenticación.
MQTT_PASSWORD ninguno Contraseña del broker.
MQTT_CLIENT_ID hedgiemate-notifier ID de cliente usado en el broker. Cámbialo si algo más ya se conecta con este.
MQTT_TLS false Ponlo en true para un broker con TLS. El puerto por defecto pasa entonces a 8883.
MQTT_NAMESPACE ninguno Debe coincidir con el MQTT_NAMESPACE de tu TeslaMate, si lo has configurado. Los topics pasan a ser teslamate<namespace>/cars/#.
CAR_IDS 1 IDs de coche a vigilar, separados por comas, por ejemplo 1,2. Cada coche tiene su propia máquina de estados.
LOG_LEVEL info debug, info, warn o error.
RELAY_URL https://push.hedgiemate.com Dirección del relay. No hay motivo para cambiarla.

Todos los eventos

Cada fila es un interruptor independiente por coche en la app. Las actualizaciones de Live Activities no son notificaciones y no aparecen aquí.

Notificación Se envía cuando
Conducción
Trayecto iniciado state → driving
Trayecto finalizado state leaves driving
Carga
Carga iniciada charging_state → Charging
Carga completada charging_state → Complete
Carga interrumpida charging_state leaves Charging without Complete
Cargador conectado plugged_in → true
Cargador desconectado plugged_in → false
Batería
Batería baja battery_level ≤ BATTERY_LOW_THRESHOLD
Nivel de batería alcanzado battery_level ≥ BATTERY_HIGH_THRESHOLD
Ubicación
Entrada en geocerca geofence set
Salida de geocerca geofence cleared or changed
Seguridad
Grabación Sentry center_display_state = 7
Vehículo
Actualización de software update_available → true
Entrando en reposo state → asleep pending
En reposo state → asleep
Vehículo despierto state leaves asleep

No llega nada

Recorre la lista de arriba abajo. La mayoría de casos son uno de los tres primeros.

La app sigue diciendo que el servidor no está conectado

Comprueba con docker compose ps que el contenedor está en marcha y lee su registro. La causa habitual es un MQTT_HOST incorrecto: dentro de Compose es el nombre del servicio del broker, mosquitto, no localhost.

El contenedor funciona, pero nunca se dispara un evento

CAR_IDS tiene que coincidir con el ID de coche que usa TeslaMate. TeslaMate numera los coches desde 1, y con varios se listan: CAR_IDS=1,2.

MQTT conecta y el registro se queda en silencio

Si configuraste MQTT_NAMESPACE en TeslaMate, ponle el mismo valor al Notifier. Sin él los nombres de los topics no coinciden y el contenedor no tiene nada que leer.

Llegan algunos eventos y otros nunca

Cada evento es un interruptor por coche en la app. Abre el servidor en Ajustes y revisa la lista de eventos de ese coche.

Las notificaciones de batería nunca se disparan

BATTERY_LOW_THRESHOLD y BATTERY_HIGH_THRESHOLD valen 20 y 90 por defecto. Se envían una vez por sesión de carga, así que un coche que no ha cruzado el límite desde que empezó a cargar no manda ninguna.

Las notificaciones dejan de llegar a los pocos días

Asegúrate de que el servicio tiene restart: unless-stopped para volver con el host. Después revisa iOS: un modo de concentración o los ajustes de notificaciones de la app pueden estar tragándoselas.

Las Live Activities no aparecen

Las Live Activities deben estar permitidas para HedgieMate en Ajustes de iOS y tiene que haber una sesión activa. La Dynamic Island necesita un iPhone 14 Pro o posterior.

El broker pide usuario o TLS

Define MQTT_USERNAME y MQTT_PASSWORD. Para TLS pon MQTT_TLS en true, con lo que el puerto por defecto pasa a 8883.

Necesitas ver qué está haciendo

Pon LOG_LEVEL en debug, reproduce el caso y vuelve a dejarlo como estaba. Debug registra cada mensaje MQTT y cada decisión tomada a partir de él.

Preguntas

¿Por qué necesito el Notifier?

Tu TeslaMate está en tu propio servidor y no puede llegar a tu teléfono, y una notificación de iOS solo la puede entregar Apple. El Notifier cubre ese hueco: vigila tus topics MQTT, detecta el cambio de estado y envía el evento para que se entregue.

¿Mi TeslaMate tiene que ser accesible desde internet?

No. El Notifier solo abre conexiones salientes, así que no hace falta exponer nada ni redirigir ningún puerto para que funcionen las notificaciones.

¿Qué sale realmente de mi servidor?

El tipo de evento, el nivel de batería, el estado de carga y el nombre del geofence si usas geofences. Las coordenadas y las rutas se quedan en tu TeslaMate, y la dirección de tu servidor no se envía nunca. Los datos de eventos se borran a las pocas horas.

¿Puede ejecutarse en una máquina distinta de TeslaMate?

Sí, siempre que alcance tu broker MQTT. Pon MQTT_HOST apuntando a ese host y comprueba que el puerto del broker es accesible desde ahí.

¿Funciona con varios coches?

Sí. Lista los IDs en CAR_IDS y cada coche tendrá su propio seguimiento de estado y sus propios interruptores en la app.

¿Qué pasa si el relay no está disponible?

El contenedor reintenta unas cuantas veces con una espera creciente y luego descarta ese evento. Sigue funcionando y procesa el siguiente cambio de estado con normalidad.

¿Guarda algo?

Solo una caché de los nombres de los coches, y únicamente si montas el volumen opcional. Todo lo demás vive en memoria mientras el contenedor esté en marcha.

¿Cómo lo actualizo?

Vuelve a descargar la imagen y recrea el servicio. Las notas de versión están en la página de releases de GitHub.

¿Cómo desactivo las notificaciones?

Desactívalas en la app o para el contenedor. Cada opción funciona por su cuenta y nada más en tu stack de TeslaMate depende de él.

Código fuente

El Notifier es Go con licencia MIT. Revisa el código o abre una incidencia si algo falla.

LukStankovic/hedgiemate-notifier

Imagen de Docker hedgiemate/notifier:latest Docker Hub

¿Necesitas ayuda?

¿Tienes problemas con la configuración? Estamos aquí para ayudarte a empezar.