Ich habe mir ein Skript gebaut, das meine Solaranlage fragt, wie viel Strom produziert wird und bei dem Erreichen eines Schwellwerts dann das Laden des Elektroautos startet. Die Skript-Logik scheint zu funktionieren, weil das Regeln über einige Zeit (zumindest über mehrere Stunden) funktioniert. Nach einige Tagen allerdings kriege ich dann immer eine Meldung im Sinne von "maximale Anzahl an API-Aufrufen (5) erreicht" und der Timer und damit auch die Ladesteuerung funktioniert nicht mehr. Ich habe nun bereits einen Timeout für den HTTP-Request eingebaut, allerdings hat der auch keine Besserung gebracht. Hat hier jemand eine Idee, welche API-Aufrufe hier zu einer Blockierung führen könnten?
I build a script that charges my car whenever there is enough sun energy coming from my solar panels. However after running properly for a while, the script always says "maximum API calls reached (5)" and the timer stops working. I Already added a timeout for the POST request, but it didn't help. Any ideas?
Liebe Grüsse, Best,
Philipp
function initialize() {
Shelly.call("Switch.GetStatus",
{ id: CONFIG.switchId },
function (res, error_code, error_msg, ud) {
print("Initializing... current switch state is:", res.output)
switchIsOpen = res.output;
runLoop();
},
null
);
}
function runLoop() {
let alertTimer = Timer.set(
CONFIG.pollingInterval,
true, // Run periodically
function (ud) {
Shelly.call("HTTP.REQUEST",
{ method: "POST", url: CONFIG.pollingUrl, body: '{"801":{"170":null}}', timeout: 1 },
function (res, error_code, error_msg, ud) {
print("errors-http-post:", error_code, error_msg);
let parsedBody = JSON.parse(res.body);
let production = parsedBody["801"]["170"]["101"];
let consumption = parsedBody["801"]["170"]["110"];
let threshold;
if (switchIsOpen) {
threshold = consumption;
} else {
threshold = consumption + CONFIG.chargingConsumption;
}
// print(threshold);
if (production > threshold) {
if (!switchIsOpen) {
setSwitch(true);
}
} else {
if (switchIsOpen) {
setSwitch(false);
}
}
},
null
);
},
null
);
}
function setSwitch(on) {
Shelly.call("Switch.Set",
{ id: CONFIG.switchId, on: on },
function (res, error_code, error_msg, ud) {
print("errors-switch-set:", error_code, error_msg);
let newSwitchState = !res["was_on"];
switchIsOpen = newSwitchState;
print("Changed switch state to:", newSwitchState);
},
null
);
}
let CONFIG = {
pollingInterval: 120 * 1000,
pollingUrl: "xxx/yyy",
switchId: 0,
chargingConsumption: 2100,
};
let switchIsOpen;
initialize();
Alles anzeigen