Go Down

Topic: Datenübernahme aus einer Webseite (Read 3515 times) previous topic - next topic

combie

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.







Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

ElEspanol

#16
Sep 06, 2015, 10:15 am Last Edit: Sep 06, 2015, 10:22 am by ElEspanol
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.

Gsibiar

#17
Sep 06, 2015, 10:30 am Last Edit: Sep 06, 2015, 10:38 am by Gsibiar
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

Gsibiar

#18
Sep 06, 2015, 10:40 am Last Edit: Sep 06, 2015, 10:43 am by Gsibiar
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 :-)
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 

combie

#19
Sep 06, 2015, 11:02 am Last Edit: Sep 06, 2015, 11:10 am by combie
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!

Quote
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.

 
Quote
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.
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Gsibiar

#20
Sep 06, 2015, 11:12 am Last Edit: Sep 06, 2015, 11:14 am by Gsibiar
Okay,

wir diskutieren hier verschiedenste Technologien. Von http bis hin zu Sockets.

Ich würde vorschlagen, dass wir uns auf ein Vorgehen einigen und das dann einmal gemeinsam "aufbauen".

Ideal wäre - User gibt Daten in der Webseite ein uns schickt diese ab. Arduino wird benachrichtigt und holt sich die Daten - oder er bekommt sie gleich mitgeliefert.
Polling ginge auch, verursacht aber mehr Netzwerkverkehr, da er aber im selben LAN ist wie der Webserver, wäre wahrscheinlich auch das kein Problem.
So nebenbei sei angemerkt, dass ja nicht der selbe Server die Webseite bereitstellen und den Arduino mit Daten versorgen muss. Es muss nur im Hintergrund die selbe Datenquelle verwendet werden.

Gruß Gsb

combie

#21
Sep 06, 2015, 11:24 am Last Edit: Sep 06, 2015, 11:25 am by combie
Quote
Ich würde vorschlagen, dass wir uns auf ein Vorgehen einigen und das dann einmal gemeinsam "aufbauen".
Bevor wir uns auf ein (technisches)Vorgehen einigen, würde ich vorschlagen, wir erstellen erst mal ein Datenflussdiagramm.

Welche Daten fließen?
Von Wo, nach Wo?

 
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Gsibiar

#22
Sep 06, 2015, 11:29 am Last Edit: Sep 06, 2015, 11:29 am by Gsibiar
Hallo,

gute Idee - aber mit den Mitteln dieses Editor´s wird ein korrek dargestelltes Diagramm schwierig.
Reicht eine rudimentäre Darstellung?

Gruß Gsb

combie

Quote
Reicht eine rudimentäre Darstellung?
Ach, bestimmt....
Selbst Text only....


z.B. so:

Der Weg eines Temperaturwertes.

Sensor --> Arduino --> Server --> Datenbank
Datenbank --> Server --> Browser

Technische Details, bleiben erst mal außen vor.
Z.B.
welcher Sensor
ob die Temperaturen in Grad Celsius, oder/und als Grafik im Browser an kommen
welche Kommunikationsart verwendet wird



Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Gsibiar

#24
Sep 06, 2015, 11:55 am Last Edit: Sep 06, 2015, 11:58 am by Gsibiar
Hallo,

das wäre die falsche Richtung.
Gemeint ist User (Webseite) --> Datenbank --> Arduino.

Also ich versuche es einmal (rudimentär):
User gibt Daten in eine Webseite ein. In dieser Seite ist ein Eingabefeld vorhanden und es wird ein Int entgegengenommen. Int gibt an, wie oft eine LED blinken soll.
Die Daten werden beim Absenden in einer Datenbank abgelegt - mit einer ID, welche die Reihenfolge der Eingaben dokumentiert. In der DB muss es ein weiteres Feld geben (boolean), welches bereits abgearbeitete Datensätze markiert.   
Im selben LAN befindet sich ein Arduino und dieser "wartet" auf Arbeit.
Fordert der Arduino einen Datensatz an bzw wird dieser an den Arduino übermittelt, so wird dieser abgearbeitet und boolean auf true gesetzt - somit ist dieser Datensatz übermittelt und nicht mehr relevant.


Gruß Gsb

combie

#25
Sep 06, 2015, 12:02 pm Last Edit: Sep 06, 2015, 12:03 pm by combie
Quote
Im selben LAN befindet sich ein Arduino und dieser "wartet" auf Arbeit.
Dann kann der Server die Daten auch sofort an den Arduino senden!

Auf das Polling kann man dann verzichten.
Vielleicht als Fallback beibehalten, falls der Arduino nach einem Reset den alten Zustand wieder herstellen möchte.
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Gsibiar

OK,

könnten wir das Beispiel einmal aufbauen?
Also Webseite und DB ist damit nicht gemeint - rein das was auf dem Arduino stattfinden muss.

Kontaktaufnahme zur Datenbank --> Zugriff auf die Daten --> Übermittlung an Arduino/Übernahme durch den Arduino --> Einlesen in den Arduino und bereitstellen zur weiteren Verarbeitung.


Gruß Gsb

combie

#27
Sep 06, 2015, 12:17 pm Last Edit: Sep 06, 2015, 12:17 pm by combie
Quote
rein das was auf dem Arduino stattfinden muss.
Quote
Kontaktaufnahme zur Datenbank
Ich befürchte, dass das so nix wird....

Es ist recht komplex sich direkt mit MySQL zu verbinden.
Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Gsibiar

#28
Sep 06, 2015, 12:36 pm Last Edit: Sep 06, 2015, 12:37 pm by Gsibiar
Wie wird es etwas?
Was müsste man wie am Ablauf ändern?

combie

#29
Sep 06, 2015, 12:52 pm Last Edit: Sep 06, 2015, 01:00 pm by combie
Dein lokaler Webserver kann HTML ausliefern.
Dein lokaler Webserver kann PHP und MySQL

Der kleine Arduino begnügt sich mit rudimentären REST Fähigkeiten.


Aufgabe:
Blink Millisekunden werden vom Benutzer in ein HTML Formular eingetragen.
Der Arduino bekommt die Zahl und blinkt im vorgegebenen Intervall.


Mein Vorschlag zur Vorgehensweise.......


Einfachster Weg:
Lokaler Webserver liefert Formular aus.
Formulardaten werden zum Webserver gesendet.
PHP wertet gesendete Daten aus. Beispielwert: 700
PHP kann den Wert dann auch sofort in eine DB eintragen.
PHP sendet an Arduino "GET /blink/700 HTTP1.1" (oder logischer "POST /blink/700 HTTP1.1")
Arduino wertet den Request aus und setzt Blink Intervall



Sonderfall, Arduino Reset zwischendurch:
Arduino startet
Arduino fragt den Webserver "GET /blink.php HTTP1.1"
Antwort des Servers: 700 (plain/text)
Arduino wertet die Antwort aus und setzt das Blinkintervall auf 700









Gefährlich, was Theorien aus Menschen machen können.
Schlimmer, was Menschen aus Theorien machen.

Go Up