Traccar-Client mit Node-Red

Wie man GPS-Daten nach MQTT mit Node-Red bekommt, hatte ich ja schon beschrieben. Soll es von dort weitergehen zu Traccar, nimmt man am besten auch Node-Red. Natürlich geht es auch in Homeassistant mit einigen Automationen, aber in Node-Red ist es doch einfacher und übersichtlicher.

Der Ablauf ist recht einfach. Zunächst läßt ein Switch-Node nur dann Daten durch, wenn die Klasse “TimeVelocityPosition” eingeht. Anschließend gibt ein Function-Node je nach gefahrener Geschwindigkeit die Daten in unterschiedlicher Häufigkeit weiter. Ein weiterer Function-Node erfaßt alle nötigen Daten und bastelt sie zum Osmand-Protokoll zusammen, das man dann mit einem HTTP-GET Request an Traccar schickt. Ich bin aus der Dokumentation nicht recht schlau geworden, ob Traccar auch JSON auf der Eingabe versteht. Ich habe es auf jeden Fall nicht hinbekommen, diese Lösung hier funktioniert aber.

// Schwellenwerte definieren
const speed = msg.payload.speed || 0;
const now = Date.now();
const lastSend = context.get('lastSend') || 0;
const slow = 1; // Langsamfahrt bei 1m/sec ~ 3,6 km/h
const fast = 7; // Schnelle Fahrt ab 7m/sec ~ 25,2 km/h

let interval = 60000; // Standard: 60 Sekunden (Stand/Langsam)

if (speed > fast) {
    interval = 1000;  // 1 Sekunde bei > 25,2 km/h
} else if (speed > slow) {
    interval = 5000;  // 5 Sekunden bei > 3,6 km/h
}

// Prüfen, ob das Intervall abgelaufen ist
if (now - lastSend >= interval) {
    context.set('lastSend', now);
    return msg; // Nachricht zum HTTP-Request-Node durchlassen
}

return null; // Nachricht blockieren

Testweise kann man den Node “Speed manuell ändern” zwischen “class==TPV” und “Filter Speed” einschleifen und über die Injektnodes unterschiedliche Geschwindigkeiten simulieren. Den Flow habe ich zum Downlaod bereitgestellt.