API Auswerten, httpCode = -5

Hallo Leute,
bin neu in diesem Forum und generell auch neu in dem Thema Arduino etc.
Momentan versuche ich Daten aus einer API auszuwerten. Jedoch Scheiter ich laut meiner Auffassung bereits beim Verbindungsaufbau zur Seite. Als "httpCode" erhalte ich "-5" zurück. Jedenfalls steht dies so im seriellen Monitor.

Ich weiß leider nicht weiter...
Danke im Voraus für die Antworten.
Mit freundlichen Grüßen

Hier mein Code:

void apiCall(){
if ((WiFi.status() == WL_CONNECTED)) {

WiFiClient client;
HTTPClient http;
http.begin(client,"https://api.n2yo.com/rest/v1/satellite/visualpasses/25544/xxxxxx/xxxxxx/xxxxx/2/300/&apiKey=xxxxxxxxx");

int httpCode = http.GET();
Serial.println(httpCode);

if (httpCode == -5){
Serial.println ("Verbindung konnte nicht aufgebaut werden");
}
if (httpCode == 200){
String payload = http.getString();


StaticJsonDocument<64> filter;

JsonObject filter_passes_0 = filter["passes"].createNestedObject();
filter_passes_0["startUTC"] = true;
filter_passes_0["duration"] = true;

StaticJsonDocument<384> doc;

DeserializationError error = deserializeJson(doc,payload, DeserializationOption::Filter(filter));

if (error) {
  Serial.print(F("deserializeJson() failed: "));
  Serial.println(error.f_str());
  return;
}

for (JsonObject passe : doc["passes"].as<JsonArray>()) {

  long passe_startUTC = passe["startUTC"]; // 1669823990, 1669829785, 1669907470, 1669913260
  int passe_duration = passe["duration"]; // 560, 340, 635, 465

Serial.println (passe_startUTC);
Serial.println (passe_duration);


HttpClient kann kein HTTPS. Du must einen SecureClient benutzen.
Hier habe ich ein Tutorial zu HTTPS mit ESP8266 (und zum Teil mit ESP32) geschrieben.

Gruß Tommy

1 Like

Moin,
Vielen Dank für deine Hilfe @Tommy56!
Nun kann ich die API auswerten und erhalte eine Antwort vom Server.
Der Server sendet mir vier Antworten mit verschiedenen Unix-Zeiten. (es geht um die Bestimmung des Zeitpunkts wann die ISS über einen vorbeifliegt.)
Das Programm rechnet allerding mit der letzten Zeit (blau umkreist) also der vierten Zeit weiter.
Wie bekomme ich es hin das das Programm mit der ersten Zeit (rot umkreist) weiterrechnet?

Hier der Code dazu:

void apiCall(){
if ((WiFi.status() == WL_CONNECTED)) {

WiFiClientSecure client;
client.setInsecure();
HTTPClient http;
http.begin(client,"https://api.n2yo.com/rest/v1/satellite/visualpasses/25544/xxxx/xxxx/xxxx/2/300/&apiKey=xxxxxxxxxxxxxxxxxx");

int httpCode = http.GET();
Serial.println(httpCode);

if (httpCode == 200){
String payload = http.getString();

StaticJsonDocument<64> filter;

JsonObject filter_passes_0 = filter["passes"].createNestedObject();
filter_passes_0["startUTC"] = true;
filter_passes_0["duration"] = true;

StaticJsonDocument<384> doc;

DeserializationError error = deserializeJson(doc,payload, DeserializationOption::Filter(filter));

if (error) {
  Serial.print(F("deserializeJson() failed: "));
  Serial.println(error.f_str());
  return;
}

for (JsonObject passe : doc["passes"].as<JsonArray>()) {

  long passe_startUTC = passe["startUTC"]; // 1669823990, 1669829785, 1669907470, 1669913260
  int passe_duration = passe["duration"]; // 560, 340, 635, 465







        
        duration = (passe_duration);
        riseTime = (passe_startUTC);

}
      }

      Serial.print("Risetime = ");
      Serial.println(riseTime);

      DateTime time = riseTime + 7200; 
      String flyoverDate = time.timestamp(DateTime::TIMESTAMP_DATE);
      String flyoverTime = time.timestamp(DateTime::TIMESTAMP_TIME);

      Serial.println(flyoverDate);
      Serial.println(flyoverTime);

      
    }
    else {
      Serial.println("HTTP konnte nicht aufgerufen werden");
    }
  }

Auch hier wieder Danke im Voraus und einen schönen Abend.
Mit freundlichen Grüßen

Oh.. noch einer. Werf Dich mit dem hier zusammen.

Indem Du nach dieser Zeile:

ein

break;

einfügst.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.