Доброго времени суток! Столкнулся с проблемой с Iskra JS - после 5-6-ти часов отправки данных по HTTP на некий облачный сервис начинают валиться ошибки о нехватке памяти. При использовании HTTPS эти ошибки начинают валиться практически сразу - через одну/две посылки. Есть какие-нибудь хинты? Может как-то можно "мусорщика" пинать? Или код в студию?
Вот код: //Adafruit UserName var NAME = "XXXXXXX"; //Adafruit AIO-Key var AIOKEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // Group ID var GROUP = "multitest"; //WiFi var SSID = "SSID"; var PASSWORD = "PASSWORD"; I2C1.setup({scl: SCL, sda: SDA}); var mySensor = require("@amperka/thermometer").connect(A1); console.log("Temp: ", mySensor.read("C")); var myBaro = require("@amperka/barometer").connect(); var compass = require("@amperka/magnetometer").connect(I2C1, 0x1C); var https = require("http"); myBaro.init(); var opts = { host: 'io.adafruit.com', port: 80, path: '/api/v2/'+NAME+'/groups/'+GROUP+'/data', method: 'POST', protocol: 'http:', headers: { 'X-AIO-Key': AIOKEY, 'Content-Type': 'application/json', 'Content-Length': 0 } }; function sendMessage(callback) { var message = { feeds: [ {key: "temperature", value: mySensor.read("C").toFixed(2)}, {key: "pressure", value: myBaro.read("mmHg").toFixed(2)}, {key: "tempo", value: myBaro.temperature("C").toFixed(2)} ] }; var content = JSON.stringify(message); opts.headers['Content-Length'] = content.length; var request = https.request(opts, function(res) { var response = ''; res.on('data', function(d) { response += d; }); res.on('close', function() { var json = JSON.parse(response); if (callback) { callback(json); } }); }); request.end(content); request.on('error', function(err) { console.log('ERROR: ', err); }); } function run() { setInterval(function() { sendMessage(); }, 10000); } var wifi = require("@amperka/wifi").setup(function(err) { wifi.connect(SSID, PASSWORD, function(err) { wifi.getIP(function(err, ip) { if (!err) { console.log("My IP: ", ip); } }); run(); }); });
Что могу посоветовать: почаще поставить вызов console.log, чтобы хотя бы примерно локализовать проблемный участок. Это первое. Второе - помодульно отказываться от библиотек, чтобы понять - какая вызывает проблему. Т.е. задача - получить минимальный код, который - либо работает без нареканий, либо - стопроцентно воспроизводит проблему. Только тогда можно будет сделать вывод о том, в чём проблема. Начните с простого: последовательно откажитесь от термометра, барометра, магнетометра, вместо их данных подставив в message какие-нибудь жёстко прошитые значения - и смотрите, будет ли возникать проблема.
На старых версиях прошивки был баг с GET-запросами, там постоянно рос размер объекта запроса. Обновитесь до 1v92. Сборщик мусора вызывается командой process.memory()
Спасибо за сборщика. Потестирую. Я на 1v92. От https пришлось отказаться - ошибки памяти при построении запроса начинают сыпаться практически тут же.
Вот ошибка, которая выпадает при использовании https: Uncaught InternalError: Failed! mbedtls_ssl_setup: Not enough memory at line 22 col 22 request.end(content); ^ in function "sendMessage" called from line 1 col 13 sendMessage(); ^ in function called from system Uncaught InternalError: Failed! mbedtls_ssl_setup: Not enough memory at line 22 col 22 request.end(content); ^ in function "sendMessage" called from line 1 col 13 sendMessage(); ^ in function called from system
Вот это прилетает после суток/двух работы по HTTP: ERROR: Out of Memory! Execution Interrupted at line 1 col 675 ..."+(a?a:"Timeout")+")")))}),c) ^ in function called from line 22 col 22 request.end(content); ^ WARNING: Out of memory while appending to array ERROR: Error processing Serial data handler - removing it. ERROR: Ctrl-C while processing interval - removing it. Execution Interrupted during event processing. at line 1 col 129 ...ction(){d=void 0;b&&b()},c),p=function(a){d=void 0;var f;b&&... ^ in function "cmd" called from line 1 col 111 ...hin function "d" called from line 1 col 324 ...c&&(e[c](k),n=!0);n||d&&d(k)}a=a.substr(f+1);"\n"==a[0]&&(a=..in function called from system at line 1 col 256 ...ft(),h.cat line 22 col 22 requExecution Interrupted Execution Interrupted