Wetterstation mit Yahoo Wetterdaten baut keine Verbindung auf

Hallo,
Vorweg: ich habe noch nicht so mega viel Erfahrung mit Arduino.
Ich habe ein kleines Problem: Ich habe mir eine kleine Wettersation aus holz gebaut, wo ich eine Arduino Uno, ein Ethernet Shield, ein 20x4 Display und ein Temperatursensor verbaut habe. Den Code habe ich aus dem Internet und habe ihn auch schon ein wenig verändert… So weit, so gut. Das war vor drei Wochen. Da hat auch alles funktioniert. Er hat alle Daten auf dem Display angezeigt. Jetzt war ich drei Wochen nicht zuhause und habe die Wetterstation wieder in Betrieb genommen und habe jetzt das Problem, dass die Arduino keine Verbindung zu Yahoo aufbauen kann…Auf meinem Rechner habe ich die Seite Browser aufgerufen und sie ist sofort da. Ich habe schon einen anderen Sketch ausprobiert, um die Uhrzeit aus dem Internet zu laden und auf dem Display anzuzeigen. Dies hat funktioniert. Yahoo ist anscheind erreichbar und auch das Ethernet Shield scheint zu funktionieren. Jetzt weiß ich nicht mehr weiter… :~ Vielleicht kann ja mal jemand den Sketch bei sich ausführen und schauen, ob es bei ihm funktioniert.

//
// Read Yahoo Weather API XML
// 03.09.2012
// http://arduino-praxis.ch


//#################################
#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>
#include <LiquidCrystal.h>

#include <OneWire.h>
#include <DallasTemperature.h>
//#################################

LiquidCrystal lcd(8, 9, 5, 4, 6, 2); //Display Pins deklarieren

int Verbunden = 1;

//#################################
#define ONE_WIRE_BUS 7

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { 
  0x10, 0xA9, 0xC8, 0xC2, 0x02, 0x08, 0x00, 0x2A };
//#################################

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xAD };
byte ip[] = { 
  192, 168, 1, 12 };

// Server Yahoo
IPAddress server(87,248,122,181);

EthernetClient client;

//#################################

TextFinder  finder( client );  

char hum[30];
char wind[30];

//#################################


void setup()
{
  // Start Ehternet
  Ethernet.begin(mac, ip);
  // Start Serial Port
  Serial.begin(9600);
  Serial.println("Setup...");
  lcd.begin(20, 4);

  sensors.begin();
  //Sensorwerte das erste mal abfragen, weil erste Abfrage immer falsch.
  sensors.requestTemperatures();
  // set the resolution to 10 bit (good enough?)
  sensors.setResolution(insideThermometer, 10);

  lcd.setCursor(0,1);
  lcd.print("    Arduino Air");
  lcd.setCursor(0,3);
  lcd.print(" Firmware Ver.:6.0");
  delay(6000);
  lcd.setCursor(0,1);
  lcd.print("                    ");
  lcd.setCursor(0,3);
  lcd.print("                    ");
  lcd.setCursor(0,1);
  lcd.print("   Programmed by");
  lcd.setCursor(0,3);
  lcd.print(" Lauritz Ackermann");
  delay(4000);
  lcd.setCursor(0,1);
  lcd.print("                    ");
  lcd.setCursor(0,3);
  lcd.print("                    ");
}


