Forum: Mikrocontroller und Digitale Elektronik Atmega ins Internet


von Martin J. (bluematrix) Benutzerseite


Lesenswert?

Hallo,

ich habe hier einen Atmega an den per SPI einen Ethernet Wiznet Chip 
angeschlossen ist. Verbinde ich den Controller meinen Rechner per 
Ethernet, kann ich verschiedene Messdaten in meinem Browser über die IP 
des Wiznet aufrufen.

Im nächsten Schritt würde ich gern über das Internet auf die Daten
meines Controller zugreifen kann, jedoch sollte der Controller dann nur 
noch mit dem Router verbunden werden.
Was muss ich alles einrichten, damit das funktioniert? Was benötige ich 
alles , bzw. geht das überhaupt so einfach?

Danke

von holger (Gast)


Lesenswert?

dyndns oder ähnlich

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

sry hab vergessen zu sagen...
eine eigene Domain bzw. Subdomain ist vorhanden.

von Wolfgang H. (frickelkram)


Lesenswert?

Ich gehe davon aus das Du einen Router hast, der den Internetzugang 
regelt.
Wenn Du intern ein Test-IP-Netz hast, macht der Router eine 
Adressumsetzung (NAT). Rückwärts musst Du dann ein Port-Forwarding auf 
Deinen ATMega einrichten, damit die Anfragen aus dem Internet weiter 
gleitet werden. Du baust dann eine Verbindung auf deine externe 
IP-Adresse und einen bestimmten Port auf. Die interne IP-Adresse ist bei 
Zugriffen aus dem Internet nicht bekannt. Suche im Internet mal nach 
NAT, PAT und Portforwarding.

Acho so, hätte ich fast vergessen. Deinen ATMega schließt Du an Deinem 
Internetrouter an, der wird ja wahrscheinlich einen Switch mit mehreren 
LAN-Anschlüssen haben.

von Philip S. (psiefke)


Lesenswert?

recht essentiell zu wissen: Du hast höchstwarscheinlich nicht bei jeder 
einwahl die selbe IP im Internet. Deshalb erwähnte holger(gast) dyndns.

Dieser Dienst sorgt mit einem kleinen Client auf deinem Router oder 
einem PC dafür, dass deine dynamische IP regelmässig an den dyndns 
server gemeldet wird. Dieser Service sorgt dann dafür, dass dein Router 
immer unter der selben Adresse erreichbar ist. (Schema: 
dervondiergewähltename.dyndns.blablabla)

Zusätzlich musst Du dann deine interne IP über die externe IP erreichbar 
machen. Hierzu dienen dann NAT, Portforwarding etc.

von c-hater (Gast)


Lesenswert?

Martin J. schrieb:

> eine eigene Domain bzw. Subdomain ist vorhanden.

Das allein genügt nicht. Sie muß auch noch auf deine aktuelle 
öffentliche IP aufgelöst werden. Wenn du keine statische IP hast, mußt 
du also selber dafür sorgen, daß nach jedem Wechsel deiner öffentlichen 
IP der DNS-Eintrag für deine (Sub-)Domain aktualisiert wird.

Wenn das gewährleistet ist, brauchst du nur noch auf deinem Router ein 
Port-Forward einrichten und deinem Atmega die LAN-Adresse deines Routers 
als Standard-Gateway angeben.

Aber bedenke: Das Teil ist damit auch quasi öffentlich. Jeder aus dem 
Internet kann dann darauf zugreifen.

Da der Atmel zuwenig Rechenleistung für starke Kryptographie und damit 
für eine zuverlässige Zugangsbeschränkung hat, ist es besser, ihn nicht 
wirklich in's Internet zu bringen. Statt dessen: VPN zum Router. Dann 
wird der entfernte Rechner praktisch Teil des LAN und der Rest des 
Internet bleibt ausgesperrt.

von Alex (Gast)


Lesenswert?

Was für eine Anwendung ist es denn? Evtl reicht es ja schon, die Daten 
alle paar Minuten auf die Domäne zu laden?

von Wolfgang H. (frickelkram)


Lesenswert?

