Website Auslesen

Nabend,

Ich würde gern die aktuelle Temperatur aus dem Internet auslesen. Ich würde eine php Seite auf einem Server aufrufen um die Temperatur als Zahl auszugeben also "12".
Jetzt ist das Problem wie les ich diese Zahl mit dem Arduino aus?..

Checke erst mal (per serial.Print) was Du alles vom Server bekommst.
Danach kannst Du anfangen selektiv auf Inhalte zuzugreifen.

Nimm lieber ein standardisiertes Format (z.B. GET) um den Anfang der Datenübertragung ('?') zu erkennen.

Gruß Tommy

Jetzt ist das Problem wie les ich diese Zahl mit dem Arduino aus?

Welche Zahl ? "12" ist ein Text, keine Zahl.
Hast du Probleme diesen Text zu lesen?
Oder daraus die Zahl 12 zu machen?

Ein Webserver sendet übrigens mehr als "12", das ist dir hoffentlich klar ?
Hast du einen Webserver, der die "Temperatur aus dem Internet" liefert ? :slight_smile: Sorry :slight_smile:

scr34m_818:
Ich würde gern die aktuelle Temperatur aus dem Internet auslesen. Ich würde eine php Seite auf einem Server aufrufen um die Temperatur als Zahl auszugeben also "12".
Jetzt ist das Problem wie les ich diese Zahl mit dem Arduino aus?..

Nur mal so grundsätzlich: Ein Arduino alleine reicht natürlich nicht. Du brauchst zusätzlich irgendwas, um den Aduino mit dem Internet zu verbinden, zum Beispiel ein Ethernet-Shield oder ein WLAN-Shield. Oder einen ESP8266 (mit oder auch ohne Arduino). :slight_smile:

Also wenn du die php Seite selber machst, musst du dich an nichts halten und kannst einfach nur 12 senden.

muss ja in dem Fall nur maschinenverständlich sein

Nachtrag: Scheint so, als ob ein Ethernet-Shield schon vorhanden ist.
(Hab grad mal die anderen Beiträge von scr34m_818 angesehen). :slight_smile:

scr34m_818:
Nabend,

Ich würde gern die aktuelle Temperatur aus dem Internet auslesen. Ich würde eine php Seite auf einem Server aufrufen um die Temperatur als Zahl auszugeben also "12".
Jetzt ist das Problem wie les ich diese Zahl mit dem Arduino aus?..

Also Du möchtest die Temperatur aus einer Seite auslesen, die es im Internet gibt?

Zum Beispiel so eine Seite wie die vom Deutschen Wetterdienst mit den Wetterbeobachtungsdaten der letzten Stunde?

Als erstest schaust Du Dir am besten mal den HTML-Quelltext der Seite an, aus der Du die Daten herausziehen möchtest.
Typischerweise besteht eine HTML-Seite im Quelltext aus Zeilen, und oft ist es so, dass bei Aktualisierungen dieselben Daten auch immer in derselben Zeile stehen.

Das allgemeine Vorgehen zum Auslesen der Daten wäre dann:

  • Den HTML-Code der Seite zeilenweise einlesen und dabei die HTML-Tags entfernen.

Und dann merkst Du Dir am besten, in welcher Zeile die Dich interessierenden Daten drinstehen, und die strippelst Du Dir dann da heraus.

Hallo,

ich habe genau zu diesem Thema mal einen Blog geschrieben

Vielleicht hilft dir das weiter.

Gruß
Reinhard

Sorry für das späte Antworten.

Ich hab mir ein Php-script gebastelt und lass mir von wetter.com einfach die Temperatur anzeigen

z.B Quelltext :

<html><head>
	<meta charset="UTF-8">
</head>
<body>-1

</body></html>

Wenn mein Webspace direkt aufgerufen wird also die index.php wird die Verbindung aufgebaut und der Htmlcode ausgegeben. Wenn ich den Pfad zu meiner test.php angebe funktoniert das ganze nicht woran liegt das?

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET / HTTP/1.1");
    client.println("Host: meinedomain.de");
    client.println("Connection: close");
    client.println();
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    while (true);
  }
}