void loop()
{
  if (client.connect(server, 80))
  {
    // Call Wetter-API
    // w: ID from your City
    // http://weather.yahooapis.com/forecastrss?w=12893459&u=c
    ///
    Serial.println("Connect to Yahoo Weather...");
    client.println("GET /forecastrss?w=656958&u=c HTTP/1.0");
    client.println("HOST:weather.yahooapis.com\n\n");
    client.println();
    Serial.println("Connected...");
    lcd.setCursor(0,0);
    if (Verbunden == 0) //Wenn er Keine Verbindung angezeigt hat, wird dies weg gemacht.
    {
      lcd.setCursor(0,0);
      lcd.print("                    ");
      lcd.setCursor(0,3);
      lcd.print("                    ");
    }
    Verbunden = 1;

  } 
  else
  {
    sensors.requestTemperatures(); //Sensorwerte abrufen
    float tempC = sensors.getTempC(insideThermometer);

    Serial.println("connection failed");
    lcd.setCursor(0, 0);
    lcd.print("Keine Verbindung    ");
    lcd.setCursor(0, 1);
    lcd.print("                    ");
    lcd.setCursor(0, 2);
    lcd.print("                    ");
    lcd.setCursor(0, 3);
    lcd.print("             ");
    lcd.print(tempC);
    lcd.write(0xD0 + 15);
    lcd.print("C");
  } 



  if (client.connected())
  {


    // Humidity
    if ( (finder.getString("<yweather:atmosphere humidity=\"", "\"",hum,4)!=0) )
    {
      Serial.print("Humidity:  ");
      Serial.println(hum);
      lcd.setCursor(0, 2);
      lcd.print("Luftfeuchte: ");
      lcd.print(hum);
      lcd.print("%");
    } 
    else
    {
      Serial.print("No Humidity Data");
    }




    // Temperature
    if(finder.find("temp=") )
    {
      int temperature = finder.getValue();
      Serial.print("Temp C:  ");
      Serial.println(temperature);
      lcd.setCursor(0, 0);
      lcd.print("Temp.: ");
      lcd.print(temperature);
      lcd.write(0xD0 + 15);
      lcd.print("C  ");
      sensors.requestTemperatures();
      float tempC = sensors.getTempC(insideThermometer);
      lcd.print(tempC);
      lcd.write(0xD0 + 15);
      lcd.print("C");
    }
    else
    {
      Serial.print("No Temperature Data");
    }


    // END XML
  }
  else
  {
    sensors.requestTemperatures();
    float tempC = sensors.getTempC(insideThermometer);

    Serial.println("Verbindung getrennt");
    lcd.setCursor(0, 0);
    lcd.print("Keine Verbindung    ");
    lcd.setCursor(0, 1);
    lcd.print("                    ");
    lcd.setCursor(0, 2);
    lcd.print("                    ");
    lcd.setCursor(0, 3);
    lcd.print("             ");
    lcd.print(tempC);
    lcd.write(0xD0 + 15);
    lcd.print("C");
    Verbunden = 0;
  }

  client.stop();
  client.flush();

  if (Verbunden == 1)
  {
    delay(300000); 
  }
  else
  {
    delay(10000);
  }

}

Arduiner-2014:
So weit, so gut. Das war vor drei Wochen. Da hat auch alles funktioniert. Er hat alle Daten auf dem Display angezeigt. Jetzt war ich drei Wochen nicht zuhause und habe die Wetterstation wieder in Betrieb genommen und habe jetzt das Problem, dass die Arduino keine Verbindung zu Yahoo aufbauen kann...Auf meinem Rechner habe ich die Seite Browser aufgerufen und sie ist sofort da.

In dem Fall würde ich drauf wetten:

Du hast die Seite im Browser über den ServerNAMEN aufgerufen.

Und in Deinem Sketch rufst Du den Server über seine (früher mal geltende) IP-NUMMER auf:

// Server Yahoo
IPAddress server(87,248,122,181);
...
  if (client.connect(server, 80))
...

Die IP-Nummer eines Servers, der im Internet mit einem Namen verbunden ist, kann sich bei technischen Änderungen auf Seiten des Betreibers jederzeit ändern. Und deshalb ruft man Server besser über den Namen auf und nicht über die Nummer.

Hallo,

die eingetragene IP

IPAddress server(87,248,122,181);

lässt sich nicht pingen.
Ein wget unter der Adresse liefert

$ wget http://weather.yahooapis.com/forecastrss?w=12893459&u=c
[1] 4142
$ --2014-08-02 19:54:44--  http://weather.yahooapis.com/forecastrss?w=12893459
Auflösen des Hostnamen »weather.yahooapis.com (weather.yahooapis.com)«... 66.196.66.157, 66.196.66.212, 66.196.66.213, ...
Verbindungsaufbau zu weather.yahooapis.com (weather.yahooapis.com)|66.196.66.157|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK

Besser wäre es den Hostnamen einzutragen und nicht die IP.

Gruß
Reinhard

Vielen Dank euch beiden. :slight_smile: Das wars...