c-hater schrieb:
> Martin J. schrieb:
...
> Aber bedenke: Das Teil ist damit auch quasi öffentlich. Jeder aus dem
> Internet kann dann darauf zugreifen.
>
> Da der Atmel zuwenig Rechenleistung für starke Kryptographie und damit
> für eine zuverlässige Zugangsbeschränkung hat, ist es besser, ihn nicht
> wirklich in's Internet zu bringen. Statt dessen: VPN zum Router. Dann
> wird der entfernte Rechner praktisch Teil des LAN und der Rest des
> Internet bleibt ausgesperrt.

ganz abgesehen davon das die IP-Stacks, die in diesen kleinen 
Controllern implementiert sind, nicht wirklich sicher sind. Da wird an 
Bytes gespart und das allernötigste implementiert. Lebenswichtige und 
Sicherheitsrelevante Dinge sollte man auf so einem Gerät nicht ins 
Internet stellen.

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

Hallo und danke für die vielen antworten.
als controller verwende ich einen Xmega128 mit 32Mhz, welcher eine 
interne 128bit AES Crypto Engines hat 
(http://www.atmel.com/Images/doc8405.pdf).
Die Daten sind nicht so besonders interessant, aber ganz blank sollten 
sie auch nicht da liegen. Es geht mir hier hauptsächlich nur um die 
Realisation.

Ich wollte meine Nutzdaten verschlüsseln, so dass nur der Anfragende 
Rechner mit dem richtigem Schlüssel Sie auch lesen kann.

Ich werde mich demnächst mal mit meinem Provider auseinandersetzten ob 
er "dyndns" unterstützt und wie ich das bei Ihm realisieren kann.

Danke

von Borislav B. (boris_b)


Lesenswert?

Martin J. schrieb:
> Ich werde mich demnächst mal mit meinem Provider auseinandersetzten ob
> er "dyndns" unterstützt und wie ich das bei Ihm realisieren kann.

Damit hat der provider nix zu tun. Das musst du bei dir lokal 
einrichten.

Martin J. schrieb:
> Ich wollte meine Nutzdaten verschlüsseln, so dass nur der Anfragende
> Rechner mit dem richtigem Schlüssel Sie auch lesen kann.

Warum so kompliziert? verlange vom anfragenden Rechner doch einfach ein 
Passwort.

von Karl H. (kbuchegg)


Lesenswert?

Martin J. schrieb:

> Ich werde mich demnächst mal mit meinem Provider auseinandersetzten ob
> er "dyndns" unterstützt und wie ich das bei Ihm realisieren kann.

Dein Provider hat normalerweise damit nichts zu tun.

Wenn du dich bei ihm einwählst, kriegst du von ihm eine IP zugewiesen 
und diese IP gibt dein Router an dyndns weiter, damit dyndns wiederrum 
diese in die DNS zusammen mit deinem Namen einträgt und verteilt, sodass 
weltweit alle Rechner wissen, welche IP-Adresse zum Klartextnamen 
"bluematrix.dyndns.org" gehört und deinen 'Rechner' (eigentlich den 
Router) dann auch mit der korrekten IP-Adresse ansprechen können.

Wenn du sowieso eine Domäne hast mit einer fixen IP, dann brauchst du 
auch kein dyndns. dyndns brauchst du nur, wenn sich deine IP 
zwischendurch ändern kann, sodass sich die Zuordnung 
Domänname/IP-Adresse ändert.

von Frank (Gast)


Lesenswert?

Falls du eine Fritzbox hast kannst du dort einen dyndns-Dienst 
einstellen. (Funktioniert bei den meisten Routern)

von Klaus W. (mfgkw)


Lesenswert?

dyndns zickt übrigens inzwischen ziemlich rum; sei wollen inzwischen 
jeden zum Zahlen drängen.

Ich bin deshalb von dyndns auf selfhost.eu umgestiegen.
Dei Fritzbox unterstützt den ebenso, und ich muß nicht jeden Monat 
rumklicken, um nicht ausgesperrt zu werden.

von Frank (Gast)


Lesenswert?

oder noip.com

von c-hater (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> dyndns zickt übrigens inzwischen ziemlich rum; sei wollen inzwischen
> jeden zum Zahlen drängen.
>
> Ich bin deshalb von dyndns auf selfhost.eu umgestiegen.
> Dei Fritzbox unterstützt den ebenso, und ich muß nicht jeden Monat
> rumklicken, um nicht ausgesperrt zu werden.

Also, wenn das bei selfhost.eu genauso ist wie bei selfhost.de, muß man 
da auch monatlich rumklickern. Zumindest hat man aber die Option, sich 
gegen einen einmaligen Obelix von 5 EUR von dieser lästigen Sache zu 
befreien.

von Wolfgang H. (frickelkram)


Lesenswert?

und bei noip auch.

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Wenn du sowieso eine Domäne hast mit einer fixen IP, dann brauchst du
> auch kein dyndns. dyndns brauchst du nur, wenn sich deine IP
> zwischendurch ändern kann, sodass sich die Zuordnung
> Domänname/IP-Adresse ändert.

wie muss ich das dann realisieren?

Alex schrieb:
> Was für eine Anwendung ist es denn? Evtl reicht es ja schon, die Daten
> alle paar Minuten auf die Domäne zu laden?

Das klingt auch gut, wie würde man so etwas realisieren? Damit wäre es 
doch auch möglich Daten von mehreren Controllern mit Internetanschluss 
auf die Plattform zu laden. Unter was muss ich da suchen um dazu ein 
Beispiel, bzw. mehr Informationen zu bekommen?

... eine Domain mit Webpage, einem ftp Server und noch genug Platz ist 
vorhanden.

: Bearbeitet durch User
von Pete K. (pete77)


Lesenswert?

Mach mal erstmal eine Zeichnung, wie Du Dir das vorstellst und zeichne 
dann die Datenströme ein und über im Trockendurchlauf, wie Du an die 
Daten kommst, bzw. wie die Daten bereitgestellt werden.

Dann kommst Du selbst auf die zu verwendenden Protokolle bzw. kannst 
gezielte Fragen stellen.

P.S.: und ja, so schwierig ist das nicht, wenn Du die Daten schon mit 
dem Browser Deines PCs sehen kannst.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Martin J. schrieb:
> Karl Heinz Buchegger schrieb:
>> Wenn du sowieso eine Domäne hast mit einer fixen IP, dann brauchst du
>> auch kein dyndns. dyndns brauchst du nur, wenn sich deine IP
>> zwischendurch ändern kann, sodass sich die Zuordnung
>> Domänname/IP-Adresse ändert.
>
> wie muss ich das dann realisieren?

Was hast du jetzt?
Hast du eine fixe Domäne oder nicht?

Dann hast du ja auch von demjenigen eine IP-Adresse zugewiesen bekommen. 
Und über die ist dein Hausnetz (der Router) von aussen ansprechbar.

Im Router wirst du wahrscheinlich noch ein Port-Forwarding eintragen 
müssen, damit der auch weiß, welcher Rechner aus dem Hausnetz zuständig 
ist, wenn ein Packet für deine IP auf einem bestimmten Port eintrifft. 
Der Router leitet das dann an die von dir eingetragene IP-Adresse des 
internen Hausnetzes weiter.

>
> Alex schrieb:
>> Was für eine Anwendung ist es denn? Evtl reicht es ja schon, die Daten
>> alle paar Minuten auf die Domäne zu laden?
>
> Das klingt auch gut, wie würde man so etwas realisieren? Damit wäre es
> doch auch möglich Daten von mehreren Controllern mit Internetanschluss
> auf die Plattform zu laden.


Kann es sein, dass ihr beiden Den Begriff 'Domäne' mit einem vom 
Provider zur Verfügung gestellten Web-Space verwechselt?

Wenn du eine Domäne beantragt hast, dann hast du dir eine fixe 
IP-Adresse zusammen mit einem Namen dafür registrieren lassen.

> Unter was muss ich da suchen um dazu ein
> Beispiel, bzw. mehr Informationen zu bekommen?

Ähm. Du lädst deine Daten genauso hoch, wie du es auch mit deiner 
Homepage machen würdest.


>
> ... eine Domain mit Webpage, einem ftp Server und noch genug Platz ist
> vorhanden.

Jetzt bin ich mir recht sicher, dass du von einem Web-Space redest. Mit 
Domäne hat das nicht viel zu tun.

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

... danke für eure Geduld.
Soviel habe ich mich noch nicht mit dem Aufbau der Ganzen Systeme 
beschäftigt. bis jetzt musste es immer nur funktionieren.

Ich habe bisher ...
- einen Webspace auf einem Server gemietet 1Gb
- den kann ich auch als FTP Server nutzen
- damit die auf dem Webspache gehostete Homepage erreichbar ist habe ich 
eine Domäne gemietet... www.bluematrix.de

Was möchte ich machen...
Ich habe an verschiedenen Standorten jeweils einen kleinen Controller 
der einige Daten sammelt. Jeder der Controller hat einen Anschluss zum 
Hausinternen wlan und somit auch über den Router rein theoretisch 
irgendwie auch einen zugriff ins Internet.

Ich möchte jetzt über das Internet auf die Daten der Controller zu 
greifen, bzw. abfragen.

Möglichkeiten (was ich verstanden habe):

1. ich könnte direkt über eine Weiterleitung per dynDns auf die 
einzelnen Controller zugreifen, dafür muss ich aber für jeden Contrller 
eine dynDNS beantragen, da ja der Router an jedem Standort immer mal 
wieder eine neue IP im Internet bekommt. Die kostet aber relativ viel, 
da ich ja dann Xmal die Gebühren für die dynDNS zahlen muss.

2. jeder Controller läd die Daten automatisch auf den bestehenden 
Webspace, bzw. FTP Server hoch. Dafür muss sich der Controller an dem 
Server anmelden und die Daten da hoch kopieren, sicher als Textfile oder 
?

3. gibt es noch etwas anderes, was Sinn macht

von Karl H. (kbuchegg)


Lesenswert?

Martin J. schrieb:

> Möglichkeiten (was ich verstanden habe):
>
> 1. ich könnte direkt über eine Weiterleitung per dynDns auf die
> einzelnen Controller zugreifen, dafür muss ich aber für jeden Contrller
> eine dynDNS beantragen, da ja der Router an jedem Standort immer mal
> wieder eine neue IP im Internet bekommt. Die kostet aber relativ viel,
> da ich ja dann Xmal die Gebühren für die dynDNS zahlen muss.

Hmm. Eigentlich nicht.
dynDNS war mal komplett kostenlos. Im Moment zahl ich, lass mich 
überlegen, ich glaub es sind 15$ im Jahr und kriege dafür 5 (oder waren 
es 10?) Namen, die ich mit der mir von meinem Provider zugeteilten 
IP-Adresse verknüpfen kann.

Worum geht es denn bei dynDNS bzw. DNS eigentlich?

Es geht darum, dass jeder Computer im Netz eine sog. IP-Adresse hat. 
192.168.0.5, so sieht so eine Adresse aus.
Nun ist das natürlich schön, aber für uns Menschen eher schrecklich. Wir 
merken uns nun mal 'www.mikrocontroller.net' wesentlich besser als so 
eine Nummer.
An der Stelle kommt dann DNS ins Spiel. Es gibt Server im Netz, die 
fungieren als DNS-Server. D.h. jeder (Computer) kann sich mit einer 
Anfrage an diese Rechner wenden und dort nachfragen, welche IP-Adresse 
sich hinter dem Namen 'www.microsoft.com' verbirgt. Gibst du in deinem 
Browser genau diesen Namen ein, dann macht dein Browser genau das: Er 
fragt beim DNS-Server nach, welche IP-Adresse das ist. Ist diese 
IP-Adresse dann erst mal ermittelt, dann schickt dein Browser seine 
Anfrage an diese IP-Adresse und der dortige Web-Server antwortet.
Soweit so gut. Woher weiß eigentlich der DNS-Server, welche IP-Adresse 
sich hinter einem Namen verbirgt?
Da gibt es 2 Möglichkeiten:
Der DNS-Server hat eine Liste. In der schaut er nach und wenn er den 
Namen findet, dann steht dort auch die IP-Adresse dabei.
Wenn er den Namen aber nicht in seiner Liste findet, dann kommen wir zur 
Möglichkeit 2. Und die ist trickreich: Der DNS-Server fragt einfach 
einen anderen DNS-Server!

Aber: du siehst schon, letzten Endes muss es weltweit irgendeinen 
DNS-Server geben, der diese Namens-IP-Adresse in seiner Liste hat.

Und genau da kommt dynDNS ins Spiel.
Denn 'normale DNS-Server' haben recht statische Listen. Das kommt daher, 
dass man früher an einer zentralen Stelle diesen Namen zusammen mit der 
IP Adresse einmalig registriert hat und dann blieb diese Zuordnung 
erhalten.

Nur trägt das aber diesem ganzen 'Ich rufe meinen Provider per Telefon 
an' Benutzern nicht mehr Rechnung. Denn wenn dein Router die Verbdinung 
mit deinem Proveider herstellt, dann bekommt er irgendeine IP-Adresse 
zugewiesen. OK, nicht irgendeine x-beliebige, aber irgendeine aus einem 
Vorrat des Providers.

Nur: ausser deinem Provider und deinem Router, weiß das niemand. Wenn 
also Onkel Herbert in den USA in seinen Browser 'www.MartinJ.de' 
eintippt, dann weiß kein DNS-Server dieser Welt, welche IP-Adresse jetzt 
gerade in diesem Moment dein Router vom Provider zugewiesen bekommen 
hat.

Womit wir wieder bei dynDNS wären.
dynDNS ist ein Dienst, der gegenüber dem restlichen Netz als DNS-Server 
auftritt und der es dir bzw. einem Programm gestattet, diese 
Namens-IP-Zuweisung kurzfristig zu erledigen. Wählt sich dein Router bei 
deinem Provider ein und teilt der Provider deinem Router die IP-Adresse 
156.28.7.34 zu, dann läuft ein Programm, welches dynDNS anruft und dort 
mitteilt: Im Moment ist 'www.MartinJ.de' unter der IP-Adresse 
156.28.7.34 zu erreichen.

Mit den Konsequenzen: Tippt Onkel Herbert in NewYork in seinen Browser 
'www.MartinJ.de' ein, dann landet die entsprechende IP-Anfrage 
irgendwann beim dynDNS Server, der dann auch tatsächlich diesen Namen in 
der Liste findet und dem Browser mitteilt: Gefunden, zu diesem Namen 
gehört die IP-Adresse 156.28.7.34. Onkel Herberts Browser schickt dann 
eine Anfrage an genau diese IP-Adresse und die landetr dann bei deinem 
Router, der sie in dein Hausnetz (anhand der Forwarding Regeln) 
weiterverteilt. Fazit: Onkel Herbert konnte sich zb mit deinem 
Web_Server zuhause bzw. auch mit deinem Atmel verbinden, obwohl er 
dessen IP-Adresse gar nicht kennt.

>
> 2. jeder Controller läd die Daten automatisch auf den bestehenden
> Webspace, bzw. FTP Server hoch. Dafür muss sich der Controller an dem
> Server anmelden und die Daten da hoch kopieren, sicher als Textfile oder
> ?

So, wie du eben hochladen kannst. Meistens ist das per FTP. Und ja, FTP 
ist auch nichts anderes als: 2 Computer tauschen Texte miteinander aus, 
wobei die 'Steuertexte' standardisiert sind.

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

Danke dir für die ausführliche Beschreibung. Super Beitrag!
Ich werde mich mal auf die suche machen und mich noch etwas dazu 
informieren.
... und dann versuchen etwas auf die Beine zu stellen.

Synchronisation der Zeit per Internet
Gibt es irgendwo ein Beispiel Projekt, wo man die aktuelle zeit aus dem 
Internet mit dem Controller abfragt?

: Bearbeitet durch User
von Karol B. (johnpatcher)


Lesenswert?

Ich will hier dein Projekt nicht schlechter machen als es ist, aber wie 
bei so eigentlich jedem Vorhaben, dass auf kleine Mikrocontroller und 
das Internet setzt, möchte ich auch dich darauf hinweisen, dass du es 
dir bedeutend einfacher machen kannst - und ganz nebenbei auch bedeutend 
robuster und sicherer.

Das Problem mit einfachen Mikrocontrollern im Netzwerk ist einfach das 
fehlende Betriebssystem bzw. die fehlenden Netzwerkstacks, die ein 
vernünftiges Betriebssystem liefert. Das wurde weiter oben zwar schon 
kurz angesprochen, aber ich habe nicht das Gefühl, dass das bis zu dir 
durchgedrungen ist.

Alle mir bisher untergekommen Netzwerklösungen für AVRs, Arduinos, usw. 
sind Frickel-Lösungen, die man im besten Falle als Proof of Concepts 
ansehen sollte. Klar mag das eine Herausforderung sein, aber unter 
keinen Umständen würde ich damit in den Produktivbetrieb übergehen, da 
eine vernünftige (d.h. den gängigen Standards entsprechende) 
Implementierung aufgrund des fehlenden Speicherplatzes schlichtweg 
unmöglich ist. Ein paar UDP Pakete zu verschicken ist natürlich 
prinzipiell kein Problem, aber alles was darüber hinaus geht, wird zu 
einer Herausforderung.

Du sprichst außerdem davon, dass du prinzipiell schon vorhast 
Verschlüsselung einzusetzen. Und spätestens da solltest du auf bewährte 
Lösungen (z.B. in Form von SSL) setzen und nicht auf irgendwelche 
Frickel Lösungen setzen. Mag sein das der von dir eingesetzte 
Mikrocontroller ein paar Kryptofunktionen mitbringt. Allerdings sind 
diese an und für sich nicht viel Wert, wenn man sie nicht richtig 
einzusetzen weiß. Und ich bezweifle z.B., dass du ohne entsprechendes 
Hintergrundwissen in akzeptabler Zeit eine brauchbare SSL 
Implementierung hinbekommst, die "sicher" ist und in den 
Programmspeicher deines Mikrocontrollers passt.

Insofern bietet es sich aus meiner Sicht bei Geschichten bzgl. 
Netzwerken bzw. Sicherheit immer an auf Bewährtes zu setzen, z.B. in 
Form von fertigen Linuxboards. Die kosten dank Raspberry Pi, GNUblin & 
Co. auch nicht die Welt und bieten dir echte und vor allem sichere 
Möglichkeiten an mit dem Netzwerk bzw. Internet zu interagieren. Ein 
funktionsfähiger NTP Client z.B. ist in wenigen Augenblicken 
eingerichtet. Auch sämtliche Sicherheitsaspekte lassen sich damit 
vernünftig in Angriff nehmen. SSL & Co. sind hier kein Problem.

Dank diverser Schnittstellen (UART, I2C, SPI) ist es auch kein größeres 
Problem dein bisherigen Controller weiter zu verwenden. Dieser kümmert 
sich dann halt wirklich nur um das Erfassen der Daten und reicht diese 
einfach weiter. Alternativ ist es natürlich denkbar (je nach Anwendung 
und Anforderung) die Daten direkt mit einem Linuxboard zu erfassen.

Daher rate ich dir dringlichst dein Vorhaben unter o.g. Aspekten nochmal 
zu überdenken.

Mit freundlichen Grüßen,
Karol Babioch

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Das Problem mit einfachen Mikrocontrollern im Netzwerk ist einfach das
>fehlende Betriebssystem bzw. die fehlenden Netzwerkstacks, die ein
>vernünftiges Betriebssystem liefert. ...

Der TO schrieb ganz am Anfang:

>ich habe hier einen Atmega an den per SPI einen Ethernet Wiznet Chip
>angeschlossen ist.

Er hat zwar nicht geschrieben, welchen er benutzt. Aber z.B. diese

http://www.wiznet.co.kr/Sub_Modules/en/product/Product_Detail.asp?cate1=5&cate2=7&cate3=26&pid=1011

http://www.wiznet.co.kr/Sub_Modules/en/product/Product_Detail.asp?cate1=5&cate2=7&cate3=25&pid=1012

enthalten den kompletten Stack in Hardware und haben bis zu acht Ports. 
Damit hat der Controller (fast) nichts mit zu tun. Viel besser können es 
Betriebssysteme auch nicht. Selbst unter Assembler ist damit kein 
Problem z.B. eine TCP-Verbindung aufzubauen.

MfG Spess

von Sebastian W. (wangnick)


Lesenswert?

Martin J. schrieb:
> 2. jeder Controller läd die Daten automatisch auf den bestehenden
> Webspace, bzw. FTP Server hoch. Dafür muss sich der Controller an dem
> Server anmelden und die Daten da hoch kopieren, sicher als Textfile oder
> ?
> 3. gibt es noch etwas anderes, was Sinn macht

Hallo Martin,

Ein Upload über FTP ist sicherlich eine Möglichkeit.

Umfasst dein Hosting CGI? Dann könntest du alternativ die Daten vom uC 
per URL-Abruf an ein CGI-Script übergeben, und das CGI-Script schiebt 
die Daten dann in eine Datei oder eine Datenbank (falls vorhanden).

Vielleicht ist auch Xively (ehemals Pachube, ehemals Cosm) eine 
Alternative für dich.

Der Vorteil von Daten-Push anstelle von Daten-Pull ist, dass du dir das 
ganze dyndns, firewall der Routers öffnen, NAT etc. Gedöns sparen 
kannst.

LG, Sebastian

PS: Karol, ein Gutes hat doch eine uC-Lösung: Man spart sich die 
Schwachstelle Betriebssystem ;)

: Bearbeitet durch User
von Martin J. (bluematrix) Benutzerseite


Lesenswert?

spess53 schrieb:
> Er hat zwar nicht geschrieben, welchen er benutzt. Aber z.B. diese

wiznet 5100 mit einem xmega, funktioniert super :-)
es ging mir halt nur um das Internetzugs

