Datenübernahme aus einer Webseite

Hallo,

wie kann ich direkt von einer Webseite Daten in einen Arduino (noch offen welcher - lasse mich auch bei dieser Frage gerne beraten) einlesen. Das müsste der Arduino allerdings auch selbständig machen, also ohne dass ich ihn "anschupse" - zum Beispiel zeitgesteuert nachfragen ob es "Neues" gibt.

Gruß Gsibar

Kleine Ergänzung.

Ich habe einen Arduino-UNO und er würde sich natürlich anbieten - eine notwendige andere Neuanschaffung soll aber kein Hindernis sein.

Gruß Gsibiar

Beschreib die Sache mal ausführlicher. Vor allem um was für eine Webpage es geht.

Hallo,

die Seite ist noch nicht existent. Es geht darum dass man in der Webseite Daten eingibt (z.B. über ein gewöhnliches Textfeld) und diese Daten sollten dann an den Arduino weitergereicht werden. Ich nutze gewöhnlich serverseitig Java-EE (fallweise auch PHP) und MySQL. Hoffe das beantwortet die Frage.

Gruß Gsibiar.

Lösung:

PHP-Skript A nimmt aus einem beliebig aufwändig gestalteten HTML-Formular Daten (POST) entgegen und sichert sie als Datei oder in einer Datenbank auf dem Webserver.

Arduino ruft PHP-Skript B ab, welches die Daten aus der Datei oder Datenbank ausliest und an den Arduino sendet.

Das Verfahten hat den Vorteil, dass die vom Arduino abgerufene Datei sehr "sparsam" gestaltet werden kann, im günstigsten Fall einfach nur die zu verarbetenden Daten. Ein Arduino ist rel. "schwachbrüstig" und aufwändiges String-Parsen gehört ganz bestimmt nicht zu dessen Stärken ...

Hallo,

interessante Variante.
Wie kann ich vom Arduino aus auf das PHP-Skript zugreifen?
Ich nehme an, dass geht mit dem UNO nicht - sondern einem leistungsstärkeren Gerät?

Gruß Gsibiar

UNO macht kein PHP und auch kein Java. Aber der UNO macht einfache Webseiten, wo du deine Daten direkt eingeben kannst. Ist schon sehr oft hier besprochen worden. Dann brauchst du keinerlei weitere Server, etc., nur auf dem Eingabegerät ein Browser. Oder u.U. nicht mal das.

Hallo,

das ist nicht ganz was ich in meiner - ursprünglichen - Frage gemeint habe. Mein Ansinnen wäre, dass ich die Webseite auf (m)einem Server betreibe und die Daten dann in den Arduino übernehme.

Gruß Gsibiar

Der Uno kann das sehr wohl.

PHP läuft auf dem Server - damit hat der Uno Nichts direkt zu tun, er "merkt" es nichtmal. Der Uno sendet ein HTTP-Get-Statement (Seitenabruf) und bekommt die Daten von dem PHP-Skript (auf dem Server) zugesandt ... so einfach ist das.

PHP ist auf dem Server nur deshalb nötig, weil es eben nicht um statische (vorher geschriebene) Daten geht, sondern um "frische" dynamische Daten aus einer Datenbank bzw. Datei ...

@ElEspanol: Ich meine in diesem Falle den Uno als Client, nicht als Server! Dazu benötigt er nur HTTP, dafür reicht die Performance :-)

Hallo,

perfekt! Damit kann ich ihn auch per Java bedienen; das wäre für mich der Idealfall, da ich gewöhnlich Java nutze. Gibt es dazu ein ausprogrammierte Beispiel oder ein Tutorial?

Gruß Gsibiar

Beispiel oder Tutorial kenn ich jetzt nicht, aber wenn du schon mal programmiert hast, ist das kein großes Ding.

Ich nehme an, Schritt 1 (Webformular -> Webserver) ist klar, oder? Wenn nicht, frag ... ich will dich nur nicht langweilen, falls alles bekannt ist.

Für das Auslesen durch den Arduino sieh dir mal das Beispiel aus der Arduino-IDE an, "Web-Client". Da werden zur Demonstration Daten von Google abgerufen. Das änderst du nat. auf die Adesse deines eigenen PHP-Skriptes B. Dann noch ein wenig Parsing und die Kuh ist vom Eis :-)

Wenn du Hilfe brauchst, frag nach Details ... schreib doch mal, um was für Daten und wie viele es sich handelt, da muss man evtl. noch mal genauer nachdenken.

Ihr denkt da falschrum. 1. Uno als Server wartet auf Datenübertragung 2. PHP oder Java oder was auch immer auf deinem Server stellt eine Page zur Verfüngung, in die irgendwelche Daten eingegeben werden. Sobald das geschehen ist, gibt der "PHP oder Java oder was auch immer"-Server die gewünschten Daten SOFORT per GET-Abfrage an den UNO.

Somit muss der UNO nicht alle naselang abfragen, und es entsteht sogut wie keine Zeitverzögerung bis der UNO die Daten hat.

... leider haben PHP-Scripts die dumme Eigenschaft, nicht von selber zu starten sondern nur "aktiv" zu werden, wenn man sie "aus dem Server lutscht". Also muss schon der Arduino da rumpollen ...

Die Idee von ElEspanol ist nicht falsch, auch so herum ist es machbar. Aber wer hat wohl bei Verbindungsproblemen den längerem Atem (bzw. das begrenzte Timeout)?

Hallo,

ich würde vorschlagen, wir entwickeln gemeinsam ein kleines Tutorial - indem wir hier den Vorgang gemeinsam aufbauen bzw ausarbeiten. Abschließend könnte ich mir vorstellen, dass ich (oder wer sonst dazu Lust hat) dazu ein Video-Tutorial erstelle. Was meint ihr dazu?

