Nfc Tag mit URL und parametern

uli1181

Cadet 1st Year
Registriert
Jan. 2020
Beiträge
15
Guten Abend zusammen,

Ich bin mir garnicht ganz sicher unter welcher Kategorie ich suchen muss, daher versuche ich es einfach mal hier.

Ich habe einen eigenen Traccar Server auf dem meine Fahrzeuge verbunden sind.

Jetzt kam ich auf die super Idee Gegenstände mit einem NFC Tag zu versehen, das Lesen des Tags öffnet eine URL, die die Position an den traccar Server sendet. Funktioniert soweit auch, nur müssen die Geodaten Teil der URL sein. Dementsprechend muss sich die URL je nach Position automatisch ändern. Ist das irgendwie umsetzbar? Die URL sieht wie folgt aus

http://serverdomain.de:5055/?id=(GeräteID) &lat=50.12345&lon=7.12345

Theoretisch müsste also beim scannen des Tags die Geodaten in der URL mit den geodaten des scannenden Geräts ersetzt werden. Gibt es da eventuell eine Art Platzhalter die man setzen kann, wo das Gerät weiß hier muss ich meine Daten einsetzen bevor ich die URL öffne?

Danke
 
Eins der sendenden Geräte muss GPS unterstützen, und dann nach dem Scan des Tags und vor dem URL-Aufruf die Koords einfügen.
 
Ich weiß nicht, ob ich die Frage richtig verstanden habe.
Alles nach dem Fragezeichen (inkl. dessen) in der URL gehört nicht zur eigentl. URL, sondern sind mitgegebenen Daten, die der Empfänger (Webserver) verarbeitet. Also sind

http://serverdomain.de:5055/?id=1
http://serverdomain.de:5055/?id=2
http://serverdomain.de:5055/?id=3
http://serverdomain.de:5055/?id=4
http://serverdomain.de:5055/?id=5

