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
sry hab vergessen zu sagen... eine eigene Domain bzw. Subdomain ist vorhanden.
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.
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.
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.
Was für eine Anwendung ist es denn? Evtl reicht es ja schon, die Daten alle paar Minuten auf die Domäne zu laden?
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.
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
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.
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.
Falls du eine Fritzbox hast kannst du dort einen dyndns-Dienst einstellen. (Funktioniert bei den meisten Routern)
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.
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.
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
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
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.
... 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
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.
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
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
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
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
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
Hi
>wiznet 5100 mit einem xmega, funktioniert super :-)
Weiß ich. Frag mich immer, warum sich hier jeder einen ENC antun muss.
MfG Spess
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
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?
Hi >Hat irgendwer schon W5500 bzw. WIZ550IO in freier Wildbahn gesichtet? Schon mal im Wiznet-Shop http://www.shopwiznet.com/ probiert? MfG Spess
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.