spaycy
November 30, 2022, 9:33am
1
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);
Tommy56
November 30, 2022, 11:06am
2
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
spaycy
November 30, 2022, 10:14pm
3
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.
pylon
December 5, 2022, 6:26pm
5
Indem Du nach dieser Zeile:
ein
break;
einfügst.
system
Closed
June 3, 2023, 6:26pm
6
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.