Alle die gleiche URL (http://serverdomain.de:5055) mit der ID und den Geodaten arbitet dann das Programm, welches du damit ansprichst.


------------------------
Edit:
AH, habs jetzt kapiert, du willst beim Scan des NFC die Geodaten anhängen...

Funktioniert das ganze ggf. auch ohne die Geodaten, nur mit der ID? Probier das mal. Evtl. ist das nur was rudimentäres...
 
Je nachdem, mit welchen Geräten du arbeitest (z.B. Android oder iOS Telefone), könntest du einfach auf der URL eine Webseite hinterlegen, die die Geolocation-API verwendet.

Damit greift der Browser dann auf das GPS des Gerätes zu (entsprechende Berechtigung und Unterstützung vorausgesetzt) und du kannst den Standort bestimmen OHNE dass du etwas auf dem Gerät extra installieren musst.

Die Webseite kann dann, je nachdem ob sie den Standort genau ermitteln könnte, eine Erfolgsmeldung oder einen Fehler anzeigen.

Wenn das ganze aussehen soll, wie eine "richtige" App, könntest du das ganze dann als PWA ausliefern (Progressive Web App), damit lässt sich die Webseite dann installieren und ist von einer echten App kaum zu unterscheiden. Für ein PWA Beispiel kannste dir mein Todo-Listen-Projekt mal anschauen: pure-todo, insbesondere diese Stellen:
Somit könntest du dir dann das NFC entweder komplett sparen oder stattdessen einen QR-Code verwenden - oder mit der PWA einfach die "App" aufrufen. Schaus dir mal an, ist nicht soo schwierig umzusetzen und für die PWA brauchst du wirklich nur das nötigste, Offline-Funktion brauchst du gar nicht.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: CyborgBeta
@K-551
Danke für deine Antwort
die ID ist der Gerätename bei Traccar. Somit ist bei einem NFC http://serverdomain.de:5055/?id=1 erstmal der Basisbestandteil der Url, hier müssen dann die Geodaten angehangen werden. ?id=2 wäre dann der nächste NFC Tag bzw das nächste Objekt. Mit dem Basislink http://serverdomain.de:5055/?id=1 hat sich erstmal Gerät 1 am Server angemeldet, mit &lat=50.12345&lon=7.12345 wird dann die Position übermittelt.

@sandreas
Danke für deine Antwort
Ich versuche mal den genauen Zweck zu beschreiben. Es geht um Container auf jedem Container soll ein NFC kleben, damit fallen qr codes eher weg, da es den ganzen Tag Wind und Wetter ausgesetzt ist und auch schonmal mit dem Bagger verschoben oder bearbeitet wird. Wenn der verkratzt wird er wohl schon nicht mehr lesbar sein. Eine App scheidet aus, da ja jeder unabhängig vom Betriebssystem z.B. scannen können soll. Egal ob Fahrer oder Kunde. In erster Linie geht es darum mal auf einer Karte alle Container sehen zu können mit Standort. zweitens gibt es oft viele Missverständnisse mit Kunden. So kannst du dem Kunden sagen, scannen sie ihren Container der getauscht werden soll, dann kann bei uns später nachgesehen werden, welcher Container zuletzt "online" war.

Wir reden hier also von ca 1500 Objekten/Containern jeder hat eine ID mit der er sich beim Server anmelden soll. Das ist ?id=X

Das mit der Webseite wäre eventuell grundlegend eine Idee, diese müsste dann die eine Url erzeugen mit der Id und den Geodaten und Traccar nur kurz anpingen.

Es war halt eine Art Schnapsidee, ich habe für mich privat den Traccar und nutze zuhause NFC mit HomeAssistant. Als wir dann auf der Arbeit über diese grundlegende Problem mit den Containerstandorten diskutiert haben, kam mir der Gedanken, ob es nicht so irgendwie umsetzbar wäre. Die Url auf den NFC schreiben und scannen funktioniert. Die Position wird sofort in Traccar aktualisiert aber halt eben an selber Stelle, da ich keinen Weg gefunden habe die Geodaten des Handys an die Url direkt beim scannen anzuhängen. Ich habe es dann als Laie mal mit Chatgpt und einem Javascript versucht. Das war leider zu groß für den NFC

Ich lese mir aber morgen mal deine Links durch. Heute komme ich leider nicht mehr dazu
 
Also eigentlich brauchst du eine App, die zwei Sachen kann: Einen NFC-Tag und Inhalt anfordern (von einer App oder dem System) und die GPS-Location anfordern (vom System). Anschließend kann beides zusammen dann an den Server gesendet werden, indem die URL geöffnet wird (per HTTP GET oder POST, ich würde POST empfehlen, weil es dann gleichzeitig auch verschlüsselt ist).

Ich hätte dir auch ein Beispiel gezeigt, bin aber leider schon einige Zeit raus aus der App-Entwicklung.

Technisch ist das also sicherlich vorstellbar, geht aber schon in die Richtung Business Lösung.

Hier steht mehr https://developer.android.com/develop/connectivity/nfc/nfc?hl=de#obtain-info
 
uli1181 schrieb:
Ich versuche mal den genauen Zweck zu beschreiben.
Ok,verstanden (denke ich).

uli1181 schrieb:
Eine App scheidet aus, da ja jeder unabhängig vom Betriebssystem z.B. scannen können soll.
Wenn wir hier nicht grundsätzlichvon Mobilgeräten reden (Android oder iOS), dann wird das zum Problem. Denn die wenigsten Desktop-Computer haben überhaupt NFC oder GPS und ohne GPS dürfte die Lokalisierung des scannenden Geräts viel zu ungenau sein, wenn man sie nicht manuell eingeben soll.

NFC ist auch insofern problematisch, dass du das Auslesen des NFC und die Übertragung an eine API deiner Wahl kombinieren musst. Das wäre in benutzerfreundlicher Form vermutlich nur mit einer App möglich, denn mit einer Webseite kannst du nur sehr eingeschränkt auf NFCs zugreifen.


uli1181 schrieb:
Das mit der Webseite wäre eventuell grundlegend eine Idee, diese müsste dann die eine Url erzeugen mit der Id und den Geodaten und Traccar nur kurz anpingen.
Ich würde eine Webseite bauen, die folgendes kann:

  • NFC Scan via Web NFC API
    • Da die nur von Chrome unterstützt wird, als Fallback noch ein manuelles Eingabefeld für die NFC-ID, wenn die NFC API nicht unterstütz wird
    • Denkbar wäre auch die Container-ID, aber wenn die durchnummeriert sind, ist die Chance groß, dass irgendwelche Spaßvögel die Standorte deiner Container ändern
    • Das Datenfeld des NFCs würde ich auch nicht als sicher betrachten, hier gibt es sicher auch Witzbolde, die das entweder leeren oder überschreiben
    • Schützen kannst du dich vor manipulation kaum, es sei denn du gibst dem Nutzer noch einen Token mit, der zum Container NFC passen muss und bei jedem Auftrag geändert wird.
  • Web Geolocation-API
    • Da hier Zugriff auf das GPS gebraucht wird und das manchmal nicht funktioniert, als Fallback noch eine embedded OpenStreetMap, wo man seinen Standort wählen kann

Das mit den NFCs erscheint mir aber auch nicht "stabiler" als das mit den QR-Codes... zumindest ist mir kein NFC bekannt, den man nicht auch einfach abreißen oder kaputthauen könnte.
 
  • Gefällt mir
Reaktionen: CyborgBeta
sandreas schrieb:
Das mit den NFCs erscheint mir aber auch nicht "stabiler" als das mit den QR-Codes...
Die Überlegung hatte ich vorhin auch schon ... Prinzipiell/theoretisch ist ein NFC-Tag auf Byte-Ebene nix anderes als ein QR-Code.
 
Der Empfang ist nicht selbstverständlich und ohne Empfang kann man Websites generell vergessen.
So wie es sich anhört, soll jeder dahergelaufene Mitarbeiter an einem undefinierten Ort mit seinem Privatgerät (mit undefinierter Konfiguration) an den Tag gehen und die GPS-Position irgendwo hinschicken. Es gibt zig mögliche System-Kombinationen und vielen unbekannten Faktoren, die reingrätschen können. Das kann nicht zuverlässig funktionieren.

Gegenvorschlag: Auserwählte Mitarbeiter mit ihren Firmenhandys ins Hafengelände oder auf dem Schiff einbuchen lassen, somit kennt man schon mal Position und Route. Dann mit ihren Firmengeräten mit definierter Geräte-Konfiguration die IDs der Container einsammeln lassen und spätestens, wenn sie in der Zentrale mit WLAN sind, diese IDs übermitteln.

PS: QR-Codes haben optional auch eine eingebaute Fehlerkorrektur.
 
CyborgBeta schrieb:
dann an den Server gesendet werden, indem die URL geöffnet wird (per HTTP GET oder POST, ich würde POST empfehlen, weil es dann gleichzeitig auch verschlüsselt ist).

Mit GET kann man keine Daten an Server senden. Wie der Name schon vermuten lässt, kann man nur Daten abholen/bekommen.

Und nein POST ist nicht "gleichzeitig" verschlüsselt. Requests haben erstmal nichts mit einer Verschlüsselung zu tun.

Das ist praktisch das kleine 1 mal 1 der (Web) Entwicklung.
 
Für jeder man sichtbare Parameter mit beschränkter Länge. Theorie und Praxis. Als ob jemand GET requests nutzt um Daten an Server zu senden.

PUT und POST.
 
floq0r schrieb:
Natürlich kann man Parameter mit einem GET request übermitteln.
Danke.

Tipp: Auf die Provokationen von wilk nicht weiter eingehen.
Ergänzung ()

Gliese schrieb:
QR-Codes haben optional auch eine eingebaute Fehlerkorrektur.
Das stimmt und sollte mit NFC-Tag-Daten eigentlich auch möglich sein.

Vielleicht ein Vorteil: Der NFC-Tag kann auch innen angebracht werden - bei QR-Codes geht das logischerweise nur außen.
 
sandreas schrieb:
Das mit den NFCs erscheint mir aber auch nicht "stabiler" als das mit den QR-Codes... zumindest ist mir kein NFC bekannt, den man nicht auch einfach abreißen oder kaputthauen könnte.
Naja die NFC´s sind erstmal von der Konsistenz her wetterbeständig. Zumindest eine Zeitlang. Geht einer kaputt, beschreibe ich einen neuen mit den gleichen Daten und lasse ihn einfach Aufkleben. Ein QR Code müsste ich ja dann für jeden einzelnen Container als Aufkleber drucken lassen. Geht da einer kaputt, muss ich den selben Aufkleber wieder drucken lassen.

Mir kam das auch nur so mal in den Sinn. Es gibt ja auch fertige Lösungen zu kaufen. Wir nutzen schon Yellowfox für die LKW´s, das ist eben auch um Containerverfolgung und Führerscheinkontrolle erweiterbar. Bei der Führerscheinkontrolle setzt Yellowfox ebenfalls auf NFC. Da dachte ich mir, ich versuche es einfach mal.

Ich bin auf dem Gebiet kein Profi aber bastle gerne an sowas rum. Ich habe deinen Vorschlag mit der Webseite aufgegriffen und das scheint auch zu funktionieren.


Ich habe eine Subdomain angelegt. Auf dem NFC Tag steht jetzt https://sub.serverdomain.de/1.html. Für Jede Containerid lege ich eine html an mit entsprechendem Script.


<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Geodaten Weiterleitung</title>
<script>
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(openURL, showError, {
enableHighAccuracy: true,
timeout: 10000,
maximumAge: 0
});
} else {
alert("Geolocation wird von diesem Browser nicht unterstützt.");
}
}

