Yapay zekâ tarafından English dilinden çevrildi ·
O veri yükünde üç şey var, bunların ikisinde forklift takipçilerinde ben de takıldım.Harita kartının Longitude sütunu varsayılan olarak lng, Latitude ise lat. Sen lon gönderiyorsun, bu yüzden her satırda boylam yok ve atlanıyor. Ya cihazda anahtarı yeniden adlandır ya da karttaki Longitude sütununu lon olarak ayarla. Ben cihazda yeniden adlandırırdım, böylece gelecekteki her kart sorunsuz çalışır.Sayıları JSON’u String() ile oluşturduğun için metin olarak gönderiyorsun. Sayı benzeri metinler karşılaştırmalarda çoğu zaman çalışır, yine de gerçek sayılar gönder. Ayrıca String(float) varsayılan olarak iki ondalık basamak verir, bu yaklaşık bir kilometreye denk gelir. Römorkların hepsi aynı noktada görünür.Ve konum geçerli değilse yayınlama yapma, yoksa bir kulübede her açıldığında römorkların Afrika açıklarında 0,0 noktasında park ettiği görülür.
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 ile %f, Uno’dan farklı olarak ESP8266 çekirdeğinde çalışır. Kart ayarları Map cards sayfasında.
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.