Dein php-script gibt immer -1 aus. Das ist wohl nicht die gewünschte Funktionalität.

Gruß Tommy

Edit: Das halte ich für problematisch: Wenn er keinen Connect bekommt geht er in eine Endlosschleife, tut also nix mehr.
// do nothing forevermore:
while (true);

Er sollte es doch wieder probieren.

Gruß Tommy

Ne die -1 stellen eine Temperatur dar in Grad Celsius in dem Beispiel jetzt -1

Es müsste jetzt zum Testen wenigstens einmal der Htmlcode wiedergegeben werden, aber es wird ein Bad Request angezeigt also Error 400

Und der 2. Teil der Antwort?

Gruß Tommy

Hab ich oben dazu geschrieben, also eigentlich müsste doch wenigstens einmal der Htmlcode augegeben werden. Es kommt aber nur der Bad Request Error oder garnichts wenn ich Domain.de - Seite nicht gefunden aufrufe.
Wenn ich nur die Domain also domain.de aufrufe funktoniert es, da wird der Htmlcode des index.php wiedergegeben

scr34m_818:
Es kommt aber nur der Bad Request Error oder garnichts wenn ich Domain.de - Seite nicht gefunden aufrufe.

Ach?

Normalerweise solltest Du beim Abruf von Domain.de - Seite nicht gefunden einen 404 Statuscode ("page not found") zurückbekommen.

Aber wahrscheinlich erzählst Du mit "Domain.de - Seite nicht gefunden! hier genau so einen Idiotenkram wie es Dein verstümmelter Code mit der Zeile
client.println("Host: meinedomain.de");
nahelegt.

Du konzentrierstDich offenbar nur darauf, die tatsächlich abzurufende URL-Adresse vor den Forenteilnehmern zu verschleiern und geheimzuhalten und vergißt dabei, dass man nur tatsächlich existierende Seiten im Internet abrufen kann.

Also wenn Du jetzt geschrieben hättest, Du möchtest mit Deinem Arduino die aktuelle Temperaur von der Adresse des Deutschen Wetterdienstes Wetter und Klima - Deutscher Wetterdienst - Leistungen - Aktuelle Beobachtungswerte - Deutschland abrufen und dabei speziell die Temperatur am "Leuchtturm Kiel" beispielsweise, dann hätte ich mir ja ggf. etwas Mühe gemacht, aber so fühle ich mich echt verarsc ht, wenn Du schreibst, dass auf domain.de/test.php eine Temperatur ausgelesen werden soll.

Ich kann ja einiges, abr Unmögliches kann ich nicht.

scr34m_818:
Hab ich oben dazu geschrieben, also eigentlich müsste doch wenigstens einmal der Htmlcode augegeben werden. Es kommt aber nur der Bad Request Error oder garnichts wenn ich Domain.de - Seite nicht gefunden aufrufe.
Wenn ich nur die Domain also domain.de aufrufe funktoniert es, da wird der Htmlcode des index.php wiedergegeben

Dein Browser sagt es Dir doch ganz klar: Die Seite /test.php existiert nicht.
Dagegen scheint die Startseite /index.php zu existieren.

Gruß Tommy

Genau. habs ausprobiert. ist bei mir genauso. allerdings scheint die Seite individualisierte Fehlerseiten zu haben, deswegen kommt da etwas mehr zurück als standardmäßig.

Wenn ich es aber per Domain aufrufe ist sie ganz normal verfügbar, darum versteh ich den Fehlercode nicht. Wenn ich die index.php Seite direkt mit Domain.de – Domains günstig registrieren – Ihre Domain Suche und Verwaltung aufrufen will kommt die gleiche Fehlermeldung wie bei der test.php

bei mir nicht.
bei Domain.de – Domains günstig registrieren – Ihre Domain Suche und Verwaltung wird die Seite korrekt geöffnet.

Allerdings wird auf https weitergeleitet, was der Artuino nicht abrufen und somit ausgeben kann