Rastreador de remolques en un NodeMCU: la tarjeta de mapa indica que no hay filas con coordenadas válidas
Traducido del English por IA ·
Estoy construyendo un rastreador económico para los remolques de nuestro patio. NodeMCU (ESP8266) + NEO-6M, TinyGPSPlus en SoftwareSerial a 9600, publica en v1/telemetry con PubSubClient cada 5 s mientras se mueve. La pestaña Telemetría del dispositivo muestra los valores que llegan. Pero la tarjeta de mapa de nuestro panel del patio está vacía y dice «No hay filas con coordenadas válidas.»El origen de la tarjeta son los Últimos valores de los dispositivos remolque. He dejado la configuración de columnas como estaba. Además, los marcadores que sí aparecen en un panel de prueba (coordenadas escritas a mano) funcionan bien, así que la tarjeta en sí funciona.¿Tenéis alguna idea de qué estoy haciendo mal? Encantado de publicar el código.
Building a cheap tracker for the trailers in our yard. NodeMCU (ESP8266) + NEO-6M, TinyGPSPlus on SoftwareSerial at 9600, publishes to v1/telemetry with PubSubClient every 5 s while moving. Telemetry tab on the device shows values arriving. But the map card on our yard board stays empty and says «No rows with valid coordinates.»
Card source is Latest values of the trailer devices. I’ve left the column settings alone. Also the markers that do show up on a test board (I typed coordinates by hand) are fine, so the card itself works.
Any idea what I’m doing wrong? Happy to post code.
Traducido del English por IA ·
¿El GPS está obteniendo una posición fija? En interiores, el NEO-6M puede estar minutos con 0 satélites y TinyGPS devolverá 0.0.
Is the GPS getting a fix? Indoors the NEO-6M can sit for minutes with 0 sats and TinyGPS will give you 0.0.
Traducido del English por IA ·
El fix está bien, el monitor serie muestra 9 satélites y coordenadas razonables. Esto es lo que se envía:
{"lat":"-43.53","lon":"172.63","spd_kmh":0.0,"sats":9}
Fix is fine, serial monitor shows 9 sats and sensible coordinates. Here’s what goes out:
{"lat":"-43.53","lon":"172.63","spd_kmh":0.0,"sats":9}
Traducido del English por IA ·
Son cadenas, y dos decimales. ¿Es intencionado?
Those are strings, and two decimals. Is that on purpose?
Traducido del English por IA ·
Tres cosas en ese payload; yo tropecé con dos de ellas con rastreadores de carretillas elevadoras.La columna Longitude de la tarjeta de mapa tiene por defecto lng, y Latitude tiene lat. Tú envías lon, así que cada fila no tiene longitud y se omite. O bien renombras la clave en el dispositivo, o bien pones la columna Longitude en lon en la tarjeta. Yo renombraría en el dispositivo para que cada placa futura funcione sin más.Envías los números como cadenas porque construiste el JSON con String(). El texto con forma de número a menudo funciona en comparaciones, pero envía números reales de todos modos. Y String(float) da dos decimales por defecto, lo que equivale a más o menos un kilómetro. Todos tus remolques quedarían en el mismo punto.Y no publiques cuando el fix no sea válido, o verás remolques aparcados en 0,0 frente a África cada vez que una placa arranque en un cobertizo.
if (gps.location.isValid() && gps.location.age() < 3000) {
char buf[96];
snprintf(buf, sizeof(buf), "{"lat":%.6f,"lng":%.6f,"spd_kmh":%.1f}",
gps.location.lat(), gps.location.lng(), gps.speed.kmph());
client.publish("v1/telemetry", buf);
}
snprintf con %f funciona en el core de ESP8266, a diferencia del Uno. La configuración de las tarjetas está en Map cards.
Three things in that payload, I tripped on two of them with forklift trackers.
The map card’s Longitude column defaults to lng, Latitude to lat. You send lon, so every row has no longitude and gets skipped. Either rename the key on the device or set Longitude column to lon in the card. I’d rename on the device so every future board just works.
You’re sending the numbers as strings because you built the JSON with String(). Number-like text often works in comparisons, but send real numbers anyway. And String(float) gives two decimals by default, which is about a kilometre. Your trailers would all sit in the same spot.
And don’t publish when the fix isn’t valid or you’ll get trailers parked at 0,0 off Africa every time one boots in a shed.
if (gps.location.isValid() && gps.location.age() < 3000) {
char buf[96];
snprintf(buf, sizeof(buf), "{"lat":%.6f,"lng":%.6f,"spd_kmh":%.1f}",
gps.location.lat(), gps.location.lng(), gps.speed.kmph());
client.publish("v1/telemetry", buf);
}
snprintf with %f works on the ESP8266 core, unlike on an Uno. Card settings are on Map cards.
Traducido del English por IA ·
¿El mapa guarda un rastro de por dónde ha estado o solo el último punto?
Does the map keep a trail of where it’s been or only the latest point?
Traducido del English por IA ·
Antes de preocuparse por los trails, revise el número de mensajes. Un mensaje cada 5 s son unos 518.000 al mes por dispositivo. Starter son 1.150.000 para toda la organización. Enviamos cada 30 s mientras está en movimiento y una vez cada 10 min cuando está estacionado.
Before you worry about trails, watch the message count. One message every 5 s is about 518,000 a month per device. Starter is 1,150,000 for the whole organisation. We send every 30 s while moving and once every 10 min parked.
Traducido del English por IA ·
Renombré lon a lng y cambié a snprintf, los marcadores aparecieron de inmediato y en los puestos correctos, no apilados en un solo punto. También seguí el consejo de Tyler: 5 s era mi pereza, ahora 30 s en movimiento / 10 min aparcado con una comprobación de velocidad. Kevin, por ahora solo muestro las últimas posiciones.
Renamed lon to lng and switched to snprintf, markers showed up straight away and in the right bays, not stacked in one spot. Also took Tyler’s advice, 5 s was me being lazy, now 30 s moving / 10 min parked with a speed check. Kevin, I’m only showing latest positions for now.
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