function openURL(position) {
let latitude = position.coords.latitude;
let longitude = position.coords.longitude;
let targetUrl = [URL]http://serverdomain.de:5055/?id=1[/URL]&lat=${latitude}&lon=${longitude};

// Neues Fenster oder Tab öffnen
let newTab = window.open(targetUrl, "_blank");

if (newTab) {
// Falls der Browser das Öffnen erlaubt hat, dieses Tab schließen
window.close();
} else {
// Falls der Browser das Schließen verhindert, Hinweis anzeigen
document.getElementById("status").innerText = "Bitte schließen Sie dieses Fenster manuell.";
}
}

function showError(error) {
let message = "";
switch (error.code) {
case error.PERMISSION_DENIED:
message = "Standortfreigabe abgelehnt. Bitte aktivieren Sie den Standortzugriff.";
break;
case error.POSITION_UNAVAILABLE:
message = "Standort nicht verfügbar. Bitte versuchen Sie es später erneut.";
break;
case error.TIMEOUT:
message = "Standortabfrage hat zu lange gedauert. Versuchen Sie es erneut.";
break;
default:
message = "Unbekannter Fehler.";
}
document.getElementById("status").innerText = message;
document.getElementById("retryButton").style.display = "block";
}

window.onload = getLocation;
</script>
</head>
<body>
<p id="status">Bitte warten, Standort wird ermittelt...</p>
<button id="retryButton" onclick="getLocation()" style="display:none;">Erneut versuchen</button>
</body>
</html>