von spess53 (Gast)


Lesenswert?

Hi

>wiznet 5100 mit einem xmega, funktioniert super :-)

Weiß ich. Frag mich immer, warum sich hier jeder einen ENC antun muss.

MfG Spess

von Sebastian W. (wangnick)


Lesenswert?

spess53 schrieb:
> Weiß ich. Frag mich immer, warum sich hier jeder einen ENC antun muss.

Hat irgendwer schon W5500 bzw. WIZ550IO in freier Wildbahn gesichtet?

LG, Sebastian

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

nein maximal 5300

von Pete K. (pete77)


Lesenswert?

Sebastian Wangnick schrieb:
> Umfasst dein Hosting CGI? Dann könntest du alternativ die Daten vom uC
> per URL-Abruf an ein CGI-Script übergeben, und das CGI-Script schiebt
> die Daten dann in eine Datei oder eine Datenbank (falls vorhanden).

Hast Du da vielleicht mal ein Beispiel?

von spess53 (Gast)


Lesenswert?

Hi

>Hat irgendwer schon W5500 bzw. WIZ550IO in freier Wildbahn gesichtet?

Schon mal im Wiznet-Shop

http://www.shopwiznet.com/

probiert?

MfG Spess

von Stefan (Gast)


Lesenswert?

Alternativ zu DynDNS könntest Du auf die Mikrocontroller ein programm 
installieren, welches in regelmäßigen Zeitabständen eine Verbindung zu 
deinem gemieteten Webserver aufbaut. Und zwar zu einem Programm, dass Du 
selbst schreibst.