Für den Versuch würde wahrscheinlich eine einfache HTML-Seite ohne PHP ausreichen. Ich gehe davon aus, dass man für die Datenübernahme ein Name-Wert-Paar benötigt. Das könnte ja auch statisch bereitgestellt werden. Daher gehe ich davon aus, dass man die Daten auch per XML bereitstellen könnte. Für das Beispiel würde ich aber bei einfachem HTML bleiben.

Gruß Gsibiar

qualidat: Die Idee von ElEspanol ist nicht falsch, auch so herum ist es machbar. Aber wer hat wohl bei Verbindungsproblemen den längerem Atem (bzw. das begrenzte Timeout)?

Das PHP skript wird doch durch die Dateneingabe bereits angestoßen. Fehlerbehandlung musst du da schon selbst einbauen. Notfalls schickt dir das Skript eine Email, wenn der Arduino die Daten nicht bekommen hat. Das Skript macht alles, was du programmierst.

Und wie bereits vorher ausgeführt, einfaches Html bekommt man direkt mit dem Uno hin.

Warum HTML, warum Webseiten?

OK, Webseiten machen Sinn, wenn sie von einem richtigen Webserver ausgeliefert werden. Arduinos sind in der Regel zu schlapp für sowas. Das sollte man größeren Schachteln mit PHP, Java o.Ä. überlassen.

Darum mein Tipp: REST

Wenn der Arduino Daten für den Server hat, macht er einen HTTP POST Request. Wenn der Arduino Daten vom Server wünscht, einen HTTP GET. usw. Die Übertragung kann in plain/text oder per JSON erfolgen. Ist immer noch viel Aufwand für den Arduino, aber viel schlanker bekommt man es wohl nicht.

Serverseitig, also PHP und MySQL, gibt es das RedBean ORM. RedBean hat schon einen brauchbaren Rest Server dabei.

Schau mal Post 3, es ist Mensch-Maschine Kommunikation. Er muss ja was in seinem Browser sehen, damit er dort in Felder Daten eingeben kann. Klar könnte man in die Url von Hand die Parameter eintragen, aber das kann/sollte in diesem Fall nicht sein.

Bei Maschine-Maschine kannst du ja machen was du willst, da brauchste kein Html oder anderes Gedöns.

Also wenn der Arduino zeitnah die Daten bekommen soll und nicht dauernd pollen soll, sehe ich hier den Arduino klassisch als Server.

Noch hat der TE ja nicht genau dargelegt, welchen Umfang das ganze haben wird und wofür es dient. Und aufgrund der Fragestellung an sich, würde ich gar nicht mit Kanonen auf Spatzen schießen. Und von dem REST haben 99 % bestimmt noch nie was gehört, aber etliche, die sich mit dem Thema beschäftigen, haben es schon oft verwendet, ohne zu wissen, das es REST heißt.

Hallo,

eines der Grundzüge von http ist ja schon das Request - Response - Vorgehen. Damit ist es dann aber nicht möglich von einem PHP-Skript aus zu senden. Somit müsste entweder der Arduino pollen oder es müsste eine andere Technologie eingesetzt werden - oder sehe ich das falsch?

Gruß Gsb

Zur Frage wofür das Ganze: Mir geht es einmal darum grundsätzlich zu verstehen was - wie - geht.

Eine erste - kleine - Anwendung wäre eine Zugangskontrolle zu einem Vereinslokal. Wir haben das Problem, dass der mit dem Schlüssel immer zuletzt kommt :slight_smile:
Im Lokal gibt es einen ständig laufenden Rechner. Dieser ist am Internet und könnte eine Webseite bereitstellen. Mir ist bewusst was das für Probleme mit sich bringt - darum geht es hier nicht.

Das ist aber - wie ich mich kenne - nur der Anfang.

Gruß Gsb

Gsibiar: Somit müsste entweder der Arduino pollen oder es müsste eine andere Technologie eingesetzt werden - oder sehe ich das falsch?

So ist das wohl!

Das müsste der Arduino allerdings auch selbständig machen, also ohne dass ich ihn "anschupse" - zum Beispiel zeitgesteuert nachfragen ob es "Neues" gibt.

Das sollte problemlos machbar sein.

Wenn du allerdings vom Server an den Arduino senden möchtest, wird das am einfachsten gelingen, wenn du den Server unter voller Kontrolle hast und er im gleichen Netz steht.

Es geht natürlich auch über DynDNS o.ä. und einem Tunnel im NAT DSL Router.

Das einfache Spiel: "Arduino hat Daten für Server" oder "Arduino will Daten vom Server" Der Arduino setzt einen Request ab, die Daten werden ausgetauscht.

Etwas komplizierter: "Server hat(oder will) Daten für(vom) Arduino" Irgendwo her hat der Server die Anregung zum Datenaustausch ja.... Höchstvermutlich aus einem Request. Innerhalb dieser Requestabhandlung kann der Server(PHP) einen Request zum Arduino senden. Die meisten Webserver können Cronjobs, also geht auch Server seitiges Polling.

Alternativ, wenn alles im eigenen Netz steht, bzw kein Mietwebspace am Spiel beteiligt ist: Dann kann man mit einfachen Mitteln einen TCP Socket zwischen Server und Arduino offen halten. Völlig losgelöst von irgend einem HTTP Rest Gehampel.

Schau mal Post 3, es ist Mensch-Maschine Kommunikation. Er muss ja was in seinem Browser sehen, damit er dort in Felder Daten eingeben kann.

Mensch - Maschine kann auch auf die Kommunikation zwischen dem WebServer und Browser beschränkt sein. Dem Arduino fehlen einfach die Ressourcen um darauf einen vernünftigen Webserver betreiben zu können.