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.

