wert von Webseite übernehmen

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 ?

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

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

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?

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.

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

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:

String x = ""; 
...
while ( client.available() ) x += client.read();

oder ?

Samot:
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:

VW 182.20

Oder sie kann so aussehen wie der Quelltext der Seite Symbolsuche von Yahoo Finanzen

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.

Wenn Ihr denn so besorgt um das RAM vom Arduino seid :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 :wink:

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.

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

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) :wink:
Ich finde ja gerade diesen Diskurs so interessant.
Also bitte nicht angegriffen fühlen.

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!

joesolar:
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 How to use this forum - please read - Deutsch - Arduino Forum

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... :wink: