Pages: [1]   Go Down
Author Topic: wert von Webseite übernehmen  (Read 966 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
Ich möchte von einer Webseite ein Eingabefeld auslesen und den Wert verwerten nur leider weiss ich nicht wie das geht kann mir einer weiterhelfen ?
Logged

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 6
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Mit dem String-Objekt kann man Webseiten sehr gut parsen:

http://arduino.cc/en/Reference/StringObject
Logged


Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Mit dem String-Objekt kann man Webseiten sehr gut parsen:

Ist leider gar keine gute Idee. Das String-Objekt ist für Mikrokontroller denkbar schlecht implementiert (sehr häufiges allozieren und frei geben von dynamischem Speicher -> Fragmentierung, dazu kommt, dass in der Funktion zum Freigeben von dynamischem Speicher ein Fehler enthalten ist, der ein Memory Leak verursacht). Es sollte somit in keinem Projekt verwendet werden, das zum Ziel hat, für längere Zeit zu laufen (also alle, ausser vielleicht einigen Lern-Sketches).
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 22
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Projekt ist neu Hausautomatisierung, welche ich am besten gar nicht bzw. maximal einmal die Woche neustarten möchte also sind Strings tötlich für mich. Gibt es ne andere Lösung? Hat einer schonmal sowas gebaut?
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nach meiner Interpretation Deiner Aufgabenstellung müsstest Du einen einfachen Webserver auf dem Arduino am Laufen haben. Die Webseite muss nicht zwingend vom Arduino kommen, aber in vielen Fällen dürfte das die einfachere Lösung sein (hängt von Deinen restlichen Möglichkeiten ab).

Wenn Du nach Arduino und Webserver suchst, findest Du tausende von Projekten, die das machen. Wenn Du genauere Informationen brauchst, musst Du auch genauere Angaben liefern und am besten auch schon mal den Code, der bei Dir nicht funktioniert oder zumindest nicht so, wie Du willst.
Logged

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 6
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Also mein Projekt mit dem Webseiten-Request und dem Parsen der Strings läuft schon seit Monaten ohne (Speicher-)Probleme.
Das ganze ist sogar eine Art rss-reader mit Ausgabe auf einem LCD-Display. Also nicht nur kurze Strings.
Du kannst ja gerne alternativ einen Vorschlag machen, das mit C/ C++ zu implementieren - das ist ja auch nicht so kompliziert. War mir aber zu aufwändig...
« Last Edit: January 31, 2013, 11:22:56 am by markbee » Logged


Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 3001
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Also mein Projekt mit dem Webseiten-Request und dem Parsen der Strings läuft schon seit Monaten ohne (Speicher-)Probleme.

Würde mich theoretisch schon interessieren, wie diese verbotenen Strings evtl. doch zu benutzen sind.
Wie kriegst du den request in den String ? Ist der immer gleich lang ?

Was nach meiner Erfahrung gar nicht geht, ist sowas:
Code:
String x = "";
...
while ( client.available() ) x += client.read();

oder ?
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 143
Posts: 3000
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich möchte von einer Webseite ein Eingabefeld auslesen und den Wert verwerten nur leider weiss ich nicht wie das geht kann mir einer weiterhelfen ?

"Webseite" ist leider kein sehr aussagekräftiger Begriff.

Eine "Webseite" beispielsweise zum Anzeigen des Kurses der VW-Aktie kann so aussehen:
Code:
VW 182.20
Oder sie kann so aussehen wie der Quelltext der Seite http://de.finance.yahoo.com/lookup?s=DE0007664039

In einem Fall ist die Länge der Webseite kurz und knackig, liegt weit unterhalb der RAM-Speichergröße des Arduino und ist speziell für die weitere Verarbeitung durch automatische Abrufsysteme optimiert.

Im anderen Fall ist der Quelltext der Webseite lang, liegt oberhalb der RAM-Speichergröße eines Arduino UNO und ist speziell für die Betrachtung durch einen Menschen optimiert.

Den VW-Kurs kannst Du aus beiden Inhalten herausziehen. Aber im zweiten Fall ist es deutlich komplizierter.

Im ersten Fall würdest Du einfach eine Zeile komplett in den RAM-Speicher einlesen, dort die Daten herausholen.

Im zweiten Fall würdest Du einen "Parser" schreiben müssen, der den Seiteninhalt von Anfang bis Ende durchgeht, nach bestimmten "Stopp-Begriffen" sucht und immer nur kleine Teile der Webseite im Arbeitsspeicher des Arduino hält, bis die gewünschten Daten in dem Wust von Quelltext gefunden wurden.

Wie gesagt, das mit dem Parser, der ggf. wegen der Seitenlänge notwendig wird, wäre deutlich komplizierter. Und wie man es konkret am günstigsten hinbekommt, hängt auch vom konkreten Seiteninhalt ab. In einfacheren Fällen wäre es so, daß der interessierende Wert immer in einer bestimmten Zeile der Seite steht. Sagen wir mal, der gesuchte Wert steht in Zeile 121 von 500 Zeilen insgesamt. Dann bräuchte der Parser nur die Zeilenende-Zeichen abzählen und holt sich die gesuchte Zeile ins RAM. Aber in vielen Fällen muss man wohl auch mehr machen als nur Zeilenende-Zeichen zählen, das hängt eben ganz vom konkreten Fall ab.

Logged

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 6
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn Ihr denn so besorgt um das RAM vom Arduino seid smiley-wink

Warum nicht eine PHP-Seite auf einem Server ablegen, diese die Parser-Arbeit machen lassen und dann einfach den geparsten Wert, der vorher in eine txt-Datei auf dem Server abgelegt wurde, mit dem Arduino einlesen?
Kann man ja auch lokal z.B. mit XAMMP realisieren.
 
Mit PHP & cURL ist das Parsen z.B. relativ einfach zu bauen.

Da bleibt das arme Arduino-RAM verschont smiley-wink
Logged


Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Warum nicht eine PHP-Seite auf einem Server ablegen

Wenn einem ein solcher zur Verfügung steht, ist das eine gangbare Option. Im anderen Fall muss man sich eben anders behelfen.

Quote
Wenn Ihr denn so besorgt um das RAM vom Arduino seid

Auch wenn Du Dich darüber lustig machst: auf einem Controller mit 2kB RAM muss man sich Gedanken um den Speicher machen, sonst kriegt man schnell ein unkontrolliertes Verhalten. Wenn Du das beherzigst, kannst Du einen Arduino Jahre (gut ich hab's bis jetzt auf 1.5 Jahre gebracht, aber ich bin sicher, hier im Forum gibt's Leute, die das toppen können) durchlaufen lassen, ohne Fehler oder Probleme. Wenn Du die String-Klasse normal benützt, wirst Du das aber nicht hinkriegen, komische Resets und Freezes sind normalerweise die Folge (nach kurzer Zeit, nach Minuten oder gar Sekunden, je nachdem, wie oft die String-Klasse benützt wird).
Logged

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 6
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich wollte mich keinesfalls lustig machen, eher keinen allzu großen Ernst aufkommen lassen. Es gibt eben immer mehr als einen Weg zur Lösung - TMTOWTDI (<- altes Perl-Motto) smiley-wink
Ich finde ja gerade diesen Diskurs so interessant.
Also bitte nicht angegriffen fühlen.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

möchte das Thema nochmal aufgreifen.

Ich habe es mittlerweile geschafft, einen von mir benötigten Wert (Überproduktion PV-Anlage) alle 5 Minuten auf einem Webserver bereit zu stellen. Dort steht eine Zahl >= 0.

Leider besitze ich quasi Null C-Kenntnisse und brauche Hilfe.

Was möchte ich tun? Abfrage des Wertes PVOutput im Intervall von X-Minuten und dann abhängig vom Wert eine Relaiskarte mit 230V schalten. Das Ganze soll nur zwischen Uhrzeit x- und y passieren...ausserhalb dieser Zeiten soll der Schaltzustand dem des Wertes 0 entsprechen.

Bietet sich jemand an, einem Dau auf die Sprünge zu helfen? (Definition Variablen, erste Snippets in C...)

Unter'm Strich müssten es am Ende unter 20 Zeilen Code sein?!

Bin für jede Hilfe dankbar!

Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 3001
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

möchte das Thema nochmal aufgreifen.

Leider besitze ich quasi Null C-Kenntnisse und brauche Hilfe.

Bin für jede Hilfe dankbar!

Du fängst hier an: http://arduino.cc/en/Tutorial/WebClient
Oder, falls dir das nichts sagt, bei einem C Tutorial deiner Wahl.

Was haben die bisherigen Antworten hier in diesem Thread mit deinem Problem zu tun ?
Lies evtl. auch mal http://forum.arduino.cc/index.php?topic=149078.0

Quote
Unter'm Strich müssten es am Ende unter 20 Zeilen Code sein?!
Das ist eine interessante Anforderung. Warum ?!

Edit: Dass du einen Webserver verwenden willst, um den Eigenverbrauch deiner Solaranlage hochzumogeln
 ... na ja...  smiley-wink
« Last Edit: January 02, 2014, 09:58:07 am by michael_x » Logged

Pages: [1]   Go Up
Jump to: