Wie bestimmten Wert von einer Webseite auslesen und darstellen ?

client.print(LOGIN);
client.println("GET /search?q=Keller HTTP/1.0"); //hier soll doch nach "Keller" gesucht werden
client.println();
...
...
...
if (client.available()) { // wenn das zutrifft, wird das gespeichert
char c = client.read(); // hier abgefragt
Serial.print(c); //und hier alles ausgegeben
}

...leider wird hier der GANZE HTML-Code der Seite ausgegeben

Also,
das "/search?q=Keller" ist KEIN allgemeingültiges Verfahren. Das funktioniert bei Google, weil der Google-Webserver den URI Pfad "search" kennt und den Parameter "q" (aus dem q=...) auswerten kann.

Das hat aber nichts mit dem AVR-Webserver zu tun. Es hängt immer vom Webserver ab, der eine Seite ausliefert, auf welche Seiten und Parameter er reagiert. Gibt es vom AVR-Webserver eine Doku was der genau beherrscht?

Das ist aber genau das was ich meine. Test die Aufrufe für den AVR-Server in einem Browser. Wenn Du etwas gefunden hast, das für Dich IM BROWSER funktioniert, dann kannst Du anfangen das auf den Arduino zu übernehmen.

Das die "Google-Hits" nicht funktionieren, liegt vermutlich daran, das google die Ausgabe in der HTML-Seite geändert hat. Der TextFinder sucht ja explizit nach dem String "Results ", nur wenn er das findet, sucht er nach den Nummer der Ergebnisse.
Wenn ich mit Google nach "arudino" suche, ist die Ausgabe aber "About 23,400,000 results" (englisch) oder "Ungefähr 23.400.000 Ergebnisse" (deutsch). Das ist wohl der Grund warum es nicht klappt.

Mario.

Hallo Mario,
hab ich vergessen. Der Webserver ist die Hardware von Pollin AVR NET IO . Ich habe da einen 644 reingebröselt. Das Ding ist in C programmiert.
z.Z. sind 8 DS1820 & Co angeschlossen, weiter frei sind noch 3 Analog-Eingänge, weil einer für die DS1820 drauf ging, desweiteren habe ich 8 digitale Ein/Ausgänge verwendet
und z.Z. 4 Digitaleingänge noch frei.
Ich hatte auch schon mal eine Webcam seriell angebunden, aber eben nur eine, die klaut aber zu viele Ports.
Für das Board gibt es genügend Softwarevarianten, sogar auch mit Arduino-Betriebsystem.

Danke für die Info, aber die Hardware ist relativ wurscht :slight_smile:
Zumindest für Dein akutelles Problem. Wichtig ist die Software die auf dem NET-IO läuft und auf was genau der Webserver reagieren kann.
Ich vermute aber das ein "GET /search?q=IRGENDWAS" nicht funktionieren wird.
Hast Du evtl. die Sourcen für den Webserver auf dem NET-IO?

Interessant ist sicherlich diese Sache auch für andere Personen, die beispielsweise immer über einen Börsenwert informiert sein wollen, oder , oder, oder.

Du meinst für Leute die kein Smartphone haben UND in der Lage sind sowas zu programmieren UND für sowas einen Arduino nehmen würden?

Warum baust Du den Server nicht so um, daß er statt einer HTML Seite auf einer anderen URL direkt die Daten in einem passenden Format zurückliefert? So wie ich das verstehe hast Du ja volle Kontrolle über den Server, oder? Das würde das ganze Gefummel mit dem HTML parsen sofort unnötig machen.

Hallo Mario, hallo Udo,