Dieses Programm ermittelt die IP-Adresse des "Anrufer", also die 
dynamische IP-Adresse des Mikrocontrollers und trägt sie in eine DB ein. 
Diene DB enthält dann immer die gerade aktuelle IP-Adresse deiner 
Mikrocontroller.

Eine wieteres Programm erzeugt eine dynamische Webseite (z.B. PHP), 
welche diese IP-Adressen aus der DB ausliest und daraus Links zusammen 
bastelt.

Du kannst dann diese Webseite aufrufen, einen Link anklicken, und schon 
bist Du mit dem Mikrocontroller verbunden.

Also quasi ein selbstgemachtes dyndns.

von Sebastian W. (wangnick)


Lesenswert?

Pete K. schrieb:
> Sebastian Wangnick schrieb:
>> Umfasst dein Hosting CGI? Dann könntest du alternativ die Daten vom uC
>> per URL-Abruf an ein CGI-Script übergeben, und das CGI-Script schiebt
>> die Daten dann in eine Datei oder eine Datenbank (falls vorhanden).
>
> Hast Du da vielleicht mal ein Beispiel?

Arduino:
1
void sendData (char* http) {
2
  // http format: "GET /?table=xxx&key1=val1&key2=val2"
3
  // Attn: http string space will be re-used for md5 digest et al!
4
  static byte connectionFailures = 0;
5
  if (client.connect(SERVER,80)) {
6
    client.print(http);
7
    concat_P(http,F("Ganz Geheim!"));
8
    md5(digest,http,strlen(http)*8);
9
    http[0] = 0;
10
    concat_P(http,F("&md5="));
11
    concat_hex(http,digest,sizeof(digest));
12
    concat_P(http,F(" HTTP/1.0\r\nHost: "));
13
    concat(http,SERVERNAME);
14
    concat_P(http,F("\r\n\r\n"));
15
    client.print(http);
16
    connectionFailures = 0;
17
  } else {
18
    // if you couldn't make a connection:
19
    if (++connectionFailures>20) {
20
      connectionFailures = 0;
21
      ethernet_setup();
22
    }
23
  }
24
}

