Wie am besten eine mobile Datenverbindung zwischen Smartphone und PC herstellen?

Micheal

Ensign
Registriert
Sep. 2009
Beiträge
149
Hi Leute!

Ich programmiere schon ein par Jahre aber mit dem Thema Netzwerk/Internet habe ich mich bisher noch gar nicht beschäftigt. Da ich wenig Ahnung habe wollte ich euch CB Experten fragen wie ich folgendes "Problem" am besten lösen kann.


ZIEL: Ich möchte für ein persönliches Arduino Projekt eine Datenverbindung zwischen dem PC/Mac zuhause und mein Smartphone - das sich NICHT im LAN befindet - herstellen.

Anwendungsbeispiel: Temperatursensor wird am Arduino angeschlossen, damit ich die Temperatur im Haus aus dem Urlaub auslesen kann. Das ist nur ein einziges Beispiel aber es gibt viele coole Sachen die man damit basteln könnte! Die jeweilige Programme auf dem Rechner und Smartphone werde ich selber programmieren. Darin sehe ich wenig Schwierigkeiten, wenn nur die Zwischenliegende Verbindung nicht wäre!

LÖSUNG:

1. Apache Webserver am PC im Haus und dann irgendwie über dem Webserver kommunizieren. Gute Lösung? Wenn ja, welche Kenntnisse benötige ich um so etwas zu bewerkstelligen? PHP/mySQL?

2. Ich habe gelesen dass man mit TCP Sockets einfach und effizient Daten verschicken kann. Habe folgendes gefunden: http://www.codeproject.com/Articles/586000/Networking-and-Socket-programming-tutorial-in-C Ich habe aber keine Ahnung wie das gehen soll.

3. Ist eine direkte Verbindung ohne Server möglich?

4. ??? ...Ich bitte um Vorschläge!:D


Also worin sollte ich mich vertiefen um die Lösung näher zu kommen? Vielleicht HTML, php, mySQL, oder etwas ähnliches? Es gibt so viele Web-Programmiersprachen... was ich brauche ist ein Schubs in die richtige Richtung!

Schon mal vielen Dank!

Gruß,

Michael
 
Wie siehts denn mit einer VPN-Verbindung zum Router aus? Dann bist Du quasi im "LAN" und kannst dort tun und lassen was Du willst?
Manche Router z.B. Fritz!Box bieten da Clients an, ansonsten muß man halt IPSec nehmen oder sowas...

Oder habe ich Deine Fragestellung falsch verstanden?
 
@wbjc2007 Danke für den Vorschlag! Ich wusste gar nicht das so was geht. Es würde die Sache auf jeden Fall einfacher machen wenn sich beide Geräte im selben (virtuellen) LAN befinden würden.
 
DynDNS, Port Forwarding, Netzwerkprogrammierung. Geht sicherlich auch über einen Webserver. Probier aus, was du für am besten empfindest. Ich würde ja auf einen Webserver setzen, da du damit von fast überall drauf zugreifen kannst.
 
Ja am besten ist ein VPN Tunnel nach Hause wie z.B. dank der Fritzbox. Damit kannst du bis zu 8 Simultane VPN Verbindungen aufrecht erhalten.
Der Vorteil ist, dass du auf das kompl. Netzwerk zugreifen kannst und das auch noch verschlüsselt.
Auch bist du der Admin und hast die Übersicht was im LAN passiert. Sich auf 3. System und Anbieter zu verlassen ist natürlich einfacher aber das Steigt das Risiko und auch die Ausfallwarscheinlichkeit.
 
@Yuuri Danke. Ein Webserver ist sicherlich eine gute Lösung. Aber wo soll ich anfangen über Netzwerkprogrammierung zu lernen?
 
