Anhänger-Tracker auf einem NodeMCU: Kartenwidget meldet keine Zeilen mit gültigen Koordinaten
Von English mit KI übersetzt ·
Ich baue einen günstigen Tracker für die Anhänger auf unserem Hof. NodeMCU (ESP8266) + NEO-6M, TinyGPSPlus auf SoftwareSerial mit 9600 Baud, veröffentlicht alle 5 s während der Fahrt über PubSubClient an v1/telemetry. Der Telemetrie-Tab des Geräts zeigt eingehende Werte. Doch das Kartenwidget auf unserem Hof-Dashboard bleibt leer und meldet „Keine Zeilen mit gültigen Koordinaten.“Die Quelle des Widgets sind die Letzten Werte der Anhänger-Geräte. Die Spalteneinstellungen habe ich unverändert gelassen. Auch die Marker, die auf einem Testdashboard erscheinen (Koordinaten von Hand eingegeben), werden korrekt angezeigt, das Widget selbst funktioniert also.Hast du eine Idee, was ich falsch mache? Ich kann gern Code posten.
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.
Von English mit KI übersetzt ·
Bekommt das GPS einen Fix? In Gebäuden kann der NEO-6M minutenlang mit 0 Satelliten verharren, und TinyGPS liefert dann 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.
Von English mit KI übersetzt ·
Der Fix ist in Ordnung, der serielle Monitor zeigt 9 Satelliten und plausible Koordinaten. Hier ist, was gesendet wird:
{"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}
Von English mit KI übersetzt ·
Das sind Strings, und zwei Dezimalzahlen. Ist das so gewollt?
Those are strings, and two decimals. Is that on purpose?
Von English mit KI übersetzt ·
Drei Dinge in dieser Payload. Bei zweien bin ich bei Gabelstapler-Trackern selbst hängengeblieben.Die Spalte Longitude der Kartenansicht ist standardmäßig auf lng eingestellt, Latitude auf lat. Du sendest lon, also hat jede Zeile keine Länge und wird übersprungen. Entweder benennst du den Schlüssel auf dem Gerät um oder setzt die Spalte Longitude in der Karte auf lon. Ich würde auf dem Gerät umbenennen, damit jedes künftige Board einfach funktioniert.Du sendest die Zahlen als Strings, weil du das JSON mit String() aufbaust. Zahlenähnlicher Text funktioniert in Vergleichen oft, trotzdem solltest du echte Zahlen senden. Und String(float) liefert standardmäßig zwei Nachkommastellen, das sind etwa einen Kilometer. Alle deine Anhänger stünden dann am selben Ort.Und veröffentliche nicht, wenn der Fix ungültig ist, sonst stehen Anhänger jedes Mal, wenn eines der Boards im Schuppen startet, vor der Küste Afrikas bei 0,0.
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 mit %f funktioniert im ESP8266-Core, anders als auf einem Uno. Die Karteneinstellungen findest du unter 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.
Von English mit KI übersetzt ·
Speichert die Karte einen Verlauf, wo sich das Gerät bereits befunden hat, oder nur den letzten Punkt?
Does the map keep a trail of where it’s been or only the latest point?
Von English mit KI übersetzt ·
Bevor Sie sich um Trails Gedanken machen, schauen Sie sich die Nachrichtenanzahl an. Eine Nachricht alle 5 s sind etwa 518.000 pro Monat und Gerät. Starter umfasst 1.150.000 für die gesamte Organisation. Wir senden alle 30 s während der Fahrt und einmal alle 10 min im Stand.
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.
Von English mit KI übersetzt ·
Ich habe lon in lng umbenannt und auf snprintf umgestellt, Marker erschienen sofort und an den richtigen Stellplätzen, nicht alle an einer Stelle gestapelt. Außerdem habe ich Tylers Rat befolgt, 5 s war meine Faulheit, jetzt 30 s in Bewegung / 10 min geparkt mit Geschwindigkeitsprüfung. Kevin, ich zeige vorerst nur die neuesten Positionen.
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.
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