CGI:
1
#!/usr/bin/python2.5
2
# -*- coding: utf-8 -*-
3
# This file needs Unix line end conventions for the shebang line to work on DF
4
5
import sys
6
try:
7
    import os
8
    import cgi
9
    import hashlib
10
    import datetime
11
12
    # Retrieve URI arguments into dict
13
    form = cgi.FieldStorage()
14
    params = dict([(key,form.getfirst(key)) for key in form.keys()])
15
16
    # Extract mandatory arguments
17
    table = params.pop('table','')
18
    digsent = params.pop('md5','').upper()
19
    if not table or not params:
20
        print 'Status: 400 Bad Request'
21
        print
22
        print 'Status: 400 Bad Request'
23
        sys.exit()
24
25
    # Check digest
26
    http = 'GET '+os.environ.get('REQUEST_URI','')
27
    http = http[:http.rfind('&md5=')]+'Ganz Geheim!'
28
    digexpt = hashlib.md5(http).hexdigest().upper()
29
    if digsent!=digexpt:
30
        print 'Status: 403 Forbidden'
31
        print
32
        print 'Status: 403 Forbidden'
33
        sys.exit()
34
35
    # Connect to MySQL
36
    import MySQLdb
37
    db = MySQLdb.connect(host='mysql5.wangnick.com',user='db36289_3',passwd='geheim',db='db36289_3')
