Buenas tardes les comparto un problema que me volvió loco pero que ya logré trazar de punta a punta. El botón SOS de la apps traccar tracket llega al servidor, pero la Web no se entera (ni sonido, ni popup). ALGUIEN MAS LE PASO ?
Después de auditar todo les confirmo que el problema es un error de lógica en la interfaz web.
Lo que revisé (y por qué estoy seguro de que mi parte está 100% OK):
El GPS habla: Miré los logs crudos (tracker-server.log) y el equipo manda el HEX perfecto. El servidor lo decodifica como alarma: sos. Controlar.
La Base de Datos no miente: Metí al PostgreSQL/MySQL y tiré un SELECT a la tabla tc_events. El evento de alarma está ahí grabado, con su marca de tiempo y su ID del dispositivo. Controlar.
Al presionar el SOS, el Websocket recibe el paquete de datos, pero la consola del navegador tira un error de Javascript: Uncaught TypeError: Cannot read property 'sound' of undefinido.
¿Qué está pasando realmente?
El código de la web está intentando disparar una alerta sonora que no encuentra o que está mal mapeada. Además, hay una discrepancia de atributos: el servidor manda "sos" pero la web a veces espera "panic". Como no coinciden los nombres, la interfaz ignora el evento aunque lo tenga en la cara.
Mi servidor está impecable, el SQL está guardando todo y el GPS funciona. El problema es que la plataforma web tiene un "agujero" en la lógica de notificaciones.
Registro del Servidor (Capa de Protocolo)
Archivo: tracker-server.log;Este log demuestra que el servidor de Traccar "escuchó" al GPS y decodificó la alarma.2026-03-25 17:10:05 INFO: [5a2d8f1b] id: 123456, time: 2026-03-25 17:10:00, lat: -34.6037, lon: -58.3816, velocidad: 0.0, rumbo: 0, altitud: 0, dirección: nulo, atributos: {"alarm":"sos", "batteryLevel":85, "distance":0.0, "totalDistance":1245.5}
Log de Base de Datos (Capa de Persistencia)
Motor: PostgreSQL / MySQL
SELECT id, deviceid, servertime, type, attributes
FROM tc_events
WHERE type = 'alarm' AND attributes LIKE '%sos%'
ORDER BY servertime DESC LIMIT 1;
Consulta:Resultado (Evidencia):
ID de texto plano
| ID de dispositivo | Hora del servidor | Tipo | Atributos
-------+----------+---------------------+--------+--------------------------------
98765 | 123 | 2026-03-25 17:10:05 | Alarma | {"alarm":"sos","distance":0.0}
3 Log de Consola del Navegador (Capa Web/Frontend)
Acceso: F12 -> Console
JavaScript
[Websocket] Mensaje entrante: {"events": [{"id": 98765, "deviceid": 123, "type": "alarm", "attributes": {"alarm": "sos"}}]}
Uncaught (in promise) TypeError: No se puede leer la propiedad 'sound' de undefined
en NotificationManager.js:42:15
en Array.forEach (<anonymous>)
en NotificationManager.show (NotificationManager.js:38:10)
Buenas tardes les comparto un problema que me volvió loco pero que ya logré trazar de punta a punta. El botón SOS de la apps traccar tracket llega al servidor, pero la Web no se entera (ni sonido, ni popup). ALGUIEN MAS LE PASO ?
Después de auditar todo les confirmo que el problema es un error de lógica en la interfaz web.
Lo que revisé (y por qué estoy seguro de que mi parte está 100% OK):
El GPS habla: Miré los logs crudos (tracker-server.log) y el equipo manda el HEX perfecto. El servidor lo decodifica como alarma: sos. Controlar.
La Base de Datos no miente: Metí al PostgreSQL/MySQL y tiré un SELECT a la tabla tc_events. El evento de alarma está ahí grabado, con su marca de tiempo y su ID del dispositivo. Controlar.
Al presionar el SOS, el Websocket recibe el paquete de datos, pero la consola del navegador tira un error de Javascript: Uncaught TypeError: Cannot read property 'sound' of undefinido.
¿Qué está pasando realmente?
El código de la web está intentando disparar una alerta sonora que no encuentra o que está mal mapeada. Además, hay una discrepancia de atributos: el servidor manda "sos" pero la web a veces espera "panic". Como no coinciden los nombres, la interfaz ignora el evento aunque lo tenga en la cara.
Mi servidor está impecable, el SQL está guardando todo y el GPS funciona. El problema es que la plataforma web tiene un "agujero" en la lógica de notificaciones.
Registro del Servidor (Capa de Protocolo)
Archivo: tracker-server.log;Este log demuestra que el servidor de Traccar "escuchó" al GPS y decodificó la alarma.2026-03-25 17:10:05 INFO: [5a2d8f1b] id: 123456, time: 2026-03-25 17:10:00, lat: -34.6037, lon: -58.3816, velocidad: 0.0, rumbo: 0, altitud: 0, dirección: nulo, atributos: {"alarm":"sos", "batteryLevel":85, "distance":0.0, "totalDistance":1245.5}
Log de Base de Datos (Capa de Persistencia)
Motor: PostgreSQL / MySQL
SELECT id, deviceid, servertime, type, attributes
FROM tc_events
WHERE type = 'alarm' AND attributes LIKE '%sos%'
ORDER BY servertime DESC LIMIT 1;
Consulta:Resultado (Evidencia):
ID de texto plano
| ID de dispositivo | Hora del servidor | Tipo | Atributos
-------+----------+---------------------+--------+--------------------------------
98765 | 123 | 2026-03-25 17:10:05 | Alarma | {"alarm":"sos","distance":0.0}
3 Log de Consola del Navegador (Capa Web/Frontend)
Acceso: F12 -> Console
JavaScript
[Websocket] Mensaje entrante: {"events": [{"id": 98765, "deviceid": 123, "type": "alarm", "attributes": {"alarm": "sos"}}]}
Uncaught (in promise) TypeError: No se puede leer la propiedad 'sound' de undefined
en NotificationManager.js:42:15
en Array.forEach (<anonymous>)
en NotificationManager.show (NotificationManager.js:38:10)