Traceur de remorque sur NodeMCU : le widget carte indique aucune ligne avec des coordonnées valides
Traduit de English par IA ·
Je construis un traceur bon marché pour les remorques de notre cour. NodeMCU (ESP8266) + NEO-6M, TinyGPSPlus sur SoftwareSerial à 9600 bauds, publie sur v1/telemetry avec PubSubClient toutes les 5 s pendant les déplacements. L’onglet Télémétrie de l’appareil affiche bien les valeurs reçues. Mais le widget carte de notre tableau de bord de la cour reste vide et indique « Aucune ligne avec des coordonnées valides ».La source du widget est Dernières valeurs des appareils remorques. J’ai laissé les paramètres de colonnes tels quels. Par ailleurs, les marqueurs qui s’affichent sur un tableau de test (coordonnées saisies à la main) fonctionnent, donc le widget lui-même marche.Avez-vous une idée de mon erreur ? Je peux publier le code avec plaisir.
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.
Traduit de English par IA ·
Le GPS obtient-il un fix ? À l’intérieur, le NEO-6M peut rester plusieurs minutes avec 0 satellite et TinyGPS affichera 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.
Traduit de English par IA ·
Le fix est bon, le moniteur série affiche 9 satellites et des coordonnées cohérentes. Voici ce qui est envoyé :
{"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}
Traduit de English par IA ·
Ce sont des chaînes de caractères, et deux décimaux. Est-ce voulu ?
Those are strings, and two decimals. Is that on purpose?
Traduit de English par IA ·
Trois choses dans ce payload, j’ai buté sur deux d’entre elles avec des traqueurs de chariots élévateurs.La colonne Longitude de la carte prend lng par défaut, et Latitude prend lat. Tu envoies lon, donc chaque ligne n’a pas de longitude et est ignorée. Soit tu renommes la clé sur l’appareil, soit tu règles la colonne Longitude de la carte sur lon. Je renommerais sur l’appareil pour que chaque future carte fonctionne directement.Tu envoies les nombres sous forme de chaînes parce que tu construis le JSON avec String(). Un texte ressemblant à un nombre fonctionne souvent dans les comparaisons, mais envoie quand même de vrais nombres. Et String(float) donne deux décimales par défaut, soit environ un kilomètre. Toutes tes remorques se retrouveraient au même endroit.Et ne publie pas quand le fix n’est pas valide, sinon tu verras des remorques garées à 0,0 au large de l’Afrique chaque fois qu’une carte démarre dans un hangar.
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 avec %f fonctionne sur le core ESP8266, contrairement à l’Uno. Les réglages des cartes se trouvent sur 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.
Traduit de English par IA ·
La carte conserve-t-elle une trace des positions précédentes ou seulement le dernier point ?
Does the map keep a trail of where it’s been or only the latest point?
Traduit de English par IA ·
Avant de vous soucier des trails, regardez le nombre de messages. Un message toutes les 5 s représente environ 518 000 par mois et par appareil. Starter inclut 1 150 000 pour l’ensemble de l’organisation. Nous envoyons toutes les 30 s en déplacement et une fois toutes les 10 min à l’arrêt.
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.
Traduit de English par IA ·
J’ai renommé lon en lng et utilisé snprintf, les marqueurs se sont affichés immédiatement et aux bons emplacements, sans s’empiler au même endroit. J’ai aussi suivi le conseil de Tyler : 5 s, c’était de la paresse de ma part ; maintenant 30 s en mouvement / 10 min à l’arrêt avec une vérification de vitesse. Kevin, je n’affiche que les dernières positions pour le moment.
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.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