38
    cur = db.cursor()
39
40
    # Check table
41
    sql = "SHOW TABLES LIKE '%s'"%table
42
    if not cur.execute(sql):
43
        print 'Status: 400 Bad Request'
44
        print
45
        print 'Status: 400 Bad Request (%s)'%table
46
        sys.exit()
47
48
    # Check available columns
49
    sql = 'DESCRIBE %s'%table
50
    cur.execute(sql)
51
    collist = cur.fetchall()
52
    # print "collist: "+str(collist)+"<br/>"
53
54
    known = dict()
55
    knownnames = list()
56
    for col in collist:
57
        name = col[0]
58
        known[name] = len(knownnames)
59
        knownnames.append(name)
60
61
    # Prepare the INSERT request
62
    lastrow = None
63
    utc = datetime.datetime.utcnow().replace(microsecond=0)
64
    if 'Date' not in params:
65
        params['Date'] = utc
66
    insert = dict()
67
    for name, value in params.iteritems():
68
        if name not in known:
69
            if 'Misc' in known:
70
                if 'Misc' not in insert:
71
                    insert['Misc'] = ''
72
                else:
73
                    insert['Misc'] += ', '
74
                insert['Misc'] += name+":"+value
75
        else:
76
            insert[name] = value
77
            deltaname = name+'Delta'