@Mario,
ich werde mal meine Unterlagen durchforsten, ob ich den aktuellen Sourcecode auf dem Mac habe, weil er auf einem Windows-Rechner erstellt wurde, der sich in der "externen" Immobilie befindet.
@Udo.
du darfst es nicht wörtlich nehmen, was ich geschrieben habe, das war nur ein schnell herbeigezogenes Beispiel. Anwendungsmöglichkeiten gibt es wie Sand am Meer, wo man kein Smartphone für anschaltet und was also ständig dargestellt wird. Es ist und soll ein Hobby sein, damit man nicht im Alter im Kopf einrostet. Ich habe z.B. einen ATmega 128 damit beschäftigt, 16 Tempfühler mir auf einem grossen Display ständig anzuzeigen.
Du hast Recht, das Gefummel geht mir auf den Geist. Selbstverständlich kann ich das ändern, jedoch muss ich dann Vorort sein und den Prommer anstecken, um den Code zu ändern. Da ich, wenn ich überhaupt mal in der Immobilie bin, dann nur kurze Zeit und ich müsste einen Weg von 400km in Kauf nehmen. Da jetzt aber der Winter kommt, benötige ich einige Daten vom Haus, die ich stetig im Auge haben möchte, ohne PC oder Smartphone.

Gruß Gerd

Gruß Gerd

Kann mir jemand noch einmal unter die Arme greifen.
Ich habe es ein wenig anders gemacht und kann jetzt eine HTML-Seite ganz auslesen, könnte sie auch gegrenzen. Die Buchstaben und Zahlen kommen jetzt seriell hintereinander auf den Monitor. Wie kriege ich es hin, dass ich jetzt an einer beliebigen Stelle (muss natürlich ggf. mit Suchstring) die Werte in einer Reihe hintereinander angezeigt bekomme, besser wäre es, wenn man sagen würde, dass die nächsten 6 Zeichen nach "Sensor 1) dargestellt werden sollen.

#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>
#include "LCD4884.h"
int inByte;

#define LOGIN ("YWRtaW46dGdjKEE67w==.") //Base64 kodiert USERNAME:PASSWORT
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(98,33,2,73); // Webserver
EthernetClient client;
TextFinder finder( client);
void setup() {
  Serial.begin(9600);
    lcd.LCD_init();       
    lcd.LCD_clear();
   while (!Serial) {
    ; // warte bis serieller Port verbunden ist
  }

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Ethernet-Fehler using DHCP");
    for(;;)
      ;
  }
  delay(1000);
  Serial.println("verbinde, bitte warten...");
  lcd.LCD_write_string(0, 0, "bitte warten", MENU_NORMAL);
  if (client.connect(server, 80)) {
    Serial.println("verbunden");
    lcd.LCD_write_string(3, 1, "verbunden", MENU_NORMAL);
client.print(LOGIN);
client.println("GET  HTTP/1.0");
    client.println();
  } 
  else {
    Serial.println("Verbindung fehlerhaft");
  }
}

void loop()
{
  if (client.available()) {
    inByte = client.read();
    Serial.println(char (inByte));  //[color=blue]hier rauschen jetzt alle Zeichen der Seite bis zum Ende vorbei[/color]
lcd.LCD_write_string(0, 3, "Suchwert", MENU_HIGHLIGHT);
  if (!client.connected()) {
    Serial.println(100);
    Serial.println("Trennung.");
    lcd.LCD_write_string(0, 5, "Trennung!", MENU_NORMAL);
    client.stop();
    for(;;)
      ;
  }
}
}

Gruß Gerd

Hallo, wie ich vermute, fällt euch auch nichts weiter ein, um mir einen praktikablen Weg aufzuzeigen. Was man alles machen könnte, wurde mir ja nun gesagt, doch was hilft es, wenn ich es nicht verstehe, obwohl es eigentlich sehr einfach sein müsste, wenn man nur 3-4 Zeichen aus einem TCP-String braucht.
Wir ihr ja mitbekommen habt, habe ich mit dem letzten Script die komplette Seite auslesen können. Jetzt möchte ich nur noch diesen (rot gekennzeichneten) Bereich auf einem Display darstellen.

Ausschnitt aus der Wiedergabe nach dem Listing

Sensor 4Pumpe VL12,5°C12,4 / 12,6 Sensor 5Brauchwasser12,9°C12,8 / 13,0 Sensor 6Nebengebaeude8,9°C8,8 / 9,2

Dieser Wert ändert sich immer. Wie kann ich ihn im Rhythmus von ca. 1min auf dem Display darstellen.

Kann niemand helfen ??

Gruß und Dank
Gerd

Hallo Gerd,

immer langsam, das wird schon. Mich wundert momentan, aber, das Du plötzlich Sensor 5 (Brauchwasser) haben willst, ich dachte bisher gibg es um das Nebengebäude, Sensor 6? Nicht das es einen großen Unterschied macht.

