Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. andi112

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    A
    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 1
    • Best 0
    • Groups 0

    andi112

    @andi112

    0
    Reputation
    9
    Profile views
    1
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    andi112 Follow

    Latest posts made by andi112

    • Mehrfacher API-Aufruf bei request im Debug-Modus?

      Hallo zusammen,
      ich möchte mir die Daten meiner PV-Anlage von der SolarEdge Monitoring-API abrufen und nutze dazu folgendes Adressschema für den HTTP-Request:

      https://monitoringapi.solaredge.com/equipment/{site}/{sn}/data?startTime=2023-04-10 00:00:00&endTime=2023-04-10 23:59:59&api_key={key}

      Wenn ich diese URL (natürlich mit meinen Daten) im Browser aufrufe, klappt das problemlos. Auch mehrfach.
      Wenn ich die Daten per JS abrufen möchte und zum Entwickeln die Debug-Ausgabe aktiv habe, wird meine IP bei Solaredge sofort gesperrt und ich bekomme den Status 429 - too many requests.

      Auch wenn ich das Skript nur 1x ausführe. Aufgefallen ist mir aber, dass, wenn ich den Debug-Modus deaktiviere, das Skript läuft, aber nichts zurückgibt, aber auch meinen Account nicht sperrt.

      Das hier wäre ein Beispielskript, mit dem ich (im Debug-Modus) die Sperre provozieren kann:

      const url = `https://monitoringapi.solaredge.com/equipment/${site}/${sn}/data?startTime=2023-04-10%2000:00:00&endTime=2023-04-10%2023:59:59&api_key=${apiKey}`;
      
      const maxRetries = 3;
      let retryCount = 0;
      console.log(url)
      function sendRequest() {
        request(url, function (error, response, body) {
          if (!error && response.statusCode === 200) {
            const jsonResponse = JSON.parse(body);
            const telemetries = jsonResponse.telemetries;
      
            telemetries.forEach(telemetry => {
              const date = telemetry.date;
              const totalActivePower = telemetry.totalActivePower;
              const dcVoltage = telemetry.dcVoltage;
              const powerLimit = telemetry.powerLimit;
              // Extrahiere weitere benötigte Daten
      
              console.log('Datum:', date);
              console.log('Gesamtleistung:', totalActivePower);
              console.log('DC-Spannung:', dcVoltage);
              console.log('Leistungsbegrenzung:', powerLimit);
              console.log('---------------------------------');
            });
          } else if (response.statusCode === 429 && retryCount < maxRetries) {
            // Too Many Requests, Retry nach einer Verzögerung
            retryCount++;
            const delaySeconds = retryCount * 5; // Erhöhe die Verzögerung mit jedem Versuch
            console.log(`Zu viele Anfragen, erneuter Versuch nach ${delaySeconds} Sekunden...`);
            setTimeout(sendRequest, delaySeconds * 1000);
          } else {
            console.error('Fehler bei der Anfrage:', error);
          }
        });
      }
      sendRequest();
      

      Laut SolarEdge API-Doku sind am Tag 300 Requests zulässig und max. 3 gleichzeitig.
      Die 300 habe ich sicher nicht (offensichtlich) erreicht, außer, der Debug-Modus verhält sich anders als ich das annehmen würde.

      Das blöde ist, dass ich dann immer 1 Tag warten muss, bis ich den nächsten Versuch starten kann...

      Hat da jemand eine Idee?

      Besten Dank und viele Grüße
      Andi

      posted in JavaScript
      A
      andi112
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo