Sahil Posted September 16, 2024 Posted September 16, 2024 I get error regularly after updating the firmware executing an old running script at in function called from system08:59:18 Uncaught Error: Too many calls in progress08:59:19 at });08:59:19 ^ Script: let variables = { collectionInterval: 2000, // Time in milliseconds between data collections sendInterval: 2000, // Time in milliseconds to send data in bulk mqttTopic: 'abc', hardwareId: '08F9E0E627FC', dataBuffer: [], // Buffer to store device status data enableA: true, // Flag to enable/disable collection for device A (id: 0) enableB: true // Flag to enable/disable collection for device B (id: 1) }; function getDeviceStatus() { let commonData = { ts: new Date().toISOString() }; let collectedA = !variables.enableA; // Assume collected if A is disabled let collectedB = !variables.enableB; // Assume collected if B is disabled function checkAndPush() { if (collectedA && collectedB) { if (variables.enableA) { var dataEntryA = Object.assign({}, commonData, deviceData[0]); variables.dataBuffer.push(dataEntryA); } if (variables.enableB) { var dataEntryB = Object.assign({}, commonData, deviceData[1]); variables.dataBuffer.push(dataEntryB); } publishBulkToMQTT(); // Push data to MQTT once both devices are processed } } let deviceData = []; if (variables.enableA) { Shelly.call("EM1.GetStatus", {"id": 0}, function(responseA) { if (responseA) { Shelly.call("EM1Data.GetStatus", {"id": 0}, function(responseEmDataA) { if (responseEmDataA) { responseA['emd'] = responseEmDataA; } deviceData[0] = responseA; collectedA = true; checkAndPush(); }); } else { collectedA = true; // Mark A as processed even if no data checkAndPush(); } }); } if (variables.enableB) { Shelly.call("EM1.GetStatus", {"id": 1}, function(responseB) { if (responseB) { Shelly.call("EM1Data.GetStatus", {"id": 1}, function(responseEmDataB) { if (responseEmDataB) { responseB['emd'] = responseEmDataB; } deviceData[1] = responseB; collectedB = true; checkAndPush(); }); } else { collectedB = true; // Mark B as processed even if no data checkAndPush(); } }); } if (!variables.enableA && !variables.enableB) { return; } } function publishBulkToMQTT() { if(variables.dataBuffer.length > 0){ let mqttData = { name: variables.hardwareId, type: 'powerpro', data: variables.dataBuffer }; MQTT.publish(variables.mqttTopic, JSON.stringify(mqttData)); variables.dataBuffer = []; // Clear the buffer after sending } } Timer.set(variables.collectionInterval, true, getDeviceStatus); Timer.set(variables.sendInterval, true, publishBulkToMQTT); Quote Translate Revert translation? English (American) French German Italian Polish Portuguese (European) Spanish
Martin G Posted September 30, 2024 Posted September 30, 2024 I already had this kind of error in the past (with different firmware). It could be if you make too many Shelly.Call in a row. But this is not the case here because you wait for a call to complete before making a new one. In other words, the next call is embedded in the return function of the first one. I finally happened to find that : copy the entire script content, delete the script, create new empty script (can be with same name), paste the script content, save the script, made the trick, could run the script with no more error. Don't ask me why !?! Quote Translate Revert translation? English (American) French German Italian Polish Portuguese (European) Spanish
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.