Forum: PC-Programmierung GPS Daten ins Internet streamen


von peterguy (Gast)


Lesenswert?

Hallo,

ich habe hier ein Logfile mit GPS daten.

Diese Daten möchte ich in einer Endlosschleife abspielen.
Dabei soll die GPS Position sekündlich upgedate, und von meiner 
Applikation angezeigt werden. Das ganze übers Internet, d.h. ich möchte 
die Daten z.B. auch von der Arbeit aus sehen können.

Ich stelle mir das (Laienhaft) so vor, daß ich entweder auf meinen PC 
oder aber auf dem Server wo meine Homepage liegt, ein Script laufen 
lasse daß die Daten bereitstellt.
Meine C# Applikation (habe da schon was, muss halt dann entsprechend 
erweitert werden) holt die Daten dann vom Server ab, verarbeitet sie 
weiter und stellt sie dann dar.

Also vorhanden ist:
- Server (bei Strato)
- C# Applikation zum Anzeigen der Daten
- GPS Log file
- viel Zeit über Weihnachten :-)

Mein Frage ist jetzt, wie macht man soetwas am geschicktesten?

von Atmi (Gast)


Lesenswert?

peterguy schrieb:
> Also vorhanden ist:
> - Server (bei Strato)
> - C# Applikation zum Anzeigen der Daten
> - GPS Log file
> - viel Zeit über Weihnachten :-)
>
> Mein Frage ist jetzt, wie macht man soetwas am geschicktesten?

Das Programm auf Seiten des Servers dürfte in Python in maximal 20 
Zeilen durchprogrammiert sein. Die einzigste Aufgabe ist ja, die 
GPS-Daten von der seriellen Schnittstelle an ein (TCP/UDP/...)-Socket zu 
liefern.

Der Client braucht eine virtuelle RS232 Verbindung, du emulierst quasi 
deine RS232-Schnittstelle, welche ihre Daten von deiner 
Server-Applikation bezieht. Interessant wäre das auf Betriebssystemebene 
zu tun, so das dein Programm davon garnichts mitkriegt und du damit eine 
transparente Schicht hast.

Schwerpunkte also:
 - RS232 -> Socket
 - Transparente, virtuelle Schnittstelle welche ihre Daten von einem 
Socket anstatt der "echten" Schnittstelle bezieht

Schoenes Projekt um mit den niederen Schichten von Windows, Linux & Co. 
Bekanntschaft zu machen.

von Helmut L. (helmi1)


Lesenswert?

Um eine RS232 Schnittstelle unter TCP abzufragen kannst du COM2TCP 
nehmen.

http://www.astrogeeks.com/AstroGeeks/COM2TCP/download.html

von peterguy (Gast)


Lesenswert?

Also ein Python Script auf der Serverseite.
Blöde Frage, wie macht man das? Das Programmieren kriege ich schon hin, 
aber wie richte ich das Script auf meinem Server ein? Wie starte ich es? 
Und wie verbindet sich meine Applikation dann mit dem Script?
Ich meine, es wird doch bestimmt komplizierter sein als das ding zu 
erstellen und an beliebige Stelle auf meinem Server hochzuladen (oder?)


> Schwerpunkte also:
>  - RS232 -> Socket
Hmm, also ich streame ja nicht direkt von nem GPS Gerät.
Ich habe vielmehr eine fertige Logdatei, die ich wieder abspielen möchte 
(mit dem serverseitgen script).
Das Ganze dient dazu, um eine (noch fehlende) GPRS Datenverbindung zu 
simulieren.

Es muss Clientseitig nicht unbedingt eine virtuelle RS232 Schnittstelle 
sein, die ich in meiner Anwendung nutze (Ist natürlich ok, aber muss 
nicht zwingend sein).
Auf jeden Fall vermeiden möchte ich in die Lowlevel Schichten von 
Windows vorzudringen. Eine fertige Library oder Assembly wäre mir am 
liebsten. Keine Ahnung ob es da was gibt...

von Weinbauer (Gast)


Lesenswert?

wenn ich das recht verstanden habe hast Du n Logfile,
im ASCII-NMEA-Format vorliegen, die dann auf Deinem
Server (Strato) liegt.
Die willst Du dann per #c verarbeiten.
Die Verarbeitung soll nicht auf dem Server sondern
beim Client laufen.
Seh ich keine Problemchen ... einfach per HTTP oder FTP
zugreifen und die Datei ziehen.
Blöder wirds bei serverseitiger Verarbeitung ...
Da wäre dann PHP eine Möglichkeit.
Noch doofer wirds bei direkter Verarbeitung aktueller
Daten ... Die müssten dann jede Sekunde an den Server
geschickt werden, die Cronjobs bei Strato unterstützen
ein sekündliches Pollen nicht.
Ginge aber auch einfach durch Aufruf einer PHP-Seite mit
Übergabe des NMEA-Codes als GET-Variable, die dann an
eine Logdatei angehängt werden. Machbar.

von mar IO (Gast)


Lesenswert?

peterguy schrieb:
> Also vorhanden ist:
> - Server (bei Strato)

Strato bietet vieles an! Hast Du wirklich einen Server oder nur Hosting?

Was möchtest Du machen? - Jede Sekunde soll der Server eine Seite 
aktualisieren und du pollst einfach die Seite regelmäßig an oder soll 
der Server deine Anwendung benachrichtigen wenn eine neue Zeile gelesen 
wurde?

von peterguy (Gast)


Lesenswert?

Danke für die Antworten!