Das ist erstmal eine einfache Lösung. Da hier auch nichts Datenschutztechnisch relevant ist, kann man das mal so zum probieren nehmen.

Wenn sich das bewährt und den Effekt hat, den wir uns erhoffen, dann kann man später immer noch zu einer Bezahllösung wechseln.

Das einzige, was mich noch stört, der geöffnete Tab schließt sich, zumindest bei meinem Handy, nicht. Das ist insofern blöd, dass wenn jemand scannt, und dann abends als Beispiel aus Versehen, den geöffneten Tab nochmals neu lädt, sich die Position wieder ungewollt aktualisiert.



Im groben und ganzen konnte ich aber mein Anliegen jetzt erstmal umsetzen und ich werde das jetzt die nächsten Tage mal mit 4 - 5 Containern testen.


Vielen Dank für die rege Mithilfe.
 
Berichte mal. Vor allem wie praxistauglich der ganze Spaß war!
:cool_alt:

PS QR-Codes haben noch den Vorteil, dass man nicht an den Container direkt rangehen muss, sondern aus der Ferne scannen kann.
Ob der Mensch an jedem der 50 Container direkt zum NFC muss oder einfach gemütlich den QR-Code abscannt ist schon ein Zeitunterschied denke ich.

Wenn du eh erst an 4-5 Containern testest, kannst du auch zum Test QR-Code UND NFC-Tags einsetzen und schauen, wie sich es bewährt.
 
uli1181 schrieb:
Das einzige, was mich noch stört, der geöffnete Tab schließt sich, zumindest bei meinem Handy, nicht. Das ist insofern blöd, dass wenn jemand scannt, und dann abends als Beispiel aus Versehen, den geöffneten Tab nochmals neu lädt, sich die Position wieder ungewollt aktualisiert.
Du musst auf der Webseite kein neues Fenster öffnen... die Webseite selbst kann doch alles verwalten und per Ajax / fetch einen Request mit den Geokoordinaten machen oder wahlweise leitest du einfach auf die finale Seite weiter:


Code:
// statt neuem Fenster einfach die Antwort abholen.
const response = await fetch(targetUrl);
if (!response.ok) {
throw new Error(`Response status: ${response.status}`);
}
// ...

oder alternativ einfach weiterleiten (für dich vielleicht besser):
Code:
let latitude = position.coords.latitude;
let longitude = position.coords.longitude;
let targetUrl =  `http://serverdomain.de:5055/?id=1&lat=${latitude}&lon=${longitude}`;

location.href = targetUrl;
 
  • Gefällt mir
Reaktionen: CyborgBeta
Zurück
Oben