78
            if deltaname in known and 'Date' in known:
79
                if lastrow is None:
80
                    sql = "SELECT %s FROM %s ORDER BY Date DESC LIMIT 1"%(",".join(knownnames),table)
81
                    # print "lastrow sql: "+sql+"<br/>"
82
                    cur.execute(sql)
83
                    lastrow = cur.fetchone()
84
                    # print "lastrow: "+str(lastrow)+"<br/>"
85
                lastvalue = lastrow[known[name]] if lastrow else None
86
                if lastvalue is not None:
87
                    if name=="Date":
88
                        delta = utc-lastvalue
89
                        delta = str(delta.days*86400+delta.seconds)
90
                    else:
91
                        delta = str(float(value)-float(lastvalue))
92
                    insert[deltaname] = delta
93
94
    # print "insert: "+str(insert)+"<br/>"
95
    sql = 'INSERT INTO %s (%s) VALUES (%s)'%(table,','.join(insert.keys()),
96
            ','.join(('%s',)*len(insert)))
97
    # print "insert sql: "+sql+"<br/>"
98
    cur.execute(sql,insert.values())
99
    print
100
    print '%2d val %sZ'%(len(params),utc.strftime('%H:%M:%S'))
101
except SystemExit:
102
    raise
103
except:
104
    print 'Status: 500 Internal Server Error'
105
    print
106
    print 'Status: 500 Internal Server Error'
107
    import traceback
108
    print '\n'.join(traceback.format_exception(*sys.exc_info()))
109
    raise

LG, Sebastian

von Jobst M. (jobstens-de)


Lesenswert?

Alternative zu dyndns: http://FreeDNS.afraid.org
Zicken nicht rum, kein ständiger login nötig.


Gruß

Jobst

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.