Esp8266, wie eine lange https Seite laden?

Hallo, ich will eine https-Wetterseite laden und die Daten auswerten. Ich bekomme beim Laden nur wenige kilobyte zurück, die eigentliche Seite ist aber ca. 220 kB groß. Wie bekomme ich die komplette Seite geladen?

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ESP8266HTTPClient.h>

const char* ssid = "Cudy";            // your network SSID (name)
const char* password = "1234";  // your network password
const char* host = "https://www.wetteronline.de/wettertrend/berlin";

// Root certificate for howsmyssl.com
const char IRG_Root_X1[] PROGMEM = R"CERT(
-----BEGIN CERTIFICATE-----
MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF
ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL
MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA
A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI
U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs
N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv
o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU
5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy
rqXRfboQnoZsG4q5WTP468SQvvG5
-----END CERTIFICATE-----
)CERT";

// Create a list of certificates with the server certificate
X509List cert(IRG_Root_X1);

void setup() {
  Serial.begin(115200);

  Serial.println();
  Serial.println();

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }

}

void loop() {
  WiFiClientSecure client;

  // wait for WiFi connection
  if ((WiFi.status() == WL_CONNECTED)) {

    client.setTrustAnchors(&cert);

    HTTPClient https;

    Serial.print("[HTTPS] begin...\n");
    if (https.begin(client, host )) {  // HTTPS

      Serial.print("[HTTPS] GET...\n");
      // start connection and send HTTP header
      int httpCode = https.GET();

      if (httpCode > 0) {

        Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {

          Serial.println("getString");

          String payload = https.getString();  // es werden nur 0 oder wenige kB geladen

          int cIndex;
          int contentLength = payload.length();
          Serial.println(contentLength);

          for (cIndex = 0; cIndex < contentLength; cIndex = cIndex + 1000) {
            Serial.print(payload.substring(cIndex, cIndex + 1000));
          }

          Serial.println();
        }
      } else {
        Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
      }

      https.end();
    } else {
      Serial.printf("[HTTPS] Unable to connect\n");
    }
  }

  Serial.println();
  Serial.println("Waiting 1 min before the next round...");
  delay(60000);
}

Wie willst Du 220 KB Seite in 80 KB RAM, abzüglich des RAM-Bedarfs des restlichen Programms, rein bekommen?

Gruß Tommy

So was macht man über eine API

Schau mal hier: https://pypi.org/project/wetteronline/

das wäre ideal, aber das ist in python, kann man das in die Arduino IDE einbinden? Ich hab es versucht, aber das ging nicht. Habe auch kein Beispiel gefunden, das diese API in Arduino IDE bzw. für ESP verwendet. :thinking:

Mich würden vorwiegend die Sonnenstunden für die nächsten 4-5 Tage interessieren, falls es da auch was anderes gibt, dann würde ich auch das versuchen. :nerd_face:

die eigentlichen Sonnenstunden (ohne Bewölkung) könntest errechnen.

OpenWeatherMap hat eine API, die Dir ein JSON liefert. Du brauchst einen API-Key, den Du durch eine Anmeldung bekommst.
Evtl. auch Wetter API | Professionelle Wetterdaten - meteoblue

Gruß Tommy

berechnen geht nicht, ich brauche die realen Sonnenstunden. OpenWeatherMap hatte ich auch schon probiert, die "Sonnenstunden" sind dort leider kostenpflichtig. Danke, ich schau mir mal meteoblue an.

Wenn Du sie unbedingt brauchst, dann musst Du sie halt bezahlen.

Gruß Tommy

Habe mir eine Wetterstation auf Basis OpenWeatherMap gebaut die ganze Vorhersage für DE ist nicht soo gut, die stimmt nur zu 75%.
Auch die Aktuellen angaben sich für die Katz, habe mir Außensensor gebaut damit habe wenigstens Temperatur, Feuchtigkeit und Luftdruck so wie die im Moment ist