Also ich möchte folgendes (wie Weinbauer es schon treffend beschrieben 
hat):
GPS Logdatei im ASCII Format mit NMEA Strings liegt auf dem Server.
Sekündlich (oder auch schneler) soll ein Datensatz aus dieser Datei 
ausgelesen werden und irgendwie meinem Client (C# Anwendung) zur 
Verfügung gestellt.

Wenn ich das richtig verstehe wird das größte Problem, die GPS Daten auf 
dem Server zyklisch bereitzustellen? Meine C# Anwendung soll einfach nur 
jede Sekunde einen neuen NMEA String bekommen, d.h. der Server muss die 
Datei öffnen, zyklisch Zeile für Zeile auslesen und die gelesenen Daten 
bereitstellen.


> Strato bietet vieles an! Hast Du wirklich einen Server oder nur Hosting?
>
> Was möchtest Du machen? - Jede Sekunde soll der Server eine Seite
> aktualisieren und du pollst einfach die Seite regelmäßig an oder soll
> der Server deine Anwendung benachrichtigen wenn eine neue Zeile gelesen
> wurde?
Ob ich einen Server oder nur Hosting habe weiß ich nicht, vermutlich 
allerdings "nur" Hosting. Ist so ein 3€ pro Monat Paket.
Im Prinzip sollte der Server meine Anwendung benachrichtigen, daß eine 
neue Zeile gelesen wurde und die gelesenen Daten rüberschicken/abholen 
lassen.

von Purzel H. (hacky)


Lesenswert?

Server bedeutet etwas bereitzustellen, Client bedeutet etwas damit zu 
machen. Der Client soll ein Browser sein. Dann hat man mit Javascript 
die Moeglichkeit die Anfrage zu wiederholen. Ein Javascript auf der 
WebSeite wiederholt die Anfrage.

von Rinde (Gast)


Lesenswert?

Mh, wäre nicht folgendes sehr einfach zu machen?

Du machst eine ganz einfache Webseite mit PHP. Die liefert einfach den 
aktuellen wert aus deiner GPS-Datei.
Das sollte mit 5 Zeilen Code möglich sein.

Die C# Anwendung schickt nun im Sekundentakt einen HTTP Request an deine 
Webseite, und bekommt so dass zurück, was dein PHP-Skript generiert.
Die Daten brauchst du fdann nurnoch auszuwerten. Auch hier sollten ein 
paar Zeilen Code genügen...

von mar IO (Gast)


Lesenswert?

peterguy schrieb:
> Ob ich einen Server oder nur Hosting habe weiß ich nicht, vermutlich
> allerdings "nur" Hosting. Ist so ein 3€ pro Monat Paket.

Das ist aber wichtig zu wissen, denn z.B.

Rinde schrieb:
> Du machst eine ganz einfache Webseite mit PHP.

geht nicht, wenn Du kein PHP hast (BasisWeb für 1,58 € und BasisWeb L 
für 2,59 € haben kein PHP und Perl).

http://www.strato.de/hosting/basicweb/pakete/index.html

von peterguy (Gast)


Lesenswert?

> Du machst eine ganz einfache Webseite mit PHP. Die liefert einfach den
> aktuellen wert aus deiner GPS-Datei.
> Das sollte mit 5 Zeilen Code möglich sein.

> Die C# Anwendung schickt nun im Sekundentakt einen HTTP Request an deine
> Webseite, und bekommt so dass zurück, was dein PHP-Skript generiert.
> Die Daten brauchst du fdann nurnoch auszuwerten. Auch hier sollten ein
> paar Zeilen Code genügen...

Denke so etwas könnte funktionieren.
Hört sich nur (für mich als Laien zumindest) etwas gefrickelt an, gibts 
da nicht noch andere Möglichkeiten als HTTP?
Ich mein die ganzen Onlinespiele z.b., die schicken ja auch nicht HTTP 
requests hin und her (oder?)

Wobei, im Prinzip könnte man das wirklich machen über ein Webbrowser C# 
Control + html-Seite mit Javascript. Das wird dann mit invokes und 
callbacks mit meiner Anwendung verknüpft.
So in der Art spreche ich aus C# ja auch mein GoogleEarth Plugin an.


Zu meinem Web-Paket bei Strato:
"STRATO PowerWeb Basic" schimpft sich das Ganze (und kostet 3,99€ / 
Monat). Hatte vor einiger Zeit mal aufgerüstet, um meine mit Joomla 
erstellte Seite dort hosten zu können.
Also MySQL läuft da auf jeden Fall drauf.

von Weingut P. (weinbauer)


Lesenswert?

Der Server kann nix schicken bei Aktualisierung ...
wobei ... hmmm er könnte einen Request ausführen.
Dann müsste nur noch ... nee Käse, woher soll der Server denn wissen,
dass neue Daten da sind.
Das ginge nur mit einem Script, z.B. in php.
Ein Client ruft ein Script z.B. mit dem aktuellen NMEA als
$_GET Variable auf, das Script legt diesen String dann in der Logdatei
ab und führt seinerseits auf einen Dyndns-Port einen Request aus,
der dann auf Deinen Rechner forwarded wird wo dann die C# auf den
Request hin beim Server die aktuellen Daten per FTP holt ...

brrrrr ... nicht elegant, aber möglich.

von php (Gast)


Lesenswert?

das php file hat 1 zeile und die lautet in etwa
<?php file_put_contents("bla.txt", $_GET["mindfck"]);?>

dein problem ist tatsächlich die verbindung zum server
um http wirst du nicht herum kommen, weil du quasi mit deinem strato 
paket nur für http bezahlst und für nichts sonst

aber schau dir dochmal die winsock tutorials an,
das ist im grunde auch nur halb so wild

von php (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.