From ea6d339b9ce494963062c3a69ce3034335e29427 Mon Sep 17 00:00:00 2001 From: ezcGman Date: Mon, 19 Dec 2022 22:15:39 +0100 Subject: [PATCH 1/9] UM SHT: Fixed MQTT discovery using correct unit --- usermods/sht/usermod_sht.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index 42b22a79e..88daeb438 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -191,7 +191,7 @@ void ShtUsermod::publishHomeAssistantAutodiscovery() { json[F("stat_cla")] = F("measurement"); snprintf_P(buf, 127, PSTR("%s-temperature"), escapedMac.c_str()); json[F("uniq_id")] = buf; - json[F("unit_of_meas")] = F("°C"); + json[F("unit_of_meas")] = F((unitOfTemp ? "°F" : "°C")); appendDeviceToMqttDiscoveryMessage(json); payload_size = serializeJson(json, json_str); snprintf_P(buf, 127, PSTR("homeassistant/sensor/%s/%s-temperature/config"), escapedMac.c_str(), escapedMac.c_str()); From f3d52f493258a66dafeabc603ddba194fe0a353a Mon Sep 17 00:00:00 2001 From: ezcGman Date: Mon, 19 Dec 2022 22:30:11 +0100 Subject: [PATCH 2/9] UM SHT: MQTT re-publish values on unit change --- usermods/sht/usermod_sht.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index 88daeb438..652bdfde1 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -387,6 +387,7 @@ bool ShtUsermod::readFromConfig(JsonObject &root) bool oldEnabled = enabled; byte oldShtType = shtType; + byte oldUnitOfTemp = unitOfTemp; bool oldHaMqttDiscovery = haMqttDiscovery; getJsonValue(top[FPSTR(_enabled)], enabled); @@ -410,6 +411,11 @@ bool ShtUsermod::readFromConfig(JsonObject &root) initShtTempHumiditySensor(); } + if (oldUnitOfTemp != unitOfTemp) { + publishTemperatureAndHumidityViaMqtt(); + publishHomeAssistantAutodiscovery(); + } + if (oldHaMqttDiscovery != haMqttDiscovery && haMqttDiscovery) { publishHomeAssistantAutodiscovery(); } From 5cfea54b06828b936f4fce9964a6d4f4e23ffebf Mon Sep 17 00:00:00 2001 From: ezcGman Date: Tue, 20 Dec 2022 23:58:11 +0100 Subject: [PATCH 3/9] UM SHT: Apply PR feedback --- usermods/sht/usermod_sht.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index 652bdfde1..9a3a2f4d1 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -191,7 +191,7 @@ void ShtUsermod::publishHomeAssistantAutodiscovery() { json[F("stat_cla")] = F("measurement"); snprintf_P(buf, 127, PSTR("%s-temperature"), escapedMac.c_str()); json[F("uniq_id")] = buf; - json[F("unit_of_meas")] = F((unitOfTemp ? "°F" : "°C")); + json[F("unit_of_meas")] = unitOfTemp ? F("°F") : F("°C"); appendDeviceToMqttDiscoveryMessage(json); payload_size = serializeJson(json, json_str); snprintf_P(buf, 127, PSTR("homeassistant/sensor/%s/%s-temperature/config"), escapedMac.c_str(), escapedMac.c_str()); From f12025b86edcb09771593a15a96fd48a5057a3a8 Mon Sep 17 00:00:00 2001 From: ezcGman Date: Wed, 21 Dec 2022 00:05:26 +0100 Subject: [PATCH 4/9] UM SHT: Added getters and isEnabled check --- usermods/sht/usermod_sht.h | 41 +++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index 9a3a2f4d1..a5b0e97a4 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -56,9 +56,13 @@ class ShtUsermod : public Usermod bool readFromConfig(JsonObject &root); void addToJsonInfo(JsonObject& root); - float getTemperatureC(); - float getTemperatureF(); - float getHumidity(); + bool isEnabled() { return enabled; } + + float getTemperature(); + float getTemperatureC() { return shtCurrentTempC; } + float getTemperatureF() { return shtCurrentTempF; } + float getHumidity() { return shtCurrentHumidity; } + const char* getUnitString(); uint16_t getId() { return USERMOD_ID_SHT; } }; @@ -162,9 +166,9 @@ void ShtUsermod::publishTemperatureAndHumidityViaMqtt() { char buf[128]; snprintf_P(buf, 127, PSTR("%s/temperature"), mqttDeviceTopic); - mqtt->publish(buf, 0, false, String((unitOfTemp ? getTemperatureF() : getTemperatureC())).c_str()); + mqtt->publish(buf, 0, false, String(getTemperature()).c_str()); snprintf_P(buf, 127, PSTR("%s/humidity"), mqttDeviceTopic); - mqtt->publish(buf, 0, false, String(shtCurrentHumidity).c_str()); + mqtt->publish(buf, 0, false, String(getHumidity()).c_str()); } /** @@ -463,36 +467,27 @@ void ShtUsermod::addToJsonInfo(JsonObject& root) return; } - jsonHumidity.add(shtCurrentHumidity); + jsonHumidity.add(getHumidity()); jsonHumidity.add(F(" RH")); - unitOfTemp ? jsonTemp.add(getTemperatureF()) : jsonTemp.add(getTemperatureC()); + jsonTemp.add(getTemperature()); unitOfTemp ? jsonTemp.add(F(" °F")) : jsonTemp.add(F(" °C")); } /** - * Getter for last read temperature in Celsius. + * Getter for last read temperature for configured unit. * * @return float */ -float ShtUsermod::getTemperatureC() { - return shtCurrentTempC; +float ShtUsermod::getTemperature() { + return unitOfTemp ? getTemperatureF() : getTemperatureC(); } /** - * Getter for last read temperature in Fahrenheit. + * Returns the current configured unit as human readable string. * - * @return float + * @return const char* */ -float ShtUsermod::getTemperatureF() { - return shtCurrentTempF; -} - -/** - * Getter for last read humidity in RH%. - * - * @return float - */ -float ShtUsermod::getHumidity() { - return shtCurrentHumidity; +const char* ShtUsermod::getUnitString() { + return unitOfTemp ? "°F" : "°C"; } \ No newline at end of file From 4ecad6592696a44be7ad7641f645a98a250aabd7 Mon Sep 17 00:00:00 2001 From: ezcGman Date: Wed, 21 Dec 2022 00:34:22 +0100 Subject: [PATCH 5/9] UM SHT: Codestyle --- usermods/sht/usermod_sht.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index a5b0e97a4..2244e3ad7 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -471,7 +471,7 @@ void ShtUsermod::addToJsonInfo(JsonObject& root) jsonHumidity.add(F(" RH")); jsonTemp.add(getTemperature()); - unitOfTemp ? jsonTemp.add(F(" °F")) : jsonTemp.add(F(" °C")); + jsonTemp.add(unitOfTemp ? F(" °F") : F(" °C")); } /** From 7e48875fd458f1c447f8fd016df5f32d32bb254b Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sun, 25 Dec 2022 11:02:50 +0100 Subject: [PATCH 6/9] Minor optimisation. --- usermods/sht/usermod_sht.h | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index 2244e3ad7..c9dec6ba3 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -26,9 +26,8 @@ class ShtUsermod : public Usermod const byte shtI2cAddress = 0x44; // i2c address of the sensor. 0x44 is the default for all SHT sensors. Change this, if needed unsigned long shtLastTimeUpdated = 0; // Remembers when we read data the last time bool shtDataRequested = false; // Reading data is done async. This remembers if we asked the sensor to read data - float shtCurrentTempC = 0; // Last read temperature in Celsius - float shtCurrentTempF = 0; // Last read temperature in Fahrenheit - float shtCurrentHumidity = 0; // Last read humidity in RH% + float shtCurrentTempC = 0.0f; // Last read temperature in Celsius + float shtCurrentHumidity = 0.0f; // Last read humidity in RH% void initShtTempHumiditySensor(); @@ -60,7 +59,7 @@ class ShtUsermod : public Usermod float getTemperature(); float getTemperatureC() { return shtCurrentTempC; } - float getTemperatureF() { return shtCurrentTempF; } + float getTemperatureF() { return (shtCurrentTempC * 1.8f) + 32.0f; } float getHumidity() { return shtCurrentHumidity; } const char* getUnitString(); @@ -68,10 +67,10 @@ class ShtUsermod : public Usermod }; // Strings to reduce flash memory usage (used more than twice) -const char ShtUsermod::_name[] PROGMEM = "SHT-Sensor"; -const char ShtUsermod::_enabled[] PROGMEM = "Enabled"; -const char ShtUsermod::_shtType[] PROGMEM = "SHT-Type"; -const char ShtUsermod::_unitOfTemp[] PROGMEM = "Unit"; +const char ShtUsermod::_name[] PROGMEM = "SHT-Sensor"; +const char ShtUsermod::_enabled[] PROGMEM = "Enabled"; +const char ShtUsermod::_shtType[] PROGMEM = "SHT-Type"; +const char ShtUsermod::_unitOfTemp[] PROGMEM = "Unit"; const char ShtUsermod::_haMqttDiscovery[] PROGMEM = "Add-To-HA-MQTT-Discovery"; /** @@ -94,7 +93,6 @@ void ShtUsermod::initShtTempHumiditySensor() shtTempHumidSensor->begin(shtI2cAddress, i2c_sda, i2c_scl); if (shtTempHumidSensor->readStatus() == 0xFFFF) { DEBUG_PRINTF("[%s] SHT init failed!\n", _name); - cleanupShtTempHumiditySensor(); cleanup(); return; } @@ -111,12 +109,8 @@ void ShtUsermod::initShtTempHumiditySensor() */ void ShtUsermod::cleanupShtTempHumiditySensor() { - if (isShtReady()) { - shtTempHumidSensor->reset(); - } - + if (isShtReady()) shtTempHumidSensor->reset(); delete shtTempHumidSensor; - shtInitDone = false; } @@ -130,9 +124,7 @@ void ShtUsermod::cleanupShtTempHumiditySensor() */ void ShtUsermod::cleanup() { - if (isShtReady()) { - cleanupShtTempHumiditySensor(); - } + cleanupShtTempHumiditySensor(); if (pinAllocDone) { PinManagerPinType pins[2] = { { i2c_sda, true }, { i2c_scl, true } }; @@ -226,7 +218,7 @@ void ShtUsermod::publishHomeAssistantAutodiscovery() { * @return void */ void ShtUsermod::appendDeviceToMqttDiscoveryMessage(JsonDocument& root) { - JsonObject device = root.createNestedObject("dev"); + JsonObject device = root.createNestedObject(F("dev")); device[F("ids")] = escapedMac.c_str(); device[F("name")] = serverDescription; device[F("sw")] = versionString; @@ -294,13 +286,11 @@ void ShtUsermod::loop() if (shtTempHumidSensor->dataReady()) { if (shtTempHumidSensor->readData(false)) { shtCurrentTempC = shtTempHumidSensor->getTemperature(); - shtCurrentTempF = shtTempHumidSensor->getFahrenheit(); shtCurrentHumidity = shtTempHumidSensor->getHumidity(); publishTemperatureAndHumidityViaMqtt(); shtReadDataSuccess = true; - } - else { + } else { shtReadDataSuccess = false; } @@ -458,12 +448,10 @@ void ShtUsermod::addToJsonInfo(JsonObject& root) if (shtLastTimeUpdated == 0) { jsonTemp.add(F(" Not read yet")); jsonHumidity.add(F(" Not read yet")); - } - else { + } else { jsonTemp.add(F(" Error")); jsonHumidity.add(F(" Error")); } - return; } @@ -471,7 +459,7 @@ void ShtUsermod::addToJsonInfo(JsonObject& root) jsonHumidity.add(F(" RH")); jsonTemp.add(getTemperature()); - jsonTemp.add(unitOfTemp ? F(" °F") : F(" °C")); + jsonTemp.add(unitOfTemp ? "°F") : "°C"); } /** From c739a7ea2f810e66397961c614f2d4ab346e8c2b Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Sun, 25 Dec 2022 11:05:25 +0100 Subject: [PATCH 7/9] Erroneous ) --- usermods/sht/usermod_sht.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/sht/usermod_sht.h b/usermods/sht/usermod_sht.h index c9dec6ba3..721cb7f09 100644 --- a/usermods/sht/usermod_sht.h +++ b/usermods/sht/usermod_sht.h @@ -459,7 +459,7 @@ void ShtUsermod::addToJsonInfo(JsonObject& root) jsonHumidity.add(F(" RH")); jsonTemp.add(getTemperature()); - jsonTemp.add(unitOfTemp ? "°F") : "°C"); + jsonTemp.add(unitOfTemp ? "°F" : "°C"); } /** From 6f67132f4b29b5ccfb39dbce5d4b020b502ad32c Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Mon, 26 Dec 2022 10:20:45 +0100 Subject: [PATCH 8/9] PROGMEM string optimisation. --- usermods/mpu6050_imu/usermod_mpu6050_imu.h | 2 +- wled00/e131.cpp | 8 ++++---- wled00/wled.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/usermods/mpu6050_imu/usermod_mpu6050_imu.h b/usermods/mpu6050_imu/usermod_mpu6050_imu.h index 4ce51c433..283c986e0 100644 --- a/usermods/mpu6050_imu/usermod_mpu6050_imu.h +++ b/usermods/mpu6050_imu/usermod_mpu6050_imu.h @@ -138,7 +138,7 @@ class MPU6050Driver : public Usermod { // (if it's going to break, usually the code will be 1) DEBUG_PRINT(F("DMP Initialization failed (code ")); DEBUG_PRINT(devStatus); - DEBUG_PRINTLN(F(")")); + DEBUG_PRINTLN(")"); } } diff --git a/wled00/e131.cpp b/wled00/e131.cpp index cce5233ae..0c4598235 100644 --- a/wled00/e131.cpp +++ b/wled00/e131.cpp @@ -96,11 +96,11 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP, byte protocol){ if (e131SkipOutOfSequence) if (seq < e131LastSequenceNumber[previousUniverses] && seq > 20 && e131LastSequenceNumber[previousUniverses] < 250){ - DEBUG_PRINT("skipping E1.31 frame (last seq="); + DEBUG_PRINT(F("skipping E1.31 frame (last seq=")); DEBUG_PRINT(e131LastSequenceNumber[previousUniverses]); - DEBUG_PRINT(", current seq="); + DEBUG_PRINT(F(", current seq=")); DEBUG_PRINT(seq); - DEBUG_PRINT(", universe="); + DEBUG_PRINT(F(", universe=")); DEBUG_PRINT(uni); DEBUG_PRINTLN(")"); return; @@ -444,7 +444,7 @@ void sendArtnetPollReply(ArtPollReply *reply, IPAddress ipAddress, uint16_t port reply->reply_sub_sw = (uint8_t)((portAddress >> 4) & 0x000F); reply->reply_sw_out[0] = (uint8_t)(portAddress & 0x000F); - sprintf((char *)reply->reply_node_report, "#0001 [%04u] OK - WLED v" TOSTRING(WLED_VERSION), pollReplyCount); + snprintf_P((char *)reply->reply_node_report, sizeof(reply->reply_node_report)-1, PSTR("#0001 [%04u] OK - WLED v" TOSTRING(WLED_VERSION)), pollReplyCount); if (pollReplyCount < 9999) { pollReplyCount++; diff --git a/wled00/wled.cpp b/wled00/wled.cpp index e41176f41..a5110106b 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -569,7 +569,7 @@ bool WLED::initEthernet() } else { DEBUG_PRINT(F("initE: Failing due to invalid eth_clk_mode (")); DEBUG_PRINT(es.eth_clk_mode); - DEBUG_PRINTLN(F(")")); + DEBUG_PRINTLN(")"); return false; } From 6d1ff7c3f367ba5932fb4e118899a9afb5e0849a Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Mon, 26 Dec 2022 10:25:26 +0100 Subject: [PATCH 9/9] Railway FX - slower minimum speed - allow color 1 & 2 in UI --- wled00/FX.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 6a9ed4478..bcbb07f7b 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -2351,7 +2351,7 @@ static const char _data_FX_MODE_METEOR_SMOOTH[] PROGMEM = "Meteor Smooth@!,Trail //Railway Crossing / Christmas Fairy lights uint16_t mode_railway() { - uint16_t dur = 40 + (255 - SEGMENT.speed) * 10; + uint16_t dur = (256 - SEGMENT.speed) * 40; uint16_t rampdur = (dur * SEGMENT.intensity) >> 8; if (SEGENV.step > dur) { @@ -2368,16 +2368,16 @@ uint16_t mode_railway() if (SEGENV.aux0) pos = 255 - pos; for (int i = 0; i < SEGLEN; i += 2) { - SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(255 - pos, false, false, 255)); + SEGMENT.setPixelColor(i, SEGMENT.color_from_palette(255 - pos, false, false, 255)); // do not use color 1 or 2, always use palette if (i < SEGLEN -1) { - SEGMENT.setPixelColor(i + 1, SEGMENT.color_from_palette(pos, false, false, 255)); + SEGMENT.setPixelColor(i + 1, SEGMENT.color_from_palette(pos, false, false, 255)); // do not use color 1 or 2, always use palette } } SEGENV.step += FRAMETIME; return FRAMETIME; } -static const char _data_FX_MODE_RAILWAY[] PROGMEM = "Railway@!,Smoothness;;!"; +static const char _data_FX_MODE_RAILWAY[] PROGMEM = "Railway@!,Smoothness;1,2;!"; //Water ripple