diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bb37f2a..403c4b81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,24 @@ ### Builds after release 0.12.0 +#### Build 2107080 + +- Made Peek use the main websocket connection instead of opening a second one +- Temperature usermod fix (from @blazoncek's dev branch) + #### Build 2107070 - More robust initial resource loading in UI +- Added `getJsonValue()` for usermod config parsing (PR #2061) - Fixed preset saving over websocket - Alpha ESP32 S2 support (filesystem does not work) (PR #2067) +#### Build 2107042 + +- Updated ArduinoJson to 6.18.1 +- Improved Twinkleup effect +- Fixed preset immediately deselecting when set via HTTP API `PL=` + #### Build 2107041 - Restored support for "PL=~" mistakenly removed in 2106300 diff --git a/usermods/Temperature/usermod_temperature.h b/usermods/Temperature/usermod_temperature.h index 94560ed0..af509a67 100644 --- a/usermods/Temperature/usermod_temperature.h +++ b/usermods/Temperature/usermod_temperature.h @@ -42,6 +42,8 @@ class UsermodTemperature : public Usermod { bool waitingForConversion = false; // flag set at startup if DS18B20 sensor not found, avoids trying to keep getting // temperature if flashed to a board without a sensor attached + bool sensorFound = false; + bool enabled = true; // strings to reduce flash memory usage (used more than twice) @@ -87,7 +89,9 @@ class UsermodTemperature : public Usermod { uint8_t deviceAddress[8] = {0,0,0,0,0,0,0,0}; // find out if we have DS18xxx sensor attached oneWire->reset_search(); + delay(10); while (oneWire->search(deviceAddress)) { + DEBUG_PRINTLN(F("Found something...")); if (oneWire->crc8(deviceAddress, 7) == deviceAddress[7]) { switch (deviceAddress[0]) { case 0x10: // DS18S20 @@ -107,21 +111,23 @@ class UsermodTemperature : public Usermod { void setup() { int retries = 10; - // pin retrieved from cfg.json (readFromConfig()) prior to running setup() - if (!pinManager.allocatePin(temperaturePin,false)) { - temperaturePin = -1; // allocation failed - enabled = false; - DEBUG_PRINTLN(F("Temperature pin allocation failed.")); - } else { - if (enabled) { - // config says we are enabled + if (enabled) { + // config says we are enabled + DEBUG_PRINTLN(F("Allocating temperature pin...")); + // pin retrieved from cfg.json (readFromConfig()) prior to running setup() + if (temperaturePin >= 0 && pinManager.allocatePin(temperaturePin)) { oneWire = new OneWire(temperaturePin); if (!oneWire->reset()) - enabled = false; // resetting 1-Wire bus yielded an error + sensorFound = false; // resetting 1-Wire bus yielded an error else - while ((enabled=findSensor()) && retries--) delay(25); // try to find sensor + while ((sensorFound=findSensor()) && retries--) delay(25); // try to find sensor + } else { + if (temperaturePin >= 0) DEBUG_PRINTLN(F("Temperature pin allocation failed.")); + temperaturePin = -1; // allocation failed + sensorFound = false; } } + lastMeasurement = millis() - readingInterval + 10000; initDone = true; } @@ -189,7 +195,7 @@ class UsermodTemperature : public Usermod { JsonArray temp = user.createNestedArray(FPSTR(_name)); //temp.add(F("Loaded.")); - if (temperature <= -100) { + if (temperature <= -100.0 || (!sensorFound && temperature == -1.0)) { temp.add(0); temp.add(F(" Sensor Error!")); return; @@ -249,6 +255,7 @@ class UsermodTemperature : public Usermod { enabled = top[FPSTR(_enabled)] | enabled; newTemperaturePin = top["pin"] | newTemperaturePin; +// newTemperaturePin = min(33,max(-1,(int)newTemperaturePin)); // bounds check degC = top["degC"] | degC; readingInterval = top[FPSTR(_readInterval)] | readingInterval/1000; readingInterval = min(120,max(10,(int)readingInterval)) * 1000; // convert to ms @@ -260,8 +267,10 @@ class UsermodTemperature : public Usermod { temperaturePin = newTemperaturePin; DEBUG_PRINTLN(F(" config loaded.")); } else { - // changing parameters from settings page + DEBUG_PRINTLN(F(" config (re)loaded.")); + // changing paramters from settings page if (newTemperaturePin != temperaturePin) { + DEBUG_PRINTLN(F("Re-init temperature.")); // deallocate pin and release memory delete oneWire; pinManager.deallocatePin(temperaturePin); @@ -269,7 +278,6 @@ class UsermodTemperature : public Usermod { // initialise setup(); } - DEBUG_PRINTLN(F(" config (re)loaded.")); } // use "return !top["newestParameter"].isNull();" when updating Usermod with new features return !top[FPSTR(_parasite)].isNull(); diff --git a/wled00/data/index.js b/wled00/data/index.js index 224784a9..bb960757 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -22,7 +22,7 @@ var pJson = {}; var pN = "", pI = 0, pNum = 0; var pmt = 1, pmtLS = 0, pmtLast = 0; var lastinfo = {}; -var ws, useWs = false; +var ws; var fxlist = d.getElementById('fxlist'), pallist = d.getElementById('pallist'); var cfg = { theme:{base:"dark", bg:{url:""}, alpha:{bg:0.6,tab:0.8}, color:{bg:""}}, @@ -932,11 +932,12 @@ function makeWS() { if (ws) return; ws = new WebSocket('ws://'+(loc?locip:window.location.hostname)+'/ws'); ws.onmessage = function(event) { + var json = JSON.parse(event.data); + if (json.leds) return; //liveview packet clearTimeout(jsonTimeout); jsonTimeout = null; clearErrorToast(); d.getElementById('connind').style.backgroundColor = "#079"; - var json = JSON.parse(event.data); var info = json.info; d.getElementById('buttonNodes').style.display = (info.ndc > 0 && window.innerWidth > 770) ? "block":"none"; lastinfo = info; @@ -1054,15 +1055,18 @@ function requestJson(command, rinfo = true) { url = `http://${locip}${url}`; } + var useWs = ((command || rinfo) && ws && ws.readyState === WebSocket.OPEN); + var type = command ? 'post':'get'; if (command) { command.v = true; //get complete API response command.time = Math.floor(Date.now() / 1000); req = JSON.stringify(command); + if (req.length > 1000) useWs = false; //do not send very long requests over websocket } - if ((command || rinfo) && ws && ws.readyState === WebSocket.OPEN) { + if (useWs) { ws.send(req?req:'{"v":true}'); return; } @@ -1187,6 +1191,7 @@ function toggleLiveview() { var url = loc ? `http://${locip}/liveview`:"/liveview"; d.getElementById('liveview').src = (isLv) ? url:"about:blank"; d.getElementById('buttonSr').className = (isLv) ? "active":""; + if (!isLv && ws && ws.readyState === WebSocket.OPEN) ws.send('{"lv":false}'); size(); } diff --git a/wled00/data/liveviewws.htm b/wled00/data/liveviewws.htm index bc1e8293..31d082b5 100644 --- a/wled00/data/liveviewws.htm +++ b/wled00/data/liveviewws.htm @@ -21,18 +21,6 @@