Hallo Mario,
du hast recht, habe mich vertippt. Ist aber im Grunde egal, ob vom Sensor 6 oder 5 der Wert gesucht werden soll, es kommt aufs Gleiche raus. Ich habe schon so viel gelesen und ausprobiert, jedoch ohne Erfolg. Ich finde auch keinen Vergleich im Netz, wo ich mir das ggf. umsetzen kann. Das beste wäre schon, wenn jemand mir die fehlenden Zeilen einfach mal ins Script reinsetzt, das ist dann konstruktiv und ich könnte es mir nach meinen Bedürfnissen abändern. Die lieben Hinweis, was und wie ich es machen könnte helfen mir im Augenblick nicht viel weiter, weil ich es z.Z nicht raffe - wie der Spruch mit dem Wald und den Bäumen.

Gruß Gerd

Der Vorschlag von Udo eine eigene Seite nur fürs Datenübertragen zu erstellen, wo die Werte unformatiert ohne Beiwerk übertragen werden und so einfacher zu übernehmen sind hast Du nicht in Betracht gezogen oder habe ich da Deine Antwort übersehen?
Grüße Uwe

Hallo Uwe,
den Vorschlag von Udo habe ich nicht angenommen, weil man es nicht braucht und es einfacher geht.
Ich kann nur sagen, die "Schweizer" haben es drauf. Im internationalen Forum hat @pylon mit 4 Zeilen das ganze Problem geklärt. DANKE @pylon.

finder.find("Pumpe VL");
finder.find("right\">);
value = finder.getValue();
finder.find(",");
afterpoint = finder.getValue();

Ich möchte es euch nicht vorenthalten, wie einfach es letzt endlich ist. Mit ein paar kleinen Abänderungen werden die Werte vor und nach dem Komma dann angezeigt.
Weitere Kosmetik bekomme ich hoffentlich alleine hin.

#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>
int inByte;
int value;
int Zahl1;
int Zahl2;
#define LOGIN ("YWRdkW4c2FkVjaG56SSzw==.") //Base64 kodiert USERNAME:PASSWORT
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(95,33,3,26); // Webserver
EthernetClient client;
TextFinder finder( client);
void setup() {
  Serial.begin(9600);
   while (!Serial) {
    ; // warte bis serieller Port verbunden ist
  }

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Ethernet-Fehler using DHCP");
    for(;;)
      ;
  }
  delay(1000);
  Serial.println("verbinde, bitte warten...");
  if (client.connect(server, 80)) {
    Serial.println("verbunden");
client.print(LOGIN);
client.println("GET  HTTP/1.0");
    client.println();
    finder.find("Nebengebaeude");//kann beliebige Reihe sein
finder.find("right\">");
value = finder.getValue();
finder.find("<");// ist Zahl vor Komma
Zahl1 = finder.getValue();
finder.find(",");// ist Zahl hinter Komma
Zahl2 = finder.getValue();

Serial.print("die Temperatur = ");
Serial.print(Zahl1);
Serial.print(",");
Serial.print(Zahl2);
Serial.println(" Grad");
  } 
  else {
    Serial.println("Verbindung fehlerhaft");
  }
}

void loop()
{
  }

Allen herzlichen Dank für die Unterstützung.

Gruß Gerd

Trisonic schreibt hier:

er hätte sich mit dem/n Autor/ren der TextFinder gesprochen und diese hätten ihm gesagt, daß eine verbesserte Version der Bibiothek im Core des Arduino IDE ab 1.0 eingeflossen ist. Er bemängelt aber gleichzeitig, daß die Funktionen der Stream Bibiothek schlecht bis gar nicht dokumentiert sind.

Grüße Uwe

Danke Uwe,
werde mal mir das durchlesen und meine Versuche machen.
Zur Zeit läuft alles nach mehreren Stunden problemlos. Ich habe das Script schon weitgehend erweitert und bin jetzt dabei eine Variante zu finden, um ohne IP auf den Server zu kommen, weil bei diesem Server alle 24 Std die IP geändert wird. Ebenso soll eine Menüführung mehrere Temp-Fühler auswählen lassen.

Gruß
Gerd