NEWS
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: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 -
@andi112 evtl URL encoden?
url = encodeURIComponent(url);