Meiner Meinung nach kannst du das ganze über einen Webservice (http://de.wikipedia.org/wiki/Webservice), am besten SOAP (Plattformunabhängigkeit) realisieren.
Grob nach dem Motto: Zugriff auf den Webservice mit deinem selbst kreierten Client(z.B. kleine Android App) mit Zugangsdaten (Name/Passwort, o.Ä.) und er gibt dir die aktuellen Temperaturen.
Du musst das ganze natürlich nach außen erreichbar machen.
Bedeutet: Du brauchst entweder eine feste, öffentliche IP, oder du löst es über z.B. DynDNS (http://de.wikipedia.org/wiki/Dyndns) und dann Port-Forwarding(http://de.wikipedia.org/wiki/Port_Forwarding).
Musst dich logischerweise ein bisschen in das Thema einlesen.
Eine andere Lösung wäre natürlich das ganze über eine Webseite zu lösen. (HTML/PHP)
Aber eine Datenbank brauchst du meines Erachtens nach nicht, höchstens um den Login zu verifizieren.
Das kommt dann aber in jedem Ansatz auf dich zu, ist allerdings nicht allzu schwierig.
 
Mach lieber VPN - dann hast Du eine verschlüsselte Verbindung und den gleichen Adressraum wie die Geräte in Deinem Netzwerk. Alles andere, z.B. DynDNS und eigener Server und Portweiterleitung kann immer wieder Probleme machen (wenn z.B. ein benutzter Port nicht mehr frei ist oder für was anderes benutzt werden soll).
Vor allem hast Du bei offenen Ports immer offene Ports - und die können alle anderen auch finden und ggf. "nutzen".
VPN ist sicher!
 
wbjc2007 schrieb:
Mach lieber VPN - dann hast Du eine verschlüsselte Verbindung
Hat man per HTTPS genauso.
wbjc2007 schrieb:
Vor allem hast Du bei offenen Ports immer offene Ports - und die können alle anderen auch finden und ggf. "nutzen".
VPN ist sicher!
Wo kommen die Sicherheitsbedenken her? Der Webserver läuft auf Port 80/443, darüber wird alles angesprochen. Im Hintergrund (ausführbare Datei, direkte Kommunikation per Scriptsprache mit dem Arduino, etc.) kann doch dann beim Aufruf gewisser Seiten eine Verbindung mit dem Arduino hergestellt werden, diese werden geparst, aufbereitet und dann dem Client ausgeliefert.

1. Du hast keine offenen Ports nach außen, außer der für den Webserver.
2. Die Sicherheitsbedenken sind passé (insofern im Script nicht geschludert wird, aber das ließe sich mit einer htpasswd bspw. sehr einfach regeln).
3. Kein VPN-fähiges Endgerät von Nöten.
4. Jeder 0815 Client mit Browser kann drauf zugreifen und sei es ein Kühlschrank oder Toaster mit Touchscreen.
 
@BacShea Danke für die Antwort. Das hört sich alles machbar an. Kann man so einen "Webservice" in C/C++ programmieren?

@tRITON Danke für die Idee. Ich dachte immer die Dinger wären viel teurer. Ich werde mal bei eBay nachsehen.

@wbjc2007 Danke für den Vorschlag! Sagen wir mal ich würde das über ein VPN machen. Gibt es libraries in C/C++ die das kommunizieren innerhalb eines LANs übernehmen? Oder stelle ich mir das zu einfach vor?
 
Zuletzt bearbeitet:
Mein letzter Kontakt mit einem (C++) Compiler war glaube ich 2006 oder 2007 - da kann ich Dir leider nicht weiterhelfen. ;-)

Grundsätzlich hat Yuuri schon recht, wenn nur der Webserver angesprochen wird ist die Angriffsfläche relativ klein, dann sollte der Server aber gut mit Updates versorgt werden und, wie erwähnt, sollte das Skript sauber gemacht werden.

Zum VPN sei erwähnt, daß Du halt mit Deinem Router zu Hause eine Verbindung herstellen mußt, ob das jetzt per "Proprietären" Client oder "IPSec-geht-immer-Verfahren" machst ist dann erst mal wurscht. Du hast dann eine Verbindung, und bekommst auch (je nach Einstellung am Router) eine IP-Adresse aus dem lokalen Netzwerk (z.B. 192.168.1.0) daheim zugewiesen, also z.B. "192.168.1.200". Das bedeutet, daß Du ohne weiteres mit den Geräten im LAN kommunizieren kannst, z.B. "Server" 192.168.1.2, "Waschmaschine" 192.168.1.3, oder wie auch immer.

Das heißt, daß Du "im Internet" mit Deinem Smartphone z.B. "89.47.1.125" als öffentliche Adresse hast. Wenn Du jetzt eine Verbindung mit dem VPN-Server daheim herstellst, dann hat Dein Handy immernoch die Adresse "89.47.1.125", aber die IPSec-Schnittstelle hat dann z.B. "192.168.1.200". Dann ist nur noch wichtig, daß Deine App oder was auch immer daheim etwas machen soll über die richtige Schnittstelle kommuniziert - Stichwort Routing.

Bei Fragen, fragen! :-)
 
Micheal schrieb:
@BacShea Danke für die Antwort. Das hört sich alles machbar an. Kann man so einen "Webservice" in C/C++ programmieren?

Webservices gibt es soweit ich weiß für jede aktuelle Programmiersprache.
In C kenn ich mich da nicht so aus, aber da gibt es viele Tutorials, die man nur mal kurz googlen muss. Jede Sprache hat da ein paar eigene Schnittstellen, die man super verwenden kann, ist eigentlich kein großes Hexenwerk.
 
BacShea schrieb:
Meiner Meinung nach kannst du das ganze über einen Webservice (http://de.wikipedia.org/wiki/Webservice), am besten SOAP (Plattformunabhängigkeit) realisieren.

Servicemäßige Umsetzung, gute Idee. SOAP hingegen weniger.
Bei dem Vorhaben des TS entspricht hinterher vllt 5% des übertragenen Datenvolumens dem tatsächlichen Payload und die restlichen 95% sind Overhead. Vor allem im Kontext mobiler Anwendungen (auch wenn mobile Netze heute gut ausgebaut sind und es an Inklusivvolumen nicht mehr mangelt) ist SOAP meist keine optimale Wahl. Stattdessen könnte er sich eine RESTful-Api zusammenbauen, dafür gibt es genug Libs oder Frameworks.
 
Zuletzt bearbeitet:
Vollkommen richtig.
Die Sache ist eben nur, dass nicht sichergestellt ist, ob das Endgerät mit einem REST-Webservice umgehen kann. Mit SOAP hätte er diese Probleme auf jeden Fall nicht. Muss man sich eben vorher festlegen. Der Programmieraufwand wird sich bei beidem in etwa die Waage halten. Ich bin da bei C/C++ nicht so versiert...
 
Zurück
Oben