Hallo,
habe im Programm den Tab "weather" etwas verändert. So funktioniert das Parsen bei mir jetzt.
Hoffe das es so in Ordnung ist. Kann ja mal einer drüber schauen, der mehr Ahnung hat.
`/**********************************(openweathermap.org)***********************************/
const char *weatherHost = "api.openweathermap.org";
void getWeatherData()
{
Serial.print("connecting to ");
Serial.println(weatherHost);
if (client.connect(weatherHost, 80)) {
client.println("GET /data/2.5/weather?id="+cityID+"&units=metric&APPID="+weatherKey);
client.println("Host: api.openweathermap.org");
client.println("User-Agent: ArduinoWiFi/1.1");
client.println("Connection: close");
client.println();
}
else {
Serial.println("connection failed");
Serial.println();
}
while(client.connected() && !client.available())
delay(1); //waits for data
while (client.connected() || client.available())
{ //connected or data available
char c = client.read(); //gets byte from ethernet buffer
result = result+c;
}
client.stop();
result.replace('[', ' ');
result.replace(']', ' ');
Serial.println(result);
char jsonArray [result.length()+1];
result.toCharArray(jsonArray,sizeof(jsonArray));
jsonArray[result.length() + 1] = '\0';
const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + 2*JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(6) + JSON_OBJECT_SIZE(13);
DynamicJsonBuffer jsonBuffer(capacity);
JsonObject &root = jsonBuffer.parseObject(jsonArray);
if (!root.success())
{
Serial.println("parseObject() failed");
return;
}
//weatherMain = root["weather"]["main"].as<String>();
weatherMain = root["weather"]["main"].as<String>();
weatherDescription = root["weather"]["description"].as<String>();
weatherDescription.toLowerCase();
weatherLocation = root["name"].as<String>();
// country = root["sys"]["country"].as<String>();
country = root["sys"]["country"].as<String>();
temp = root["main"]["temp"];
humidity = root["main"]["humidity"];
pressure = root["main"]["pressure"];
tempMin = root["main"]["temp_min"];
tempMax = root["main"]["temp_max"];
windSpeed = root["wind"]["speed"];
windDeg = root["wind"]["deg"];
clouds = root["clouds"]["all"];
getTimeLocal();
String windDirection = "N NOO SOS SWW NW"; // Windrichtungen N NO O SO S SW W NW immer 2 char lang
int wr = (windDeg+22)%360/45;
// Serial.println(wr);
Serial.println(wr);
String dayName[] = {"Err", "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};
String deg = String(char('' + 25));
String arrowUp = String(char('' + 23));
weatherString = " " + dayName[w] + " " + String(d) + "." + String(mo) + "." + String(ye)+ " ";
weatherString += String(weatherLocation) + " "; //Ortsname
//weatherString += String(country); // Länderkennung
weatherString += " Temp.: " + String(temp, 1) + " " + deg + "C "; //Temperatur
weatherString += " TempMin.: " + String(tempMin, 1) + " " + deg + "C "; //Temperatur Min
weatherString += " TempMax.: " + String(tempMax, 1) + " " + deg + "C "; // Temperatur Max
weatherString += " Luftfeuchte.: " + String(humidity) + " % "; // Luftfeuchtigkeit
weatherString += " Luftdruck: " + String(pressure) + " hPa "; // Luftdruck
weatherString += " Regenrisiko: " + String(clouds) + " % "; // Regenrisiko
weatherString += " Wind: " + String(windSpeed, 1) + " m/s "; // Windgeschwindigkeit
weatherString += String(windDeg) + deg + " "; //Windrichtung in Grad
weatherString += arrowUp + " " + windDirection.substring(2wr,2wr+2) + " "; // Windgeschwindigkeit und Richtung
Serial.println(weatherString); //Leh
}
// =======================================================================`