From 82cb6a293f53f5847561ca4f7c8574ce168970a1 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 31 Oct 2024 22:06:32 +0100 Subject: [PATCH 01/70] Update usermods_list.cpp --- wled00/usermods_list.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 36bd122a51..6a5be5e98f 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -182,6 +182,10 @@ #include "../usermods/Internal_Temperature_v2/usermod_internal_temperature.h" #endif +#ifdef USERMOD_INA219 + #include "../usermods/INA219/usermod_ina219.h" +#endif + #if defined(WLED_USE_SD_MMC) || defined(WLED_USE_SD_SPI) // This include of SD.h and SD_MMC.h must happen here, else they won't be // resolved correctly (when included in mod's header only) @@ -470,4 +474,8 @@ void registerUsermods() #ifdef USERMOD_POV_DISPLAY UsermodManager::add(new PovDisplayUsermod()); #endif + + #ifdef USERMOD_INA219 + UsermodManager::add(new UsermodINA219()); + #endif } From c2059a6eed8ba3ccfd9882414168d9879c24002b Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 31 Oct 2024 22:07:58 +0100 Subject: [PATCH 02/70] Update const.h --- wled00/const.h | 1 + 1 file changed, 1 insertion(+) diff --git a/wled00/const.h b/wled00/const.h index 07873deca1..0f345de300 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -203,6 +203,7 @@ #define USERMOD_ID_LD2410 52 //Usermod "usermod_ld2410.h" #define USERMOD_ID_POV_DISPLAY 53 //Usermod "usermod_pov_display.h" #define USERMOD_ID_PIXELS_DICE_TRAY 54 //Usermod "pixels_dice_tray.h" +#define USERMOD_ID_INA219 55 //Usermod "usermod_ina219.h" //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot From 201c17e539f79be6be00eae86e090afb31b19529 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 31 Oct 2024 22:08:35 +0100 Subject: [PATCH 03/70] Add INA219 Usermod --- usermods/INA219/Readme.md | 132 +++++ usermods/INA219/img/homeassistant.png | Bin 0 -> 20513 bytes usermods/INA219/img/info.png | Bin 0 -> 48000 bytes usermods/INA219/img/usermod_settings.png | Bin 0 -> 12822 bytes usermods/INA219/usermod_ina219.h | 702 +++++++++++++++++++++++ 5 files changed, 834 insertions(+) create mode 100644 usermods/INA219/Readme.md create mode 100644 usermods/INA219/img/homeassistant.png create mode 100644 usermods/INA219/img/info.png create mode 100644 usermods/INA219/img/usermod_settings.png create mode 100644 usermods/INA219/usermod_ina219.h diff --git a/usermods/INA219/Readme.md b/usermods/INA219/Readme.md new file mode 100644 index 0000000000..727c365321 --- /dev/null +++ b/usermods/INA219/Readme.md @@ -0,0 +1,132 @@ +# INA219 WLED Usermod + +This Usermod integrates the INA219 sensor with WLED to monitor energy consumption. It can read voltage, current, power, and calculate daily, monthly and total energy usage. + +## Features + +- Monitors bus voltage, shunt voltage, current, and power. +- Calculates total energy consumed in kilowatt-hours (kWh). +- Supports MQTT publishing of sensor data. +- Publishes energy data to Home Assistant for easy integration. +- Displays daily, monthly and total energy used in the WLED GUI under the info section. +- Configurable through WLED's web interface. + +## Screenshots + +| Info screen | Settings page | Home Assistant | +|------------------------------------------------|-----------------------------------------------------------------|------------------------------------------------------------| +| ![Info screen](./img/info.png "Info screen") | ![Settings page](./img/usermod_settings.png "Settings page") | ![Settings page](./img/homeassistant.png "Home Assistant") | + +## Configuration Parameters + +| Parameter | Description | Default Value | Possible Values | +|-------------------------------|------------------------------------------------------------|----------------|--------------------------------------------------------| +| `INA219_ENABLED` | Enable or disable the INA219 Usermod | `false` | `true`, `false` | +| `INA219_SDA_PIN` | I2C data pin (SDA) | `8` | See options below for available GPIO pins. | +| `INA219_SCL_PIN` | I2C clock pin (SCL) | `9` | See options below for available GPIO pins. | +| `INA219_I2C_ADDRESS` | I2C address of the INA219 sensor | `0x40` | See options below for available addresses. | +| `INA219_CHECK_INTERVAL` | Interval for checking sensor values (seconds) | `5` | Any positive integer | +| `INA219_CONVERSION_TIME` | ADC conversion time (12-bit, 16-bit, etc.) | `BIT_MODE_12` | See options below for available modes. | +| `INA219_DECIMAL_FACTOR` | Number of decimal places for current and power readings | `3` | See options below for decimal places. | +| `INA219_SHUNT_RESISTOR` | Value of the shunt resistor in ohms | `0.1` | Any positive float value matching your INA219 resistor | +| `INA219_CORRECTION_FACTOR` | Correction factor for measurements | `1.0` | Any positive float value | +| `INA219_MQTT_PUBLISH` | Publish sensor data to MQTT | `false` | `true`, `false` | +| `INA219_MQTT_PUBLISH_ALWAYS` | Always publish values, regardless of change | `false` | `true`, `false` | +| `INA219_HA_DISCOVERY` | Enable Home Assistant discovery for sensors | `false` | `true`, `false` | + + ### Options for `INA219_CONVERSION_TIME` + + The `conversionTime` parameter can be set to the following ADC modes: + + | Value | Description | + |-------------------|----------------------------| + | `BIT_MODE_9` | 9-Bit (84 µs) | + | `BIT_MODE_10` | 10-Bit (148 µs) | + | `BIT_MODE_11` | 11-Bit (276 µs) | + | `BIT_MODE_12` | 12-Bit (532 µs) | + | `SAMPLE_MODE_2` | 2 samples (1.06 ms) | + | `SAMPLE_MODE_4` | 4 samples (2.13 ms) | + | `SAMPLE_MODE_8` | 8 samples (4.26 ms) | + | `SAMPLE_MODE_16` | 16 samples (8.51 ms) | + | `SAMPLE_MODE_32` | 32 samples (17.02 ms) | + | `SAMPLE_MODE_64` | 64 samples (34.05 ms) | + | `SAMPLE_MODE_128` | 128 samples (68.10 ms) | + + ### Options for `INA219_DECIMAL_FACTOR` + + The `decimalFactor` parameter can be set to: + + | Decimal Places | Value | Example | + |----------------|-------|------------------| + | 0 | 0 | 100 | + | 1 | 1 | 100.0 | + | 2 | 2 | 100.00 | + | 3 | 3 | 100.000 | + + ### Options for `INA219_I2C_ADDRESS` + + The `i2cAddress` parameter can be set to the following options: + + | Address | Description | Value | + |---------------------|------------------------------------|---------| + | `0x40` | 0x40 - Default | 0x40 | + | `0x41` | 0x41 - A0 soldered | 0x41 | + | `0x44` | 0x44 - A1 soldered | 0x44 | + | `0x45` | 0x45 - A0 and A1 soldered | 0x45 | + + ### Options for `INA219_SDA_PIN` and `INA219_SCL_PIN` + + The `SDA` and `SCL` pins can be set to any valid and unused GPIO pin, with defaults as follows: + + - **Default SDA Pin**: `8` + - **Default SCL Pin**: `9` + + Example GPIO pin values for configuration: + + | GPIO Pin | Description | + |----------|--------------| + | `8` | Default SDA | + | `9` | Default SCL | + | Other GPIO pins are available, depending on hardware. + +## Usage + +1. Include this usermod in your WLED project by adding `#define USERMOD_INA219` to the `my_config.h` file. + +2. **Dependencies** + These libraries must be added under `lib_deps` in your `platformio.ini` (or `platform_override.ini`): + - `wollewald/INA219_WE@~1.3.8` (by [wollewald](https://github.com/wollewald/INA219_WE)) + - `Wire` + +3. Configure the parameters in the web interface or via the JSON config file. + +4. Monitor your energy consumption through the WLED interface or via MQTT. + +5. Optional to predefine options: + + #define INA219_ENABLED false + #define INA219_SDA_PIN 8 + #define INA219_SCL_PIN 9 + #define INA219_I2C_ADDRESS 0x40 + #define INA219_CHECK_INTERVAL 5 + #define INA219_CONVERSION_TIME BIT_MODE_12 + #define INA219_DECIMAL_FACTOR 3 + #define INA219_SHUNT_RESISTOR 0.1 + #define INA219_CORRECTION_FACTOR 1.0 + #define INA219_MQTT_PUBLISH false + #define INA219_MQTT_PUBLISH_ALWAYS false + #define INA219_HA_DISCOVERY false + +## Energy Calculation + +- **Total Energy** is calculated continuously. +- **Daily Energy** resets after 24 hours. +- **Monthly Energy** resets after 30 days. + +To reset daily or monthly energy calculations, you can implement corresponding functions within your main application. + +## Dependencies + +Ensure you have the required libraries installed: + +- [INA219_WE](https://github.com/wollewald/INA219_WE) diff --git a/usermods/INA219/img/homeassistant.png b/usermods/INA219/img/homeassistant.png new file mode 100644 index 0000000000000000000000000000000000000000..64259fc511216fdb67f39859fcc4e93d577c2051 GIT binary patch literal 20513 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 literal 0 HcmV?d00001 diff --git a/usermods/INA219/img/info.png b/usermods/INA219/img/info.png new file mode 100644 index 0000000000000000000000000000000000000000..82caaa08f6dda4d58c170cb91c34d29037f7efee GIT binary patch literal 48000 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 literal 0 HcmV?d00001 diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h new file mode 100644 index 0000000000..444c3bc716 --- /dev/null +++ b/usermods/INA219/usermod_ina219.h @@ -0,0 +1,702 @@ +#pragma once + +#include "wled.h" +#include +#include + +class UsermodINA219 : public Usermod { +private: + static const char _name[]; // Name of the usermod + + bool initDone = false; // Flag to check if initialization is complete + unsigned long lastCheck = 0; // Timestamp for the last check + + // Configurable settings for the INA219 Usermod + // Enabled setting + #ifdef INA219_ENABLED + bool enabled = INA219_ENABLED; + #else + bool enabled = false; // Default disabled value + #endif + + // I2C Address (default is 0x40 if not defined) + #ifdef INA219_I2C_ADDRESS + uint8_t _i2cAddress = INA219_I2C_ADDRESS; + #else + uint8_t _i2cAddress = 0x40; // Default I2C address + #endif + + // Check Interval (in seconds) + #ifdef INA219_CHECK_INTERVAL + uint16_t _checkInterval = INA219_CHECK_INTERVAL; + uint16_t checkInterval = _checkInterval * 1000; // Convert to milliseconds + #else + uint16_t _checkInterval = 5; // Default 5 seconds + uint16_t checkInterval = _checkInterval * 1000; // Default 5 seconds + #endif + + // Conversion Time + #ifdef INA219_CONVERSION_TIME + INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); // Cast from int if defined + #else + INA219_ADC_MODE conversionTime = BIT_MODE_12; // Default 12-bit resolution + #endif + + // Decimal factor for current/power readings + #ifdef INA219_DECIMAL_FACTOR + uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; + #else + uint8_t _decimalFactor = 3; // Default 3 decimal places + #endif + + // Shunt Resistor value + #ifdef INA219_SHUNT_RESISTOR + float shuntResistor = INA219_SHUNT_RESISTOR; + #else + float shuntResistor = 0.1; // Default 0.1 ohms + #endif + + // Correction factor + #ifdef INA219_CORRECTION_FACTOR + float correctionFactor = INA219_CORRECTION_FACTOR; + #else + float correctionFactor = 1.0; // Default correction factor + #endif + + // MQTT Publish Settings + #ifdef INA219_MQTT_PUBLISH + bool mqttPublish = INA219_MQTT_PUBLISH; + bool mqttPublishSent = !INA219_MQTT_PUBLISH; + #else + bool mqttPublish = false; // Default: false (do not publish to MQTT) + bool mqttPublishSent = true; + #endif + + #ifdef INA219_MQTT_PUBLISH_ALWAYS + bool mqttPublishAlways = INA219_MQTT_PUBLISH_ALWAYS; + #else + bool mqttPublishAlways = false; // Default: false (only publish changes) + #endif + + #ifdef INA219_HA_DISCOVERY + bool haDiscovery = INA219_HA_DISCOVERY; + bool haDiscoverySent = !INA219_HA_DISCOVERY; + #else + bool haDiscovery = false; // Default: false (Home Assistant discovery disabled) + bool haDiscoverySent = true; + #endif + + // I2C SDA and SCL pins (default SDA = 8, SCL = 9 if not defined) + #ifdef INA219_SDA_PIN + uint8_t _sdaPin = INA219_SDA_PIN; + #else + uint8_t _sdaPin = 8; // Default SDA pin + #endif + + #ifdef INA219_SCL_PIN + uint8_t _sclPin = INA219_SCL_PIN; + #else + uint8_t _sclPin = 9; // Default SCL pin + #endif + + // Variables to store sensor readings + float busVoltage = 0; + float current = 0; + float current_mA = 0; + float power = 0; + float power_mW = 0; + float shuntVoltage = 0; + float loadVoltage = 0; + bool overflow = false; + + //Last sent variables + float last_sent_shuntVoltage = 0; + float last_sent_busVoltage = 0; + float last_sent_loadVoltage = 0; + float last_sent_current = 0; + float last_sent_current_mA = 0; + float last_sent_power = 0; + float last_sent_power_mW = 0; + bool last_sent_overflow = false; + + float totalEnergy_kWh = 0.0; // Total energy in kWh + float dailyEnergy_kWh = 0.0; // Daily energy in kWh + float monthlyEnergy_kWh = 0.0; // Monthly energy in kWh + unsigned long lastPublishTime = 0; // Track the last publish time + + // Variables to store last reset timestamps + unsigned long dailyResetTime = 0; // Reset time in seconds + unsigned long monthlyResetTime = 0; // Reset time in seconds + + // Variables to track last sent readings + float _lastCurrentSent = 0; + float _lastVoltageSent = 0; + float _lastPowerSent = 0; + float _lastShuntVoltageSent = 0; + + INA219_WE *_ina219 = nullptr; // INA219 sensor object + + // Function to truncate decimals based on the configured decimal factor + float truncateDecimals(float val) { + // If _decimalFactor is 0, round to the nearest whole number + if (_decimalFactor == 0) { + return roundf(val); + } + // For decimal factors 1 and above, round to the appropriate number of decimal places + float factor = pow(10, _decimalFactor); + return roundf(val * factor) / factor; + } + + // Function to update INA219 settings + void updateINA219Settings() { + // End current I2C if already initialized + Wire.end(); + + // Reinitialize I2C with the potentially updated SDA and SCL pins + Wire.begin(_sdaPin, _sclPin); + + // Reinitialize the INA219 instance with updated settings + if (_ina219 != nullptr) { + delete _ina219; + } + _ina219 = new INA219_WE(_i2cAddress); + if (!_ina219->init()) { + DEBUG_PRINTLN(F("INA219 initialization failed!")); + return; + } + _ina219->setShuntSizeInOhms(shuntResistor); + _ina219->setADCMode(conversionTime); + _ina219->setCorrectionFactor(correctionFactor); + } + +public: + // Destructor to clean up the INA219 object + ~UsermodINA219() { + delete _ina219; + _ina219 = nullptr; + } + + // ADC mode enumeration + enum class ADCMode { + BIT_MODE_9 = 0, + BIT_MODE_10 = 1, + BIT_MODE_11 = 2, + BIT_MODE_12 = 3, + SAMPLE_MODE_2 = 9, + SAMPLE_MODE_4 = 10, + SAMPLE_MODE_8 = 11, + SAMPLE_MODE_16 = 12, + SAMPLE_MODE_32 = 13, + SAMPLE_MODE_64 = 14, + SAMPLE_MODE_128 = 15 + }; + + // Setup function called once on boot or restart + void setup() override { + updateINA219Settings(); // Configure INA219 settings + initDone = true; // Mark initialization as complete + } + + // Loop function called continuously + void loop() override { + // Check if the usermod is enabled and the check interval has elapsed + if (enabled && millis() - lastCheck > checkInterval) { + lastCheck = millis(); // Update last check timestamp + + // Read sensor values + shuntVoltage = truncateDecimals(_ina219->getShuntVoltage_mV()); + busVoltage = truncateDecimals(_ina219->getBusVoltage_V()); + current_mA = truncateDecimals(_ina219->getCurrent_mA()); + current = truncateDecimals(_ina219->getCurrent_mA() / 1000.0); // Convert from mA to A + power_mW = truncateDecimals(_ina219->getBusPower()); + power = truncateDecimals(_ina219->getBusPower() / 1000.0); // Convert from mW to W + loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); + overflow = truncateDecimals(_ina219->getOverflow()); + + // Update energy values based on power for this duration + updateEnergy(power, lastCheck - lastPublishTime); + lastPublishTime = lastCheck; // Update last publish time + + #ifndef WLED_DISABLE_MQTT + // Publish to MQTT if enabled + if (mqttPublish) { + if (mqttPublishAlways || hasValueChanged()) { + publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); + + last_sent_shuntVoltage = shuntVoltage; + last_sent_busVoltage = busVoltage; + last_sent_loadVoltage = loadVoltage; + last_sent_current = current; + last_sent_current_mA = current_mA; + last_sent_power = power; + last_sent_power_mW = power_mW; + last_sent_overflow = overflow; + + mqttPublishSent = true; + } + } else if (!mqttPublish && mqttPublishSent) { + char sensorTopic[128]; + snprintf_P(sensorTopic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Discovery config topic for each sensor + + // Publish an empty message with retain to delete the sensor from Home Assistant + mqtt->publish(sensorTopic, 0, true, ""); + + mqttPublishSent = false; + } + + // Optionally publish to Home Assistant via MQTT discovery + if (haDiscovery && !haDiscoverySent) { + char topic[128]; + snprintf_P(topic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Common topic for all INA219 data + + mqttCreateHassSensor(F("Current"), topic, F("current"), F("A"), F("current"), F("sensor")); + mqttCreateHassSensor(F("Voltage"), topic, F("voltage"), F("V"), F("bus_voltage_V"), F("sensor")); + mqttCreateHassSensor(F("Power"), topic, F("power"), F("W"), F("power"), F("sensor")); + mqttCreateHassSensor(F("Shunt Voltage"), topic, F("voltage"), F("mV"), F("shunt_voltage_mV"), F("sensor")); + mqttCreateHassSensor(F("Shunt Resistor"), topic, F(""), F("Ω"), F("shunt_resistor_Ohms"), F("sensor")); + mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("binary_sensor")); + mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); + mqttCreateHassSensor(F("Daily Energy"), topic, F("energy"), F("kWh"), F("daily_energy_kWh"), F("sensor")); + mqttCreateHassSensor(F("Monthly Energy"), topic, F("energy"), F("kWh"), F("monthly_energy_kWh"), F("sensor")); + + // Mark as sent to avoid repeating + haDiscoverySent = true; + } else if (!haDiscovery && haDiscoverySent) { + // Remove previously created sensors + mqttRemoveHassSensor(F("Current"), F("sensor")); + mqttRemoveHassSensor(F("Voltage"), F("sensor")); + mqttRemoveHassSensor(F("Power"), F("sensor")); + mqttRemoveHassSensor(F("Shunt-Voltage"), F("sensor")); + mqttRemoveHassSensor(F("Total-Energy"), F("sensor")); + mqttRemoveHassSensor(F("Daily-Energy"), F("sensor")); + mqttRemoveHassSensor(F("Monthly-Energy"), F("sensor")); + mqttRemoveHassSensor(F("Shunt-Resistor"), F("sensor")); + mqttRemoveHassSensor(F("Overflow"), F("binary_sensor")); + + // Mark as sent to avoid repeating + haDiscoverySent = false; + } + #endif + } + } + + bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f) { + return fabsf(oldValue - newValue) > threshold; + } + + bool hasValueChanged() { + return hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || + hasSignificantChange(last_sent_busVoltage, busVoltage) || + hasSignificantChange(last_sent_loadVoltage, loadVoltage) || + hasSignificantChange(last_sent_current, current) || + hasSignificantChange(last_sent_current_mA, current_mA) || + hasSignificantChange(last_sent_power, power) || + hasSignificantChange(last_sent_power_mW, power_mW) || + (last_sent_overflow != overflow); + } + +#ifndef WLED_DISABLE_MQTT + /** + * Function to publish sensor data to MQTT + */ + bool onMqttMessage(char* topic, char* payload) override { + // Check if the message is for the correct topic + if (strcmp_P(topic, PSTR("/sensor/ina219")) == 0) { + StaticJsonDocument<512> jsonDoc; + + // Parse the JSON payload + DeserializationError error = deserializeJson(jsonDoc, payload); + if (error) { + Serial.print(F("deserializeJson() failed: ")); + Serial.println(error.f_str()); + return false; + } + + // Update the energy values + totalEnergy_kWh = jsonDoc["total_energy_kWh"]; + dailyEnergy_kWh = jsonDoc["daily_energy_kWh"]; + monthlyEnergy_kWh = jsonDoc["monthly_energy_kWh"]; + dailyResetTime = jsonDoc["dailyResetTime"]; + monthlyResetTime = jsonDoc["monthlyResetTime"]; + + return true; + } + + return false; + } + + /** + * Subscribe to MQTT topic for controlling usermod + */ + void onMqttConnect(bool sessionPresent) override { + char subuf[64]; + if (mqttDeviceTopic[0] != 0) { + strcpy(subuf, mqttDeviceTopic); + strcat_P(subuf, PSTR("/sensor/ina219")); + mqtt->subscribe(subuf, 0); + } + } + #endif + + /** + * Function to publish INA219 sensor data to MQTT + */ + void publishMqtt(float shuntVoltage, float busVoltage, float loadVoltage, + float current, float current_mA, float power, + float power_mW, bool overflow) { + // Publish to MQTT only if the WLED MQTT feature is enabled + #ifndef WLED_DISABLE_MQTT + + // Create a JSON document to hold sensor data + StaticJsonDocument<512> jsonDoc; + + // Populate the JSON document with sensor readings + jsonDoc["shunt_voltage_mV"] = shuntVoltage; // Shunt voltage in millivolts + jsonDoc["bus_voltage_V"] = busVoltage; // Bus voltage in volts + jsonDoc["load_voltage_V"] = loadVoltage; // Load voltage in volts + jsonDoc["current"] = current; // Current in unspecified units + jsonDoc["current_mA"] = current_mA; // Current in milliamperes + jsonDoc["power"] = power; // Power in unspecified units + jsonDoc["power_mW"] = power_mW; // Power in milliwatts + jsonDoc["overflow"] = overflow; // Overflow status (true/false) + //jsonDoc["overflow"] = overflow ? "on" : "off"; + jsonDoc["shunt_resistor_Ohms"] = shuntResistor; // Shunt resistor value in Ohms + + // Energy calculations + jsonDoc["total_energy_kWh"] = totalEnergy_kWh; // Total energy in kilowatt-hours + jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; // Daily energy in kilowatt-hours + jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; // Monthly energy in kilowatt-hours + + // Reset timestamps + jsonDoc["dailyResetTime"] = dailyResetTime; // Timestamp of the last daily reset + jsonDoc["monthlyResetTime"] = monthlyResetTime; // Timestamp of the last monthly reset + + // Serialize the JSON document into a character buffer + char buffer[512]; + serializeJson(jsonDoc, buffer); + + // Construct the MQTT topic using the device topic + char topic[128]; + snprintf_P(topic, sizeof(topic), "%s/sensor/ina219", mqttDeviceTopic); + + // Publish the serialized JSON data to the specified MQTT topic + mqtt->publish(topic, 0, true, buffer); + #endif + } + + /** + * Function to create Home Assistant sensor configuration + */ + void mqttCreateHassSensor(const String &name, const String &topic, + const String &deviceClass, const String &unitOfMeasurement, + const String &jsonKey, const String &SensorType) { + // Sanitize the name by replacing spaces with hyphens + String sanitizedName = name; + sanitizedName.replace(' ', '-'); + + String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); + + // Construct the Home Assistant configuration topic + String t = String(F("homeassistant/")) + SensorType + "/" + sanitizedMqttClientID + "/" + sanitizedName + F("/config"); + + // Create a JSON document for the sensor configuration + StaticJsonDocument<600> doc; + + // Populate the JSON document with sensor configuration details + doc[F("name")] = name; // Sensor name + doc[F("state_topic")] = topic; // Topic for sensor state + doc[F("unique_id")] = String(sanitizedMqttClientID) + "-" + sanitizedName; // Unique ID for the sensor + + // Template to extract specific value from JSON + doc[F("value_template")] = String("{{ value_json.") + jsonKey + String(" }}"); + if (unitOfMeasurement != "") + doc[F("unit_of_measurement")] = unitOfMeasurement; // Optional unit of measurement + if (deviceClass != "") + doc[F("device_class")] = deviceClass; // Optional device class + if (SensorType != "binary_sensor") + doc[F("expire_after")] = 1800; // Expiration time for non-binary sensors + + // Device details nested object + JsonObject device = doc.createNestedObject(F("device")); + device[F("name")] = serverDescription; // Server description as device name + device[F("identifiers")] = "wled-sensor-" + String(sanitizedMqttClientID); // Unique identifier for the device + device[F("manufacturer")] = F(WLED_BRAND); // Manufacturer name + device[F("model")] = F(WLED_PRODUCT_NAME); // Product model name + device[F("sw_version")] = versionString; // Software version + + // Serialize the JSON document into a temporary string + String temp; + serializeJson(doc, temp); + + // Debug output for the Home Assistant topic and configuration + DEBUG_PRINTLN(t); + DEBUG_PRINTLN(temp); + + // Publish the sensor configuration to Home Assistant + mqtt->publish(t.c_str(), 0, true, temp.c_str()); + } + + void mqttRemoveHassSensor(const String &name, const String &SensorType) { + char sensorTopic[128]; + snprintf_P(sensorTopic, 127, "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizeMqttClientID(mqttClientID).c_str(), name.c_str()); // Discovery config topic for each sensor + + // Publish an empty message with retain to delete the sensor from Home Assistant + mqtt->publish(sensorTopic, 0, true, ""); + } + + // Function to sanitize the mqttClientID with nicer replacements + String sanitizeMqttClientID(const String &clientID) { + String sanitizedID; + + // Loop through the string + for (unsigned int i = 0; i < clientID.length(); i++) { + char c = clientID[i]; // Get the character directly + + // Handle specific cases for accented letters using byte values + if (c == '\xC3' && i + 1 < clientID.length()) { + if (clientID[i + 1] == '\xBC') { // ü + //sanitizedID += "ue"; // Replace ü with ue + sanitizedID += "u"; // Replace ü with ue + i++; // Skip the next byte + } else if (clientID[i + 1] == '\x9C') { // Ü + //sanitizedID += "Ue"; // Replace Ü with Ue + sanitizedID += "U"; // Replace Ü with Ue + i++; // Skip the next byte + } else if (clientID[i + 1] == '\xA4') { // ä + //sanitizedID += "ae"; // Replace ä with ae + sanitizedID += "a"; // Replace ä with ae + i++; // Skip the next byte + } else if (clientID[i + 1] == '\xC4') { // Ä + //sanitizedID += "Ae"; // Replace Ä with Ae + sanitizedID += "A"; // Replace Ä with Ae + i++; // Skip the next byte + } else if (clientID[i + 1] == '\xB6') { // ö + //sanitizedID += "oe"; // Replace ö with oe + sanitizedID += "o"; // Replace ö with oe + i++; // Skip the next byte + } else if (clientID[i + 1] == '\xD6') { // Ö + //sanitizedID += "Oe"; // Replace Ö with Oe + sanitizedID += "O"; // Replace Ö with Oe + i++; // Skip the next byte + } else if (clientID[i + 1] == '\x9F') { // ß + //sanitizedID += "ss"; // Replace ß with ss + sanitizedID += "s"; // Replace ß with ss + i++; // Skip the next byte + } + } + // Allow valid characters [a-zA-Z0-9_-] + else if ((c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + c == '-' || c == '_') { + sanitizedID += c; // Directly append valid characters + } + // Replace any other invalid character with an underscore + else { + sanitizedID += '_'; // Replace invalid character with underscore + } + } + return sanitizedID; // Return the sanitized client ID + } + + /** + * Function to update energy calculations based on power and duration + */ + void updateEnergy(float power, unsigned long durationMs) { + // Convert duration from milliseconds to hours + float durationHours = durationMs / 3600000.0; + + // Convert power from watts to kilowatt-hours (kWh) + float energy_kWh = (power / 1000.0) * durationHours; + + // Update total energy consumed + totalEnergy_kWh += energy_kWh; + + // Update daily energy consumption + if (dailyResetTime >= 86400) { // 86400 seconds = 24 hours + dailyEnergy_kWh = 0; // Reset daily energy to zero + dailyResetTime = 0; // Reset daily reset time to zero + } + dailyEnergy_kWh += energy_kWh; // Add to daily energy + dailyResetTime += durationMs / 1000; // Increment daily reset time in seconds + + // Update monthly energy consumption + if (monthlyResetTime >= 2592000) { // 2592000 seconds = 30 days + monthlyEnergy_kWh = 0; // Reset monthly energy to zero + monthlyResetTime = 0; // Reset monthly reset time to zero + } + monthlyEnergy_kWh += energy_kWh; // Add to monthly energy + monthlyResetTime += durationMs / 1000; // Increment monthly reset time in seconds + } + + /** + * Function to add energy consumption data to a JSON object for reporting + */ + void addToJsonInfo(JsonObject &root) { + JsonObject user = root[F("u")]; + if (user.isNull()) { + user = root.createNestedObject(F("u")); // Create a nested object for user data + } + + // Create a nested array for energy data + JsonArray energy_json = user.createNestedArray(F("Energy Consumption")); + + if (!enabled) { + energy_json.add(F("disabled")); // Indicate that the module is disabled + } else { + // Create a nested array for total energy + JsonArray totalEnergy_json = user.createNestedArray(F("Total Energy")); + totalEnergy_json.add(totalEnergy_kWh); // Add total energy in kWh + totalEnergy_json.add(F("kWh")); // Add unit of measurement + + // Create a nested array for daily energy + JsonArray dailyEnergy_json = user.createNestedArray(F("Daily Energy")); + dailyEnergy_json.add(dailyEnergy_kWh); // Add daily energy in kWh + dailyEnergy_json.add(F("kWh")); // Add unit of measurement + + // Create a nested array for monthly energy + JsonArray monthlyEnergy_json = user.createNestedArray(F("Monthly Energy")); + monthlyEnergy_json.add(monthlyEnergy_kWh); // Add monthly energy in kWh + monthlyEnergy_json.add(F("kWh")); // Add unit of measurement + } + } + + /** + * Function to add the current state of energy consumption to a JSON object + */ + void addToJsonState(JsonObject& root) override { + if (!initDone) return; // Prevent crashes on boot if initialization is not done + + JsonObject usermod = root[FPSTR(_name)]; + if (usermod.isNull()) { + usermod = root.createNestedObject(FPSTR(_name)); // Create nested object for the usermod + } + + // Add energy consumption data to the usermod JSON object + usermod["totalEnergy_kWh"] = totalEnergy_kWh; + usermod["dailyEnergy_kWh"] = dailyEnergy_kWh; + usermod["monthlyEnergy_kWh"] = monthlyEnergy_kWh; + usermod["dailyResetTime"] = dailyResetTime; + usermod["monthlyResetTime"] = monthlyResetTime; + } + + /** + * Function to read energy consumption data from a JSON object + */ + void readFromJsonState(JsonObject& root) override { + if (!initDone) return; // Prevent crashes on boot if initialization is not done + + JsonObject usermod = root[FPSTR(_name)]; + if (!usermod.isNull()) { + // Read values from JSON or retain existing values if not present + totalEnergy_kWh = usermod["totalEnergy_kWh"] | totalEnergy_kWh; + dailyEnergy_kWh = usermod["dailyEnergy_kWh"] | dailyEnergy_kWh; + monthlyEnergy_kWh = usermod["monthlyEnergy_kWh"] | monthlyEnergy_kWh; + dailyResetTime = usermod["dailyResetTime"] | dailyResetTime; + monthlyResetTime = usermod["monthlyResetTime"] | monthlyResetTime; + } + } + + /** + * Function to handle settings in the Usermod menu + */ + void addToConfig(JsonObject& root) override { + JsonObject top = root.createNestedObject(F("INA219")); // Create nested object for INA219 settings + top["Enabled"] = enabled; // Store enabled status + top["sda_pin"] = _sdaPin; // Store selected SDA pin + top["scl_pin"] = _sclPin; // Store selected SCL pin + top["i2c_address"] = static_cast(_i2cAddress); // Store I2C address + top["check_interval"] = checkInterval / 1000; // Store check interval in seconds + top["conversion_time"] = conversionTime; // Store conversion time + top["decimals"] = _decimalFactor; // Store decimal factor + top["shunt_resistor"] = shuntResistor; // Store shunt resistor value + + #ifndef WLED_DISABLE_MQTT + // Store MQTT settings if MQTT is not disabled + top["mqtt_publish"] = mqttPublish; + top["mqtt_publish_always"] = mqttPublishAlways; + top["ha_discovery"] = haDiscovery; + #endif + } + + /** + * Function to append configuration options to the Usermod menu + */ + void appendConfigData() override { + // Append the dropdown for I2C address selection + oappend(F("dd=addDropdown('INA219','i2c_address');")); + oappend(F("addOption(dd,'0x40 - Default',0x40, true);")); // Default option + oappend(F("addOption(dd,'0x41 - A0 soldered',0x41);")); + oappend(F("addOption(dd,'0x44 - A1 soldered',0x44);")); + oappend(F("addOption(dd,'0x45 - A0 and A1 soldered',0x45);")); + + // Append the dropdown for ADC mode (resolution + samples) + oappend(F("ct=addDropdown('INA219','conversion_time');")); + oappend("addOption(ct,'9-Bit (84 µs)',0);"); + oappend("addOption(ct,'10-Bit (148 µs)',1);"); + oappend("addOption(ct,'11-Bit (276 µs)',2);"); + oappend("addOption(ct,'12-Bit (532 µs)',3, true);"); // Default option + oappend("addOption(ct,'2 samples (1.06 ms)',9);"); + oappend("addOption(ct,'4 samples (2.13 ms)',10);"); + oappend("addOption(ct,'8 samples (4.26 ms)',11);"); + oappend("addOption(ct,'16 samples (8.51 ms)',12);"); + oappend("addOption(ct,'32 samples (17.02 ms)',13);"); + oappend("addOption(ct,'64 samples (34.05 ms)',14);"); + oappend("addOption(ct,'128 samples (68.10 ms)',15);"); + + // Append the dropdown for decimal precision (0 to 10) + oappend(F("df=addDropdown('INA219','decimals');")); + for (int i = 0; i <= 3; i++) { + oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); // Default to 2 decimals + } + } + + /** + * Function to read settings from the Usermod menu configuration + */ + bool readFromConfig(JsonObject& root) override { + JsonObject top = root[FPSTR(_name)]; + + bool configComplete = !top.isNull(); // Check if the configuration exists + + // Read configuration values and update local variables + configComplete &= getJsonValue(top["Enabled"], enabled); + configComplete &= getJsonValue(top["sda_pin"], _sdaPin); // Read selected SDA pin + configComplete &= getJsonValue(top["scl_pin"], _sclPin); // Read selected SCL pin + configComplete &= getJsonValue(top[F("i2c_address")], _i2cAddress); + + // Read check interval and convert to milliseconds if necessary + if (getJsonValue(top[F("check_interval")], checkInterval)) { + if (1 <= checkInterval && checkInterval <= 600) + checkInterval *= 1000; // Convert seconds to milliseconds + else + checkInterval = _checkInterval * 1000; // Fallback to defined value + } else { + configComplete = false; // Configuration is incomplete + } + + // Read other configuration values + configComplete &= getJsonValue(top["conversion_time"], conversionTime); + configComplete &= getJsonValue(top["decimals"], _decimalFactor); + configComplete &= getJsonValue(top["shunt_resistor"], shuntResistor); + + #ifndef WLED_DISABLE_MQTT + configComplete &= getJsonValue(top["mqtt_publish"], mqttPublish); + configComplete &= getJsonValue(top["mqtt_publish_always"], mqttPublishAlways); + configComplete &= getJsonValue(top["ha_discovery"], haDiscovery); + #endif + + updateINA219Settings(); // Apply any updated settings to the INA219 + + return configComplete; // Return whether the configuration was complete + } + + /** + * Function to get the unique identifier for this usermod + */ + uint16_t getId() override { + return USERMOD_ID_INA219; // Return the unique identifier for the INA219 usermod + } +}; + +const char UsermodINA219::_name[] PROGMEM = "INA219"; From 9e4852d26634af8e7dc2ddb02250ae2c4cca9151 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 31 Oct 2024 22:23:32 +0100 Subject: [PATCH 04/70] Update usermod_ina219.h --- usermods/INA219/usermod_ina219.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index 444c3bc716..113922d480 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -119,9 +119,9 @@ class UsermodINA219 : public Usermod { float last_sent_power_mW = 0; bool last_sent_overflow = false; - float totalEnergy_kWh = 0.0; // Total energy in kWh float dailyEnergy_kWh = 0.0; // Daily energy in kWh float monthlyEnergy_kWh = 0.0; // Monthly energy in kWh + float totalEnergy_kWh = 0.0; // Total energy in kWh unsigned long lastPublishTime = 0; // Track the last publish time // Variables to store last reset timestamps @@ -255,9 +255,9 @@ class UsermodINA219 : public Usermod { mqttCreateHassSensor(F("Shunt Voltage"), topic, F("voltage"), F("mV"), F("shunt_voltage_mV"), F("sensor")); mqttCreateHassSensor(F("Shunt Resistor"), topic, F(""), F("Ω"), F("shunt_resistor_Ohms"), F("sensor")); mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("binary_sensor")); - mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); mqttCreateHassSensor(F("Daily Energy"), topic, F("energy"), F("kWh"), F("daily_energy_kWh"), F("sensor")); mqttCreateHassSensor(F("Monthly Energy"), topic, F("energy"), F("kWh"), F("monthly_energy_kWh"), F("sensor")); + mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); // Mark as sent to avoid repeating haDiscoverySent = true; @@ -267,9 +267,9 @@ class UsermodINA219 : public Usermod { mqttRemoveHassSensor(F("Voltage"), F("sensor")); mqttRemoveHassSensor(F("Power"), F("sensor")); mqttRemoveHassSensor(F("Shunt-Voltage"), F("sensor")); - mqttRemoveHassSensor(F("Total-Energy"), F("sensor")); mqttRemoveHassSensor(F("Daily-Energy"), F("sensor")); mqttRemoveHassSensor(F("Monthly-Energy"), F("sensor")); + mqttRemoveHassSensor(F("Total-Energy"), F("sensor")); mqttRemoveHassSensor(F("Shunt-Resistor"), F("sensor")); mqttRemoveHassSensor(F("Overflow"), F("binary_sensor")); @@ -313,9 +313,9 @@ class UsermodINA219 : public Usermod { } // Update the energy values - totalEnergy_kWh = jsonDoc["total_energy_kWh"]; dailyEnergy_kWh = jsonDoc["daily_energy_kWh"]; monthlyEnergy_kWh = jsonDoc["monthly_energy_kWh"]; + totalEnergy_kWh = jsonDoc["total_energy_kWh"]; dailyResetTime = jsonDoc["dailyResetTime"]; monthlyResetTime = jsonDoc["monthlyResetTime"]; @@ -363,9 +363,9 @@ class UsermodINA219 : public Usermod { jsonDoc["shunt_resistor_Ohms"] = shuntResistor; // Shunt resistor value in Ohms // Energy calculations - jsonDoc["total_energy_kWh"] = totalEnergy_kWh; // Total energy in kilowatt-hours jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; // Daily energy in kilowatt-hours jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; // Monthly energy in kilowatt-hours + jsonDoc["total_energy_kWh"] = totalEnergy_kWh; // Total energy in kilowatt-hours // Reset timestamps jsonDoc["dailyResetTime"] = dailyResetTime; // Timestamp of the last daily reset @@ -543,12 +543,7 @@ class UsermodINA219 : public Usermod { if (!enabled) { energy_json.add(F("disabled")); // Indicate that the module is disabled - } else { - // Create a nested array for total energy - JsonArray totalEnergy_json = user.createNestedArray(F("Total Energy")); - totalEnergy_json.add(totalEnergy_kWh); // Add total energy in kWh - totalEnergy_json.add(F("kWh")); // Add unit of measurement - + } else { // Create a nested array for daily energy JsonArray dailyEnergy_json = user.createNestedArray(F("Daily Energy")); dailyEnergy_json.add(dailyEnergy_kWh); // Add daily energy in kWh @@ -558,6 +553,11 @@ class UsermodINA219 : public Usermod { JsonArray monthlyEnergy_json = user.createNestedArray(F("Monthly Energy")); monthlyEnergy_json.add(monthlyEnergy_kWh); // Add monthly energy in kWh monthlyEnergy_json.add(F("kWh")); // Add unit of measurement + + // Create a nested array for total energy + JsonArray totalEnergy_json = user.createNestedArray(F("Total Energy")); + totalEnergy_json.add(totalEnergy_kWh); // Add total energy in kWh + totalEnergy_json.add(F("kWh")); // Add unit of measurement } } From 378358cda4ba895ee38526fa161a3ae04b941529 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 1 Nov 2024 19:13:56 +0100 Subject: [PATCH 05/70] Update usermod_ina219.h Formatting --- usermods/INA219/usermod_ina219.h | 52 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index 113922d480..b441d6281a 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -14,89 +14,89 @@ class UsermodINA219 : public Usermod { // Configurable settings for the INA219 Usermod // Enabled setting #ifdef INA219_ENABLED - bool enabled = INA219_ENABLED; + bool enabled = INA219_ENABLED; #else - bool enabled = false; // Default disabled value + bool enabled = false; // Default disabled value #endif // I2C Address (default is 0x40 if not defined) #ifdef INA219_I2C_ADDRESS - uint8_t _i2cAddress = INA219_I2C_ADDRESS; + uint8_t _i2cAddress = INA219_I2C_ADDRESS; #else - uint8_t _i2cAddress = 0x40; // Default I2C address + uint8_t _i2cAddress = 0x40; // Default I2C address #endif // Check Interval (in seconds) #ifdef INA219_CHECK_INTERVAL - uint16_t _checkInterval = INA219_CHECK_INTERVAL; - uint16_t checkInterval = _checkInterval * 1000; // Convert to milliseconds + uint16_t _checkInterval = INA219_CHECK_INTERVAL; + uint16_t checkInterval = _checkInterval * 1000; // Convert to milliseconds #else - uint16_t _checkInterval = 5; // Default 5 seconds - uint16_t checkInterval = _checkInterval * 1000; // Default 5 seconds + uint16_t _checkInterval = 5; // Default 5 seconds + uint16_t checkInterval = _checkInterval * 1000; // Default 5 seconds #endif // Conversion Time #ifdef INA219_CONVERSION_TIME - INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); // Cast from int if defined + INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); // Cast from int if defined #else - INA219_ADC_MODE conversionTime = BIT_MODE_12; // Default 12-bit resolution + INA219_ADC_MODE conversionTime = BIT_MODE_12; // Default 12-bit resolution #endif // Decimal factor for current/power readings #ifdef INA219_DECIMAL_FACTOR - uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; + uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; #else - uint8_t _decimalFactor = 3; // Default 3 decimal places + uint8_t _decimalFactor = 3; // Default 3 decimal places #endif // Shunt Resistor value #ifdef INA219_SHUNT_RESISTOR - float shuntResistor = INA219_SHUNT_RESISTOR; + float shuntResistor = INA219_SHUNT_RESISTOR; #else - float shuntResistor = 0.1; // Default 0.1 ohms + float shuntResistor = 0.1; // Default 0.1 ohms #endif // Correction factor #ifdef INA219_CORRECTION_FACTOR - float correctionFactor = INA219_CORRECTION_FACTOR; + float correctionFactor = INA219_CORRECTION_FACTOR; #else - float correctionFactor = 1.0; // Default correction factor + float correctionFactor = 1.0; // Default correction factor #endif // MQTT Publish Settings #ifdef INA219_MQTT_PUBLISH - bool mqttPublish = INA219_MQTT_PUBLISH; + bool mqttPublish = INA219_MQTT_PUBLISH; bool mqttPublishSent = !INA219_MQTT_PUBLISH; #else - bool mqttPublish = false; // Default: false (do not publish to MQTT) + bool mqttPublish = false; // Default: false (do not publish to MQTT) bool mqttPublishSent = true; #endif #ifdef INA219_MQTT_PUBLISH_ALWAYS - bool mqttPublishAlways = INA219_MQTT_PUBLISH_ALWAYS; + bool mqttPublishAlways = INA219_MQTT_PUBLISH_ALWAYS; #else - bool mqttPublishAlways = false; // Default: false (only publish changes) + bool mqttPublishAlways = false; // Default: false (only publish changes) #endif #ifdef INA219_HA_DISCOVERY - bool haDiscovery = INA219_HA_DISCOVERY; + bool haDiscovery = INA219_HA_DISCOVERY; bool haDiscoverySent = !INA219_HA_DISCOVERY; #else - bool haDiscovery = false; // Default: false (Home Assistant discovery disabled) + bool haDiscovery = false; // Default: false (Home Assistant discovery disabled) bool haDiscoverySent = true; #endif // I2C SDA and SCL pins (default SDA = 8, SCL = 9 if not defined) #ifdef INA219_SDA_PIN - uint8_t _sdaPin = INA219_SDA_PIN; + uint8_t _sdaPin = INA219_SDA_PIN; #else - uint8_t _sdaPin = 8; // Default SDA pin + uint8_t _sdaPin = 8; // Default SDA pin #endif #ifdef INA219_SCL_PIN - uint8_t _sclPin = INA219_SCL_PIN; + uint8_t _sclPin = INA219_SCL_PIN; #else - uint8_t _sclPin = 9; // Default SCL pin + uint8_t _sclPin = 9; // Default SCL pin #endif // Variables to store sensor readings From 10b25f295c72e5dec4e3475ef90ada695eef35a1 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 15 Nov 2024 01:50:01 +0100 Subject: [PATCH 06/70] Update usermod_ina219.h changed uint8_t to int8_t for _sdaPin and _sclPin ---> to be able to pick "unused" in pin selection which is -1, --- usermods/INA219/usermod_ina219.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index b441d6281a..2b525e820d 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -88,15 +88,15 @@ class UsermodINA219 : public Usermod { // I2C SDA and SCL pins (default SDA = 8, SCL = 9 if not defined) #ifdef INA219_SDA_PIN - uint8_t _sdaPin = INA219_SDA_PIN; + int8_t _sdaPin = INA219_SDA_PIN; #else - uint8_t _sdaPin = 8; // Default SDA pin + int8_t _sdaPin = 8; // Default SDA pin #endif #ifdef INA219_SCL_PIN - uint8_t _sclPin = INA219_SCL_PIN; + int8_t _sclPin = INA219_SCL_PIN; #else - uint8_t _sclPin = 9; // Default SCL pin + int8_t _sclPin = 9; // Default SCL pin #endif // Variables to store sensor readings From 42274ef3861cb882fbff1f8ba7e78791f35cd308 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Mon, 16 Dec 2024 00:35:10 +0100 Subject: [PATCH 07/70] Update usermod_ina219.h Several optimizations for WLED_MQTT_CONNECTED and if Usermod is enabled/disabled --- usermods/INA219/usermod_ina219.h | 267 +++++++++++++++++-------------- 1 file changed, 143 insertions(+), 124 deletions(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index 2b525e820d..33fa8bf098 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -219,62 +219,70 @@ class UsermodINA219 : public Usermod { #ifndef WLED_DISABLE_MQTT // Publish to MQTT if enabled - if (mqttPublish) { - if (mqttPublishAlways || hasValueChanged()) { - publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); + if (WLED_MQTT_CONNECTED) { + if (mqttPublish) { + if (mqttPublishAlways || hasValueChanged()) { + publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); + + last_sent_shuntVoltage = shuntVoltage; + last_sent_busVoltage = busVoltage; + last_sent_loadVoltage = loadVoltage; + last_sent_current = current; + last_sent_current_mA = current_mA; + last_sent_power = power; + last_sent_power_mW = power_mW; + last_sent_overflow = overflow; + + mqttPublishSent = true; + } + } else if (!mqttPublish && mqttPublishSent) { + char sensorTopic[128]; + snprintf_P(sensorTopic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Discovery config topic for each sensor + + // Publish an empty message with retain to delete the sensor from Home Assistant + mqtt->publish(sensorTopic, 0, true, ""); - last_sent_shuntVoltage = shuntVoltage; - last_sent_busVoltage = busVoltage; - last_sent_loadVoltage = loadVoltage; - last_sent_current = current; - last_sent_current_mA = current_mA; - last_sent_power = power; - last_sent_power_mW = power_mW; - last_sent_overflow = overflow; - - mqttPublishSent = true; + mqttPublishSent = false; } - } else if (!mqttPublish && mqttPublishSent) { - char sensorTopic[128]; - snprintf_P(sensorTopic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Discovery config topic for each sensor - - // Publish an empty message with retain to delete the sensor from Home Assistant - mqtt->publish(sensorTopic, 0, true, ""); - - mqttPublishSent = false; } // Optionally publish to Home Assistant via MQTT discovery if (haDiscovery && !haDiscoverySent) { - char topic[128]; - snprintf_P(topic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Common topic for all INA219 data - - mqttCreateHassSensor(F("Current"), topic, F("current"), F("A"), F("current"), F("sensor")); - mqttCreateHassSensor(F("Voltage"), topic, F("voltage"), F("V"), F("bus_voltage_V"), F("sensor")); - mqttCreateHassSensor(F("Power"), topic, F("power"), F("W"), F("power"), F("sensor")); - mqttCreateHassSensor(F("Shunt Voltage"), topic, F("voltage"), F("mV"), F("shunt_voltage_mV"), F("sensor")); - mqttCreateHassSensor(F("Shunt Resistor"), topic, F(""), F("Ω"), F("shunt_resistor_Ohms"), F("sensor")); - mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("binary_sensor")); - mqttCreateHassSensor(F("Daily Energy"), topic, F("energy"), F("kWh"), F("daily_energy_kWh"), F("sensor")); - mqttCreateHassSensor(F("Monthly Energy"), topic, F("energy"), F("kWh"), F("monthly_energy_kWh"), F("sensor")); - mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); - - // Mark as sent to avoid repeating - haDiscoverySent = true; + if (WLED_MQTT_CONNECTED) { + char topic[128]; + snprintf_P(topic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Common topic for all INA219 data + + mqttCreateHassSensor(F("Current"), topic, F("current"), F("A"), F("current"), F("sensor")); + mqttCreateHassSensor(F("Voltage"), topic, F("voltage"), F("V"), F("bus_voltage_V"), F("sensor")); + mqttCreateHassSensor(F("Power"), topic, F("power"), F("W"), F("power"), F("sensor")); + mqttCreateHassSensor(F("Shunt Voltage"), topic, F("voltage"), F("mV"), F("shunt_voltage_mV"), F("sensor")); + mqttCreateHassSensor(F("Shunt Resistor"), topic, F(""), F("Ω"), F("shunt_resistor_Ohms"), F("sensor")); + //mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("binary_sensor")); //Binary Sensor does not show value in Home Assistant, so switching to sensor + mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("sensor")); + mqttCreateHassSensor(F("Daily Energy"), topic, F("energy"), F("kWh"), F("daily_energy_kWh"), F("sensor")); + mqttCreateHassSensor(F("Monthly Energy"), topic, F("energy"), F("kWh"), F("monthly_energy_kWh"), F("sensor")); + mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); + + // Mark as sent to avoid repeating + haDiscoverySent = true; + } } else if (!haDiscovery && haDiscoverySent) { - // Remove previously created sensors - mqttRemoveHassSensor(F("Current"), F("sensor")); - mqttRemoveHassSensor(F("Voltage"), F("sensor")); - mqttRemoveHassSensor(F("Power"), F("sensor")); - mqttRemoveHassSensor(F("Shunt-Voltage"), F("sensor")); - mqttRemoveHassSensor(F("Daily-Energy"), F("sensor")); - mqttRemoveHassSensor(F("Monthly-Energy"), F("sensor")); - mqttRemoveHassSensor(F("Total-Energy"), F("sensor")); - mqttRemoveHassSensor(F("Shunt-Resistor"), F("sensor")); - mqttRemoveHassSensor(F("Overflow"), F("binary_sensor")); - - // Mark as sent to avoid repeating - haDiscoverySent = false; + if (WLED_MQTT_CONNECTED) { + // Remove previously created sensors + mqttRemoveHassSensor(F("Current"), F("sensor")); + mqttRemoveHassSensor(F("Voltage"), F("sensor")); + mqttRemoveHassSensor(F("Power"), F("sensor")); + mqttRemoveHassSensor(F("Shunt-Voltage"), F("sensor")); + mqttRemoveHassSensor(F("Daily-Energy"), F("sensor")); + mqttRemoveHassSensor(F("Monthly-Energy"), F("sensor")); + mqttRemoveHassSensor(F("Total-Energy"), F("sensor")); + mqttRemoveHassSensor(F("Shunt-Resistor"), F("sensor")); + //mqttRemoveHassSensor(F("Overflow"), F("binary_sensor")); + mqttRemoveHassSensor(F("Overflow"), F("sensor")); + + // Mark as sent to avoid repeating + haDiscoverySent = false; + } } #endif } @@ -300,28 +308,28 @@ class UsermodINA219 : public Usermod { * Function to publish sensor data to MQTT */ bool onMqttMessage(char* topic, char* payload) override { - // Check if the message is for the correct topic - if (strcmp_P(topic, PSTR("/sensor/ina219")) == 0) { - StaticJsonDocument<512> jsonDoc; - - // Parse the JSON payload - DeserializationError error = deserializeJson(jsonDoc, payload); - if (error) { - Serial.print(F("deserializeJson() failed: ")); - Serial.println(error.f_str()); - return false; - } - - // Update the energy values - dailyEnergy_kWh = jsonDoc["daily_energy_kWh"]; - monthlyEnergy_kWh = jsonDoc["monthly_energy_kWh"]; - totalEnergy_kWh = jsonDoc["total_energy_kWh"]; - dailyResetTime = jsonDoc["dailyResetTime"]; - monthlyResetTime = jsonDoc["monthlyResetTime"]; - - return true; - } - + if (!WLED_MQTT_CONNECTED) return false; + if (enabled) { + // Check if the message is for the correct topic + if (strcmp_P(topic, PSTR("/sensor/ina219")) == 0) { + StaticJsonDocument<512> jsonDoc; + + // Parse the JSON payload + DeserializationError error = deserializeJson(jsonDoc, payload); + if (error) { + return false; + } + + // Update the energy values + dailyEnergy_kWh = jsonDoc["daily_energy_kWh"]; + monthlyEnergy_kWh = jsonDoc["monthly_energy_kWh"]; + totalEnergy_kWh = jsonDoc["total_energy_kWh"]; + dailyResetTime = jsonDoc["dailyResetTime"]; + monthlyResetTime = jsonDoc["monthlyResetTime"]; + + return true; + } + } return false; } @@ -329,12 +337,15 @@ class UsermodINA219 : public Usermod { * Subscribe to MQTT topic for controlling usermod */ void onMqttConnect(bool sessionPresent) override { - char subuf[64]; - if (mqttDeviceTopic[0] != 0) { - strcpy(subuf, mqttDeviceTopic); - strcat_P(subuf, PSTR("/sensor/ina219")); - mqtt->subscribe(subuf, 0); - } + if (!enabled) return; + if (WLED_MQTT_CONNECTED) { + char subuf[64]; + if (mqttDeviceTopic[0] != 0) { + strcpy(subuf, mqttDeviceTopic); + strcat_P(subuf, PSTR("/sensor/ina219")); + mqtt->subscribe(subuf, 0); + } + } } #endif @@ -347,40 +358,43 @@ class UsermodINA219 : public Usermod { // Publish to MQTT only if the WLED MQTT feature is enabled #ifndef WLED_DISABLE_MQTT - // Create a JSON document to hold sensor data - StaticJsonDocument<512> jsonDoc; - - // Populate the JSON document with sensor readings - jsonDoc["shunt_voltage_mV"] = shuntVoltage; // Shunt voltage in millivolts - jsonDoc["bus_voltage_V"] = busVoltage; // Bus voltage in volts - jsonDoc["load_voltage_V"] = loadVoltage; // Load voltage in volts - jsonDoc["current"] = current; // Current in unspecified units - jsonDoc["current_mA"] = current_mA; // Current in milliamperes - jsonDoc["power"] = power; // Power in unspecified units - jsonDoc["power_mW"] = power_mW; // Power in milliwatts - jsonDoc["overflow"] = overflow; // Overflow status (true/false) - //jsonDoc["overflow"] = overflow ? "on" : "off"; - jsonDoc["shunt_resistor_Ohms"] = shuntResistor; // Shunt resistor value in Ohms - - // Energy calculations - jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; // Daily energy in kilowatt-hours - jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; // Monthly energy in kilowatt-hours - jsonDoc["total_energy_kWh"] = totalEnergy_kWh; // Total energy in kilowatt-hours - - // Reset timestamps - jsonDoc["dailyResetTime"] = dailyResetTime; // Timestamp of the last daily reset - jsonDoc["monthlyResetTime"] = monthlyResetTime; // Timestamp of the last monthly reset - - // Serialize the JSON document into a character buffer - char buffer[512]; - serializeJson(jsonDoc, buffer); - - // Construct the MQTT topic using the device topic - char topic[128]; - snprintf_P(topic, sizeof(topic), "%s/sensor/ina219", mqttDeviceTopic); - - // Publish the serialized JSON data to the specified MQTT topic - mqtt->publish(topic, 0, true, buffer); + if (WLED_MQTT_CONNECTED) { + // Create a JSON document to hold sensor data + StaticJsonDocument<1024> jsonDoc; + + // Populate the JSON document with sensor readings + jsonDoc["shunt_voltage_mV"] = shuntVoltage; // Shunt voltage in millivolts + jsonDoc["bus_voltage_V"] = busVoltage; // Bus voltage in volts + jsonDoc["load_voltage_V"] = loadVoltage; // Load voltage in volts + jsonDoc["current"] = current; // Current in unspecified units + jsonDoc["current_mA"] = current_mA; // Current in milliamperes + jsonDoc["power"] = power; // Power in unspecified units + jsonDoc["power_mW"] = power_mW; // Power in milliwatts + jsonDoc["overflow"] = overflow; // Overflow status (true/false) + //jsonDoc["overflow"] = overflow ? "on" : "off"; + jsonDoc["shunt_resistor_Ohms"] = shuntResistor; // Shunt resistor value in Ohms + + // Energy calculations + jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; // Daily energy in kilowatt-hours + jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; // Monthly energy in kilowatt-hours + jsonDoc["total_energy_kWh"] = totalEnergy_kWh; // Total energy in kilowatt-hours + + // Reset timestamps + jsonDoc["dailyResetTime"] = dailyResetTime; // Timestamp of the last daily reset + jsonDoc["monthlyResetTime"] = monthlyResetTime; // Timestamp of the last monthly reset + + // Serialize the JSON document into a character buffer + char buffer[1024]; + size_t payload_size; + payload_size = serializeJson(jsonDoc, buffer); + + // Construct the MQTT topic using the device topic + char topic[128]; + snprintf_P(topic, sizeof(topic), "%s/sensor/ina219", mqttDeviceTopic); + + // Publish the serialized JSON data to the specified MQTT topic + mqtt->publish(topic, 0, true, buffer, payload_size); + } #endif } @@ -396,11 +410,8 @@ class UsermodINA219 : public Usermod { String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); - // Construct the Home Assistant configuration topic - String t = String(F("homeassistant/")) + SensorType + "/" + sanitizedMqttClientID + "/" + sanitizedName + F("/config"); - // Create a JSON document for the sensor configuration - StaticJsonDocument<600> doc; + StaticJsonDocument<1024> doc; // Populate the JSON document with sensor configuration details doc[F("name")] = name; // Sensor name @@ -425,15 +436,19 @@ class UsermodINA219 : public Usermod { device[F("sw_version")] = versionString; // Software version // Serialize the JSON document into a temporary string - String temp; - serializeJson(doc, temp); + char buffer[1024]; + size_t payload_size; + payload_size = serializeJson(doc, buffer); + + char topic_S[128]; + snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType, sanitizedMqttClientID, sanitizedName); // Debug output for the Home Assistant topic and configuration - DEBUG_PRINTLN(t); - DEBUG_PRINTLN(temp); + DEBUG_PRINTLN(topic_S); + DEBUG_PRINTLN(buffer); // Publish the sensor configuration to Home Assistant - mqtt->publish(t.c_str(), 0, true, temp.c_str()); + mqtt->publish(topic_S, 0, true, buffer, payload_size); } void mqttRemoveHassSensor(const String &name, const String &SensorType) { @@ -539,7 +554,9 @@ class UsermodINA219 : public Usermod { } // Create a nested array for energy data - JsonArray energy_json = user.createNestedArray(F("Energy Consumption")); + JsonArray energy_json_seperator = user.createNestedArray(F("------------------------------------")); + + JsonArray energy_json = user.createNestedArray(F("Energy Consumption:")); if (!enabled) { energy_json.add(F("disabled")); // Indicate that the module is disabled @@ -547,17 +564,17 @@ class UsermodINA219 : public Usermod { // Create a nested array for daily energy JsonArray dailyEnergy_json = user.createNestedArray(F("Daily Energy")); dailyEnergy_json.add(dailyEnergy_kWh); // Add daily energy in kWh - dailyEnergy_json.add(F("kWh")); // Add unit of measurement + dailyEnergy_json.add(F(" kWh")); // Add unit of measurement // Create a nested array for monthly energy JsonArray monthlyEnergy_json = user.createNestedArray(F("Monthly Energy")); monthlyEnergy_json.add(monthlyEnergy_kWh); // Add monthly energy in kWh - monthlyEnergy_json.add(F("kWh")); // Add unit of measurement + monthlyEnergy_json.add(F(" kWh")); // Add unit of measurement // Create a nested array for total energy JsonArray totalEnergy_json = user.createNestedArray(F("Total Energy")); totalEnergy_json.add(totalEnergy_kWh); // Add total energy in kWh - totalEnergy_json.add(F("kWh")); // Add unit of measurement + totalEnergy_json.add(F(" kWh")); // Add unit of measurement } } @@ -684,6 +701,8 @@ class UsermodINA219 : public Usermod { configComplete &= getJsonValue(top["mqtt_publish"], mqttPublish); configComplete &= getJsonValue(top["mqtt_publish_always"], mqttPublishAlways); configComplete &= getJsonValue(top["ha_discovery"], haDiscovery); + + haDiscoverySent = !haDiscovery; #endif updateINA219Settings(); // Apply any updated settings to the INA219 From ee9d04c1b2352be229d61a4b853ebb33014b0650 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Mon, 27 Jan 2025 22:18:29 +0100 Subject: [PATCH 08/70] Update usermods_list.cpp fixed endif to #endif --- wled00/usermods_list.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 7f3eae3d5d..6801f32499 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -493,5 +493,5 @@ void registerUsermods() #ifdef USERMOD_INA219 UsermodManager::add(new UsermodINA219()); - endif + #endif } From edabd43e0265a4907fde21409e50a1ecdb6c4e68 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Tue, 28 Jan 2025 17:51:38 +0100 Subject: [PATCH 09/70] indentation fix Part 1 --- usermods/INA219/usermod_ina219.h | 424 +++++++++++++++---------------- 1 file changed, 212 insertions(+), 212 deletions(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index 33fa8bf098..e5db52e2e6 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -6,224 +6,224 @@ class UsermodINA219 : public Usermod { private: - static const char _name[]; // Name of the usermod + static const char _name[]; // Name of the usermod - bool initDone = false; // Flag to check if initialization is complete - unsigned long lastCheck = 0; // Timestamp for the last check + bool initDone = false; // Flag to check if initialization is complete + unsigned long lastCheck = 0; // Timestamp for the last check - // Configurable settings for the INA219 Usermod + // Configurable settings for the INA219 Usermod // Enabled setting - #ifdef INA219_ENABLED - bool enabled = INA219_ENABLED; - #else - bool enabled = false; // Default disabled value - #endif - - // I2C Address (default is 0x40 if not defined) - #ifdef INA219_I2C_ADDRESS - uint8_t _i2cAddress = INA219_I2C_ADDRESS; - #else - uint8_t _i2cAddress = 0x40; // Default I2C address - #endif - - // Check Interval (in seconds) - #ifdef INA219_CHECK_INTERVAL - uint16_t _checkInterval = INA219_CHECK_INTERVAL; - uint16_t checkInterval = _checkInterval * 1000; // Convert to milliseconds - #else - uint16_t _checkInterval = 5; // Default 5 seconds - uint16_t checkInterval = _checkInterval * 1000; // Default 5 seconds - #endif - - // Conversion Time - #ifdef INA219_CONVERSION_TIME - INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); // Cast from int if defined - #else - INA219_ADC_MODE conversionTime = BIT_MODE_12; // Default 12-bit resolution - #endif - - // Decimal factor for current/power readings - #ifdef INA219_DECIMAL_FACTOR - uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; - #else - uint8_t _decimalFactor = 3; // Default 3 decimal places - #endif - - // Shunt Resistor value - #ifdef INA219_SHUNT_RESISTOR - float shuntResistor = INA219_SHUNT_RESISTOR; - #else - float shuntResistor = 0.1; // Default 0.1 ohms - #endif - - // Correction factor - #ifdef INA219_CORRECTION_FACTOR - float correctionFactor = INA219_CORRECTION_FACTOR; - #else - float correctionFactor = 1.0; // Default correction factor - #endif - - // MQTT Publish Settings - #ifdef INA219_MQTT_PUBLISH - bool mqttPublish = INA219_MQTT_PUBLISH; - bool mqttPublishSent = !INA219_MQTT_PUBLISH; - #else - bool mqttPublish = false; // Default: false (do not publish to MQTT) - bool mqttPublishSent = true; - #endif - - #ifdef INA219_MQTT_PUBLISH_ALWAYS - bool mqttPublishAlways = INA219_MQTT_PUBLISH_ALWAYS; - #else - bool mqttPublishAlways = false; // Default: false (only publish changes) - #endif - - #ifdef INA219_HA_DISCOVERY - bool haDiscovery = INA219_HA_DISCOVERY; - bool haDiscoverySent = !INA219_HA_DISCOVERY; - #else - bool haDiscovery = false; // Default: false (Home Assistant discovery disabled) - bool haDiscoverySent = true; - #endif - - // I2C SDA and SCL pins (default SDA = 8, SCL = 9 if not defined) - #ifdef INA219_SDA_PIN - int8_t _sdaPin = INA219_SDA_PIN; - #else - int8_t _sdaPin = 8; // Default SDA pin - #endif - - #ifdef INA219_SCL_PIN - int8_t _sclPin = INA219_SCL_PIN; - #else - int8_t _sclPin = 9; // Default SCL pin - #endif - - // Variables to store sensor readings - float busVoltage = 0; - float current = 0; - float current_mA = 0; - float power = 0; - float power_mW = 0; - float shuntVoltage = 0; - float loadVoltage = 0; - bool overflow = false; - + #ifdef INA219_ENABLED + bool enabled = INA219_ENABLED; + #else + bool enabled = false; // Default disabled value + #endif + + // I2C Address (default is 0x40 if not defined) + #ifdef INA219_I2C_ADDRESS + uint8_t _i2cAddress = INA219_I2C_ADDRESS; + #else + uint8_t _i2cAddress = 0x40; // Default I2C address + #endif + + // Check Interval (in seconds) + #ifdef INA219_CHECK_INTERVAL + uint16_t _checkInterval = INA219_CHECK_INTERVAL; + uint16_t checkInterval = _checkInterval * 1000; // Convert to milliseconds + #else + uint16_t _checkInterval = 5; // Default 5 seconds + uint16_t checkInterval = _checkInterval * 1000; // Default 5 seconds + #endif + + // Conversion Time + #ifdef INA219_CONVERSION_TIME + INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); // Cast from int if defined + #else + INA219_ADC_MODE conversionTime = BIT_MODE_12; // Default 12-bit resolution + #endif + + // Decimal factor for current/power readings + #ifdef INA219_DECIMAL_FACTOR + uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; + #else + uint8_t _decimalFactor = 3; // Default 3 decimal places + #endif + + // Shunt Resistor value + #ifdef INA219_SHUNT_RESISTOR + float shuntResistor = INA219_SHUNT_RESISTOR; + #else + float shuntResistor = 0.1; // Default 0.1 ohms + #endif + + // Correction factor + #ifdef INA219_CORRECTION_FACTOR + float correctionFactor = INA219_CORRECTION_FACTOR; + #else + float correctionFactor = 1.0; // Default correction factor + #endif + + // MQTT Publish Settings + #ifdef INA219_MQTT_PUBLISH + bool mqttPublish = INA219_MQTT_PUBLISH; + bool mqttPublishSent = !INA219_MQTT_PUBLISH; + #else + bool mqttPublish = false; // Default: false (do not publish to MQTT) + bool mqttPublishSent = true; + #endif + + #ifdef INA219_MQTT_PUBLISH_ALWAYS + bool mqttPublishAlways = INA219_MQTT_PUBLISH_ALWAYS; + #else + bool mqttPublishAlways = false; // Default: false (only publish changes) + #endif + + #ifdef INA219_HA_DISCOVERY + bool haDiscovery = INA219_HA_DISCOVERY; + bool haDiscoverySent = !INA219_HA_DISCOVERY; + #else + bool haDiscovery = false; // Default: false (Home Assistant discovery disabled) + bool haDiscoverySent = true; + #endif + + // I2C SDA and SCL pins (default SDA = 8, SCL = 9 if not defined) + #ifdef INA219_SDA_PIN + int8_t _sdaPin = INA219_SDA_PIN; + #else + int8_t _sdaPin = 8; // Default SDA pin + #endif + + #ifdef INA219_SCL_PIN + int8_t _sclPin = INA219_SCL_PIN; + #else + int8_t _sclPin = 9; // Default SCL pin + #endif + + // Variables to store sensor readings + float busVoltage = 0; + float current = 0; + float current_mA = 0; + float power = 0; + float power_mW = 0; + float shuntVoltage = 0; + float loadVoltage = 0; + bool overflow = false; + //Last sent variables - float last_sent_shuntVoltage = 0; - float last_sent_busVoltage = 0; - float last_sent_loadVoltage = 0; - float last_sent_current = 0; - float last_sent_current_mA = 0; - float last_sent_power = 0; - float last_sent_power_mW = 0; - bool last_sent_overflow = false; - - float dailyEnergy_kWh = 0.0; // Daily energy in kWh - float monthlyEnergy_kWh = 0.0; // Monthly energy in kWh - float totalEnergy_kWh = 0.0; // Total energy in kWh - unsigned long lastPublishTime = 0; // Track the last publish time - - // Variables to store last reset timestamps - unsigned long dailyResetTime = 0; // Reset time in seconds - unsigned long monthlyResetTime = 0; // Reset time in seconds - - // Variables to track last sent readings - float _lastCurrentSent = 0; - float _lastVoltageSent = 0; - float _lastPowerSent = 0; - float _lastShuntVoltageSent = 0; - - INA219_WE *_ina219 = nullptr; // INA219 sensor object - - // Function to truncate decimals based on the configured decimal factor - float truncateDecimals(float val) { - // If _decimalFactor is 0, round to the nearest whole number - if (_decimalFactor == 0) { - return roundf(val); - } - // For decimal factors 1 and above, round to the appropriate number of decimal places - float factor = pow(10, _decimalFactor); - return roundf(val * factor) / factor; - } - - // Function to update INA219 settings - void updateINA219Settings() { + float last_sent_shuntVoltage = 0; + float last_sent_busVoltage = 0; + float last_sent_loadVoltage = 0; + float last_sent_current = 0; + float last_sent_current_mA = 0; + float last_sent_power = 0; + float last_sent_power_mW = 0; + bool last_sent_overflow = false; + + float dailyEnergy_kWh = 0.0; // Daily energy in kWh + float monthlyEnergy_kWh = 0.0; // Monthly energy in kWh + float totalEnergy_kWh = 0.0; // Total energy in kWh + unsigned long lastPublishTime = 0; // Track the last publish time + + // Variables to store last reset timestamps + unsigned long dailyResetTime = 0; // Reset time in seconds + unsigned long monthlyResetTime = 0; // Reset time in seconds + + // Variables to track last sent readings + float _lastCurrentSent = 0; + float _lastVoltageSent = 0; + float _lastPowerSent = 0; + float _lastShuntVoltageSent = 0; + + INA219_WE *_ina219 = nullptr; // INA219 sensor object + + // Function to truncate decimals based on the configured decimal factor + float truncateDecimals(float val) { + // If _decimalFactor is 0, round to the nearest whole number + if (_decimalFactor == 0) { + return roundf(val); + } + // For decimal factors 1 and above, round to the appropriate number of decimal places + float factor = pow(10, _decimalFactor); + return roundf(val * factor) / factor; + } + + // Function to update INA219 settings + void updateINA219Settings() { // End current I2C if already initialized Wire.end(); - + // Reinitialize I2C with the potentially updated SDA and SCL pins Wire.begin(_sdaPin, _sclPin); - + // Reinitialize the INA219 instance with updated settings - if (_ina219 != nullptr) { - delete _ina219; - } - _ina219 = new INA219_WE(_i2cAddress); - if (!_ina219->init()) { - DEBUG_PRINTLN(F("INA219 initialization failed!")); - return; - } - _ina219->setShuntSizeInOhms(shuntResistor); - _ina219->setADCMode(conversionTime); - _ina219->setCorrectionFactor(correctionFactor); - } + if (_ina219 != nullptr) { + delete _ina219; + } + _ina219 = new INA219_WE(_i2cAddress); + if (!_ina219->init()) { + DEBUG_PRINTLN(F("INA219 initialization failed!")); + return; + } + _ina219->setShuntSizeInOhms(shuntResistor); + _ina219->setADCMode(conversionTime); + _ina219->setCorrectionFactor(correctionFactor); + } public: - // Destructor to clean up the INA219 object - ~UsermodINA219() { - delete _ina219; - _ina219 = nullptr; - } - - // ADC mode enumeration - enum class ADCMode { - BIT_MODE_9 = 0, - BIT_MODE_10 = 1, - BIT_MODE_11 = 2, - BIT_MODE_12 = 3, - SAMPLE_MODE_2 = 9, - SAMPLE_MODE_4 = 10, - SAMPLE_MODE_8 = 11, - SAMPLE_MODE_16 = 12, - SAMPLE_MODE_32 = 13, - SAMPLE_MODE_64 = 14, - SAMPLE_MODE_128 = 15 - }; - - // Setup function called once on boot or restart - void setup() override { - updateINA219Settings(); // Configure INA219 settings - initDone = true; // Mark initialization as complete - } - - // Loop function called continuously - void loop() override { - // Check if the usermod is enabled and the check interval has elapsed - if (enabled && millis() - lastCheck > checkInterval) { - lastCheck = millis(); // Update last check timestamp - - // Read sensor values - shuntVoltage = truncateDecimals(_ina219->getShuntVoltage_mV()); - busVoltage = truncateDecimals(_ina219->getBusVoltage_V()); - current_mA = truncateDecimals(_ina219->getCurrent_mA()); - current = truncateDecimals(_ina219->getCurrent_mA() / 1000.0); // Convert from mA to A - power_mW = truncateDecimals(_ina219->getBusPower()); - power = truncateDecimals(_ina219->getBusPower() / 1000.0); // Convert from mW to W - loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); - overflow = truncateDecimals(_ina219->getOverflow()); - - // Update energy values based on power for this duration - updateEnergy(power, lastCheck - lastPublishTime); - lastPublishTime = lastCheck; // Update last publish time - - #ifndef WLED_DISABLE_MQTT - // Publish to MQTT if enabled + // Destructor to clean up the INA219 object + ~UsermodINA219() { + delete _ina219; + _ina219 = nullptr; + } + + // ADC mode enumeration + enum class ADCMode { + BIT_MODE_9 = 0, + BIT_MODE_10 = 1, + BIT_MODE_11 = 2, + BIT_MODE_12 = 3, + SAMPLE_MODE_2 = 9, + SAMPLE_MODE_4 = 10, + SAMPLE_MODE_8 = 11, + SAMPLE_MODE_16 = 12, + SAMPLE_MODE_32 = 13, + SAMPLE_MODE_64 = 14, + SAMPLE_MODE_128 = 15 + }; + + // Setup function called once on boot or restart + void setup() override { + updateINA219Settings(); // Configure INA219 settings + initDone = true; // Mark initialization as complete + } + + // Loop function called continuously + void loop() override { + // Check if the usermod is enabled and the check interval has elapsed + if (enabled && millis() - lastCheck > checkInterval) { + lastCheck = millis(); // Update last check timestamp + + // Read sensor values + shuntVoltage = truncateDecimals(_ina219->getShuntVoltage_mV()); + busVoltage = truncateDecimals(_ina219->getBusVoltage_V()); + current_mA = truncateDecimals(_ina219->getCurrent_mA()); + current = truncateDecimals(_ina219->getCurrent_mA() / 1000.0); // Convert from mA to A + power_mW = truncateDecimals(_ina219->getBusPower()); + power = truncateDecimals(_ina219->getBusPower() / 1000.0); // Convert from mW to W + loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); + overflow = truncateDecimals(_ina219->getOverflow()); + + // Update energy values based on power for this duration + updateEnergy(power, lastCheck - lastPublishTime); + lastPublishTime = lastCheck; // Update last publish time + + #ifndef WLED_DISABLE_MQTT + // Publish to MQTT if enabled if (WLED_MQTT_CONNECTED) { if (mqttPublish) { if (mqttPublishAlways || hasValueChanged()) { publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); - + last_sent_shuntVoltage = shuntVoltage; last_sent_busVoltage = busVoltage; last_sent_loadVoltage = loadVoltage; @@ -232,7 +232,7 @@ class UsermodINA219 : public Usermod { last_sent_power = power; last_sent_power_mW = power_mW; last_sent_overflow = overflow; - + mqttPublishSent = true; } } else if (!mqttPublish && mqttPublishSent) { @@ -241,13 +241,13 @@ class UsermodINA219 : public Usermod { // Publish an empty message with retain to delete the sensor from Home Assistant mqtt->publish(sensorTopic, 0, true, ""); - + mqttPublishSent = false; } } - // Optionally publish to Home Assistant via MQTT discovery - if (haDiscovery && !haDiscoverySent) { + // Optionally publish to Home Assistant via MQTT discovery + if (haDiscovery && !haDiscoverySent) { if (WLED_MQTT_CONNECTED) { char topic[128]; snprintf_P(topic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Common topic for all INA219 data @@ -262,7 +262,7 @@ class UsermodINA219 : public Usermod { mqttCreateHassSensor(F("Daily Energy"), topic, F("energy"), F("kWh"), F("daily_energy_kWh"), F("sensor")); mqttCreateHassSensor(F("Monthly Energy"), topic, F("energy"), F("kWh"), F("monthly_energy_kWh"), F("sensor")); mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); - + // Mark as sent to avoid repeating haDiscoverySent = true; } @@ -279,14 +279,14 @@ class UsermodINA219 : public Usermod { mqttRemoveHassSensor(F("Shunt-Resistor"), F("sensor")); //mqttRemoveHassSensor(F("Overflow"), F("binary_sensor")); mqttRemoveHassSensor(F("Overflow"), F("sensor")); - + // Mark as sent to avoid repeating haDiscoverySent = false; } } - #endif - } - } + #endif + } + } bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f) { return fabsf(oldValue - newValue) > threshold; From 68f3b8ab0413494730f79358d657e0f1af607968 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Tue, 28 Jan 2025 18:04:47 +0100 Subject: [PATCH 10/70] indentation part 2 --- usermods/INA219/usermod_ina219.h | 551 +++++++++++++++---------------- 1 file changed, 275 insertions(+), 276 deletions(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index e5db52e2e6..c3b23e106f 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -291,51 +291,51 @@ class UsermodINA219 : public Usermod { bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f) { return fabsf(oldValue - newValue) > threshold; } - + bool hasValueChanged() { return hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || - hasSignificantChange(last_sent_busVoltage, busVoltage) || - hasSignificantChange(last_sent_loadVoltage, loadVoltage) || - hasSignificantChange(last_sent_current, current) || - hasSignificantChange(last_sent_current_mA, current_mA) || - hasSignificantChange(last_sent_power, power) || - hasSignificantChange(last_sent_power_mW, power_mW) || - (last_sent_overflow != overflow); + hasSignificantChange(last_sent_busVoltage, busVoltage) || + hasSignificantChange(last_sent_loadVoltage, loadVoltage) || + hasSignificantChange(last_sent_current, current) || + hasSignificantChange(last_sent_current_mA, current_mA) || + hasSignificantChange(last_sent_power, power) || + hasSignificantChange(last_sent_power_mW, power_mW) || + (last_sent_overflow != overflow); } #ifndef WLED_DISABLE_MQTT - /** - * Function to publish sensor data to MQTT - */ + /** + ** Function to publish sensor data to MQTT + **/ bool onMqttMessage(char* topic, char* payload) override { if (!WLED_MQTT_CONNECTED) return false; if (enabled) { // Check if the message is for the correct topic if (strcmp_P(topic, PSTR("/sensor/ina219")) == 0) { StaticJsonDocument<512> jsonDoc; - + // Parse the JSON payload DeserializationError error = deserializeJson(jsonDoc, payload); if (error) { return false; } - + // Update the energy values dailyEnergy_kWh = jsonDoc["daily_energy_kWh"]; monthlyEnergy_kWh = jsonDoc["monthly_energy_kWh"]; totalEnergy_kWh = jsonDoc["total_energy_kWh"]; dailyResetTime = jsonDoc["dailyResetTime"]; monthlyResetTime = jsonDoc["monthlyResetTime"]; - + return true; } } - return false; + return false; } /** - * Subscribe to MQTT topic for controlling usermod - */ + ** Subscribe to MQTT topic for controlling usermod + **/ void onMqttConnect(bool sessionPresent) override { if (!enabled) return; if (WLED_MQTT_CONNECTED) { @@ -347,108 +347,107 @@ class UsermodINA219 : public Usermod { } } } - #endif +#endif /** - * Function to publish INA219 sensor data to MQTT - */ + ** Function to publish INA219 sensor data to MQTT + **/ void publishMqtt(float shuntVoltage, float busVoltage, float loadVoltage, - float current, float current_mA, float power, - float power_mW, bool overflow) { - // Publish to MQTT only if the WLED MQTT feature is enabled - #ifndef WLED_DISABLE_MQTT - - if (WLED_MQTT_CONNECTED) { - // Create a JSON document to hold sensor data - StaticJsonDocument<1024> jsonDoc; - - // Populate the JSON document with sensor readings - jsonDoc["shunt_voltage_mV"] = shuntVoltage; // Shunt voltage in millivolts - jsonDoc["bus_voltage_V"] = busVoltage; // Bus voltage in volts - jsonDoc["load_voltage_V"] = loadVoltage; // Load voltage in volts - jsonDoc["current"] = current; // Current in unspecified units - jsonDoc["current_mA"] = current_mA; // Current in milliamperes - jsonDoc["power"] = power; // Power in unspecified units - jsonDoc["power_mW"] = power_mW; // Power in milliwatts - jsonDoc["overflow"] = overflow; // Overflow status (true/false) - //jsonDoc["overflow"] = overflow ? "on" : "off"; - jsonDoc["shunt_resistor_Ohms"] = shuntResistor; // Shunt resistor value in Ohms - - // Energy calculations - jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; // Daily energy in kilowatt-hours - jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; // Monthly energy in kilowatt-hours - jsonDoc["total_energy_kWh"] = totalEnergy_kWh; // Total energy in kilowatt-hours - - // Reset timestamps - jsonDoc["dailyResetTime"] = dailyResetTime; // Timestamp of the last daily reset - jsonDoc["monthlyResetTime"] = monthlyResetTime; // Timestamp of the last monthly reset - - // Serialize the JSON document into a character buffer - char buffer[1024]; - size_t payload_size; - payload_size = serializeJson(jsonDoc, buffer); - - // Construct the MQTT topic using the device topic - char topic[128]; - snprintf_P(topic, sizeof(topic), "%s/sensor/ina219", mqttDeviceTopic); - - // Publish the serialized JSON data to the specified MQTT topic - mqtt->publish(topic, 0, true, buffer, payload_size); - } - #endif + float current, float current_mA, float power, + float power_mW, bool overflow) { + // Publish to MQTT only if the WLED MQTT feature is enabled + #ifndef WLED_DISABLE_MQTT + if (WLED_MQTT_CONNECTED) { + // Create a JSON document to hold sensor data + StaticJsonDocument<1024> jsonDoc; + + // Populate the JSON document with sensor readings + jsonDoc["shunt_voltage_mV"] = shuntVoltage; // Shunt voltage in millivolts + jsonDoc["bus_voltage_V"] = busVoltage; // Bus voltage in volts + jsonDoc["load_voltage_V"] = loadVoltage; // Load voltage in volts + jsonDoc["current"] = current; // Current in unspecified units + jsonDoc["current_mA"] = current_mA; // Current in milliamperes + jsonDoc["power"] = power; // Power in unspecified units + jsonDoc["power_mW"] = power_mW; // Power in milliwatts + jsonDoc["overflow"] = overflow; // Overflow status (true/false) + //jsonDoc["overflow"] = overflow ? "on" : "off"; + jsonDoc["shunt_resistor_Ohms"] = shuntResistor; // Shunt resistor value in Ohms + + // Energy calculations + jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; // Daily energy in kilowatt-hours + jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; // Monthly energy in kilowatt-hours + jsonDoc["total_energy_kWh"] = totalEnergy_kWh; // Total energy in kilowatt-hours + + // Reset timestamps + jsonDoc["dailyResetTime"] = dailyResetTime; // Timestamp of the last daily reset + jsonDoc["monthlyResetTime"] = monthlyResetTime; // Timestamp of the last monthly reset + + // Serialize the JSON document into a character buffer + char buffer[1024]; + size_t payload_size; + payload_size = serializeJson(jsonDoc, buffer); + + // Construct the MQTT topic using the device topic + char topic[128]; + snprintf_P(topic, sizeof(topic), "%s/sensor/ina219", mqttDeviceTopic); + + // Publish the serialized JSON data to the specified MQTT topic + mqtt->publish(topic, 0, true, buffer, payload_size); + } + #endif } /** - * Function to create Home Assistant sensor configuration - */ + ** Function to create Home Assistant sensor configuration + **/ void mqttCreateHassSensor(const String &name, const String &topic, - const String &deviceClass, const String &unitOfMeasurement, - const String &jsonKey, const String &SensorType) { - // Sanitize the name by replacing spaces with hyphens - String sanitizedName = name; - sanitizedName.replace(' ', '-'); - + const String &deviceClass, const String &unitOfMeasurement, + const String &jsonKey, const String &SensorType) { + // Sanitize the name by replacing spaces with hyphens + String sanitizedName = name; + sanitizedName.replace(' ', '-'); + String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); - - // Create a JSON document for the sensor configuration - StaticJsonDocument<1024> doc; - - // Populate the JSON document with sensor configuration details - doc[F("name")] = name; // Sensor name - doc[F("state_topic")] = topic; // Topic for sensor state - doc[F("unique_id")] = String(sanitizedMqttClientID) + "-" + sanitizedName; // Unique ID for the sensor - - // Template to extract specific value from JSON - doc[F("value_template")] = String("{{ value_json.") + jsonKey + String(" }}"); - if (unitOfMeasurement != "") - doc[F("unit_of_measurement")] = unitOfMeasurement; // Optional unit of measurement - if (deviceClass != "") - doc[F("device_class")] = deviceClass; // Optional device class - if (SensorType != "binary_sensor") - doc[F("expire_after")] = 1800; // Expiration time for non-binary sensors - - // Device details nested object - JsonObject device = doc.createNestedObject(F("device")); - device[F("name")] = serverDescription; // Server description as device name - device[F("identifiers")] = "wled-sensor-" + String(sanitizedMqttClientID); // Unique identifier for the device - device[F("manufacturer")] = F(WLED_BRAND); // Manufacturer name - device[F("model")] = F(WLED_PRODUCT_NAME); // Product model name - device[F("sw_version")] = versionString; // Software version - - // Serialize the JSON document into a temporary string + + // Create a JSON document for the sensor configuration + StaticJsonDocument<1024> doc; + + // Populate the JSON document with sensor configuration details + doc[F("name")] = name; // Sensor name + doc[F("state_topic")] = topic; // Topic for sensor state + doc[F("unique_id")] = String(sanitizedMqttClientID) + "-" + sanitizedName; // Unique ID for the sensor + + // Template to extract specific value from JSON + doc[F("value_template")] = String("{{ value_json.") + jsonKey + String(" }}"); + if (unitOfMeasurement != "") + doc[F("unit_of_measurement")] = unitOfMeasurement; // Optional unit of measurement + if (deviceClass != "") + doc[F("device_class")] = deviceClass; // Optional device class + if (SensorType != "binary_sensor") + doc[F("expire_after")] = 1800; // Expiration time for non-binary sensors + + // Device details nested object + JsonObject device = doc.createNestedObject(F("device")); + device[F("name")] = serverDescription; // Server description as device name + device[F("identifiers")] = "wled-sensor-" + String(sanitizedMqttClientID); // Unique identifier for the device + device[F("manufacturer")] = F(WLED_BRAND); // Manufacturer name + device[F("model")] = F(WLED_PRODUCT_NAME); // Product model name + device[F("sw_version")] = versionString; // Software version + + // Serialize the JSON document into a temporary string char buffer[1024]; size_t payload_size; - payload_size = serializeJson(doc, buffer); - + payload_size = serializeJson(doc, buffer); + char topic_S[128]; snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType, sanitizedMqttClientID, sanitizedName); - - // Debug output for the Home Assistant topic and configuration - DEBUG_PRINTLN(topic_S); - DEBUG_PRINTLN(buffer); - - // Publish the sensor configuration to Home Assistant - mqtt->publish(topic_S, 0, true, buffer, payload_size); + + // Debug output for the Home Assistant topic and configuration + DEBUG_PRINTLN(topic_S); + DEBUG_PRINTLN(buffer); + + // Publish the sensor configuration to Home Assistant + mqtt->publish(topic_S, 0, true, buffer, payload_size); } void mqttRemoveHassSensor(const String &name, const String &SensorType) { @@ -501,10 +500,10 @@ class UsermodINA219 : public Usermod { } // Allow valid characters [a-zA-Z0-9_-] else if ((c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (c >= '0' && c <= '9') || - c == '-' || c == '_') { - sanitizedID += c; // Directly append valid characters + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + c == '-' || c == '_') { +s anitizedID += c; // Directly append valid characters } // Replace any other invalid character with an underscore else { @@ -515,207 +514,207 @@ class UsermodINA219 : public Usermod { } /** - * Function to update energy calculations based on power and duration - */ + ** Function to update energy calculations based on power and duration + **/ void updateEnergy(float power, unsigned long durationMs) { - // Convert duration from milliseconds to hours - float durationHours = durationMs / 3600000.0; - - // Convert power from watts to kilowatt-hours (kWh) - float energy_kWh = (power / 1000.0) * durationHours; - - // Update total energy consumed - totalEnergy_kWh += energy_kWh; - - // Update daily energy consumption - if (dailyResetTime >= 86400) { // 86400 seconds = 24 hours - dailyEnergy_kWh = 0; // Reset daily energy to zero - dailyResetTime = 0; // Reset daily reset time to zero - } - dailyEnergy_kWh += energy_kWh; // Add to daily energy - dailyResetTime += durationMs / 1000; // Increment daily reset time in seconds - - // Update monthly energy consumption - if (monthlyResetTime >= 2592000) { // 2592000 seconds = 30 days - monthlyEnergy_kWh = 0; // Reset monthly energy to zero - monthlyResetTime = 0; // Reset monthly reset time to zero - } - monthlyEnergy_kWh += energy_kWh; // Add to monthly energy - monthlyResetTime += durationMs / 1000; // Increment monthly reset time in seconds + // Convert duration from milliseconds to hours + float durationHours = durationMs / 3600000.0; + + // Convert power from watts to kilowatt-hours (kWh) + float energy_kWh = (power / 1000.0) * durationHours; + + // Update total energy consumed + totalEnergy_kWh += energy_kWh; + + // Update daily energy consumption + if (dailyResetTime >= 86400) { // 86400 seconds = 24 hours + dailyEnergy_kWh = 0; // Reset daily energy to zero + dailyResetTime = 0; // Reset daily reset time to zero + } + dailyEnergy_kWh += energy_kWh; // Add to daily energy + dailyResetTime += durationMs / 1000; // Increment daily reset time in seconds + + // Update monthly energy consumption + if (monthlyResetTime >= 2592000) { // 2592000 seconds = 30 days + monthlyEnergy_kWh = 0; // Reset monthly energy to zero + monthlyResetTime = 0; // Reset monthly reset time to zero + } + monthlyEnergy_kWh += energy_kWh; // Add to monthly energy + monthlyResetTime += durationMs / 1000; // Increment monthly reset time in seconds } /** - * Function to add energy consumption data to a JSON object for reporting - */ + ** Function to add energy consumption data to a JSON object for reporting + **/ void addToJsonInfo(JsonObject &root) { - JsonObject user = root[F("u")]; - if (user.isNull()) { - user = root.createNestedObject(F("u")); // Create a nested object for user data - } - - // Create a nested array for energy data - JsonArray energy_json_seperator = user.createNestedArray(F("------------------------------------")); + JsonObject user = root[F("u")]; + if (user.isNull()) { + user = root.createNestedObject(F("u")); // Create a nested object for user data + } + + // Create a nested array for energy data + JsonArray energy_json_seperator = user.createNestedArray(F("------------------------------------")); - JsonArray energy_json = user.createNestedArray(F("Energy Consumption:")); - - if (!enabled) { - energy_json.add(F("disabled")); // Indicate that the module is disabled - } else { - // Create a nested array for daily energy - JsonArray dailyEnergy_json = user.createNestedArray(F("Daily Energy")); - dailyEnergy_json.add(dailyEnergy_kWh); // Add daily energy in kWh - dailyEnergy_json.add(F(" kWh")); // Add unit of measurement - - // Create a nested array for monthly energy - JsonArray monthlyEnergy_json = user.createNestedArray(F("Monthly Energy")); - monthlyEnergy_json.add(monthlyEnergy_kWh); // Add monthly energy in kWh - monthlyEnergy_json.add(F(" kWh")); // Add unit of measurement - - // Create a nested array for total energy - JsonArray totalEnergy_json = user.createNestedArray(F("Total Energy")); - totalEnergy_json.add(totalEnergy_kWh); // Add total energy in kWh - totalEnergy_json.add(F(" kWh")); // Add unit of measurement - } + JsonArray energy_json = user.createNestedArray(F("Energy Consumption:")); + + if (!enabled) { + energy_json.add(F("disabled")); // Indicate that the module is disabled + } else { + // Create a nested array for daily energy + JsonArray dailyEnergy_json = user.createNestedArray(F("Daily Energy")); + dailyEnergy_json.add(dailyEnergy_kWh); // Add daily energy in kWh + dailyEnergy_json.add(F(" kWh")); // Add unit of measurement + + // Create a nested array for monthly energy + JsonArray monthlyEnergy_json = user.createNestedArray(F("Monthly Energy")); + monthlyEnergy_json.add(monthlyEnergy_kWh); // Add monthly energy in kWh + monthlyEnergy_json.add(F(" kWh")); // Add unit of measurement + + // Create a nested array for total energy + JsonArray totalEnergy_json = user.createNestedArray(F("Total Energy")); + totalEnergy_json.add(totalEnergy_kWh); // Add total energy in kWh + totalEnergy_json.add(F(" kWh")); // Add unit of measurement + } } /** - * Function to add the current state of energy consumption to a JSON object - */ + ** Function to add the current state of energy consumption to a JSON object + **/ void addToJsonState(JsonObject& root) override { - if (!initDone) return; // Prevent crashes on boot if initialization is not done - - JsonObject usermod = root[FPSTR(_name)]; - if (usermod.isNull()) { - usermod = root.createNestedObject(FPSTR(_name)); // Create nested object for the usermod - } - - // Add energy consumption data to the usermod JSON object - usermod["totalEnergy_kWh"] = totalEnergy_kWh; - usermod["dailyEnergy_kWh"] = dailyEnergy_kWh; - usermod["monthlyEnergy_kWh"] = monthlyEnergy_kWh; - usermod["dailyResetTime"] = dailyResetTime; - usermod["monthlyResetTime"] = monthlyResetTime; + if (!initDone) return; // Prevent crashes on boot if initialization is not done + + JsonObject usermod = root[FPSTR(_name)]; + if (usermod.isNull()) { + usermod = root.createNestedObject(FPSTR(_name)); // Create nested object for the usermod + } + + // Add energy consumption data to the usermod JSON object + usermod["totalEnergy_kWh"] = totalEnergy_kWh; + usermod["dailyEnergy_kWh"] = dailyEnergy_kWh; + usermod["monthlyEnergy_kWh"] = monthlyEnergy_kWh; + usermod["dailyResetTime"] = dailyResetTime; + usermod["monthlyResetTime"] = monthlyResetTime; } /** - * Function to read energy consumption data from a JSON object - */ + ** Function to read energy consumption data from a JSON object + **/ void readFromJsonState(JsonObject& root) override { - if (!initDone) return; // Prevent crashes on boot if initialization is not done - - JsonObject usermod = root[FPSTR(_name)]; - if (!usermod.isNull()) { - // Read values from JSON or retain existing values if not present - totalEnergy_kWh = usermod["totalEnergy_kWh"] | totalEnergy_kWh; - dailyEnergy_kWh = usermod["dailyEnergy_kWh"] | dailyEnergy_kWh; - monthlyEnergy_kWh = usermod["monthlyEnergy_kWh"] | monthlyEnergy_kWh; - dailyResetTime = usermod["dailyResetTime"] | dailyResetTime; - monthlyResetTime = usermod["monthlyResetTime"] | monthlyResetTime; - } + if (!initDone) return; // Prevent crashes on boot if initialization is not done + + JsonObject usermod = root[FPSTR(_name)]; + if (!usermod.isNull()) { + // Read values from JSON or retain existing values if not present + totalEnergy_kWh = usermod["totalEnergy_kWh"] | totalEnergy_kWh; + dailyEnergy_kWh = usermod["dailyEnergy_kWh"] | dailyEnergy_kWh; + monthlyEnergy_kWh = usermod["monthlyEnergy_kWh"] | monthlyEnergy_kWh; + dailyResetTime = usermod["dailyResetTime"] | dailyResetTime; + monthlyResetTime = usermod["monthlyResetTime"] | monthlyResetTime; + } } /** - * Function to handle settings in the Usermod menu - */ + ** Function to handle settings in the Usermod menu + **/ void addToConfig(JsonObject& root) override { - JsonObject top = root.createNestedObject(F("INA219")); // Create nested object for INA219 settings - top["Enabled"] = enabled; // Store enabled status + JsonObject top = root.createNestedObject(F("INA219")); // Create nested object for INA219 settings + top["Enabled"] = enabled; // Store enabled status top["sda_pin"] = _sdaPin; // Store selected SDA pin top["scl_pin"] = _sclPin; // Store selected SCL pin - top["i2c_address"] = static_cast(_i2cAddress); // Store I2C address - top["check_interval"] = checkInterval / 1000; // Store check interval in seconds - top["conversion_time"] = conversionTime; // Store conversion time - top["decimals"] = _decimalFactor; // Store decimal factor - top["shunt_resistor"] = shuntResistor; // Store shunt resistor value - - #ifndef WLED_DISABLE_MQTT - // Store MQTT settings if MQTT is not disabled - top["mqtt_publish"] = mqttPublish; - top["mqtt_publish_always"] = mqttPublishAlways; - top["ha_discovery"] = haDiscovery; - #endif + top["i2c_address"] = static_cast(_i2cAddress); // Store I2C address + top["check_interval"] = checkInterval / 1000; // Store check interval in seconds + top["conversion_time"] = conversionTime; // Store conversion time + top["decimals"] = _decimalFactor; // Store decimal factor + top["shunt_resistor"] = shuntResistor; // Store shunt resistor value + + #ifndef WLED_DISABLE_MQTT + // Store MQTT settings if MQTT is not disabled + top["mqtt_publish"] = mqttPublish; + top["mqtt_publish_always"] = mqttPublishAlways; + top["ha_discovery"] = haDiscovery; + #endif } /** - * Function to append configuration options to the Usermod menu - */ + ** Function to append configuration options to the Usermod menu + **/ void appendConfigData() override { - // Append the dropdown for I2C address selection - oappend(F("dd=addDropdown('INA219','i2c_address');")); - oappend(F("addOption(dd,'0x40 - Default',0x40, true);")); // Default option - oappend(F("addOption(dd,'0x41 - A0 soldered',0x41);")); - oappend(F("addOption(dd,'0x44 - A1 soldered',0x44);")); - oappend(F("addOption(dd,'0x45 - A0 and A1 soldered',0x45);")); - - // Append the dropdown for ADC mode (resolution + samples) - oappend(F("ct=addDropdown('INA219','conversion_time');")); - oappend("addOption(ct,'9-Bit (84 µs)',0);"); - oappend("addOption(ct,'10-Bit (148 µs)',1);"); - oappend("addOption(ct,'11-Bit (276 µs)',2);"); - oappend("addOption(ct,'12-Bit (532 µs)',3, true);"); // Default option - oappend("addOption(ct,'2 samples (1.06 ms)',9);"); - oappend("addOption(ct,'4 samples (2.13 ms)',10);"); - oappend("addOption(ct,'8 samples (4.26 ms)',11);"); - oappend("addOption(ct,'16 samples (8.51 ms)',12);"); - oappend("addOption(ct,'32 samples (17.02 ms)',13);"); - oappend("addOption(ct,'64 samples (34.05 ms)',14);"); - oappend("addOption(ct,'128 samples (68.10 ms)',15);"); - - // Append the dropdown for decimal precision (0 to 10) - oappend(F("df=addDropdown('INA219','decimals');")); - for (int i = 0; i <= 3; i++) { - oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); // Default to 2 decimals - } + // Append the dropdown for I2C address selection + oappend(F("dd=addDropdown('INA219','i2c_address');")); + oappend(F("addOption(dd,'0x40 - Default',0x40, true);")); // Default option + oappend(F("addOption(dd,'0x41 - A0 soldered',0x41);")); + oappend(F("addOption(dd,'0x44 - A1 soldered',0x44);")); + oappend(F("addOption(dd,'0x45 - A0 and A1 soldered',0x45);")); + + // Append the dropdown for ADC mode (resolution + samples) + oappend(F("ct=addDropdown('INA219','conversion_time');")); + oappend("addOption(ct,'9-Bit (84 µs)',0);"); + oappend("addOption(ct,'10-Bit (148 µs)',1);"); + oappend("addOption(ct,'11-Bit (276 µs)',2);"); + oappend("addOption(ct,'12-Bit (532 µs)',3, true);"); // Default option + oappend("addOption(ct,'2 samples (1.06 ms)',9);"); + oappend("addOption(ct,'4 samples (2.13 ms)',10);"); + oappend("addOption(ct,'8 samples (4.26 ms)',11);"); + oappend("addOption(ct,'16 samples (8.51 ms)',12);"); + oappend("addOption(ct,'32 samples (17.02 ms)',13);"); + oappend("addOption(ct,'64 samples (34.05 ms)',14);"); + oappend("addOption(ct,'128 samples (68.10 ms)',15);"); + + // Append the dropdown for decimal precision (0 to 10) + oappend(F("df=addDropdown('INA219','decimals');")); + for (int i = 0; i <= 3; i++) { + oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); // Default to 2 decimals + } } /** - * Function to read settings from the Usermod menu configuration - */ + ** Function to read settings from the Usermod menu configuration + **/ bool readFromConfig(JsonObject& root) override { - JsonObject top = root[FPSTR(_name)]; - - bool configComplete = !top.isNull(); // Check if the configuration exists - - // Read configuration values and update local variables - configComplete &= getJsonValue(top["Enabled"], enabled); + JsonObject top = root[FPSTR(_name)]; + + bool configComplete = !top.isNull(); // Check if the configuration exists + + // Read configuration values and update local variables + configComplete &= getJsonValue(top["Enabled"], enabled); configComplete &= getJsonValue(top["sda_pin"], _sdaPin); // Read selected SDA pin configComplete &= getJsonValue(top["scl_pin"], _sclPin); // Read selected SCL pin - configComplete &= getJsonValue(top[F("i2c_address")], _i2cAddress); - - // Read check interval and convert to milliseconds if necessary - if (getJsonValue(top[F("check_interval")], checkInterval)) { - if (1 <= checkInterval && checkInterval <= 600) - checkInterval *= 1000; // Convert seconds to milliseconds - else - checkInterval = _checkInterval * 1000; // Fallback to defined value - } else { - configComplete = false; // Configuration is incomplete - } + configComplete &= getJsonValue(top[F("i2c_address")], _i2cAddress); + + // Read check interval and convert to milliseconds if necessary + if (getJsonValue(top[F("check_interval")], checkInterval)) { + if (1 <= checkInterval && checkInterval <= 600) + checkInterval *= 1000; // Convert seconds to milliseconds + else + checkInterval = _checkInterval * 1000; // Fallback to defined value + } else { + configComplete = false; // Configuration is incomplete + } - // Read other configuration values - configComplete &= getJsonValue(top["conversion_time"], conversionTime); - configComplete &= getJsonValue(top["decimals"], _decimalFactor); - configComplete &= getJsonValue(top["shunt_resistor"], shuntResistor); - - #ifndef WLED_DISABLE_MQTT - configComplete &= getJsonValue(top["mqtt_publish"], mqttPublish); - configComplete &= getJsonValue(top["mqtt_publish_always"], mqttPublishAlways); - configComplete &= getJsonValue(top["ha_discovery"], haDiscovery); - + // Read other configuration values + configComplete &= getJsonValue(top["conversion_time"], conversionTime); + configComplete &= getJsonValue(top["decimals"], _decimalFactor); + configComplete &= getJsonValue(top["shunt_resistor"], shuntResistor); + + #ifndef WLED_DISABLE_MQTT + configComplete &= getJsonValue(top["mqtt_publish"], mqttPublish); + configComplete &= getJsonValue(top["mqtt_publish_always"], mqttPublishAlways); + configComplete &= getJsonValue(top["ha_discovery"], haDiscovery); + haDiscoverySent = !haDiscovery; - #endif - - updateINA219Settings(); // Apply any updated settings to the INA219 - - return configComplete; // Return whether the configuration was complete + #endif + + updateINA219Settings(); // Apply any updated settings to the INA219 + + return configComplete; // Return whether the configuration was complete } /** - * Function to get the unique identifier for this usermod - */ + ** Function to get the unique identifier for this usermod + **/ uint16_t getId() override { - return USERMOD_ID_INA219; // Return the unique identifier for the INA219 usermod + return USERMOD_ID_INA219; // Return the unique identifier for the INA219 usermod } }; -const char UsermodINA219::_name[] PROGMEM = "INA219"; +const char UsermodINA219::_name[] PROGMEM = "INA219"; \ No newline at end of file From d6f22d6e320f60df842a19d1cc2ed3e0504a4602 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Tue, 28 Jan 2025 18:06:15 +0100 Subject: [PATCH 11/70] indentation fix --- usermods/INA219/usermod_ina219.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index c3b23e106f..c37258d0ef 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -503,7 +503,7 @@ class UsermodINA219 : public Usermod { (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '-' || c == '_') { -s anitizedID += c; // Directly append valid characters + sanitizedID += c; // Directly append valid characters } // Replace any other invalid character with an underscore else { From 6120912c75c3f7102626fc367ef8c45f54bace1d Mon Sep 17 00:00:00 2001 From: KrX3D Date: Tue, 28 Jan 2025 21:21:26 +0100 Subject: [PATCH 12/70] use enum from INA219_WE library --- usermods/INA219/usermod_ina219.h | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index c37258d0ef..c7b6ea0027 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -39,7 +39,7 @@ class UsermodINA219 : public Usermod { #ifdef INA219_CONVERSION_TIME INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); // Cast from int if defined #else - INA219_ADC_MODE conversionTime = BIT_MODE_12; // Default 12-bit resolution + INA219_ADC_MODE conversionTime = static_cast(BIT_MODE_12); // Default 12-bit resolution #endif // Decimal factor for current/power readings @@ -176,21 +176,6 @@ class UsermodINA219 : public Usermod { _ina219 = nullptr; } - // ADC mode enumeration - enum class ADCMode { - BIT_MODE_9 = 0, - BIT_MODE_10 = 1, - BIT_MODE_11 = 2, - BIT_MODE_12 = 3, - SAMPLE_MODE_2 = 9, - SAMPLE_MODE_4 = 10, - SAMPLE_MODE_8 = 11, - SAMPLE_MODE_16 = 12, - SAMPLE_MODE_32 = 13, - SAMPLE_MODE_64 = 14, - SAMPLE_MODE_128 = 15 - }; - // Setup function called once on boot or restart void setup() override { updateINA219Settings(); // Configure INA219 settings From 2a1cefe33c144d9bd34f549a218d31d7d7736fcb Mon Sep 17 00:00:00 2001 From: KrX3D Date: Wed, 29 Jan 2025 19:27:57 +0100 Subject: [PATCH 13/70] PinManager allocatePin SDA SCL --- usermods/INA219/usermod_ina219.h | 29 +++++++++++++++++++++++++++++ wled00/pin_manager.h | 3 ++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index c7b6ea0027..268a0ed677 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -149,6 +149,29 @@ class UsermodINA219 : public Usermod { // Function to update INA219 settings void updateINA219Settings() { + // Deallocate I2C pins + if (PinManager::isPinAllocated(_sdaPin, PinOwner::UM_INA219)) { + DEBUG_PRINTF_P(PSTR("INA219: Releasing SDA pin %d.\n"), _sdaPin); + PinManager::deallocatePin(_sdaPin, PinOwner::UM_INA219); + } else { + DEBUG_PRINTF_P(PSTR("INA219: SDA pin %d was not allocated.\n"), _sdaPin); + } + if (PinManager::isPinAllocated(_sclPin, PinOwner::UM_INA219)) { + DEBUG_PRINTF_P(PSTR("INA219: Releasing SCL pin %d.\n"), _sclPin); + PinManager::deallocatePin(_sclPin, PinOwner::UM_INA219); + } else { + DEBUG_PRINTF_P(PSTR("INA219: SCL pin %d was not allocated.\n"), _sclPin); + } + + // Allocate I2C pins using PinManager + if (!PinManager::allocatePin(_sdaPin, true, PinOwner::UM_INA219) || + !PinManager::allocatePin(_sclPin, true, PinOwner::UM_INA219)) { + + DEBUG_PRINTLN(F("INA219 pin allocation failed!")); + enabled = false; // Disable the usermod if pin allocation fails + return; + } + // End current I2C if already initialized Wire.end(); @@ -174,6 +197,12 @@ class UsermodINA219 : public Usermod { ~UsermodINA219() { delete _ina219; _ina219 = nullptr; + + // Deallocate I2C pins + PinManager::deallocatePin(_sdaPin, PinOwner::UM_INA219); + PinManager::deallocatePin(_sclPin, PinOwner::UM_INA219); + + DEBUG_PRINTLN(F("INA219 pins deallocated and usermod cleaned up.")); } // Setup function called once on boot or restart diff --git a/wled00/pin_manager.h b/wled00/pin_manager.h index b285b6ee5d..3ea4720fd2 100644 --- a/wled00/pin_manager.h +++ b/wled00/pin_manager.h @@ -73,7 +73,8 @@ enum struct PinOwner : uint8_t { UM_LDR_DUSK_DAWN = USERMOD_ID_LDR_DUSK_DAWN, // 0x2B // Usermod "usermod_LDR_Dusk_Dawn_v2.h" UM_MAX17048 = USERMOD_ID_MAX17048, // 0x2F // Usermod "usermod_max17048.h" UM_BME68X = USERMOD_ID_BME68X, // 0x31 // Usermod "usermod_bme68x.h -- Uses "standard" HW_I2C pins - UM_PIXELS_DICE_TRAY = USERMOD_ID_PIXELS_DICE_TRAY // 0x35 // Usermod "pixels_dice_tray.h" -- Needs compile time specified 6 pins for display including SPI. + UM_PIXELS_DICE_TRAY = USERMOD_ID_PIXELS_DICE_TRAY, // 0x35 // Usermod "pixels_dice_tray.h" -- Needs compile time specified 6 pins for display including SPI. + UM_INA219 = USERMOD_ID_INA219 // 0x38 // Usermod "usermod_ina219.h" -- Uses SDA SCL }; static_assert(0u == static_cast(PinOwner::None), "PinOwner::None must be zero, so default array initialization works as expected"); From 2618c46d84e274981af0a6020da77ad7f6764e31 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 30 Jan 2025 18:34:46 +0100 Subject: [PATCH 14/70] indentation --- wled00/const.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/const.h b/wled00/const.h index 5350ba20df..b235cfa107 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -205,7 +205,7 @@ #define USERMOD_ID_PIXELS_DICE_TRAY 54 //Usermod "pixels_dice_tray.h" #define USERMOD_ID_DEEP_SLEEP 55 //Usermod "usermod_deep_sleep.h" #define USERMOD_ID_RF433 56 //Usermod "usermod_v2_RF433.h" -#define USERMOD_ID_INA219 57 //Usermod "usermod_ina219.h" +#define USERMOD_ID_INA219 57 // Usermod "usermod_ina219.h" //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot From 8a142a72aee8a4ce92b3b1c4783f95782c5b3171 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 30 Jan 2025 21:03:43 +0100 Subject: [PATCH 15/70] Refactor INA219 Usermod Configuration - Moved configurable settings to the top of the file for better readability. - Defined default values for each configuration option using #ifndef directives. - Updated default I2C pins to WLED ESP32 defaults (SDA: 21, SCL: 22). - Cleaned up variable initialization to use pre-defined constants for configuration. --- usermods/INA219/usermod_ina219.h | 162 ++++++++++++++----------------- 1 file changed, 75 insertions(+), 87 deletions(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index 268a0ed677..f1543a8d2a 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -1,5 +1,64 @@ #pragma once +// Configurable settings for the INA219 Usermod + +// Enabled setting +#ifndef INA219_ENABLED + #define INA219_ENABLED false // Default disabled value +#endif + +// I2C Address (default is 0x40 if not defined) +#ifndef INA219_I2C_ADDRESS + #define INA219_I2C_ADDRESS 0x40 // Default I2C address +#endif + +// Check Interval (in seconds, default 5 seconds if not defined) +#ifndef INA219_CHECK_INTERVAL + #define INA219_CHECK_INTERVAL 5 // Default 5 seconds +#endif + +// Conversion Time (default to 12-bit resolution) +#ifndef INA219_CONVERSION_TIME + #define INA219_CONVERSION_TIME BIT_MODE_12 // Default 12-bit resolution +#endif + +// Decimal factor for current/power readings (default to 3 decimal places) +#ifndef INA219_DECIMAL_FACTOR + #define INA219_DECIMAL_FACTOR 3 // Default 3 decimal places +#endif + +// Shunt Resistor value (default to 0.1 ohms) +#ifndef INA219_SHUNT_RESISTOR + #define INA219_SHUNT_RESISTOR 0.1 // Default 0.1 ohms +#endif + +// Correction factor (default to 1.0) +#ifndef INA219_CORRECTION_FACTOR + #define INA219_CORRECTION_FACTOR 1.0 // Default correction factor +#endif + +// MQTT Publish Settings +#ifndef INA219_MQTT_PUBLISH + #define INA219_MQTT_PUBLISH false // Default: false (do not publish to MQTT) +#endif + +#ifndef INA219_MQTT_PUBLISH_ALWAYS + #define INA219_MQTT_PUBLISH_ALWAYS false // Default: false (only publish changes) +#endif + +#ifndef INA219_HA_DISCOVERY + #define INA219_HA_DISCOVERY false // Default: false (Home Assistant discovery disabled) +#endif + +// I2C SDA and SCL pins (default SDA = 21, SCL = 22 for ESP32, if not defined) +#ifndef INA219_SDA_PIN + #define INA219_SDA_PIN 21 // Default SDA pin for ESP32 +#endif + +#ifndef INA219_SCL_PIN + #define INA219_SCL_PIN 22 // Default SCL pin for ESP32 +#endif + #include "wled.h" #include #include @@ -11,93 +70,22 @@ class UsermodINA219 : public Usermod { bool initDone = false; // Flag to check if initialization is complete unsigned long lastCheck = 0; // Timestamp for the last check - // Configurable settings for the INA219 Usermod - // Enabled setting - #ifdef INA219_ENABLED - bool enabled = INA219_ENABLED; - #else - bool enabled = false; // Default disabled value - #endif - - // I2C Address (default is 0x40 if not defined) - #ifdef INA219_I2C_ADDRESS - uint8_t _i2cAddress = INA219_I2C_ADDRESS; - #else - uint8_t _i2cAddress = 0x40; // Default I2C address - #endif - - // Check Interval (in seconds) - #ifdef INA219_CHECK_INTERVAL - uint16_t _checkInterval = INA219_CHECK_INTERVAL; - uint16_t checkInterval = _checkInterval * 1000; // Convert to milliseconds - #else - uint16_t _checkInterval = 5; // Default 5 seconds - uint16_t checkInterval = _checkInterval * 1000; // Default 5 seconds - #endif - - // Conversion Time - #ifdef INA219_CONVERSION_TIME - INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); // Cast from int if defined - #else - INA219_ADC_MODE conversionTime = static_cast(BIT_MODE_12); // Default 12-bit resolution - #endif - - // Decimal factor for current/power readings - #ifdef INA219_DECIMAL_FACTOR - uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; - #else - uint8_t _decimalFactor = 3; // Default 3 decimal places - #endif - - // Shunt Resistor value - #ifdef INA219_SHUNT_RESISTOR - float shuntResistor = INA219_SHUNT_RESISTOR; - #else - float shuntResistor = 0.1; // Default 0.1 ohms - #endif - - // Correction factor - #ifdef INA219_CORRECTION_FACTOR - float correctionFactor = INA219_CORRECTION_FACTOR; - #else - float correctionFactor = 1.0; // Default correction factor - #endif - - // MQTT Publish Settings - #ifdef INA219_MQTT_PUBLISH - bool mqttPublish = INA219_MQTT_PUBLISH; - bool mqttPublishSent = !INA219_MQTT_PUBLISH; - #else - bool mqttPublish = false; // Default: false (do not publish to MQTT) - bool mqttPublishSent = true; - #endif - - #ifdef INA219_MQTT_PUBLISH_ALWAYS - bool mqttPublishAlways = INA219_MQTT_PUBLISH_ALWAYS; - #else - bool mqttPublishAlways = false; // Default: false (only publish changes) - #endif - - #ifdef INA219_HA_DISCOVERY - bool haDiscovery = INA219_HA_DISCOVERY; - bool haDiscoverySent = !INA219_HA_DISCOVERY; - #else - bool haDiscovery = false; // Default: false (Home Assistant discovery disabled) - bool haDiscoverySent = true; - #endif - - // I2C SDA and SCL pins (default SDA = 8, SCL = 9 if not defined) - #ifdef INA219_SDA_PIN - int8_t _sdaPin = INA219_SDA_PIN; - #else - int8_t _sdaPin = 8; // Default SDA pin - #endif - - #ifdef INA219_SCL_PIN - int8_t _sclPin = INA219_SCL_PIN; - #else - int8_t _sclPin = 9; // Default SCL pin - #endif + // Define the variables using the pre-defined or default values + bool enabled = INA219_ENABLED; + uint8_t _i2cAddress = INA219_I2C_ADDRESS; + uint16_t _checkInterval = INA219_CHECK_INTERVAL; + uint16_t checkInterval = _checkInterval * 1000; // Convert to milliseconds + INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); // Cast from int + uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; + float shuntResistor = INA219_SHUNT_RESISTOR; + float correctionFactor = INA219_CORRECTION_FACTOR; + bool mqttPublish = INA219_MQTT_PUBLISH; + bool mqttPublishSent = !INA219_MQTT_PUBLISH; + bool mqttPublishAlways = INA219_MQTT_PUBLISH_ALWAYS; + bool haDiscovery = INA219_HA_DISCOVERY; + bool haDiscoverySent = !INA219_HA_DISCOVERY; + int8_t _sdaPin = INA219_SDA_PIN; + int8_t _sclPin = INA219_SCL_PIN; // Variables to store sensor readings float busVoltage = 0; From a6fc7f43ff47cbde37107991bf103dc22bf0749b Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 31 Jan 2025 17:56:38 +0100 Subject: [PATCH 16/70] Changed SDA/SCL to Global I2C, managed by WLED --- usermods/INA219/usermod_ina219.h | 55 +++----------------------------- wled00/pin_manager.h | 3 +- 2 files changed, 6 insertions(+), 52 deletions(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index f1543a8d2a..e5b8cf58c2 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -50,17 +50,7 @@ #define INA219_HA_DISCOVERY false // Default: false (Home Assistant discovery disabled) #endif -// I2C SDA and SCL pins (default SDA = 21, SCL = 22 for ESP32, if not defined) -#ifndef INA219_SDA_PIN - #define INA219_SDA_PIN 21 // Default SDA pin for ESP32 -#endif - -#ifndef INA219_SCL_PIN - #define INA219_SCL_PIN 22 // Default SCL pin for ESP32 -#endif - #include "wled.h" -#include #include class UsermodINA219 : public Usermod { @@ -84,8 +74,6 @@ class UsermodINA219 : public Usermod { bool mqttPublishAlways = INA219_MQTT_PUBLISH_ALWAYS; bool haDiscovery = INA219_HA_DISCOVERY; bool haDiscoverySent = !INA219_HA_DISCOVERY; - int8_t _sdaPin = INA219_SDA_PIN; - int8_t _sclPin = INA219_SCL_PIN; // Variables to store sensor readings float busVoltage = 0; @@ -137,34 +125,11 @@ class UsermodINA219 : public Usermod { // Function to update INA219 settings void updateINA219Settings() { - // Deallocate I2C pins - if (PinManager::isPinAllocated(_sdaPin, PinOwner::UM_INA219)) { - DEBUG_PRINTF_P(PSTR("INA219: Releasing SDA pin %d.\n"), _sdaPin); - PinManager::deallocatePin(_sdaPin, PinOwner::UM_INA219); - } else { - DEBUG_PRINTF_P(PSTR("INA219: SDA pin %d was not allocated.\n"), _sdaPin); - } - if (PinManager::isPinAllocated(_sclPin, PinOwner::UM_INA219)) { - DEBUG_PRINTF_P(PSTR("INA219: Releasing SCL pin %d.\n"), _sclPin); - PinManager::deallocatePin(_sclPin, PinOwner::UM_INA219); - } else { - DEBUG_PRINTF_P(PSTR("INA219: SCL pin %d was not allocated.\n"), _sclPin); - } - - // Allocate I2C pins using PinManager - if (!PinManager::allocatePin(_sdaPin, true, PinOwner::UM_INA219) || - !PinManager::allocatePin(_sclPin, true, PinOwner::UM_INA219)) { - - DEBUG_PRINTLN(F("INA219 pin allocation failed!")); - enabled = false; // Disable the usermod if pin allocation fails - return; - } - - // End current I2C if already initialized - Wire.end(); - - // Reinitialize I2C with the potentially updated SDA and SCL pins - Wire.begin(_sdaPin, _sclPin); + if (i2c_scl<0 || i2c_sda<0) { enabled = false; return; } + DEBUG_PRINT(F("Using I2C SDA: ")); + DEBUG_PRINTLN(i2c_sda); + DEBUG_PRINT(F("Using I2C SCL: ")); + DEBUG_PRINTLN(i2c_scl); // Reinitialize the INA219 instance with updated settings if (_ina219 != nullptr) { @@ -185,12 +150,6 @@ class UsermodINA219 : public Usermod { ~UsermodINA219() { delete _ina219; _ina219 = nullptr; - - // Deallocate I2C pins - PinManager::deallocatePin(_sdaPin, PinOwner::UM_INA219); - PinManager::deallocatePin(_sclPin, PinOwner::UM_INA219); - - DEBUG_PRINTLN(F("INA219 pins deallocated and usermod cleaned up.")); } // Setup function called once on boot or restart @@ -621,8 +580,6 @@ class UsermodINA219 : public Usermod { void addToConfig(JsonObject& root) override { JsonObject top = root.createNestedObject(F("INA219")); // Create nested object for INA219 settings top["Enabled"] = enabled; // Store enabled status - top["sda_pin"] = _sdaPin; // Store selected SDA pin - top["scl_pin"] = _sclPin; // Store selected SCL pin top["i2c_address"] = static_cast(_i2cAddress); // Store I2C address top["check_interval"] = checkInterval / 1000; // Store check interval in seconds top["conversion_time"] = conversionTime; // Store conversion time @@ -679,8 +636,6 @@ class UsermodINA219 : public Usermod { // Read configuration values and update local variables configComplete &= getJsonValue(top["Enabled"], enabled); - configComplete &= getJsonValue(top["sda_pin"], _sdaPin); // Read selected SDA pin - configComplete &= getJsonValue(top["scl_pin"], _sclPin); // Read selected SCL pin configComplete &= getJsonValue(top[F("i2c_address")], _i2cAddress); // Read check interval and convert to milliseconds if necessary diff --git a/wled00/pin_manager.h b/wled00/pin_manager.h index 3ea4720fd2..b285b6ee5d 100644 --- a/wled00/pin_manager.h +++ b/wled00/pin_manager.h @@ -73,8 +73,7 @@ enum struct PinOwner : uint8_t { UM_LDR_DUSK_DAWN = USERMOD_ID_LDR_DUSK_DAWN, // 0x2B // Usermod "usermod_LDR_Dusk_Dawn_v2.h" UM_MAX17048 = USERMOD_ID_MAX17048, // 0x2F // Usermod "usermod_max17048.h" UM_BME68X = USERMOD_ID_BME68X, // 0x31 // Usermod "usermod_bme68x.h -- Uses "standard" HW_I2C pins - UM_PIXELS_DICE_TRAY = USERMOD_ID_PIXELS_DICE_TRAY, // 0x35 // Usermod "pixels_dice_tray.h" -- Needs compile time specified 6 pins for display including SPI. - UM_INA219 = USERMOD_ID_INA219 // 0x38 // Usermod "usermod_ina219.h" -- Uses SDA SCL + UM_PIXELS_DICE_TRAY = USERMOD_ID_PIXELS_DICE_TRAY // 0x35 // Usermod "pixels_dice_tray.h" -- Needs compile time specified 6 pins for display including SPI. }; static_assert(0u == static_cast(PinOwner::None), "PinOwner::None must be zero, so default array initialization works as expected"); From ecd120177e1c0ebfe43d739d3041947b60826199 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 1 Feb 2025 15:37:11 +0100 Subject: [PATCH 17/70] Updated pictures, since SDA/SCL pin selection through usermod was removed --- usermods/INA219/img/usermod_settings.png | Bin 12822 -> 11550 bytes .../img/usermod_settings_pins_selection.PNG | Bin 0 -> 22995 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 usermods/INA219/img/usermod_settings_pins_selection.PNG diff --git a/usermods/INA219/img/usermod_settings.png b/usermods/INA219/img/usermod_settings.png index 3ba51aac526dfc28bb6efd01bf149c7aded28d61..e0b973deb083a58a79b8ee4c89a0ff9a22521718 100644 GIT binary patch literal 11550 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 Zhx=ccjqqPKz)Z8mQEPjvLYT+({{g(wBiR4| literal 12822 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 diff --git a/usermods/INA219/img/usermod_settings_pins_selection.PNG b/usermods/INA219/img/usermod_settings_pins_selection.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7b20b0cde0357e7899148940fff69db1d8f25a98 GIT binary patch literal 22995 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 T)?M9!*K~SXMw+GScF+F{@MH^( literal 0 HcmV?d00001 From 44725040beba0bdcf1d33b8376c8255fa7bdbadd Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 1 Feb 2025 15:38:03 +0100 Subject: [PATCH 18/70] Delete usermods/INA219/img/usermod_settings.png --- usermods/INA219/img/usermod_settings.png | Bin 11550 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 usermods/INA219/img/usermod_settings.png diff --git a/usermods/INA219/img/usermod_settings.png b/usermods/INA219/img/usermod_settings.png deleted file mode 100644 index e0b973deb083a58a79b8ee4c89a0ff9a22521718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11550 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 Zhx=ccjqqPKz)Z8mQEPjvLYT+({{g(wBiR4| From cfc341f57dab6693efd314622baf7b0d43154168 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 1 Feb 2025 15:38:44 +0100 Subject: [PATCH 19/70] Updated pictures, since SDA/SCL pin selection through usermod was removed --- usermods/INA219/img/usermod_settings.png | Bin 0 -> 11550 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 usermods/INA219/img/usermod_settings.png diff --git a/usermods/INA219/img/usermod_settings.png b/usermods/INA219/img/usermod_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b973deb083a58a79b8ee4c89a0ff9a22521718 GIT binary patch literal 11550 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 Zhx=ccjqqPKz)Z8mQEPjvLYT+({{g(wBiR4| literal 0 HcmV?d00001 From b4c4231ba33163b629ddb32aad62369f567ee112 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 1 Feb 2025 15:51:04 +0100 Subject: [PATCH 20/70] Update ReadMe since SDA/SCL pin selection was removed via usermod --- usermods/INA219/Readme.md | 50 +++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/usermods/INA219/Readme.md b/usermods/INA219/Readme.md index 727c365321..0db6a27b09 100644 --- a/usermods/INA219/Readme.md +++ b/usermods/INA219/Readme.md @@ -13,17 +13,24 @@ This Usermod integrates the INA219 sensor with WLED to monitor energy consumptio ## Screenshots -| Info screen | Settings page | Home Assistant | -|------------------------------------------------|-----------------------------------------------------------------|------------------------------------------------------------| -| ![Info screen](./img/info.png "Info screen") | ![Settings page](./img/usermod_settings.png "Settings page") | ![Settings page](./img/homeassistant.png "Home Assistant") | + +### Info and Home Assistant + +| Info screen | Home Assistant | +|------------------------------------------------|----------------------------------------------------------------| +| ![Info screen](./img/info.png "Info screen") | ![Home Assistant](./img/homeassistant.png "Home Assistant") | + +### Settings - Pin Selection and Usermod + +| Settings page - Pin Selection | Settings page - Usermod | +|-----------------------------------------------------------------------------|--------------------------------------------------------------| +| ![Pin Selection](./img/usermod_settings_pins_selection.png "Pin Selection") | ![Settings page](./img/usermod_settings.png "Settings page") | ## Configuration Parameters | Parameter | Description | Default Value | Possible Values | |-------------------------------|------------------------------------------------------------|----------------|--------------------------------------------------------| | `INA219_ENABLED` | Enable or disable the INA219 Usermod | `false` | `true`, `false` | -| `INA219_SDA_PIN` | I2C data pin (SDA) | `8` | See options below for available GPIO pins. | -| `INA219_SCL_PIN` | I2C clock pin (SCL) | `9` | See options below for available GPIO pins. | | `INA219_I2C_ADDRESS` | I2C address of the INA219 sensor | `0x40` | See options below for available addresses. | | `INA219_CHECK_INTERVAL` | Interval for checking sensor values (seconds) | `5` | Any positive integer | | `INA219_CONVERSION_TIME` | ADC conversion time (12-bit, 16-bit, etc.) | `BIT_MODE_12` | See options below for available modes. | @@ -74,21 +81,6 @@ This Usermod integrates the INA219 sensor with WLED to monitor energy consumptio | `0x44` | 0x44 - A1 soldered | 0x44 | | `0x45` | 0x45 - A0 and A1 soldered | 0x45 | - ### Options for `INA219_SDA_PIN` and `INA219_SCL_PIN` - - The `SDA` and `SCL` pins can be set to any valid and unused GPIO pin, with defaults as follows: - - - **Default SDA Pin**: `8` - - **Default SCL Pin**: `9` - - Example GPIO pin values for configuration: - - | GPIO Pin | Description | - |----------|--------------| - | `8` | Default SDA | - | `9` | Default SCL | - | Other GPIO pins are available, depending on hardware. - ## Usage 1. Include this usermod in your WLED project by adding `#define USERMOD_INA219` to the `my_config.h` file. @@ -96,7 +88,6 @@ This Usermod integrates the INA219 sensor with WLED to monitor energy consumptio 2. **Dependencies** These libraries must be added under `lib_deps` in your `platformio.ini` (or `platform_override.ini`): - `wollewald/INA219_WE@~1.3.8` (by [wollewald](https://github.com/wollewald/INA219_WE)) - - `Wire` 3. Configure the parameters in the web interface or via the JSON config file. @@ -105,8 +96,6 @@ This Usermod integrates the INA219 sensor with WLED to monitor energy consumptio 5. Optional to predefine options: #define INA219_ENABLED false - #define INA219_SDA_PIN 8 - #define INA219_SCL_PIN 9 #define INA219_I2C_ADDRESS 0x40 #define INA219_CHECK_INTERVAL 5 #define INA219_CONVERSION_TIME BIT_MODE_12 @@ -127,6 +116,17 @@ To reset daily or monthly energy calculations, you can implement corresponding f ## Dependencies -Ensure you have the required libraries installed: +Before enabling the INA219 usermod, ensure the following requirements are met: + +### Required Library +- [INA219_WE](https://github.com/wollewald/INA219_WE) (Must be installed for INA219 support) + +### I2C Configuration (Mandatory) +The INA219 sensor communicates via I2C, so the SDA and SCL pins must be correctly set before enabling the usermod. + +1. Open the **WLED Web Interface**. +2. Go to **Settings → Usermod → Global I2C GPIOs (HW)**. +3. Select the appropriate **SDA** and **SCL** pins for your hardware. +4. Save the settings and **reboot WLED**. -- [INA219_WE](https://github.com/wollewald/INA219_WE) +🚀 **After rebooting, you can enable the INA219 usermod in the settings.** \ No newline at end of file From d44c1a7e470d3d5841b95ca1075b84d00f7bbfdd Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 1 Feb 2025 15:53:06 +0100 Subject: [PATCH 21/70] Delete usermods/INA219/img/usermod_settings_pins_selection.PNG --- .../img/usermod_settings_pins_selection.PNG | Bin 22995 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 usermods/INA219/img/usermod_settings_pins_selection.PNG diff --git a/usermods/INA219/img/usermod_settings_pins_selection.PNG b/usermods/INA219/img/usermod_settings_pins_selection.PNG deleted file mode 100644 index 7b20b0cde0357e7899148940fff69db1d8f25a98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22995 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 T)?M9!*K~SXMw+GScF+F{@MH^( From c4b4371844c1be1978040c36f798b50eccdadee8 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 1 Feb 2025 15:53:58 +0100 Subject: [PATCH 22/70] Fix PNG to png extension --- .../img/usermod_settings_pins_selection.png | Bin 0 -> 22995 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 usermods/INA219/img/usermod_settings_pins_selection.png diff --git a/usermods/INA219/img/usermod_settings_pins_selection.png b/usermods/INA219/img/usermod_settings_pins_selection.png new file mode 100644 index 0000000000000000000000000000000000000000..7b20b0cde0357e7899148940fff69db1d8f25a98 GIT binary patch literal 22995 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 T)?M9!*K~SXMw+GScF+F{@MH^( literal 0 HcmV?d00001 From 6a3195660d3518a9e608ce5aaa84ad0158bd1aa3 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 1 Feb 2025 16:02:21 +0100 Subject: [PATCH 23/70] Usage info for sda/scl --- usermods/INA219/Readme.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/usermods/INA219/Readme.md b/usermods/INA219/Readme.md index 0db6a27b09..3173c5351e 100644 --- a/usermods/INA219/Readme.md +++ b/usermods/INA219/Readme.md @@ -89,11 +89,13 @@ This Usermod integrates the INA219 sensor with WLED to monitor energy consumptio These libraries must be added under `lib_deps` in your `platformio.ini` (or `platform_override.ini`): - `wollewald/INA219_WE@~1.3.8` (by [wollewald](https://github.com/wollewald/INA219_WE)) -3. Configure the parameters in the web interface or via the JSON config file. +3. Setup SDA/SCL Pin - see at the readme bottom → ### I2C Configuration (Mandatory) -4. Monitor your energy consumption through the WLED interface or via MQTT. +4. Configure the parameters in the web interface or via the `my_config.h` file (see step 6). -5. Optional to predefine options: +5. Monitor your energy consumption through the WLED interface or via MQTT. + +6. Optional to predefine options: #define INA219_ENABLED false #define INA219_I2C_ADDRESS 0x40 From 70cf9accf45c71fdb1288959c2ec28bc5c23a29a Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 22 Feb 2025 14:58:08 +0100 Subject: [PATCH 24/70] Update const.h Solve for: This branch has conflicts that must be resolved --- wled00/const.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wled00/const.h b/wled00/const.h index b235cfa107..5e4b724d19 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -205,7 +205,8 @@ #define USERMOD_ID_PIXELS_DICE_TRAY 54 //Usermod "pixels_dice_tray.h" #define USERMOD_ID_DEEP_SLEEP 55 //Usermod "usermod_deep_sleep.h" #define USERMOD_ID_RF433 56 //Usermod "usermod_v2_RF433.h" -#define USERMOD_ID_INA219 57 // Usermod "usermod_ina219.h" +#define USERMOD_ID_BRIGHTNESS_FOLLOW_SUN 57 //Usermod "usermod_v2_brightness_follow_sun.h" +#define USERMOD_ID_INA219 58 // Usermod "usermod_ina219.h" //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot From a7dc6e9fc52df66ad638165348254cd1de422dd3 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 22 Feb 2025 17:30:56 +0100 Subject: [PATCH 25/70] Update usermods_list.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix missing pound in #endif. Line 504 has “endif” without a leading #. This is likely a small typographical mistake that can break compilation. --- wled00/usermods_list.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 9bf2369f48..9c44eb07f8 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -501,5 +501,5 @@ void registerUsermods() #ifdef USERMOD_INA219 UsermodManager::add(new UsermodINA219()); - endif + #endif } From a7dac9dc980cd35ee627fcf9e2bd90f817f0f7c2 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 22 Feb 2025 17:32:13 +0100 Subject: [PATCH 26/70] Update usermod_ina219.h Handle INA219 initialization failure more robustly. Currently, you only log "INA219 initialization failed!" if _ina219->init() fails. Consider disabling enabled or providing fallback logic to avoid subsequent read attempts on a failed initialization, preventing usage of a potentially invalid object. --- usermods/INA219/usermod_ina219.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index e5b8cf58c2..70037b4091 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -138,6 +138,7 @@ class UsermodINA219 : public Usermod { _ina219 = new INA219_WE(_i2cAddress); if (!_ina219->init()) { DEBUG_PRINTLN(F("INA219 initialization failed!")); + enabled = false; // Disable further sensor reads return; } _ina219->setShuntSizeInOhms(shuntResistor); @@ -674,4 +675,4 @@ class UsermodINA219 : public Usermod { } }; -const char UsermodINA219::_name[] PROGMEM = "INA219"; \ No newline at end of file +const char UsermodINA219::_name[] PROGMEM = "INA219"; From 8e19687978128fc775a0d688d262fb240ebcda8a Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 28 Feb 2025 21:48:55 +0100 Subject: [PATCH 27/70] Update usermods_list.cpp coderabbitai -> 502-504: Consider moving the registration to maintain alphabetical order. The registration code is correctly implemented but could be moved to maintain alphabetical order with other usermods (between INA226 and LD2410). --- wled00/usermods_list.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 9c44eb07f8..93cdb5e8ea 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -479,6 +479,10 @@ void registerUsermods() UsermodManager::add(new UsermodINA226()); #endif + #ifdef USERMOD_INA219 + UsermodManager::add(new UsermodINA219()); + #endif + #ifdef USERMOD_LD2410 UsermodManager::add(new LD2410Usermod()); #endif @@ -498,8 +502,4 @@ void registerUsermods() #ifdef USERMOD_BRIGHTNESS_FOLLOW_SUN UsermodManager::add(new UsermodBrightnessFollowSun()); #endif - - #ifdef USERMOD_INA219 - UsermodManager::add(new UsermodINA219()); - #endif } From 8a1a13bd282c8057959249354365fdbd31c77dea Mon Sep 17 00:00:00 2001 From: KrX3D Date: Mon, 3 Mar 2025 14:43:22 +0100 Subject: [PATCH 28/70] coderabbitai imprevments -> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 316-357: Add units to JSON keys for clarity. You produce JSON keys like "current", "power", etc. Consider including explicit suffixes (e.g., current_A, power_W) so end-consumers of the data are unambiguously aware of units. 423-475: Optimize sanitizeMqttClientID. The function handles character-by-character validations and transformations (lines 427-472). This logic works but can be simplified and made more maintainable by using a dictionary/map for replacements instead of large condition blocks. This reduces complexity and potential off-by-one errors. 365-413: Check for potential naming collisions in MQTT topics. When creating Home Assistant sensors, the unique_id is built from mqttClientID and replaces spaces with hyphens. Ensure that collisions won’t occur if multiple devices share similar names or if character replacements become identical. Adding additional uniqueness factors like _i2cAddress might help. 424-476: Remove or clarify leftover commented-out code. Multiple lines (e.g., 435, 438, 442, 446, 450, 454, 458, 459) contain references to extended replacements (“ue”, “oe”, “ss”) that are now commented out. Unless these are intentionally kept for later reference, removing them will reduce confusion and improve readability. 634-668: Guard against invalid intervals in config. Your fallback handling in lines 643–647 helps avoid invalid intervals, but consider logging a message or storing an error code if check_interval is out of range. This ensures end users can diagnose misconfigurations quickly. --- usermods/INA219/usermod_ina219.h | 372 ++++++++++++++----------------- 1 file changed, 172 insertions(+), 200 deletions(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index 70037b4091..474dc6abef 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -4,50 +4,43 @@ // Enabled setting #ifndef INA219_ENABLED - #define INA219_ENABLED false // Default disabled value + #define INA219_ENABLED false // Default disabled value #endif -// I2C Address (default is 0x40 if not defined) #ifndef INA219_I2C_ADDRESS - #define INA219_I2C_ADDRESS 0x40 // Default I2C address + #define INA219_I2C_ADDRESS 0x40 // Default I2C address #endif -// Check Interval (in seconds, default 5 seconds if not defined) #ifndef INA219_CHECK_INTERVAL - #define INA219_CHECK_INTERVAL 5 // Default 5 seconds + #define INA219_CHECK_INTERVAL 5 // Default 5 seconds (will be converted to ms) #endif -// Conversion Time (default to 12-bit resolution) #ifndef INA219_CONVERSION_TIME - #define INA219_CONVERSION_TIME BIT_MODE_12 // Default 12-bit resolution + #define INA219_CONVERSION_TIME BIT_MODE_12 // Conversion Time, Default 12-bit resolution #endif -// Decimal factor for current/power readings (default to 3 decimal places) #ifndef INA219_DECIMAL_FACTOR - #define INA219_DECIMAL_FACTOR 3 // Default 3 decimal places + #define INA219_DECIMAL_FACTOR 3 // Decimal factor for current/power readings. Default 3 decimal places #endif -// Shunt Resistor value (default to 0.1 ohms) #ifndef INA219_SHUNT_RESISTOR - #define INA219_SHUNT_RESISTOR 0.1 // Default 0.1 ohms + #define INA219_SHUNT_RESISTOR 0.1 // Shunt Resistor value. Default 0.1 ohms #endif -// Correction factor (default to 1.0) #ifndef INA219_CORRECTION_FACTOR - #define INA219_CORRECTION_FACTOR 1.0 // Default correction factor + #define INA219_CORRECTION_FACTOR 1.0 // Default correction factor. Default 1.0 #endif -// MQTT Publish Settings #ifndef INA219_MQTT_PUBLISH - #define INA219_MQTT_PUBLISH false // Default: false (do not publish to MQTT) + #define INA219_MQTT_PUBLISH false // Default: do not publish to MQTT #endif #ifndef INA219_MQTT_PUBLISH_ALWAYS - #define INA219_MQTT_PUBLISH_ALWAYS false // Default: false (only publish changes) + #define INA219_MQTT_PUBLISH_ALWAYS false // Default: only publish on change #endif #ifndef INA219_HA_DISCOVERY - #define INA219_HA_DISCOVERY false // Default: false (Home Assistant discovery disabled) + #define INA219_HA_DISCOVERY false // Default: Home Assistant discovery disabled #endif #include "wled.h" @@ -57,15 +50,15 @@ class UsermodINA219 : public Usermod { private: static const char _name[]; // Name of the usermod - bool initDone = false; // Flag to check if initialization is complete - unsigned long lastCheck = 0; // Timestamp for the last check + bool initDone = false; // Flag for successful initialization + unsigned long lastCheck = 0; // Timestamp for the last check // Define the variables using the pre-defined or default values bool enabled = INA219_ENABLED; uint8_t _i2cAddress = INA219_I2C_ADDRESS; uint16_t _checkInterval = INA219_CHECK_INTERVAL; - uint16_t checkInterval = _checkInterval * 1000; // Convert to milliseconds - INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); // Cast from int + uint16_t checkInterval = _checkInterval * 1000; // Convert seconds to milliseconds + INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; float shuntResistor = INA219_SHUNT_RESISTOR; float correctionFactor = INA219_CORRECTION_FACTOR; @@ -85,7 +78,7 @@ class UsermodINA219 : public Usermod { float loadVoltage = 0; bool overflow = false; - //Last sent variables + // Last sent variables float last_sent_shuntVoltage = 0; float last_sent_busVoltage = 0; float last_sent_loadVoltage = 0; @@ -101,8 +94,8 @@ class UsermodINA219 : public Usermod { unsigned long lastPublishTime = 0; // Track the last publish time // Variables to store last reset timestamps - unsigned long dailyResetTime = 0; // Reset time in seconds - unsigned long monthlyResetTime = 0; // Reset time in seconds + unsigned long dailyResetTime = 0; + unsigned long monthlyResetTime = 0; // Variables to track last sent readings float _lastCurrentSent = 0; @@ -114,18 +107,21 @@ class UsermodINA219 : public Usermod { // Function to truncate decimals based on the configured decimal factor float truncateDecimals(float val) { - // If _decimalFactor is 0, round to the nearest whole number if (_decimalFactor == 0) { - return roundf(val); + return roundf(val); } - // For decimal factors 1 and above, round to the appropriate number of decimal places - float factor = pow(10, _decimalFactor); + float factor = pow(10, _decimalFactor); return roundf(val * factor) / factor; } - // Function to update INA219 settings + // Update INA219 settings and reinitialize sensor if necessary void updateINA219Settings() { - if (i2c_scl<0 || i2c_sda<0) { enabled = false; return; } + // Validate I2C pins; if invalid, disable usermod and log message + if (i2c_scl < 0 || i2c_sda < 0) { + enabled = false; + DEBUG_PRINTLN(F("INA219 disabled: Invalid I2C pins. Check global I2C settings.")); + return; + } DEBUG_PRINT(F("Using I2C SDA: ")); DEBUG_PRINTLN(i2c_sda); DEBUG_PRINT(F("Using I2C SCL: ")); @@ -136,9 +132,10 @@ class UsermodINA219 : public Usermod { delete _ina219; } _ina219 = new INA219_WE(_i2cAddress); + if (!_ina219->init()) { DEBUG_PRINTLN(F("INA219 initialization failed!")); - enabled = false; // Disable further sensor reads + enabled = false; return; } _ina219->setShuntSizeInOhms(shuntResistor); @@ -147,14 +144,14 @@ class UsermodINA219 : public Usermod { } public: - // Destructor to clean up the INA219 object + // Destructor to clean up INA219 object ~UsermodINA219() { delete _ina219; _ina219 = nullptr; } // Setup function called once on boot or restart - void setup() override { + void setup() override { updateINA219Settings(); // Configure INA219 settings initDone = true; // Mark initialization as complete } @@ -163,24 +160,24 @@ class UsermodINA219 : public Usermod { void loop() override { // Check if the usermod is enabled and the check interval has elapsed if (enabled && millis() - lastCheck > checkInterval) { - lastCheck = millis(); // Update last check timestamp + lastCheck = millis(); - // Read sensor values + // Fetch sensor data shuntVoltage = truncateDecimals(_ina219->getShuntVoltage_mV()); busVoltage = truncateDecimals(_ina219->getBusVoltage_V()); current_mA = truncateDecimals(_ina219->getCurrent_mA()); - current = truncateDecimals(_ina219->getCurrent_mA() / 1000.0); // Convert from mA to A + current = truncateDecimals(_ina219->getCurrent_mA() / 1000.0); // Convert from mA to A power_mW = truncateDecimals(_ina219->getBusPower()); - power = truncateDecimals(_ina219->getBusPower() / 1000.0); // Convert from mW to W + power = truncateDecimals(_ina219->getBusPower() / 1000.0); // Convert from mW to W loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); overflow = truncateDecimals(_ina219->getOverflow()); - // Update energy values based on power for this duration + // Update energy consumption updateEnergy(power, lastCheck - lastPublishTime); - lastPublishTime = lastCheck; // Update last publish time + lastPublishTime = lastCheck; - #ifndef WLED_DISABLE_MQTT - // Publish to MQTT if enabled + #ifndef WLED_DISABLE_MQTT + // Publish sensor data via MQTT if connected and enabled if (WLED_MQTT_CONNECTED) { if (mqttPublish) { if (mqttPublishAlways || hasValueChanged()) { @@ -199,34 +196,31 @@ class UsermodINA219 : public Usermod { } } else if (!mqttPublish && mqttPublishSent) { char sensorTopic[128]; - snprintf_P(sensorTopic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Discovery config topic for each sensor + snprintf_P(sensorTopic, 127, "%s/sensor/ina219", mqttDeviceTopic); - // Publish an empty message with retain to delete the sensor from Home Assistant + // Publishing an empty retained message to delete the sensor from Home Assistant mqtt->publish(sensorTopic, 0, true, ""); - mqttPublishSent = false; } } - // Optionally publish to Home Assistant via MQTT discovery + // Publish Home Assistant discovery data if enabled if (haDiscovery && !haDiscoverySent) { if (WLED_MQTT_CONNECTED) { char topic[128]; - snprintf_P(topic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Common topic for all INA219 data + snprintf_P(topic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Common topic for all INA219 data - mqttCreateHassSensor(F("Current"), topic, F("current"), F("A"), F("current"), F("sensor")); + mqttCreateHassSensor(F("Current"), topic, F("current"), F("A"), F("current_A"), F("sensor")); mqttCreateHassSensor(F("Voltage"), topic, F("voltage"), F("V"), F("bus_voltage_V"), F("sensor")); - mqttCreateHassSensor(F("Power"), topic, F("power"), F("W"), F("power"), F("sensor")); + mqttCreateHassSensor(F("Power"), topic, F("power"), F("W"), F("power_W"), F("sensor")); mqttCreateHassSensor(F("Shunt Voltage"), topic, F("voltage"), F("mV"), F("shunt_voltage_mV"), F("sensor")); mqttCreateHassSensor(F("Shunt Resistor"), topic, F(""), F("Ω"), F("shunt_resistor_Ohms"), F("sensor")); - //mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("binary_sensor")); //Binary Sensor does not show value in Home Assistant, so switching to sensor mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("sensor")); mqttCreateHassSensor(F("Daily Energy"), topic, F("energy"), F("kWh"), F("daily_energy_kWh"), F("sensor")); mqttCreateHassSensor(F("Monthly Energy"), topic, F("energy"), F("kWh"), F("monthly_energy_kWh"), F("sensor")); mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); - // Mark as sent to avoid repeating - haDiscoverySent = true; + haDiscoverySent = true; // Mark as sent to avoid repeating } } else if (!haDiscovery && haDiscoverySent) { if (WLED_MQTT_CONNECTED) { @@ -234,16 +228,14 @@ class UsermodINA219 : public Usermod { mqttRemoveHassSensor(F("Current"), F("sensor")); mqttRemoveHassSensor(F("Voltage"), F("sensor")); mqttRemoveHassSensor(F("Power"), F("sensor")); - mqttRemoveHassSensor(F("Shunt-Voltage"), F("sensor")); - mqttRemoveHassSensor(F("Daily-Energy"), F("sensor")); - mqttRemoveHassSensor(F("Monthly-Energy"), F("sensor")); - mqttRemoveHassSensor(F("Total-Energy"), F("sensor")); - mqttRemoveHassSensor(F("Shunt-Resistor"), F("sensor")); - //mqttRemoveHassSensor(F("Overflow"), F("binary_sensor")); + mqttRemoveHassSensor(F("Shunt Voltage"), F("sensor")); + mqttRemoveHassSensor(F("Daily Energy"), F("sensor")); + mqttRemoveHassSensor(F("Monthly Energy"), F("sensor")); + mqttRemoveHassSensor(F("Total Energy"), F("sensor")); + mqttRemoveHassSensor(F("Shunt Resistor"), F("sensor")); mqttRemoveHassSensor(F("Overflow"), F("sensor")); - // Mark as sent to avoid repeating - haDiscoverySent = false; + haDiscoverySent = false; // Mark as sent to avoid repeating } } #endif @@ -296,7 +288,7 @@ class UsermodINA219 : public Usermod { } /** - ** Subscribe to MQTT topic for controlling usermod + ** Subscribe to MQTT topic for controlling the usermod **/ void onMqttConnect(bool sessionPresent) override { if (!enabled) return; @@ -324,30 +316,28 @@ class UsermodINA219 : public Usermod { StaticJsonDocument<1024> jsonDoc; // Populate the JSON document with sensor readings - jsonDoc["shunt_voltage_mV"] = shuntVoltage; // Shunt voltage in millivolts - jsonDoc["bus_voltage_V"] = busVoltage; // Bus voltage in volts - jsonDoc["load_voltage_V"] = loadVoltage; // Load voltage in volts - jsonDoc["current"] = current; // Current in unspecified units - jsonDoc["current_mA"] = current_mA; // Current in milliamperes - jsonDoc["power"] = power; // Power in unspecified units - jsonDoc["power_mW"] = power_mW; // Power in milliwatts - jsonDoc["overflow"] = overflow; // Overflow status (true/false) - //jsonDoc["overflow"] = overflow ? "on" : "off"; - jsonDoc["shunt_resistor_Ohms"] = shuntResistor; // Shunt resistor value in Ohms + jsonDoc["shunt_voltage_mV"] = shuntVoltage; + jsonDoc["bus_voltage_V"] = busVoltage; + jsonDoc["load_voltage_V"] = loadVoltage; + jsonDoc["current_A"] = current; + jsonDoc["current_mA"] = current_mA; + jsonDoc["power_W"] = power; + jsonDoc["power_mW"] = power_mW; + jsonDoc["overflow"] = overflow; + jsonDoc["shunt_resistor_Ohms"] = shuntResistor; // Energy calculations - jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; // Daily energy in kilowatt-hours - jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; // Monthly energy in kilowatt-hours - jsonDoc["total_energy_kWh"] = totalEnergy_kWh; // Total energy in kilowatt-hours + jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; + jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; + jsonDoc["total_energy_kWh"] = totalEnergy_kWh; // Reset timestamps - jsonDoc["dailyResetTime"] = dailyResetTime; // Timestamp of the last daily reset - jsonDoc["monthlyResetTime"] = monthlyResetTime; // Timestamp of the last monthly reset + jsonDoc["dailyResetTime"] = dailyResetTime; + jsonDoc["monthlyResetTime"] = monthlyResetTime; // Serialize the JSON document into a character buffer char buffer[1024]; - size_t payload_size; - payload_size = serializeJson(jsonDoc, buffer); + size_t payload_size = serializeJson(jsonDoc, buffer); // Construct the MQTT topic using the device topic char topic[128]; @@ -365,44 +355,43 @@ class UsermodINA219 : public Usermod { void mqttCreateHassSensor(const String &name, const String &topic, const String &deviceClass, const String &unitOfMeasurement, const String &jsonKey, const String &SensorType) { - // Sanitize the name by replacing spaces with hyphens String sanitizedName = name; sanitizedName.replace(' ', '-'); String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); + sanitizedMqttClientID += "-" + String(escapedMac.c_str()); // Create a JSON document for the sensor configuration StaticJsonDocument<1024> doc; // Populate the JSON document with sensor configuration details - doc[F("name")] = name; // Sensor name - doc[F("state_topic")] = topic; // Topic for sensor state - doc[F("unique_id")] = String(sanitizedMqttClientID) + "-" + sanitizedName; // Unique ID for the sensor + doc[F("name")] = name; + doc[F("state_topic")] = topic; + doc[F("unique_id")] = String(sanitizedMqttClientID) + "-" + sanitizedName; // Template to extract specific value from JSON - doc[F("value_template")] = String("{{ value_json.") + jsonKey + String(" }}"); + doc[F("value_template")] = String("{{ value_json.") + jsonKey + String(" }}"); if (unitOfMeasurement != "") - doc[F("unit_of_measurement")] = unitOfMeasurement; // Optional unit of measurement + doc[F("unit_of_measurement")] = unitOfMeasurement; if (deviceClass != "") - doc[F("device_class")] = deviceClass; // Optional device class + doc[F("device_class")] = deviceClass; if (SensorType != "binary_sensor") - doc[F("expire_after")] = 1800; // Expiration time for non-binary sensors + doc[F("expire_after")] = 1800; // Device details nested object JsonObject device = doc.createNestedObject(F("device")); - device[F("name")] = serverDescription; // Server description as device name - device[F("identifiers")] = "wled-sensor-" + String(sanitizedMqttClientID); // Unique identifier for the device - device[F("manufacturer")] = F(WLED_BRAND); // Manufacturer name - device[F("model")] = F(WLED_PRODUCT_NAME); // Product model name - device[F("sw_version")] = versionString; // Software version + device[F("name")] = serverDescription; + device[F("identifiers")] = "wled-sensor-" + String(sanitizedMqttClientID); + device[F("manufacturer")] = F(WLED_BRAND); + device[F("model")] = F(WLED_PRODUCT_NAME); + device[F("sw_version")] = versionString; // Serialize the JSON document into a temporary string char buffer[1024]; - size_t payload_size; - payload_size = serializeJson(doc, buffer); + size_t payload_size = serializeJson(doc, buffer); char topic_S[128]; - snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType, sanitizedMqttClientID, sanitizedName); + snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType, sanitizedMqttClientID.c_str(), sanitizedName.c_str()); // Debug output for the Home Assistant topic and configuration DEBUG_PRINTLN(topic_S); @@ -413,105 +402,92 @@ class UsermodINA219 : public Usermod { } void mqttRemoveHassSensor(const String &name, const String &SensorType) { + String sanitizedName = name; + sanitizedName.replace(' ', '-'); + + String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); + sanitizedMqttClientID += "-" + String(escapedMac.c_str()); + char sensorTopic[128]; - snprintf_P(sensorTopic, 127, "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizeMqttClientID(mqttClientID).c_str(), name.c_str()); // Discovery config topic for each sensor + snprintf_P(sensorTopic, 127, "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); // Publish an empty message with retain to delete the sensor from Home Assistant mqtt->publish(sensorTopic, 0, true, ""); } - - // Function to sanitize the mqttClientID with nicer replacements + + // Sanitize the mqttClientID by replacing invalid characters. String sanitizeMqttClientID(const String &clientID) { String sanitizedID; - // Loop through the string for (unsigned int i = 0; i < clientID.length(); i++) { - char c = clientID[i]; // Get the character directly + char c = clientID[i]; - // Handle specific cases for accented letters using byte values + // Handle common accented characters using simple mapping if (c == '\xC3' && i + 1 < clientID.length()) { - if (clientID[i + 1] == '\xBC') { // ü - //sanitizedID += "ue"; // Replace ü with ue - sanitizedID += "u"; // Replace ü with ue - i++; // Skip the next byte - } else if (clientID[i + 1] == '\x9C') { // Ü - //sanitizedID += "Ue"; // Replace Ü with Ue - sanitizedID += "U"; // Replace Ü with Ue - i++; // Skip the next byte - } else if (clientID[i + 1] == '\xA4') { // ä - //sanitizedID += "ae"; // Replace ä with ae - sanitizedID += "a"; // Replace ä with ae - i++; // Skip the next byte - } else if (clientID[i + 1] == '\xC4') { // Ä - //sanitizedID += "Ae"; // Replace Ä with Ae - sanitizedID += "A"; // Replace Ä with Ae - i++; // Skip the next byte - } else if (clientID[i + 1] == '\xB6') { // ö - //sanitizedID += "oe"; // Replace ö with oe - sanitizedID += "o"; // Replace ö with oe - i++; // Skip the next byte - } else if (clientID[i + 1] == '\xD6') { // Ö - //sanitizedID += "Oe"; // Replace Ö with Oe - sanitizedID += "O"; // Replace Ö with Oe - i++; // Skip the next byte - } else if (clientID[i + 1] == '\x9F') { // ß - //sanitizedID += "ss"; // Replace ß with ss - sanitizedID += "s"; // Replace ß with ss - i++; // Skip the next byte + char next = clientID[i + 1]; + if (next == '\xBC' || next == '\x9C') { // ü or Ü + sanitizedID += (next == '\xBC' ? "u" : "U"); + i++; + continue; + } else if (next == '\xA4' || next == '\xC4') { // ä or Ä + sanitizedID += (next == '\xA4' ? "a" : "A"); + i++; + continue; + } else if (next == '\xB6' || next == '\xD6') { // ö or Ö + sanitizedID += (next == '\xB6' ? "o" : "O"); + i++; + continue; + } else if (next == '\x9F') { // ß + sanitizedID += "s"; + i++; + continue; } } // Allow valid characters [a-zA-Z0-9_-] - else if ((c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (c >= '0' && c <= '9') || + if ((c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || c == '-' || c == '_') { - sanitizedID += c; // Directly append valid characters - } - // Replace any other invalid character with an underscore - else { - sanitizedID += '_'; // Replace invalid character with underscore + sanitizedID += c; + } else { // Replace any other invalid character with an underscore + sanitizedID += '_'; } } - return sanitizedID; // Return the sanitized client ID + return sanitizedID; } /** ** Function to update energy calculations based on power and duration **/ void updateEnergy(float power, unsigned long durationMs) { - // Convert duration from milliseconds to hours - float durationHours = durationMs / 3600000.0; - - // Convert power from watts to kilowatt-hours (kWh) - float energy_kWh = (power / 1000.0) * durationHours; - - // Update total energy consumed - totalEnergy_kWh += energy_kWh; - - // Update daily energy consumption - if (dailyResetTime >= 86400) { // 86400 seconds = 24 hours - dailyEnergy_kWh = 0; // Reset daily energy to zero - dailyResetTime = 0; // Reset daily reset time to zero + float durationHours = durationMs / 3600000.0; // Milliseconds to hours + float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) + totalEnergy_kWh += energy_kWh; // Update total energy consumed + + // Reset daily energy if 86400 seconds (24 hours) elapsed. + if (dailyResetTime >= 86400UL) { + dailyEnergy_kWh = 0; + dailyResetTime = 0; } - dailyEnergy_kWh += energy_kWh; // Add to daily energy - dailyResetTime += durationMs / 1000; // Increment daily reset time in seconds + dailyEnergy_kWh += energy_kWh; + dailyResetTime += durationMs / 1000; - // Update monthly energy consumption - if (monthlyResetTime >= 2592000) { // 2592000 seconds = 30 days - monthlyEnergy_kWh = 0; // Reset monthly energy to zero - monthlyResetTime = 0; // Reset monthly reset time to zero + // Reset monthly energy if 2592000 seconds (30 days) elapsed. + if (monthlyResetTime >= 2592000UL) { + monthlyEnergy_kWh = 0; + monthlyResetTime = 0; } - monthlyEnergy_kWh += energy_kWh; // Add to monthly energy - monthlyResetTime += durationMs / 1000; // Increment monthly reset time in seconds + monthlyEnergy_kWh += energy_kWh; + monthlyResetTime += durationMs / 1000; } /** - ** Function to add energy consumption data to a JSON object for reporting + ** Add energy consumption data to a JSON object for reporting **/ void addToJsonInfo(JsonObject &root) { JsonObject user = root[F("u")]; if (user.isNull()) { - user = root.createNestedObject(F("u")); // Create a nested object for user data + user = root.createNestedObject(F("u")); } // Create a nested array for energy data @@ -520,37 +496,36 @@ class UsermodINA219 : public Usermod { JsonArray energy_json = user.createNestedArray(F("Energy Consumption:")); if (!enabled) { - energy_json.add(F("disabled")); // Indicate that the module is disabled - } else { + energy_json.add(F("disabled")); + } else { // Create a nested array for daily energy JsonArray dailyEnergy_json = user.createNestedArray(F("Daily Energy")); - dailyEnergy_json.add(dailyEnergy_kWh); // Add daily energy in kWh - dailyEnergy_json.add(F(" kWh")); // Add unit of measurement + dailyEnergy_json.add(dailyEnergy_kWh); + dailyEnergy_json.add(F(" kWh")); // Create a nested array for monthly energy JsonArray monthlyEnergy_json = user.createNestedArray(F("Monthly Energy")); - monthlyEnergy_json.add(monthlyEnergy_kWh); // Add monthly energy in kWh - monthlyEnergy_json.add(F(" kWh")); // Add unit of measurement + monthlyEnergy_json.add(monthlyEnergy_kWh); + monthlyEnergy_json.add(F(" kWh")); // Create a nested array for total energy JsonArray totalEnergy_json = user.createNestedArray(F("Total Energy")); - totalEnergy_json.add(totalEnergy_kWh); // Add total energy in kWh - totalEnergy_json.add(F(" kWh")); // Add unit of measurement + totalEnergy_json.add(totalEnergy_kWh); + totalEnergy_json.add(F(" kWh")); } } /** - ** Function to add the current state of energy consumption to a JSON object + ** Add the current state of energy consumption to a JSON object **/ void addToJsonState(JsonObject& root) override { - if (!initDone) return; // Prevent crashes on boot if initialization is not done + if (!initDone) return; JsonObject usermod = root[FPSTR(_name)]; if (usermod.isNull()) { - usermod = root.createNestedObject(FPSTR(_name)); // Create nested object for the usermod + usermod = root.createNestedObject(FPSTR(_name)); } - // Add energy consumption data to the usermod JSON object usermod["totalEnergy_kWh"] = totalEnergy_kWh; usermod["dailyEnergy_kWh"] = dailyEnergy_kWh; usermod["monthlyEnergy_kWh"] = monthlyEnergy_kWh; @@ -559,7 +534,7 @@ class UsermodINA219 : public Usermod { } /** - ** Function to read energy consumption data from a JSON object + ** Read energy consumption data from a JSON object **/ void readFromJsonState(JsonObject& root) override { if (!initDone) return; // Prevent crashes on boot if initialization is not done @@ -576,16 +551,16 @@ class UsermodINA219 : public Usermod { } /** - ** Function to handle settings in the Usermod menu + ** Append configuration options to the Usermod menu. **/ void addToConfig(JsonObject& root) override { - JsonObject top = root.createNestedObject(F("INA219")); // Create nested object for INA219 settings - top["Enabled"] = enabled; // Store enabled status - top["i2c_address"] = static_cast(_i2cAddress); // Store I2C address - top["check_interval"] = checkInterval / 1000; // Store check interval in seconds - top["conversion_time"] = conversionTime; // Store conversion time - top["decimals"] = _decimalFactor; // Store decimal factor - top["shunt_resistor"] = shuntResistor; // Store shunt resistor value + JsonObject top = root.createNestedObject(F("INA219")); + top["Enabled"] = enabled; + top["i2c_address"] = static_cast(_i2cAddress); + top["check_interval"] = checkInterval / 1000; + top["conversion_time"] = conversionTime; + top["decimals"] = _decimalFactor; + top["shunt_resistor"] = shuntResistor; #ifndef WLED_DISABLE_MQTT // Store MQTT settings if MQTT is not disabled @@ -596,12 +571,12 @@ class UsermodINA219 : public Usermod { } /** - ** Function to append configuration options to the Usermod menu + ** Append configuration UI data for the usermod menu. **/ void appendConfigData() override { // Append the dropdown for I2C address selection oappend(F("dd=addDropdown('INA219','i2c_address');")); - oappend(F("addOption(dd,'0x40 - Default',0x40, true);")); // Default option + oappend(F("addOption(dd,'0x40 - Default',0x40, true);")); oappend(F("addOption(dd,'0x41 - A0 soldered',0x41);")); oappend(F("addOption(dd,'0x44 - A1 soldered',0x44);")); oappend(F("addOption(dd,'0x45 - A0 and A1 soldered',0x45);")); @@ -611,7 +586,7 @@ class UsermodINA219 : public Usermod { oappend("addOption(ct,'9-Bit (84 µs)',0);"); oappend("addOption(ct,'10-Bit (148 µs)',1);"); oappend("addOption(ct,'11-Bit (276 µs)',2);"); - oappend("addOption(ct,'12-Bit (532 µs)',3, true);"); // Default option + oappend("addOption(ct,'12-Bit (532 µs)',3, true);"); oappend("addOption(ct,'2 samples (1.06 ms)',9);"); oappend("addOption(ct,'4 samples (2.13 ms)',10);"); oappend("addOption(ct,'8 samples (4.26 ms)',11);"); @@ -623,33 +598,30 @@ class UsermodINA219 : public Usermod { // Append the dropdown for decimal precision (0 to 10) oappend(F("df=addDropdown('INA219','decimals');")); for (int i = 0; i <= 3; i++) { - oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); // Default to 2 decimals + oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); } } /** - ** Function to read settings from the Usermod menu configuration + ** Read settings from the Usermod menu configuration **/ bool readFromConfig(JsonObject& root) override { JsonObject top = root[FPSTR(_name)]; - bool configComplete = !top.isNull(); // Check if the configuration exists - - // Read configuration values and update local variables + bool configComplete = !top.isNull(); configComplete &= getJsonValue(top["Enabled"], enabled); configComplete &= getJsonValue(top[F("i2c_address")], _i2cAddress); - // Read check interval and convert to milliseconds if necessary if (getJsonValue(top[F("check_interval")], checkInterval)) { - if (1 <= checkInterval && checkInterval <= 600) - checkInterval *= 1000; // Convert seconds to milliseconds - else - checkInterval = _checkInterval * 1000; // Fallback to defined value + if (1 <= checkInterval && checkInterval <= 600) { + checkInterval *= 1000; + } else { + DEBUG_PRINTLN(F("INA219: Invalid check_interval value; using default.")); + checkInterval = _checkInterval * 1000; + } } else { - configComplete = false; // Configuration is incomplete + configComplete = false; } - - // Read other configuration values configComplete &= getJsonValue(top["conversion_time"], conversionTime); configComplete &= getJsonValue(top["decimals"], _decimalFactor); configComplete &= getJsonValue(top["shunt_resistor"], shuntResistor); @@ -662,16 +634,16 @@ class UsermodINA219 : public Usermod { haDiscoverySent = !haDiscovery; #endif - updateINA219Settings(); // Apply any updated settings to the INA219 + updateINA219Settings(); - return configComplete; // Return whether the configuration was complete + return configComplete; } /** - ** Function to get the unique identifier for this usermod + ** Get the unique identifier for this usermod. **/ uint16_t getId() override { - return USERMOD_ID_INA219; // Return the unique identifier for the INA219 usermod + return USERMOD_ID_INA219; } }; From 3f8822ff296f262bedc3daa88e903ab5a0815bf2 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Mon, 3 Mar 2025 15:20:59 +0100 Subject: [PATCH 29/70] coderabbitai -> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ⚠️ Potential issue Avoid casting float to bool for overflow checks. The call to truncateDecimals(_ina219->getOverflow()) returns a float, which is then implicitly converted to bool. If the library returns non-integer values, this could cause unexpected results. For clarity and correctness, consider: - overflow = truncateDecimals(_ina219->getOverflow()); + overflow = _ina219->getOverflow() != 0; --- usermods/INA219/usermod_ina219.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/usermod_ina219.h index 474dc6abef..3ae8770791 100644 --- a/usermods/INA219/usermod_ina219.h +++ b/usermods/INA219/usermod_ina219.h @@ -170,7 +170,7 @@ class UsermodINA219 : public Usermod { power_mW = truncateDecimals(_ina219->getBusPower()); power = truncateDecimals(_ina219->getBusPower() / 1000.0); // Convert from mW to W loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); - overflow = truncateDecimals(_ina219->getOverflow()); + overflow = _ina219->getOverflow() != 0; // Update energy consumption updateEnergy(power, lastCheck - lastPublishTime); From 501b9c4e079952bea4c0c10f1aa679ef047559ea Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 18 Apr 2025 23:51:35 +0200 Subject: [PATCH 30/70] readme update, picture update --- usermods/INA219/Readme.md | 34 ++++++++++++------------ usermods/INA219/img/INA219-Pin-Outs.png | Bin 0 -> 14878 bytes usermods/INA219/img/homeassistant.png | Bin 20513 -> 57528 bytes usermods/INA219/library.json | 6 +++++ 4 files changed, 23 insertions(+), 17 deletions(-) create mode 100644 usermods/INA219/img/INA219-Pin-Outs.png create mode 100644 usermods/INA219/library.json diff --git a/usermods/INA219/Readme.md b/usermods/INA219/Readme.md index 3173c5351e..af100c9a32 100644 --- a/usermods/INA219/Readme.md +++ b/usermods/INA219/Readme.md @@ -7,7 +7,7 @@ This Usermod integrates the INA219 sensor with WLED to monitor energy consumptio - Monitors bus voltage, shunt voltage, current, and power. - Calculates total energy consumed in kilowatt-hours (kWh). - Supports MQTT publishing of sensor data. -- Publishes energy data to Home Assistant for easy integration. +- Publishes energy data to Home Assistant directly to the WLED entitie for easy integration. - Displays daily, monthly and total energy used in the WLED GUI under the info section. - Configurable through WLED's web interface. @@ -81,21 +81,28 @@ This Usermod integrates the INA219 sensor with WLED to monitor energy consumptio | `0x44` | 0x44 - A1 soldered | 0x44 | | `0x45` | 0x45 - A0 and A1 soldered | 0x45 | -## Usage +## Installation + +Add the compile-time option `-D USERMOD_INA219` to your `platformio.ini` (or `platformio_override.ini`) or use `#define USERMOD_INA219` in `my_config.h`. -1. Include this usermod in your WLED project by adding `#define USERMOD_INA219` to the `my_config.h` file. +# Compiling -2. **Dependencies** - These libraries must be added under `lib_deps` in your `platformio.ini` (or `platform_override.ini`): - - `wollewald/INA219_WE@~1.3.8` (by [wollewald](https://github.com/wollewald/INA219_WE)) +To enable, add `INA219_v2` to your `custom_usermods` (e.g. in `platformio_override.ini`) +```ini +[env:usermod_ina219_d1_mini] +extends = env:d1_mini +custom_usermods = ${env:d1_mini.custom_usermods} INA219_v2 +``` + +## Usage -3. Setup SDA/SCL Pin - see at the readme bottom → ### I2C Configuration (Mandatory) +1. Setup SDA/SCL Pin - see at the readme bottom → ### I2C Configuration (Mandatory) -4. Configure the parameters in the web interface or via the `my_config.h` file (see step 6). +2. Configure the parameters in the web interface or via the `my_config.h` file (see step 4). -5. Monitor your energy consumption through the WLED interface or via MQTT. +3. Monitor your energy consumption through the WLED interface or via MQTT. -6. Optional to predefine options: +4. Optional to predefine options: #define INA219_ENABLED false #define INA219_I2C_ADDRESS 0x40 @@ -116,13 +123,6 @@ This Usermod integrates the INA219 sensor with WLED to monitor energy consumptio To reset daily or monthly energy calculations, you can implement corresponding functions within your main application. -## Dependencies - -Before enabling the INA219 usermod, ensure the following requirements are met: - -### Required Library -- [INA219_WE](https://github.com/wollewald/INA219_WE) (Must be installed for INA219 support) - ### I2C Configuration (Mandatory) The INA219 sensor communicates via I2C, so the SDA and SCL pins must be correctly set before enabling the usermod. diff --git a/usermods/INA219/img/INA219-Pin-Outs.png b/usermods/INA219/img/INA219-Pin-Outs.png new file mode 100644 index 0000000000000000000000000000000000000000..a32d06245ec77142fd88fa1b275a1430859fe65e GIT binary patch literal 14878 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 literal 0 HcmV?d00001 diff --git a/usermods/INA219/img/homeassistant.png b/usermods/INA219/img/homeassistant.png index 64259fc511216fdb67f39859fcc4e93d577c2051..73f19add270da0c3d76ee2396069611142770104 100644 GIT binary patch literal 57528 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⋙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 y*6L$~$z#u~H@vHC!Ek~1syn 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 diff --git a/usermods/INA219/library.json b/usermods/INA219/library.json new file mode 100644 index 0000000000..e2734ebcbb --- /dev/null +++ b/usermods/INA219/library.json @@ -0,0 +1,6 @@ +{ + "name": "INA219_v2", + "dependencies": { + "wollewald/INA219_WE":"~1.3.8" + } +} \ No newline at end of file From 37ef64267b41069ab13897bb5f979619282e944f Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 18 Apr 2025 23:53:05 +0200 Subject: [PATCH 31/70] changed .h to .cpp --- usermods/INA219/{usermod_ina219.h => INA219_v2.cpp} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename usermods/INA219/{usermod_ina219.h => INA219_v2.cpp} (100%) diff --git a/usermods/INA219/usermod_ina219.h b/usermods/INA219/INA219_v2.cpp similarity index 100% rename from usermods/INA219/usermod_ina219.h rename to usermods/INA219/INA219_v2.cpp From eec1d1123f2c7a72ccee1ee9e17dcc6e3a068f41 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 18 Apr 2025 23:53:18 +0200 Subject: [PATCH 32/70] update usermod --- usermods/INA219/INA219_v2.cpp | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/usermods/INA219/INA219_v2.cpp b/usermods/INA219/INA219_v2.cpp index 3ae8770791..43549b96b0 100644 --- a/usermods/INA219/INA219_v2.cpp +++ b/usermods/INA219/INA219_v2.cpp @@ -170,6 +170,7 @@ class UsermodINA219 : public Usermod { power_mW = truncateDecimals(_ina219->getBusPower()); power = truncateDecimals(_ina219->getBusPower() / 1000.0); // Convert from mW to W loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); + //overflow = truncateDecimals(_ina219->getOverflow()); overflow = _ina219->getOverflow() != 0; // Update energy consumption @@ -366,25 +367,36 @@ class UsermodINA219 : public Usermod { // Populate the JSON document with sensor configuration details doc[F("name")] = name; - doc[F("state_topic")] = topic; - doc[F("unique_id")] = String(sanitizedMqttClientID) + "-" + sanitizedName; + doc[F("stat_t")] = topic; + + String uid = escapedMac.c_str(); + uid += "_" + sanitizedName; + doc[F("uniq_id")] = uid; // Template to extract specific value from JSON - doc[F("value_template")] = String("{{ value_json.") + jsonKey + String(" }}"); + doc[F("val_tpl")] = String("{{ value_json.") + jsonKey + String(" }}"); if (unitOfMeasurement != "") - doc[F("unit_of_measurement")] = unitOfMeasurement; + doc[F("unit_of_meas")] = unitOfMeasurement; if (deviceClass != "") - doc[F("device_class")] = deviceClass; + doc[F("dev_cla")] = deviceClass; if (SensorType != "binary_sensor") - doc[F("expire_after")] = 1800; + doc[F("exp_aft")] = 1800; // Device details nested object JsonObject device = doc.createNestedObject(F("device")); device[F("name")] = serverDescription; - device[F("identifiers")] = "wled-sensor-" + String(sanitizedMqttClientID); - device[F("manufacturer")] = F(WLED_BRAND); - device[F("model")] = F(WLED_PRODUCT_NAME); - device[F("sw_version")] = versionString; + device[F("ids")] = serverDescription; + device[F("mf")] = F(WLED_BRAND); + device[F("mdl")] = F(WLED_PRODUCT_NAME); + device[F("sw")] = versionString; + #ifdef ESP32 + device[F("hw")] = F("esp32"); + #else + device[F("hw")] = F("esp8266"); + #endif + JsonArray connections = device[F("cns")].createNestedArray(); + connections.add(F("mac")); + connections.add(WiFi.macAddress()); // Serialize the JSON document into a temporary string char buffer[1024]; @@ -648,3 +660,6 @@ class UsermodINA219 : public Usermod { }; const char UsermodINA219::_name[] PROGMEM = "INA219"; + +static UsermodINA219 ina219_v2; +REGISTER_USERMOD(ina219_v2); \ No newline at end of file From ba246e06a9cd41df77675abf6df9ada6ca2d36e6 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 18 Apr 2025 23:54:13 +0200 Subject: [PATCH 33/70] update usermod to v2 --- usermods/{INA219 => INA219_v2}/INA219_v2.cpp | 0 usermods/{INA219 => INA219_v2}/Readme.md | 0 .../{INA219 => INA219_v2}/img/INA219-Pin-Outs.png | Bin .../{INA219 => INA219_v2}/img/homeassistant.png | Bin usermods/{INA219 => INA219_v2}/img/info.png | Bin .../{INA219 => INA219_v2}/img/usermod_settings.png | Bin .../img/usermod_settings_pins_selection.png | Bin usermods/{INA219 => INA219_v2}/library.json | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename usermods/{INA219 => INA219_v2}/INA219_v2.cpp (100%) rename usermods/{INA219 => INA219_v2}/Readme.md (100%) rename usermods/{INA219 => INA219_v2}/img/INA219-Pin-Outs.png (100%) rename usermods/{INA219 => INA219_v2}/img/homeassistant.png (100%) rename usermods/{INA219 => INA219_v2}/img/info.png (100%) rename usermods/{INA219 => INA219_v2}/img/usermod_settings.png (100%) rename usermods/{INA219 => INA219_v2}/img/usermod_settings_pins_selection.png (100%) rename usermods/{INA219 => INA219_v2}/library.json (100%) diff --git a/usermods/INA219/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp similarity index 100% rename from usermods/INA219/INA219_v2.cpp rename to usermods/INA219_v2/INA219_v2.cpp diff --git a/usermods/INA219/Readme.md b/usermods/INA219_v2/Readme.md similarity index 100% rename from usermods/INA219/Readme.md rename to usermods/INA219_v2/Readme.md diff --git a/usermods/INA219/img/INA219-Pin-Outs.png b/usermods/INA219_v2/img/INA219-Pin-Outs.png similarity index 100% rename from usermods/INA219/img/INA219-Pin-Outs.png rename to usermods/INA219_v2/img/INA219-Pin-Outs.png diff --git a/usermods/INA219/img/homeassistant.png b/usermods/INA219_v2/img/homeassistant.png similarity index 100% rename from usermods/INA219/img/homeassistant.png rename to usermods/INA219_v2/img/homeassistant.png diff --git a/usermods/INA219/img/info.png b/usermods/INA219_v2/img/info.png similarity index 100% rename from usermods/INA219/img/info.png rename to usermods/INA219_v2/img/info.png diff --git a/usermods/INA219/img/usermod_settings.png b/usermods/INA219_v2/img/usermod_settings.png similarity index 100% rename from usermods/INA219/img/usermod_settings.png rename to usermods/INA219_v2/img/usermod_settings.png diff --git a/usermods/INA219/img/usermod_settings_pins_selection.png b/usermods/INA219_v2/img/usermod_settings_pins_selection.png similarity index 100% rename from usermods/INA219/img/usermod_settings_pins_selection.png rename to usermods/INA219_v2/img/usermod_settings_pins_selection.png diff --git a/usermods/INA219/library.json b/usermods/INA219_v2/library.json similarity index 100% rename from usermods/INA219/library.json rename to usermods/INA219_v2/library.json From a253079b97962ebc19f38820b0bcb10b1fdb65a2 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 18 Apr 2025 23:57:23 +0200 Subject: [PATCH 34/70] usermod v2 --- wled00/const.h | 2 +- wled00/usermods_list.cpp | 505 --------------------------------------- 2 files changed, 1 insertion(+), 506 deletions(-) delete mode 100644 wled00/usermods_list.cpp diff --git a/wled00/const.h b/wled00/const.h index 5a2e20131a..b82569defe 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -206,7 +206,7 @@ #define USERMOD_ID_DEEP_SLEEP 55 //Usermod "usermod_deep_sleep.h" #define USERMOD_ID_RF433 56 //Usermod "usermod_v2_RF433.h" #define USERMOD_ID_BRIGHTNESS_FOLLOW_SUN 57 //Usermod "usermod_v2_brightness_follow_sun.h" -#define USERMOD_ID_INA219 58 // Usermod "usermod_ina219.h" +#define USERMOD_ID_INA219 58 // Usermod "INA219_v2.cppu" //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp deleted file mode 100644 index 93cdb5e8ea..0000000000 --- a/wled00/usermods_list.cpp +++ /dev/null @@ -1,505 +0,0 @@ -#include "wled.h" -/* - * Register your v2 usermods here! - * (for v1 usermods using just usermod.cpp, you can ignore this file) - */ - -/* - * Add/uncomment your usermod filename here (and once more below) - * || || || - * \/ \/ \/ - */ -//#include "../usermods/EXAMPLE_v2/usermod_v2_example.h" - -#ifdef USERMOD_BATTERY - #include "../usermods/Battery/usermod_v2_Battery.h" -#endif - -#ifdef USERMOD_DALLASTEMPERATURE - #include "../usermods/Temperature/usermod_temperature.h" -#endif - -#ifdef USERMOD_SHT -#include "../usermods/sht/usermod_sht.h" -#endif - -#ifdef USERMOD_SN_PHOTORESISTOR - #include "../usermods/SN_Photoresistor/usermod_sn_photoresistor.h" -#endif - -#ifdef USERMOD_PWM_FAN - // requires DALLASTEMPERATURE or SHT included before it - #include "../usermods/PWM_fan/usermod_PWM_fan.h" -#endif - -#ifdef USERMOD_BUZZER - #include "../usermods/buzzer/usermod_v2_buzzer.h" -#endif - -#ifdef USERMOD_SENSORSTOMQTT - #include "../usermods/sensors_to_mqtt/usermod_v2_SensorsToMqtt.h" -#endif - -#ifdef USERMOD_PIRSWITCH - #include "../usermods/PIR_sensor_switch/usermod_PIR_sensor_switch.h" -#endif - -#ifdef USERMOD_BH1750 - #include "../usermods/BH1750_v2/usermod_bh1750.h" -#endif - -// BME280 v2 usermod. Define "USERMOD_BME280" in my_config.h -#ifdef USERMOD_BME280 - #include "../usermods/BME280_v2/usermod_bme280.h" -#endif - -#ifdef USERMOD_BME68X - #include "../usermods/BME68X_v2/usermod_bme68x.h" -#endif - - -#ifdef USERMOD_FOUR_LINE_DISPLAY - #include "../usermods/usermod_v2_four_line_display_ALT/usermod_v2_four_line_display_ALT.h" -#endif - -#ifdef USERMOD_ROTARY_ENCODER_UI - #include "../usermods/usermod_v2_rotary_encoder_ui_ALT/usermod_v2_rotary_encoder_ui_ALT.h" -#endif - -#ifdef USERMOD_AUTO_SAVE - #include "../usermods/usermod_v2_auto_save/usermod_v2_auto_save.h" -#endif - -#ifdef USERMOD_DHT - #include "../usermods/DHT/usermod_dht.h" -#endif - -#ifdef USERMOD_VL53L0X_GESTURES - #include "../usermods/VL53L0X_gestures/usermod_vl53l0x_gestures.h" -#endif - -#ifdef USERMOD_ANIMATED_STAIRCASE - #include "../usermods/Animated_Staircase/Animated_Staircase.h" -#endif - -#ifdef USERMOD_MULTI_RELAY - #include "../usermods/multi_relay/usermod_multi_relay.h" -#endif - -#ifdef USERMOD_RTC - #include "../usermods/RTC/usermod_rtc.h" -#endif - -#ifdef USERMOD_ELEKSTUBE_IPS - #include "../usermods/EleksTube_IPS/usermod_elekstube_ips.h" -#endif - -#ifdef USERMOD_ROTARY_ENCODER_BRIGHTNESS_COLOR - #include "../usermods/usermod_rotary_brightness_color/usermod_rotary_brightness_color.h" -#endif - -#ifdef RGB_ROTARY_ENCODER - #include "../usermods/rgb-rotary-encoder/rgb-rotary-encoder.h" -#endif - -#ifdef USERMOD_ST7789_DISPLAY - #include "../usermods/ST7789_display/ST7789_Display.h" -#endif - -#ifdef USERMOD_PIXELS_DICE_TRAY - #include "../usermods/pixels_dice_tray/pixels_dice_tray.h" -#endif - -#ifdef USERMOD_SEVEN_SEGMENT - #include "../usermods/seven_segment_display/usermod_v2_seven_segment_display.h" -#endif - -#ifdef USERMOD_SSDR - #include "../usermods/seven_segment_display_reloaded/usermod_seven_segment_reloaded.h" -#endif - -#ifdef USERMOD_CRONIXIE - #include "../usermods/Cronixie/usermod_cronixie.h" -#endif - -#ifdef QUINLED_AN_PENTA - #include "../usermods/quinled-an-penta/quinled-an-penta.h" -#endif - -#ifdef USERMOD_WIZLIGHTS - #include "../usermods/wizlights/wizlights.h" -#endif - -#ifdef USERMOD_WIREGUARD - #include "../usermods/wireguard/wireguard.h" -#endif - -#ifdef USERMOD_WORDCLOCK - #include "../usermods/usermod_v2_word_clock/usermod_v2_word_clock.h" -#endif - -#ifdef USERMOD_MY9291 - #include "../usermods/MY9291/usermode_MY9291.h" -#endif - -#ifdef USERMOD_SI7021_MQTT_HA - #include "../usermods/Si7021_MQTT_HA/usermod_si7021_mqtt_ha.h" -#endif - -#ifdef USERMOD_SMARTNEST - #include "../usermods/smartnest/usermod_smartnest.h" -#endif - -#ifdef USERMOD_AUDIOREACTIVE - #include "../usermods/audioreactive/audio_reactive.h" -#endif - -#ifdef USERMOD_ANALOG_CLOCK - #include "../usermods/Analog_Clock/Analog_Clock.h" -#endif - -#ifdef USERMOD_PING_PONG_CLOCK - #include "../usermods/usermod_v2_ping_pong_clock/usermod_v2_ping_pong_clock.h" -#endif - -#ifdef USERMOD_ADS1115 - #include "../usermods/ADS1115_v2/usermod_ads1115.h" -#endif - -#ifdef USERMOD_KLIPPER_PERCENTAGE - #include "../usermods/usermod_v2_klipper_percentage/usermod_v2_klipper_percentage.h" -#endif - -#ifdef USERMOD_BOBLIGHT - #include "../usermods/boblight/boblight.h" -#endif - -#ifdef USERMOD_ANIMARTRIX - #include "../usermods/usermod_v2_animartrix/usermod_v2_animartrix.h" -#endif - -#ifdef USERMOD_INTERNAL_TEMPERATURE - #include "../usermods/Internal_Temperature_v2/usermod_internal_temperature.h" -#endif - -#ifdef USERMOD_INA219 - #include "../usermods/INA219/usermod_ina219.h" -#endif - -#if defined(WLED_USE_SD_MMC) || defined(WLED_USE_SD_SPI) -// This include of SD.h and SD_MMC.h must happen here, else they won't be -// resolved correctly (when included in mod's header only) - #ifdef WLED_USE_SD_MMC - #include "SD_MMC.h" - #elif defined(WLED_USE_SD_SPI) - #include "SD.h" - #include "SPI.h" - #endif - #include "../usermods/sd_card/usermod_sd_card.h" -#endif - -#ifdef USERMOD_PWM_OUTPUTS - #include "../usermods/pwm_outputs/usermod_pwm_outputs.h" -#endif - -#ifdef USERMOD_HTTP_PULL_LIGHT_CONTROL - #include "../usermods/usermod_v2_HttpPullLightControl/usermod_v2_HttpPullLightControl.h" -#endif - -#ifdef USERMOD_MPU6050_IMU - #include "../usermods/mpu6050_imu/usermod_mpu6050_imu.h" -#endif - -#ifdef USERMOD_MPU6050_IMU - #include "../usermods/mpu6050_imu/usermod_gyro_surge.h" -#endif - -#ifdef USERMOD_LDR_DUSK_DAWN - #include "../usermods/LDR_Dusk_Dawn_v2/usermod_LDR_Dusk_Dawn_v2.h" -#endif - -#ifdef USERMOD_POV_DISPLAY - #include "../usermods/pov_display/usermod_pov_display.h" -#endif - -#ifdef USERMOD_STAIRCASE_WIPE - #include "../usermods/stairway_wipe_basic/stairway-wipe-usermod-v2.h" -#endif - -#ifdef USERMOD_MAX17048 - #include "../usermods/MAX17048_v2/usermod_max17048.h" -#endif - -#ifdef USERMOD_TETRISAI - #include "../usermods/TetrisAI_v2/usermod_v2_tetrisai.h" -#endif - -#ifdef USERMOD_AHT10 - #include "../usermods/AHT10_v2/usermod_aht10.h" -#endif - -#ifdef USERMOD_INA226 - #include "../usermods/INA226_v2/usermod_ina226.h" -#endif - -#ifdef USERMOD_LD2410 -#include "../usermods/LD2410_v2/usermod_ld2410.h" -#endif - -#ifdef USERMOD_DEEP_SLEEP - #include "../usermods/deep_sleep/usermod_deep_sleep.h" -#endif - -#ifdef USERMOD_RF433 - #include "../usermods/usermod_v2_RF433/usermod_v2_RF433.h" -#endif - -#ifdef USERMOD_BRIGHTNESS_FOLLOW_SUN - #include "../usermods/usermod_v2_brightness_follow_sun/usermod_v2_brightness_follow_sun.h" -#endif - -void registerUsermods() -{ -/* - * Add your usermod class name here - * || || || - * \/ \/ \/ - */ - //UsermodManager::add(new MyExampleUsermod()); - - #ifdef USERMOD_BATTERY - UsermodManager::add(new UsermodBattery()); - #endif - - #ifdef USERMOD_DALLASTEMPERATURE - UsermodManager::add(new UsermodTemperature()); - #endif - - #ifdef USERMOD_SN_PHOTORESISTOR - UsermodManager::add(new Usermod_SN_Photoresistor()); - #endif - - #ifdef USERMOD_PWM_FAN - UsermodManager::add(new PWMFanUsermod()); - #endif - - #ifdef USERMOD_BUZZER - UsermodManager::add(new BuzzerUsermod()); - #endif - - #ifdef USERMOD_BH1750 - UsermodManager::add(new Usermod_BH1750()); - #endif - - #ifdef USERMOD_BME280 - UsermodManager::add(new UsermodBME280()); - #endif - - #ifdef USERMOD_BME68X - UsermodManager::add(new UsermodBME68X()); - #endif - - #ifdef USERMOD_SENSORSTOMQTT - UsermodManager::add(new UserMod_SensorsToMQTT()); - #endif - - #ifdef USERMOD_PIRSWITCH - UsermodManager::add(new PIRsensorSwitch()); - #endif - - #ifdef USERMOD_FOUR_LINE_DISPLAY - UsermodManager::add(new FourLineDisplayUsermod()); - #endif - - #ifdef USERMOD_ROTARY_ENCODER_UI - UsermodManager::add(new RotaryEncoderUIUsermod()); // can use USERMOD_FOUR_LINE_DISPLAY - #endif - - #ifdef USERMOD_AUTO_SAVE - UsermodManager::add(new AutoSaveUsermod()); // can use USERMOD_FOUR_LINE_DISPLAY - #endif - - #ifdef USERMOD_DHT - UsermodManager::add(new UsermodDHT()); - #endif - - #ifdef USERMOD_VL53L0X_GESTURES - UsermodManager::add(new UsermodVL53L0XGestures()); - #endif - - #ifdef USERMOD_ANIMATED_STAIRCASE - UsermodManager::add(new Animated_Staircase()); - #endif - - #ifdef USERMOD_MULTI_RELAY - UsermodManager::add(new MultiRelay()); - #endif - - #ifdef USERMOD_RTC - UsermodManager::add(new RTCUsermod()); - #endif - - #ifdef USERMOD_ELEKSTUBE_IPS - UsermodManager::add(new ElekstubeIPSUsermod()); - #endif - - #ifdef USERMOD_ROTARY_ENCODER_BRIGHTNESS_COLOR - UsermodManager::add(new RotaryEncoderBrightnessColor()); - #endif - - #ifdef RGB_ROTARY_ENCODER - UsermodManager::add(new RgbRotaryEncoderUsermod()); - #endif - - #ifdef USERMOD_ST7789_DISPLAY - UsermodManager::add(new St7789DisplayUsermod()); - #endif - - #ifdef USERMOD_PIXELS_DICE_TRAY - UsermodManager::add(new PixelsDiceTrayUsermod()); - #endif - - #ifdef USERMOD_SEVEN_SEGMENT - UsermodManager::add(new SevenSegmentDisplay()); - #endif - - #ifdef USERMOD_SSDR - UsermodManager::add(new UsermodSSDR()); - #endif - - #ifdef USERMOD_CRONIXIE - UsermodManager::add(new UsermodCronixie()); - #endif - - #ifdef QUINLED_AN_PENTA - UsermodManager::add(new QuinLEDAnPentaUsermod()); - #endif - - #ifdef USERMOD_WIZLIGHTS - UsermodManager::add(new WizLightsUsermod()); - #endif - - #ifdef USERMOD_WIREGUARD - UsermodManager::add(new WireguardUsermod()); - #endif - - #ifdef USERMOD_WORDCLOCK - UsermodManager::add(new WordClockUsermod()); - #endif - - #ifdef USERMOD_MY9291 - UsermodManager::add(new MY9291Usermod()); - #endif - - #ifdef USERMOD_SI7021_MQTT_HA - UsermodManager::add(new Si7021_MQTT_HA()); - #endif - - #ifdef USERMOD_SMARTNEST - UsermodManager::add(new Smartnest()); - #endif - - #ifdef USERMOD_AUDIOREACTIVE - UsermodManager::add(new AudioReactive()); - #endif - - #ifdef USERMOD_ANALOG_CLOCK - UsermodManager::add(new AnalogClockUsermod()); - #endif - - #ifdef USERMOD_PING_PONG_CLOCK - UsermodManager::add(new PingPongClockUsermod()); - #endif - - #ifdef USERMOD_ADS1115 - UsermodManager::add(new ADS1115Usermod()); - #endif - - #ifdef USERMOD_KLIPPER_PERCENTAGE - UsermodManager::add(new klipper_percentage()); - #endif - - #ifdef USERMOD_BOBLIGHT - UsermodManager::add(new BobLightUsermod()); - #endif - - #ifdef SD_ADAPTER - UsermodManager::add(new UsermodSdCard()); - #endif - - #ifdef USERMOD_PWM_OUTPUTS - UsermodManager::add(new PwmOutputsUsermod()); - #endif - - #ifdef USERMOD_SHT - UsermodManager::add(new ShtUsermod()); - #endif - - #ifdef USERMOD_ANIMARTRIX - UsermodManager::add(new AnimartrixUsermod("Animartrix", false)); - #endif - - #ifdef USERMOD_INTERNAL_TEMPERATURE - UsermodManager::add(new InternalTemperatureUsermod()); - #endif - - #ifdef USERMOD_HTTP_PULL_LIGHT_CONTROL - UsermodManager::add(new HttpPullLightControl()); - #endif - - #ifdef USERMOD_MPU6050_IMU - static MPU6050Driver mpu6050; UsermodManager::add(&mpu6050); - #endif - - #ifdef USERMOD_GYRO_SURGE - static GyroSurge gyro_surge; UsermodManager::add(&gyro_surge); - #endif - - #ifdef USERMOD_LDR_DUSK_DAWN - UsermodManager::add(new LDR_Dusk_Dawn_v2()); - #endif - - #ifdef USERMOD_STAIRCASE_WIPE - UsermodManager::add(new StairwayWipeUsermod()); - #endif - - #ifdef USERMOD_MAX17048 - UsermodManager::add(new Usermod_MAX17048()); - #endif - - #ifdef USERMOD_TETRISAI - UsermodManager::add(new TetrisAIUsermod()); - #endif - - #ifdef USERMOD_AHT10 - UsermodManager::add(new UsermodAHT10()); - #endif - - #ifdef USERMOD_INA226 - UsermodManager::add(new UsermodINA226()); - #endif - - #ifdef USERMOD_INA219 - UsermodManager::add(new UsermodINA219()); - #endif - - #ifdef USERMOD_LD2410 - UsermodManager::add(new LD2410Usermod()); - #endif - - #ifdef USERMOD_POV_DISPLAY - UsermodManager::add(new PovDisplayUsermod()); - #endif - - #ifdef USERMOD_DEEP_SLEEP - UsermodManager::add(new DeepSleepUsermod()); - #endif - - #ifdef USERMOD_RF433 - UsermodManager::add(new RF433Usermod()); - #endif - - #ifdef USERMOD_BRIGHTNESS_FOLLOW_SUN - UsermodManager::add(new UsermodBrightnessFollowSun()); - #endif -} From 6ea0d3c3118740445f985c05dadfdd741d4a1f97 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 19 Apr 2025 00:37:32 +0200 Subject: [PATCH 35/70] coderabbitai improvments --- usermods/INA219_v2/INA219_v2.cpp | 40 ++++++++++++++------------------ usermods/INA219_v2/Readme.md | 2 +- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp index 43549b96b0..29369e4a60 100644 --- a/usermods/INA219_v2/INA219_v2.cpp +++ b/usermods/INA219_v2/INA219_v2.cpp @@ -1,5 +1,3 @@ -#pragma once - // Configurable settings for the INA219 Usermod // Enabled setting @@ -110,7 +108,7 @@ class UsermodINA219 : public Usermod { if (_decimalFactor == 0) { return roundf(val); } - float factor = pow(10, _decimalFactor); + float factor = powf(10.0f, _decimalFactor); return roundf(val * factor) / factor; } @@ -263,27 +261,25 @@ class UsermodINA219 : public Usermod { ** Function to publish sensor data to MQTT **/ bool onMqttMessage(char* topic, char* payload) override { - if (!WLED_MQTT_CONNECTED) return false; - if (enabled) { - // Check if the message is for the correct topic - if (strcmp_P(topic, PSTR("/sensor/ina219")) == 0) { - StaticJsonDocument<512> jsonDoc; - - // Parse the JSON payload - DeserializationError error = deserializeJson(jsonDoc, payload); - if (error) { - return false; - } + if (!WLED_MQTT_CONNECTED || !enabled) return false; + // Check if the message is for the correct topic + if (strstr(topic, "/sensor/ina219") != nullptr) { + StaticJsonDocument<512> jsonDoc; + + // Parse the JSON payload + DeserializationError error = deserializeJson(jsonDoc, payload); + if (error) { + return false; + } - // Update the energy values - dailyEnergy_kWh = jsonDoc["daily_energy_kWh"]; - monthlyEnergy_kWh = jsonDoc["monthly_energy_kWh"]; - totalEnergy_kWh = jsonDoc["total_energy_kWh"]; - dailyResetTime = jsonDoc["dailyResetTime"]; - monthlyResetTime = jsonDoc["monthlyResetTime"]; + // Update the energy values + dailyEnergy_kWh = jsonDoc["daily_energy_kWh"]; + monthlyEnergy_kWh = jsonDoc["monthly_energy_kWh"]; + totalEnergy_kWh = jsonDoc["total_energy_kWh"]; + dailyResetTime = jsonDoc["dailyResetTime"]; + monthlyResetTime = jsonDoc["monthlyResetTime"]; - return true; - } + return true; } return false; } diff --git a/usermods/INA219_v2/Readme.md b/usermods/INA219_v2/Readme.md index af100c9a32..e5b2c6776c 100644 --- a/usermods/INA219_v2/Readme.md +++ b/usermods/INA219_v2/Readme.md @@ -7,7 +7,7 @@ This Usermod integrates the INA219 sensor with WLED to monitor energy consumptio - Monitors bus voltage, shunt voltage, current, and power. - Calculates total energy consumed in kilowatt-hours (kWh). - Supports MQTT publishing of sensor data. -- Publishes energy data to Home Assistant directly to the WLED entitie for easy integration. +- Publishes energy data to Home Assistant directly to the WLED entity for easy integration. - Displays daily, monthly and total energy used in the WLED GUI under the info section. - Configurable through WLED's web interface. From d5b0a565249c1f833ae9b5eff7deb8d116094bf7 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 19 Apr 2025 00:54:27 +0200 Subject: [PATCH 36/70] Update const.h misspelled extension --- wled00/const.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wled00/const.h b/wled00/const.h index b82569defe..dade8fba78 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -206,7 +206,7 @@ #define USERMOD_ID_DEEP_SLEEP 55 //Usermod "usermod_deep_sleep.h" #define USERMOD_ID_RF433 56 //Usermod "usermod_v2_RF433.h" #define USERMOD_ID_BRIGHTNESS_FOLLOW_SUN 57 //Usermod "usermod_v2_brightness_follow_sun.h" -#define USERMOD_ID_INA219 58 // Usermod "INA219_v2.cppu" +#define USERMOD_ID_INA219 58 // Usermod "INA219_v2.cpp" //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot From 2426922bc1d47ecb00233cc3b729e4bc91d726fc Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 19 Apr 2025 14:58:46 +0200 Subject: [PATCH 37/70] coderabbitai improvments --- usermods/INA219_v2/INA219_v2.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp index 29369e4a60..deecd03474 100644 --- a/usermods/INA219_v2/INA219_v2.cpp +++ b/usermods/INA219_v2/INA219_v2.cpp @@ -54,8 +54,8 @@ class UsermodINA219 : public Usermod { // Define the variables using the pre-defined or default values bool enabled = INA219_ENABLED; uint8_t _i2cAddress = INA219_I2C_ADDRESS; - uint16_t _checkInterval = INA219_CHECK_INTERVAL; - uint16_t checkInterval = _checkInterval * 1000; // Convert seconds to milliseconds + uint16_t _checkInterval = INA219_CHECK_INTERVAL; // seconds + uint32_t checkInterval = static_cast(_checkInterval) * 1000UL; // ms INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; float shuntResistor = INA219_SHUNT_RESISTOR; @@ -172,7 +172,9 @@ class UsermodINA219 : public Usermod { overflow = _ina219->getOverflow() != 0; // Update energy consumption - updateEnergy(power, lastCheck - lastPublishTime); + if (lastPublishTime != 0) { + updateEnergy(power, lastCheck - lastPublishTime); + } lastPublishTime = lastCheck; #ifndef WLED_DISABLE_MQTT From cfba487d697815e70bb042fb43e8391973372fd6 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 19 Apr 2025 15:29:58 +0200 Subject: [PATCH 38/70] coderabbitai improvments --- usermods/INA219_v2/INA219_v2.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp index deecd03474..9aeaa80be3 100644 --- a/usermods/INA219_v2/INA219_v2.cpp +++ b/usermods/INA219_v2/INA219_v2.cpp @@ -336,7 +336,7 @@ class UsermodINA219 : public Usermod { // Serialize the JSON document into a character buffer char buffer[1024]; - size_t payload_size = serializeJson(jsonDoc, buffer); + size_t payload_size = serializeJson(jsonDoc, buffer, sizeof(buffer)); // Construct the MQTT topic using the device topic char topic[128]; @@ -398,7 +398,7 @@ class UsermodINA219 : public Usermod { // Serialize the JSON document into a temporary string char buffer[1024]; - size_t payload_size = serializeJson(doc, buffer); + size_t payload_size = serializeJson(doc, buffer, sizeof(buffer)); char topic_S[128]; snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType, sanitizedMqttClientID.c_str(), sanitizedName.c_str()); @@ -624,10 +624,10 @@ class UsermodINA219 : public Usermod { if (getJsonValue(top[F("check_interval")], checkInterval)) { if (1 <= checkInterval && checkInterval <= 600) { - checkInterval *= 1000; + checkInterval *= 1000UL; } else { DEBUG_PRINTLN(F("INA219: Invalid check_interval value; using default.")); - checkInterval = _checkInterval * 1000; + checkInterval = _checkInterval * 1000UL; } } else { configComplete = false; From 57d4e85f8f7eedc0edb1ee3f6a57d3e6906ce37a Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 19 Apr 2025 15:46:05 +0200 Subject: [PATCH 39/70] daily/monthly kWh reset logic redone, resets now at midnight/1st day in month instead of 24h/30days --- usermods/INA219_v2/INA219_v2.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp index 9aeaa80be3..c0afcb4b1d 100644 --- a/usermods/INA219_v2/INA219_v2.cpp +++ b/usermods/INA219_v2/INA219_v2.cpp @@ -474,21 +474,33 @@ class UsermodINA219 : public Usermod { float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) totalEnergy_kWh += energy_kWh; // Update total energy consumed - // Reset daily energy if 86400 seconds (24 hours) elapsed. - if (dailyResetTime >= 86400UL) { + // Get current time + time_t now = time(nullptr); + if (now <= 0) return; // Safety check if time isn't available yet + + struct tm *timeinfo = localtime(&now); + + // Calculate day identifier (days since epoch) + long currentDay = now / 86400; + + // Reset daily energy at midnight or if day changed + if ((timeinfo->tm_hour == 0 && timeinfo->tm_min == 0 && dailyResetTime != currentDay) || + (currentDay > dailyResetTime && dailyResetTime > 0)) { dailyEnergy_kWh = 0; - dailyResetTime = 0; + dailyResetTime = currentDay; } dailyEnergy_kWh += energy_kWh; - dailyResetTime += durationMs / 1000; - // Reset monthly energy if 2592000 seconds (30 days) elapsed. - if (monthlyResetTime >= 2592000UL) { + // Calculate month identifier (year*12 + month) + long currentMonth = (timeinfo->tm_year + 1900) * 12 + timeinfo->tm_mon; + + // Reset monthly energy on first day of month or if month changed + if ((timeinfo->tm_mday == 1 && timeinfo->tm_hour == 0 && timeinfo->tm_min == 0 && + monthlyResetTime != currentMonth) || (currentMonth > monthlyResetTime && monthlyResetTime > 0)) { monthlyEnergy_kWh = 0; - monthlyResetTime = 0; + monthlyResetTime = currentMonth; } monthlyEnergy_kWh += energy_kWh; - monthlyResetTime += durationMs / 1000; } /** From dcb1c5c54690f3919d9c4d73400dce86df4d0bbe Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sat, 19 Apr 2025 16:00:03 +0200 Subject: [PATCH 40/70] coderabbitai improvments --- usermods/INA219_v2/INA219_v2.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp index c0afcb4b1d..320005d398 100644 --- a/usermods/INA219_v2/INA219_v2.cpp +++ b/usermods/INA219_v2/INA219_v2.cpp @@ -95,12 +95,6 @@ class UsermodINA219 : public Usermod { unsigned long dailyResetTime = 0; unsigned long monthlyResetTime = 0; - // Variables to track last sent readings - float _lastCurrentSent = 0; - float _lastVoltageSent = 0; - float _lastPowerSent = 0; - float _lastShuntVoltageSent = 0; - INA219_WE *_ina219 = nullptr; // INA219 sensor object // Function to truncate decimals based on the configured decimal factor @@ -168,7 +162,6 @@ class UsermodINA219 : public Usermod { power_mW = truncateDecimals(_ina219->getBusPower()); power = truncateDecimals(_ina219->getBusPower() / 1000.0); // Convert from mW to W loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); - //overflow = truncateDecimals(_ina219->getOverflow()); overflow = _ina219->getOverflow() != 0; // Update energy consumption @@ -513,7 +506,7 @@ class UsermodINA219 : public Usermod { } // Create a nested array for energy data - JsonArray energy_json_seperator = user.createNestedArray(F("------------------------------------")); + JsonArray energy_json_separator = user.createNestedArray(F("------------------------------------")); JsonArray energy_json = user.createNestedArray(F("Energy Consumption:")); From f4dd600a9fd8cfb2f5ab7efdc39a9488916e7fa6 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sun, 20 Apr 2025 12:14:19 +0200 Subject: [PATCH 41/70] removed outdated installation methode --- usermods/INA219_v2/Readme.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/usermods/INA219_v2/Readme.md b/usermods/INA219_v2/Readme.md index e5b2c6776c..060a358eb7 100644 --- a/usermods/INA219_v2/Readme.md +++ b/usermods/INA219_v2/Readme.md @@ -81,10 +81,6 @@ This Usermod integrates the INA219 sensor with WLED to monitor energy consumptio | `0x44` | 0x44 - A1 soldered | 0x44 | | `0x45` | 0x45 - A0 and A1 soldered | 0x45 | -## Installation - -Add the compile-time option `-D USERMOD_INA219` to your `platformio.ini` (or `platformio_override.ini`) or use `#define USERMOD_INA219` in `my_config.h`. - # Compiling To enable, add `INA219_v2` to your `custom_usermods` (e.g. in `platformio_override.ini`) From a1aaba311d1073e71554fdabec33d4971a28a34f Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sun, 20 Apr 2025 12:58:40 +0200 Subject: [PATCH 42/70] optimazations, more checks and log --- usermods/INA219_v2/INA219_v2.cpp | 602 +++++++++++++++++-------------- 1 file changed, 322 insertions(+), 280 deletions(-) diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp index 320005d398..a1d3c16335 100644 --- a/usermods/INA219_v2/INA219_v2.cpp +++ b/usermods/INA219_v2/INA219_v2.cpp @@ -55,7 +55,7 @@ class UsermodINA219 : public Usermod { bool enabled = INA219_ENABLED; uint8_t _i2cAddress = INA219_I2C_ADDRESS; uint16_t _checkInterval = INA219_CHECK_INTERVAL; // seconds - uint32_t checkInterval = static_cast(_checkInterval) * 1000UL; // ms + uint32_t checkInterval = static_cast(_checkInterval) * 1000UL; // ms INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; float shuntResistor = INA219_SHUNT_RESISTOR; @@ -106,13 +106,28 @@ class UsermodINA219 : public Usermod { return roundf(val * factor) / factor; } + bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f) { + return fabsf(oldValue - newValue) > threshold; + } + + bool hasValueChanged() { + return hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || + hasSignificantChange(last_sent_busVoltage, busVoltage) || + hasSignificantChange(last_sent_loadVoltage, loadVoltage) || + hasSignificantChange(last_sent_current, current) || + hasSignificantChange(last_sent_current_mA, current_mA) || + hasSignificantChange(last_sent_power, power) || + hasSignificantChange(last_sent_power_mW, power_mW) || + (last_sent_overflow != overflow); + } + // Update INA219 settings and reinitialize sensor if necessary - void updateINA219Settings() { + bool updateINA219Settings() { // Validate I2C pins; if invalid, disable usermod and log message if (i2c_scl < 0 || i2c_sda < 0) { enabled = false; DEBUG_PRINTLN(F("INA219 disabled: Invalid I2C pins. Check global I2C settings.")); - return; + return false; } DEBUG_PRINT(F("Using I2C SDA: ")); DEBUG_PRINTLN(i2c_sda); @@ -122,225 +137,150 @@ class UsermodINA219 : public Usermod { // Reinitialize the INA219 instance with updated settings if (_ina219 != nullptr) { delete _ina219; + _ina219 = nullptr; } _ina219 = new INA219_WE(_i2cAddress); + if (!_ina219) { + DEBUG_PRINTLN(F("Failed to allocate memory for INA219 sensor!")); + enabled = false; + return false; + } + if (!_ina219->init()) { DEBUG_PRINTLN(F("INA219 initialization failed!")); enabled = false; - return; + return false; } _ina219->setShuntSizeInOhms(shuntResistor); _ina219->setADCMode(conversionTime); _ina219->setCorrectionFactor(correctionFactor); - } -public: - // Destructor to clean up INA219 object - ~UsermodINA219() { - delete _ina219; - _ina219 = nullptr; + return true; } - // Setup function called once on boot or restart - void setup() override { - updateINA219Settings(); // Configure INA219 settings - initDone = true; // Mark initialization as complete - } + // Sanitize the mqttClientID by replacing invalid characters. + String sanitizeMqttClientID(const String &clientID) { + String sanitizedID; - // Loop function called continuously - void loop() override { - // Check if the usermod is enabled and the check interval has elapsed - if (enabled && millis() - lastCheck > checkInterval) { - lastCheck = millis(); - - // Fetch sensor data - shuntVoltage = truncateDecimals(_ina219->getShuntVoltage_mV()); - busVoltage = truncateDecimals(_ina219->getBusVoltage_V()); - current_mA = truncateDecimals(_ina219->getCurrent_mA()); - current = truncateDecimals(_ina219->getCurrent_mA() / 1000.0); // Convert from mA to A - power_mW = truncateDecimals(_ina219->getBusPower()); - power = truncateDecimals(_ina219->getBusPower() / 1000.0); // Convert from mW to W - loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); - overflow = _ina219->getOverflow() != 0; - - // Update energy consumption - if (lastPublishTime != 0) { - updateEnergy(power, lastCheck - lastPublishTime); - } - lastPublishTime = lastCheck; + for (unsigned int i = 0; i < clientID.length(); i++) { + char c = clientID[i]; - #ifndef WLED_DISABLE_MQTT - // Publish sensor data via MQTT if connected and enabled - if (WLED_MQTT_CONNECTED) { - if (mqttPublish) { - if (mqttPublishAlways || hasValueChanged()) { - publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); - - last_sent_shuntVoltage = shuntVoltage; - last_sent_busVoltage = busVoltage; - last_sent_loadVoltage = loadVoltage; - last_sent_current = current; - last_sent_current_mA = current_mA; - last_sent_power = power; - last_sent_power_mW = power_mW; - last_sent_overflow = overflow; - - mqttPublishSent = true; - } - } else if (!mqttPublish && mqttPublishSent) { - char sensorTopic[128]; - snprintf_P(sensorTopic, 127, "%s/sensor/ina219", mqttDeviceTopic); - - // Publishing an empty retained message to delete the sensor from Home Assistant - mqtt->publish(sensorTopic, 0, true, ""); - mqttPublishSent = false; + // Handle common accented characters using simple mapping + if (c == '\xC3' && i + 1 < clientID.length()) { + char next = clientID[i + 1]; + if (next == '\xBC' || next == '\x9C') { // ü or Ü + sanitizedID += (next == '\xBC' ? "u" : "U"); + i++; + continue; + } else if (next == '\xA4' || next == '\xC4') { // ä or Ä + sanitizedID += (next == '\xA4' ? "a" : "A"); + i++; + continue; + } else if (next == '\xB6' || next == '\xD6') { // ö or Ö + sanitizedID += (next == '\xB6' ? "o" : "O"); + i++; + continue; + } else if (next == '\x9F') { // ß + sanitizedID += "s"; + i++; + continue; } } - - // Publish Home Assistant discovery data if enabled - if (haDiscovery && !haDiscoverySent) { - if (WLED_MQTT_CONNECTED) { - char topic[128]; - snprintf_P(topic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Common topic for all INA219 data - - mqttCreateHassSensor(F("Current"), topic, F("current"), F("A"), F("current_A"), F("sensor")); - mqttCreateHassSensor(F("Voltage"), topic, F("voltage"), F("V"), F("bus_voltage_V"), F("sensor")); - mqttCreateHassSensor(F("Power"), topic, F("power"), F("W"), F("power_W"), F("sensor")); - mqttCreateHassSensor(F("Shunt Voltage"), topic, F("voltage"), F("mV"), F("shunt_voltage_mV"), F("sensor")); - mqttCreateHassSensor(F("Shunt Resistor"), topic, F(""), F("Ω"), F("shunt_resistor_Ohms"), F("sensor")); - mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("sensor")); - mqttCreateHassSensor(F("Daily Energy"), topic, F("energy"), F("kWh"), F("daily_energy_kWh"), F("sensor")); - mqttCreateHassSensor(F("Monthly Energy"), topic, F("energy"), F("kWh"), F("monthly_energy_kWh"), F("sensor")); - mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); - - haDiscoverySent = true; // Mark as sent to avoid repeating - } - } else if (!haDiscovery && haDiscoverySent) { - if (WLED_MQTT_CONNECTED) { - // Remove previously created sensors - mqttRemoveHassSensor(F("Current"), F("sensor")); - mqttRemoveHassSensor(F("Voltage"), F("sensor")); - mqttRemoveHassSensor(F("Power"), F("sensor")); - mqttRemoveHassSensor(F("Shunt Voltage"), F("sensor")); - mqttRemoveHassSensor(F("Daily Energy"), F("sensor")); - mqttRemoveHassSensor(F("Monthly Energy"), F("sensor")); - mqttRemoveHassSensor(F("Total Energy"), F("sensor")); - mqttRemoveHassSensor(F("Shunt Resistor"), F("sensor")); - mqttRemoveHassSensor(F("Overflow"), F("sensor")); - - haDiscoverySent = false; // Mark as sent to avoid repeating - } + // Allow valid characters [a-zA-Z0-9_-] + if ((c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + c == '-' || c == '_') { + sanitizedID += c; + } else { // Replace any other invalid character with an underscore + sanitizedID += '_'; } - #endif } - } - - bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f) { - return fabsf(oldValue - newValue) > threshold; - } - - bool hasValueChanged() { - return hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || - hasSignificantChange(last_sent_busVoltage, busVoltage) || - hasSignificantChange(last_sent_loadVoltage, loadVoltage) || - hasSignificantChange(last_sent_current, current) || - hasSignificantChange(last_sent_current_mA, current_mA) || - hasSignificantChange(last_sent_power, power) || - hasSignificantChange(last_sent_power_mW, power_mW) || - (last_sent_overflow != overflow); + return sanitizedID; } -#ifndef WLED_DISABLE_MQTT /** - ** Function to publish sensor data to MQTT + ** Function to update energy calculations based on power and duration **/ - bool onMqttMessage(char* topic, char* payload) override { - if (!WLED_MQTT_CONNECTED || !enabled) return false; - // Check if the message is for the correct topic - if (strstr(topic, "/sensor/ina219") != nullptr) { - StaticJsonDocument<512> jsonDoc; + void updateEnergy(float power, unsigned long durationMs) { + float durationHours = durationMs / 3600000.0; // Milliseconds to hours + float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) + totalEnergy_kWh += energy_kWh; // Update total energy consumed - // Parse the JSON payload - DeserializationError error = deserializeJson(jsonDoc, payload); - if (error) { - return false; - } + // Get current time + time_t now = time(nullptr); + if (now <= 0) return; // Safety check if time isn't available yet - // Update the energy values - dailyEnergy_kWh = jsonDoc["daily_energy_kWh"]; - monthlyEnergy_kWh = jsonDoc["monthly_energy_kWh"]; - totalEnergy_kWh = jsonDoc["total_energy_kWh"]; - dailyResetTime = jsonDoc["dailyResetTime"]; - monthlyResetTime = jsonDoc["monthlyResetTime"]; + struct tm *timeinfo = localtime(&now); - return true; + // Calculate day identifier (days since epoch) + long currentDay = now / 86400; + + // Reset daily energy at midnight or if day changed + if ((timeinfo->tm_hour == 0 && timeinfo->tm_min == 0 && dailyResetTime != currentDay) || + (currentDay > dailyResetTime && dailyResetTime > 0)) { + dailyEnergy_kWh = 0; + dailyResetTime = currentDay; } - return false; - } - - /** - ** Subscribe to MQTT topic for controlling the usermod - **/ - void onMqttConnect(bool sessionPresent) override { - if (!enabled) return; - if (WLED_MQTT_CONNECTED) { - char subuf[64]; - if (mqttDeviceTopic[0] != 0) { - strcpy(subuf, mqttDeviceTopic); - strcat_P(subuf, PSTR("/sensor/ina219")); - mqtt->subscribe(subuf, 0); - } + dailyEnergy_kWh += energy_kWh; + + // Calculate month identifier (year*12 + month) + long currentMonth = (timeinfo->tm_year + 1900) * 12 + timeinfo->tm_mon; + + // Reset monthly energy on first day of month or if month changed + if ((timeinfo->tm_mday == 1 && timeinfo->tm_hour == 0 && timeinfo->tm_min == 0 && + monthlyResetTime != currentMonth) || (currentMonth > monthlyResetTime && monthlyResetTime > 0)) { + monthlyEnergy_kWh = 0; + monthlyResetTime = currentMonth; } + monthlyEnergy_kWh += energy_kWh; } -#endif - + +#ifndef WLED_DISABLE_MQTT /** ** Function to publish INA219 sensor data to MQTT **/ void publishMqtt(float shuntVoltage, float busVoltage, float loadVoltage, float current, float current_mA, float power, float power_mW, bool overflow) { - // Publish to MQTT only if the WLED MQTT feature is enabled - #ifndef WLED_DISABLE_MQTT - if (WLED_MQTT_CONNECTED) { - // Create a JSON document to hold sensor data - StaticJsonDocument<1024> jsonDoc; - - // Populate the JSON document with sensor readings - jsonDoc["shunt_voltage_mV"] = shuntVoltage; - jsonDoc["bus_voltage_V"] = busVoltage; - jsonDoc["load_voltage_V"] = loadVoltage; - jsonDoc["current_A"] = current; - jsonDoc["current_mA"] = current_mA; - jsonDoc["power_W"] = power; - jsonDoc["power_mW"] = power_mW; - jsonDoc["overflow"] = overflow; - jsonDoc["shunt_resistor_Ohms"] = shuntResistor; - - // Energy calculations - jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; - jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; - jsonDoc["total_energy_kWh"] = totalEnergy_kWh; - - // Reset timestamps - jsonDoc["dailyResetTime"] = dailyResetTime; - jsonDoc["monthlyResetTime"] = monthlyResetTime; - - // Serialize the JSON document into a character buffer - char buffer[1024]; - size_t payload_size = serializeJson(jsonDoc, buffer, sizeof(buffer)); - - // Construct the MQTT topic using the device topic - char topic[128]; - snprintf_P(topic, sizeof(topic), "%s/sensor/ina219", mqttDeviceTopic); + if (!WLED_MQTT_CONNECTED) return; + + // Create a JSON document to hold sensor data + StaticJsonDocument<1024> jsonDoc; + + // Populate the JSON document with sensor readings + jsonDoc["shunt_voltage_mV"] = shuntVoltage; + jsonDoc["bus_voltage_V"] = busVoltage; + jsonDoc["load_voltage_V"] = loadVoltage; + jsonDoc["current_A"] = current; + jsonDoc["current_mA"] = current_mA; + jsonDoc["power_W"] = power; + jsonDoc["power_mW"] = power_mW; + jsonDoc["overflow"] = overflow; + jsonDoc["shunt_resistor_Ohms"] = shuntResistor; + + // Energy calculations + jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; + jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; + jsonDoc["total_energy_kWh"] = totalEnergy_kWh; + + // Reset timestamps + jsonDoc["dailyResetTime"] = dailyResetTime; + jsonDoc["monthlyResetTime"] = monthlyResetTime; + + // Serialize the JSON document into a character buffer + char buffer[1024]; + size_t payload_size = serializeJson(jsonDoc, buffer, sizeof(buffer)); - // Publish the serialized JSON data to the specified MQTT topic - mqtt->publish(topic, 0, true, buffer, payload_size); - } - #endif + // Construct the MQTT topic using the device topic + char topic[128]; + snprintf_P(topic, sizeof(topic), "%s/sensor/ina219", mqttDeviceTopic); + + // Publish the serialized JSON data to the specified MQTT topic + mqtt->publish(topic, 0, true, buffer, payload_size); } - + /** ** Function to create Home Assistant sensor configuration **/ @@ -394,7 +334,7 @@ class UsermodINA219 : public Usermod { size_t payload_size = serializeJson(doc, buffer, sizeof(buffer)); char topic_S[128]; - snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType, sanitizedMqttClientID.c_str(), sanitizedName.c_str()); + snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); // Debug output for the Home Assistant topic and configuration DEBUG_PRINTLN(topic_S); @@ -403,7 +343,7 @@ class UsermodINA219 : public Usermod { // Publish the sensor configuration to Home Assistant mqtt->publish(topic_S, 0, true, buffer, payload_size); } - + void mqttRemoveHassSensor(const String &name, const String &SensorType) { String sanitizedName = name; sanitizedName.replace(' ', '-'); @@ -417,85 +357,171 @@ class UsermodINA219 : public Usermod { // Publish an empty message with retain to delete the sensor from Home Assistant mqtt->publish(sensorTopic, 0, true, ""); } +#endif - // Sanitize the mqttClientID by replacing invalid characters. - String sanitizeMqttClientID(const String &clientID) { - String sanitizedID; +public: + // Destructor to clean up INA219 object + ~UsermodINA219() { + if (_ina219) { + delete _ina219; + _ina219 = nullptr; + } + } - for (unsigned int i = 0; i < clientID.length(); i++) { - char c = clientID[i]; + // Setup function called once on boot or restart + void setup() override { + initDone = updateINA219Settings(); // Configure INA219 settings + } - // Handle common accented characters using simple mapping - if (c == '\xC3' && i + 1 < clientID.length()) { - char next = clientID[i + 1]; - if (next == '\xBC' || next == '\x9C') { // ü or Ü - sanitizedID += (next == '\xBC' ? "u" : "U"); - i++; - continue; - } else if (next == '\xA4' || next == '\xC4') { // ä or Ä - sanitizedID += (next == '\xA4' ? "a" : "A"); - i++; - continue; - } else if (next == '\xB6' || next == '\xD6') { // ö or Ö - sanitizedID += (next == '\xB6' ? "o" : "O"); - i++; - continue; - } else if (next == '\x9F') { // ß - sanitizedID += "s"; - i++; - continue; + // Loop function called continuously + void loop() override { + // Check if the usermod is enabled and the check interval has elapsed + if (!enabled || !initDone || !_ina219 || millis() - lastCheck < checkInterval) { + return; + } + + lastCheck = millis(); + + // Fetch sensor data + shuntVoltage = truncateDecimals(_ina219->getShuntVoltage_mV()); + busVoltage = truncateDecimals(_ina219->getBusVoltage_V()); + + float rawCurrent_mA = _ina219->getCurrent_mA(); + current_mA = truncateDecimals(rawCurrent_mA); + current = truncateDecimals(rawCurrent_mA / 1000.0); // Convert from mA to A + + float rawPower_mW = _ina219->getBusPower(); + power_mW = truncateDecimals(rawPower_mW); + power = truncateDecimals(rawPower_mW / 1000.0); // Convert from mW to W + + loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); + overflow = _ina219->getOverflow() != 0; + + // Update energy consumption + if (lastPublishTime != 0) { + updateEnergy(power, lastCheck - lastPublishTime); + } + lastPublishTime = lastCheck; + + #ifndef WLED_DISABLE_MQTT + // Publish sensor data via MQTT if connected and enabled + if (WLED_MQTT_CONNECTED) { + if (mqttPublish) { + if (mqttPublishAlways || hasValueChanged()) { + publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); + + last_sent_shuntVoltage = shuntVoltage; + last_sent_busVoltage = busVoltage; + last_sent_loadVoltage = loadVoltage; + last_sent_current = current; + last_sent_current_mA = current_mA; + last_sent_power = power; + last_sent_power_mW = power_mW; + last_sent_overflow = overflow; + + mqttPublishSent = true; } + } else if (!mqttPublish && mqttPublishSent) { + char sensorTopic[128]; + snprintf_P(sensorTopic, 127, "%s/sensor/ina219", mqttDeviceTopic); + + // Publishing an empty retained message to delete the sensor from Home Assistant + mqtt->publish(sensorTopic, 0, true, ""); + mqttPublishSent = false; } - // Allow valid characters [a-zA-Z0-9_-] - if ((c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (c >= '0' && c <= '9') || - c == '-' || c == '_') { - sanitizedID += c; - } else { // Replace any other invalid character with an underscore - sanitizedID += '_'; + } + + // Publish Home Assistant discovery data if enabled + if (haDiscovery && !haDiscoverySent) { + if (WLED_MQTT_CONNECTED) { + char topic[128]; + snprintf_P(topic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Common topic for all INA219 data + + mqttCreateHassSensor(F("Current"), topic, F("current"), F("A"), F("current_A"), F("sensor")); + mqttCreateHassSensor(F("Voltage"), topic, F("voltage"), F("V"), F("bus_voltage_V"), F("sensor")); + mqttCreateHassSensor(F("Power"), topic, F("power"), F("W"), F("power_W"), F("sensor")); + mqttCreateHassSensor(F("Shunt Voltage"), topic, F("voltage"), F("mV"), F("shunt_voltage_mV"), F("sensor")); + mqttCreateHassSensor(F("Shunt Resistor"), topic, F(""), F("Ω"), F("shunt_resistor_Ohms"), F("sensor")); + mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("sensor")); + mqttCreateHassSensor(F("Daily Energy"), topic, F("energy"), F("kWh"), F("daily_energy_kWh"), F("sensor")); + mqttCreateHassSensor(F("Monthly Energy"), topic, F("energy"), F("kWh"), F("monthly_energy_kWh"), F("sensor")); + mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); + + haDiscoverySent = true; // Mark as sent to avoid repeating + } + } else if (!haDiscovery && haDiscoverySent) { + if (WLED_MQTT_CONNECTED) { + // Remove previously created sensors + mqttRemoveHassSensor(F("Current"), F("sensor")); + mqttRemoveHassSensor(F("Voltage"), F("sensor")); + mqttRemoveHassSensor(F("Power"), F("sensor")); + mqttRemoveHassSensor(F("Shunt Voltage"), F("sensor")); + mqttRemoveHassSensor(F("Daily Energy"), F("sensor")); + mqttRemoveHassSensor(F("Monthly Energy"), F("sensor")); + mqttRemoveHassSensor(F("Total Energy"), F("sensor")); + mqttRemoveHassSensor(F("Shunt Resistor"), F("sensor")); + mqttRemoveHassSensor(F("Overflow"), F("sensor")); + + haDiscoverySent = false; // Mark as sent to avoid repeating } } - return sanitizedID; + #endif } +#ifndef WLED_DISABLE_MQTT /** - ** Function to update energy calculations based on power and duration + ** Function to publish sensor data to MQTT **/ - void updateEnergy(float power, unsigned long durationMs) { - float durationHours = durationMs / 3600000.0; // Milliseconds to hours - float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) - totalEnergy_kWh += energy_kWh; // Update total energy consumed + bool onMqttMessage(char* topic, char* payload) override { + if (!WLED_MQTT_CONNECTED || !enabled) return false; - // Get current time - time_t now = time(nullptr); - if (now <= 0) return; // Safety check if time isn't available yet + // Check if the message is for the correct topic + if (strstr(topic, "/sensor/ina219") != nullptr) { + StaticJsonDocument<512> jsonDoc; - struct tm *timeinfo = localtime(&now); + // Parse the JSON payload + DeserializationError error = deserializeJson(jsonDoc, payload); + if (error) { + DEBUG_PRINT(F("JSON Parse Error: ")); + DEBUG_PRINTLN(error.c_str()); + return false; + } - // Calculate day identifier (days since epoch) - long currentDay = now / 86400; + // Update the energy values + if (jsonDoc.containsKey("daily_energy_kWh")) + dailyEnergy_kWh = jsonDoc["daily_energy_kWh"]; + if (jsonDoc.containsKey("monthly_energy_kWh")) + monthlyEnergy_kWh = jsonDoc["monthly_energy_kWh"]; + if (jsonDoc.containsKey("total_energy_kWh")) + totalEnergy_kWh = jsonDoc["total_energy_kWh"]; + if (jsonDoc.containsKey("dailyResetTime")) + dailyResetTime = jsonDoc["dailyResetTime"]; + if (jsonDoc.containsKey("monthlyResetTime")) + monthlyResetTime = jsonDoc["monthlyResetTime"]; - // Reset daily energy at midnight or if day changed - if ((timeinfo->tm_hour == 0 && timeinfo->tm_min == 0 && dailyResetTime != currentDay) || - (currentDay > dailyResetTime && dailyResetTime > 0)) { - dailyEnergy_kWh = 0; - dailyResetTime = currentDay; + return true; } - dailyEnergy_kWh += energy_kWh; + return false; + } - // Calculate month identifier (year*12 + month) - long currentMonth = (timeinfo->tm_year + 1900) * 12 + timeinfo->tm_mon; - - // Reset monthly energy on first day of month or if month changed - if ((timeinfo->tm_mday == 1 && timeinfo->tm_hour == 0 && timeinfo->tm_min == 0 && - monthlyResetTime != currentMonth) || (currentMonth > monthlyResetTime && monthlyResetTime > 0)) { - monthlyEnergy_kWh = 0; - monthlyResetTime = currentMonth; + /** + ** Subscribe to MQTT topic for controlling the usermod + **/ + void onMqttConnect(bool sessionPresent) override { + if (!enabled) return; + if (WLED_MQTT_CONNECTED) { + char subuf[64]; + if (mqttDeviceTopic[0] != 0) { + strcpy(subuf, mqttDeviceTopic); + strcat_P(subuf, PSTR("/sensor/ina219")); + mqtt->subscribe(subuf, 0); + DEBUG_PRINT(F("Subscribed to MQTT topic: ")); + DEBUG_PRINTLN(subuf); + } } - monthlyEnergy_kWh += energy_kWh; } - +#endif + /** ** Add energy consumption data to a JSON object for reporting **/ @@ -505,31 +531,29 @@ class UsermodINA219 : public Usermod { user = root.createNestedObject(F("u")); } - // Create a nested array for energy data - JsonArray energy_json_separator = user.createNestedArray(F("------------------------------------")); - - JsonArray energy_json = user.createNestedArray(F("Energy Consumption:")); + JsonArray energy_json = user.createNestedArray(F("INA219:")); - if (!enabled) { + if (!enabled || !initDone) { energy_json.add(F("disabled")); - } else { - // Create a nested array for daily energy - JsonArray dailyEnergy_json = user.createNestedArray(F("Daily Energy")); - dailyEnergy_json.add(dailyEnergy_kWh); - dailyEnergy_json.add(F(" kWh")); - - // Create a nested array for monthly energy - JsonArray monthlyEnergy_json = user.createNestedArray(F("Monthly Energy")); - monthlyEnergy_json.add(monthlyEnergy_kWh); - monthlyEnergy_json.add(F(" kWh")); - - // Create a nested array for total energy - JsonArray totalEnergy_json = user.createNestedArray(F("Total Energy")); - totalEnergy_json.add(totalEnergy_kWh); - totalEnergy_json.add(F(" kWh")); + return; } + + // Create a nested array for daily energy + JsonArray dailyEnergy_json = user.createNestedArray(F("⤷ Daily Energy")); + dailyEnergy_json.add(dailyEnergy_kWh); + dailyEnergy_json.add(F(" kWh")); + + // Create a nested array for monthly energy + JsonArray monthlyEnergy_json = user.createNestedArray(F("⤷ Monthly Energy")); + monthlyEnergy_json.add(monthlyEnergy_kWh); + monthlyEnergy_json.add(F(" kWh")); + + // Create a nested array for total energy + JsonArray totalEnergy_json = user.createNestedArray(F("⤷ Total Energy")); + totalEnergy_json.add(totalEnergy_kWh); + totalEnergy_json.add(F(" kWh")); } - + /** ** Add the current state of energy consumption to a JSON object **/ @@ -541,6 +565,15 @@ class UsermodINA219 : public Usermod { usermod = root.createNestedObject(FPSTR(_name)); } + usermod["enabled"] = enabled; + usermod["shuntVoltage_mV"] = shuntVoltage; + usermod["busVoltage_V"] = busVoltage; + usermod["loadVoltage_V"] = loadVoltage; + usermod["current_A"] = current; + usermod["current_mA"] = current_mA; + usermod["power_W"] = power; + usermod["power_mW"] = power_mW; + usermod["overflow"] = overflow; usermod["totalEnergy_kWh"] = totalEnergy_kWh; usermod["dailyEnergy_kWh"] = dailyEnergy_kWh; usermod["monthlyEnergy_kWh"] = monthlyEnergy_kWh; @@ -557,14 +590,21 @@ class UsermodINA219 : public Usermod { JsonObject usermod = root[FPSTR(_name)]; if (!usermod.isNull()) { // Read values from JSON or retain existing values if not present - totalEnergy_kWh = usermod["totalEnergy_kWh"] | totalEnergy_kWh; - dailyEnergy_kWh = usermod["dailyEnergy_kWh"] | dailyEnergy_kWh; - monthlyEnergy_kWh = usermod["monthlyEnergy_kWh"] | monthlyEnergy_kWh; - dailyResetTime = usermod["dailyResetTime"] | dailyResetTime; - monthlyResetTime = usermod["monthlyResetTime"] | monthlyResetTime; + if (usermod.containsKey("enabled")) + enabled = usermod["enabled"] | enabled; + if (usermod.containsKey("totalEnergy_kWh")) + totalEnergy_kWh = usermod["totalEnergy_kWh"] | totalEnergy_kWh; + if (usermod.containsKey("dailyEnergy_kWh")) + dailyEnergy_kWh = usermod["dailyEnergy_kWh"] | dailyEnergy_kWh; + if (usermod.containsKey("monthlyEnergy_kWh")) + monthlyEnergy_kWh = usermod["monthlyEnergy_kWh"] | monthlyEnergy_kWh; + if (usermod.containsKey("dailyResetTime")) + dailyResetTime = usermod["dailyResetTime"] | dailyResetTime; + if (usermod.containsKey("monthlyResetTime")) + monthlyResetTime = usermod["monthlyResetTime"] | monthlyResetTime; } } - + /** ** Append configuration options to the Usermod menu. **/ @@ -610,7 +650,7 @@ class UsermodINA219 : public Usermod { oappend("addOption(ct,'64 samples (34.05 ms)',14);"); oappend("addOption(ct,'128 samples (68.10 ms)',15);"); - // Append the dropdown for decimal precision (0 to 10) + // Append the dropdown for decimal precision (0 to 3) oappend(F("df=addDropdown('INA219','decimals');")); for (int i = 0; i <= 3; i++) { oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); @@ -627,16 +667,18 @@ class UsermodINA219 : public Usermod { configComplete &= getJsonValue(top["Enabled"], enabled); configComplete &= getJsonValue(top[F("i2c_address")], _i2cAddress); - if (getJsonValue(top[F("check_interval")], checkInterval)) { - if (1 <= checkInterval && checkInterval <= 600) { - checkInterval *= 1000UL; + uint16_t tempInterval = 0; + if (getJsonValue(top[F("check_interval")], tempInterval)) { + if (1 <= tempInterval && tempInterval <= 600) { + checkInterval = static_cast(tempInterval) * 1000UL; } else { DEBUG_PRINTLN(F("INA219: Invalid check_interval value; using default.")); - checkInterval = _checkInterval * 1000UL; + checkInterval = static_cast(_checkInterval) * 1000UL; } } else { configComplete = false; } + configComplete &= getJsonValue(top["conversion_time"], conversionTime); configComplete &= getJsonValue(top["decimals"], _decimalFactor); configComplete &= getJsonValue(top["shunt_resistor"], shuntResistor); @@ -649,7 +691,7 @@ class UsermodINA219 : public Usermod { haDiscoverySent = !haDiscovery; #endif - updateINA219Settings(); + initDone = updateINA219Settings(); // Configure INA219 settings return configComplete; } From a0ec3ba5f84410573a9c561ba4bcca55fc996d5a Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sun, 20 Apr 2025 13:05:37 +0200 Subject: [PATCH 43/70] coderabbitai improvements --- usermods/INA219_v2/INA219_v2.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp index a1d3c16335..40c5131d95 100644 --- a/usermods/INA219_v2/INA219_v2.cpp +++ b/usermods/INA219_v2/INA219_v2.cpp @@ -150,6 +150,8 @@ class UsermodINA219 : public Usermod { if (!_ina219->init()) { DEBUG_PRINTLN(F("INA219 initialization failed!")); enabled = false; + delete _ina219; + _ina219 = nullptr; return false; } _ina219->setShuntSizeInOhms(shuntResistor); @@ -399,7 +401,9 @@ class UsermodINA219 : public Usermod { // Update energy consumption if (lastPublishTime != 0) { - updateEnergy(power, lastCheck - lastPublishTime); + if (power >= 0) { + updateEnergy(power, lastCheck - lastPublishTime); + } } lastPublishTime = lastCheck; From 6fec39bd6e95f15ae251d96639480f8824544d29 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Tue, 22 Apr 2025 00:03:55 +0200 Subject: [PATCH 44/70] Fix for daily/monthly energy reset, wasnt working correctly before --- usermods/INA219_v2/INA219_v2.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp index 40c5131d95..e215aa666e 100644 --- a/usermods/INA219_v2/INA219_v2.cpp +++ b/usermods/INA219_v2/INA219_v2.cpp @@ -208,19 +208,20 @@ class UsermodINA219 : public Usermod { void updateEnergy(float power, unsigned long durationMs) { float durationHours = durationMs / 3600000.0; // Milliseconds to hours float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) - totalEnergy_kWh += energy_kWh; // Update total energy consumed - // Get current time - time_t now = time(nullptr); - if (now <= 0) return; // Safety check if time isn't available yet + // Skip negative values or unrealistic spikes + if (energy_kWh < 0 || energy_kWh > 10.0) { // 10 kWh in a few seconds is unrealistic + DEBUG_PRINTLN(F("SKIPPED: Energy value out of range")); + return; + } - struct tm *timeinfo = localtime(&now); + totalEnergy_kWh += energy_kWh; // Update total energy consumed // Calculate day identifier (days since epoch) - long currentDay = now / 86400; + long currentDay = localTime / 86400; // Reset daily energy at midnight or if day changed - if ((timeinfo->tm_hour == 0 && timeinfo->tm_min == 0 && dailyResetTime != currentDay) || + if ((hour(localTime) == 0 && minute(localTime) == 0 && dailyResetTime != currentDay) || (currentDay > dailyResetTime && dailyResetTime > 0)) { dailyEnergy_kWh = 0; dailyResetTime = currentDay; @@ -228,10 +229,10 @@ class UsermodINA219 : public Usermod { dailyEnergy_kWh += energy_kWh; // Calculate month identifier (year*12 + month) - long currentMonth = (timeinfo->tm_year + 1900) * 12 + timeinfo->tm_mon; + long currentMonth = year(localTime) * 12 + month(localTime) - 1; // month() is 1-12 // Reset monthly energy on first day of month or if month changed - if ((timeinfo->tm_mday == 1 && timeinfo->tm_hour == 0 && timeinfo->tm_min == 0 && + if ((day(localTime) == 1 && hour(localTime) == 0 && minute(localTime) == 0 && monthlyResetTime != currentMonth) || (currentMonth > monthlyResetTime && monthlyResetTime > 0)) { monthlyEnergy_kWh = 0; monthlyResetTime = currentMonth; From 011de93a12b0672d3b345e069b0dc0f64afae200 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Tue, 22 Apr 2025 17:47:41 +0200 Subject: [PATCH 45/70] coderabbitai improvements --- usermods/INA219_v2/INA219_v2.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp index e215aa666e..15caeaa2f2 100644 --- a/usermods/INA219_v2/INA219_v2.cpp +++ b/usermods/INA219_v2/INA219_v2.cpp @@ -207,6 +207,13 @@ class UsermodINA219 : public Usermod { **/ void updateEnergy(float power, unsigned long durationMs) { float durationHours = durationMs / 3600000.0; // Milliseconds to hours + + // Skip negligible power values to avoid accumulating rounding errors + if (power < 0.01) { + DEBUG_PRINT(F("SKIPPED: Power too low (")); DEBUG_PRINT(power); DEBUG_PRINTLN(F(" W) — skipping to avoid rounding errors")); + return; + } + float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) // Skip negative values or unrealistic spikes @@ -337,7 +344,10 @@ class UsermodINA219 : public Usermod { size_t payload_size = serializeJson(doc, buffer, sizeof(buffer)); char topic_S[128]; - snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); + int length = snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); + if (length >= sizeof(topic_S)) { + DEBUG_PRINTLN(F("HA topic truncated - potential buffer overflow")); + } // Debug output for the Home Assistant topic and configuration DEBUG_PRINTLN(topic_S); @@ -355,7 +365,10 @@ class UsermodINA219 : public Usermod { sanitizedMqttClientID += "-" + String(escapedMac.c_str()); char sensorTopic[128]; - snprintf_P(sensorTopic, 127, "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); + int length = snprintf_P(sensorTopic, sizeof(sensorTopic), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); + if (length >= sizeof(sensorTopic)) { + DEBUG_PRINTLN(F("HA sensor topic truncated - potential buffer overflow")); + } // Publish an empty message with retain to delete the sensor from Home Assistant mqtt->publish(sensorTopic, 0, true, ""); From ecf2401abddf391cf8ded4e2bfade98eae29aece Mon Sep 17 00:00:00 2001 From: KrX3D Date: Tue, 6 May 2025 21:52:54 +0200 Subject: [PATCH 46/70] - Generalized sensor naming from INA219 to INA2xx for broader compatibility - Fixed issue with energy values being overwritten on startup or reflash - Restored energy values from MQTT are now added to current totals instead of replacing them - Added additional configuration options for INA sensor behavior --- usermods/INA219_v2/INA219_v2.cpp | 516 ++++++++++++++++---- usermods/INA219_v2/img/INA226-Pin-Outs.webp | Bin 0 -> 61186 bytes usermods/INA219_v2/img/homeassistant.png | Bin 57528 -> 74283 bytes usermods/INA219_v2/img/info.png | Bin 48000 -> 32431 bytes usermods/INA219_v2/img/usermod_settings.png | Bin 11550 -> 21480 bytes usermods/INA219_v2/library.json | 5 +- wled00/const.h | 2 +- 7 files changed, 415 insertions(+), 108 deletions(-) create mode 100644 usermods/INA219_v2/img/INA226-Pin-Outs.webp diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/INA219_v2/INA219_v2.cpp index 15caeaa2f2..1611ef25cb 100644 --- a/usermods/INA219_v2/INA219_v2.cpp +++ b/usermods/INA219_v2/INA219_v2.cpp @@ -1,4 +1,8 @@ -// Configurable settings for the INA219 Usermod +// Configurable settings for the INA2xx Usermod + +// logging macro: +#define _logUsermodInaSensor(fmt, ...) \ + DEBUG_PRINTF("[INA2xx_Sensor] " fmt "\n", ##__VA_ARGS__) // Enabled setting #ifndef INA219_ENABLED @@ -29,6 +33,18 @@ #define INA219_CORRECTION_FACTOR 1.0 // Default correction factor. Default 1.0 #endif +#ifndef INA219_P_GAIN + #define INA219_P_GAIN PG_320 // PG_40, PG_80, PG_160, PG_320 +#endif + +#ifndef INA219_BUSRANGE + #define INA219_BUSRANGE BRNG_32 // BRNG_16, BRNG_32 +#endif + +#ifndef INA219_SHUNT_VOLT_OFFSET + #define INA219_SHUNT_VOLT_OFFSET 0.0 // mV offset at zero current +#endif + #ifndef INA219_MQTT_PUBLISH #define INA219_MQTT_PUBLISH false // Default: do not publish to MQTT #endif @@ -44,12 +60,13 @@ #include "wled.h" #include -class UsermodINA219 : public Usermod { +class UsermodINA2xx : public Usermod { private: static const char _name[]; // Name of the usermod bool initDone = false; // Flag for successful initialization unsigned long lastCheck = 0; // Timestamp for the last check + bool alreadyLoggedDisabled = false; // Define the variables using the pre-defined or default values bool enabled = INA219_ENABLED; @@ -60,6 +77,9 @@ class UsermodINA219 : public Usermod { uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; float shuntResistor = INA219_SHUNT_RESISTOR; float correctionFactor = INA219_CORRECTION_FACTOR; + INA219_PGAIN pGain = static_cast(INA219_P_GAIN); + INA219_BUS_RANGE busRange = static_cast(INA219_BUSRANGE); + float shuntVoltOffset_mV = INA219_SHUNT_VOLT_OFFSET; bool mqttPublish = INA219_MQTT_PUBLISH; bool mqttPublishSent = !INA219_MQTT_PUBLISH; bool mqttPublishAlways = INA219_MQTT_PUBLISH_ALWAYS; @@ -95,10 +115,13 @@ class UsermodINA219 : public Usermod { unsigned long dailyResetTime = 0; unsigned long monthlyResetTime = 0; - INA219_WE *_ina219 = nullptr; // INA219 sensor object + bool mqttStateRestored = false; + + INA219_WE *_ina2xx = nullptr; // INA2xx sensor object // Function to truncate decimals based on the configured decimal factor float truncateDecimals(float val) { + _logUsermodInaSensor("Truncating value %.6f with factor %d", val, _decimalFactor); if (_decimalFactor == 0) { return roundf(val); } @@ -107,11 +130,15 @@ class UsermodINA219 : public Usermod { } bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f) { - return fabsf(oldValue - newValue) > threshold; + bool changed = fabsf(oldValue - newValue) > threshold; + if (changed) { + _logUsermodInaSensor("Significant change detected: old=%.6f, new=%.6f, diff=%.6f", oldValue, newValue, fabsf(oldValue - newValue)); + } + return changed; } bool hasValueChanged() { - return hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || + bool changed = hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || hasSignificantChange(last_sent_busVoltage, busVoltage) || hasSignificantChange(last_sent_loadVoltage, loadVoltage) || hasSignificantChange(last_sent_current, current) || @@ -119,44 +146,72 @@ class UsermodINA219 : public Usermod { hasSignificantChange(last_sent_power, power) || hasSignificantChange(last_sent_power_mW, power_mW) || (last_sent_overflow != overflow); + + if (changed) { + _logUsermodInaSensor("Values changed, need to publish"); + } + return changed; } - // Update INA219 settings and reinitialize sensor if necessary - bool updateINA219Settings() { + // Update INA2xx settings and reinitialize sensor if necessary + bool updateINA2xxSettings() { + _logUsermodInaSensor("Updating INA2xx sensor settings"); + // Validate I2C pins; if invalid, disable usermod and log message if (i2c_scl < 0 || i2c_sda < 0) { enabled = false; - DEBUG_PRINTLN(F("INA219 disabled: Invalid I2C pins. Check global I2C settings.")); + _logUsermodInaSensor("INA2xx disabled: Invalid I2C pins. Check global I2C settings."); return false; } - DEBUG_PRINT(F("Using I2C SDA: ")); - DEBUG_PRINTLN(i2c_sda); - DEBUG_PRINT(F("Using I2C SCL: ")); - DEBUG_PRINTLN(i2c_scl); - - // Reinitialize the INA219 instance with updated settings - if (_ina219 != nullptr) { - delete _ina219; - _ina219 = nullptr; + _logUsermodInaSensor("Using I2C SDA: %d", i2c_sda); + _logUsermodInaSensor("Using I2C SCL: %d", i2c_scl); + + // Reinitialize the INA2xx instance with updated settings + if (_ina2xx != nullptr) { + _logUsermodInaSensor("Freeing existing INA2xx instance"); + delete _ina2xx; + _ina2xx = nullptr; } - _ina219 = new INA219_WE(_i2cAddress); - if (!_ina219) { - DEBUG_PRINTLN(F("Failed to allocate memory for INA219 sensor!")); + if (!enabled) return true; + + _logUsermodInaSensor("Creating new INA2xx instance with address 0x%02X", _i2cAddress); + _ina2xx = new INA219_WE(_i2cAddress); + + if (!_ina2xx) { + _logUsermodInaSensor("Failed to allocate memory for INA2xx sensor!"); enabled = false; return false; } - if (!_ina219->init()) { - DEBUG_PRINTLN(F("INA219 initialization failed!")); + _logUsermodInaSensor("Initializing INA2xx sensor"); + if (!_ina2xx->init()) { + _logUsermodInaSensor("INA2xx initialization failed!"); enabled = false; - delete _ina219; - _ina219 = nullptr; + delete _ina2xx; + _ina2xx = nullptr; return false; } - _ina219->setShuntSizeInOhms(shuntResistor); - _ina219->setADCMode(conversionTime); - _ina219->setCorrectionFactor(correctionFactor); + + _logUsermodInaSensor("Setting shunt resistor to %.4f Ohms", shuntResistor); + _ina2xx->setShuntSizeInOhms(shuntResistor); + + _logUsermodInaSensor("Setting ADC mode to %d", conversionTime); + _ina2xx->setADCMode(conversionTime); + + _logUsermodInaSensor("Setting correction factor to %.4f", correctionFactor); + _ina2xx->setCorrectionFactor(correctionFactor); + + _logUsermodInaSensor("Setting PGA gain to %d", pGain); + _ina2xx->setPGain(pGain); + + _logUsermodInaSensor("Setting bus range to %d", busRange); + _ina2xx->setBusRange(busRange); + + _logUsermodInaSensor("Setting shunt voltage offset to %.3f mV", shuntVoltOffset_mV); + _ina2xx->setShuntVoltOffset_mV(shuntVoltOffset_mV); + + _logUsermodInaSensor("INA2xx sensor configured successfully"); return true; } @@ -164,6 +219,7 @@ class UsermodINA219 : public Usermod { // Sanitize the mqttClientID by replacing invalid characters. String sanitizeMqttClientID(const String &clientID) { String sanitizedID; + _logUsermodInaSensor("Sanitizing MQTT client ID: %s", clientID.c_str()); for (unsigned int i = 0; i < clientID.length(); i++) { char c = clientID[i]; @@ -199,6 +255,7 @@ class UsermodINA219 : public Usermod { sanitizedID += '_'; } } + _logUsermodInaSensor("Sanitized MQTT client ID: %s", sanitizedID.c_str()); return sanitizedID; } @@ -207,54 +264,68 @@ class UsermodINA219 : public Usermod { **/ void updateEnergy(float power, unsigned long durationMs) { float durationHours = durationMs / 3600000.0; // Milliseconds to hours + _logUsermodInaSensor("Updating energy - Power: %.3f W, Duration: %lu ms (%.6f hours)", power, durationMs, durationHours); // Skip negligible power values to avoid accumulating rounding errors if (power < 0.01) { - DEBUG_PRINT(F("SKIPPED: Power too low (")); DEBUG_PRINT(power); DEBUG_PRINTLN(F(" W) — skipping to avoid rounding errors")); + _logUsermodInaSensor("SKIPPED: Power too low (%.3f W) — skipping to avoid rounding errors.", power); return; } float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) + _logUsermodInaSensor("Calculated energy: %.6f kWh", energy_kWh); // Skip negative values or unrealistic spikes if (energy_kWh < 0 || energy_kWh > 10.0) { // 10 kWh in a few seconds is unrealistic - DEBUG_PRINTLN(F("SKIPPED: Energy value out of range")); + _logUsermodInaSensor("SKIPPED: Energy value out of range (%.6f kWh)", energy_kWh); return; } totalEnergy_kWh += energy_kWh; // Update total energy consumed + _logUsermodInaSensor("Total energy updated to: %.6f kWh", totalEnergy_kWh); // Calculate day identifier (days since epoch) long currentDay = localTime / 86400; + _logUsermodInaSensor("Current day: %ld, Last reset day: %lu", currentDay, dailyResetTime); // Reset daily energy at midnight or if day changed if ((hour(localTime) == 0 && minute(localTime) == 0 && dailyResetTime != currentDay) || (currentDay > dailyResetTime && dailyResetTime > 0)) { + _logUsermodInaSensor("Resetting daily energy counter (day change detected)"); dailyEnergy_kWh = 0; dailyResetTime = currentDay; } dailyEnergy_kWh += energy_kWh; + _logUsermodInaSensor("Daily energy updated to: %.6f kWh", dailyEnergy_kWh); // Calculate month identifier (year*12 + month) long currentMonth = year(localTime) * 12 + month(localTime) - 1; // month() is 1-12 + _logUsermodInaSensor("Current month: %ld, Last reset month: %lu", currentMonth, monthlyResetTime); // Reset monthly energy on first day of month or if month changed if ((day(localTime) == 1 && hour(localTime) == 0 && minute(localTime) == 0 && monthlyResetTime != currentMonth) || (currentMonth > monthlyResetTime && monthlyResetTime > 0)) { + _logUsermodInaSensor("Resetting monthly energy counter (month change detected)"); monthlyEnergy_kWh = 0; monthlyResetTime = currentMonth; } monthlyEnergy_kWh += energy_kWh; + _logUsermodInaSensor("Monthly energy updated to: %.6f kWh", monthlyEnergy_kWh); } #ifndef WLED_DISABLE_MQTT /** - ** Function to publish INA219 sensor data to MQTT + ** Function to publish INA2xx sensor data to MQTT **/ void publishMqtt(float shuntVoltage, float busVoltage, float loadVoltage, float current, float current_mA, float power, float power_mW, bool overflow) { - if (!WLED_MQTT_CONNECTED) return; + if (!WLED_MQTT_CONNECTED) { + _logUsermodInaSensor("MQTT not connected, skipping publish"); + return; + } + + _logUsermodInaSensor("Publishing sensor data to MQTT"); // Create a JSON document to hold sensor data StaticJsonDocument<1024> jsonDoc; @@ -270,10 +341,14 @@ class UsermodINA219 : public Usermod { jsonDoc["overflow"] = overflow; jsonDoc["shunt_resistor_Ohms"] = shuntResistor; - // Energy calculations - jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; - jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; - jsonDoc["total_energy_kWh"] = totalEnergy_kWh; + if (mqttStateRestored) { // only add energy_kWh fields after retained state arrives from mqtt + // Energy calculations + jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; + jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; + jsonDoc["total_energy_kWh"] = totalEnergy_kWh; + } else { + _logUsermodInaSensor("Skipping energy fields until MQTT state restored"); + } // Reset timestamps jsonDoc["dailyResetTime"] = dailyResetTime; @@ -285,10 +360,12 @@ class UsermodINA219 : public Usermod { // Construct the MQTT topic using the device topic char topic[128]; - snprintf_P(topic, sizeof(topic), "%s/sensor/ina219", mqttDeviceTopic); + snprintf_P(topic, sizeof(topic), "%s/sensor/ina2xx", mqttDeviceTopic); + _logUsermodInaSensor("MQTT topic: %s", topic); // Publish the serialized JSON data to the specified MQTT topic mqtt->publish(topic, 0, true, buffer, payload_size); + _logUsermodInaSensor("MQTT publish complete, payload size: %d bytes", payload_size); } /** @@ -299,6 +376,7 @@ class UsermodINA219 : public Usermod { const String &jsonKey, const String &SensorType) { String sanitizedName = name; sanitizedName.replace(' ', '-'); + _logUsermodInaSensor("Creating HA sensor: %s", sanitizedName.c_str()); String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); sanitizedMqttClientID += "-" + String(escapedMac.c_str()); @@ -313,6 +391,7 @@ class UsermodINA219 : public Usermod { String uid = escapedMac.c_str(); uid += "_" + sanitizedName; doc[F("uniq_id")] = uid; + _logUsermodInaSensor("Sensor unique ID: %s", uid.c_str()); // Template to extract specific value from JSON doc[F("val_tpl")] = String("{{ value_json.") + jsonKey + String(" }}"); @@ -346,20 +425,22 @@ class UsermodINA219 : public Usermod { char topic_S[128]; int length = snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); if (length >= sizeof(topic_S)) { - DEBUG_PRINTLN(F("HA topic truncated - potential buffer overflow")); + _logUsermodInaSensor("HA topic truncated - potential buffer overflow"); } // Debug output for the Home Assistant topic and configuration - DEBUG_PRINTLN(topic_S); - DEBUG_PRINTLN(buffer); + _logUsermodInaSensor("Topic: %s", topic_S); + _logUsermodInaSensor("Buffer: %s", buffer); // Publish the sensor configuration to Home Assistant mqtt->publish(topic_S, 0, true, buffer, payload_size); + _logUsermodInaSensor("Home Assistant sensor %s created", sanitizedName.c_str()); } void mqttRemoveHassSensor(const String &name, const String &SensorType) { String sanitizedName = name; sanitizedName.replace(' ', '-'); + _logUsermodInaSensor("Removing HA sensor: %s", sanitizedName.c_str()); String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); sanitizedMqttClientID += "-" + String(escapedMac.c_str()); @@ -367,57 +448,74 @@ class UsermodINA219 : public Usermod { char sensorTopic[128]; int length = snprintf_P(sensorTopic, sizeof(sensorTopic), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); if (length >= sizeof(sensorTopic)) { - DEBUG_PRINTLN(F("HA sensor topic truncated - potential buffer overflow")); + _logUsermodInaSensor("HA sensor topic truncated - potential buffer overflow"); } // Publish an empty message with retain to delete the sensor from Home Assistant mqtt->publish(sensorTopic, 0, true, ""); + _logUsermodInaSensor("Published empty message to remove sensor: %s", sensorTopic); } #endif public: - // Destructor to clean up INA219 object - ~UsermodINA219() { - if (_ina219) { - delete _ina219; - _ina219 = nullptr; + // Destructor to clean up INA2xx object + ~UsermodINA2xx() { + if (_ina2xx) { + _logUsermodInaSensor("Cleaning up INA2xx sensor object"); + delete _ina2xx; + _ina2xx = nullptr; } } // Setup function called once on boot or restart void setup() override { - initDone = updateINA219Settings(); // Configure INA219 settings + _logUsermodInaSensor("Setting up INA2xx sensor usermod"); + initDone = updateINA2xxSettings(); // Configure INA2xx settings + if (initDone) { + _logUsermodInaSensor("INA2xx setup complete and successful"); + } else { + _logUsermodInaSensor("INA2xx setup failed"); + } } // Loop function called continuously void loop() override { // Check if the usermod is enabled and the check interval has elapsed - if (!enabled || !initDone || !_ina219 || millis() - lastCheck < checkInterval) { + if (!enabled || !initDone || !_ina2xx || millis() - lastCheck < checkInterval) { return; } lastCheck = millis(); + _logUsermodInaSensor("Reading sensor data at %lu ms", lastCheck); // Fetch sensor data - shuntVoltage = truncateDecimals(_ina219->getShuntVoltage_mV()); - busVoltage = truncateDecimals(_ina219->getBusVoltage_V()); + shuntVoltage = truncateDecimals(_ina2xx->getShuntVoltage_mV()); + busVoltage = truncateDecimals(_ina2xx->getBusVoltage_V()); - float rawCurrent_mA = _ina219->getCurrent_mA(); + float rawCurrent_mA = _ina2xx->getCurrent_mA(); current_mA = truncateDecimals(rawCurrent_mA); current = truncateDecimals(rawCurrent_mA / 1000.0); // Convert from mA to A - float rawPower_mW = _ina219->getBusPower(); + float rawPower_mW = _ina2xx->getBusPower(); power_mW = truncateDecimals(rawPower_mW); power = truncateDecimals(rawPower_mW / 1000.0); // Convert from mW to W loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); - overflow = _ina219->getOverflow() != 0; + overflow = _ina2xx->getOverflow() != 0; + + _logUsermodInaSensor("Sensor readings - Shunt: %.3f mV, Bus: %.3f V, Load: %.3f V", shuntVoltage, busVoltage, loadVoltage); + _logUsermodInaSensor("Sensor readings - Current: %.3f A (%.3f mA), Power: %.3f W (%.3f mW)", current, current_mA, power, power_mW); + _logUsermodInaSensor("Overflow status: %s", overflow ? "TRUE" : "FALSE"); // Update energy consumption if (lastPublishTime != 0) { if (power >= 0) { updateEnergy(power, lastCheck - lastPublishTime); + } else { + _logUsermodInaSensor("Skipping energy update due to negative power: %.3f W", power); } + } else { + _logUsermodInaSensor("First reading - establishing baseline for energy calculation"); } lastPublishTime = lastCheck; @@ -426,6 +524,7 @@ class UsermodINA219 : public Usermod { if (WLED_MQTT_CONNECTED) { if (mqttPublish) { if (mqttPublishAlways || hasValueChanged()) { + _logUsermodInaSensor("Publishing MQTT data (always=%d, changed=%d)", mqttPublishAlways, hasValueChanged()); publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); last_sent_shuntVoltage = shuntVoltage; @@ -438,10 +537,13 @@ class UsermodINA219 : public Usermod { last_sent_overflow = overflow; mqttPublishSent = true; + } else { + _logUsermodInaSensor("No significant change in values, skipping MQTT publish"); } } else if (!mqttPublish && mqttPublishSent) { + _logUsermodInaSensor("MQTT publishing disabled, removing previous retained message"); char sensorTopic[128]; - snprintf_P(sensorTopic, 127, "%s/sensor/ina219", mqttDeviceTopic); + snprintf_P(sensorTopic, 127, "%s/sensor/ina2xx", mqttDeviceTopic); // Publishing an empty retained message to delete the sensor from Home Assistant mqtt->publish(sensorTopic, 0, true, ""); @@ -452,8 +554,9 @@ class UsermodINA219 : public Usermod { // Publish Home Assistant discovery data if enabled if (haDiscovery && !haDiscoverySent) { if (WLED_MQTT_CONNECTED) { + _logUsermodInaSensor("Setting up Home Assistant discovery"); char topic[128]; - snprintf_P(topic, 127, "%s/sensor/ina219", mqttDeviceTopic); // Common topic for all INA219 data + snprintf_P(topic, 127, "%s/sensor/ina2xx", mqttDeviceTopic); // Common topic for all INA2xx data mqttCreateHassSensor(F("Current"), topic, F("current"), F("A"), F("current_A"), F("sensor")); mqttCreateHassSensor(F("Voltage"), topic, F("voltage"), F("V"), F("bus_voltage_V"), F("sensor")); @@ -466,9 +569,11 @@ class UsermodINA219 : public Usermod { mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); haDiscoverySent = true; // Mark as sent to avoid repeating + _logUsermodInaSensor("Home Assistant discovery complete"); } } else if (!haDiscovery && haDiscoverySent) { if (WLED_MQTT_CONNECTED) { + _logUsermodInaSensor("Removing Home Assistant discovery sensors"); // Remove previously created sensors mqttRemoveHassSensor(F("Current"), F("sensor")); mqttRemoveHassSensor(F("Voltage"), F("sensor")); @@ -481,6 +586,7 @@ class UsermodINA219 : public Usermod { mqttRemoveHassSensor(F("Overflow"), F("sensor")); haDiscoverySent = false; // Mark as sent to avoid repeating + _logUsermodInaSensor("Home Assistant discovery removal complete"); } } #endif @@ -494,29 +600,43 @@ class UsermodINA219 : public Usermod { if (!WLED_MQTT_CONNECTED || !enabled) return false; // Check if the message is for the correct topic - if (strstr(topic, "/sensor/ina219") != nullptr) { + if (strstr(topic, "/sensor/ina2xx") != nullptr) { + _logUsermodInaSensor("MQTT message received on INA2xx topic"); StaticJsonDocument<512> jsonDoc; // Parse the JSON payload DeserializationError error = deserializeJson(jsonDoc, payload); if (error) { - DEBUG_PRINT(F("JSON Parse Error: ")); - DEBUG_PRINTLN(error.c_str()); + _logUsermodInaSensor("JSON Parse Error: %s", error.c_str()); return false; } // Update the energy values - if (jsonDoc.containsKey("daily_energy_kWh")) - dailyEnergy_kWh = jsonDoc["daily_energy_kWh"]; - if (jsonDoc.containsKey("monthly_energy_kWh")) - monthlyEnergy_kWh = jsonDoc["monthly_energy_kWh"]; - if (jsonDoc.containsKey("total_energy_kWh")) - totalEnergy_kWh = jsonDoc["total_energy_kWh"]; - if (jsonDoc.containsKey("dailyResetTime")) - dailyResetTime = jsonDoc["dailyResetTime"]; - if (jsonDoc.containsKey("monthlyResetTime")) - monthlyResetTime = jsonDoc["monthlyResetTime"]; - + if (!mqttStateRestored) { + // Only merge in retained MQTT values once! + if (jsonDoc.containsKey("daily_energy_kWh")) { + float restored = jsonDoc["daily_energy_kWh"]; + if (!isnan(restored)) { + dailyEnergy_kWh += restored; + _logUsermodInaSensor("Merged daily energy from MQTT: +%.6f kWh => %.6f kWh", restored, dailyEnergy_kWh); + } + } + if (jsonDoc.containsKey("monthly_energy_kWh")) { + float restored = jsonDoc["monthly_energy_kWh"]; + if (!isnan(restored)) { + monthlyEnergy_kWh += restored; + _logUsermodInaSensor("Merged monthly energy from MQTT: +%.6f kWh => %.6f kWh", restored, monthlyEnergy_kWh); + } + } + if (jsonDoc.containsKey("total_energy_kWh")) { + float restored = jsonDoc["total_energy_kWh"]; + if (!isnan(restored)) { + totalEnergy_kWh += restored; + _logUsermodInaSensor("Merged total energy from MQTT: +%.6f kWh => %.6f kWh", restored, totalEnergy_kWh); + } + } + mqttStateRestored = true; // Only do this once! + } return true; } return false; @@ -531,10 +651,9 @@ class UsermodINA219 : public Usermod { char subuf[64]; if (mqttDeviceTopic[0] != 0) { strcpy(subuf, mqttDeviceTopic); - strcat_P(subuf, PSTR("/sensor/ina219")); + strcat_P(subuf, PSTR("/sensor/ina2xx")); mqtt->subscribe(subuf, 0); - DEBUG_PRINT(F("Subscribed to MQTT topic: ")); - DEBUG_PRINTLN(subuf); + _logUsermodInaSensor("Subscribed to MQTT topic: %s", subuf); } } } @@ -549,13 +668,19 @@ class UsermodINA219 : public Usermod { user = root.createNestedObject(F("u")); } - JsonArray energy_json = user.createNestedArray(F("INA219:")); + JsonArray energy_json = user.createNestedArray(F("INA2xx:")); if (!enabled || !initDone) { energy_json.add(F("disabled")); + if (!alreadyLoggedDisabled) { + _logUsermodInaSensor("Adding disabled status to JSON info"); + alreadyLoggedDisabled = true; + } return; } + alreadyLoggedDisabled = false; + // File needs to be UTF-8 to show an arrow that points down and right instead of an question mark // Create a nested array for daily energy JsonArray dailyEnergy_json = user.createNestedArray(F("⤷ Daily Energy")); dailyEnergy_json.add(dailyEnergy_kWh); @@ -570,13 +695,19 @@ class UsermodINA219 : public Usermod { JsonArray totalEnergy_json = user.createNestedArray(F("⤷ Total Energy")); totalEnergy_json.add(totalEnergy_kWh); totalEnergy_json.add(F(" kWh")); + + _logUsermodInaSensor("Added energy data to JSON info: daily=%.6f, monthly=%.6f, total=%.6f kWh", dailyEnergy_kWh, monthlyEnergy_kWh, totalEnergy_kWh); } /** ** Add the current state of energy consumption to a JSON object **/ void addToJsonState(JsonObject& root) override { - if (!initDone) return; + if (!enabled) return; + if (!initDone) { + _logUsermodInaSensor("Not adding to JSON state - initialization not complete"); + return; + } JsonObject usermod = root[FPSTR(_name)]; if (usermod.isNull()) { @@ -597,29 +728,72 @@ class UsermodINA219 : public Usermod { usermod["monthlyEnergy_kWh"] = monthlyEnergy_kWh; usermod["dailyResetTime"] = dailyResetTime; usermod["monthlyResetTime"] = monthlyResetTime; + + _logUsermodInaSensor("Added sensor readings to JSON state: V=%.3fV, I=%.3fA, P=%.3fW", loadVoltage, current, power); } /** ** Read energy consumption data from a JSON object **/ void readFromJsonState(JsonObject& root) override { - if (!initDone) return; // Prevent crashes on boot if initialization is not done + if (!enabled) return; + if (!initDone) { // Prevent crashes on boot if initialization is not done + _logUsermodInaSensor("Not reading from JSON state - initialization not complete"); + return; + } JsonObject usermod = root[FPSTR(_name)]; if (!usermod.isNull()) { // Read values from JSON or retain existing values if not present - if (usermod.containsKey("enabled")) - enabled = usermod["enabled"] | enabled; - if (usermod.containsKey("totalEnergy_kWh")) + if (usermod.containsKey("enabled")) { + bool prevEnabled = enabled; + enabled = usermod["enabled"] | enabled; + if (prevEnabled != enabled) { + _logUsermodInaSensor("Enabled state changed: %s", enabled ? "enabled" : "disabled"); + } + } + + if (usermod.containsKey("totalEnergy_kWh")) { + float prevTotal = totalEnergy_kWh; totalEnergy_kWh = usermod["totalEnergy_kWh"] | totalEnergy_kWh; - if (usermod.containsKey("dailyEnergy_kWh")) + if (totalEnergy_kWh != prevTotal) { + _logUsermodInaSensor("Total energy updated from JSON: %.6f kWh", totalEnergy_kWh); + } + } + + if (usermod.containsKey("dailyEnergy_kWh")) { + float prevDaily = dailyEnergy_kWh; dailyEnergy_kWh = usermod["dailyEnergy_kWh"] | dailyEnergy_kWh; - if (usermod.containsKey("monthlyEnergy_kWh")) + if (dailyEnergy_kWh != prevDaily) { + _logUsermodInaSensor("Daily energy updated from JSON: %.6f kWh", dailyEnergy_kWh); + } + } + + if (usermod.containsKey("monthlyEnergy_kWh")) { + float prevMonthly = monthlyEnergy_kWh; monthlyEnergy_kWh = usermod["monthlyEnergy_kWh"] | monthlyEnergy_kWh; - if (usermod.containsKey("dailyResetTime")) + if (monthlyEnergy_kWh != prevMonthly) { + _logUsermodInaSensor("Monthly energy updated from JSON: %.6f kWh", monthlyEnergy_kWh); + } + } + + if (usermod.containsKey("dailyResetTime")) { + unsigned long prevDailyReset = dailyResetTime; dailyResetTime = usermod["dailyResetTime"] | dailyResetTime; - if (usermod.containsKey("monthlyResetTime")) + if (dailyResetTime != prevDailyReset) { + _logUsermodInaSensor("Daily reset time updated from JSON: %lu", dailyResetTime); + } + } + + if (usermod.containsKey("monthlyResetTime")) { + unsigned long prevMonthlyReset = monthlyResetTime; monthlyResetTime = usermod["monthlyResetTime"] | monthlyResetTime; + if (monthlyResetTime != prevMonthlyReset) { + _logUsermodInaSensor("Monthly reset time updated from JSON: %lu", monthlyResetTime); + } + } + } else { + _logUsermodInaSensor("No usermod data found in JSON state"); } } @@ -627,13 +801,17 @@ class UsermodINA219 : public Usermod { ** Append configuration options to the Usermod menu. **/ void addToConfig(JsonObject& root) override { - JsonObject top = root.createNestedObject(F("INA219")); + JsonObject top = root.createNestedObject(F("INA2xx")); top["Enabled"] = enabled; top["i2c_address"] = static_cast(_i2cAddress); top["check_interval"] = checkInterval / 1000; top["conversion_time"] = conversionTime; top["decimals"] = _decimalFactor; top["shunt_resistor"] = shuntResistor; + top["correction_factor"] = correctionFactor; + top["pga_gain"] = pGain; + top["bus_range"] = busRange; + top["shunt_offset"] = shuntVoltOffset_mV; #ifndef WLED_DISABLE_MQTT // Store MQTT settings if MQTT is not disabled @@ -648,14 +826,14 @@ class UsermodINA219 : public Usermod { **/ void appendConfigData() override { // Append the dropdown for I2C address selection - oappend(F("dd=addDropdown('INA219','i2c_address');")); - oappend(F("addOption(dd,'0x40 - Default',0x40, true);")); - oappend(F("addOption(dd,'0x41 - A0 soldered',0x41);")); - oappend(F("addOption(dd,'0x44 - A1 soldered',0x44);")); - oappend(F("addOption(dd,'0x45 - A0 and A1 soldered',0x45);")); + oappend("dd=addDropdown('INA2xx','i2c_address');"); + oappend("addOption(dd,'0x40 - Default',0x40, true);"); + oappend("addOption(dd,'0x41 - A0 soldered',0x41);"); + oappend("addOption(dd,'0x44 - A1 soldered',0x44);"); + oappend("addOption(dd,'0x45 - A0 and A1 soldered',0x45);"); // Append the dropdown for ADC mode (resolution + samples) - oappend(F("ct=addDropdown('INA219','conversion_time');")); + oappend("ct=addDropdown('INA2xx','conversion_time');"); oappend("addOption(ct,'9-Bit (84 µs)',0);"); oappend("addOption(ct,'10-Bit (148 µs)',1);"); oappend("addOption(ct,'11-Bit (276 µs)',2);"); @@ -669,10 +847,20 @@ class UsermodINA219 : public Usermod { oappend("addOption(ct,'128 samples (68.10 ms)',15);"); // Append the dropdown for decimal precision (0 to 3) - oappend(F("df=addDropdown('INA219','decimals');")); + oappend("df=addDropdown('INA2xx','decimals');"); for (int i = 0; i <= 3; i++) { oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); } + + oappend("pg=addDropdown('INA2xx','pga_gain');"); + oappend("addOption(pg,'40mV',0);"); + oappend("addOption(pg,'80mV',2048);"); + oappend("addOption(pg,'160mV',4096);"); + oappend("addOption(pg,'320mV',6144, true);"); + + oappend("br=addDropdown('INA2xx','bus_range');"); + oappend("addOption(br,'16V',0);"); + oappend("addOption(br,'32V',8192, true);"); } /** @@ -682,34 +870,152 @@ class UsermodINA219 : public Usermod { JsonObject top = root[FPSTR(_name)]; bool configComplete = !top.isNull(); - configComplete &= getJsonValue(top["Enabled"], enabled); - configComplete &= getJsonValue(top[F("i2c_address")], _i2cAddress); + + bool tempEnabled = enabled; + if (getJsonValue(top["Enabled"], tempEnabled)) { + if (tempEnabled != enabled) { + _logUsermodInaSensor("Enabled state changed to: %s", tempEnabled ? "enabled" : "disabled"); + enabled = tempEnabled; + } + } else { + configComplete = false; + } + + uint8_t tempI2cAddress = _i2cAddress; + if (getJsonValue(top[F("i2c_address")], tempI2cAddress)) { + if (tempI2cAddress != _i2cAddress) { + _logUsermodInaSensor("I2C address updated to: 0x%02X", tempI2cAddress); + _i2cAddress = tempI2cAddress; + } + } else { + configComplete = false; + } uint16_t tempInterval = 0; if (getJsonValue(top[F("check_interval")], tempInterval)) { if (1 <= tempInterval && tempInterval <= 600) { - checkInterval = static_cast(tempInterval) * 1000UL; + uint32_t newInterval = static_cast(tempInterval) * 1000UL; + if (newInterval != checkInterval) { + _logUsermodInaSensor("Check interval updated to: %u ms", newInterval); + checkInterval = newInterval; + } } else { - DEBUG_PRINTLN(F("INA219: Invalid check_interval value; using default.")); + _logUsermodInaSensor("Invalid check_interval value %u; using default %u seconds", tempInterval, INA219_CHECK_INTERVAL); checkInterval = static_cast(_checkInterval) * 1000UL; } } else { configComplete = false; } - configComplete &= getJsonValue(top["conversion_time"], conversionTime); - configComplete &= getJsonValue(top["decimals"], _decimalFactor); - configComplete &= getJsonValue(top["shunt_resistor"], shuntResistor); + INA219_ADC_MODE tempConversionTime = conversionTime; + if (getJsonValue(top["conversion_time"], tempConversionTime)) { + if (tempConversionTime != conversionTime) { + _logUsermodInaSensor("Conversion time updated to: %u", tempConversionTime); + conversionTime = tempConversionTime; + } + } else { + configComplete = false; + } + + uint8_t tempDecimalFactor = _decimalFactor; + if (getJsonValue(top["decimals"], tempDecimalFactor)) { + if (tempDecimalFactor != _decimalFactor) { + _logUsermodInaSensor("Decimal factor updated to: %u", tempDecimalFactor); + _decimalFactor = tempDecimalFactor; + } + } else { + configComplete = false; + } + + float tempShuntResistor = shuntResistor; + if (getJsonValue(top["shunt_resistor"], tempShuntResistor)) { + if (tempShuntResistor != shuntResistor) { + _logUsermodInaSensor("Shunt resistor updated to: %.6f Ohms", tempShuntResistor); + shuntResistor = tempShuntResistor; + } + } else { + configComplete = false; + } + + float tempCorrectionFactor = correctionFactor; + if (getJsonValue(top["correction_factor"], tempCorrectionFactor)) { + if (tempCorrectionFactor != correctionFactor) { + _logUsermodInaSensor("Correction factor updated to: %.3f", tempCorrectionFactor); + correctionFactor = tempCorrectionFactor; + } + } else { + configComplete = false; + } + + INA219_PGAIN tempPGain = pGain; + if (getJsonValue(top[F("pga_gain")], tempPGain)) { + if (tempPGain != pGain) { + _logUsermodInaSensor("PGA gain updated to: %d", tempPGain); + pGain = tempPGain; + } + } else { + configComplete = false; + } + + INA219_BUS_RANGE tempBusRange = busRange; + if (getJsonValue(top[F("bus_range")], tempBusRange)) { + if (tempBusRange != busRange) { + _logUsermodInaSensor("Bus range updated to: %d", tempBusRange); + busRange = tempBusRange; + } + } else { + configComplete = false; + } + + float tempShuntVoltOffset = shuntVoltOffset_mV; + if (getJsonValue(top[F("shunt_offset")], tempShuntVoltOffset)) { + if (tempShuntVoltOffset != shuntVoltOffset_mV) { + _logUsermodInaSensor("Shunt voltage offset updated to: %.3f mV", tempShuntVoltOffset); + shuntVoltOffset_mV = tempShuntVoltOffset; + } + } else { + configComplete = false; + } #ifndef WLED_DISABLE_MQTT - configComplete &= getJsonValue(top["mqtt_publish"], mqttPublish); - configComplete &= getJsonValue(top["mqtt_publish_always"], mqttPublishAlways); - configComplete &= getJsonValue(top["ha_discovery"], haDiscovery); + bool tempMqttPublish = mqttPublish; + if (getJsonValue(top["mqtt_publish"], tempMqttPublish)) { + if (tempMqttPublish != mqttPublish) { + _logUsermodInaSensor("MQTT publish setting updated to: %s", tempMqttPublish ? "enabled" : "disabled"); + mqttPublish = tempMqttPublish; + } + } else { + configComplete = false; + } - haDiscoverySent = !haDiscovery; + bool tempMqttPublishAlways = mqttPublishAlways; + if (getJsonValue(top["mqtt_publish_always"], tempMqttPublishAlways)) { + if (tempMqttPublishAlways != mqttPublishAlways) { + _logUsermodInaSensor("MQTT publish always updated to: %s", tempMqttPublishAlways ? "true" : "false"); + mqttPublishAlways = tempMqttPublishAlways; + } + } else { + configComplete = false; + } + + bool tempHaDiscovery = haDiscovery; + if (getJsonValue(top["ha_discovery"], tempHaDiscovery)) { + if (tempHaDiscovery != haDiscovery) { + _logUsermodInaSensor("HA discovery setting updated to: %s", tempHaDiscovery ? "enabled" : "disabled"); + haDiscovery = tempHaDiscovery; + haDiscoverySent = !haDiscovery; + } + } else { + configComplete = false; + } #endif - initDone = updateINA219Settings(); // Configure INA219 settings + bool prevInitDone = initDone; + initDone = updateINA2xxSettings(); // Configure INA2xx settings + + if (prevInitDone != initDone) { + _logUsermodInaSensor("Sensor initialization %s", initDone ? "succeeded" : "failed"); + } return configComplete; } @@ -718,11 +1024,11 @@ class UsermodINA219 : public Usermod { ** Get the unique identifier for this usermod. **/ uint16_t getId() override { - return USERMOD_ID_INA219; + return USERMOD_ID_INA2XX; } }; -const char UsermodINA219::_name[] PROGMEM = "INA219"; +const char UsermodINA2xx::_name[] PROGMEM = "INA2xx"; -static UsermodINA219 ina219_v2; -REGISTER_USERMOD(ina219_v2); \ No newline at end of file +static UsermodINA2xx ina2xx_v2; +REGISTER_USERMOD(ina2xx_v2); \ No newline at end of file diff --git a/usermods/INA219_v2/img/INA226-Pin-Outs.webp b/usermods/INA219_v2/img/INA226-Pin-Outs.webp new file mode 100644 index 0000000000000000000000000000000000000000..75310addca619d52cf4977b1af905e07bc16a107 GIT binary patch literal 61186 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

?IG*bug;<-KJrDTr#6 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 IS&T@wH9DL2e$YCmoufKhSg~j-|NByff$pU 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�%c`6gk3 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 z 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ï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 e#_CJd-{}YXw*2v=^IKM(x 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 ?+*K^bEtxI~z}H_Qi8? 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

o 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 literal 0 HcmV?d00001 diff --git a/usermods/ina2xx_v2/img/INA226-Pin-Outs.webp b/usermods/ina2xx_v2/img/INA226-Pin-Outs.webp deleted file mode 100644 index 75310addca619d52cf4977b1af905e07bc16a107..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61186 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 UiY>3s Date: Thu, 9 Oct 2025 13:09:41 +0200 Subject: [PATCH 56/70] ### Fixed - Fixed energy counter resets not working properly due to missing timestamp tracking - Added validation to prevent energy calculation during invalid time periods (before NTP sync) - Fixed missing `dailyResetTimestamp` and `monthlyResetTimestamp` initialization on first run - Improved daily and monthly reset logic to use day/month comparison instead of hour/minute checks ### Added - Added `dailyResetTimestamp` and `monthlyResetTimestamp` fields to track exact reset times - Added timestamp fields to MQTT payload for Home Assistant `last_reset_value_template` support - Added `state_class` configuration for Home Assistant sensors: - `total_increasing` for total energy (never resets) - `total` with `last_reset_value_template` for daily/monthly energy - `measurement` for instantaneous values (current, voltage, power) - Added timestamp restoration from MQTT retained messages --- usermods/ina2xx_v2/Readme.md | 2 +- usermods/ina2xx_v2/ina2xx_v2.cpp | 135 +++++++++++++++++++++++++++++-- usermods/ina2xx_v2/ina2xx_v2.h | 4 + 3 files changed, 133 insertions(+), 8 deletions(-) diff --git a/usermods/ina2xx_v2/Readme.md b/usermods/ina2xx_v2/Readme.md index b0da465cde..9c33f94758 100644 --- a/usermods/ina2xx_v2/Readme.md +++ b/usermods/ina2xx_v2/Readme.md @@ -1,6 +1,6 @@ # INA2XX WLED Usermod -This Usermod integrates the INA219 **and** INA226 sensor with WLED to monitor energy consumption. It can read voltage, current, power, and calculate daily, monthly and total energy usage for either sensor. +This Usermod integrates the INA219 **and** INA226 sensors with WLED to monitor energy consumption. It can read voltage, current, power, and calculate daily, monthly and total energy usage for either sensor. ## Features diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 676a31d0b3..6deec45bc1 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -170,7 +170,7 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { // Skip negligible power values to avoid accumulating rounding errors if (power < 0.01) { - _logUsermodInaSensor("SKIPPED: Power too low (%.3f W) — skipping to avoid rounding errors.", power); + _logUsermodInaSensor("SKIPPED: Power too low (%.3f W) – skipping to avoid rounding errors.", power); return; } @@ -186,16 +186,39 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { totalEnergy_kWh += energy_kWh; // Update total energy consumed _logUsermodInaSensor("Total energy updated to: %.6f kWh", totalEnergy_kWh); + // Skip time-based resets if time seems invalid (before 2020 or unrealistic future) + if (localTime < 1577836800UL || localTime > 4102444800UL) { // Jan 1 2020 to Jan 1 2100 + _logUsermodInaSensor("SKIPPED: Invalid time detected (%lu), waiting for NTP sync", localTime); + return; + } + // Calculate day identifier (days since epoch) long currentDay = localTime / 86400; _logUsermodInaSensor("Current day: %ld, Last reset day: %lu", currentDay, dailyResetTime); + // --- initialize reset values if they are unset (first run) --- + if (dailyResetTime == 0) { + dailyResetTime = currentDay; + // Calculate midnight timestamp for current day + dailyResetTimestamp = localTime - (localTime % 86400UL); + _logUsermodInaSensor("Initializing daily reset: day=%ld, ts=%lu", dailyResetTime, dailyResetTimestamp); + } + + // Fix for missing dailyResetTimestamp when dailyResetTime was already restored + if (dailyResetTimestamp == 0 && dailyResetTime != 0) { + dailyResetTimestamp = localTime - (localTime % 86400UL); + _logUsermodInaSensor("Fixing missing daily reset timestamp: ts=%lu", dailyResetTimestamp); + } + // Reset daily energy at midnight or if day changed - if ((hour(localTime) == 0 && minute(localTime) == 0 && dailyResetTime != currentDay) || - (currentDay > dailyResetTime && dailyResetTime > 0)) { + if (currentDay > dailyResetTime) { + //if ((hour(localTime) == 0 && minute(localTime) == 0 && dailyResetTime != currentDay) || + //(currentDay > dailyResetTime && dailyResetTime > 0)) { _logUsermodInaSensor("Resetting daily energy counter (day change detected)"); dailyEnergy_kWh = 0; dailyResetTime = currentDay; + // Set timestamp to midnight of the current day + dailyResetTimestamp = localTime - (localTime % 86400UL); } dailyEnergy_kWh += energy_kWh; _logUsermodInaSensor("Daily energy updated to: %.6f kWh", dailyEnergy_kWh); @@ -204,12 +227,34 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { long currentMonth = year(localTime) * 12 + month(localTime) - 1; // month() is 1-12 _logUsermodInaSensor("Current month: %ld, Last reset month: %lu", currentMonth, monthlyResetTime); + if (monthlyResetTime == 0) { + monthlyResetTime = currentMonth; + // Calculate midnight timestamp for first day of current month + // Formula: subtract (current_day - 1) days worth of seconds, then subtract time-of-day + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); + //monthlyResetTimestamp = localTime - (localTime % 86400UL); // midnight seconds (first of month) + _logUsermodInaSensor("Initializing monthly reset: month=%ld, ts=%lu", monthlyResetTime, monthlyResetTimestamp); + } + + // Fix for missing monthlyResetTimestamp when monthlyResetTime was already restored + if (monthlyResetTimestamp == 0 && monthlyResetTime != 0) { + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); + _logUsermodInaSensor("Fixing missing monthly reset timestamp: ts=%lu", monthlyResetTimestamp); + } + // Reset monthly energy on first day of month or if month changed - if ((day(localTime) == 1 && hour(localTime) == 0 && minute(localTime) == 0 && - monthlyResetTime != currentMonth) || (currentMonth > monthlyResetTime && monthlyResetTime > 0)) { + if (currentMonth > monthlyResetTime) { + //if ((day(localTime) == 1 && hour(localTime) == 0 && minute(localTime) == 0 && + //monthlyResetTime != currentMonth) || (currentMonth > monthlyResetTime && monthlyResetTime > 0)) { _logUsermodInaSensor("Resetting monthly energy counter (month change detected)"); monthlyEnergy_kWh = 0; monthlyResetTime = currentMonth; + + // Calculate midnight timestamp for first day of current month + // Formula: subtract (current_day - 1) days worth of seconds, then subtract time-of-day + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); + + //monthlyResetTimestamp = localTime - (localTime % 86400UL); } monthlyEnergy_kWh += energy_kWh; _logUsermodInaSensor("Monthly energy updated to: %.6f kWh", monthlyEnergy_kWh); @@ -248,13 +293,22 @@ void UsermodINA2xx::publishMqtt(float shuntVoltage, float busVoltage, float load jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; jsonDoc["total_energy_kWh"] = totalEnergy_kWh; + + jsonDoc["dailyResetTime"] = dailyResetTime; + jsonDoc["monthlyResetTime"] = monthlyResetTime; + jsonDoc["dailyResetTimestamp"] = dailyResetTimestamp; + jsonDoc["monthlyResetTimestamp"] = monthlyResetTimestamp; } else { _logUsermodInaSensor("Skipping energy fields until MQTT state restored"); } // Reset timestamps - jsonDoc["dailyResetTime"] = dailyResetTime; - jsonDoc["monthlyResetTime"] = monthlyResetTime; + //if (dailyResetTime > 0) { + //jsonDoc["dailyResetTime"] = dailyResetTime; + //} + //if (monthlyResetTime > 0) { + //jsonDoc["monthlyResetTime"] = monthlyResetTime; + //} // Serialize the JSON document into a character buffer char buffer[1024]; @@ -306,6 +360,28 @@ void UsermodINA2xx::mqttCreateHassSensor(const String &name, const String &topic if (SensorType != "binary_sensor") doc[F("exp_aft")] = 1800; + // --- set appropriate state_class and last_reset for energy/measurement sensors --- + if (jsonKey == "total_energy_kWh") { + // total energy never resets -> total_increasing + doc[F("stat_cla")] = "total_increasing"; + } else if (jsonKey == "daily_energy_kWh" || jsonKey == "monthly_energy_kWh") { + // daily/monthly energy resets -> use "total" with last_reset_value_template + doc[F("stat_cla")] = "total"; + + // Provide last_reset for daily/monthly + if (jsonKey == "daily_energy_kWh") { + doc[F("last_reset_value_template")] = "{{ value_json.dailyResetTimestamp | int | timestamp_local if value_json.dailyResetTimestamp | int > 0 else none }}"; + } else if (jsonKey == "monthly_energy_kWh") { + doc[F("last_reset_value_template")] = "{{ value_json.monthlyResetTimestamp | int | timestamp_local if value_json.monthlyResetTimestamp | int > 0 else none }}"; + } + } + else if (jsonKey == "current_A" || jsonKey == "current_mA" || + jsonKey == "power_W" || jsonKey == "power_mW" || + jsonKey == "bus_voltage_V" || jsonKey == "load_voltage_V" || + jsonKey == "shunt_voltage_mV") { + doc[F("stat_cla")] = "measurement"; + } + // Device details nested object JsonObject device = doc.createNestedObject(F("device")); device[F("name")] = serverDescription; @@ -406,6 +482,35 @@ bool UsermodINA2xx::onMqttMessage(char* topic, char* payload) { _logUsermodInaSensor("Merged total energy from MQTT: +%.6f kWh => %.6f kWh", restored, totalEnergy_kWh); } } + if (jsonDoc.containsKey("dailyResetTime")) { + uint32_t restored = jsonDoc["dailyResetTime"].as(); + if (!isnan(restored)) { + _logUsermodInaSensor("Restored daily reset time from MQTT: %ld => %ld", dailyResetTime, restored); + dailyResetTime = restored; + } + } + if (jsonDoc.containsKey("monthlyResetTime")) { + uint32_t restored = jsonDoc["monthlyResetTime"].as(); + if (!isnan(restored)) { + _logUsermodInaSensor("Restored monthly reset time from MQTT: %ld => %ld", monthlyResetTime, restored); + monthlyResetTime = restored; + } + } + if (jsonDoc.containsKey("dailyResetTimestamp")) { + uint32_t restored = jsonDoc["dailyResetTimestamp"].as(); + if (!isnan(restored)) { + _logUsermodInaSensor("Restored daily reset timestamp from MQTT: %ld => %ld", dailyResetTimestamp, restored); + dailyResetTimestamp = restored; + } + } + if (jsonDoc.containsKey("monthlyResetTimestamp")) { + uint32_t restored = jsonDoc["monthlyResetTimestamp"].as(); + if (!isnan(restored)) { + _logUsermodInaSensor("Restored monthly reset timestamp from MQTT: %ld => %ld", monthlyResetTimestamp, restored); + monthlyResetTimestamp = restored; + } + } + mqttStateRestored = true; // Only do this once! } return true; @@ -676,6 +781,8 @@ void UsermodINA2xx::addToJsonState(JsonObject& root) { usermod["monthlyEnergy_kWh"] = monthlyEnergy_kWh; usermod["dailyResetTime"] = dailyResetTime; usermod["monthlyResetTime"] = monthlyResetTime; + usermod["dailyResetTimestamp"] = dailyResetTimestamp; + usermod["monthlyResetTimestamp"] = monthlyResetTimestamp; _logUsermodInaSensor("Added sensor readings to JSON state: V=%.3fV, I=%.3fA, P=%.3fW", loadVoltage, current, power); } @@ -740,6 +847,20 @@ void UsermodINA2xx::readFromJsonState(JsonObject& root) { _logUsermodInaSensor("Monthly reset time updated from JSON: %lu", monthlyResetTime); } } + if (usermod.containsKey("dailyResetTimestamp")) { + unsigned long prevDailyRT = dailyResetTimestamp; + dailyResetTimestamp = usermod["dailyResetTimestamp"] | dailyResetTimestamp; + if (dailyResetTimestamp != prevDailyRT) { + _logUsermodInaSensor("Daily reset timestamp updated from JSON: %lu", dailyResetTimestamp); + } + } + if (usermod.containsKey("monthlyResetTimestamp")) { + unsigned long prevMonthlyRT = monthlyResetTimestamp; + monthlyResetTimestamp = usermod["monthlyResetTimestamp"] | monthlyResetTimestamp; + if (monthlyResetTimestamp != prevMonthlyRT) { + _logUsermodInaSensor("Monthly reset timestamp updated from JSON: %lu", monthlyResetTimestamp); + } + } } else { _logUsermodInaSensor("No usermod data found in JSON state"); } diff --git a/usermods/ina2xx_v2/ina2xx_v2.h b/usermods/ina2xx_v2/ina2xx_v2.h index 19c746928b..35beb31515 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.h +++ b/usermods/ina2xx_v2/ina2xx_v2.h @@ -153,6 +153,10 @@ class UsermodINA2xx : public Usermod { unsigned long dailyResetTime = 0; unsigned long monthlyResetTime = 0; + // epoch timestamps (seconds since epoch) of the most recent resets (midnight) + unsigned long dailyResetTimestamp = 0; + unsigned long monthlyResetTimestamp = 0; + bool mqttStateRestored = false; INA_SENSOR_CLASS *_ina2xx = nullptr; // INA2xx sensor object From b3a6cdf6c160a2f3668fd849070c2f5d8b179928 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 9 Oct 2025 13:31:10 +0200 Subject: [PATCH 57/70] coderabbitai improvements --- usermods/ina2xx_v2/Readme.md | 2 +- usermods/ina2xx_v2/ina2xx_v2.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/usermods/ina2xx_v2/Readme.md b/usermods/ina2xx_v2/Readme.md index 9c33f94758..4d6a406342 100644 --- a/usermods/ina2xx_v2/Readme.md +++ b/usermods/ina2xx_v2/Readme.md @@ -178,7 +178,7 @@ The INA2XX sensor communicates via I2C, so the SDA and SCL pins must be correctl 3. Select the appropriate **SDA** and **SCL** pins for your hardware. 4. Save the settings and **reboot WLED**. -🚀 **After rebooting, you can enable the **INA219** or **INA226** usermod in the settings.** +🚀 **After rebooting, you can enable the **INA2xx** usermod in the settings.** ### INA226 Wiring Tip diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 6deec45bc1..ba4bea0e98 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -561,7 +561,7 @@ void UsermodINA2xx::checkForI2cErrors(){ if(errorCode){ Serial.print("I2C error: "); Serial.println(errorCode); - _logUsermodInaSensor("I2C error: %s", errorCode); + _logUsermodInaSensor("I2C error: %u", errorCode); switch(errorCode){ case 1: _logUsermodInaSensor("Data too long to fit in transmit buffer"); @@ -582,7 +582,9 @@ void UsermodINA2xx::checkForI2cErrors(){ _logUsermodInaSensor("Can't identify the error"); } if(errorCode){ - while(1){} + enabled = false; + initDone = false; + _logUsermodInaSensor("Disabling INA2xx usermod after I2C error"); } } } From 3b6eed1a92ba16477d9a8b32446d7e1260f71b02 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 9 Oct 2025 13:57:47 +0200 Subject: [PATCH 58/70] coderabbitai improvements --- usermods/ina2xx_v2/Readme.md | 2 +- usermods/ina2xx_v2/ina2xx_v2.cpp | 23 ++++++++++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/usermods/ina2xx_v2/Readme.md b/usermods/ina2xx_v2/Readme.md index 4d6a406342..6a9a796a9a 100644 --- a/usermods/ina2xx_v2/Readme.md +++ b/usermods/ina2xx_v2/Readme.md @@ -166,7 +166,7 @@ custom_usermods = ${env:d1_mini.custom_usermods} INA2XX_v2 - **Total Energy** is calculated continuously. - **Daily Energy** resets after 24 hours. -- **Monthly Energy** resets after 30 days. +- **Monthly Energy** resets on the first day of each month. To reset daily or monthly energy calculations, you can implement corresponding functions within your main application. diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index ba4bea0e98..84846ef690 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -186,6 +186,11 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { totalEnergy_kWh += energy_kWh; // Update total energy consumed _logUsermodInaSensor("Total energy updated to: %.6f kWh", totalEnergy_kWh); + // Sanity check on accumulated total (e.g., 100,000 kWh = ~11 years at 1kW continuous) + if (totalEnergy_kWh > 100000.0) { + _logUsermodInaSensor("WARNING: Total energy suspiciously high (%.6f kWh), possible corruption", totalEnergy_kWh); + } + // Skip time-based resets if time seems invalid (before 2020 or unrealistic future) if (localTime < 1577836800UL || localTime > 4102444800UL) { // Jan 1 2020 to Jan 1 2100 _logUsermodInaSensor("SKIPPED: Invalid time detected (%lu), waiting for NTP sync", localTime); @@ -463,49 +468,53 @@ bool UsermodINA2xx::onMqttMessage(char* topic, char* payload) { // Only merge in retained MQTT values once! if (jsonDoc.containsKey("daily_energy_kWh")) { float restored = jsonDoc["daily_energy_kWh"]; - if (!isnan(restored)) { + if (!isnan(restored) && restored >= 0) { dailyEnergy_kWh += restored; _logUsermodInaSensor("Merged daily energy from MQTT: +%.6f kWh => %.6f kWh", restored, dailyEnergy_kWh); } } if (jsonDoc.containsKey("monthly_energy_kWh")) { float restored = jsonDoc["monthly_energy_kWh"]; - if (!isnan(restored)) { + if (!isnan(restored) && restored >= 0) { monthlyEnergy_kWh += restored; _logUsermodInaSensor("Merged monthly energy from MQTT: +%.6f kWh => %.6f kWh", restored, monthlyEnergy_kWh); } } if (jsonDoc.containsKey("total_energy_kWh")) { float restored = jsonDoc["total_energy_kWh"]; - if (!isnan(restored)) { + if (!isnan(restored) && restored >= 0) { totalEnergy_kWh += restored; _logUsermodInaSensor("Merged total energy from MQTT: +%.6f kWh => %.6f kWh", restored, totalEnergy_kWh); } } if (jsonDoc.containsKey("dailyResetTime")) { uint32_t restored = jsonDoc["dailyResetTime"].as(); - if (!isnan(restored)) { + // Check if value is valid (not 0 which could be uninitialized, and within reasonable range) + if (restored > 0 && restored < 1000000) { // reasonable day count since epoch _logUsermodInaSensor("Restored daily reset time from MQTT: %ld => %ld", dailyResetTime, restored); dailyResetTime = restored; } } if (jsonDoc.containsKey("monthlyResetTime")) { uint32_t restored = jsonDoc["monthlyResetTime"].as(); - if (!isnan(restored)) { + // Check if value is valid and within reasonable range + if (restored > 0 && restored < 100000) { // reasonable month count _logUsermodInaSensor("Restored monthly reset time from MQTT: %ld => %ld", monthlyResetTime, restored); monthlyResetTime = restored; } } if (jsonDoc.containsKey("dailyResetTimestamp")) { uint32_t restored = jsonDoc["dailyResetTimestamp"].as(); - if (!isnan(restored)) { + // Validate timestamp is after Jan 1 2020 and before Jan 1 2100 + if (restored >= 1577836800UL && restored <= 4102444800UL) { _logUsermodInaSensor("Restored daily reset timestamp from MQTT: %ld => %ld", dailyResetTimestamp, restored); dailyResetTimestamp = restored; } } if (jsonDoc.containsKey("monthlyResetTimestamp")) { uint32_t restored = jsonDoc["monthlyResetTimestamp"].as(); - if (!isnan(restored)) { + // Validate timestamp is after Jan 1 2020 and before Jan 1 2100 + if (restored >= 1577836800UL && restored <= 4102444800UL) { _logUsermodInaSensor("Restored monthly reset timestamp from MQTT: %ld => %ld", monthlyResetTimestamp, restored); monthlyResetTimestamp = restored; } From 38998b780bcaee84977034b7d3bd3db19b22c3ca Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 9 Oct 2025 14:25:16 +0200 Subject: [PATCH 59/70] coderabbitai improvements --- usermods/ina2xx_v2/Readme.md | 2 +- usermods/ina2xx_v2/ina2xx_v2.cpp | 28 +++++++++++++--------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/usermods/ina2xx_v2/Readme.md b/usermods/ina2xx_v2/Readme.md index 6a9a796a9a..116ce746bf 100644 --- a/usermods/ina2xx_v2/Readme.md +++ b/usermods/ina2xx_v2/Readme.md @@ -6,7 +6,7 @@ This Usermod integrates the INA219 **and** INA226 sensors with WLED to monitor e - Monitors bus voltage, shunt voltage, current, and power (both INA219 & INA226). - Calculates total energy consumed in kilowatt-hours (kWh). -- Calculates daily and monthly energy usage (resets after 24 h and 30 days respectively). +- Calculates daily and monthly energy usage (resets at midnight and on the first day of each month respectively). - Supports MQTT publishing of sensor data. - Publishes energy data to Home Assistant directly to the WLED entity for easy integration. - Displays daily, monthly and total energy used in the WLED GUI under the info section. diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 84846ef690..b2ea560764 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -937,6 +937,16 @@ void UsermodINA2xx::appendConfigData() { oappend("addOption(ct,'32 samples (17.02 ms)',13);"); oappend("addOption(ct,'64 samples (34.05 ms)',14);"); oappend("addOption(ct,'128 samples (68.10 ms)',15);"); + + oappend("pg=addDropdown('INA2xx','pga_gain');"); + oappend("addOption(pg,'40mV',0);"); + oappend("addOption(pg,'80mV',2048);"); + oappend("addOption(pg,'160mV',4096);"); + oappend("addOption(pg,'320mV (default)',6144, true);"); + + oappend("br=addDropdown('INA2xx','bus_range');"); + oappend("addOption(br,'16V',0);"); + oappend("addOption(br,'32V (default)',8192, true);"); #elif INA_SENSOR_TYPE == 226 oappend("ct=addDropdown('INA2xx','conversion_time');"); oappend("addOption(ct,'140 µs',0);"); @@ -947,9 +957,7 @@ void UsermodINA2xx::appendConfigData() { oappend("addOption(ct,'2.116 ms',5);"); oappend("addOption(ct,'4.156 ms',6);"); oappend("addOption(ct,'8.244 ms',7);"); -#endif - - //INA226 + oappend("dda=addDropdown('INA2xx','average');"); oappend("addOption(dda,'1 (default)',0, true);"); oappend("addOption(dda,'4',512);"); @@ -980,17 +988,7 @@ void UsermodINA2xx::appendConfigData() { + (selected ? ", true);" : ");"); oappend(line.c_str()); } - - //INA219 - oappend("pg=addDropdown('INA2xx','pga_gain');"); - oappend("addOption(pg,'40mV',0);"); - oappend("addOption(pg,'80mV',2048);"); - oappend("addOption(pg,'160mV',4096);"); - oappend("addOption(pg,'320mV (default)',6144, true);"); - - oappend("br=addDropdown('INA2xx','bus_range');"); - oappend("addOption(br,'16V',0);"); - oappend("addOption(br,'32V (default)',8192, true);"); +#endif } /** @@ -1014,7 +1012,7 @@ bool UsermodINA2xx::readFromConfig(JsonObject& root) { UPDATE_CONFIG(top, "shunt_offset", shuntVoltOffset_mV,"%.3f mV"); #elif INA_SENSOR_TYPE == 226 UPDATE_CONFIG(top, "average", average, "%d"); - UPDATE_CONFIG(top, "currentRange", currentRange, "%d"); + UPDATE_CONFIG(top, "currentRange", currentRange, "%.1f"); #endif #ifndef WLED_DISABLE_MQTT From 482e8f396e81266ce722a88d6b3220ad1d2ddb5c Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 5 Feb 2026 21:31:57 +0100 Subject: [PATCH 60/70] Fix INA2xx MQTT energy restore --- usermods/ina2xx_v2/ina2xx_v2.cpp | 251 +++++++++++++++++++++---------- usermods/ina2xx_v2/ina2xx_v2.h | 50 ++++-- 2 files changed, 208 insertions(+), 93 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index b2ea560764..1d91b1e1b8 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -27,8 +27,8 @@ bool UsermodINA2xx::hasSignificantChange(float oldValue, float newValue, float t return changed; } -bool UsermodINA2xx::hasValueChanged() { - bool changed = hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || +bool UsermodINA2xx::hasValueChanged() { + bool changed = hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || hasSignificantChange(last_sent_busVoltage, busVoltage) || hasSignificantChange(last_sent_loadVoltage, loadVoltage) || hasSignificantChange(last_sent_current, current) || @@ -40,11 +40,104 @@ bool UsermodINA2xx::hasValueChanged() { if (changed) { _logUsermodInaSensor("Values changed, need to publish"); } - return changed; -} - -// Update INA2xx settings and reinitialize sensor if necessary -bool UsermodINA2xx::updateINA2xxSettings() { + return changed; +} + +bool UsermodINA2xx::isTimeValid() const { + return localTime >= 1577836800UL && localTime <= 4102444800UL; +} + +void UsermodINA2xx::applyMqttRestoreIfReady() { + if (!mqttRestorePending || mqttStateRestored) { + return; + } + + if (!isTimeValid()) { + _logUsermodInaSensor("Deferring MQTT energy restore until time sync is valid"); + return; + } + + long currentDay = localTime / 86400; + long currentMonth = year(localTime) * 12 + month(localTime) - 1; + + if (mqttRestoreData.hasTotalEnergy) { + totalEnergy_kWh += mqttRestoreData.totalEnergy; + _logUsermodInaSensor("Applied total energy from MQTT: +%.6f kWh => %.6f kWh", + mqttRestoreData.totalEnergy, totalEnergy_kWh); + } + + auto dailyResetMatches = [&]() { + if (mqttRestoreData.hasDailyResetTime) { + return static_cast(mqttRestoreData.dailyResetTime) == currentDay; + } + if (mqttRestoreData.hasDailyResetTimestamp) { + return static_cast(mqttRestoreData.dailyResetTimestamp / 86400UL) == currentDay; + } + if (dailyResetTime != 0) { + return static_cast(dailyResetTime) == currentDay; + } + return true; // no reset info available, assume same day + }; + + if (mqttRestoreData.hasDailyEnergy) { + if (dailyResetMatches()) { + dailyEnergy_kWh += mqttRestoreData.dailyEnergy; + _logUsermodInaSensor("Applied daily energy from MQTT: +%.6f kWh => %.6f kWh", + mqttRestoreData.dailyEnergy, dailyEnergy_kWh); + if (mqttRestoreData.hasDailyResetTime) { + dailyResetTime = mqttRestoreData.dailyResetTime; + } + if (mqttRestoreData.hasDailyResetTimestamp) { + dailyResetTimestamp = mqttRestoreData.dailyResetTimestamp; + } + } else { + dailyResetTime = currentDay; + dailyResetTimestamp = localTime - (localTime % 86400UL); + _logUsermodInaSensor("Skipped daily MQTT restore (different day). Resetting daily window to today."); + } + } + + auto monthlyResetMatches = [&]() { + if (mqttRestoreData.hasMonthlyResetTime) { + return static_cast(mqttRestoreData.monthlyResetTime) == currentMonth; + } + if (mqttRestoreData.hasMonthlyResetTimestamp) { + long restoredMonth = year(mqttRestoreData.monthlyResetTimestamp) * 12 + + month(mqttRestoreData.monthlyResetTimestamp) - 1; + return restoredMonth == currentMonth; + } + if (monthlyResetTime != 0) { + return static_cast(monthlyResetTime) == currentMonth; + } + return true; // no reset info available, assume same month + }; + + if (mqttRestoreData.hasMonthlyEnergy) { + if (monthlyResetMatches()) { + monthlyEnergy_kWh += mqttRestoreData.monthlyEnergy; + _logUsermodInaSensor("Applied monthly energy from MQTT: +%.6f kWh => %.6f kWh", + mqttRestoreData.monthlyEnergy, monthlyEnergy_kWh); + if (mqttRestoreData.hasMonthlyResetTime) { + monthlyResetTime = mqttRestoreData.monthlyResetTime; + } + if (mqttRestoreData.hasMonthlyResetTimestamp) { + monthlyResetTimestamp = mqttRestoreData.monthlyResetTimestamp; + } + } else { + monthlyResetTime = currentMonth; + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); + _logUsermodInaSensor("Skipped monthly MQTT restore (different month). Resetting monthly window to current month."); + } + } + + mqttStateRestored = true; + mqttRestorePending = false; + mqttRestoreData = MqttRestoreData{}; + _logUsermodInaSensor("MQTT energy restore applied"); +} + +// Update INA2xx settings and reinitialize sensor if necessary +bool UsermodINA2xx::updateINA2xxSettings() { _logUsermodInaSensor("Updating INA2xx sensor settings"); // Validate I2C pins; if invalid, disable usermod and log message @@ -192,10 +285,10 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { } // Skip time-based resets if time seems invalid (before 2020 or unrealistic future) - if (localTime < 1577836800UL || localTime > 4102444800UL) { // Jan 1 2020 to Jan 1 2100 - _logUsermodInaSensor("SKIPPED: Invalid time detected (%lu), waiting for NTP sync", localTime); - return; - } + if (!isTimeValid()) { // Jan 1 2020 to Jan 1 2100 + _logUsermodInaSensor("SKIPPED: Invalid time detected (%lu), waiting for NTP sync", localTime); + return; + } // Calculate day identifier (days since epoch) long currentDay = localTime / 86400; @@ -448,8 +541,8 @@ void UsermodINA2xx::mqttRemoveHassSensor(const String &name, const String &Senso /** ** Function to publish sensor data to MQTT **/ -bool UsermodINA2xx::onMqttMessage(char* topic, char* payload) { - if (!WLED_MQTT_CONNECTED || !enabled) return false; +bool UsermodINA2xx::onMqttMessage(char* topic, char* payload) { + if (!WLED_MQTT_CONNECTED || !enabled) return false; // Check if the message is for the correct topic if (strstr(topic, "/sensor/ina2xx") != nullptr) { @@ -463,67 +556,65 @@ bool UsermodINA2xx::onMqttMessage(char* topic, char* payload) { return false; } - // Update the energy values - if (!mqttStateRestored) { - // Only merge in retained MQTT values once! - if (jsonDoc.containsKey("daily_energy_kWh")) { - float restored = jsonDoc["daily_energy_kWh"]; - if (!isnan(restored) && restored >= 0) { - dailyEnergy_kWh += restored; - _logUsermodInaSensor("Merged daily energy from MQTT: +%.6f kWh => %.6f kWh", restored, dailyEnergy_kWh); - } - } - if (jsonDoc.containsKey("monthly_energy_kWh")) { - float restored = jsonDoc["monthly_energy_kWh"]; - if (!isnan(restored) && restored >= 0) { - monthlyEnergy_kWh += restored; - _logUsermodInaSensor("Merged monthly energy from MQTT: +%.6f kWh => %.6f kWh", restored, monthlyEnergy_kWh); - } - } - if (jsonDoc.containsKey("total_energy_kWh")) { - float restored = jsonDoc["total_energy_kWh"]; - if (!isnan(restored) && restored >= 0) { - totalEnergy_kWh += restored; - _logUsermodInaSensor("Merged total energy from MQTT: +%.6f kWh => %.6f kWh", restored, totalEnergy_kWh); - } - } - if (jsonDoc.containsKey("dailyResetTime")) { - uint32_t restored = jsonDoc["dailyResetTime"].as(); - // Check if value is valid (not 0 which could be uninitialized, and within reasonable range) - if (restored > 0 && restored < 1000000) { // reasonable day count since epoch - _logUsermodInaSensor("Restored daily reset time from MQTT: %ld => %ld", dailyResetTime, restored); - dailyResetTime = restored; - } - } - if (jsonDoc.containsKey("monthlyResetTime")) { - uint32_t restored = jsonDoc["monthlyResetTime"].as(); - // Check if value is valid and within reasonable range - if (restored > 0 && restored < 100000) { // reasonable month count - _logUsermodInaSensor("Restored monthly reset time from MQTT: %ld => %ld", monthlyResetTime, restored); - monthlyResetTime = restored; - } - } - if (jsonDoc.containsKey("dailyResetTimestamp")) { - uint32_t restored = jsonDoc["dailyResetTimestamp"].as(); - // Validate timestamp is after Jan 1 2020 and before Jan 1 2100 - if (restored >= 1577836800UL && restored <= 4102444800UL) { - _logUsermodInaSensor("Restored daily reset timestamp from MQTT: %ld => %ld", dailyResetTimestamp, restored); - dailyResetTimestamp = restored; - } - } - if (jsonDoc.containsKey("monthlyResetTimestamp")) { - uint32_t restored = jsonDoc["monthlyResetTimestamp"].as(); - // Validate timestamp is after Jan 1 2020 and before Jan 1 2100 - if (restored >= 1577836800UL && restored <= 4102444800UL) { - _logUsermodInaSensor("Restored monthly reset timestamp from MQTT: %ld => %ld", monthlyResetTimestamp, restored); - monthlyResetTimestamp = restored; - } - } - - mqttStateRestored = true; // Only do this once! - } - return true; - } + // Update the energy values + if (!mqttStateRestored) { + mqttRestoreData = MqttRestoreData{}; + + if (jsonDoc.containsKey("daily_energy_kWh")) { + float restored = jsonDoc["daily_energy_kWh"]; + if (!isnan(restored) && restored >= 0) { + mqttRestoreData.hasDailyEnergy = true; + mqttRestoreData.dailyEnergy = restored; + } + } + if (jsonDoc.containsKey("monthly_energy_kWh")) { + float restored = jsonDoc["monthly_energy_kWh"]; + if (!isnan(restored) && restored >= 0) { + mqttRestoreData.hasMonthlyEnergy = true; + mqttRestoreData.monthlyEnergy = restored; + } + } + if (jsonDoc.containsKey("total_energy_kWh")) { + float restored = jsonDoc["total_energy_kWh"]; + if (!isnan(restored) && restored >= 0) { + mqttRestoreData.hasTotalEnergy = true; + mqttRestoreData.totalEnergy = restored; + } + } + if (jsonDoc.containsKey("dailyResetTime")) { + uint32_t restored = jsonDoc["dailyResetTime"].as(); + if (restored > 0 && restored < 1000000) { // reasonable day count since epoch + mqttRestoreData.hasDailyResetTime = true; + mqttRestoreData.dailyResetTime = restored; + } + } + if (jsonDoc.containsKey("monthlyResetTime")) { + uint32_t restored = jsonDoc["monthlyResetTime"].as(); + if (restored > 0 && restored < 100000) { // reasonable month count + mqttRestoreData.hasMonthlyResetTime = true; + mqttRestoreData.monthlyResetTime = restored; + } + } + if (jsonDoc.containsKey("dailyResetTimestamp")) { + uint32_t restored = jsonDoc["dailyResetTimestamp"].as(); + if (restored >= 1577836800UL && restored <= 4102444800UL) { + mqttRestoreData.hasDailyResetTimestamp = true; + mqttRestoreData.dailyResetTimestamp = restored; + } + } + if (jsonDoc.containsKey("monthlyResetTimestamp")) { + uint32_t restored = jsonDoc["monthlyResetTimestamp"].as(); + if (restored >= 1577836800UL && restored <= 4102444800UL) { + mqttRestoreData.hasMonthlyResetTimestamp = true; + mqttRestoreData.monthlyResetTimestamp = restored; + } + } + + mqttRestorePending = true; + applyMqttRestoreIfReady(); + } + return true; + } return false; } @@ -600,10 +691,12 @@ void UsermodINA2xx::checkForI2cErrors(){ #endif // Loop function called continuously -void UsermodINA2xx::loop() { - // Check if the usermod is enabled and the check interval has elapsed - if (!enabled || !initDone || !_ina2xx || millis() - lastCheck < checkInterval) { - return; +void UsermodINA2xx::loop() { + applyMqttRestoreIfReady(); + + // Check if the usermod is enabled and the check interval has elapsed + if (!enabled || !initDone || !_ina2xx || millis() - lastCheck < checkInterval) { + return; } lastCheck = millis(); @@ -1055,4 +1148,4 @@ bool UsermodINA2xx::readFromConfig(JsonObject& root) { **/ uint16_t UsermodINA2xx::getId() { return USERMOD_ID_INA2XX; -} \ No newline at end of file +} diff --git a/usermods/ina2xx_v2/ina2xx_v2.h b/usermods/ina2xx_v2/ina2xx_v2.h index 35beb31515..54a0c4e13e 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.h +++ b/usermods/ina2xx_v2/ina2xx_v2.h @@ -154,20 +154,42 @@ class UsermodINA2xx : public Usermod { unsigned long monthlyResetTime = 0; // epoch timestamps (seconds since epoch) of the most recent resets (midnight) - unsigned long dailyResetTimestamp = 0; - unsigned long monthlyResetTimestamp = 0; - - bool mqttStateRestored = false; - - INA_SENSOR_CLASS *_ina2xx = nullptr; // INA2xx sensor object - - float roundDecimals(float val); - bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f); - bool hasValueChanged(); - void checkForI2cErrors(); - bool updateINA2xxSettings(); - String sanitizeMqttClientID(const String &clientID); - void updateEnergy(float power, unsigned long durationMs); + unsigned long dailyResetTimestamp = 0; + unsigned long monthlyResetTimestamp = 0; + + bool mqttStateRestored = false; + bool mqttRestorePending = false; + + struct MqttRestoreData { + bool hasDailyEnergy = false; + bool hasMonthlyEnergy = false; + bool hasTotalEnergy = false; + bool hasDailyResetTime = false; + bool hasMonthlyResetTime = false; + bool hasDailyResetTimestamp = false; + bool hasMonthlyResetTimestamp = false; + float dailyEnergy = 0.0f; + float monthlyEnergy = 0.0f; + float totalEnergy = 0.0f; + uint32_t dailyResetTime = 0; + uint32_t monthlyResetTime = 0; + uint32_t dailyResetTimestamp = 0; + uint32_t monthlyResetTimestamp = 0; + }; + + MqttRestoreData mqttRestoreData; + + INA_SENSOR_CLASS *_ina2xx = nullptr; // INA2xx sensor object + + float roundDecimals(float val); + bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f); + bool hasValueChanged(); + void checkForI2cErrors(); + bool isTimeValid() const; + void applyMqttRestoreIfReady(); + bool updateINA2xxSettings(); + String sanitizeMqttClientID(const String &clientID); + void updateEnergy(float power, unsigned long durationMs); #ifndef WLED_DISABLE_MQTT void publishMqtt(float shuntVoltage, float busVoltage, float loadVoltage, float current, float current_mA, float power, From bc88abcfe72104746ab3aa82f015c2c6333208c5 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 5 Feb 2026 22:17:47 +0100 Subject: [PATCH 61/70] Refine INA2xx MQTT publish and UI defaults --- usermods/ina2xx_v2/ina2xx_v2.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 1d91b1e1b8..7669e467b4 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -745,11 +745,12 @@ void UsermodINA2xx::loop() { #ifndef WLED_DISABLE_MQTT // Publish sensor data via MQTT if connected and enabled - if (WLED_MQTT_CONNECTED) { - if (mqttPublish) { - if (mqttPublishAlways || hasValueChanged()) { - _logUsermodInaSensor("Publishing MQTT data (always=%d, changed=%d)", mqttPublishAlways, hasValueChanged()); - publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); + if (WLED_MQTT_CONNECTED) { + if (mqttPublish) { + bool valueChanged = hasValueChanged(); + if (mqttPublishAlways || valueChanged) { + _logUsermodInaSensor("Publishing MQTT data (always=%d, changed=%d)", mqttPublishAlways, valueChanged); + publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); last_sent_shuntVoltage = shuntVoltage; last_sent_busVoltage = busVoltage; @@ -1010,11 +1011,11 @@ void UsermodINA2xx::appendConfigData() { oappend("addOption(dd,'0x44 - A1 soldered',0x44);"); oappend("addOption(dd,'0x45 - A0 and A1 soldered',0x45);"); - // Append the dropdown for decimal precision (0 to 3) - oappend("df=addDropdown('INA2xx','decimals');"); - for (int i = 0; i <= 3; i++) { - oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); - } + // Append the dropdown for decimal precision (0 to 3) + oappend("df=addDropdown('INA2xx','decimals');"); + for (int i = 0; i <= 3; i++) { + oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == _decimalFactor ? ", true);" : ");")).c_str()); + } #if INA_SENSOR_TYPE == 219 // Append the dropdown for ADC mode (resolution + samples) From 337dc6eb89000585f262e97a4cd7dc2e8f85cc1b Mon Sep 17 00:00:00 2001 From: KrX3D Date: Thu, 5 Feb 2026 22:28:33 +0100 Subject: [PATCH 62/70] Keep energy reset logic active at low power --- usermods/ina2xx_v2/ina2xx_v2.cpp | 59 ++++++++++++++++---------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 7669e467b4..08aeb697c2 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -257,39 +257,40 @@ String UsermodINA2xx::sanitizeMqttClientID(const String &clientID) { /** ** Function to update energy calculations based on power and duration **/ -void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { - float durationHours = durationMs / 3600000.0; // Milliseconds to hours - _logUsermodInaSensor("Updating energy - Power: %.3f W, Duration: %lu ms (%.6f hours)", power, durationMs, durationHours); - - // Skip negligible power values to avoid accumulating rounding errors - if (power < 0.01) { - _logUsermodInaSensor("SKIPPED: Power too low (%.3f W) – skipping to avoid rounding errors.", power); - return; - } - - float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) - _logUsermodInaSensor("Calculated energy: %.6f kWh", energy_kWh); - - // Skip negative values or unrealistic spikes - if (energy_kWh < 0 || energy_kWh > 10.0) { // 10 kWh in a few seconds is unrealistic - _logUsermodInaSensor("SKIPPED: Energy value out of range (%.6f kWh)", energy_kWh); - return; - } - - totalEnergy_kWh += energy_kWh; // Update total energy consumed - _logUsermodInaSensor("Total energy updated to: %.6f kWh", totalEnergy_kWh); - - // Sanity check on accumulated total (e.g., 100,000 kWh = ~11 years at 1kW continuous) - if (totalEnergy_kWh > 100000.0) { - _logUsermodInaSensor("WARNING: Total energy suspiciously high (%.6f kWh), possible corruption", totalEnergy_kWh); - } - - // Skip time-based resets if time seems invalid (before 2020 or unrealistic future) +void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { + float durationHours = durationMs / 3600000.0; // Milliseconds to hours + _logUsermodInaSensor("Updating energy - Power: %.3f W, Duration: %lu ms (%.6f hours)", power, durationMs, durationHours); + + // Skip time-based resets if time seems invalid (before 2020 or unrealistic future) if (!isTimeValid()) { // Jan 1 2020 to Jan 1 2100 _logUsermodInaSensor("SKIPPED: Invalid time detected (%lu), waiting for NTP sync", localTime); return; } - + + float energy_kWh = 0.0f; + if (power < 0.01f) { + _logUsermodInaSensor("Power too low (%.3f W) – skipping accumulation.", power); + } else { + energy_kWh = (power / 1000.0f) * durationHours; // Watts to kilowatt-hours (kWh) + _logUsermodInaSensor("Calculated energy: %.6f kWh", energy_kWh); + + // Skip negative values or unrealistic spikes + if (energy_kWh < 0 || energy_kWh > 10.0f) { // 10 kWh in a few seconds is unrealistic + _logUsermodInaSensor("SKIPPED: Energy value out of range (%.6f kWh)", energy_kWh); + energy_kWh = 0.0f; + } + } + + if (energy_kWh > 0.0f) { + totalEnergy_kWh += energy_kWh; // Update total energy consumed + _logUsermodInaSensor("Total energy updated to: %.6f kWh", totalEnergy_kWh); + + // Sanity check on accumulated total (e.g., 100,000 kWh = ~11 years at 1kW continuous) + if (totalEnergy_kWh > 100000.0f) { + _logUsermodInaSensor("WARNING: Total energy suspiciously high (%.6f kWh), possible corruption", totalEnergy_kWh); + } + } + // Calculate day identifier (days since epoch) long currentDay = localTime / 86400; _logUsermodInaSensor("Current day: %ld, Last reset day: %lu", currentDay, dailyResetTime); From f47f24b105d1a3677cc0a0aa6902cfcc36ebeb5f Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 6 Feb 2026 14:40:52 +0100 Subject: [PATCH 63/70] Adjust MQTT restore and reduce INA2xx log spam --- usermods/ina2xx_v2/ina2xx_v2.cpp | 61 ++++++++++++++++++++++++++------ usermods/ina2xx_v2/ina2xx_v2.h | 1 + 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 08aeb697c2..7313c0031a 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -53,10 +53,14 @@ void UsermodINA2xx::applyMqttRestoreIfReady() { } if (!isTimeValid()) { - _logUsermodInaSensor("Deferring MQTT energy restore until time sync is valid"); + if (!mqttRestoreDeferredLogged) { + _logUsermodInaSensor("Deferring MQTT energy restore until time sync is valid"); + mqttRestoreDeferredLogged = true; + } return; } + mqttRestoreDeferredLogged = false; long currentDay = localTime / 86400; long currentMonth = year(localTime) * 12 + month(localTime) - 1; @@ -66,6 +70,16 @@ void UsermodINA2xx::applyMqttRestoreIfReady() { mqttRestoreData.totalEnergy, totalEnergy_kWh); } + auto restoredDailyDay = [&]() { + if (mqttRestoreData.hasDailyResetTime) { + return static_cast(mqttRestoreData.dailyResetTime); + } + if (mqttRestoreData.hasDailyResetTimestamp) { + return static_cast(mqttRestoreData.dailyResetTimestamp / 86400UL); + } + return static_cast(dailyResetTime); + }; + auto dailyResetMatches = [&]() { if (mqttRestoreData.hasDailyResetTime) { return static_cast(mqttRestoreData.dailyResetTime) == currentDay; @@ -91,12 +105,31 @@ void UsermodINA2xx::applyMqttRestoreIfReady() { dailyResetTimestamp = mqttRestoreData.dailyResetTimestamp; } } else { - dailyResetTime = currentDay; - dailyResetTimestamp = localTime - (localTime % 86400UL); - _logUsermodInaSensor("Skipped daily MQTT restore (different day). Resetting daily window to today."); + long restoredDay = restoredDailyDay(); + if (restoredDay > currentDay) { + dailyEnergy_kWh += mqttRestoreData.dailyEnergy; + dailyResetTime = currentDay; + dailyResetTimestamp = localTime - (localTime % 86400UL); + _logUsermodInaSensor("Restored daily energy with future reset; clamping reset window to today."); + } else { + dailyResetTime = currentDay; + dailyResetTimestamp = localTime - (localTime % 86400UL); + _logUsermodInaSensor("Skipped daily MQTT restore (different day). Resetting daily window to today."); + } } } + auto restoredMonthlyId = [&]() { + if (mqttRestoreData.hasMonthlyResetTime) { + return static_cast(mqttRestoreData.monthlyResetTime); + } + if (mqttRestoreData.hasMonthlyResetTimestamp) { + return year(mqttRestoreData.monthlyResetTimestamp) * 12 + + month(mqttRestoreData.monthlyResetTimestamp) - 1; + } + return static_cast(monthlyResetTime); + }; + auto monthlyResetMatches = [&]() { if (mqttRestoreData.hasMonthlyResetTime) { return static_cast(mqttRestoreData.monthlyResetTime) == currentMonth; @@ -124,9 +157,17 @@ void UsermodINA2xx::applyMqttRestoreIfReady() { monthlyResetTimestamp = mqttRestoreData.monthlyResetTimestamp; } } else { - monthlyResetTime = currentMonth; - monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); - _logUsermodInaSensor("Skipped monthly MQTT restore (different month). Resetting monthly window to current month."); + long restoredMonth = restoredMonthlyId(); + if (restoredMonth > currentMonth) { + monthlyEnergy_kWh += mqttRestoreData.monthlyEnergy; + monthlyResetTime = currentMonth; + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); + _logUsermodInaSensor("Restored monthly energy with future reset; clamping reset window to current month."); + } else { + monthlyResetTime = currentMonth; + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); + _logUsermodInaSensor("Skipped monthly MQTT restore (different month). Resetting monthly window to current month."); + } } } @@ -371,10 +412,8 @@ void UsermodINA2xx::publishMqtt(float shuntVoltage, float busVoltage, float load return; } - _logUsermodInaSensor("Publishing sensor data to MQTT"); - - // Create a JSON document to hold sensor data - StaticJsonDocument<1024> jsonDoc; + // Create a JSON document to hold sensor data + StaticJsonDocument<1024> jsonDoc; // Populate the JSON document with sensor readings jsonDoc["shunt_voltage_mV"] = shuntVoltage; diff --git a/usermods/ina2xx_v2/ina2xx_v2.h b/usermods/ina2xx_v2/ina2xx_v2.h index 54a0c4e13e..b746e70c55 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.h +++ b/usermods/ina2xx_v2/ina2xx_v2.h @@ -159,6 +159,7 @@ class UsermodINA2xx : public Usermod { bool mqttStateRestored = false; bool mqttRestorePending = false; + bool mqttRestoreDeferredLogged = false; struct MqttRestoreData { bool hasDailyEnergy = false; From ec540525597aa2044c9860f0933cc8e427328336 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Fri, 6 Feb 2026 14:48:57 +0100 Subject: [PATCH 64/70] Fix INA2xx MQTT restore month lambda types --- usermods/ina2xx_v2/ina2xx_v2.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 7313c0031a..207bc767ed 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -124,8 +124,8 @@ void UsermodINA2xx::applyMqttRestoreIfReady() { return static_cast(mqttRestoreData.monthlyResetTime); } if (mqttRestoreData.hasMonthlyResetTimestamp) { - return year(mqttRestoreData.monthlyResetTimestamp) * 12 + - month(mqttRestoreData.monthlyResetTimestamp) - 1; + return static_cast(year(mqttRestoreData.monthlyResetTimestamp)) * 12L + + static_cast(month(mqttRestoreData.monthlyResetTimestamp)) - 1L; } return static_cast(monthlyResetTime); }; From 3879abc9b44601c9a923b71223933852db4af741 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Wed, 18 Feb 2026 12:38:30 +0100 Subject: [PATCH 65/70] Address INA2xx review feedback for MQTT and HA --- usermods/ina2xx_v2/ina2xx_v2.cpp | 493 +++++++++++++++++++------------ usermods/ina2xx_v2/ina2xx_v2.h | 51 +++- 2 files changed, 341 insertions(+), 203 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index b2ea560764..4ed8992696 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -6,11 +6,10 @@ UsermodINA2xx ina2xx_v2; REGISTER_USERMOD(ina2xx_v2); // Function to truncate decimals based on the configured decimal factor -float UsermodINA2xx::roundDecimals(float val) { - _logUsermodInaSensor("Truncating value %.6f with factor %d", val, _decimalFactor); - if (_decimalFactor == 0) { - return roundf(val); - } +float UsermodINA2xx::roundDecimals(float val) { + if (_decimalFactor == 0) { + return roundf(val); + } static const float factorLUT[4] = {1.f, 10.f, 100.f, 1000.f}; float factor = (_decimalFactor <= 3) ? factorLUT[_decimalFactor] @@ -27,8 +26,8 @@ bool UsermodINA2xx::hasSignificantChange(float oldValue, float newValue, float t return changed; } -bool UsermodINA2xx::hasValueChanged() { - bool changed = hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || +bool UsermodINA2xx::hasValueChanged() { + bool changed = hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || hasSignificantChange(last_sent_busVoltage, busVoltage) || hasSignificantChange(last_sent_loadVoltage, loadVoltage) || hasSignificantChange(last_sent_current, current) || @@ -40,11 +39,145 @@ bool UsermodINA2xx::hasValueChanged() { if (changed) { _logUsermodInaSensor("Values changed, need to publish"); } - return changed; -} - -// Update INA2xx settings and reinitialize sensor if necessary -bool UsermodINA2xx::updateINA2xxSettings() { + return changed; +} + +bool UsermodINA2xx::isTimeValid() const { + return localTime >= 1577836800UL && localTime <= 4102444800UL; +} + +void UsermodINA2xx::applyMqttRestoreIfReady() { + if (!mqttRestorePending || mqttStateRestored) { + return; + } + + if (!isTimeValid()) { + if (!mqttRestoreDeferredLogged) { + _logUsermodInaSensor("Deferring MQTT energy restore until time sync is valid"); + mqttRestoreDeferredLogged = true; + } + return; + } + + mqttRestoreDeferredLogged = false; + long currentDay = localTime / 86400; + long currentMonth = year(localTime) * 12 + month(localTime) - 1; + + if (mqttRestoreData.hasTotalEnergy) { + totalEnergy_kWh += mqttRestoreData.totalEnergy; + _logUsermodInaSensor("Applied total energy from MQTT: +%.6f kWh => %.6f kWh", + mqttRestoreData.totalEnergy, totalEnergy_kWh); + } + + auto restoredDailyDay = [&]() { + if (mqttRestoreData.hasDailyResetTime) { + return static_cast(mqttRestoreData.dailyResetTime); + } + if (mqttRestoreData.hasDailyResetTimestamp) { + return static_cast(mqttRestoreData.dailyResetTimestamp / 86400UL); + } + return static_cast(dailyResetTime); + }; + + auto dailyResetMatches = [&]() { + if (mqttRestoreData.hasDailyResetTime) { + return static_cast(mqttRestoreData.dailyResetTime) == currentDay; + } + if (mqttRestoreData.hasDailyResetTimestamp) { + return static_cast(mqttRestoreData.dailyResetTimestamp / 86400UL) == currentDay; + } + if (dailyResetTime != 0) { + return static_cast(dailyResetTime) == currentDay; + } + return true; // no reset info available, assume same day + }; + + if (mqttRestoreData.hasDailyEnergy) { + if (dailyResetMatches()) { + dailyEnergy_kWh += mqttRestoreData.dailyEnergy; + _logUsermodInaSensor("Applied daily energy from MQTT: +%.6f kWh => %.6f kWh", + mqttRestoreData.dailyEnergy, dailyEnergy_kWh); + if (mqttRestoreData.hasDailyResetTime) { + dailyResetTime = mqttRestoreData.dailyResetTime; + } + if (mqttRestoreData.hasDailyResetTimestamp) { + dailyResetTimestamp = mqttRestoreData.dailyResetTimestamp; + } + } else { + long restoredDay = restoredDailyDay(); + if (restoredDay > currentDay) { + dailyEnergy_kWh += mqttRestoreData.dailyEnergy; + dailyResetTime = currentDay; + dailyResetTimestamp = localTime - (localTime % 86400UL); + _logUsermodInaSensor("Restored daily energy with future reset; clamping reset window to today."); + } else { + dailyResetTime = currentDay; + dailyResetTimestamp = localTime - (localTime % 86400UL); + _logUsermodInaSensor("Skipped daily MQTT restore (different day). Resetting daily window to today."); + } + } + } + + auto restoredMonthlyId = [&]() { + if (mqttRestoreData.hasMonthlyResetTime) { + return static_cast(mqttRestoreData.monthlyResetTime); + } + if (mqttRestoreData.hasMonthlyResetTimestamp) { + return static_cast(year(mqttRestoreData.monthlyResetTimestamp)) * 12L + + static_cast(month(mqttRestoreData.monthlyResetTimestamp)) - 1L; + } + return static_cast(monthlyResetTime); + }; + + auto monthlyResetMatches = [&]() { + if (mqttRestoreData.hasMonthlyResetTime) { + return static_cast(mqttRestoreData.monthlyResetTime) == currentMonth; + } + if (mqttRestoreData.hasMonthlyResetTimestamp) { + long restoredMonth = year(mqttRestoreData.monthlyResetTimestamp) * 12 + + month(mqttRestoreData.monthlyResetTimestamp) - 1; + return restoredMonth == currentMonth; + } + if (monthlyResetTime != 0) { + return static_cast(monthlyResetTime) == currentMonth; + } + return true; // no reset info available, assume same month + }; + + if (mqttRestoreData.hasMonthlyEnergy) { + if (monthlyResetMatches()) { + monthlyEnergy_kWh += mqttRestoreData.monthlyEnergy; + _logUsermodInaSensor("Applied monthly energy from MQTT: +%.6f kWh => %.6f kWh", + mqttRestoreData.monthlyEnergy, monthlyEnergy_kWh); + if (mqttRestoreData.hasMonthlyResetTime) { + monthlyResetTime = mqttRestoreData.monthlyResetTime; + } + if (mqttRestoreData.hasMonthlyResetTimestamp) { + monthlyResetTimestamp = mqttRestoreData.monthlyResetTimestamp; + } + } else { + long restoredMonth = restoredMonthlyId(); + if (restoredMonth > currentMonth) { + monthlyEnergy_kWh += mqttRestoreData.monthlyEnergy; + monthlyResetTime = currentMonth; + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); + _logUsermodInaSensor("Restored monthly energy with future reset; clamping reset window to current month."); + } else { + monthlyResetTime = currentMonth; + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); + _logUsermodInaSensor("Skipped monthly MQTT restore (different month). Resetting monthly window to current month."); + } + } + } + + mqttStateRestored = true; + mqttRestorePending = false; + mqttRestoreData = MqttRestoreData{}; + _logUsermodInaSensor("MQTT energy restore applied"); +} + +// Update INA2xx settings and reinitialize sensor if necessary +bool UsermodINA2xx::updateINA2xxSettings() { _logUsermodInaSensor("Updating INA2xx sensor settings"); // Validate I2C pins; if invalid, disable usermod and log message @@ -107,12 +240,11 @@ bool UsermodINA2xx::updateINA2xxSettings() { _ina2xx->setMeasureMode(CONTINUOUS); _ina2xx->setAverage(average); _ina2xx->setConversionTime(conversionTime); - _ina2xx->setResistorRange(shuntResistor,currentRange); // choose resistor 100 mOhm (default )and gain range up to 10 A (1.3A default) - - _ina2xx->readAndClearFlags(); - - _ina2xx->waitUntilConversionCompleted(); //if you comment this line the first data might be zero -#endif + _ina2xx->setResistorRange(shuntResistor,currentRange); // choose resistor 100 mOhm (default )and gain range up to 10 A (1.3A default) + + _ina2xx->readAndClearFlags(); + // Do not block here waiting for conversion completion; first sample may be zero. +#endif _logUsermodInaSensor("INA2xx sensor configured successfully"); return true; @@ -164,39 +296,40 @@ String UsermodINA2xx::sanitizeMqttClientID(const String &clientID) { /** ** Function to update energy calculations based on power and duration **/ -void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { - float durationHours = durationMs / 3600000.0; // Milliseconds to hours - _logUsermodInaSensor("Updating energy - Power: %.3f W, Duration: %lu ms (%.6f hours)", power, durationMs, durationHours); - - // Skip negligible power values to avoid accumulating rounding errors - if (power < 0.01) { - _logUsermodInaSensor("SKIPPED: Power too low (%.3f W) – skipping to avoid rounding errors.", power); - return; - } - - float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) - _logUsermodInaSensor("Calculated energy: %.6f kWh", energy_kWh); - - // Skip negative values or unrealistic spikes - if (energy_kWh < 0 || energy_kWh > 10.0) { // 10 kWh in a few seconds is unrealistic - _logUsermodInaSensor("SKIPPED: Energy value out of range (%.6f kWh)", energy_kWh); - return; - } - - totalEnergy_kWh += energy_kWh; // Update total energy consumed - _logUsermodInaSensor("Total energy updated to: %.6f kWh", totalEnergy_kWh); - - // Sanity check on accumulated total (e.g., 100,000 kWh = ~11 years at 1kW continuous) - if (totalEnergy_kWh > 100000.0) { - _logUsermodInaSensor("WARNING: Total energy suspiciously high (%.6f kWh), possible corruption", totalEnergy_kWh); - } - - // Skip time-based resets if time seems invalid (before 2020 or unrealistic future) - if (localTime < 1577836800UL || localTime > 4102444800UL) { // Jan 1 2020 to Jan 1 2100 - _logUsermodInaSensor("SKIPPED: Invalid time detected (%lu), waiting for NTP sync", localTime); - return; - } - +void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { + float durationHours = durationMs / 3600000.0; // Milliseconds to hours + _logUsermodInaSensor("Updating energy - Power: %.3f W, Duration: %lu ms (%.6f hours)", power, durationMs, durationHours); + + // Skip time-based resets if time seems invalid (before 2020 or unrealistic future) + if (!isTimeValid()) { // Jan 1 2020 to Jan 1 2100 + _logUsermodInaSensor("SKIPPED: Invalid time detected (%lu), waiting for NTP sync", localTime); + return; + } + + float energy_kWh = 0.0f; + if (power < 0.01f) { + _logUsermodInaSensor("Power too low (%.3f W) – skipping accumulation.", power); + } else { + energy_kWh = (power / 1000.0f) * durationHours; // Watts to kilowatt-hours (kWh) + _logUsermodInaSensor("Calculated energy: %.6f kWh", energy_kWh); + + // Skip negative values or unrealistic spikes + if (energy_kWh < 0 || energy_kWh > 10.0f) { // 10 kWh in a few seconds is unrealistic + _logUsermodInaSensor("SKIPPED: Energy value out of range (%.6f kWh)", energy_kWh); + energy_kWh = 0.0f; + } + } + + if (energy_kWh > 0.0f) { + totalEnergy_kWh += energy_kWh; // Update total energy consumed + _logUsermodInaSensor("Total energy updated to: %.6f kWh", totalEnergy_kWh); + + // Sanity check on accumulated total (e.g., 100,000 kWh = ~11 years at 1kW continuous) + if (totalEnergy_kWh > 100000.0f) { + _logUsermodInaSensor("WARNING: Total energy suspiciously high (%.6f kWh), possible corruption", totalEnergy_kWh); + } + } + // Calculate day identifier (days since epoch) long currentDay = localTime / 86400; _logUsermodInaSensor("Current day: %ld, Last reset day: %lu", currentDay, dailyResetTime); @@ -215,13 +348,11 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { _logUsermodInaSensor("Fixing missing daily reset timestamp: ts=%lu", dailyResetTimestamp); } - // Reset daily energy at midnight or if day changed - if (currentDay > dailyResetTime) { - //if ((hour(localTime) == 0 && minute(localTime) == 0 && dailyResetTime != currentDay) || - //(currentDay > dailyResetTime && dailyResetTime > 0)) { - _logUsermodInaSensor("Resetting daily energy counter (day change detected)"); - dailyEnergy_kWh = 0; - dailyResetTime = currentDay; + // Reset daily energy at midnight or if day changed + if (currentDay > dailyResetTime) { + _logUsermodInaSensor("Resetting daily energy counter (day change detected)"); + dailyEnergy_kWh = 0; + dailyResetTime = currentDay; // Set timestamp to midnight of the current day dailyResetTimestamp = localTime - (localTime % 86400UL); } @@ -234,12 +365,11 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { if (monthlyResetTime == 0) { monthlyResetTime = currentMonth; - // Calculate midnight timestamp for first day of current month - // Formula: subtract (current_day - 1) days worth of seconds, then subtract time-of-day - monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); - //monthlyResetTimestamp = localTime - (localTime % 86400UL); // midnight seconds (first of month) - _logUsermodInaSensor("Initializing monthly reset: month=%ld, ts=%lu", monthlyResetTime, monthlyResetTimestamp); - } + // Calculate midnight timestamp for first day of current month + // Formula: subtract (current_day - 1) days worth of seconds, then subtract time-of-day + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); + _logUsermodInaSensor("Initializing monthly reset: month=%ld, ts=%lu", monthlyResetTime, monthlyResetTimestamp); + } // Fix for missing monthlyResetTimestamp when monthlyResetTime was already restored if (monthlyResetTimestamp == 0 && monthlyResetTime != 0) { @@ -247,22 +377,18 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { _logUsermodInaSensor("Fixing missing monthly reset timestamp: ts=%lu", monthlyResetTimestamp); } - // Reset monthly energy on first day of month or if month changed - if (currentMonth > monthlyResetTime) { - //if ((day(localTime) == 1 && hour(localTime) == 0 && minute(localTime) == 0 && - //monthlyResetTime != currentMonth) || (currentMonth > monthlyResetTime && monthlyResetTime > 0)) { - _logUsermodInaSensor("Resetting monthly energy counter (month change detected)"); - monthlyEnergy_kWh = 0; - monthlyResetTime = currentMonth; - - // Calculate midnight timestamp for first day of current month - // Formula: subtract (current_day - 1) days worth of seconds, then subtract time-of-day - monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); - - //monthlyResetTimestamp = localTime - (localTime % 86400UL); - } - monthlyEnergy_kWh += energy_kWh; - _logUsermodInaSensor("Monthly energy updated to: %.6f kWh", monthlyEnergy_kWh); + // Reset monthly energy on first day of month or if month changed + if (currentMonth > monthlyResetTime) { + _logUsermodInaSensor("Resetting monthly energy counter (month change detected)"); + monthlyEnergy_kWh = 0; + monthlyResetTime = currentMonth; + + // Calculate midnight timestamp for first day of current month + // Formula: subtract (current_day - 1) days worth of seconds, then subtract time-of-day + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); + } + monthlyEnergy_kWh += energy_kWh; + _logUsermodInaSensor("Monthly energy updated to: %.6f kWh", monthlyEnergy_kWh); } #ifndef WLED_DISABLE_MQTT @@ -277,10 +403,8 @@ void UsermodINA2xx::publishMqtt(float shuntVoltage, float busVoltage, float load return; } - _logUsermodInaSensor("Publishing sensor data to MQTT"); - - // Create a JSON document to hold sensor data - StaticJsonDocument<1024> jsonDoc; + // Create a JSON document to hold sensor data + StaticJsonDocument<1024> jsonDoc; // Populate the JSON document with sensor readings jsonDoc["shunt_voltage_mV"] = shuntVoltage; @@ -307,16 +431,8 @@ void UsermodINA2xx::publishMqtt(float shuntVoltage, float busVoltage, float load _logUsermodInaSensor("Skipping energy fields until MQTT state restored"); } - // Reset timestamps - //if (dailyResetTime > 0) { - //jsonDoc["dailyResetTime"] = dailyResetTime; - //} - //if (monthlyResetTime > 0) { - //jsonDoc["monthlyResetTime"] = monthlyResetTime; - //} - - // Serialize the JSON document into a character buffer - char buffer[1024]; + // Serialize the JSON document into a character buffer + char buffer[1024]; size_t payload_size = serializeJson(jsonDoc, buffer, sizeof(buffer)); if (payload_size >= sizeof(buffer) - 1) { @@ -399,9 +515,10 @@ void UsermodINA2xx::mqttCreateHassSensor(const String &name, const String &topic #else device[F("hw")] = F("esp8266"); #endif - JsonArray connections = device[F("cns")].createNestedArray(); - connections.add(F("mac")); - connections.add(WiFi.macAddress()); + JsonArray connections = device.createNestedArray(F("cns")); + JsonArray macPair = connections.createNestedArray(); + macPair.add(F("mac")); + macPair.add(WiFi.macAddress()); // Serialize the JSON document into a temporary string char buffer[1024]; @@ -448,8 +565,8 @@ void UsermodINA2xx::mqttRemoveHassSensor(const String &name, const String &Senso /** ** Function to publish sensor data to MQTT **/ -bool UsermodINA2xx::onMqttMessage(char* topic, char* payload) { - if (!WLED_MQTT_CONNECTED || !enabled) return false; +bool UsermodINA2xx::onMqttMessage(char* topic, char* payload) { + if (!WLED_MQTT_CONNECTED || !enabled) return false; // Check if the message is for the correct topic if (strstr(topic, "/sensor/ina2xx") != nullptr) { @@ -463,67 +580,65 @@ bool UsermodINA2xx::onMqttMessage(char* topic, char* payload) { return false; } - // Update the energy values - if (!mqttStateRestored) { - // Only merge in retained MQTT values once! - if (jsonDoc.containsKey("daily_energy_kWh")) { - float restored = jsonDoc["daily_energy_kWh"]; - if (!isnan(restored) && restored >= 0) { - dailyEnergy_kWh += restored; - _logUsermodInaSensor("Merged daily energy from MQTT: +%.6f kWh => %.6f kWh", restored, dailyEnergy_kWh); - } - } - if (jsonDoc.containsKey("monthly_energy_kWh")) { - float restored = jsonDoc["monthly_energy_kWh"]; - if (!isnan(restored) && restored >= 0) { - monthlyEnergy_kWh += restored; - _logUsermodInaSensor("Merged monthly energy from MQTT: +%.6f kWh => %.6f kWh", restored, monthlyEnergy_kWh); - } - } - if (jsonDoc.containsKey("total_energy_kWh")) { - float restored = jsonDoc["total_energy_kWh"]; - if (!isnan(restored) && restored >= 0) { - totalEnergy_kWh += restored; - _logUsermodInaSensor("Merged total energy from MQTT: +%.6f kWh => %.6f kWh", restored, totalEnergy_kWh); - } - } - if (jsonDoc.containsKey("dailyResetTime")) { - uint32_t restored = jsonDoc["dailyResetTime"].as(); - // Check if value is valid (not 0 which could be uninitialized, and within reasonable range) - if (restored > 0 && restored < 1000000) { // reasonable day count since epoch - _logUsermodInaSensor("Restored daily reset time from MQTT: %ld => %ld", dailyResetTime, restored); - dailyResetTime = restored; - } - } - if (jsonDoc.containsKey("monthlyResetTime")) { - uint32_t restored = jsonDoc["monthlyResetTime"].as(); - // Check if value is valid and within reasonable range - if (restored > 0 && restored < 100000) { // reasonable month count - _logUsermodInaSensor("Restored monthly reset time from MQTT: %ld => %ld", monthlyResetTime, restored); - monthlyResetTime = restored; - } - } - if (jsonDoc.containsKey("dailyResetTimestamp")) { - uint32_t restored = jsonDoc["dailyResetTimestamp"].as(); - // Validate timestamp is after Jan 1 2020 and before Jan 1 2100 - if (restored >= 1577836800UL && restored <= 4102444800UL) { - _logUsermodInaSensor("Restored daily reset timestamp from MQTT: %ld => %ld", dailyResetTimestamp, restored); - dailyResetTimestamp = restored; - } - } - if (jsonDoc.containsKey("monthlyResetTimestamp")) { - uint32_t restored = jsonDoc["monthlyResetTimestamp"].as(); - // Validate timestamp is after Jan 1 2020 and before Jan 1 2100 - if (restored >= 1577836800UL && restored <= 4102444800UL) { - _logUsermodInaSensor("Restored monthly reset timestamp from MQTT: %ld => %ld", monthlyResetTimestamp, restored); - monthlyResetTimestamp = restored; - } - } - - mqttStateRestored = true; // Only do this once! - } - return true; - } + // Update the energy values + if (!mqttStateRestored) { + mqttRestoreData = MqttRestoreData{}; + + if (jsonDoc.containsKey("daily_energy_kWh")) { + float restored = jsonDoc["daily_energy_kWh"]; + if (!isnan(restored) && restored >= 0) { + mqttRestoreData.hasDailyEnergy = true; + mqttRestoreData.dailyEnergy = restored; + } + } + if (jsonDoc.containsKey("monthly_energy_kWh")) { + float restored = jsonDoc["monthly_energy_kWh"]; + if (!isnan(restored) && restored >= 0) { + mqttRestoreData.hasMonthlyEnergy = true; + mqttRestoreData.monthlyEnergy = restored; + } + } + if (jsonDoc.containsKey("total_energy_kWh")) { + float restored = jsonDoc["total_energy_kWh"]; + if (!isnan(restored) && restored >= 0) { + mqttRestoreData.hasTotalEnergy = true; + mqttRestoreData.totalEnergy = restored; + } + } + if (jsonDoc.containsKey("dailyResetTime")) { + uint32_t restored = jsonDoc["dailyResetTime"].as(); + if (restored > 0 && restored < 1000000) { // reasonable day count since epoch + mqttRestoreData.hasDailyResetTime = true; + mqttRestoreData.dailyResetTime = restored; + } + } + if (jsonDoc.containsKey("monthlyResetTime")) { + uint32_t restored = jsonDoc["monthlyResetTime"].as(); + if (restored > 0 && restored < 100000) { // reasonable month count + mqttRestoreData.hasMonthlyResetTime = true; + mqttRestoreData.monthlyResetTime = restored; + } + } + if (jsonDoc.containsKey("dailyResetTimestamp")) { + uint32_t restored = jsonDoc["dailyResetTimestamp"].as(); + if (restored >= 1577836800UL && restored <= 4102444800UL) { + mqttRestoreData.hasDailyResetTimestamp = true; + mqttRestoreData.dailyResetTimestamp = restored; + } + } + if (jsonDoc.containsKey("monthlyResetTimestamp")) { + uint32_t restored = jsonDoc["monthlyResetTimestamp"].as(); + if (restored >= 1577836800UL && restored <= 4102444800UL) { + mqttRestoreData.hasMonthlyResetTimestamp = true; + mqttRestoreData.monthlyResetTimestamp = restored; + } + } + + mqttRestorePending = true; + applyMqttRestoreIfReady(); + } + return true; + } return false; } @@ -532,14 +647,13 @@ bool UsermodINA2xx::onMqttMessage(char* topic, char* payload) { **/ void UsermodINA2xx::onMqttConnect(bool sessionPresent) { if (!enabled) return; - if (WLED_MQTT_CONNECTED) { - char subuf[64]; - if (mqttDeviceTopic[0] != 0) { - strcpy(subuf, mqttDeviceTopic); - strcat_P(subuf, PSTR("/sensor/ina2xx")); - mqtt->subscribe(subuf, 0); - _logUsermodInaSensor("Subscribed to MQTT topic: %s", subuf); - } + if (WLED_MQTT_CONNECTED) { + char subuf[64]; + if (mqttDeviceTopic[0] != 0) { + snprintf_P(subuf, sizeof(subuf), PSTR("%s/sensor/ina2xx"), mqttDeviceTopic); + mqtt->subscribe(subuf, 0); + _logUsermodInaSensor("Subscribed to MQTT topic: %s", subuf); + } } } #endif @@ -565,12 +679,10 @@ void UsermodINA2xx::setup() { } #if INA_SENSOR_TYPE == 226 -void UsermodINA2xx::checkForI2cErrors(){ - byte errorCode = _ina2xx->getI2cErrorCode(); - if(errorCode){ - Serial.print("I2C error: "); - Serial.println(errorCode); - _logUsermodInaSensor("I2C error: %u", errorCode); +void UsermodINA2xx::checkForI2cErrors(){ + byte errorCode = _ina2xx->getI2cErrorCode(); + if(errorCode){ + _logUsermodInaSensor("I2C error: %u", errorCode); switch(errorCode){ case 1: _logUsermodInaSensor("Data too long to fit in transmit buffer"); @@ -600,10 +712,12 @@ void UsermodINA2xx::checkForI2cErrors(){ #endif // Loop function called continuously -void UsermodINA2xx::loop() { - // Check if the usermod is enabled and the check interval has elapsed - if (!enabled || !initDone || !_ina2xx || millis() - lastCheck < checkInterval) { - return; +void UsermodINA2xx::loop() { + applyMqttRestoreIfReady(); + + // Check if the usermod is enabled and the check interval has elapsed + if (!enabled || !initDone || !_ina2xx || millis() - lastCheck < checkInterval) { + return; } lastCheck = millis(); @@ -652,11 +766,12 @@ void UsermodINA2xx::loop() { #ifndef WLED_DISABLE_MQTT // Publish sensor data via MQTT if connected and enabled - if (WLED_MQTT_CONNECTED) { - if (mqttPublish) { - if (mqttPublishAlways || hasValueChanged()) { - _logUsermodInaSensor("Publishing MQTT data (always=%d, changed=%d)", mqttPublishAlways, hasValueChanged()); - publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); + if (WLED_MQTT_CONNECTED) { + if (mqttPublish) { + bool valueChanged = hasValueChanged(); + if (mqttPublishAlways || valueChanged) { + _logUsermodInaSensor("Publishing MQTT data (always=%d, changed=%d)", mqttPublishAlways, valueChanged); + publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); last_sent_shuntVoltage = shuntVoltage; last_sent_busVoltage = busVoltage; @@ -917,11 +1032,11 @@ void UsermodINA2xx::appendConfigData() { oappend("addOption(dd,'0x44 - A1 soldered',0x44);"); oappend("addOption(dd,'0x45 - A0 and A1 soldered',0x45);"); - // Append the dropdown for decimal precision (0 to 3) - oappend("df=addDropdown('INA2xx','decimals');"); - for (int i = 0; i <= 3; i++) { - oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); - } + // Append the dropdown for decimal precision (0 to 3) + oappend("df=addDropdown('INA2xx','decimals');"); + for (int i = 0; i <= 3; i++) { + oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == _decimalFactor ? ", true);" : ");")).c_str()); + } #if INA_SENSOR_TYPE == 219 // Append the dropdown for ADC mode (resolution + samples) @@ -1055,4 +1170,4 @@ bool UsermodINA2xx::readFromConfig(JsonObject& root) { **/ uint16_t UsermodINA2xx::getId() { return USERMOD_ID_INA2XX; -} \ No newline at end of file +} diff --git a/usermods/ina2xx_v2/ina2xx_v2.h b/usermods/ina2xx_v2/ina2xx_v2.h index 35beb31515..b746e70c55 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.h +++ b/usermods/ina2xx_v2/ina2xx_v2.h @@ -154,20 +154,43 @@ class UsermodINA2xx : public Usermod { unsigned long monthlyResetTime = 0; // epoch timestamps (seconds since epoch) of the most recent resets (midnight) - unsigned long dailyResetTimestamp = 0; - unsigned long monthlyResetTimestamp = 0; - - bool mqttStateRestored = false; - - INA_SENSOR_CLASS *_ina2xx = nullptr; // INA2xx sensor object - - float roundDecimals(float val); - bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f); - bool hasValueChanged(); - void checkForI2cErrors(); - bool updateINA2xxSettings(); - String sanitizeMqttClientID(const String &clientID); - void updateEnergy(float power, unsigned long durationMs); + unsigned long dailyResetTimestamp = 0; + unsigned long monthlyResetTimestamp = 0; + + bool mqttStateRestored = false; + bool mqttRestorePending = false; + bool mqttRestoreDeferredLogged = false; + + struct MqttRestoreData { + bool hasDailyEnergy = false; + bool hasMonthlyEnergy = false; + bool hasTotalEnergy = false; + bool hasDailyResetTime = false; + bool hasMonthlyResetTime = false; + bool hasDailyResetTimestamp = false; + bool hasMonthlyResetTimestamp = false; + float dailyEnergy = 0.0f; + float monthlyEnergy = 0.0f; + float totalEnergy = 0.0f; + uint32_t dailyResetTime = 0; + uint32_t monthlyResetTime = 0; + uint32_t dailyResetTimestamp = 0; + uint32_t monthlyResetTimestamp = 0; + }; + + MqttRestoreData mqttRestoreData; + + INA_SENSOR_CLASS *_ina2xx = nullptr; // INA2xx sensor object + + float roundDecimals(float val); + bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f); + bool hasValueChanged(); + void checkForI2cErrors(); + bool isTimeValid() const; + void applyMqttRestoreIfReady(); + bool updateINA2xxSettings(); + String sanitizeMqttClientID(const String &clientID); + void updateEnergy(float power, unsigned long durationMs); #ifndef WLED_DISABLE_MQTT void publishMqtt(float shuntVoltage, float busVoltage, float loadVoltage, float current, float current_mA, float power, From 1f05da62d3c0ecd5af1ada3fd04aa6066a47968f Mon Sep 17 00:00:00 2001 From: KrX3D Date: Wed, 18 Feb 2026 13:35:09 +0100 Subject: [PATCH 66/70] Allow INA226 conversion wait only during setup --- usermods/ina2xx_v2/ina2xx_v2.cpp | 16 ++++++++++------ usermods/ina2xx_v2/ina2xx_v2.h | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 4ed8992696..f22c5a2689 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -177,7 +177,7 @@ void UsermodINA2xx::applyMqttRestoreIfReady() { } // Update INA2xx settings and reinitialize sensor if necessary -bool UsermodINA2xx::updateINA2xxSettings() { +bool UsermodINA2xx::updateINA2xxSettings(bool allowBlockingWait) { _logUsermodInaSensor("Updating INA2xx sensor settings"); // Validate I2C pins; if invalid, disable usermod and log message @@ -243,7 +243,11 @@ bool UsermodINA2xx::updateINA2xxSettings() { _ina2xx->setResistorRange(shuntResistor,currentRange); // choose resistor 100 mOhm (default )and gain range up to 10 A (1.3A default) _ina2xx->readAndClearFlags(); - // Do not block here waiting for conversion completion; first sample may be zero. + if (allowBlockingWait) { + _ina2xx->waitUntilConversionCompleted(); + } else { + _logUsermodInaSensor("Skipping conversion wait during runtime reconfiguration"); + } #endif _logUsermodInaSensor("INA2xx sensor configured successfully"); @@ -669,8 +673,8 @@ UsermodINA2xx::~UsermodINA2xx() { // Setup function called once on boot or restart void UsermodINA2xx::setup() { - _logUsermodInaSensor("Setting up INA2xx sensor usermod"); - initDone = updateINA2xxSettings(); // Configure INA2xx settings + _logUsermodInaSensor("Setting up INA2xx sensor usermod"); + initDone = updateINA2xxSettings(true); // Configure INA2xx settings (safe to block in setup) if (initDone) { _logUsermodInaSensor("INA2xx setup complete and successful"); } else { @@ -1155,8 +1159,8 @@ bool UsermodINA2xx::readFromConfig(JsonObject& root) { configComplete = false; } - bool prevInitDone = initDone; - initDone = updateINA2xxSettings(); // Configure INA2xx settings + bool prevInitDone = initDone; + initDone = updateINA2xxSettings(false); // Avoid blocking in runtime config updates if (prevInitDone != initDone) { _logUsermodInaSensor("Sensor initialization %s", initDone ? "succeeded" : "failed"); diff --git a/usermods/ina2xx_v2/ina2xx_v2.h b/usermods/ina2xx_v2/ina2xx_v2.h index b746e70c55..4ad878b757 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.h +++ b/usermods/ina2xx_v2/ina2xx_v2.h @@ -188,7 +188,7 @@ class UsermodINA2xx : public Usermod { void checkForI2cErrors(); bool isTimeValid() const; void applyMqttRestoreIfReady(); - bool updateINA2xxSettings(); + bool updateINA2xxSettings(bool allowBlockingWait = false); String sanitizeMqttClientID(const String &clientID); void updateEnergy(float power, unsigned long durationMs); #ifndef WLED_DISABLE_MQTT From 426aa64ef9af3452b8d824aa464a7b7321722993 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Wed, 18 Feb 2026 13:40:38 +0100 Subject: [PATCH 67/70] Restore INA226 conversion wait on all reinitializations --- usermods/ina2xx_v2/ina2xx_v2.cpp | 12 ++++-------- usermods/ina2xx_v2/ina2xx_v2.h | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index f22c5a2689..8873261ad0 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -177,7 +177,7 @@ void UsermodINA2xx::applyMqttRestoreIfReady() { } // Update INA2xx settings and reinitialize sensor if necessary -bool UsermodINA2xx::updateINA2xxSettings(bool allowBlockingWait) { +bool UsermodINA2xx::updateINA2xxSettings() { _logUsermodInaSensor("Updating INA2xx sensor settings"); // Validate I2C pins; if invalid, disable usermod and log message @@ -243,11 +243,7 @@ bool UsermodINA2xx::updateINA2xxSettings(bool allowBlockingWait) { _ina2xx->setResistorRange(shuntResistor,currentRange); // choose resistor 100 mOhm (default )and gain range up to 10 A (1.3A default) _ina2xx->readAndClearFlags(); - if (allowBlockingWait) { - _ina2xx->waitUntilConversionCompleted(); - } else { - _logUsermodInaSensor("Skipping conversion wait during runtime reconfiguration"); - } + _ina2xx->waitUntilConversionCompleted(); // ensures first data point is valid #endif _logUsermodInaSensor("INA2xx sensor configured successfully"); @@ -674,7 +670,7 @@ UsermodINA2xx::~UsermodINA2xx() { // Setup function called once on boot or restart void UsermodINA2xx::setup() { _logUsermodInaSensor("Setting up INA2xx sensor usermod"); - initDone = updateINA2xxSettings(true); // Configure INA2xx settings (safe to block in setup) + initDone = updateINA2xxSettings(); // Configure INA2xx settings if (initDone) { _logUsermodInaSensor("INA2xx setup complete and successful"); } else { @@ -1160,7 +1156,7 @@ bool UsermodINA2xx::readFromConfig(JsonObject& root) { } bool prevInitDone = initDone; - initDone = updateINA2xxSettings(false); // Avoid blocking in runtime config updates + initDone = updateINA2xxSettings(); // Configure INA2xx settings if (prevInitDone != initDone) { _logUsermodInaSensor("Sensor initialization %s", initDone ? "succeeded" : "failed"); diff --git a/usermods/ina2xx_v2/ina2xx_v2.h b/usermods/ina2xx_v2/ina2xx_v2.h index 4ad878b757..b746e70c55 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.h +++ b/usermods/ina2xx_v2/ina2xx_v2.h @@ -188,7 +188,7 @@ class UsermodINA2xx : public Usermod { void checkForI2cErrors(); bool isTimeValid() const; void applyMqttRestoreIfReady(); - bool updateINA2xxSettings(bool allowBlockingWait = false); + bool updateINA2xxSettings(); String sanitizeMqttClientID(const String &clientID); void updateEnergy(float power, unsigned long durationMs); #ifndef WLED_DISABLE_MQTT From 487dba7f735f4cf4bd30d6eda491fc5518180fde Mon Sep 17 00:00:00 2001 From: KrX3D Date: Wed, 18 Feb 2026 13:40:45 +0100 Subject: [PATCH 68/70] Run INA226 conversion wait only during setup --- usermods/ina2xx_v2/ina2xx_v2.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 8873261ad0..eabbde2998 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -243,7 +243,6 @@ bool UsermodINA2xx::updateINA2xxSettings() { _ina2xx->setResistorRange(shuntResistor,currentRange); // choose resistor 100 mOhm (default )and gain range up to 10 A (1.3A default) _ina2xx->readAndClearFlags(); - _ina2xx->waitUntilConversionCompleted(); // ensures first data point is valid #endif _logUsermodInaSensor("INA2xx sensor configured successfully"); @@ -668,12 +667,17 @@ UsermodINA2xx::~UsermodINA2xx() { } // Setup function called once on boot or restart -void UsermodINA2xx::setup() { +void UsermodINA2xx::setup() { _logUsermodInaSensor("Setting up INA2xx sensor usermod"); initDone = updateINA2xxSettings(); // Configure INA2xx settings - if (initDone) { - _logUsermodInaSensor("INA2xx setup complete and successful"); - } else { +#if INA_SENSOR_TYPE == 226 + if (initDone && _ina2xx) { + _ina2xx->waitUntilConversionCompleted(); // first data can be zero without this in continuous mode + } +#endif + if (initDone) { + _logUsermodInaSensor("INA2xx setup complete and successful"); + } else { _logUsermodInaSensor("INA2xx setup failed"); } } From 1d11f06058113bc07545dab55961355906c04ba9 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Wed, 18 Feb 2026 13:52:52 +0100 Subject: [PATCH 69/70] Self-heal future daily/monthly reset markers --- usermods/ina2xx_v2/ina2xx_v2.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index eabbde2998..c8df92701c 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -334,12 +334,18 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { _logUsermodInaSensor("Current day: %ld, Last reset day: %lu", currentDay, dailyResetTime); // --- initialize reset values if they are unset (first run) --- - if (dailyResetTime == 0) { - dailyResetTime = currentDay; - // Calculate midnight timestamp for current day - dailyResetTimestamp = localTime - (localTime % 86400UL); - _logUsermodInaSensor("Initializing daily reset: day=%ld, ts=%lu", dailyResetTime, dailyResetTimestamp); - } + if (dailyResetTime == 0) { + dailyResetTime = currentDay; + // Calculate midnight timestamp for current day + dailyResetTimestamp = localTime - (localTime % 86400UL); + _logUsermodInaSensor("Initializing daily reset: day=%ld, ts=%lu", dailyResetTime, dailyResetTimestamp); + } else if (dailyResetTime > static_cast(currentDay)) { + // Guard against corrupted/future reset markers from restored state + _logUsermodInaSensor("Daily reset marker is in the future (%lu > %ld). Reinitializing daily counter.", dailyResetTime, currentDay); + dailyEnergy_kWh = 0; + dailyResetTime = currentDay; + dailyResetTimestamp = localTime - (localTime % 86400UL); + } // Fix for missing dailyResetTimestamp when dailyResetTime was already restored if (dailyResetTimestamp == 0 && dailyResetTime != 0) { @@ -362,12 +368,18 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { long currentMonth = year(localTime) * 12 + month(localTime) - 1; // month() is 1-12 _logUsermodInaSensor("Current month: %ld, Last reset month: %lu", currentMonth, monthlyResetTime); - if (monthlyResetTime == 0) { - monthlyResetTime = currentMonth; + if (monthlyResetTime == 0) { + monthlyResetTime = currentMonth; // Calculate midnight timestamp for first day of current month // Formula: subtract (current_day - 1) days worth of seconds, then subtract time-of-day monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); _logUsermodInaSensor("Initializing monthly reset: month=%ld, ts=%lu", monthlyResetTime, monthlyResetTimestamp); + } else if (monthlyResetTime > static_cast(currentMonth)) { + // Guard against corrupted/future reset markers from restored state + _logUsermodInaSensor("Monthly reset marker is in the future (%lu > %ld). Reinitializing monthly counter.", monthlyResetTime, currentMonth); + monthlyEnergy_kWh = 0; + monthlyResetTime = currentMonth; + monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); } // Fix for missing monthlyResetTimestamp when monthlyResetTime was already restored From 7f0e2191e8c9a7d7d3b628f0ad4998b4c1bc6b80 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Wed, 18 Feb 2026 14:01:29 +0100 Subject: [PATCH 70/70] Reset energy counters on any day/month marker mismatch --- usermods/ina2xx_v2/ina2xx_v2.cpp | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index c8df92701c..ca4f880f62 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -339,12 +339,6 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { // Calculate midnight timestamp for current day dailyResetTimestamp = localTime - (localTime % 86400UL); _logUsermodInaSensor("Initializing daily reset: day=%ld, ts=%lu", dailyResetTime, dailyResetTimestamp); - } else if (dailyResetTime > static_cast(currentDay)) { - // Guard against corrupted/future reset markers from restored state - _logUsermodInaSensor("Daily reset marker is in the future (%lu > %ld). Reinitializing daily counter.", dailyResetTime, currentDay); - dailyEnergy_kWh = 0; - dailyResetTime = currentDay; - dailyResetTimestamp = localTime - (localTime % 86400UL); } // Fix for missing dailyResetTimestamp when dailyResetTime was already restored @@ -353,14 +347,14 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { _logUsermodInaSensor("Fixing missing daily reset timestamp: ts=%lu", dailyResetTimestamp); } - // Reset daily energy at midnight or if day changed - if (currentDay > dailyResetTime) { - _logUsermodInaSensor("Resetting daily energy counter (day change detected)"); + // Reset daily energy whenever day marker does not match current day + if (static_cast(currentDay) != dailyResetTime) { + _logUsermodInaSensor("Resetting daily energy counter (day marker mismatch: now=%ld, last=%lu)", currentDay, dailyResetTime); dailyEnergy_kWh = 0; dailyResetTime = currentDay; - // Set timestamp to midnight of the current day - dailyResetTimestamp = localTime - (localTime % 86400UL); - } + // Set timestamp to midnight of the current day + dailyResetTimestamp = localTime - (localTime % 86400UL); + } dailyEnergy_kWh += energy_kWh; _logUsermodInaSensor("Daily energy updated to: %.6f kWh", dailyEnergy_kWh); @@ -374,12 +368,6 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { // Formula: subtract (current_day - 1) days worth of seconds, then subtract time-of-day monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); _logUsermodInaSensor("Initializing monthly reset: month=%ld, ts=%lu", monthlyResetTime, monthlyResetTimestamp); - } else if (monthlyResetTime > static_cast(currentMonth)) { - // Guard against corrupted/future reset markers from restored state - _logUsermodInaSensor("Monthly reset marker is in the future (%lu > %ld). Reinitializing monthly counter.", monthlyResetTime, currentMonth); - monthlyEnergy_kWh = 0; - monthlyResetTime = currentMonth; - monthlyResetTimestamp = localTime - ((day(localTime) - 1) * 86400UL) - (localTime % 86400UL); } // Fix for missing monthlyResetTimestamp when monthlyResetTime was already restored @@ -388,9 +376,9 @@ void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { _logUsermodInaSensor("Fixing missing monthly reset timestamp: ts=%lu", monthlyResetTimestamp); } - // Reset monthly energy on first day of month or if month changed - if (currentMonth > monthlyResetTime) { - _logUsermodInaSensor("Resetting monthly energy counter (month change detected)"); + // Reset monthly energy whenever month marker does not match current month + if (static_cast(currentMonth) != monthlyResetTime) { + _logUsermodInaSensor("Resetting monthly energy counter (month marker mismatch: now=%ld, last=%lu)", currentMonth, monthlyResetTime); monthlyEnergy_kWh = 0; monthlyResetTime = currentMonth;

+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�ZlwMy8|)$5vk_a4Aa!qgc&uRdtE zs{D(p?VH*0?%8jQXUiIoV<$6LbT2v!Aw`c0T1Z$P4)oN0wjp7!A4<;;vsU5ScNoDpYatXm%7Ucytaw$N0mDtE)vsSc2Si7 zXinFL?sK=y?^HJA=O~XVbtoXk4~LM;owl|1+wYIH*VS&faqVIis#i zY?COBD_04S9bTL+39+BYy!m-*6jZUVDFZ3B#)VWO(!dz*0G$K)q(_cIDBV0zB+jl0 z(9IuD+2}O65cpS4mikVDhAQ@-(Lg$-`@7z}xqVIFN#sLrmN-?NL=M+$Z^F@jpEVq6 z97 zwU!dttG<5g!SFpF25ut(0ehJ&g(T9x&MJ4wf+XnW{5W4=Cd$w!;@|?O2dD|bOo=P^ z*IJoCx!9q15c;rAWFt}S&$AjO=j-sasJPBnR|EO^*aruej6rn{<9~Nd_*W|BpBtS% zVo_7&B{|LMA0*BSgijn{*H^WJ3jL&TMqc%dt;c$5?ocy+@*xkVJqFG^uL#u8Sqe>W z{S^^zaG1DG3HYBRUOt>P>lQmx17*uOFpOR$Xxi851|sMrB&ADHqz(~rK>qp3uu-dt@K0xu zmhrPxj2>?&$Bo|aPxYfUi{AyF^@GM4{L3C7R z#1uSuseI#)=2j0mjDau?h~M?_6F2!N@}-kUKl^w(YDe|z+0rRaDV?PmY{&BxD6NpU z0Y+|hnR9!A=%{Idb?ZcY;*FYDTjCoXPxS5?_0(3Atfv*kp@XxW(^#S)3x3XBF;O7WdS8R zViei2HVc&oE*{hIIK1Z#LjK&G!DV7nq`Nj%IT1Lf|o15}O-!fZJ-2lP*iv z$Gms2m7HHm>x1nYZC_^-WSep*3Q$Lx`5hMpATw?@>1=1MH}XfX)J8jhztUANVIoU!4(mG^av=w2HKOOph92SCpyQTlM^SdMQ zJyR`0U4iY}J}7?|B$EAyP6@@o6#x|R`R5@pc0r(O1P}r-A*So}9{DW{_wU}Y zw7UVk{2PJ)P>>$rz=wzWKOUC;uU_wWy~qC#Or06kKAgZfg8g53$`0cO&~7Y%;)uX| zZERyul)8A@m{F|1zwf(Z%>;DcJ7h)pcRbL~%A-vDe)q65c~!(#n*9y=#Z*kgB7rk- zd*1s;4M4X4LrTQZ6o@73oNSIO{PstDdZ0f z{>)Z&VjVoT#(Waw-GYHfljf@L(VJAwfEy@w+C+n#&GZT)DYNNw?$EmcW>W;cj-l@ixYtXnV`OW|X$~ zJa%>5f=B=t{cxJ|`4oefGKT+*$RkQ#(%4FVj|`UyW{T8*zI~q1#<0AW=t-M>c)0>8 z$c1U;tMFYa_#hERXOuQOc4&su z7~^YeXp85U?O5_h!QYllQ=K;}`$|XRocrHlylTdJOse37NC-gGvS@*ElU0=de=z8f z_@`o+4c&f4axCTuwb(*){$v;!KL1IUsbMMn;=`7#t?peR5sWu9^Lc?t4pirN)%8i{ zR&61PW5QzyR{z#-VpGGfA5kXbG!(kgs-m)QGz?$Xro_D!`mu_4SM)QKeysJKeez2Z z`B+|r^BlyOl207-n3TOZ%BNLGiB;2DCna^Xge;6G`X^aM6#o8?*~xL0Wo2c?^KG7O z0|^3^YWgc4;4Dcd-bPE9_oj;4qr~4hb)bn}BX>F^TapFWR_QNWiE%oQgzj#=ovq|A zeaO9P9JHaHY1?ZGKNbA_cKMnHhlS+cp>0&)IM{p1O?u}$T&*jCJ)nq}X*P0AJpSvh zMOL#Bp zL2xcqTR&V_w~5_~jrCAPW7E9(S)NlvW222Jw*c<$G7 zj4XcJ(_Ke`@P|pqA}Q-4OM8dkFHKPdNQD%Zd`F)&Hr$)gBW}2hUGow1JX^kMJuPBy z_Ivk^8J0ht+Cy_q2OS$o)!P=i)Stp-Ow9RYqZBN9&wt}zrrv0*g&9J0)LnUG>DE>X zyIoou|8)u5J&`t=VVJ{1C+t1vA{T`ts1qg@PaIRX1RB-CF&1pIPe#P%&8_{q*1U!c zS#r}66`En|T6gOOfg6@y;{h&4qRH>*nAs-WEQ^+qCx6K4BI_9?R$#%mvcvnhQ;#A7 zm;5C`4BH#sl4Mc&xvo<}>?}3(St4Lb$y;;xTQIodHNg{F`SYX;7qhm<_rlL*$_Hh* z{ChA_OsDUg;j0=B-?f?eJZ?y)MH94kx})ez%dp;{DVAFrM#uQo%Qy91ADOwX>vkYs zR66(Sj<3hn2r?s|7!(fCD|jg13OFAhJDB(CX@xKQOr|wwK;Zj%VWyg54i!_UAr@k2hpZ;L0IG-L7AUQc_wv z3Lr_<9R9$CPue;boQwFZslt@d=o}dJ$=^I+^A8HFNzH8R(Q<#wGY$y%Oytt|V+t0+ zSMY~`Z;@pb1DkLr83$@>AI=h(LQizgBW-LnlLU74A@io~!^>^1f1{l$@qwtO4`M2r z7;^7ygP%t%jFsog&j#Yf;y*;K^7KsN>mov|vnB94DQu7sJeWeV#i4t^j98s_XfOs( zk7|ETv+J;}DW>~yW^f4onxivj_5H!ssPaEsTCc;2!Y2{49+wR?Ey|VHy_5;PY6HJ) z!1-q+^{Y615me2|gPgvH4Xj%6AEO$vc4%q5?^!GoBUTWrcx)EE*qX*3Dc9G(=#RYa zs=(G`4VmhzzCHgU5mU>R>TyR9rq4XPwT%8<9Z;H#vqRfts<_G#|-9xT@~bGjy(( zHb^#ejO2UXVUk@+?@B0{oB3pgEwF5jI|iqHz`um9jx=xS6Q_6Q8!oH6v}M*aEKY{l zY37#iEY(6C9oth8-}&l1Thnoda)J3*0asTCGl9|4sq~Y&vhxP}cmGd?-PkT%aARL- z&X?s8$116P5zxga6i-tI{<9_hA$D?xzX)s^+>}qjJMgR8#=s?HSrZ4VVt$!(3Sl&i z1b>`Vt3OIY)-1WTz|1(aW{VPDrVt(SpBxBZ@ce8ty_L8`g4!s`zcxkcJ$#T%DL`v) zIJm(#5}#Sf|GG#&tI6gyoiS>Xx^;0o=ChOV4WW5M_-Z90lKufq6nxp%XEBayxxd-6 zb5q1GJSr|o3AcW21V5!rMh%CY5{5t@tRlTR8Uf|a3Kqkpyh;Rf{|6@PkNu(K$(!y( zoDe9^wn|Mdbr}NNdE#M)0CdO*d)D>QBThZv);u9nzla?Bb2cox85g_#Mots`HOSZ| zk-CgA+srQmtbZQqz}J=b?waA;sS@$T_It@fZ^u-%ZNG;P6)-~U+Y!rA3Mtx=k! zZy7JI<6kMJAw;b`|Ni#3D4JIti|-EI;FY_Z6m_r$Q@Nh@roC-Yr{jqcVeC$q{>XPJ zrE7d`G%y?7fyz2UX>XIt+RlwnY@p~PG>;onfKey;nK$>J)#&LqxQwS#QhRgLS9h~@ z<^~omF%qd|OB`4(9sae96c}O$b(-6!R~GN(9gkwyAL*qnl%F(ojawQa6QaR={~CK@ z5>dA46;-E~iX4q9-)mxI2jgSW>Dao1)0n0l;ECYOd?D?1dQyoXI^@3pg|@2EwLh%# z3Cu+YmtVRC_1xE2~NC~qIZb6L;wLT?OgueP3&?9_W0H^;83fop@ub@#{=|44adB()`LWJ1^Gpg+z1AMRbKNyZ zJBPBcOH9cWPEbe*s3cJo71J_hB&Mac!p2yt>ScSF#!R|(JFixsZA${Ii|uV2Hn%@P z<@y1MKOE7}_t$I(5f)XqVoRzONGwjxbFalH{Nrq19&cQdCBGsPa%m zhUYw=HVm)e3crMiA$#sWHWuthYnxQrQ)We2DHMEg-YEEtzlhG)by1G8G;=o?@v(L# zJMVo0V6NsQ8tC(NR=i?e2~`#1dMftzqSC?D9eX0?XG*Ysiq+Jrzg{mD*(4U0$O2Sr1s#!7iSiq_CaKQ1QFy$qtu$z zQl(65Bdo+D%|@Zi{v{J)ToaK!I8(Ya|6f0o@Jcl?p=!$njAAgEk#(c$l2BtnNb)~3 z0>w?*8R@Y0fhKZ&_WZ)%Pxx!K_MQ}!tn!}|+s~c?hTsb9-+o#jmk@(aKzx4yO#liv z5qO6hASC`=_;)CY#1Eao^8R0ehx&{EH@+kvYD>}vw7(bhzGr~0Nn*YCyP!RiL}K_G z(Bq4A01Ui8nezP~ZzSc!X}g$o2UEdjq>?;XV{rHZA%=`n&;&toKx_=2QHA0XSAYjP z^)IlzoazL)B%AUZ=P&*udZwdBJbQ6i6Q?4GIvIfdwO8*EoV^9|Nn+$Ig>B=!gdZu-}|1ax{0^n53FN zlsqV#^A9+3Jj3gLR@f%T+C!*xRl`AU(lvXbv;`CbHyX(503U%9McB!e457Id`!yuR z-|8Yh!4Q)*o864`tMH~1=D`+eLb!9V)ASB5-RBVK6UGEMe-t@3ykRl|&@c_kMQvj~ zYLf9%kNB;%!%40ah6F^8e_tQ2t7MpjXmeQ^;?v#P+!i6N=ealDc290dan>U4P&=!- ztS70@eJ&Dv+Nsdl71VeGg@3mh?R_h%FdQc|PZWP4S!S>KA`(yJyOn2F$>M*S>Xm2v zvrWBpb`bVd?qIA3=_slhoN)1I3akz8ytHO&@V8RFQwrA#bfUdO^s&s)mb)lUKv4^W zc>qzuq0rrpVPd#i4h)W~%lGq2C1r(AE&i6p&-}C1C-{(&hO65j5G>=GhUt4-m=uB! z3iSKhK;c(kNKmPadrTLFV041wDo~L_ysAQT7^i7EE2lLmG+j?>vcM0IC%krDScO+b z30*pgO&InibHVD+rD_bDNBzQIelH!1yi|UcUy~>dAhkO^r`J|y8=R%3i zpHJQbhx#ta<5!OryRfX~!*FRZLbaL)d{Pe3exa&UpkY!P4kBo6F0WU=*@DYvgo$e# zrj?a|@BzBbSWCgv{H_8#;d1E_tcMMX>6O*L=jsE=?JZ276j5UqQ%6tXegLy7A^2l) zSEe_}PT!z~ZOd&7YmHv72b;q|@-6mDG9k84+Us@R<6Hm@XOZ_;Uk}gi>I8@LU6bu{ z?9&-jHxZNrMs23zx@QW$Hgsk(c~O7kC8X(2+jTh@gHH#k(snol?e;=n)Nhvmi@e*f zUSu!r+@{%I;*27mm9a8K82hn92&=2`7KUD+DL3Mst-oO)M>ys?n`y{8IztL{0s3t< z`QV7pHJ01HQTsDgMEZv1oJT&teuk0U`nohCwbBLu4vRiz()ELiP}rHG+o_6{(8`x{ zoIRI-VK%}HII-?dQ@M-VmfF@%1QQMthZW=Re;94BRTnk=PQfAvZ@?9OHLe}_8?{@b zfqtL=5xkavfDA&1!!OGUsyH_RnfBr z=F9pq71#9RsPChII&(Uu;$BX(v5?t!8PnO$4jeOj9ZGn~ zqT+Xap-tTF>ge&UkvhGxmYm;p5mbvVtVIZpZikSD-qL|1xp4lC zcKL34uM4I7gqYb?`ljLIY7(7aZ0Jq^9D!lUjP44HFSqP(>=NK7_?e!X56phx(Nw>;A|JuGJ1y^nj%gAbJkN6~- zcHP;w3OAR8ajj8>%y8tiLc6Ukh5u}hf+5!5_8i>X_C0v?WTbsny4ngh-8qG_Zs>4= zyhh(}OPjJQ9^Rh1@Jd)3n&1jzBG4t=Q=N6uq5Sc7oC4c|xZ9%c8V%XxPQe6j@IpOU zC8#^AMU?J_pq|Y49EZlZA?ND`mo<193*jE7LJc9FC)-vv!L9iPJb) zN}5)#^R>kfW0T0uZ?%KTA+80V^#aAer|Bx*)O*;Hfx>$vR!0kTmNY2dEW)zqyG%9s zkwbStIZX8tmLT&Ba(;#09G<~RNKQiX9KGv8+f2Bl(;y=IT(FWQ_KAnz-%3=Hg>9^$ zW>3aF;y5STr1ZcsvfGZL&0(rnz6iZFX@lb(2$_0XH%sW0-(y>|(EJ zfOt}XzeJ!IzbG??j$&Zbq^jJIYHAk*00jDM4kmL@<3Qm;f9D$+jYikGPBJ+2w$n+_ z4Un3QG}v9$iFPOE+f9SS$q4ClNa{Z`SUP?MkkpJmwj4$9tum~xNJ*nG2&qz3)#h)l zgEL}Ig>CFf(RNPsg)WEMx1!K@8s?$BThIW*DktV=$kC%9<$yRd6a!Z(&deuDPoV^V0iYvTmvVle>%Sg&9Qch7c=n62`vekSE36HkESwoA; znldl079Y0-5HxI0>Htc$8pV99S39+TpN$E-)=O0^(@;^`rj*<}^$8NnVM!#sz4V=C zX{d}BQ&eVot1Wv)ug>7IAX6O*9Re8=f|Boo^;*Eq(2mN!zB)*2WT{IYa#Cr@!xBzp z7o_peFa1NPqy&^cm!0zD>ht~*MyLxH(E7rtE(`mP+8M;; zD57B{hU^xDwF3qf-r%&wGw9p&n1Lr-s7u+MiUoC(y(UrS8ToQqI}ka%@7TXKKe@fG z&ElBVg|PrhPn|x0RyLmRg_6%CPs3YM!vy$hQuHFWYk6}d1V@aF$`6Y~;SgoCXaGVd zOLi(82qqk$l;!wLIUewmC|{}q9Y2;U=g6V!VNsSB^G!^Sk4GIa9TAWLt_L>**o`xJ z>R+nbnv1F!U#kG99EcjM1yMz|D;Xrl_?`A&7d~Z98WL^-*nRiAZYwDXsl`8H15zj_ z%ByhLuPF#bszgShPy0KbZHZ||D4Sl1QS`kV3dZlS6KIvF^S4)05Yl&@f0j`6PXQeM zerJ)6c_n&R-O+hjKO}zA9wwn2hE#)|>~B*H`Q2_f67UA30BlD+4n+$xC{Bq{jLaaV zu~swuOZe}%12Zd|@U?%EVKTSy?_ z4|lZCddb!VLs$=YM#lM<*nj7SH;zA+;49z5M3@IEP|=P6f`mYS0{>R>IB~uXF4*Er zhH(gnMxIA8G`s~K0Z36-Q;xz{F}T!;oPrdFASlKwWlBL0S_0UlJKsbUDXC097l4|9 z)_f;&C|!@BrlY>v0>&)xn}DMF4Y|dB4l#(@!JNZrCMw!Gue_SvUmEzPbnmU=q$LXf zsDPj*yHAdE6+GbyAps~l$19)uRvwt~2T(ju5p$gZltc+Z%lk4+984X2mSBS?126$U zaTWaQ6+ zUWWte=t6bnAon&djKc3f0^E1qnv3><&;;Afd;y|GB=wlnZ(enk^&|jJ4F3pR8E}cR zKx2H2MY;NUO2{lYL|sLp31Yt8oLE`#hO9)FhcP>cu2qnLlF|EF&Bv%4M6m>hKC-t& z%{p;=*-A^%RP=JU;)l# zWah~)iNi_)i_#xjbm@7(DI!%7<7$QJeNYnMdd>3{Zby>eE%}(3Ew{R$YhZwP0|6sv zZLJNMx7&zS5cLT;%S3HZ%<E@R?9c1g<;ow{7#+Us}Nf|b6E$a^o@7KyOj z!RGf?pI)I-%-C~eupT2_OLPNqqZ{}A^mt_f&P3K9 zD*^Bn4RWdhelpOgt42BD7m<5qyjiYkKLsic9uuO{^o6p=|`G+2%UDgT( zj&4P@??d9kpg53MY#0yehBvM!F{k6VZLV8mJN$>d%}QBe#LH_n3GR~6;p;Rg_>-~? z7)4X*VHn$gWXca8@G}&=pH9P8Nk7((*K~6yeD5PrUGT0nqH6f;?ogYvHknPo51E!7*naPRB$g?e5+~I^ zG&kXYVIUcN6+w52p_jM=ML01-Ilf@VqnMoImk+`>+dtvTl(8{!wvr8h}gVFry+Guk+oWKx}(!Qy9*mVZ@~P>nXNqwT%?8>NNRfHeJ` zRw8ZZcWOC3J)Lz|9mL;)`IC0ys^Me#OQA5DLrS;>;UGI2{x&b$%Kf%rK>s8Z{ zBb^f;Ear18>j3po}gt=86BfXLtyY+*R+|!SqcvE=Hbk_}bO+I1j$D*Ew$e z5hK(ebQ|uL7ZGV z8gK=GE9b{ikD%cl3j2<8(1Q}$({^5pZ@RXW>0A!#Qw?(8`IK-JGy$TXhl848k)Ik+ z&vBmwykAV&{nu}B^}~cGfS!C26J)i|;5qv1>Fsiz67H9U67eR~oTv;<$H)n;l7e@c ze^Y$fp7QPmW6s#MDjfN_K0%Mt*JCyvP)dYRUux`i@}*}0Ot4nadi}v8TMC7MQEayh znQ@mmBpJmYeU6%S3c@s&!hqHCRbOl~UOxNQ9i@3TDA7|YVFpKOjL<# zKOdXXwJgJw*&IJotM}+ZY(v;E_+HKGLl9FZ%=PV)Hlnbv!gyKq^=pkw7e?*Z?SMSSKN>B` z6lw=$wgqwZpV|RaO`gu&p0xnInu;rb0AVA%Yl!{JfA~Cr4`<_vCe&rXOfkKw}gTHinOHyWd>yd?uJ|J`0=`E^SF2F&i~Mi(LgPl}$ETz&D?M z_SK1AcczQ%VspasI-hI&Zo|NpbwdI1k609J268qH%?ap1=B1FSI*9Qm1Rw6mrn{Ip z^rcQE3jB(oq;!h=o*L!&P@p^_|IV$!o{?d1G)W>5NgS;&ndkbbhq)A^Fi1R0#x!Iq z&mQ`mRqhm??+!LI-DH{RRXJB&5?v44IGIlVxD6h_W%Z0q-tUuDUePEz+K}74_;VrJ zi-<^gmq2=-!@YA9ie8D~^-k|mmX9AQk8;rM)OREEME-SEf?mOTIiG%Z;=xvuFr2hDm3*-;Lbw?X@ z?S>-27H#Jj$-BfQcinab2x)3(--;mpM%-L4l|Fys*LUzIXs$xf6{ytGQ7lF1G4AK}Vb{f`K(l$1~ynVrQwkWhtABY&* zIR~Si)S2mMsH*3ELu-X7CB6O+Uz)^~#D+HM9*!SkixwLf8QvrHQw5Lk#v7WoZp3M& z=fT&4wdl0q8AzhHSn*s8VO{l?aX(aW=A)RNo?edwLR~L_Tr`X@uG?>iM?tPGgdl2! zZpH_^G*@FyK8k+MvzfA~q3}!U=5khopp*}Zr5_@n*wI_k?c|l@)HF1LZjR>6WOAGc z5OLT+zkdYB#-c4dELo_VOxYIOQ zp#OpQ;|VJhQMKcyRxBN4AtmLDM;n5p=lzDC6Oe>k?H}FR4X&ZT3S`mVH?=)+Xz{(y zd7R9R&(G&y!4SaV!8pqZ$u9O+78|L3ZixnrDt@ISMazXsAy<+$*E6o;#Tq!zmpM-h zo4|$*U##<)G7qINi4}2-_w3NFO#nw`NSA^974{l?s2Z)egp1W{VBb0Ha{U1mEk|1? zr*EDY=$?Pu-k#d#u3%6SD~?S%yak2~1?={BVBOs(Vu zsWLnQ@`s*JGu_Lo#iI)5u_FJWst1tvYn*GC>Z6<|--utKGYUW$+VYd#Ng#n?`aAmLH$D^D3x7W2d z4J!c{bDC4y`t^^R);(YEL)Px$X>^6K#TP3LhJNqFs2tM2zCG%^Nzf4~nsERCs=Mn) zYTSfnFk>w1)v^#?j}H$|XwF$G0|jHya+?vstzd4nDpPLxPn;l{oDuW+;Q;*FP{3qC zS+Z1Seom1jwZ7aIqxoRf`e4X;(f#G#o9F%$&Mqz@ay(E$ukkd;_P%B9i7R_bnKkQQ zVmy#tD%@5hp(S}?sqOKwC9=f z4ejxE=c!{Q(s}s?RLm&$De`a6%_Zfss;L#|=il>|(KhJK9iux`dq>^7SV~`GfD%i9 zrT1d-ywvuRblV?5cIxPP=LqCoN zPg|BoM4gEzl(<4i3SxpYp2sYn&eayz8gv={*3Fox z@G?-HRl^P%O(p4MPB?TU@B>%s>Egy}hh&TWjon|!y`;MhDKiOzS!$3ky$1i@U?QxZ~HhuGTh~VJ8*g%MG_Yzr#UEYtV^2(Q`g@pj4GZb)5AQt`{Tpy?1)z%T#^Hc`YN2N5wa3}I>i*?wlPJpv z>J9w^57Fj`9MO8UL;S$-sPYQXbPv|PAb2wVN2NoqSS-U#Lid03CZcW;M_AIF;w_b9 zmt=E92mstVMJdJCU8`5pS74eoU5VRXZ_1LUC;UaD&*sEcRXf|-t|i*^ZKwsa#T*4t z#AAKgCjaDVQrTQM!EW|MTL$-HW=Gu=I1I?W@6mC!%b4BV>>mGES;v;e4EV<{=vu9~-C_V}gvhS6 z;I)ID-TIfbdqFvm_u1E72LJ%~&Y7o9BzOGV;i!4VIQJA_!rF!aSJ~>LMsv)`$w_0C z?ZtV(hpLLE`H0yy&r34TNc3ngr$=y;W}+0YAl7mqxJN1+k`wS;w%s}mf(7+Qx$zx3 ziR&bIKKFTYo}9Y=8{kjOZ;wPY2xJn>;DFyZygTXl--s&hKE7o@w!`25{{J|~D4PDd2VDZ#@(lS`V;*9v+b1aGQjsht@{pWAs7;KUL zk3U(>?SH!)dF1`NVbbmWDluFZys*XKfWXYmY?ufb*>q=ZZ``B06tTu%oJOD7OY|!K z|2ueB*rIZg6pW?R4JU9p;NpgI@&KRt_o#n>rLuebA6}ufF0h3#Tds_8D9l#sGYkwz zMRo?ZL}K(rGZ2X8bkT#39M&fV3v5K(+7mX^JbH%B*4lranq5Z2CX z?so~%rc%ekYvx%}{W>pLNDR%w(3^~JPF&tEyk>UQMwKo^YQSqcWhyp!IC zziaU6J(6JqPEX=!T&YVO5kJh=sKh=WBNlPwW8WAzQU#xK!Cb==Pt+Mbql=iW47jo3 zIT84V&XC&vC(h0}6#6~rHjZkG5y2wN9WS9#Sr>3$pI=n+P>j!VVXM8#q3w@lK z8`av(f)1bMBB=3KMZ8F|$$ihpFB|BS`DzCu_;2(@9hWCiSF6L@a1+nowDm?G3UKqz zXuUv*WEbhoIag^%!cJ|EN(Y-O2kxBEVZ#eqxpOWv@#tWE40;jVZXZ&xP(;(LyPnuI zZe5VvsO8RUak>4^(e>fbQbXjf5#pQUpvIf1KrT^vcO4aPQcKg;q$AA(VAzU?j}^Bw zS3dNcbQoum>?{|TyZ;YsZxt5T)~)MC2*HB8hQfkda0-IEy9al75AGBM3+`^g-3jg* z+&#Ga9%TM=t$#n~T%3z@mq5ZZs2VkT@2$Px+rTP~`(NnwWG?m|Lhy+adtXWzl?dOT zv*BAP6xIH~lAM|$9^J8I>$Int2@E<$n9RAr%rOIwKhE0ET``9uv(T3l4xh6JToDd6 z5J8?5M9x;JQAD1de-EA9LY=eghBQKg*&jg@h#_18OCTDFmbgwpB*P`1F+%u=?S^JE zy%LTX1T)B8DSapa-?`smy2iI*%>3K)n$w?fU+AhbuOGZ?hBtn(ZRI}`gzQQQKf2F_ z(kcX7Q^RxP7C40vPr-EZjphC({HuYW*b;7Cnwi^gIJ7I?oGW)vsP{~S)mD&pICiIu zdvht(v`AtHb9jE44|=Zpc!Z0}?91GB4kUIW1k#TTzK*Sq!4D_s`&P$aTr2}TODzR< z9!pPJm%{qo2JId1W;MoZ%BA4t;E_Di___&Uv+r?Y1To3e?J~&|Ix0wv)W@&4O&#Ah zoY7OdN*hEmW^bSgK5l)nVh`~b8&BEo%xL6Ys$s@sF32jVUS@bt)$=5AcB%3El^&h} z|Jk3@5ZMP-jk{X*^6_5FWrIUq=qs(Zaing=Qz{-d%ouQ6m544c7P63`qeq^7c$HTC zWRDWLfU4VOtZ$5Eh4En8D+rT zb!)MP_|Ad;ZkpS`Hu_e!Wr>EN=(wikjDcTqSqlnX!NzE{4M(cMk;;j|k%KxNiuO`=zNv6h=U?D+8gxd5(YXoH+V2 z+b`lhCOQcJ-Kp{jM^F>;9sjG$)b~-`YHyGCkwN#+Ha5vsw;eFjT+Pf$x!ca5@D$;R z@a@E*GxE(6ovgG2!IJ?L(re+d8U3vWE%DVQWa?%U@VJF59DOV=@W{OMoU&GIqsJHg zqswb2{@{2-P$RORI8#3213%0avwILi(l{Kj8KWzB=_EY)M=g_158BfeQih7d%Mn1M z+#X~7Rc?C`g(*l;OEFCxNiU#$6Qw2-_QU?8-6!L`faYtFW)l#*)`@kgrnMkE(|z7C zCE{`T*->ou4Yj&)NdC{MD)s7A&~fbP6?j*5c?}02>QQ>$yiN4&K+)>znO~ z<%GBB{H@OQDhc6`YUyfA3%(7<17uH(g0_|q1mw;~l%J@`9 zAo!3sIPyU1O3+3sLk?Q)vkP5HNO7vLv}tjed3>@d9&dc{G-NYpXcT|?TG8l^aaWnG zJQ3Zu7;nlpf2vdy@wBAhk2W7l#T6-;+lEs)bpS8W-wg)S6`b1l)}8k3{LYEALa$U{ z)#7p^7Bx41O>}jtDDpu-%R1i+S?j72oF9v9&x0MuU=Hn+Y#5~J<&ZP;(VQC+q8sO} zajHKhJmO=1Bl~W&B;{?;Z~Sv?n&#p~_MG!+J6XMg-TKC;p+e7w1=JS(w3YYrR5C3% z3kP0f`J;z$GTOo!g@oAL+!fOCVOQqq!NIST@ei4LGqu?PXSJ}#t<6y#mn;qW{)5eR z;zJs7y|N{t0DB>IbrG>QxG{2jRVk~#5d`|gwK_VV#<@W}0-szl7^vw^kGOTdId7fz zZ5JgP+ot$^jHf4sjb#}2#!WAMxpZKZQef|bCRJc+nx*+7r!Y%_XUuhbCeP_NnUkl2 z(IgK_KW(U#9p}LEOT7&FB~dOKI!Ee54|naRu5-IAdBFmhvmzT$Hn-_oM9gV=Ns_B< zzRh?y+48Plw6CTS*@$a@zW>fV0;1$Fi`EHE2zJLsS=V^P%(O1666k#h>$|cjO1`)d{Z1kA}Z&a8mAb-|ZtKS~3|c z5{c-x`MS@vbESNmKOTz_`x>|L+g^&7j0%dClp~wcHb$){7&0iUn0Oq%9RxB#_B9crY*^-g;X# z-wsg{urhtwe*TU*5Ij6s^7_((EP43EU^upjRApC+1uMN~LPBiSlv@`p+LSJ?Asaah zOoPSe__m2hQqV>gI?|N1R(@Gvhc9f=f>c%)H|#P$#0IUdI(>(-yerZ|1;6H5l=7n) zmN7-idE3s#>bk4V?9If5Ao_U1WvIBoV;LuP4ry)5Gs^Kd-dnSh|7tH5dP-MiMg(beLr>iCN?!$wY_;ZUvVE ztd8Clge2ux#M>|-F+!bXUO6jDTk8h|jYP9|T#e&yHSmeCjSy0Adp6Wjr>b4}@gACCC-_b6-;X%iFvC^*Flim78e?&6$@O z!vkFW$eG)IMR6v^e_^73HJWELur<@ObjEaz<=;(;>{BEi)u{e%{S28gcuZI;W0ze) z<8hyAh!umNDctRcTdmKfFERK1>Mcv!Ui)HjQOF$&Lc2a5h@np{6KCC5d4`J9X6-6T%JdpeJ>oT~F49?#7 z$JWBb#qXzVAxDW!RoMhfqv^iaPHGTNEN55S{oGIU&Ph1p*GjO9Cj#%I3YF-U?+up# zz&&rK1sobu_do_8gx$&IZaaV`xMRQXwlWLTj4QIks=zy|@cww9k<#T*NJ21)e z5T12qDSRfP^h75wPsK4~w$R?_8wX09ysqn*CHI#}WHJTAPegk52t5M1c-4K?4#!^! z?E;WfFhF!#wc}ntrTu(us!&FwTRy;IBpGz6_A=mVNMiC2qu!-{n$K3DP{I_vNZ~h1 zcUdoSbJD)<7FbcxtFK=RW?^qufyXTDjcbph($8IP@7G$W_#y1dvTVsEd3eDp{-X&1 znV5&~^~bdj_7ucaUyg?pV+w}O z#(Iy*7eUf={o(k`RpajRPwns&!s9FYo6EBZ9q`u)d~W1V3O%SM=CxNH zZYlXF3!qEBVMfgr-?0(?)WN4z;_BbE>WBL0J<>I^n7?|zcf2Mmg5SwP@ws0|^kH|? zVWxM`TQZ{_)~>tIEugeN>gyywm&Ep&cDg;uHdIh)rFpkFSfk%1D(RPt)>B&{O{+Ux zJeZr9HeZ#?WKTjh&3BdW6F40$Hr-1N*@~l?Iz^*_jG7D#YrM9!pgG<8E?a)3KCE3o zjA|7>Mwko)!Xo?=?d7elQIT9I&QPN?UXK#i5N@cUp)_}*`Hg}d>8q~9aUuB;SJ=1) zcyUGWL!Y;TBbEShx~Qe;gDBUsOiQwpz(3o14j)6~00i-${pdT52fG#xvZN)z>D4 zI3r-#z>$-EB*&7+&|UNOj$RI@JJw! zFfopz)W`BT&0jrdjjvUPc~af+;;oa}uIxx8-{;sFiOEtw0_`3~NG5{WQ`V!^NR~wB zz3XfCkz1u*Vc|ZE=7GjcK`|}m76Nl{W$G|{j(=!Bby)pYsq&OtTWup_fxp;mN3fHq z{)d=y=%q#%#ovzPQJ##nt(Ucu5+@!e?ehs37y~_1atqTRe5V@FPFd#6xu9dH%k3U` zCh2p*ZMah`9I@7kRy7X^ZtS-nU{!uQw`&oW^2>ETsJs+v*od&;SX+Q7qkd^ur7~}X zlCkGMsp&IWK~e(-e^H$S#GMRXLf89x7>W3T5PM@=pC@qspNt3=t2uElr3n*e057Ac zT}t74sgD7<0kzNn|JAc-H05r;>Y=W@qkDq3&7la0z3r)bYPETCAKlO`?R^T@JY9X* zKDE&GeBbz|E_Taf^ICU(MKg`=?jh0s;{vrud4t?zex3V`;oZLhbgS%RD-$J<1`N5 z0XtrHZc1ru5h|8%zoBE~UMIHc$H5oCOOBh9^=1>cHjp}5hXM`;?ytWHxlUz2{0U(n z@vBLnw>P}<{5tCJXuMU6L(Q4sY8`cDgE?{7F(0&k2@|jp(~NjCy?0)wG+0pG+sol} z;DJ#aEqni2)-IJwM?fthX?bID#n#_rydsVo$qFjveuG_FSNK|JpiW;qU2H_bjv(cp zY5NlIZOe1aRp3B{nqi~4rS9D6b>`+W-Fz8`4ie`GUu%k}wk=1J)gA>R1`poa%(#XLY zv+WjvGNliFM?Y&Rd;e&ek3^(M+@~aRe}xGO7cC2S0Zp^WRhc8jaK868wxh}%#oA2j zuWgJfy%sPH;oi^@a4g%ey4{N5pnnr57~^%S>XXA^WUfWlIkEK%u8I3dR4)LPrB*g+ z+!KYbVH%>)gSK-Z_oirM6V^?~$G?TPh5pyQ`sv;9r+|csD6|N?MVa7NnO(3Q`dT6%m37pRW6bf3Vx957VW#+}!rq+?spQ zs3Ha9K|PgvBH$m&ulp$okVwhmQMSbH<_XoRS$hK|g_${s(lt1H}-7#~-8XNKaIxq;ry zTA8gqw>Iu)SEHMj(c&L-IS%>z%KJ~D*N&iBYjtd3GKJS#y?8-2lAZP7pweGiONOa1#0QzbPg9;n4(Foe8%CK^Xyz*_31SI{dSyq|^GFQLg;hBS z+u(+Zsu}sNC9a{1ANN-L%h6IzrLsH+tS@OIQYEyw(;>?CEy6Bl4(NM+ zli2s!E*twE*)5-xF5ET`BbIRq!`kZn#v{<^rwY!LeNo)f0RWVH= znK9pO9GA1%yS6BgU$ac|>*@>~o7dO|o;mKSw{%;keVvZ3yso{v;-utA=WOeC2O1Lw zds&SvOjTL8q_s0=yYt+Iu)SA;jQ*ME2W9zC$a;}`}3^gAw+)?t6i^$SKEnA!H zdxaBLtmgFS1>qgE7bH}X@u8G3En{MMWLyZvawU%J&Bw#v^{j;Quf8i)^i~K{4=*z}{*YHww)C-ks0t^@VQ}VF z9FSbR>2N7Mn;puZ=q+gC7^x7MaUzCo(zblRXj)^1zON>Ii5oA}+1~i8RxQB_R$G2r zk3GbqDwRIM5bl<_k-o^_o#cUCOW8Kf_uD{DxSDdU2?h%94<*{Dd3a{Co`KTS_a)`I zsJ@Yyr*YBl3)MHQ_vISC2^Q|34n}4R=^7J&2Llb<|Jw?yG$$a`7dxhPD9Xkh2W|sE z2<_#);IsYjfBPhz-^t9@7u7T~yhkayO!Ol(YA2-QKF zFW^uA-|~&aDWL-uJRv3uKaA~Gv?DKahVr2SWWg300lET^D~uC?ADbr~jT8QB3h z-%;Xqn)u`6dJppYglny}uE%x+GQSaUh_YG)+B~kru9H%1x;rDO=F1LDl>Pa?<_KIOMGVB44{G;Ofc=08k4PI0yjUCvw0znNY#Lz(5O1nrS!BM138omOJO{PQ0)S2=GE(kGUwLhZ6@Z52zWS|yr@|c%Kchi8;{Wbxf@l7g zukTjkQgF+U$A!^fAbEY}q7~VRXjpB-)ef86;;fgdrU6HT4EFw$haI(XaFh;ihS+rce3~8xYs+07q=hH8N$ri?o z{ZIL^OQg_OSOZqJu~QrfADx0&AZVjK1^QZV+3Q>01$Rvvxcv9$9D|#nTcGWlsK9T0ynFtq@5qY7iI6zM*&IUI>XJYQeKb!RFeb z$SPHw9Vp~&kQ6G%^KWE<9bv~~fa^VUOBBJj8UL-lAFW6r`V_!4wj$WA*fh980SOudJT4B_eRFy%F8`9g7nx6RfC z%(Ql54u_&|idnh#CE++oox|ynBWkhYfUAd{)wGXzic46L?{=s3`#Q?zZ6c)L2j8HA zl<`=|Ln@Oq{_H@}NuMKEB@Z4uTOPorS@B{x&J}A#78={!8?%d^Ew9&Z8SyT|TYJol zd>9nF;31qsk~tJpKTy)whQc32mqnUXgf2KI-n>ZBCi*5Lh17ztWDj!*b0~@4EE5S669>eyY&2f^)Gt?Q$m% zc$=)4)`*0TA2AKZC32ntzLNeMZPDSe===j;BYgj@smv z_`qHXZ8JdSpB9cp1^5RrIiTh#mG?qlbWaP2L+#%1^YI%Js^v!(zSF(Ts6ELzt-|@! z>Q2CqbO~}-LpxfW*E=KsVo8#;ycjWdhYX@OTvPL;=&Zw*k%x5m0EUa5pPHk@{nlhk zWmv6EaQ8dU-;vUoO-a+`k@SQn^_NWU7wz!fsr=*r!x4*{Nm1qjHk^_AGH7Dt?vBCdT)jJMl&n*K_fz%u#krfnwNjSL?NtQUtzF`PjA zek6RgIuSF|nI`5fk6I9BO~9BL5pJ9MZ&b4-8(KWRBV(gRgt9nogLO;QI_;LBW?RO6 z>tjI;EnGQ!B10avdI-7vh;it?D;1IGE;RkETNs|+@8+VMOljD7WXmrxhoI%E9%Aw7 z5bh+ux;Z(%M*hddzImuXO)ra?1=hjB>Q0Ye)<7(rY2_#Qdv34_fBn@woK*w|iQkBp zt>N_nvPTY9e*$Xov4y}YRZJ>{pAWC4$U}i!I~Z?9o4C#xwc`{}vjns4xuAwvo}D;! z*{Am7LC_dUb>245)+E|A6P31Q5;j|tju#49BX=Bt`(FGsDyWJ7%RLKp#ITc#e|541 zT9WQ>Oj#0_mmnRQ5%WgHNoOCYR3S-g+SR-{Y0)D0C{5R|xu-c0JgXX** zmbG()W53)qCk80K8;zH)o-$OziAX}HAimUF<=eJFXN*}VeT@GeBVnGAW5~$DQdAwk z&bQD-dt#*Ix@`D;;H%K9yJ()WYDsIjhFp%EG}=WG)HA2qq0pOk}9n zw)zbhvb!b!I>R{2^Q-(fRQ@6$PF_VwMa(J*l|NO8U#y+$@Pkf3iDNNf4C@WdA@{dU zF|r)xAmllU%tmr%KL+1Pk)eWN`ExE5VQC2Bij<2hnMaKH{xsD+eOjA_?}-)%@ViAr8Nlk%x-&?r9ZA-CFo#ElElUpqEaNr>}K(Q;^ zbS69>pf2BC5if1GtWfJ;;Ak?4T3iUJji5DYwj#(Xr;2cN$ID@zYyK+2D}U^^dY?r^ z%l5hbu?+Qnla%&5%@`C1JkZTHH1z}R2c8nEeaU60enLbnaCvCDnt`&KB}-+YD@$nY z`#Y(um{*BO^%C-GPJng-sq@Q}wG@eX#I6xZl8vMPlm5ohSa)r%=7Xt<0=# z6#}bgz>efi9r(vqBUutlB>tDP2$ZQ6RG}TM;S*}&%{JQb-)=;j)<{`x)eCV<7h)}U z>b#wJj|DmyUtH3wv>&0cM?gVaCyPfx-b#kVm2D4sj~AXj7AGOk&%x>N@P_Q_#_24C2aA`hOiZ>_;8nDRlDH)&1`HwA@O8INL$7GS z`m_BK@0?=w5>y8yN2NsL6IA%gP0=p3Ku@huZY%$`3})Tk_hjqNrv3ANbdRcg?TyWT z0|S54ptUJ^f#!(uUv5hcDjefYLiv$mIw|P7=)DP?NuvgA=8hZ60^yggMD+D*Ebp8w z)Wr9VwyQ1?N8fi=V{{jrKl`0oT2ue5BNE$dG;~K;a^^U&jsIDW)obvJV!AbMD)FGL z9LNTV^DLqX9NRPc<4R{+t8mRz`%`QL#q`z3A}?n{{n}CNl&*Qu-E(H}-Q7T0{3A|$ zNp52sF>OIo)iqGAa$5nGTU1N-`HWB-{m{qUrTWysfS5PM(cBA(Ch8fxElKnlLUg8# zeumA+qx)vk%2SLGIm%i7A*)b&pWG?(O3!T{n9!zj@?~%~Tk&?U)%}BJIguiN4Oqum z9#_9X_U-X}fj*bnk3D*p2svPdApRG*q6;(D3JywM;E)bs=cZW@M zrTcmzcM#c5H)@eiD)qm{87s>?7s{rlrptN{yu~tJ%Cy19`|AT!F^cmKNZcUO^UPD$ zZixS?TgW9j7L$*bXYdpfXmK%6JErzW#UVKu2#v{ON`UClyQ_5J`vIH%uN)UzAz3)3 z51uiw8w-R&dOG-PHJ6;+^R@XHtx3c=E)AFruRm+OCcSn{!}6VgefbINUzY26HSH=U zVvUKFsIWrw<&lXSfT=2SmsCPFwRLsLluT_=$2>tO^&|Q;%`8rqG7H#~F5VTr5?f?8{?A~~Qq6PA2KQaoc!}G#lBCaFvdobf> z>L+>BhlpNC&}rbWB`>sK_Rr1ChaW&Bj(9^BL}khYODvcYql^`&hi2KN+RyWnB@AZB z%eTvPc#wc0W)4FQ#i;%#Qkb7rFm)A6zY2uSkWnIQZ(~kD1Zry5K*rE@*hEgu9LNo> za5ziDi_wz*A}`7;3Hp8o(9LJzC{KAcKx{YN_W}v!RaATwGXH>ru%f!~R3|QqpWF5j4j2gFhhbRm#A{~g+5*UQ22AKI)TE3iQ1qm zq?g#E#Qy$1)en(EE(624OR9GSh*<#EMneuspw@j>`LxOGM0wGbv2yLDuDzSffR*4i&s)_lR{{92L%Y4Nz z>fZ2^%1M?RC2axR9hL4gsvVf}FSi;6`6sHly;#kPOx%T(`4C~zf%-e^u>NsVR%Lav z-3C&B$pF1k1K9ZzbPEZ-ubAEX4WCoXp423gwx(rH^Zv$oJG12Rq)^;l1QbW9T6E_!>j=YvVu14#Vm^7bm-w$7RyAC%l_wn9Pk&QUi8%%6;sLpa zoR-4nf?I{ao1H8BW2FKYD45xXTFUDdO=*~JREyQhP8E!w`O5!Q6KN<)uL2U)E4-FO z#b8ESY(?`=Lm6Ii8P$`ed_Y(o_^(ppmXTmp?S9|Xfqd!|R;g@ZYIp#?C6*>%D|E;j zatN87=-g{^$UvobrFqGWe)^p{k)Vf1T}Ub*B`ql#YEZMC2_z5gTA2b)oGIfOXz1xI zOTt6vfQOI}Tu+(r9GZRJubf0|tQVv=@wJ>OGm0&6gPvnE>cpVN{PjaI`DIOr@hNS0 zEeY|*6vZGjVX+UTSSFo;=)C_h&WZhY)pJTP1P5a za}h;tr#V9xz>WmilKd4Rlrx3sjFd*oG-YD)!LT(?YOZ>!VbHhP_8c~=?YdUbgHCaX zPCGlb@0bhZEC&t9jqkX(@m6jEaY+258gx<9#2HHlUKQ6}>y?uL9}5ebCL?n6nc@n* z2<0pFQ0ED8EID=T;<9}C=2!sAec9HE0iU{k#{QE!GE(~buds9to2WEejZ@faFD1TU zOD_9u1OP+_rzmaI_D(Q`_iz`bpLN=K1rGpKAz*AP@RIhWFoc}c8Hx(YdI3?IUjbO! zqI_aNUnv-j)6kSy>7)MPFzKo_7AR^g6Cj{&+? z;vFM_6*d;^jg5F{?fB9!)e?9wVsRLx?BGY?`%Lbf!9#eV-G{vY*ohjn0oHVJ`3 z)(G`nyL>=Eet2?&M(age`$^kNBc{Jt(QC?vJy01e15P@E%XXJ}dnTM zOcap1jj?MQmxP~n&Q>{;Sm)arSHIUxVQmU0rYd!dWqrvvV{+A|R_%)o)GMf}qYLgV zGMBf+B0*KJPIpC;+U@Ju1tlsAtiEQ}iNo2a{Nu;+8B{%L@ZDA9Bt#l8n0)`AVu$e3 zAyDmLVP^kv(@f~FxbVh0BC&dIG2}`^`C}DtNdn}B2t5kUxX0`d|0t_yWe}Xf3vUqF zZS%#*^(WdmEnD_eC%!a&Dc|0H?{ND67;e2{G9q{LIBC;bKEyXqTbveE(=drJlj~mL zEGUQ(04ov_itQeHJm)ZL@Od{~{JH$q z@V;yoKTm%PQ+kzoT0Dk2IG8W?mw*^thrL=ZO zi-Ohy;T(s}?knyyovL}!h2+6~%=G@zsE}a{G;apCS=`Y~F#2>M9^ZcAM^5(%QKHCo zS|NIq#vY)F znpwI;5C8l+5yRqE84QztwLCb5@(^~;&io&4TFDjRz`gGAD4JRWM zlEwU^Td0&G!PS7>9E&>R)Fd2r8|0seiHiNiv1%vry9q(u#Yhtv2Vl%UW(G4=cp+9z zLZFmySE``c3W=UHni4L(*SiF;;MX)j%@a8%v)DYe_OaD|4akVwz$J=bvdDDX{`pY& z7EAFgA7i!zYJwh1@GYef>~Ze~jCLa5dM2xqd{0(qb8!=jx|ZK&>xgYU5z;>{Ti}>S zLT(y=Qey76LblH03&Lrpj~K#X#H;`8KN{O9cqt#06uPAq z94kL9VE-C81>yyE3_Bk{SY#KLK^>{f1I=1fywi2jVOD>eo(Kwk$oT7+MBi4@o7Hxqoil?hv+WyiZ@$3 zmn3%9%!}n@$a7rd=YRO58qVrj!&y`!KROoJ$LqY&R80$6Ysa(tyh1=($mQ`0_4T!8 z=G7J)8&i4m&zo`LO*1@X%`Kn%C4`CFyVz;np+HVOxMxSs`%RCx-fH^AGq5H87BE(9m%|EuppMy>=s8-rXlFel#;t3O7Mq6dQ|(E3jR>v zV$!%w3R6Q^^BzOgIJ(QOez01;wx9dEqI@MGtxFOrU(riN)@zehV&leLN;5y5Lz{Y$e-a>H<7cH&8D#x z6xD}nU;zo#J_uJH=}hK8Yyokk1q}EZXVdi^5T!9A6PW%jFf8u|<Ytk;!QdQde(iiKe9X}1R~-D2|IRJ zOad+BrEcMj+Kg*Sf?)h9UY4Eacw#T`dp!B&%EmJ zNO^Iz_wD(Sr`t)fC^g~Bf&h~@^E@GhxV8qCB(bEQdW?+N27&kzoy?G9e~l`BhKZL7(vsHhlV)I?0xPBP`sY;pkp zP%&WD6p{i+rJ#CQm2C6{is#F6)?noujXzmW?$Sn;dEI)LJtNA~M&ju}9FTJMMdsPh z{iSmw(#qfgatU(sgw~44^kAd!0KeU}A>tpLhXKdMkbg7Lf%?$fWzw2|r_CY%<;u+s+q zfr?0vQss2;xa4j{!zCaG;&_fKe-^C!+;tyWboT2@83Jf$~Hi z|IGqZBJc#^Az2oso~QkfL}zhfIAD<;&?=oW_|OFab|H^07@+iN6stMnbnTP;! zQYeQO3^~vyE9!Wt4*9F(d3*69`GQ(KU;$3Cf8DvU?T{}(jdb&`Y`$`g4LC8y`24Gw z{VSmb&O=OpbyhiVN;H6PqvdagabBr_3@naX5&2*^yl;NR)g7!{n?GBpXkAfio*a!{ zTm;N*)bH-}+Mb3y7v>iWJ=yEK?U%To*S6)6sBQ$%@55ZFI6?jGm%KO?c;ET6njdbpmE_(SUP~l-S0{7rq)xXwx z+*i4*pDK;zD^Sdr-(IP=CE+;@ky+jBk8xQKq4?=>d*+eaf9!ee{&%MO^F{g-8qdw@ z+lMaRhqvGRNnbn-=ZBurrm!t-z%1F{P0sXIKra4}u?3KzkOs{I8>7aPC|O z7~kzS-_zi|9vA1SQDcU|b5#M+?f*{Jc(i+RVl&B1^7o#t|ulO=0K|Liz6ph}1Oxtab%wtbNXTp#66SeK*f`7a9^HkiG?b-c={+f3Ea)UUEz*o1_HE3jPE-Ep4X})~nme z)-&h*70tkl%5J|Mo)&)@+N7Au+@AjU$2c1*_p3Wf zy4yY_tvs9ca`;k{^Fg(EaDoD~X#m~2eEfYC?>+MaFvWg$S-3EWGD{Z9+T5I)DKT98 zNQCz;dc^&t?@^n?_ILkFrFNAyaaCH1c=XA6f(soze*0}-UjV$*(G)F^C1OZO4 z`Ra@zqpD!xY~YHA56asjfiOAv$@^*adA!S|`D)&LcYlB40JGbj>i$z&4=_k8Tw_+D zI}1O3is>Q=beoXzQGW0u z2Z2)icpd?9%3*;QlaOkth$46C^DXbQaf~`42j(6~%s<~q#VWF~6?GRmabm>O_w;zs_Eelm^>Od738a_4&dg@5>{qHUU5z#K} zQ$cOlt+>W_HJKj&mOA!;Qehz0=*Rx`MdWQYVZs8BrUp2kxP z&gpHM`0rZ;OEkUH=!+rGru(dPg_jk|Bik%XzHuoUa~ed$d!9JDdhPvuEj3~yh(EyX zs})p%UpWHkVECNpNc3bH4{&5kq@iFX7A^@=MJWy@*hQPOpD$#d4de%7r1NVS;u{mr z$TH=*2_cBLVGNk%#ai!UqJ9lbILqknje6_l^v9AX z5QJ7WTGzT^LljrYOV+1s$kV`hj>5eAIf3S?@O^Q<+LFiluIMj}bZl5PmsSmBHi@( z!X2KF)B7YoquN)ARl)PJ{zw4wA0WR9^k>X<$g~ZFfpS%Sk%^mFr*1vsM zLn0u554r=^irHo5Te`epZ9t&wC@JLdqDwg~cw&H68=87JfaHGUT#8~ zmxjVfqU|r#6ouy!Mx46dk^M4vOs+GvU-aI$gX)T*Y!!;!sQgBVx0pBdWzC+8JQQRW zbi~JIuAjEvoxIibCzF`!{wqI7Q*avV!L75%O{Fs3Nq_lxcGM;-T?2Pz@W)J>SqM?P zNZi+0+oof&+v!XC$@iBhr$kT00?Pp9_v)n*K7<1Tj^Uv{(N9068^r41kWLNT0B|1- z{@-%G&qpHhC}?l_pa+1+o4l+8YRj#Eg{Ch`g#Yk&lv;6ziw!ZIz%I`EMFa|C%Rq#; z9~>kPmHV;9So9d>J9+0BU=rzm*@2t`HwfL|f2H=3{ax;bCH3Q3XjH5YN_^Oy2F{)s z@iZEv0&rU+yeKY)^fx8+ePKjVVx_w!C>MeG*>}!7YjaMrht|L#Dk)#Tv1L+u5yY(Q z8B)m~ANAf+BK(0(GUeY!sVUv{aQd>6@5Y|;~GCufx%k#z<8F-L!Y1XVW@8FqNz~(ym(ao=Oi|9;vCW4K3(Ld&@XRhl9gXaPtP^=xhuF{@8;v42|u1QzrCgXIav+v)A$d0S4SQ|-#dM2 z<~@BeHYmr^JM`Boc#gfGKp9~_pzF?1-g;;D$dw*^nHy!#lF@%EYiV92B6S5Q_WBjk z8l9^%ZRZ#dmrUo-yH<0DcU>wqwqk$M`wQz}edqY-Tn*nUJXkdeB1|n78G9b%bS#@8 zPSTFdYvMwwjOSlHg;75ciSj6t0{3x^>uk`T{r(Kb7w9!p9V~~ee(CX>IW$WpPmc;g z5wfWvIv|vPBVAAR?c@VM$$^8tv}RJF)^uPEcrCj5b_OMR5K{S!Xy~5=#F6jb2oay& zNhC;^n9!{*v)9s36qq;)FzM8DiTu<`T<|fCZ(u5Q?B<;A`U zg2|%7s+QJODs@6T`0>`EeB_rno93}m)KLXF3%IK<&9N_WfMDp+lB;6$)$tAA<`jY$mzbK?;|dtZYA!>ydhH%~xV(heg( z3N>D+ZNwz9VdBjbfa3f%$(r$85-5S;d(`6$PQ$C+M~Z9rB5=m+=N8TcwO^W@#eeij zC_W_GudFmiemQfgtu~(xP~X+bQ`=}*D4#ivkhjR>N2w`8@`k?zwGpyM^REZ@(}cle zC9q0j`>j5%RClf*1&x7_&I!aeC6@)ojui&`D{nJVGUbRR_{n`-TI#Mz6cmu256OqO z)9u+Kt{K-$=o-vL#endYrdb{Zza?@-kh)xg)W>GZvUnmtf(e_Ew<}nWCJmXdkDMoW zS1iwr{=Kq`35h%BCzcsGAU`}60vLRC7_}fYkNP5A-~LhNFV7v0sk6mXtNj3ITZrH6 zA^(xmrK~5bDOfQK$`p65&S&dLobMM99Dn23rW>^L4v9PFXg@fL0g+H_ebtFM(HM%P zjUk&=M6rQu!*|Dw8oPAP#FbuTnQ3xEZozk?cVX4N7%SQxw9D2XSAjd?S_VgK6NfjK zfW{!TWrY6E3;3JZ=KmCSA6`u*dmO-BL3(?DfK-Vzp z1_42(6N>ZzQUzqCnt*gE#zGT<6s3xkfJFMfi>tf)&e?O`{Ri&3b7t<$`OVDdORmQ< zVn~8RfgjjkX&OR-bf#Agkt32RAwKP01@$tC^M*jZ40)m1D89woHx3AiT~9OY9t>qT zNVaCZHeM>YYumqH2rYUh+kS42^yp2H0}q*5?C^=|ooOo|pG`PuX0#-O9#BA;@nYPc zpFUD~WPK0}{^;P4o_k`bf>{J1ahs58oYCUt2q3f}vy9Kx)6yNGJc4ef&rfkF$xl1v zf>OlT+S~OKLgo(o`5{#omfMP*um|T`$14KEbg&0Y?$cyXoq6D2A#EZYYQ{t0sOGNV zBaZIReLt*ptqR@yz02#puoJ$y_nGLJik67~dhXYG)NRAAJCV=)6F}%9=McsbU`Hg@ zQ3&Til0-Sl0}~Q!Z>vo=CHie8ytPs9Z9&y=0zZ!AAGMc~IQT@A{TuY=Y{G(P z8~FbFG#7;gH>*fYw}u0ofC}@*zNx4-D`-nknWi8fH>{Qy4NDg3tdybEjxj-RM^T z{L4tpEAwTEDyG)C+lhAq`z&< z)Ru`J0le!(qO^U@hW-Xeq+4*^v`7W0!G-^eMeUV?2)m}Pl1rf7HQ-(W0t$2qVIC$R zl*7sRKk1!Q(QQllW7h&if)R5_dc)wz;{W73wzN^vXKRG7)?z$VFv}p$bkmb+7aJ|( zsHJ#Z@)U3ur#uu3QX!E@uSU?Z;YsN4K~MX)LN551rJza#@??g5%3cF?xA`@(lSKxn z-Af!iS$3CMd8$xdH?wvV$UR{qqe>%rfyK`L$#2-;99QefuWHNU0E}*9WcdpUj zMW@P(5*G|g;5_d+6oyOF=ly@|7H20z!oopztM%%?Bz!GN{v2<|u`LiW)svS^>~5p| z#&lkhO}B1-$__?3BnrkHIcjraN6FblIbtwkY&9fH$tgdMpci?IT5ey)HW~H=GJ8ie( zCf`KUFuDAYR3JQmN-AG=-b4*iYQFBmDtj(&4BU+e`NQ6-8AD=9^G9)OoM@YeWeZpO zwpd=zF7FwelRn@X3=;PTboq;Vfy2Vgo`KTpy>c(fVwCp>E{&=KR9+i{DoeKhec}?; zp8|;BB`7gXQ(5n06KcBtz&bGUw4X*5l}8&d|G0&JE%>pM0mB|vV{VK>J3`4@mDF@X zw}{UtY`sjdRGMm19q1KtIvunZl#vin^Mv5cp?W;9(2!0Sj(lNWxtn#t+j_#Xw9D3B zT7j}xKhU?lx{5!RuX(5cK`7X%Mc!_261YPI6q{x&vsd~GNo7JhN*$xj+V*YZ_AKP! zmw);twf7(@>Na^gos^pLKFgHx;dn^hI7qA3|0=uWm>M;g95D zQiTvSli>4Oe1|QFL3+pB=U)JmJ=)@2s`1SthJ1u7Ez48YML9c^ZA*Z`Qq@AC;JjYn zXpEcb+Te$bWr6KO&15)Qa<-pQut2j(64HpG$NlM-L~h;({1Q>Izxk36b#_1alHC8p zmn5tG#g}CNlP?j}ot=zhV{A^Vgk`U)W4s-@dHS>>(Mb8|>d=a9rOf+tM$`IBdkpjA zi0}v#S3&E=vB|w&MlUD4er5-~V;C?}w(qNYmUCRa9U9ZM?eZX1__7AV4b2@0Tsbfv zd=6*XIqySpEic<-OP4)ZFD^e%$z`=tl+N!4i$?pPe!3s6MVjhbQ6qKx0dzeEMr&A7 zF~wEEsYxyN3zXPFo#diooj#ML#d4(vGkgic7055GP~AvT`(OBjy#R7+J(H_kSLIoM zu0;fY%n`#nKp5S`dA94CiD9f0ufG;esoQQi6@0S7$m|Nx_;`;N`%o@wujAAquphov z3ew8G9nDII{AF+th29zlj#0wq*qR>eU$9PRz*4LkVCTe zj89TCp6)FEuBl8#nn4nKy18q!0_O(4&HbjJ!#n~RX{@msOMmT0JN*;C;5JH{1N4h! ztDpLXnvR#(vYmTaAIQLS1KWQqmZXGAKdkG#MRcb^inX8S;JClQW@b)ql#+Rc>XYUA zc$7VK$OS}4*`MympMvCcif1~k#T&hKT0D-rnN1BcAElQF{Uy%BG+Pe&Ft8Ab!F_`H z?o?IDZl{yDzYM;Z<|D{V45cUjE@gy2GtbKzU$^2&Vt;Jqbg9TE%wU15o>JQVyrL$) z8mzpsny*V?zAUl4?Qkqw_-H);q$(y0#<3rWQ2YJGKfnS0;S&zvAA*unxfhFU=vokS zE$`gVo*FdP_B#U!8wq{rVFKM`Fk{mEHbNMhl)M4SSDL);ne1y- zDJ?q;wBI1fL+;Z7j(}_Qn4(ad&Q035)-NEf?n>pT$WNr2x1oHn%McM{G?FkC53kqS zKg>YMFpuIXz})g%tSUP;BQAB{;`l~PTa1cM#5?T{3)`x)k}w>Ef;VM-aQ3%Gd`iaE z+F4ck9mNK4gViaz(rq)U=j&5rZxiH$jvDX=f*U*%vz#y^ZJ2b4M5hjYob`0LiZe9J z8!IHq@AR8-*4fW5S3(2EJkf#%oM9b7jJutYJ<0;SqqBOv1+b>D()z3j`uQqI`K{0< ztr^t7bmpC6pNC;Yuy**cUte$;%6Cw{f6Ghg_DYNOxSL7d?`@vHTnj-*F{k?EGGjnZ zXNmse)`ah$6RpaD&G^R1QJv|20wTEl1QE`hR_o5`eB{G^)?5BFS`R;gY*2fXye=<@ zj|**PRsH-7@xqT${9 zR};a);KW48)6r=ANg_n={v;9XI5TX=b?+fe+IWM!7sI_ zHdYt;EU)_7D$~K2OuMJuYS(yRHTVH?4%fuq-e_S>e^LFVmNQ6Gu{R&5`_0GloZF?x n6So~4X{yj`K#d0`H2VkbT}gP^h*WgJDc~{GGlkaZ{2KLN5SnP=YWhQc4LjG$=?bpoEB&!qD9y4Bagt7<5aBv^31n-QA6Z#L%5* zkB?uU=lh=D`<`?DIM;Qq-#LG9!E9!)z1F(xbARr8?GPnJ86tw)1ZZezM9*ZOD5Ifa zRHLC`n&V*rSCFG#Bfu~8x5_e-Xa&7@)_@OKCK3t~XlUOfKo@%0z-N40+1GE;(1@E* zKj>{X*@kFn^9s+NNT@h#Z(b68zN7B38XnryB|5RGc{DMTSjI7NTeJL7K!aPCa796* zT$pg%IGC{5AUFIDj)Y~NDXD}Xdccy-C^t!cZ7mRwG_ z;bCTsgO)i3$9iDv{kM{2itd@52~e&OBpyQuRy=gVuB!B2E~k{RFXfVcx>4bcv~K)o zqPtPG2pD>s=1c?3KXM7ZN1Kr&nD1_`S~~Xb?GMB=?@z+M^fVrd0Ct#2RGMzO*j*)n&uSbI0Bh3I=4nB9! z90Ejr*W1_(jQ31rH%bvugb=j&Oej6$VY9jrAZJDlQ#HZ6?3vhUz_p}5*P?+Dhskx; zLcW9IkeKP8h63I$?`gFtL1K)VrAZ8Vvt)oC0b|7aoFkn&}Kh~5l;H!2wq-Y?=@syjt$_QaSe?&)|SZ`D-}j!{S0 ziqTwV$fdcSG>1IS;>l05j&3@hP&pHPn4Ybh0OWv>jx%1z zmVfzT-1_*7xCL*A4<+Lqgb#tv$iYxMI5h`32utJv_hb%LrPa(ZQ#%;p60aUs?{%9- zbXeWw-t_IXB!Q<|Xx^E#h{k_?x8HJTQ?lbG8eIHhN%if^Ub?Mt#9HK|R8{q4*UAY&rpZ1CBLbZXiN!bd z0NyWL;7Y06c8?FCUg+Py`Ft{<+#AL~)2!~AFoiwTrY*{^H3c%1R(uxM`R#*l+}2go z&{cT9{WoX(Jg?l>Uw3XNCEXiZRf(%owzGFmc%$w?U3Spuu%*{mO!e*jAq~ksZ3XiP ztbw4|ZEn1jCSD1$96@{>AIfogALAryVp2>f?pW-pu9W0Duwz}2u%!|2jN3jeyfEoe z%7_Dl2Gi!YgX{bH&u3?zkjK?!;5^ydpvz~kF@=+!rz#K5d97_W7gg(gI{iGP^!eSZ z2z97YOJ1zQD%SHa=y#@89k)g;&=d@eaN@p256wlE((Ojg&cYTJ?jLF<6-HbRtl3wo zJQPUe?}}`$KLM%P_lgJE+g*4^MVQ@t{(RlO%Zpe+nNIEC&LH&m$PdQOQ>pc=w%T1^ zw!*y(afvdc-S?WG-oVlx8m!-o`tIn$z~YF!69+SA#YS`*5{D(cpY9Jd;QF-j|9_<&~wff^#O^MZDK?&B(B`OH{>>68MG$jNZg;&V&xjxJ>RzYxposR zZbsX{&icl&aQi7XN{i;H4&I)IG)Y|wZ%hT|=$tn)iWNdN-e3++m{_MIzReVToR(id zk$B69q8tQz%-ZQfq+;x(DEPYGhPB$&v5@fn&(i>GRl?6%w1+}0{b=j7pBJ4AdnHtJ ztfdWYmziBWXH>jGX!S;Y&s!LY0U?gU8nC+Jbe(1po7_&4EREm;%s03JEM@LtJCc}G z6=}_wuAp#%jeo`b@ylquvgpLL5~) zq-mlEn)LN#IhS>YGOA)=X{JACb3J7lrj=sj+msn2P)E z@iK50`>esn*y?38EP8tlsplztAJ?V@ez3 z!FTjqLTT%CnVk1Dk$Zl~4quXWts%@I2mkoac?L?2?}PreT?P|^FEGceq;%fhY|Bkq zESQWgB>^0uBwSZzfk+sSafUR`St}R0voD7sW| zXdhftRr{fky0l%Rc07W#3G$#=pLk)2wj7jo-Vl~bz*Lr{Z6NpNse2}i-li|FRw@oU z{;f|hgIp$wt5O6-e}r$A#kRzohqz5ktrwxo)5IHq<*^gfNtKECrg-4<{WUh-2(6Yn zF)Eshb?%5I>Tz$XwUK*lY@ECInu|c8d9hLlX2;ZV!O89xH0|6JP_J3GjwraXuTPdcI8$Q$3_t_3@B7SFjuDrI<%*?%YQ&%8Cuz&id|vy3DA?(GmQG#8PuH!u`QO)ARWKV_%Kyt7HPkvSG%J~I z%13(p%RfxKUVrq)S-N6%x}yDl_j#&$4%3mH#o$AD3OP6|qM3&;l(i;M=7f8yQ{aXK8=1FM~QgVmyV+IfstgOMC*Et68#PRm=W+34^{QeOpQ7fDwW{3BRcf9yDLb!JBiJNO0uOpxgi!k%&({m-zBcsV zfBzU2(-RE9o9SJdL?p|0#aEMH8P_nMn_*OFz$(pRB*0w{I8f^q$%5cVn z%8abyJzdVE;d>9&Fl=#e{0gm5R0LdRmqNYONlY`cO|m=7N5=8^EmZry0*U5J zDa9Qq%^ z^uAM+_*2KNk9O3S)IBttyBXIZYB>v5KVC*;7y%*kd%si+jq@yB8tF76lYla>2(5BVG|>7mhI` zAMm8yjuYD8zqi84Y2D7>mh{>00IT<@c{rb zzX3)KAW()I;w1n?%}D+OXa@l->-zt0{NJ-VHAzUxBcJaEbC1cMN6Z z^{`J?GSj+7Sp zQ8Q;uWsX$Tt`)Bt{qg=t_LCVnL#JWQxc?#L!VHNBjXj#DV*4}i^*fTiZmF*UEl_>| z#EwCT?3m;*4c1bEHKt?A7wNucmOy7r-^kNn$%z>UHI2MlI*?!)hC};3(9+=eqJshR zr)Y5%)PY<4*>2)Vm+5yHpIYkU%GqyXFi8A* zW_*|(7PX-E)#&U99TnWv=Bg3*3Ll?W<4M-*nTJDw2fkl(>!reyEw0~ma<<*7Z{+?> z({eM|!eQYX;oEp}UbkIIH7 zfTZya4&M|X98DKP7rT_BXcV1Sw%R+n!f0okCoa&ZLphU=TQ~aVISZpj-D`8abl#}W z?(Em}W?0(j%=NLplNxZ_T@NvmDj%1j&e~fjPY?=tCNr>BPJUC;HiC**qxnrGmKBY| zLZB2}Jh~THr!Gd=z3lKq0?s-|opyp|d36Nxo}2^WpQP0)3TkVYk4d)jAsnZ}?_Np@I{-(d@# zB&(95^v2bjQrF=qr}aE_VssLl3R}b+{Yre!$u=L;*x`HNDa? zaAZwMQX)}iJ6a`Bo(}uWxOT7CB0di~j&Rw}i4X%9W9(-|dGKzG=BGnV`L5_vd9v$- z7OuYGod;!!a;scEHzRdkEsg00WsJCGlLG$;D^~RmOrptG%MW#d6s`*%4#%4ekS03=-PCYD3lV>R z$vawxlgOnZgEJ(dgdHa};mvrhDWSLXaf^wpKR<_d2aylE0ed zwwx$7+F$9hxYlJf#9Pk@wK-p$EVGCiFGB+|R1c)@z91v^Y15GLz$xa-a&HIP$5&{b zKQFQ?X~!8l(+Pd6dp@8Q3RBe^N7qn!Sh5{8o8H?>{IFaU%jum#=uAz0*r*~wm6E77-6CuX*nnL>ZU!b+itka-Y; z(P{Wo>LDzH8`d!Mh#>?s-ii)BzxW2XJ622bBcbF~AQ5$`K_%ncz5u%O*X?xU{;I60 zHI0LCN^$qhiv1qEkh2wIAEFv`lC*u*#B$zuN`3x8bi*&}<4HX5mYj*x%c1>HuwoAU zS@B z?SLf>SVKIf<+2l-3Xx6TjTP`DT**QVMbe?drSTV?a4*h@(Sno=7%%t2zk^hJ10xyH zdjJ$QNLI?=&5M_|uaJgw<5zm2GB36$x~623Z9oW5T|6T<@aZog(ZhL$7hVL?xA+1> zk&!4`(2Qe}&h)R)3!r|stw7qhN)QPWfzo990;p21u(JwNfJ55v==4SdByHwp_ce!GiWoqPH zLf~XMhrU>A;-$o`l2`^54yyh~MISUr6;lzNpA-^9JvEzt&a(+S+(8ovBdD)V&WuB7 zj_=+o!#j=0>BSFywP5bXz`MQ~H{$c+vrH0Sug_9t^dwF&Bh?>(*iivetW-wtYnCJT zK4jY_(`tL#!HwRxQ6q!Cgj=wpicUT`;#e0xJv-|kNuAxwL1_M&E~%8Rtss9OiIiT2 zd5QLM2C>h~dLLO4=t%1ki^OWe<+<=nlU8Bs9Qheu@sIew)XQSxr*83W1pqx-Z2IEM z3G@bhv6;7jO!~E^%ldvH?}tx)eX$zBM7fwHUZ2HPqTf^nWX6h^@@EH5gtX>9W7LCt zyF4n*stz1+Yr>5?elwTMbdH|%f=vaiRLRo7a6%C|{7Y>I$-*SEeeMs_18@qv2IQGX zFcl!4J=B7@m6vp@#Z$%hY1R;W>f)D%&4%#Ly>GhgC$Q&X1}Z7xJG1K(*k!mi$?Vao;&=j=p(^)yp5z98)L7@PaFc3jF!UIUVIe| zqPH-rm_?M(oueBWGr$_CuxoOzSnh^k$6LiiE7$ndJ#DV*q^p1Q(EJzpRcw3HcU?V} zG=V;}J%&4Mg|#6W4S4R$34g;HF0nMz+mD~biZAT6MHGY5Iv>&vF)ZPHLHfSRUB@7B zBlDF>gUa4Vao~+6Vmnh&g?at&7dBVDl16wwFHkW6I%|o*T4cYxC;=6R zXqn~O+vC}2Tam>^Aa13pPx$q2(cSD4QwUjAH9WvmJ&(BtZjh% zUQL1aQ#PW80YICp@D%nSqi?x4DLP6@ zXk6$;7?YG58{W4Vq2hg0JSR?Z@_u_mQH`Homuzx7Bf{K$x(*_YR3hA%MiwMHTj zFbdJgb>$_j@}QL`wJAZ<^$0VgIYK0c8Cxj`1@-|FGjmeN-E!(VpkEdXWTlS%0o3oy zK~am&DINWUiapQEr@AU10-yjF*g-6E-8;Zo>dvS6=aOmwB3`tjd;P^A_*d2r7YEoS zO(U?D)`qvg3!?>1H0B4X?;3dkPU3k)|JJseNBzO%RC=$6l>hbM?)Tl2!DFR3b_Kf4 zmrT>tscQQ6tG!LrLYt2ss;Wq5@MuzbWos^vOtL&9{9gs)_tHF=1z}mrqTGhXLM6q{ z?u4`qgAf(A%x``kGn#IJ?_=2B4mGg}cS7*2wKa!SOs5b>3krv(r z_Cx$v4ih_)a6+|yOxkcC+msQ4nXsZ4IH#v}o4)()AA@GSP{WeWL8bxKE(HNN1@O2i z#fM0^VRYB?RgNxL&|PwLC)js|5g|QfGGCT9DojeCNpUh?yQ1tD)~>dC<&V(b zQM7G;;wc3^Gm#)sp0#ZvQm;F{iX;h+8$}o$1IUjONddsT-!)7iebmL6rp505DZ})k za5cf0W;z+o#ZwvQQBFX>L_lx1kDVQUs!FWrkL{ATb@n70(F37zvu$7Hs>ikNdsXT< zarQ$pydM^t6~puZGz{#HRy#p=g4$6}o@T}S-|67LaC)J~K}Fs_aXRT>a`!ozsRelU zq*c(mdifKBAeT*bsRek`xB7+zP**j((Qmnr^bIX1<{}ssqSsp~>DBq-Yt|otZ}#GU z48wnybEn?G=P~A#+Js0ynmQcUS37PLAoe;{D?AwtL3hdDrS1F$e1GrAR2!tS5=hON zV;aFA4xj_J1xZJv~SxB_|<1g3>W2L&idi;^4O{~Y@L>#Hc@CO!m4xG`3! z1Bc}c5XC@YuY)jnCs}nV2>3eL0Rr%MRT>394RtZ{%=&8^zPv4ciDvA_1eA{d9_Ed& z0G2HdgG24F5DU;!zWcb)2SH0u@2^DEL8w+a*q^mrC-7ZqYI!5tTS(hk48Q+H^iU#6 z_?UACP|2L6uab5H!bf8Cpv3`)6j7j$m?jHtsOWz28BgqlmEj+xW8O0x0cJb4p&oL0M!GH~GE~pmf zcc4;W3@;RBmZB-j;W#;^nQF5tqRu;JFAyD7!&-BH$4Rf`@NVqouVGW88RodU!LLmx?l4Rec+vlL zM^WyHYLf`5|AX6qFxfLYIQ_yXsUBFe;o&@)3YxUf1*>GfYy7T5>LxolYx1!ok9B+@~u zzeVS~=}UZ#5#~!5<_AM}<94DXHD#GrWt#)-yremgzhDsK!bM_48n|c_k`{QkjAA*z z)bYAYVzas~zBm50@ms9hlL}kBuX6#YK7!vF4xqq|r*cu83>g!D7W@@zDq{+k?fM1# z{_3>of8P&@jK=)eUB34=2}`rTIT|xqn%k<$d2+UC zThRu{#EhohB^ZWA<8<+~o$d+q&7tLnS76QDQ`EK)+)!3 z+fd5dR~=1SY*b=)$XyfWvTAeSNq}H+o-*@fxOqZ(2*G5jEAxmxX@c~47a)l#LQK5 z8e;2bvCkfTU=sR!g5{mRLIeK3?5NNK%uDiBj0G_OxhdZdTO$rky7!9nvudGKm90aO z=JF{l%>r#I+N9MLE`-Z07ZvxijF$dFeJ{vRaj$PlS~0p?@jaoTN=R=nt=L=p>Yq~q z-Sw|rhDPkHT@5SPYQ4Uw++U(i89iMt`GM(pE+)HQwNfTupQy)YlWJ@T`R~)NMGaeHW7dlg)@dnTZ2M@qlPq$_(ftA#D5QT`t57bS$X_scbdBq%)I@9BXJU|x?(6p zKTN`1{E=AotHL}BaPJC2lbY=szdQKGeOlyDRT9(y+W^d1xAR%uT}E;5*rf&}EHA*8 zY9Tp^8;kY>Z~Y6hF`7dY;y#~(BBmPyQQ`L8Zyb)QX73|0^2AN&CEFqO&tkuH$uYa> z8eUZ1-g&4VFFNk`V1%3W$t{fUAQR9IIDq9+?!pzua977Ti*6(iEp!qh>q#2L31isa z#)dV_v6z7trvd;|`2YhN10%5j-J5{aGnu~dz7>lzCUgOq1krw$)~hwz$J#mF3M3n{ zI(G`U4q{9_to3*19Ud8PH)0@tKW$6E`;VIIZuxv1)A73eVk4b*cJlVOa8UzN)o^47Z^?d?ADnU1sH4aRcr zgE+vpKEDhKXws)LOqI%fxJ3fZvjJmB(a5|wm7-y)Q;v59nj|+=rsjCb^8avGM>baMXQiO=RJG*Y-!_k<#kZO>_YnKM_27) z9(71k64jA4w;?P-K4plVEpy1=a{bL*1t=*=5YeLMhz zdf=Cqfo$A=Pz%oNbwpCf3PLB#Kro4!U{qUZDV`}%QfPRpiA#lTK@-U}guGy4i^YM) zMjjc?ig9PsGy!TVU^9z2B9WF1OjWEtDd#MJ!eJp$(BGapzYGM~A#%*aWC)RVA^}kK zRwsL*mg5FkvYehLjf#M?#^N8$yvL?*DBu7L?D3!R;GI$nSOP4<$8Hg@=cWmRmoB+l zn)eZb-1Zx^zbim5fXXtP9Zgd_zXharZ7US!uHfEOOGai~6fB=-o~r)$SAh=4j5r{g zcwU~BS&W$v*-jY6II?m9?5bLtcsc?grvFi%R={DdkH3~<;;o9I^>wi1 zQJ)Myg#-bp(~P6wtn&{A!I{tB(ACgCPgL&bGH5EX@OS>M;yqiu!o}U1scC!gfCcqX z3`?JKP!YB(EpL0!%leBk*kyDXakczj{vTlS=Dz?YFCw6LGv2nJ?tkZ#HemyTcnR9k zi_dIPgG=78v4ZxZp3^enFw6OT3`CzueRsi7Mx5XuJdXKjZo+dF8WBNzwerD0!ItpX zJiPI}Df-Lnff@|`8iwm^bVFU2@om>Y7EtCRrlu<8-4j`xm|ieGE@PduDR_|NKS4L4 zdK2el^El7RJzp_|*7tpgETr5R$F?HQ`8N5)1*lvpV~0t;y@Sa&B@drhwxSU&cVq(W zxD2RH3jJ&(GMU%-rVLpUed|=73pbf-AFg_SdSI%S540(BPn4RGqiUpO-?bN(E4Dzd zePY+%Rd^VNpo-UKVEubD__d8PCZy*B?&Ejr?wk2T(M*-hqghsYd+dM}=Kk_Kkz5gm z`At0iVs?;ud>-7d>`{&5t1b1^cMAyI%f1+~($G>0}tFW zAzf*(1z+5US6o;_O+uEqJDm82Y30!RqgS}+)fGpCG@Pm{SwX5HwfCN`l|GC_&dv(j zW7IbAfklEqQTCpeHcqRfqPyhPP0BMH4^ldaEVp}S1=V76Z$=zEH~UDsI30*K2?3%R zQD`N38o59QG&s}|Um%X6%X>~-y!*|_5ph7fCLva~0XQeS0#!Y``=G+$7cYns)nlL9 zAM?y(LJ#f<2eGKkiJt~s3=c_pXeyLP+ui~CYq>LcY9JjRv7f9$WzHR7CSw{6*LjQADjzt-}H z$?GX5o){Qfetut!nMB#R_&8i1p;VAKwB8$*^i4%E!mz>w{+)jN_5JtfQs9lLfO@62 zfmf{COX|;GMI0Fm!Ow{mql~}GSf@i}AA?*Y_X4S{E6-|CAOx^)DG z@j?2>_Obn*5@KjglgvKTA-y4RhCoP|8!?pEAu5!aY&q;R?Zs8>V1Jvtt`?eoNpEyK z|8hHDsU#poX80lgWWW;nD!;-g#BvtlGSZd;cnwrH*86t7VO#Pz}#BR9Fv_lt*l(p`xgBeh) zz;?Xn3rl+!sV)u-#XtlUWNM+d1Ec8D4R3H6yWK}mu>q@pJplf{Tmv~e|nA?-eJ!7PZ0Kx(<=WDEd3WpdH%II zz_FbTL8#ln#`bAX1>IGYrXpggd{u3FS4_+rF zR13|j;Rwz352lLC3w7($pgH$8L5SWPn z|8Qd>w_poj#jeQ*o{)g=9ov_tPme?9HqYKo&@dQ^{=xAq zO^}QAsfax1u@d&#%O;8nc{dtD6SWIZ3Co5fa0{JbD6`&6gro$4>{z4O1eR#J+q(MP zE=`HBWV`zxn(##+)VV|W%CiOjzR>wtOjgWiOLzPz(Vnm_5>B>*D=>34CsMeRc+;)# zg(11+Nx_ftkpFHLdCqOT?6apHBMmzw=2%THMz=jZFJ%ZejR{^C0%>6sX<)@pp1yGGtwsB*fEjw}{soihr-I8G^VRf9E7$PjI1$Fx_DAg)= zM8pTkN@x08G9{=pOcBdRvt@>$L#OY$5z{ChDa8|l3BB`koXVUnm!D}CUG~Ch=|nDi z?zP3w|AVas=5YvTpS?OJ+p`fZpz$Lv7Z2n?9G9ld?hlDwJ-0h<7t`LkO3CrWb`JOf zY(fpi_Q^Sg&3OSZm)D8Vq9<0`xJF=KVW2XR#6^HYd;e-bCf5hg?j-?V6~;fsyAZtA zZGk7Nrl~|i{57*KOAp)Xj%MkOJr3!v$HcDb97z^&JJ}!KOQ z6Kf$a4V+%sj$P`F^e?z;4=)luU&JQq%{f?%?_n-sPH0nay{{H<$7uV+wPb0xmu{l_ zCkE}|nA&%np4o|!Z9Wk9$)5RJoN1M71AX#BZ!g8f?%v+A<8E!+zL+MH?$h?A3jp|{ zR(N5B<%WN1bM02ezT3Mk_wZG_X`s`!k~OLvHFLegV$f1sco8Ayz69pcUP$`X%8qcn zBg_rgWZa*`4k==jlzYZm3~7PL6K2yRt(GUTSt8-5uI%0Ifvv^uSC@_BO3QLRA~Eyb zO%Uf4+34<<7$fxgUw=baCG7|pTauZhNM^eHJ?a!a%6@hJl-T4grrGH)M?w}<`Uy17WEf-aoi9~I*@)0jb{VciB` zv=NAGkrR=R|47t?hw(Sq=O~boV^7UqGTkGXL}!A9ogmgb*XBeCy^Al_941IP&&S!PLPgq z`tk%nigQ$Aoiv-H=qh~@!g>Lx$WU-T7q$*m7oP;uIObfS0>e=TVqlzC#bpWEV(wh8 z%*E8KH;;YqM1NyIT9iUUwKn{?cNQaNQroBA+6o=0A4VO3aw{z&*iT1{ymk7}#=p|# z`(;Py5_7=!1e^qRIo^MI{p0Zy55s`Zf;!OP zz+pvB!h$g8Ro`{ykMT1S#SR(*&iw2C&%Iu|URPe7tam;rG_yZ0yStwOn5tP6wCEVa z7uGsH$3XwNkw06 z?`HZD^|`KENHuV>!Kz2Gw*uFDsl>h6E9+gOuoyLvh0D^qv5SciChco%WV zYD{~66e{F(uzme9OcET{SYaqd^`5#`4_2Xp*lyq)}(oFW_IMKPj@RF|GU$k&b@j%KXi<~5Zuj{;`6K(=6 ziR`ln3TvO*FTySHn!Ybv7(0dHG*AtUZ$~@%WrycUHX(gy?^Fhr>`u)|>9UuEh-UNL zQN*6^TkIYy0*$03l?MJw7|Nx#ecyfK*H?b16&FlJ*hj2=bC_XNTGSEmju5FwI?}hs zgS1S5^f`_1A^s$`SRJLR-Ykofo{3E_^VNLdAC85 zKfX7{Zv7as*!rD9P~_BRb~pdpWYfhNJ0wWr3h>D`d1r##7tsf-saygLf#Vlvbv$rQ zg7sSO7X0fjD{yz(rJQ>Ov*)u%iQyZacYnf3s@=I}LoxeLPWh3(+N$wfpbQGc)}f8* zdz4;vA$_sFvXU&^AlwmfW!N0Cr&WANGLB8bY}9H^1&nrayYTJoN^DP!KBVDdz9-l< zMRCX(PS2Fy>$m^Gk7d*c#^CXnL!+)OUJTda&sqqq8xb&@^vk`JqsKR^;M^fJMNV_xpyA5OY#IB zDGGQV07)?wUJt$#ba!c4X;Vk+;v3zT9zo)t1lHBA`28S>xV&)t>Umo8YBezV;*?$V zp|utUL24{j0E?RC6@fsTV)qvC!T{jhpI@N8PVXSpTT2lj#$dM`8y zqP9+p!-K6)hONZ|q-$^|^isViLg>bF1qFj_r3&k+-Zu;UlpY;oT6|3Z?G;1rmrdVC zEXu7RKRu1Z_vbwgHMLpXZcYXq0DY<*MWDK~_%w>b^TBsxbT@}~0^67_sOM7i{0@Ll z-=`a7wQR(g3A#;V9{50*y64}G%QvNr>a{?*9~8JNsPSsC2vkQL4Nw%SW;GlWbqWP@ z6yb;Jd{A8^lP-N3Nutd>N_>9X0p`JR-A?hlv%@b75d!E)W9cj^PN2n@*17P8SKH@(=ZPrJ zDTIBACSigBi!uLyNDC02BOBZ99ZB1oyS3}3mpYbSV|5;5hhXTn@P_-)&L9!z48nZB z{MsUcBd}+Is@wcOWCY^~`~7mSD&&z))nzZmKo-L}XK}?vD@P&parjn#sR5-$2&E+_JkE&Ocg?d2Lm@&WvO^ zn5?oFxCb~AYC^{K?eS6O{kxSxH~fRJ!u z)nfedMXMX|j*$?OKh5HX;{js@p2(@Irm5M3l(|xuH4Z_~o1V^VEFf#9UpMiY^gqj1`XJ+_m+Iv&yK7LSkORAis=Yk z0TM8CGp=;nBY^(}s!d&u7Gia>xH#ntR2BlXp+x&RZeK5B*BDR>iFvJEmVj;GV@n??|MJS}h43@gnA&y67{pd9 z$l86%rUrOVj!Uj1rtA)>;Pq5OVb%2baE!J4S~RF)Tr^NveLCc6jk(#+>6u2VCeBbA~{JO=ih7iaF1O zjz6y5YnT9GtjSo6#2-$8k&p2>&MMt1uUpE$KQ3Bqi(XpWvDLB1|hjMD~ zcw0IT$RxjZLn<&|Cy7};FbhIz$H#;{)Yl@C&w>8#nV`>i}NrjbWO>ocB z^{YvKm(#S7htncD0-^Eqw<6=m1?0^a^UqG!_-*VXmQ#<4&XSD3mAsvcujze>VKI_( zo&sGBrzc4qiJyCF8K;EM#lFPvyG)^uScG1$K)2+;)z=CYG~aAT&T=mlgJTfePS^X}wGIaJdhY^$ z%)A=ko{5MQzJZ4Xnu4(rmo$P+?DST3CDNrDxBD&Gk&SXTb0_O=fAV{^ zxNJti(zfFql@~B$w$GNaNfK)pmtBc!bLgNa^PHTXb1`FeXZ4dLspWN>&gV$usFh>I zT(mVyjEl25xL((|c_qmPGR@ZRWq#v+Qlhs_eA)WJST3idC&G2 z>&;{KZ$r2vsr%Ilh?hB~ds0E8b!W4O+s?2N%o6rFr}{kmzQE_yhnFT%oH~mNXN3Mo zFIIrV#(;Vi)ND>tLn;>zbG5Gl2f8MGsX#4IvsN(&m@MLZIH${;=Jj^PWDtvvSH}jD zBjor>XWQfSje2NkJ+VZ862X}w)?K&_*c{t!HjF;psHz44@S0{|cWa&VG#%}JuQP(} zNmqc#_HRlUoe4;K3?HpBj7${igKawMf81Fne)3H?9RDZ6F7Jm_U*5>JZQK|{!(cbd zg!4eo^I%T|P{m?%^-#LgX#9&tr256cCN`Zb>=3gg*Q@XQjRxJiE5%g<9CP~^%i6Y? zG#Oix1*O{>xoRTbhA_<^d4aW|)!)V3tN9KEULX5RfJAq@g=**>ov*%#%-$#Rq9lpp zLCw}#Qjsa0Gn$W!YV{dohUB?*+~3Mf?h(d zKS4Sn?M$9rt{%1NI=+`@$CradFPZO(?&!C1c$F_0HOL)R!WLEzx7`NT*zj&*DlgzB z64ae(g5^ZEtM$h=vAy_=d3-dlV=m*KH0W;o=69S4FDCgYu@dEt1xVpvTW*V zxjZJ{BToCUHFVZ=Zl-jpLP$tWyiTH_`7o6_@|<{-pq-6j6U`Lde%I_*dawZ)irAc8 z9oEZL&NdFfdA7W-h|lb;5Vf$Dnm*`$`f>ZAUySGCyJIo0547+i3wNmQrmtc3eO>Uy zg-*ehh}#dTO<(F&Ns3w9sr^<>OA(I-zdjvnIzn}dqvO+E6N~p>B3o8Dz4Bl0;Ugtj zsGno5wuKf8b`agB@(nJzy$c-b!`V9v$#a%{ z)T^0FL9!DuhI2=Bvq!=kJ^P%W7NquLZU1tzWS-E932Fou30r=KL5^t4$suAKL4Vw+pY ztgvzJI%!FHlIYp`gqb2EDPh-OpaxX;cFYz30w(+9au(asM$(Bb+d5FS!bMbSOlND9 zq$^VX8YVps=^ld5&uw2{WO^vF5+%}68`-=$_R-O{y)KD?AB+08Z+}tTEEIx{P3PHf zST1&7_d>@FXP}BSk}1n?whO{9Z+7-*o%q;bAOB_6=HSSs?H5;HA+IpR5~322DHU5+ z6*H61>iH1+a|!Q*Mz4B;eL6z2xg-4_gt<9woB5)$y-=j@?GsAc6g)<%^K=X;L4*g! z0@p*>LZ(hM%Z=$=)n=QTb;r5t6Y@I5Fia8wYTLtj%OyKT4Np~b@e$*LEkJHPH*14r zKgTgAtF?}v2;ci4HG>cPZf5{K$gv>K5A^!D|6@Gh=eA^c^^Q$y@NRWG^@G=rDC>Nw zV^s5%H?ePVA(`p4SfvLjT}lGSnZ_aX4Ri?OLkowv+%fITYvULdep(0N*?yS) z_?8{R;xWxEQ|;rBoi4e#MdT?*-}7g@-AZE6)6Gc^jm%`bB4z_^xNdUTN%Nbk2Up9P zHiH%!22#mk?ZjQ5Zfv{J?jLpF-FmcJzt*K=VqWZ-kQ2KVZHu`i7la9=zY1^*m*L=B zAf-liPgz$Ux-3HxO3-t-5|dZeSv2O+tMfk7CsP5{36{|ec;KzGQKA3F-e1O5)wNyV zDBTE%xDja(LAnG9Nhv`<8reuUh{Q%fx+O(GLRyh-5ZHipcSuP|2)OC)|Js&v&K~s0e(B&`) z&UG`LuD%pM%{}Upd4;F(t9VZm76$hj1Jnt#*G|(cdG7HBuK|wvK)| zaiI~iu6L238Vk2w!z5Ui4;QB$c|SQ*hmsTGl8;sI(pVItOQ1h-DjQ?c-wgd#`dO=~ ziuFsA5(;s{czkM1`s+fyhG!8U{0@Bmb021e=d|Ubnzc zmE|`d&U)?>{^FddQmjPn>p%z~+8v3P6(FfSSq3rnCp#Kc)Y3(5nEAE>=Aov@e{t`<&oYMm&rA^-%3;I)%@`pN~>uH4DgA z@QL}sS08svl@fc8<#>yUmoXa--bVI!AVGVkO7;Bsrlj0;Zv(n# zQx&vmM1*?wCNmoX$u)!%V?>aHv$8{eAt;dm)+18C?f*5u`C&15u zKVP^pL~_@giol-{O|BwSs)jTdep9mM+b(jTfrz6D*0^fW@U!hk)VhaGsBi!`R8dj!v7)Amf~g$60ITTvPr4Y!X8p#u#p}9T zj!5%JVCa%N4fy}woiD$=*>dLfw^f=NNmulHu) z?j;lE+o8gk^9Z^`W+KzyE#}(^p5sU8c)8^;|Crux;#lo6;fq(zK*8jdiGK5Khz7H_ zk(u8TaBd8SMp=_2uihYDPim8M=6wa>t7$Bi=Qq*7Z8tSCdXpfz!!3V|o*eUrI};kbCNg{5L8R+>t$>^8SJa}t%X)H`@yWzeRYuV95MTu`2yCp31UIUV! zZW}PK&<8yy$1i3sKIU=050*kXJ}rX0_NMq9Q;M_mqi;STA(pQ1Dskkj2Kn&{pTs&m z8rP`N%mYJcNm%4Iny1+FoM$|C!g9ge3;-POU*smLcc-~r<=rv0v6E|WhKGdYNOX2} z;q^Ka)L*A^bxR~0q`&LW0%ojSS@p?U9>nPv-L-K#nDw;*Fh3qmU=rIC=yStk?MQRq zO^cC|s!2VSGrAwZxOzuNRcbI71uP?_r9|sOZW7O14Sl_aaRgu};Ayx?SapW9&hh6f z72wGeD#_>(>x#QHRz$1Q-Ierz$^(9$xJ;cw}gnTCAyA#A@y zgRSB`wa^l6qoBnrmGU}4-tGeh7|6C5l`RxpGy`?tZF31DGY}KVn^huzLI0TY7zZRV zxVZ0#xk_e&X3i~-9Eo2xNc7G_F!{QZNE8)wl;VG!0QV`$L`n47qGFY}orhQ!aZ*$X z@k4LRf8?5w5A($%tvYmMfF9CB(j`=TPnafs;?qQcRc6|=J9oDw6qvG16=n2ZM@2_r z6t}pDa8ju^sGItTmjPzGVP@K!i2|o2m1M+4LVP?$wB+?N7Djo_&NmcqG%>-0)!_gW z?jC9Rv#uW(*U9+c%y8NVR1W-7IF`?2Y_-A8|$sszsT8`-ofZl8?g1Z z=JJ0LL`A(=NBg#hRwH7G9d|(?YYpKtF1^`JufK!S%hAFicgjCWI*o%tAUvb+sV%S z=X)(NK{yY*pDh6LV)E#~oa4g(i^jojC7qsoKLXReeJtsYhn{=BhxNfEUba*J`|~qo zoIMKjIB3PEJ{#06Qz!aGL_cVT76MBz&_3ZM0o)p2Rqc~roZ{f03~3YNutpI))IXcK zetuK=0=aZwA3N^5ck1xslQ?&QS`cZza5W>NY(A~sDr!3T^de5|l(@Z-_VT4+JGHN?&h3tM;JhqGIA^MYiVvwlC*t@jLOI2NxJ;{xC1x12_~gHdDQwHs`t9>Y0^~e zTP>3TE^7gBj?Ieqo9V^tWf#{lmWQ?CyHDK5>NjPnrplWEOV92rGLUkwuaIDG5Y~IS z2?9#)P;iR+><&%rB}z0)wG-T+4hla2wo$z1RutZZ= zW&)Cgiq3gM8sXPg`A_c6(!dR{2nF>V=iU&}$@Ldr)Va2E^o+p=4ts=zh34ai4WG?L zLbuwKwc!Jb!UB#CIjS(RBTz~thrU)aQU`6aSU?F000PtHe^_-sha_` zfMbalwVpfrUc-eedz>oDbqItH9Ou}zY0nnSS|$%KcQR&PxE@}MA>yJU@`A12HRIfA zqlVRkh*(U}eOq&#F{6#+l>lv=J+I`_bB03|6UyeMb;$xx%*g;)v-Iknfrh&b-Z`2! zX%j~LzML^58+cJr{Z_*OTZk)H7T9@Y1gR!r&*_5|AeI$JE z^3Z<&vU~K)d4kA78g-VobCPG91aw7g>&K@T$1Qw0h>czYnx;tIAF(@J$P1xg1-Ehk-mB218&lXh>UHv`MduV+NbCx6C%MudZ zaAN(!pA0a;Rca8TsX5N6zUBT{7a=*H#BP-+0%G4625r593k5>p82v*9peeQ3 zv1AA43`lyLwQ|Ts3n!|=B=Vkhe*le0qfNL8FpQkzT+ZV>pL7F?o~WfCxp{>=B=ApZ z6j_q^SJ`C7eep_G;X+k1kB@9eE*;}ZE1pMJ{i6H+rgvGW^64F{y zg-y>kVACVx&vTct`jtZJWs^7Pm+8;7yrTQuwIOq9%UhvniQyBE+VD@ZH|sz6bsTzRz24 zs*O}cURnh3hbVrKp@1)!*pZ+e(otCflc@C_1M*AaA7%M2cj7#Wn$UVPNOZ^+MvKEs z@uyE^?mmG$Ha!pGxffgQaI9yzwwgY}q2^6IWKa971b<)uun@EU4CdqI9vDTe_1wd` zIW@N7+IzuDZe$;b`T>C!=_gI`UPbAFSf#Kr-gQZeH&5Mek7I7W0$uR8oI53t+wlz0 z6)&6V4R*cAUmsdWx<#+!ziF4n-t4uqj+*d1oFi3xG(Dk`NNzxbPS=fMGGzs~#|40C z7pZEzQ-6mdiSwi`eBZ~cS5Vecg5%wCW^*NNE=jfYIjh6igV0L+x`kZxbiN0~gF(ew zMfrr#+J!9>&9*<5n?`ITa(#oFm^`(zI$C=G_2pzg^ER!iCxWUv7@H~x5!3|p%Rxk4xx%S?k*$PCyp0v?1uh4(7 z;xsN@nvTcarrTAty+OmiD2se89Pu*&JDv05XZcF~jh37rG`q@{N+GL{Kg+l&l5hgQ z3y8D749hIBBGDAecYdyyecf$^W_6NFP2>7%7|SMe!PTtv=v=BjiGjnJ=?roGEDPyG z=GWA%cY!o)Ha%lq@+DKzFBCHYne~KNOrdMb8*jbYSM?9yU`>MpjL0i;LZxY!vC2SSXbz~5ya$Vw=GxH z*ZD9fQ0YSwc{%jjGwg65LH-PZZV{1Bd0HYHl-n`{R*%vyP^OAf@SYXjDG$gQ82MFZ725q%SlbAy%m^1fE6|vJ`$>AaRmJ za`JXISz-kge+cG}jAGvolf%8Mn5mBLaZoIGeJUF!RSqZ6)Crnb%WX*DcGoHDr0#lr zffz~C-Sc&M`F)d-IPgjK!UyWn&@57;A^+FtXN`K*dLLBaU2AZ<*o47+T}y5TzMomL zF+p1q@iY}sh-B~ETUlob+;z{4A+>d`CXVKJ;7)AzoPkj?s1udnIWPh_y#e7m;dkGh zEB2WEYi`=?(ydkQ0$VCcv(ttZlNr}--*mkX6x*`b36y#j%tl5JvUl)5;qvP>U@SP2 zrgKesDK7N`p{Kj_EDp;PQSNb4is7_X3bm{>k^SOMd-4>`FJw-p8Ie^CpYL-0E7=dPlSa&3a8gt(=l2J&jPeD z99wtF%kZG&+C5*qPa)`C-0>@+TLoCC81M8mgA^0z)+f+trg05-UBcW1B>f$7;!`Pa z*Yu0@upo#q_Gz6R?fUk<&GpZ~CK%N({IJPKEN zr4UFXO|v~{*_l6oUk?b}AA8$OwINdnPG$7AQRUJ#8a0YC>dyJ9oBk5vV`(#x0)69$ z;_YNYhHpX0%hH)EFHay}Zsz>?QpA7Ac$`)61WZTIh{U(i@x1H0FCg9zQz(ZX zR9c3p@D7VOGY_XtvhA0DNx)@#P5me3@K(|dH&_05%E3ZqFMBHVUJ)&?oBjpK86~?_ zPr^+L3B-Ug?owmNK=ZXXVYtnoaLKrM8BRKb%c|`Sm+p0ywZ0^aUziBE*e(OL4_r?S zj&d*;R2J*oUMtHqv{xz1_(zU^K9@XhQCT5BQH|I^?5(()f;VwFMn@&kHeLoxZ*A$j zf2_GxYfUk2Ht}(?G}m9bwWa08-GFlA=pAgK94s_m1rLSD`unlEq5^4*`EjC(%TL#R z`7y4O?N)Q{CEdMY(vVpzr&_@LGj+?iLg00})1;S}@!^c>E(L~Y3tb^}g;J!@P88`> zxlWpNV2iy>*Ar0ZlD-x^ad&T~t5x1>7ty?M@`z+ft$9)g9NomBOjN#wMoGyCV|hGA z+O9WaTU$M%mt;MCMiGatZN9bA%=)dAYgSMFaLs z)#M`eqscn*+is}w${`^LQAefdx-XLrg;NDuj?~ytKFCj5>G5>=cA;h97sh_XW9gMK z!gIfkOpJms1=z=lk1~K?M<=eLfo^ms+DH*UiC0VziYKfC+}W!i-T#75p^@}EdGh8e zc`~RJk|L4u8`g#tD7{W5lqL4_II*NTA4WxpS z7jwb@EZZgTh!bFlkB`5Z!qvJ@Si>^-xARvylK5r$N;;goidl+OJ%KZxzZo&w1c z0}4*DtK`U%f{YGGju4|wRDOoy+{PRw4_H%Awpj=Hkhm1dlTwzCvYefGCYr`?a&9pq zfg85TR3J=3_rta7G&=us7KL;sO95J3HGg9+%n^d?0Q+>Jm)Z)zY0vR2LcW25HZK=s z)RZLUgi&oJ(+6_yqoxpLFOm1$DCME6fu znXVE9ilaDm@+gUQ+6gGrPqiKAzDILCu#!a$VAk;jR$of^j+PAjIOW0V&!Ll&N) z@+-yB>;u!_BiIJ0z%~$vX#k*@Jla6MonQEe|Iz-(^}%-pM*GvvMPYu&Zau1DuT8lWQ3oU;NC_3B=$p#wp0 z84Rhrv#k817*To)bv<;PvHk1>qck4_`UPF*Z*XAlokKy#h$~(OV#Vy`=5+%U%}L~( zrS7OKKwL#}d_qb2^%nOl$G1g_o0pb)r9 zwFBU-gz$Yx{kx;FGnnpTXuYx)N64OcVwc)hfFe9skxOsxP3aBUG?J2L$ZNR41*T9C z_;?ZEg8*nlqh_9%x*rnwBcT@O^`g0J&sB5}F0?<{NtE}DiXhvPVyP1a7b0K&GiHw% zN^==(AbLpy*V^%fLZ+ zGYRtXlVu{M%*YBj$RQM!xzdIIb&&}h`Za~Q-{t~-0bCyPEAfYdkqiB47&6q7C$*m0 zXZaW^cILt=2BWy7hq_G-#6oF!@^0h(K8XRBw1(_G&r=SARxKx5*Y758-oOjsHSas? zOg#(fgtDccE#AF6cyS4vsnOZ+0`e zP)U=fd*e82<$&O|%TKR6P5AB@sQt09u->%(=zMpV#vQ@UmPn>_x6J+351X6}7BVL4 zRc_YAhKms316?x9_SU4BR4l&qxb6cL%?i&%T#76c-U&88@H?Pfb;etvdFER9G~w3h zgG}CB6Yrsxhjl#CFoYuT@7UxG4W$blLcRIU81iuEZR8okT+IFA_@~!)=<^1F2GMvj z{GUG9)UP(Ge`aN6O%4FN3UFg$FMELviVrdb?-`IK=%6=2;fx@K4w^FS|Z zHd5#MNo4H3pG+scPk#=ClpeBPPgNCp`o%iU`c;iy!b9?P&DeJx;mNr%%2n8U2uT;0!|jE3_E4#5Stl%xD>Y)oT%6X zOB7zNJNEb7*oz-#e*TPo$K1@U7+W1NHG6Tt@{v#f>t$ZCvw5QZ<#^YvM(q8-#NH$U z`5!~?vAjnOa6!|>e3EL`rK6<=sxNj z6EmfcKE*q!5T{It4JTM8D?&(d8DAu*-(@LrLK#x;KVoJI+8V8a#QM zW|D*Ur>xisiDr5j`@#997tQwV(-C;<*AD;G;)wLTyk9GWnH?D8c1U#D)ECS>>rO4w-%Gu;ojtqq*&u|V_iI(!xn4M9l;K*(bPU$ z)B2hlidt3J*(skBH0f6$(lyo9J_`m;3+BOWf@w2^DVcD;V7gWVqKyYmswIPgeyCqd zfB`{$EnS`1IVj^>A=n9IZQxN4xb)fH?*`SrEmNMeCerP!wsaYhTAt%`uyVQ$N^NO$ zwJUvqC6QXqc&Uh6jQ@@1^@d~W@B`ThN{KYLdaa z(o^@g&0*D6ijKzM9S3n&`D*kb=Y?kSm3eHol!dn6ot=wE48c{m-cERasVOMdh7*UO zQUJC-?Q@;5Bobj$9ClA~&w=QaK%s|HCj|L)IKy|oCeZ4CZbb`8cN!GT!Wa)&gA<+1 zU>F^Ien>_>USR<;5OH=Tg7>-LYSTsM*-y(kjB)w1{?%n7F zlTGzC{fIO?PWkl@(&N|E?tU)^G5G{}k5mNj3i4`)RSOJhuZcX!!T0B}wdyzrHaAoV zw1%QVA*`Neagl>@W1)71Dxa0~h$jqGlxwfddaO4<%ojv_{e#ah=<@X-7@cU3z=-O& zkl@Q}U*9w~ED-JJN!d${>2z^^=33qt^^f8vbfYbh@ceXv4#5X6vquZ@lhYg~JhwzE z2l-KhyMlW=T1IO-pR)CF&|aLM&t8h+ji;bMrr-H^aTf_-q^nT5e&_Vu4()JKl4l&p zYXu%nB_-T3mota;kTo6DLW#j=bTeKTyQu|u5hfA%Rbwa8yle{nZ9qA9pI;0-=yRVd6wO`c^AqLp zjYbzCT4k-iFwOl⋙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 y*6L$~$z#u~H@vHC!Ek~1synhOR2G73A- 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 Zhx=ccjqqPKz)Z8mQEPjvLYT+({{g(wBiR4| diff --git a/usermods/INA219_v2/library.json b/usermods/INA219_v2/library.json index e2734ebcbb..87f90bf6ef 100644 --- a/usermods/INA219_v2/library.json +++ b/usermods/INA219_v2/library.json @@ -1,6 +1,7 @@ { - "name": "INA219_v2", + "name": "ina2xx_v2", "dependencies": { - "wollewald/INA219_WE":"~1.3.8" + "wollewald/INA219_WE":"~1.3.8", + "wollewald/INA226_WE":"~1.2.12" } } \ No newline at end of file diff --git a/wled00/const.h b/wled00/const.h index dade8fba78..1afcfa65cc 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -206,7 +206,7 @@ #define USERMOD_ID_DEEP_SLEEP 55 //Usermod "usermod_deep_sleep.h" #define USERMOD_ID_RF433 56 //Usermod "usermod_v2_RF433.h" #define USERMOD_ID_BRIGHTNESS_FOLLOW_SUN 57 //Usermod "usermod_v2_brightness_follow_sun.h" -#define USERMOD_ID_INA219 58 // Usermod "INA219_v2.cpp" +#define USERMOD_ID_INA2XX 58 // Usermod "INA2XX_v2.cpp" //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot From 20c64eb41e5cfa62d0acadd6e3f6162db671c4b7 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Tue, 6 May 2025 21:54:52 +0200 Subject: [PATCH 47/70] renamed folder/file from ina219_v2 to ina2xx_v2 --- usermods/{INA219_v2 => ina2xx_v2}/Readme.md | 0 .../img/INA219-Pin-Outs.png | Bin .../img/INA226-Pin-Outs.webp | Bin .../{INA219_v2 => ina2xx_v2}/img/homeassistant.png | Bin usermods/{INA219_v2 => ina2xx_v2}/img/info.png | Bin .../img/usermod_settings.png | Bin .../img/usermod_settings_pins_selection.png | Bin .../INA219_v2.cpp => ina2xx_v2/ina2xx_v2.cpp} | 0 usermods/{INA219_v2 => ina2xx_v2}/library.json | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename usermods/{INA219_v2 => ina2xx_v2}/Readme.md (100%) rename usermods/{INA219_v2 => ina2xx_v2}/img/INA219-Pin-Outs.png (100%) rename usermods/{INA219_v2 => ina2xx_v2}/img/INA226-Pin-Outs.webp (100%) rename usermods/{INA219_v2 => ina2xx_v2}/img/homeassistant.png (100%) rename usermods/{INA219_v2 => ina2xx_v2}/img/info.png (100%) rename usermods/{INA219_v2 => ina2xx_v2}/img/usermod_settings.png (100%) rename usermods/{INA219_v2 => ina2xx_v2}/img/usermod_settings_pins_selection.png (100%) rename usermods/{INA219_v2/INA219_v2.cpp => ina2xx_v2/ina2xx_v2.cpp} (100%) rename usermods/{INA219_v2 => ina2xx_v2}/library.json (100%) diff --git a/usermods/INA219_v2/Readme.md b/usermods/ina2xx_v2/Readme.md similarity index 100% rename from usermods/INA219_v2/Readme.md rename to usermods/ina2xx_v2/Readme.md diff --git a/usermods/INA219_v2/img/INA219-Pin-Outs.png b/usermods/ina2xx_v2/img/INA219-Pin-Outs.png similarity index 100% rename from usermods/INA219_v2/img/INA219-Pin-Outs.png rename to usermods/ina2xx_v2/img/INA219-Pin-Outs.png diff --git a/usermods/INA219_v2/img/INA226-Pin-Outs.webp b/usermods/ina2xx_v2/img/INA226-Pin-Outs.webp similarity index 100% rename from usermods/INA219_v2/img/INA226-Pin-Outs.webp rename to usermods/ina2xx_v2/img/INA226-Pin-Outs.webp diff --git a/usermods/INA219_v2/img/homeassistant.png b/usermods/ina2xx_v2/img/homeassistant.png similarity index 100% rename from usermods/INA219_v2/img/homeassistant.png rename to usermods/ina2xx_v2/img/homeassistant.png diff --git a/usermods/INA219_v2/img/info.png b/usermods/ina2xx_v2/img/info.png similarity index 100% rename from usermods/INA219_v2/img/info.png rename to usermods/ina2xx_v2/img/info.png diff --git a/usermods/INA219_v2/img/usermod_settings.png b/usermods/ina2xx_v2/img/usermod_settings.png similarity index 100% rename from usermods/INA219_v2/img/usermod_settings.png rename to usermods/ina2xx_v2/img/usermod_settings.png diff --git a/usermods/INA219_v2/img/usermod_settings_pins_selection.png b/usermods/ina2xx_v2/img/usermod_settings_pins_selection.png similarity index 100% rename from usermods/INA219_v2/img/usermod_settings_pins_selection.png rename to usermods/ina2xx_v2/img/usermod_settings_pins_selection.png diff --git a/usermods/INA219_v2/INA219_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp similarity index 100% rename from usermods/INA219_v2/INA219_v2.cpp rename to usermods/ina2xx_v2/ina2xx_v2.cpp diff --git a/usermods/INA219_v2/library.json b/usermods/ina2xx_v2/library.json similarity index 100% rename from usermods/INA219_v2/library.json rename to usermods/ina2xx_v2/library.json From be4c08c2f57c86a7b7f5965fc30777c514c1a3db Mon Sep 17 00:00:00 2001 From: KrX3D Date: Wed, 7 May 2025 18:20:24 +0200 Subject: [PATCH 48/70] coderabbitai improvements --- usermods/ina2xx_v2/ina2xx_v2.cpp | 174 ++++++++----------------------- 1 file changed, 44 insertions(+), 130 deletions(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 1611ef25cb..1cc36be197 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -60,6 +60,19 @@ #include "wled.h" #include +#define UPDATE_CONFIG(obj, key, var, fmt) \ + do { \ + auto _tmp = var; \ + if ( getJsonValue((obj)[(key)], _tmp) ) { \ + if (_tmp != var) { \ + _logUsermodInaSensor("%s updated to: " fmt, key, _tmp);\ + var = _tmp; \ + } \ + } else { \ + configComplete = false; \ + } \ + } while(0) + class UsermodINA2xx : public Usermod { private: static const char _name[]; // Name of the usermod @@ -120,12 +133,16 @@ class UsermodINA2xx : public Usermod { INA219_WE *_ina2xx = nullptr; // INA2xx sensor object // Function to truncate decimals based on the configured decimal factor - float truncateDecimals(float val) { + float roundDecimals(float val) { _logUsermodInaSensor("Truncating value %.6f with factor %d", val, _decimalFactor); if (_decimalFactor == 0) { return roundf(val); } - float factor = powf(10.0f, _decimalFactor); + + static const float factorLUT[4] = {1.f, 10.f, 100.f, 1000.f}; + float factor = (_decimalFactor <= 3) ? factorLUT[_decimalFactor] + : powf(10.0f, _decimalFactor); + return roundf(val * factor) / factor; } @@ -489,18 +506,18 @@ class UsermodINA2xx : public Usermod { _logUsermodInaSensor("Reading sensor data at %lu ms", lastCheck); // Fetch sensor data - shuntVoltage = truncateDecimals(_ina2xx->getShuntVoltage_mV()); - busVoltage = truncateDecimals(_ina2xx->getBusVoltage_V()); + shuntVoltage = roundDecimals(_ina2xx->getShuntVoltage_mV()); + busVoltage = roundDecimals(_ina2xx->getBusVoltage_V()); float rawCurrent_mA = _ina2xx->getCurrent_mA(); - current_mA = truncateDecimals(rawCurrent_mA); - current = truncateDecimals(rawCurrent_mA / 1000.0); // Convert from mA to A + current_mA = roundDecimals(rawCurrent_mA); + current = roundDecimals(rawCurrent_mA / 1000.0); // Convert from mA to A float rawPower_mW = _ina2xx->getBusPower(); - power_mW = truncateDecimals(rawPower_mW); - power = truncateDecimals(rawPower_mW / 1000.0); // Convert from mW to W + power_mW = roundDecimals(rawPower_mW); + power = roundDecimals(rawPower_mW / 1000.0); // Convert from mW to W - loadVoltage = truncateDecimals(busVoltage + (shuntVoltage / 1000)); + loadVoltage = roundDecimals(busVoltage + (shuntVoltage / 1000)); overflow = _ina2xx->getOverflow() != 0; _logUsermodInaSensor("Sensor readings - Shunt: %.3f mV, Bus: %.3f V, Load: %.3f V", shuntVoltage, busVoltage, loadVoltage); @@ -871,25 +888,25 @@ class UsermodINA2xx : public Usermod { bool configComplete = !top.isNull(); - bool tempEnabled = enabled; - if (getJsonValue(top["Enabled"], tempEnabled)) { - if (tempEnabled != enabled) { - _logUsermodInaSensor("Enabled state changed to: %s", tempEnabled ? "enabled" : "disabled"); - enabled = tempEnabled; - } - } else { - configComplete = false; - } + _logUsermodInaSensor("Checking if configuration has changed:"); + UPDATE_CONFIG(top, "Enabled", enabled, "%u"); + UPDATE_CONFIG(top, "i2c_address", _i2cAddress, "0x%02X"); + UPDATE_CONFIG(top, "conversion_time", conversionTime, "%u"); + UPDATE_CONFIG(top, "decimals", _decimalFactor, "%u"); + UPDATE_CONFIG(top, "shunt_resistor", shuntResistor, "%.6f Ohms"); + UPDATE_CONFIG(top, "correction_factor", correctionFactor, "%.3f"); + UPDATE_CONFIG(top, "pga_gain", pGain, "%d"); + UPDATE_CONFIG(top, "bus_range", busRange, "%d"); + UPDATE_CONFIG(top, "shunt_offset", shuntVoltOffset_mV,"%.3f mV"); - uint8_t tempI2cAddress = _i2cAddress; - if (getJsonValue(top[F("i2c_address")], tempI2cAddress)) { - if (tempI2cAddress != _i2cAddress) { - _logUsermodInaSensor("I2C address updated to: 0x%02X", tempI2cAddress); - _i2cAddress = tempI2cAddress; - } - } else { - configComplete = false; - } + #ifndef WLED_DISABLE_MQTT + UPDATE_CONFIG(top, "mqtt_publish", mqttPublish, "%u"); + UPDATE_CONFIG(top, "mqtt_publish_always", mqttPublishAlways, "%u"); + + bool tempHaDiscovery = haDiscovery; + UPDATE_CONFIG(top, "ha_discovery", haDiscovery, "%u"); + if (haDiscovery != tempHaDiscovery) haDiscoverySent = !haDiscovery; + #endif uint16_t tempInterval = 0; if (getJsonValue(top[F("check_interval")], tempInterval)) { @@ -907,109 +924,6 @@ class UsermodINA2xx : public Usermod { configComplete = false; } - INA219_ADC_MODE tempConversionTime = conversionTime; - if (getJsonValue(top["conversion_time"], tempConversionTime)) { - if (tempConversionTime != conversionTime) { - _logUsermodInaSensor("Conversion time updated to: %u", tempConversionTime); - conversionTime = tempConversionTime; - } - } else { - configComplete = false; - } - - uint8_t tempDecimalFactor = _decimalFactor; - if (getJsonValue(top["decimals"], tempDecimalFactor)) { - if (tempDecimalFactor != _decimalFactor) { - _logUsermodInaSensor("Decimal factor updated to: %u", tempDecimalFactor); - _decimalFactor = tempDecimalFactor; - } - } else { - configComplete = false; - } - - float tempShuntResistor = shuntResistor; - if (getJsonValue(top["shunt_resistor"], tempShuntResistor)) { - if (tempShuntResistor != shuntResistor) { - _logUsermodInaSensor("Shunt resistor updated to: %.6f Ohms", tempShuntResistor); - shuntResistor = tempShuntResistor; - } - } else { - configComplete = false; - } - - float tempCorrectionFactor = correctionFactor; - if (getJsonValue(top["correction_factor"], tempCorrectionFactor)) { - if (tempCorrectionFactor != correctionFactor) { - _logUsermodInaSensor("Correction factor updated to: %.3f", tempCorrectionFactor); - correctionFactor = tempCorrectionFactor; - } - } else { - configComplete = false; - } - - INA219_PGAIN tempPGain = pGain; - if (getJsonValue(top[F("pga_gain")], tempPGain)) { - if (tempPGain != pGain) { - _logUsermodInaSensor("PGA gain updated to: %d", tempPGain); - pGain = tempPGain; - } - } else { - configComplete = false; - } - - INA219_BUS_RANGE tempBusRange = busRange; - if (getJsonValue(top[F("bus_range")], tempBusRange)) { - if (tempBusRange != busRange) { - _logUsermodInaSensor("Bus range updated to: %d", tempBusRange); - busRange = tempBusRange; - } - } else { - configComplete = false; - } - - float tempShuntVoltOffset = shuntVoltOffset_mV; - if (getJsonValue(top[F("shunt_offset")], tempShuntVoltOffset)) { - if (tempShuntVoltOffset != shuntVoltOffset_mV) { - _logUsermodInaSensor("Shunt voltage offset updated to: %.3f mV", tempShuntVoltOffset); - shuntVoltOffset_mV = tempShuntVoltOffset; - } - } else { - configComplete = false; - } - - #ifndef WLED_DISABLE_MQTT - bool tempMqttPublish = mqttPublish; - if (getJsonValue(top["mqtt_publish"], tempMqttPublish)) { - if (tempMqttPublish != mqttPublish) { - _logUsermodInaSensor("MQTT publish setting updated to: %s", tempMqttPublish ? "enabled" : "disabled"); - mqttPublish = tempMqttPublish; - } - } else { - configComplete = false; - } - - bool tempMqttPublishAlways = mqttPublishAlways; - if (getJsonValue(top["mqtt_publish_always"], tempMqttPublishAlways)) { - if (tempMqttPublishAlways != mqttPublishAlways) { - _logUsermodInaSensor("MQTT publish always updated to: %s", tempMqttPublishAlways ? "true" : "false"); - mqttPublishAlways = tempMqttPublishAlways; - } - } else { - configComplete = false; - } - - bool tempHaDiscovery = haDiscovery; - if (getJsonValue(top["ha_discovery"], tempHaDiscovery)) { - if (tempHaDiscovery != haDiscovery) { - _logUsermodInaSensor("HA discovery setting updated to: %s", tempHaDiscovery ? "enabled" : "disabled"); - haDiscovery = tempHaDiscovery; - haDiscoverySent = !haDiscovery; - } - } else { - configComplete = false; - } - #endif - bool prevInitDone = initDone; initDone = updateINA2xxSettings(); // Configure INA2xx settings From f0b5c25dc020d64b1ab1176521b28eaa7b5190d0 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Wed, 7 May 2025 18:46:45 +0200 Subject: [PATCH 49/70] coderabbitai improvements --- usermods/ina2xx_v2/ina2xx_v2.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/usermods/ina2xx_v2/ina2xx_v2.cpp b/usermods/ina2xx_v2/ina2xx_v2.cpp index 1cc36be197..710eb76b3d 100644 --- a/usermods/ina2xx_v2/ina2xx_v2.cpp +++ b/usermods/ina2xx_v2/ina2xx_v2.cpp @@ -375,6 +375,10 @@ class UsermodINA2xx : public Usermod { char buffer[1024]; size_t payload_size = serializeJson(jsonDoc, buffer, sizeof(buffer)); + if (payload_size >= sizeof(buffer) - 1) { + _logUsermodInaSensor("JSON serialization truncated – buffer too small (%u bytes)", sizeof(buffer)); + } + // Construct the MQTT topic using the device topic char topic[128]; snprintf_P(topic, sizeof(topic), "%s/sensor/ina2xx", mqttDeviceTopic); @@ -439,6 +443,10 @@ class UsermodINA2xx : public Usermod { char buffer[1024]; size_t payload_size = serializeJson(doc, buffer, sizeof(buffer)); + if (payload_size >= sizeof(buffer) - 1) { + _logUsermodInaSensor("HA config JSON truncated – buffer too small (%u bytes)", sizeof(buffer)); + } + char topic_S[128]; int length = snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); if (length >= sizeof(topic_S)) { @@ -527,7 +535,11 @@ class UsermodINA2xx : public Usermod { // Update energy consumption if (lastPublishTime != 0) { if (power >= 0) { - updateEnergy(power, lastCheck - lastPublishTime); + // Handle millis() overflow when calculating duration + unsigned long duration = (lastCheck >= lastPublishTime) + ? (lastCheck - lastPublishTime) + : (0xFFFFFFFFUL - lastPublishTime + lastCheck + 1); + updateEnergy(power, duration); } else { _logUsermodInaSensor("Skipping energy update due to negative power: %.3f W", power); } From d253000336cd1b9db16ba1b8b393bfd5212a6db7 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sun, 8 Jun 2025 19:08:15 +0200 Subject: [PATCH 50/70] fix "This branch has conflicts that must be resolved" --- wled00/const.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wled00/const.h b/wled00/const.h index 1afcfa65cc..01ea1b0847 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -206,7 +206,8 @@ #define USERMOD_ID_DEEP_SLEEP 55 //Usermod "usermod_deep_sleep.h" #define USERMOD_ID_RF433 56 //Usermod "usermod_v2_RF433.h" #define USERMOD_ID_BRIGHTNESS_FOLLOW_SUN 57 //Usermod "usermod_v2_brightness_follow_sun.h" -#define USERMOD_ID_INA2XX 58 // Usermod "INA2XX_v2.cpp" +#define USERMOD_ID_USER_FX 58 //Usermod "user_fx" +#define USERMOD_ID_INA2XX 59 // Usermod "INA2XX_v2.h" //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot From 6702151fe908b57cd3a9f4242b331ec434e10b71 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sun, 8 Jun 2025 19:43:07 +0200 Subject: [PATCH 51/70] Update pictures and readme --- usermods/ina2xx_v2/Readme.md | 213 +++++++++++------- .../ina2xx_v2/img/usermod_settings_ina219.png | Bin 0 -> 21480 bytes .../ina2xx_v2/img/usermod_settings_ina226.png | Bin 0 -> 15039 bytes 3 files changed, 132 insertions(+), 81 deletions(-) create mode 100644 usermods/ina2xx_v2/img/usermod_settings_ina219.png create mode 100644 usermods/ina2xx_v2/img/usermod_settings_ina226.png diff --git a/usermods/ina2xx_v2/Readme.md b/usermods/ina2xx_v2/Readme.md index 060a358eb7..3f1883a0eb 100644 --- a/usermods/ina2xx_v2/Readme.md +++ b/usermods/ina2xx_v2/Readme.md @@ -1,115 +1,166 @@ -# INA219 WLED Usermod +# INA2XX WLED Usermod -This Usermod integrates the INA219 sensor with WLED to monitor energy consumption. It can read voltage, current, power, and calculate daily, monthly and total energy usage. +This Usermod integrates the INA219 **and** INA226 sensor with WLED to monitor energy consumption. It can read voltage, current, power, and calculate daily, monthly and total energy usage for either sensor. ## Features -- Monitors bus voltage, shunt voltage, current, and power. +- Monitors bus voltage, shunt voltage, current, and power (both INA219 & INA226). - Calculates total energy consumed in kilowatt-hours (kWh). +- Calculates daily and monthly energy usage (resets after 24 h and 30 days respectively). - Supports MQTT publishing of sensor data. - Publishes energy data to Home Assistant directly to the WLED entity for easy integration. - Displays daily, monthly and total energy used in the WLED GUI under the info section. -- Configurable through WLED's web interface. +- Configurable through WLED's web interface or `my_config.h`. ## Screenshots -### Info and Home Assistant +### Info, Home Assistant and Pin Selection under Usermod -| Info screen | Home Assistant | -|------------------------------------------------|----------------------------------------------------------------| -| ![Info screen](./img/info.png "Info screen") | ![Home Assistant](./img/homeassistant.png "Home Assistant") | +| Info screen | Home Assistant | Settings page - Pin Selection | +|------------------------------------------------|--------------------------------------------------------------|-----------------------------------------------------------------------------| +| ![Info screen](./img/info.png "Info screen") | ![Home Assistant](./img/homeassistant.png "Home Assistant") | ![Pin Selection](./img/usermod_settings_pins_selection.png "Pin Selection") | -### Settings - Pin Selection and Usermod +### Settings - Usermod -| Settings page - Pin Selection | Settings page - Usermod | -|-----------------------------------------------------------------------------|--------------------------------------------------------------| -| ![Pin Selection](./img/usermod_settings_pins_selection.png "Pin Selection") | ![Settings page](./img/usermod_settings.png "Settings page") | +| Settings page - Usermod INA219 | Settings page - Usermod INA226 | +|---------------------------------------------------------------------|---------------------------------------------------------------------| +| ![Settings page](./img/usermod_settings_ina219.png "Settings page") | ![Settings page](./img/usermod_settings_ina226.png "Settings page") | + +--- ## Configuration Parameters +> **Note:** Before using, you **must** define the sensor type in your `my_config.h` or via PlatformIO build flags: +> ```cpp +> #define INA_SENSOR_TYPE 219 // or 226 +> ``` + +### Universal Parameters + | Parameter | Description | Default Value | Possible Values | |-------------------------------|------------------------------------------------------------|----------------|--------------------------------------------------------| -| `INA219_ENABLED` | Enable or disable the INA219 Usermod | `false` | `true`, `false` | -| `INA219_I2C_ADDRESS` | I2C address of the INA219 sensor | `0x40` | See options below for available addresses. | -| `INA219_CHECK_INTERVAL` | Interval for checking sensor values (seconds) | `5` | Any positive integer | -| `INA219_CONVERSION_TIME` | ADC conversion time (12-bit, 16-bit, etc.) | `BIT_MODE_12` | See options below for available modes. | -| `INA219_DECIMAL_FACTOR` | Number of decimal places for current and power readings | `3` | See options below for decimal places. | -| `INA219_SHUNT_RESISTOR` | Value of the shunt resistor in ohms | `0.1` | Any positive float value matching your INA219 resistor | -| `INA219_CORRECTION_FACTOR` | Correction factor for measurements | `1.0` | Any positive float value | -| `INA219_MQTT_PUBLISH` | Publish sensor data to MQTT | `false` | `true`, `false` | -| `INA219_MQTT_PUBLISH_ALWAYS` | Always publish values, regardless of change | `false` | `true`, `false` | -| `INA219_HA_DISCOVERY` | Enable Home Assistant discovery for sensors | `false` | `true`, `false` | - - ### Options for `INA219_CONVERSION_TIME` - - The `conversionTime` parameter can be set to the following ADC modes: - - | Value | Description | - |-------------------|----------------------------| - | `BIT_MODE_9` | 9-Bit (84 µs) | - | `BIT_MODE_10` | 10-Bit (148 µs) | - | `BIT_MODE_11` | 11-Bit (276 µs) | - | `BIT_MODE_12` | 12-Bit (532 µs) | - | `SAMPLE_MODE_2` | 2 samples (1.06 ms) | - | `SAMPLE_MODE_4` | 4 samples (2.13 ms) | - | `SAMPLE_MODE_8` | 8 samples (4.26 ms) | - | `SAMPLE_MODE_16` | 16 samples (8.51 ms) | - | `SAMPLE_MODE_32` | 32 samples (17.02 ms) | - | `SAMPLE_MODE_64` | 64 samples (34.05 ms) | - | `SAMPLE_MODE_128` | 128 samples (68.10 ms) | - - ### Options for `INA219_DECIMAL_FACTOR` - - The `decimalFactor` parameter can be set to: - - | Decimal Places | Value | Example | - |----------------|-------|------------------| - | 0 | 0 | 100 | - | 1 | 1 | 100.0 | - | 2 | 2 | 100.00 | - | 3 | 3 | 100.000 | - - ### Options for `INA219_I2C_ADDRESS` - - The `i2cAddress` parameter can be set to the following options: - - | Address | Description | Value | - |---------------------|------------------------------------|---------| - | `0x40` | 0x40 - Default | 0x40 | - | `0x41` | 0x41 - A0 soldered | 0x41 | - | `0x44` | 0x44 - A1 soldered | 0x44 | - | `0x45` | 0x45 - A0 and A1 soldered | 0x45 | +| `INA2XX_ENABLED` | Enable or disable the INA2XX Usermod | `false` | `true`, `false` | +| `INA2XX_I2C_ADDRESS` | I2C address of the INA2XX sensor | `0x40` | See options below for available addresses. | +| `INA2XX_CHECK_INTERVAL` | Interval for checking sensor values (seconds) | `5` | Any positive integer | +| `INA2XX_CONVERSION_TIME` | ADC conversion time | `BIT_MODE_12` (219)
`CONV_TIME_1100` (226) | Sensor-specific (see below) | +| `INA2XX_DECIMAL_FACTOR` | Number of decimal places for current and power readings | `3` | See options below for decimal places. | +| `INA2XX_SHUNT_RESISTOR` | Value of the shunt resistor in ohms | `0.1` | Any positive float value matching your INA2XX resistor | +| `INA2XX_CORRECTION_FACTOR` | Correction factor for measurements | `1.0` | Any positive float value | +| `INA2XX_MQTT_PUBLISH` | Publish sensor data to MQTT | `false` | `true`, `false` | +| `INA2XX_MQTT_PUBLISH_ALWAYS` | Always publish values, regardless of change | `false` | `true`, `false` | +| `INA2XX_HA_DISCOVERY` | Enable Home Assistant discovery for sensors | `false` | `true`, `false` | + +### INA219-Specific Parameters (`INA_SENSOR_TYPE == 219`) + +| Parameter | Description | Default | Possible Values | +|-------------------------------|------------------------------------------------------------|---------------|--------------------------------------------------------| +| `INA2XX_BUSRANGE` | Bus voltage range | `BRNG_32` | `BRNG_16`, `BRNG_32` | +| `INA2XX_P_GAIN` | Shunt voltage gain | `PG_320` | `PG_40`, `PG_80`, `PG_160`, `PG_320` | +| `INA2XX_SHUNT_VOLT_OFFSET` | Millivolt offset at zero current | `0.0` | Any float (mV) | + +#### Options for `INA2XX_CONVERSION_TIME` (INA219) + +| Value | Description | +|-------------------|----------------------------| +| `BIT_MODE_9` | 9-Bit (84 µs) | +| `BIT_MODE_10` | 10-Bit (148 µs) | +| `BIT_MODE_11` | 11-Bit (276 µs) | +| `BIT_MODE_12` | 12-Bit (532 µs) | +| `SAMPLE_MODE_2` | 2 samples (1.06 ms) | +| `SAMPLE_MODE_4` | 4 samples (2.13 ms) | +| `SAMPLE_MODE_8` | 8 samples (4.26 ms) | +| `SAMPLE_MODE_16` | 16 samples (8.51 ms) | +| `SAMPLE_MODE_32` | 32 samples (17.02 ms) | +| `SAMPLE_MODE_64` | 64 samples (34.05 ms) | +| `SAMPLE_MODE_128` | 128 samples (68.10 ms) | + +### INA226-Specific Parameters (`INA_SENSOR_TYPE == 226`) + +| Parameter | Description | Default | Possible Values | +|-------------------------------|------------------------------------------------------------|---------------|--------------------------------------| +| `INA2XX_AVERAGES` | Number of averaging samples | `AVERAGE_1` | `AVERAGE_1`, `AVERAGE_4`, `AVERAGE_16`, … | +| `INA2XX_RANGE` | Current measurement range (max in A) | `1.3` | Up to `10.0` | + +#### Options for `INA2XX_CONVERSION_TIME` (INA226) + +| Value | Conversion Time | +|-------------------|------------------------------| +| `CONV_TIME_140` | 140 µs | +| `CONV_TIME_204` | 204 µs | +| `CONV_TIME_556` | 556 µs | +| `CONV_TIME_1100` | 1.100 ms | +| `CONV_TIME_2116` | 2.116 ms | +| `CONV_TIME_4156` | 4.156 ms | +| `CONV_TIME_8244` | 8.244 ms | + + +### Options for `INA2XX_DECIMAL_FACTOR` + +The `decimalFactor` parameter can be set to: + +| Decimal Places | Value | Example | +|----------------|-------|------------------| +| 0 | 0 | 100 | +| 1 | 1 | 100.0 | +| 2 | 2 | 100.00 | +| 3 | 3 | 100.000 | + +### Options for `INA2XX_I2C_ADDRESS` + +The `i2cAddress` parameter can be set to the following options: + +| Address | Description | Value | +|---------------------|------------------------------------|---------| +| `0x40` | 0x40 - Default | 0x40 | +| `0x41` | 0x41 - A0 soldered | 0x41 | +| `0x44` | 0x44 - A1 soldered | 0x44 | +| `0x45` | 0x45 - A0 and A1 soldered | 0x45 | + +--- # Compiling -To enable, add `INA219_v2` to your `custom_usermods` (e.g. in `platformio_override.ini`) +To enable, add `INA2XX_v2` to your `custom_usermods` (e.g. in `platformio_override.ini`) ```ini -[env:usermod_ina219_d1_mini] +[env:usermod_ina2xx_d1_mini] extends = env:d1_mini -custom_usermods = ${env:d1_mini.custom_usermods} INA219_v2 +custom_usermods = ${env:d1_mini.custom_usermods} INA2XX_v2 ``` ## Usage -1. Setup SDA/SCL Pin - see at the readme bottom → ### I2C Configuration (Mandatory) +1. Define your sensor in my_config.h or via build flags: + +> ```cpp +> #define INA_SENSOR_TYPE 219 // or 226 +> ``` + +2. Setup SDA/SCL Pin - see at the readme bottom → ### I2C Configuration (Mandatory) -2. Configure the parameters in the web interface or via the `my_config.h` file (see step 4). +3. Enable the usermod in WLED’s web interface (Settings → Usermod → INA2XX). -3. Monitor your energy consumption through the WLED interface or via MQTT. +3. Configure parameters in the web interface or predefine them in my_config.h: -4. Optional to predefine options: +> ```cpp +> #define INA2XX_ENABLED false +> #define INA2XX_I2C_ADDRESS 0x40 +> #define INA2XX_CHECK_INTERVAL 5 +> #define INA2XX_CONVERSION_TIME BIT_MODE_12 // or CONV_TIME_1100 +> #define INA2XX_DECIMAL_FACTOR 3 +> #define INA2XX_SHUNT_RESISTOR 0.1 +> #define INA2XX_CORRECTION_FACTOR 1.0 +> #define INA2XX_BUSRANGE BRNG_32 // INA219 only +> #define INA2XX_P_GAIN PG_320 // INA219 only +> #define INA2XX_SHUNT_VOLT_OFFSET 0.0 // INA219 only +> #define INA2XX_AVERAGES AVERAGE_1 // INA226 only +> #define INA2XX_RANGE 1.3 // INA226 only +> #define INA2XX_MQTT_PUBLISH false +> #define INA2XX_MQTT_PUBLISH_ALWAYS false +> #define INA2XX_HA_DISCOVERY false +> ``` - #define INA219_ENABLED false - #define INA219_I2C_ADDRESS 0x40 - #define INA219_CHECK_INTERVAL 5 - #define INA219_CONVERSION_TIME BIT_MODE_12 - #define INA219_DECIMAL_FACTOR 3 - #define INA219_SHUNT_RESISTOR 0.1 - #define INA219_CORRECTION_FACTOR 1.0 - #define INA219_MQTT_PUBLISH false - #define INA219_MQTT_PUBLISH_ALWAYS false - #define INA219_HA_DISCOVERY false +4. Monitor your energy consumption through the WLED interface or via MQTT. ## Energy Calculation @@ -120,11 +171,11 @@ custom_usermods = ${env:d1_mini.custom_usermods} INA219_v2 To reset daily or monthly energy calculations, you can implement corresponding functions within your main application. ### I2C Configuration (Mandatory) -The INA219 sensor communicates via I2C, so the SDA and SCL pins must be correctly set before enabling the usermod. +The INA2XX sensor communicates via I2C, so the SDA and SCL pins must be correctly set before enabling the usermod. 1. Open the **WLED Web Interface**. 2. Go to **Settings → Usermod → Global I2C GPIOs (HW)**. 3. Select the appropriate **SDA** and **SCL** pins for your hardware. 4. Save the settings and **reboot WLED**. -🚀 **After rebooting, you can enable the INA219 usermod in the settings.** \ No newline at end of file +🚀 **After rebooting, you can enable the **INA219** or **INA226** usermod in the settings.** \ No newline at end of file diff --git a/usermods/ina2xx_v2/img/usermod_settings_ina219.png b/usermods/ina2xx_v2/img/usermod_settings_ina219.png new file mode 100644 index 0000000000000000000000000000000000000000..6412bd37222bcbdc57342ed85e1a74bcdf07370c GIT binary patch literal 21480 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%0A&Dpy5ZF!>!j1IE+w?uL8J3_CmkLc0II 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 Date: Sun, 8 Jun 2025 19:46:19 +0200 Subject: [PATCH 52/70] update readme --- usermods/ina2xx_v2/Readme.md | 46 ++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/usermods/ina2xx_v2/Readme.md b/usermods/ina2xx_v2/Readme.md index 3f1883a0eb..800dac4445 100644 --- a/usermods/ina2xx_v2/Readme.md +++ b/usermods/ina2xx_v2/Readme.md @@ -17,9 +17,9 @@ This Usermod integrates the INA219 **and** INA226 sensor with WLED to monitor en ### Info, Home Assistant and Pin Selection under Usermod -| Info screen | Home Assistant | Settings page - Pin Selection | -|------------------------------------------------|--------------------------------------------------------------|-----------------------------------------------------------------------------| -| ![Info screen](./img/info.png "Info screen") | ![Home Assistant](./img/homeassistant.png "Home Assistant") | ![Pin Selection](./img/usermod_settings_pins_selection.png "Pin Selection") | +| Info screen | Home Assistant | Usermod Settings page - Pin Selection | +|------------------------------------------------|--------------------------------------------------------------|-------------------------------------------------------------------------------------| +| ![Info screen](./img/info.png "Info screen") | ![Home Assistant](./img/homeassistant.png "Home Assistant") | ![Pin Selection](./img/usermod_settings_pins_selection.png "Pin Selection") | ### Settings - Usermod @@ -132,9 +132,9 @@ custom_usermods = ${env:d1_mini.custom_usermods} INA2XX_v2 1. Define your sensor in my_config.h or via build flags: -> ```cpp -> #define INA_SENSOR_TYPE 219 // or 226 -> ``` +```cpp +#define INA_SENSOR_TYPE 219 // or 226 +``` 2. Setup SDA/SCL Pin - see at the readme bottom → ### I2C Configuration (Mandatory) @@ -142,23 +142,23 @@ custom_usermods = ${env:d1_mini.custom_usermods} INA2XX_v2 3. Configure parameters in the web interface or predefine them in my_config.h: -> ```cpp -> #define INA2XX_ENABLED false -> #define INA2XX_I2C_ADDRESS 0x40 -> #define INA2XX_CHECK_INTERVAL 5 -> #define INA2XX_CONVERSION_TIME BIT_MODE_12 // or CONV_TIME_1100 -> #define INA2XX_DECIMAL_FACTOR 3 -> #define INA2XX_SHUNT_RESISTOR 0.1 -> #define INA2XX_CORRECTION_FACTOR 1.0 -> #define INA2XX_BUSRANGE BRNG_32 // INA219 only -> #define INA2XX_P_GAIN PG_320 // INA219 only -> #define INA2XX_SHUNT_VOLT_OFFSET 0.0 // INA219 only -> #define INA2XX_AVERAGES AVERAGE_1 // INA226 only -> #define INA2XX_RANGE 1.3 // INA226 only -> #define INA2XX_MQTT_PUBLISH false -> #define INA2XX_MQTT_PUBLISH_ALWAYS false -> #define INA2XX_HA_DISCOVERY false -> ``` +```cpp +#define INA2XX_ENABLED false +#define INA2XX_I2C_ADDRESS 0x40 +#define INA2XX_CHECK_INTERVAL 5 +#define INA2XX_CONVERSION_TIME BIT_MODE_12 // or CONV_TIME_1100 +#define INA2XX_DECIMAL_FACTOR 3 +#define INA2XX_SHUNT_RESISTOR 0.1 +#define INA2XX_CORRECTION_FACTOR 1.0 +#define INA2XX_BUSRANGE BRNG_32 // INA219 only +#define INA2XX_P_GAIN PG_320 // INA219 only +#define INA2XX_SHUNT_VOLT_OFFSET 0.0 // INA219 only +#define INA2XX_AVERAGES AVERAGE_1 // INA226 only +#define INA2XX_RANGE 1.3 // INA226 only +#define INA2XX_MQTT_PUBLISH false +#define INA2XX_MQTT_PUBLISH_ALWAYS false +#define INA2XX_HA_DISCOVERY false +``` 4. Monitor your energy consumption through the WLED interface or via MQTT. From be77287bd113fc71b704fc29cf6d21c1439a45ae Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sun, 8 Jun 2025 19:48:27 +0200 Subject: [PATCH 53/70] Fix numbering in Usage steps --- usermods/ina2xx_v2/Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usermods/ina2xx_v2/Readme.md b/usermods/ina2xx_v2/Readme.md index 800dac4445..6f23de67a2 100644 --- a/usermods/ina2xx_v2/Readme.md +++ b/usermods/ina2xx_v2/Readme.md @@ -140,7 +140,7 @@ custom_usermods = ${env:d1_mini.custom_usermods} INA2XX_v2 3. Enable the usermod in WLED’s web interface (Settings → Usermod → INA2XX). -3. Configure parameters in the web interface or predefine them in my_config.h: +4. Configure parameters in the web interface or predefine them in my_config.h: ```cpp #define INA2XX_ENABLED false @@ -160,7 +160,7 @@ custom_usermods = ${env:d1_mini.custom_usermods} INA2XX_v2 #define INA2XX_HA_DISCOVERY false ``` -4. Monitor your energy consumption through the WLED interface or via MQTT. +5. Monitor your energy consumption through the WLED interface or via MQTT. ## Energy Calculation From be0d1cacd9817902e67f92d8eba43b47d0f22232 Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sun, 8 Jun 2025 20:45:52 +0200 Subject: [PATCH 54/70] Update Usermod to support INA226 --- usermods/ina2xx_v2/img/usermod_settings.png | Bin 21480 -> 0 bytes usermods/ina2xx_v2/ina2xx_v2.cpp | 1676 +++++++++---------- usermods/ina2xx_v2/ina2xx_v2.h | 194 +++ usermods/ina2xx_v2/library.json | 3 + 4 files changed, 1019 insertions(+), 854 deletions(-) delete mode 100644 usermods/ina2xx_v2/img/usermod_settings.png create mode 100644 usermods/ina2xx_v2/ina2xx_v2.h diff --git a/usermods/ina2xx_v2/img/usermod_settings.png b/usermods/ina2xx_v2/img/usermod_settings.png deleted file mode 100644 index 6412bd37222bcbdc57342ed85e1a74bcdf07370c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21480 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 - -#define UPDATE_CONFIG(obj, key, var, fmt) \ - do { \ - auto _tmp = var; \ - if ( getJsonValue((obj)[(key)], _tmp) ) { \ - if (_tmp != var) { \ - _logUsermodInaSensor("%s updated to: " fmt, key, _tmp);\ - var = _tmp; \ - } \ - } else { \ - configComplete = false; \ - } \ - } while(0) - -class UsermodINA2xx : public Usermod { -private: - static const char _name[]; // Name of the usermod - - bool initDone = false; // Flag for successful initialization - unsigned long lastCheck = 0; // Timestamp for the last check - bool alreadyLoggedDisabled = false; - - // Define the variables using the pre-defined or default values - bool enabled = INA219_ENABLED; - uint8_t _i2cAddress = INA219_I2C_ADDRESS; - uint16_t _checkInterval = INA219_CHECK_INTERVAL; // seconds - uint32_t checkInterval = static_cast(_checkInterval) * 1000UL; // ms - INA219_ADC_MODE conversionTime = static_cast(INA219_CONVERSION_TIME); - uint8_t _decimalFactor = INA219_DECIMAL_FACTOR; - float shuntResistor = INA219_SHUNT_RESISTOR; - float correctionFactor = INA219_CORRECTION_FACTOR; - INA219_PGAIN pGain = static_cast(INA219_P_GAIN); - INA219_BUS_RANGE busRange = static_cast(INA219_BUSRANGE); - float shuntVoltOffset_mV = INA219_SHUNT_VOLT_OFFSET; - bool mqttPublish = INA219_MQTT_PUBLISH; - bool mqttPublishSent = !INA219_MQTT_PUBLISH; - bool mqttPublishAlways = INA219_MQTT_PUBLISH_ALWAYS; - bool haDiscovery = INA219_HA_DISCOVERY; - bool haDiscoverySent = !INA219_HA_DISCOVERY; - - // Variables to store sensor readings - float busVoltage = 0; - float current = 0; - float current_mA = 0; - float power = 0; - float power_mW = 0; - float shuntVoltage = 0; - float loadVoltage = 0; - bool overflow = false; - - // Last sent variables - float last_sent_shuntVoltage = 0; - float last_sent_busVoltage = 0; - float last_sent_loadVoltage = 0; - float last_sent_current = 0; - float last_sent_current_mA = 0; - float last_sent_power = 0; - float last_sent_power_mW = 0; - bool last_sent_overflow = false; - - float dailyEnergy_kWh = 0.0; // Daily energy in kWh - float monthlyEnergy_kWh = 0.0; // Monthly energy in kWh - float totalEnergy_kWh = 0.0; // Total energy in kWh - unsigned long lastPublishTime = 0; // Track the last publish time - - // Variables to store last reset timestamps - unsigned long dailyResetTime = 0; - unsigned long monthlyResetTime = 0; - - bool mqttStateRestored = false; - - INA219_WE *_ina2xx = nullptr; // INA2xx sensor object - - // Function to truncate decimals based on the configured decimal factor - float roundDecimals(float val) { - _logUsermodInaSensor("Truncating value %.6f with factor %d", val, _decimalFactor); - if (_decimalFactor == 0) { - return roundf(val); - } + static const float factorLUT[4] = {1.f, 10.f, 100.f, 1000.f}; + float factor = (_decimalFactor <= 3) ? factorLUT[_decimalFactor] + : powf(10.0f, _decimalFactor); - static const float factorLUT[4] = {1.f, 10.f, 100.f, 1000.f}; - float factor = (_decimalFactor <= 3) ? factorLUT[_decimalFactor] - : powf(10.0f, _decimalFactor); + return roundf(val * factor) / factor; +} - return roundf(val * factor) / factor; +bool UsermodINA2xx::hasSignificantChange(float oldValue, float newValue, float threshold) { + bool changed = fabsf(oldValue - newValue) > threshold; + if (changed) { + _logUsermodInaSensor("Significant change detected: old=%.6f, new=%.6f, diff=%.6f", oldValue, newValue, fabsf(oldValue - newValue)); } + return changed; +} + +bool UsermodINA2xx::hasValueChanged() { + bool changed = hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || + hasSignificantChange(last_sent_busVoltage, busVoltage) || + hasSignificantChange(last_sent_loadVoltage, loadVoltage) || + hasSignificantChange(last_sent_current, current) || + hasSignificantChange(last_sent_current_mA, current_mA) || + hasSignificantChange(last_sent_power, power) || + hasSignificantChange(last_sent_power_mW, power_mW) || + (last_sent_overflow != overflow); - bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f) { - bool changed = fabsf(oldValue - newValue) > threshold; if (changed) { - _logUsermodInaSensor("Significant change detected: old=%.6f, new=%.6f, diff=%.6f", oldValue, newValue, fabsf(oldValue - newValue)); + _logUsermodInaSensor("Values changed, need to publish"); } return changed; - } +} - bool hasValueChanged() { - bool changed = hasSignificantChange(last_sent_shuntVoltage, shuntVoltage) || - hasSignificantChange(last_sent_busVoltage, busVoltage) || - hasSignificantChange(last_sent_loadVoltage, loadVoltage) || - hasSignificantChange(last_sent_current, current) || - hasSignificantChange(last_sent_current_mA, current_mA) || - hasSignificantChange(last_sent_power, power) || - hasSignificantChange(last_sent_power_mW, power_mW) || - (last_sent_overflow != overflow); +// Update INA2xx settings and reinitialize sensor if necessary +bool UsermodINA2xx::updateINA2xxSettings() { + _logUsermodInaSensor("Updating INA2xx sensor settings"); - if (changed) { - _logUsermodInaSensor("Values changed, need to publish"); - } - return changed; + // Validate I2C pins; if invalid, disable usermod and log message + if (i2c_scl < 0 || i2c_sda < 0) { + enabled = false; + _logUsermodInaSensor("INA2xx disabled: Invalid I2C pins. Check global I2C settings."); + return false; + } + _logUsermodInaSensor("Using I2C SDA: %d", i2c_sda); + _logUsermodInaSensor("Using I2C SCL: %d", i2c_scl); + + // Reinitialize the INA2xx instance with updated settings + if (_ina2xx != nullptr) { + _logUsermodInaSensor("Freeing existing INA2xx instance"); + delete _ina2xx; + _ina2xx = nullptr; } - // Update INA2xx settings and reinitialize sensor if necessary - bool updateINA2xxSettings() { - _logUsermodInaSensor("Updating INA2xx sensor settings"); + if (!enabled) return true; - // Validate I2C pins; if invalid, disable usermod and log message - if (i2c_scl < 0 || i2c_sda < 0) { - enabled = false; - _logUsermodInaSensor("INA2xx disabled: Invalid I2C pins. Check global I2C settings."); - return false; - } - _logUsermodInaSensor("Using I2C SDA: %d", i2c_sda); - _logUsermodInaSensor("Using I2C SCL: %d", i2c_scl); - - // Reinitialize the INA2xx instance with updated settings - if (_ina2xx != nullptr) { - _logUsermodInaSensor("Freeing existing INA2xx instance"); - delete _ina2xx; - _ina2xx = nullptr; - } + _logUsermodInaSensor("Creating new INA2xx instance with address 0x%02X", _i2cAddress); + _ina2xx = new INA_SENSOR_CLASS(_i2cAddress); - if (!enabled) return true; + if (!_ina2xx) { + _logUsermodInaSensor("Failed to allocate memory for INA2xx sensor!"); + enabled = false; + return false; + } - _logUsermodInaSensor("Creating new INA2xx instance with address 0x%02X", _i2cAddress); - _ina2xx = new INA219_WE(_i2cAddress); + _logUsermodInaSensor("Initializing INA2xx sensor"); + if (!_ina2xx->init()) { + _logUsermodInaSensor("INA2xx initialization failed!"); + enabled = false; + delete _ina2xx; + _ina2xx = nullptr; + return false; + } - if (!_ina2xx) { - _logUsermodInaSensor("Failed to allocate memory for INA2xx sensor!"); - enabled = false; - return false; - } + _logUsermodInaSensor("Setting correction factor to %.4f", correctionFactor); + _ina2xx->setCorrectionFactor(correctionFactor); - _logUsermodInaSensor("Initializing INA2xx sensor"); - if (!_ina2xx->init()) { - _logUsermodInaSensor("INA2xx initialization failed!"); - enabled = false; - delete _ina2xx; - _ina2xx = nullptr; - return false; - } +#if INA_SENSOR_TYPE == 219 + _logUsermodInaSensor("Setting shunt resistor to %.4f Ohms", shuntResistor); + _ina2xx->setShuntSizeInOhms(shuntResistor); - _logUsermodInaSensor("Setting shunt resistor to %.4f Ohms", shuntResistor); - _ina2xx->setShuntSizeInOhms(shuntResistor); + _logUsermodInaSensor("Setting ADC mode to %d", conversionTime); + _ina2xx->setADCMode(conversionTime); - _logUsermodInaSensor("Setting ADC mode to %d", conversionTime); - _ina2xx->setADCMode(conversionTime); + _logUsermodInaSensor("Setting PGA gain to %d", pGain); + _ina2xx->setPGain(pGain); - _logUsermodInaSensor("Setting correction factor to %.4f", correctionFactor); - _ina2xx->setCorrectionFactor(correctionFactor); + _logUsermodInaSensor("Setting bus range to %d", busRange); + _ina2xx->setBusRange(busRange); - _logUsermodInaSensor("Setting PGA gain to %d", pGain); - _ina2xx->setPGain(pGain); + _logUsermodInaSensor("Setting shunt voltage offset to %.3f mV", shuntVoltOffset_mV); + _ina2xx->setShuntVoltOffset_mV(shuntVoltOffset_mV); - _logUsermodInaSensor("Setting bus range to %d", busRange); - _ina2xx->setBusRange(busRange); +#elif INA_SENSOR_TYPE == 226 - _logUsermodInaSensor("Setting shunt voltage offset to %.3f mV", shuntVoltOffset_mV); - _ina2xx->setShuntVoltOffset_mV(shuntVoltOffset_mV); + _ina2xx->setMeasureMode(CONTINUOUS); + _ina2xx->setAverage(average); + _ina2xx->setConversionTime(conversionTime); + _ina2xx->setResistorRange(shuntResistor,currentRange); // choose resistor 100 mOhm (default )and gain range up to 10 A (1.3A default) - _logUsermodInaSensor("INA2xx sensor configured successfully"); + _ina2xx->readAndClearFlags(); - return true; - } + _ina2xx->waitUntilConversionCompleted(); //if you comment this line the first data might be zero +#endif - // Sanitize the mqttClientID by replacing invalid characters. - String sanitizeMqttClientID(const String &clientID) { - String sanitizedID; - _logUsermodInaSensor("Sanitizing MQTT client ID: %s", clientID.c_str()); - - for (unsigned int i = 0; i < clientID.length(); i++) { - char c = clientID[i]; - - // Handle common accented characters using simple mapping - if (c == '\xC3' && i + 1 < clientID.length()) { - char next = clientID[i + 1]; - if (next == '\xBC' || next == '\x9C') { // ü or Ü - sanitizedID += (next == '\xBC' ? "u" : "U"); - i++; - continue; - } else if (next == '\xA4' || next == '\xC4') { // ä or Ä - sanitizedID += (next == '\xA4' ? "a" : "A"); - i++; - continue; - } else if (next == '\xB6' || next == '\xD6') { // ö or Ö - sanitizedID += (next == '\xB6' ? "o" : "O"); - i++; - continue; - } else if (next == '\x9F') { // ß - sanitizedID += "s"; - i++; - continue; - } - } - // Allow valid characters [a-zA-Z0-9_-] - if ((c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (c >= '0' && c <= '9') || - c == '-' || c == '_') { - sanitizedID += c; - } else { // Replace any other invalid character with an underscore - sanitizedID += '_'; + _logUsermodInaSensor("INA2xx sensor configured successfully"); + return true; +} + +// Sanitize the mqttClientID by replacing invalid characters. +String UsermodINA2xx::sanitizeMqttClientID(const String &clientID) { + String sanitizedID; + _logUsermodInaSensor("Sanitizing MQTT client ID: %s", clientID.c_str()); + + for (unsigned int i = 0; i < clientID.length(); i++) { + char c = clientID[i]; + + // Handle common accented characters using simple mapping + if (c == '\xC3' && i + 1 < clientID.length()) { + char next = clientID[i + 1]; + if (next == '\xBC' || next == '\x9C') { // ü or Ü + sanitizedID += (next == '\xBC' ? "u" : "U"); + i++; + continue; + } else if (next == '\xA4' || next == '\xC4') { // ä or Ä + sanitizedID += (next == '\xA4' ? "a" : "A"); + i++; + continue; + } else if (next == '\xB6' || next == '\xD6') { // ö or Ö + sanitizedID += (next == '\xB6' ? "o" : "O"); + i++; + continue; + } else if (next == '\x9F') { // ß + sanitizedID += "s"; + i++; + continue; } } - _logUsermodInaSensor("Sanitized MQTT client ID: %s", sanitizedID.c_str()); - return sanitizedID; - } - - /** - ** Function to update energy calculations based on power and duration - **/ - void updateEnergy(float power, unsigned long durationMs) { - float durationHours = durationMs / 3600000.0; // Milliseconds to hours - _logUsermodInaSensor("Updating energy - Power: %.3f W, Duration: %lu ms (%.6f hours)", power, durationMs, durationHours); - - // Skip negligible power values to avoid accumulating rounding errors - if (power < 0.01) { - _logUsermodInaSensor("SKIPPED: Power too low (%.3f W) — skipping to avoid rounding errors.", power); - return; + // Allow valid characters [a-zA-Z0-9_-] + if ((c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + c == '-' || c == '_') { + sanitizedID += c; + } else { // Replace any other invalid character with an underscore + sanitizedID += '_'; } + } + _logUsermodInaSensor("Sanitized MQTT client ID: %s", sanitizedID.c_str()); + return sanitizedID; +} + +/** +** Function to update energy calculations based on power and duration +**/ +void UsermodINA2xx::updateEnergy(float power, unsigned long durationMs) { + float durationHours = durationMs / 3600000.0; // Milliseconds to hours + _logUsermodInaSensor("Updating energy - Power: %.3f W, Duration: %lu ms (%.6f hours)", power, durationMs, durationHours); + + // Skip negligible power values to avoid accumulating rounding errors + if (power < 0.01) { + _logUsermodInaSensor("SKIPPED: Power too low (%.3f W) — skipping to avoid rounding errors.", power); + return; + } - float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) - _logUsermodInaSensor("Calculated energy: %.6f kWh", energy_kWh); + float energy_kWh = (power / 1000.0) * durationHours; // Watts to kilowatt-hours (kWh) + _logUsermodInaSensor("Calculated energy: %.6f kWh", energy_kWh); - // Skip negative values or unrealistic spikes - if (energy_kWh < 0 || energy_kWh > 10.0) { // 10 kWh in a few seconds is unrealistic - _logUsermodInaSensor("SKIPPED: Energy value out of range (%.6f kWh)", energy_kWh); - return; - } + // Skip negative values or unrealistic spikes + if (energy_kWh < 0 || energy_kWh > 10.0) { // 10 kWh in a few seconds is unrealistic + _logUsermodInaSensor("SKIPPED: Energy value out of range (%.6f kWh)", energy_kWh); + return; + } - totalEnergy_kWh += energy_kWh; // Update total energy consumed - _logUsermodInaSensor("Total energy updated to: %.6f kWh", totalEnergy_kWh); + totalEnergy_kWh += energy_kWh; // Update total energy consumed + _logUsermodInaSensor("Total energy updated to: %.6f kWh", totalEnergy_kWh); - // Calculate day identifier (days since epoch) - long currentDay = localTime / 86400; - _logUsermodInaSensor("Current day: %ld, Last reset day: %lu", currentDay, dailyResetTime); + // Calculate day identifier (days since epoch) + long currentDay = localTime / 86400; + _logUsermodInaSensor("Current day: %ld, Last reset day: %lu", currentDay, dailyResetTime); - // Reset daily energy at midnight or if day changed - if ((hour(localTime) == 0 && minute(localTime) == 0 && dailyResetTime != currentDay) || - (currentDay > dailyResetTime && dailyResetTime > 0)) { - _logUsermodInaSensor("Resetting daily energy counter (day change detected)"); - dailyEnergy_kWh = 0; - dailyResetTime = currentDay; - } - dailyEnergy_kWh += energy_kWh; - _logUsermodInaSensor("Daily energy updated to: %.6f kWh", dailyEnergy_kWh); - - // Calculate month identifier (year*12 + month) - long currentMonth = year(localTime) * 12 + month(localTime) - 1; // month() is 1-12 - _logUsermodInaSensor("Current month: %ld, Last reset month: %lu", currentMonth, monthlyResetTime); - - // Reset monthly energy on first day of month or if month changed - if ((day(localTime) == 1 && hour(localTime) == 0 && minute(localTime) == 0 && - monthlyResetTime != currentMonth) || (currentMonth > monthlyResetTime && monthlyResetTime > 0)) { - _logUsermodInaSensor("Resetting monthly energy counter (month change detected)"); - monthlyEnergy_kWh = 0; - monthlyResetTime = currentMonth; - } - monthlyEnergy_kWh += energy_kWh; - _logUsermodInaSensor("Monthly energy updated to: %.6f kWh", monthlyEnergy_kWh); + // Reset daily energy at midnight or if day changed + if ((hour(localTime) == 0 && minute(localTime) == 0 && dailyResetTime != currentDay) || + (currentDay > dailyResetTime && dailyResetTime > 0)) { + _logUsermodInaSensor("Resetting daily energy counter (day change detected)"); + dailyEnergy_kWh = 0; + dailyResetTime = currentDay; + } + dailyEnergy_kWh += energy_kWh; + _logUsermodInaSensor("Daily energy updated to: %.6f kWh", dailyEnergy_kWh); + + // Calculate month identifier (year*12 + month) + long currentMonth = year(localTime) * 12 + month(localTime) - 1; // month() is 1-12 + _logUsermodInaSensor("Current month: %ld, Last reset month: %lu", currentMonth, monthlyResetTime); + + // Reset monthly energy on first day of month or if month changed + if ((day(localTime) == 1 && hour(localTime) == 0 && minute(localTime) == 0 && + monthlyResetTime != currentMonth) || (currentMonth > monthlyResetTime && monthlyResetTime > 0)) { + _logUsermodInaSensor("Resetting monthly energy counter (month change detected)"); + monthlyEnergy_kWh = 0; + monthlyResetTime = currentMonth; } + monthlyEnergy_kWh += energy_kWh; + _logUsermodInaSensor("Monthly energy updated to: %.6f kWh", monthlyEnergy_kWh); +} #ifndef WLED_DISABLE_MQTT - /** - ** Function to publish INA2xx sensor data to MQTT - **/ - void publishMqtt(float shuntVoltage, float busVoltage, float loadVoltage, - float current, float current_mA, float power, - float power_mW, bool overflow) { - if (!WLED_MQTT_CONNECTED) { - _logUsermodInaSensor("MQTT not connected, skipping publish"); - return; - } +/** +** Function to publish INA2xx sensor data to MQTT +**/ +void UsermodINA2xx::publishMqtt(float shuntVoltage, float busVoltage, float loadVoltage, + float current, float current_mA, float power, + float power_mW, bool overflow) { + if (!WLED_MQTT_CONNECTED) { + _logUsermodInaSensor("MQTT not connected, skipping publish"); + return; + } - _logUsermodInaSensor("Publishing sensor data to MQTT"); - - // Create a JSON document to hold sensor data - StaticJsonDocument<1024> jsonDoc; - - // Populate the JSON document with sensor readings - jsonDoc["shunt_voltage_mV"] = shuntVoltage; - jsonDoc["bus_voltage_V"] = busVoltage; - jsonDoc["load_voltage_V"] = loadVoltage; - jsonDoc["current_A"] = current; - jsonDoc["current_mA"] = current_mA; - jsonDoc["power_W"] = power; - jsonDoc["power_mW"] = power_mW; - jsonDoc["overflow"] = overflow; - jsonDoc["shunt_resistor_Ohms"] = shuntResistor; - - if (mqttStateRestored) { // only add energy_kWh fields after retained state arrives from mqtt - // Energy calculations - jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; - jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; - jsonDoc["total_energy_kWh"] = totalEnergy_kWh; - } else { - _logUsermodInaSensor("Skipping energy fields until MQTT state restored"); - } + _logUsermodInaSensor("Publishing sensor data to MQTT"); + + // Create a JSON document to hold sensor data + StaticJsonDocument<1024> jsonDoc; + + // Populate the JSON document with sensor readings + jsonDoc["shunt_voltage_mV"] = shuntVoltage; + jsonDoc["bus_voltage_V"] = busVoltage; + jsonDoc["load_voltage_V"] = loadVoltage; + jsonDoc["current_A"] = current; + jsonDoc["current_mA"] = current_mA; + jsonDoc["power_W"] = power; + jsonDoc["power_mW"] = power_mW; + jsonDoc["overflow"] = overflow; + jsonDoc["shunt_resistor_Ohms"] = shuntResistor; + + if (mqttStateRestored) { // only add energy_kWh fields after retained state arrives from mqtt + // Energy calculations + jsonDoc["daily_energy_kWh"] = dailyEnergy_kWh; + jsonDoc["monthly_energy_kWh"] = monthlyEnergy_kWh; + jsonDoc["total_energy_kWh"] = totalEnergy_kWh; + } else { + _logUsermodInaSensor("Skipping energy fields until MQTT state restored"); + } - // Reset timestamps - jsonDoc["dailyResetTime"] = dailyResetTime; - jsonDoc["monthlyResetTime"] = monthlyResetTime; + // Reset timestamps + jsonDoc["dailyResetTime"] = dailyResetTime; + jsonDoc["monthlyResetTime"] = monthlyResetTime; - // Serialize the JSON document into a character buffer - char buffer[1024]; - size_t payload_size = serializeJson(jsonDoc, buffer, sizeof(buffer)); + // Serialize the JSON document into a character buffer + char buffer[1024]; + size_t payload_size = serializeJson(jsonDoc, buffer, sizeof(buffer)); - if (payload_size >= sizeof(buffer) - 1) { - _logUsermodInaSensor("JSON serialization truncated – buffer too small (%u bytes)", sizeof(buffer)); - } + if (payload_size >= sizeof(buffer) - 1) { + _logUsermodInaSensor("JSON serialization truncated – buffer too small (%u bytes)", sizeof(buffer)); + } - // Construct the MQTT topic using the device topic - char topic[128]; - snprintf_P(topic, sizeof(topic), "%s/sensor/ina2xx", mqttDeviceTopic); - _logUsermodInaSensor("MQTT topic: %s", topic); - - // Publish the serialized JSON data to the specified MQTT topic - mqtt->publish(topic, 0, true, buffer, payload_size); - _logUsermodInaSensor("MQTT publish complete, payload size: %d bytes", payload_size); - } - - /** - ** Function to create Home Assistant sensor configuration - **/ - void mqttCreateHassSensor(const String &name, const String &topic, - const String &deviceClass, const String &unitOfMeasurement, - const String &jsonKey, const String &SensorType) { - String sanitizedName = name; - sanitizedName.replace(' ', '-'); - _logUsermodInaSensor("Creating HA sensor: %s", sanitizedName.c_str()); - - String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); - sanitizedMqttClientID += "-" + String(escapedMac.c_str()); - - // Create a JSON document for the sensor configuration - StaticJsonDocument<1024> doc; - - // Populate the JSON document with sensor configuration details - doc[F("name")] = name; - doc[F("stat_t")] = topic; - - String uid = escapedMac.c_str(); - uid += "_" + sanitizedName; - doc[F("uniq_id")] = uid; - _logUsermodInaSensor("Sensor unique ID: %s", uid.c_str()); - - // Template to extract specific value from JSON - doc[F("val_tpl")] = String("{{ value_json.") + jsonKey + String(" }}"); - if (unitOfMeasurement != "") - doc[F("unit_of_meas")] = unitOfMeasurement; - if (deviceClass != "") - doc[F("dev_cla")] = deviceClass; - if (SensorType != "binary_sensor") - doc[F("exp_aft")] = 1800; - - // Device details nested object - JsonObject device = doc.createNestedObject(F("device")); - device[F("name")] = serverDescription; - device[F("ids")] = serverDescription; - device[F("mf")] = F(WLED_BRAND); - device[F("mdl")] = F(WLED_PRODUCT_NAME); - device[F("sw")] = versionString; - #ifdef ESP32 - device[F("hw")] = F("esp32"); - #else - device[F("hw")] = F("esp8266"); - #endif - JsonArray connections = device[F("cns")].createNestedArray(); - connections.add(F("mac")); - connections.add(WiFi.macAddress()); - - // Serialize the JSON document into a temporary string - char buffer[1024]; - size_t payload_size = serializeJson(doc, buffer, sizeof(buffer)); - - if (payload_size >= sizeof(buffer) - 1) { - _logUsermodInaSensor("HA config JSON truncated – buffer too small (%u bytes)", sizeof(buffer)); - } + // Construct the MQTT topic using the device topic + char topic[128]; + snprintf_P(topic, sizeof(topic), "%s/sensor/ina2xx", mqttDeviceTopic); + _logUsermodInaSensor("MQTT topic: %s", topic); + + // Publish the serialized JSON data to the specified MQTT topic + mqtt->publish(topic, 0, true, buffer, payload_size); + _logUsermodInaSensor("MQTT publish complete, payload size: %d bytes", payload_size); +} + +/** +** Function to create Home Assistant sensor configuration +**/ +void UsermodINA2xx::mqttCreateHassSensor(const String &name, const String &topic, + const String &deviceClass, const String &unitOfMeasurement, + const String &jsonKey, const String &SensorType) { + String sanitizedName = name; + sanitizedName.replace(' ', '-'); + _logUsermodInaSensor("Creating HA sensor: %s", sanitizedName.c_str()); + + String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); + sanitizedMqttClientID += "-" + String(escapedMac.c_str()); + + // Create a JSON document for the sensor configuration + StaticJsonDocument<1024> doc; + + // Populate the JSON document with sensor configuration details + doc[F("name")] = name; + doc[F("stat_t")] = topic; + + String uid = escapedMac.c_str(); + uid += "_" + sanitizedName; + doc[F("uniq_id")] = uid; + _logUsermodInaSensor("Sensor unique ID: %s", uid.c_str()); + doc[F("val_tpl")] = String("{{ value_json.") + jsonKey + String(" }}"); + if (unitOfMeasurement != "") + doc[F("unit_of_meas")] = unitOfMeasurement; + if (deviceClass != "") + doc[F("dev_cla")] = deviceClass; + if (SensorType != "binary_sensor") + doc[F("exp_aft")] = 1800; + + // Device details nested object + JsonObject device = doc.createNestedObject(F("device")); + device[F("name")] = serverDescription; + device[F("ids")] = serverDescription; + device[F("mf")] = F(WLED_BRAND); + device[F("mdl")] = F(WLED_PRODUCT_NAME); + device[F("sw")] = versionString; + #ifdef ESP32 + device[F("hw")] = F("esp32"); + #else + device[F("hw")] = F("esp8266"); + #endif + JsonArray connections = device[F("cns")].createNestedArray(); + connections.add(F("mac")); + connections.add(WiFi.macAddress()); - char topic_S[128]; - int length = snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); - if (length >= sizeof(topic_S)) { - _logUsermodInaSensor("HA topic truncated - potential buffer overflow"); - } + // Serialize the JSON document into a temporary string + char buffer[1024]; + size_t payload_size = serializeJson(doc, buffer, sizeof(buffer)); - // Debug output for the Home Assistant topic and configuration - _logUsermodInaSensor("Topic: %s", topic_S); - _logUsermodInaSensor("Buffer: %s", buffer); + if (payload_size >= sizeof(buffer) - 1) { + _logUsermodInaSensor("HA config JSON truncated – buffer too small (%u bytes)", sizeof(buffer)); + } - // Publish the sensor configuration to Home Assistant - mqtt->publish(topic_S, 0, true, buffer, payload_size); - _logUsermodInaSensor("Home Assistant sensor %s created", sanitizedName.c_str()); + char topic_S[128]; + int length = snprintf_P(topic_S, sizeof(topic_S), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); + if (length >= sizeof(topic_S)) { + _logUsermodInaSensor("HA topic truncated - potential buffer overflow"); } - void mqttRemoveHassSensor(const String &name, const String &SensorType) { - String sanitizedName = name; - sanitizedName.replace(' ', '-'); - _logUsermodInaSensor("Removing HA sensor: %s", sanitizedName.c_str()); + // Debug output for the Home Assistant topic and configuration + _logUsermodInaSensor("Topic: %s", topic_S); + _logUsermodInaSensor("Buffer: %s", buffer); + + // Publish the sensor configuration to Home Assistant + mqtt->publish(topic_S, 0, true, buffer, payload_size); + _logUsermodInaSensor("Home Assistant sensor %s created", sanitizedName.c_str()); +} + +void UsermodINA2xx::mqttRemoveHassSensor(const String &name, const String &SensorType) { + String sanitizedName = name; + sanitizedName.replace(' ', '-'); + _logUsermodInaSensor("Removing HA sensor: %s", sanitizedName.c_str()); - String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); - sanitizedMqttClientID += "-" + String(escapedMac.c_str()); + String sanitizedMqttClientID = sanitizeMqttClientID(mqttClientID); + sanitizedMqttClientID += "-" + String(escapedMac.c_str()); - char sensorTopic[128]; - int length = snprintf_P(sensorTopic, sizeof(sensorTopic), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); - if (length >= sizeof(sensorTopic)) { - _logUsermodInaSensor("HA sensor topic truncated - potential buffer overflow"); + char sensorTopic[128]; + int length = snprintf_P(sensorTopic, sizeof(sensorTopic), "homeassistant/%s/%s/%s/config", SensorType.c_str(), sanitizedMqttClientID.c_str(), sanitizedName.c_str()); + if (length >= sizeof(sensorTopic)) { + _logUsermodInaSensor("HA sensor topic truncated - potential buffer overflow"); + } + + // Publish an empty message with retain to delete the sensor from Home Assistant + mqtt->publish(sensorTopic, 0, true, ""); + _logUsermodInaSensor("Published empty message to remove sensor: %s", sensorTopic); +} + +/** +** Function to publish sensor data to MQTT +**/ +bool UsermodINA2xx::onMqttMessage(char* topic, char* payload) { + if (!WLED_MQTT_CONNECTED || !enabled) return false; + + // Check if the message is for the correct topic + if (strstr(topic, "/sensor/ina2xx") != nullptr) { + _logUsermodInaSensor("MQTT message received on INA2xx topic"); + StaticJsonDocument<512> jsonDoc; + + // Parse the JSON payload + DeserializationError error = deserializeJson(jsonDoc, payload); + if (error) { + _logUsermodInaSensor("JSON Parse Error: %s", error.c_str()); + return false; } - // Publish an empty message with retain to delete the sensor from Home Assistant - mqtt->publish(sensorTopic, 0, true, ""); - _logUsermodInaSensor("Published empty message to remove sensor: %s", sensorTopic); + // Update the energy values + if (!mqttStateRestored) { + // Only merge in retained MQTT values once! + if (jsonDoc.containsKey("daily_energy_kWh")) { + float restored = jsonDoc["daily_energy_kWh"]; + if (!isnan(restored)) { + dailyEnergy_kWh += restored; + _logUsermodInaSensor("Merged daily energy from MQTT: +%.6f kWh => %.6f kWh", restored, dailyEnergy_kWh); + } + } + if (jsonDoc.containsKey("monthly_energy_kWh")) { + float restored = jsonDoc["monthly_energy_kWh"]; + if (!isnan(restored)) { + monthlyEnergy_kWh += restored; + _logUsermodInaSensor("Merged monthly energy from MQTT: +%.6f kWh => %.6f kWh", restored, monthlyEnergy_kWh); + } + } + if (jsonDoc.containsKey("total_energy_kWh")) { + float restored = jsonDoc["total_energy_kWh"]; + if (!isnan(restored)) { + totalEnergy_kWh += restored; + _logUsermodInaSensor("Merged total energy from MQTT: +%.6f kWh => %.6f kWh", restored, totalEnergy_kWh); + } + } + mqttStateRestored = true; // Only do this once! + } + return true; } + return false; +} + +/** +** Subscribe to MQTT topic for controlling the usermod +**/ +void UsermodINA2xx::onMqttConnect(bool sessionPresent) { + if (!enabled) return; + if (WLED_MQTT_CONNECTED) { + char subuf[64]; + if (mqttDeviceTopic[0] != 0) { + strcpy(subuf, mqttDeviceTopic); + strcat_P(subuf, PSTR("/sensor/ina2xx")); + mqtt->subscribe(subuf, 0); + _logUsermodInaSensor("Subscribed to MQTT topic: %s", subuf); + } + } +} #endif -public: - // Destructor to clean up INA2xx object - ~UsermodINA2xx() { - if (_ina2xx) { - _logUsermodInaSensor("Cleaning up INA2xx sensor object"); - delete _ina2xx; - _ina2xx = nullptr; - } +// Destructor to clean up INA2xx object +UsermodINA2xx::~UsermodINA2xx() { + if (_ina2xx) { + _logUsermodInaSensor("Cleaning up INA2xx sensor object"); + delete _ina2xx; + _ina2xx = nullptr; } +} + +// Setup function called once on boot or restart +void UsermodINA2xx::setup() { + _logUsermodInaSensor("Setting up INA2xx sensor usermod"); + initDone = updateINA2xxSettings(); // Configure INA2xx settings + if (initDone) { + _logUsermodInaSensor("INA2xx setup complete and successful"); + } else { + _logUsermodInaSensor("INA2xx setup failed"); + } +} + +#if INA_SENSOR_TYPE == 226 +void UsermodINA2xx::checkForI2cErrors(){ + byte errorCode = _ina2xx->getI2cErrorCode(); + if(errorCode){ + Serial.print("I2C error: "); + Serial.println(errorCode); + _logUsermodInaSensor("I2C error: %s", errorCode); + switch(errorCode){ + case 1: + _logUsermodInaSensor("Data too long to fit in transmit buffer"); + break; + case 2: + _logUsermodInaSensor("Received NACK on transmit of address"); + break; + case 3: + _logUsermodInaSensor("Received NACK on transmit of data"); + break; + case 4: + _logUsermodInaSensor("Other error"); + break; + case 5: + _logUsermodInaSensor("Timeout"); + break; + default: + _logUsermodInaSensor("Can't identify the error"); + } + if(errorCode){ + while(1){} + } + } +} +#endif - // Setup function called once on boot or restart - void setup() override { - _logUsermodInaSensor("Setting up INA2xx sensor usermod"); - initDone = updateINA2xxSettings(); // Configure INA2xx settings - if (initDone) { - _logUsermodInaSensor("INA2xx setup complete and successful"); - } else { - _logUsermodInaSensor("INA2xx setup failed"); - } +// Loop function called continuously +void UsermodINA2xx::loop() { + // Check if the usermod is enabled and the check interval has elapsed + if (!enabled || !initDone || !_ina2xx || millis() - lastCheck < checkInterval) { + return; } - // Loop function called continuously - void loop() override { - // Check if the usermod is enabled and the check interval has elapsed - if (!enabled || !initDone || !_ina2xx || millis() - lastCheck < checkInterval) { - return; - } + lastCheck = millis(); + _logUsermodInaSensor("Reading sensor data at %lu ms", lastCheck); - lastCheck = millis(); - _logUsermodInaSensor("Reading sensor data at %lu ms", lastCheck); - - // Fetch sensor data - shuntVoltage = roundDecimals(_ina2xx->getShuntVoltage_mV()); - busVoltage = roundDecimals(_ina2xx->getBusVoltage_V()); - - float rawCurrent_mA = _ina2xx->getCurrent_mA(); - current_mA = roundDecimals(rawCurrent_mA); - current = roundDecimals(rawCurrent_mA / 1000.0); // Convert from mA to A - - float rawPower_mW = _ina2xx->getBusPower(); - power_mW = roundDecimals(rawPower_mW); - power = roundDecimals(rawPower_mW / 1000.0); // Convert from mW to W - - loadVoltage = roundDecimals(busVoltage + (shuntVoltage / 1000)); - overflow = _ina2xx->getOverflow() != 0; - - _logUsermodInaSensor("Sensor readings - Shunt: %.3f mV, Bus: %.3f V, Load: %.3f V", shuntVoltage, busVoltage, loadVoltage); - _logUsermodInaSensor("Sensor readings - Current: %.3f A (%.3f mA), Power: %.3f W (%.3f mW)", current, current_mA, power, power_mW); - _logUsermodInaSensor("Overflow status: %s", overflow ? "TRUE" : "FALSE"); - - // Update energy consumption - if (lastPublishTime != 0) { - if (power >= 0) { - // Handle millis() overflow when calculating duration - unsigned long duration = (lastCheck >= lastPublishTime) - ? (lastCheck - lastPublishTime) - : (0xFFFFFFFFUL - lastPublishTime + lastCheck + 1); - updateEnergy(power, duration); - } else { - _logUsermodInaSensor("Skipping energy update due to negative power: %.3f W", power); - } - } else { - _logUsermodInaSensor("First reading - establishing baseline for energy calculation"); - } - lastPublishTime = lastCheck; + // Fetch sensor data + shuntVoltage = roundDecimals(_ina2xx->getShuntVoltage_mV()); + busVoltage = roundDecimals(_ina2xx->getBusVoltage_V()); - #ifndef WLED_DISABLE_MQTT - // Publish sensor data via MQTT if connected and enabled - if (WLED_MQTT_CONNECTED) { - if (mqttPublish) { - if (mqttPublishAlways || hasValueChanged()) { - _logUsermodInaSensor("Publishing MQTT data (always=%d, changed=%d)", mqttPublishAlways, hasValueChanged()); - publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); - - last_sent_shuntVoltage = shuntVoltage; - last_sent_busVoltage = busVoltage; - last_sent_loadVoltage = loadVoltage; - last_sent_current = current; - last_sent_current_mA = current_mA; - last_sent_power = power; - last_sent_power_mW = power_mW; - last_sent_overflow = overflow; - - mqttPublishSent = true; - } else { - _logUsermodInaSensor("No significant change in values, skipping MQTT publish"); - } - } else if (!mqttPublish && mqttPublishSent) { - _logUsermodInaSensor("MQTT publishing disabled, removing previous retained message"); - char sensorTopic[128]; - snprintf_P(sensorTopic, 127, "%s/sensor/ina2xx", mqttDeviceTopic); - - // Publishing an empty retained message to delete the sensor from Home Assistant - mqtt->publish(sensorTopic, 0, true, ""); - mqttPublishSent = false; - } - } + float rawCurrent_mA = _ina2xx->getCurrent_mA(); + current_mA = roundDecimals(rawCurrent_mA); + current = roundDecimals(rawCurrent_mA / 1000.0); // Convert from mA to A - // Publish Home Assistant discovery data if enabled - if (haDiscovery && !haDiscoverySent) { - if (WLED_MQTT_CONNECTED) { - _logUsermodInaSensor("Setting up Home Assistant discovery"); - char topic[128]; - snprintf_P(topic, 127, "%s/sensor/ina2xx", mqttDeviceTopic); // Common topic for all INA2xx data - - mqttCreateHassSensor(F("Current"), topic, F("current"), F("A"), F("current_A"), F("sensor")); - mqttCreateHassSensor(F("Voltage"), topic, F("voltage"), F("V"), F("bus_voltage_V"), F("sensor")); - mqttCreateHassSensor(F("Power"), topic, F("power"), F("W"), F("power_W"), F("sensor")); - mqttCreateHassSensor(F("Shunt Voltage"), topic, F("voltage"), F("mV"), F("shunt_voltage_mV"), F("sensor")); - mqttCreateHassSensor(F("Shunt Resistor"), topic, F(""), F("Ω"), F("shunt_resistor_Ohms"), F("sensor")); - mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("sensor")); - mqttCreateHassSensor(F("Daily Energy"), topic, F("energy"), F("kWh"), F("daily_energy_kWh"), F("sensor")); - mqttCreateHassSensor(F("Monthly Energy"), topic, F("energy"), F("kWh"), F("monthly_energy_kWh"), F("sensor")); - mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); - - haDiscoverySent = true; // Mark as sent to avoid repeating - _logUsermodInaSensor("Home Assistant discovery complete"); - } - } else if (!haDiscovery && haDiscoverySent) { - if (WLED_MQTT_CONNECTED) { - _logUsermodInaSensor("Removing Home Assistant discovery sensors"); - // Remove previously created sensors - mqttRemoveHassSensor(F("Current"), F("sensor")); - mqttRemoveHassSensor(F("Voltage"), F("sensor")); - mqttRemoveHassSensor(F("Power"), F("sensor")); - mqttRemoveHassSensor(F("Shunt Voltage"), F("sensor")); - mqttRemoveHassSensor(F("Daily Energy"), F("sensor")); - mqttRemoveHassSensor(F("Monthly Energy"), F("sensor")); - mqttRemoveHassSensor(F("Total Energy"), F("sensor")); - mqttRemoveHassSensor(F("Shunt Resistor"), F("sensor")); - mqttRemoveHassSensor(F("Overflow"), F("sensor")); - - haDiscoverySent = false; // Mark as sent to avoid repeating - _logUsermodInaSensor("Home Assistant discovery removal complete"); - } + float rawPower_mW = _ina2xx->getBusPower(); + power_mW = roundDecimals(rawPower_mW); + power = roundDecimals(rawPower_mW / 1000.0); // Convert from mW to W + + loadVoltage = roundDecimals(busVoltage + (shuntVoltage / 1000)); + +#if INA_SENSOR_TYPE == 219 + overflow = _ina2xx->getOverflow() != 0; +#elif INA_SENSOR_TYPE == 226 + overflow = _ina2xx->overflow; + checkForI2cErrors(); +#endif + + _logUsermodInaSensor("Sensor readings - Shunt: %.3f mV, Bus: %.3f V, Load: %.3f V", shuntVoltage, busVoltage, loadVoltage); + _logUsermodInaSensor("Sensor readings - Current: %.3f A (%.3f mA), Power: %.3f W (%.3f mW)", current, current_mA, power, power_mW); + _logUsermodInaSensor("Overflow status: %s", overflow ? "TRUE" : "FALSE"); + + // Update energy consumption + if (lastPublishTime != 0) { + if (power >= 0) { + // Handle millis() overflow when calculating duration + unsigned long duration = (lastCheck >= lastPublishTime) + ? (lastCheck - lastPublishTime) + : (0xFFFFFFFFUL - lastPublishTime + lastCheck + 1); + updateEnergy(power, duration); + } else { + _logUsermodInaSensor("Skipping energy update due to negative power: %.3f W", power); } - #endif + } else { + _logUsermodInaSensor("First reading - establishing baseline for energy calculation"); } + lastPublishTime = lastCheck; #ifndef WLED_DISABLE_MQTT - /** - ** Function to publish sensor data to MQTT - **/ - bool onMqttMessage(char* topic, char* payload) override { - if (!WLED_MQTT_CONNECTED || !enabled) return false; - - // Check if the message is for the correct topic - if (strstr(topic, "/sensor/ina2xx") != nullptr) { - _logUsermodInaSensor("MQTT message received on INA2xx topic"); - StaticJsonDocument<512> jsonDoc; - - // Parse the JSON payload - DeserializationError error = deserializeJson(jsonDoc, payload); - if (error) { - _logUsermodInaSensor("JSON Parse Error: %s", error.c_str()); - return false; + // Publish sensor data via MQTT if connected and enabled + if (WLED_MQTT_CONNECTED) { + if (mqttPublish) { + if (mqttPublishAlways || hasValueChanged()) { + _logUsermodInaSensor("Publishing MQTT data (always=%d, changed=%d)", mqttPublishAlways, hasValueChanged()); + publishMqtt(shuntVoltage, busVoltage, loadVoltage, current, current_mA, power, power_mW, overflow); + + last_sent_shuntVoltage = shuntVoltage; + last_sent_busVoltage = busVoltage; + last_sent_loadVoltage = loadVoltage; + last_sent_current = current; + last_sent_current_mA = current_mA; + last_sent_power = power; + last_sent_power_mW = power_mW; + last_sent_overflow = overflow; + + mqttPublishSent = true; + } else { + _logUsermodInaSensor("No significant change in values, skipping MQTT publish"); } + } else if (!mqttPublish && mqttPublishSent) { + _logUsermodInaSensor("MQTT publishing disabled, removing previous retained message"); + char sensorTopic[128]; + snprintf_P(sensorTopic, 127, "%s/sensor/ina2xx", mqttDeviceTopic); - // Update the energy values - if (!mqttStateRestored) { - // Only merge in retained MQTT values once! - if (jsonDoc.containsKey("daily_energy_kWh")) { - float restored = jsonDoc["daily_energy_kWh"]; - if (!isnan(restored)) { - dailyEnergy_kWh += restored; - _logUsermodInaSensor("Merged daily energy from MQTT: +%.6f kWh => %.6f kWh", restored, dailyEnergy_kWh); - } - } - if (jsonDoc.containsKey("monthly_energy_kWh")) { - float restored = jsonDoc["monthly_energy_kWh"]; - if (!isnan(restored)) { - monthlyEnergy_kWh += restored; - _logUsermodInaSensor("Merged monthly energy from MQTT: +%.6f kWh => %.6f kWh", restored, monthlyEnergy_kWh); - } - } - if (jsonDoc.containsKey("total_energy_kWh")) { - float restored = jsonDoc["total_energy_kWh"]; - if (!isnan(restored)) { - totalEnergy_kWh += restored; - _logUsermodInaSensor("Merged total energy from MQTT: +%.6f kWh => %.6f kWh", restored, totalEnergy_kWh); - } - } - mqttStateRestored = true; // Only do this once! - } - return true; + // Publishing an empty retained message to delete the sensor from Home Assistant + mqtt->publish(sensorTopic, 0, true, ""); + mqttPublishSent = false; } - return false; } - /** - ** Subscribe to MQTT topic for controlling the usermod - **/ - void onMqttConnect(bool sessionPresent) override { - if (!enabled) return; + // Publish Home Assistant discovery data if enabled + if (haDiscovery && !haDiscoverySent) { if (WLED_MQTT_CONNECTED) { - char subuf[64]; - if (mqttDeviceTopic[0] != 0) { - strcpy(subuf, mqttDeviceTopic); - strcat_P(subuf, PSTR("/sensor/ina2xx")); - mqtt->subscribe(subuf, 0); - _logUsermodInaSensor("Subscribed to MQTT topic: %s", subuf); - } + _logUsermodInaSensor("Setting up Home Assistant discovery"); + char topic[128]; + snprintf_P(topic, 127, "%s/sensor/ina2xx", mqttDeviceTopic); // Common topic for all INA2xx data + + mqttCreateHassSensor(F("Current"), topic, F("current"), F("A"), F("current_A"), F("sensor")); + mqttCreateHassSensor(F("Voltage"), topic, F("voltage"), F("V"), F("bus_voltage_V"), F("sensor")); + mqttCreateHassSensor(F("Power"), topic, F("power"), F("W"), F("power_W"), F("sensor")); + mqttCreateHassSensor(F("Shunt Voltage"), topic, F("voltage"), F("mV"), F("shunt_voltage_mV"), F("sensor")); + mqttCreateHassSensor(F("Shunt Resistor"), topic, F(""), F("Ω"), F("shunt_resistor_Ohms"), F("sensor")); + mqttCreateHassSensor(F("Overflow"), topic, F(""), F(""), F("overflow"), F("sensor")); + mqttCreateHassSensor(F("Daily Energy"), topic, F("energy"), F("kWh"), F("daily_energy_kWh"), F("sensor")); + mqttCreateHassSensor(F("Monthly Energy"), topic, F("energy"), F("kWh"), F("monthly_energy_kWh"), F("sensor")); + mqttCreateHassSensor(F("Total Energy"), topic, F("energy"), F("kWh"), F("total_energy_kWh"), F("sensor")); + + haDiscoverySent = true; // Mark as sent to avoid repeating + _logUsermodInaSensor("Home Assistant discovery complete"); + } + } else if (!haDiscovery && haDiscoverySent) { + if (WLED_MQTT_CONNECTED) { + _logUsermodInaSensor("Removing Home Assistant discovery sensors"); + // Remove previously created sensors + mqttRemoveHassSensor(F("Current"), F("sensor")); + mqttRemoveHassSensor(F("Voltage"), F("sensor")); + mqttRemoveHassSensor(F("Power"), F("sensor")); + mqttRemoveHassSensor(F("Shunt Voltage"), F("sensor")); + mqttRemoveHassSensor(F("Shunt Resistor"), F("sensor")); + mqttRemoveHassSensor(F("Overflow"), F("sensor")); + mqttRemoveHassSensor(F("Daily Energy"), F("sensor")); + mqttRemoveHassSensor(F("Monthly Energy"), F("sensor")); + mqttRemoveHassSensor(F("Total Energy"), F("sensor")); + + haDiscoverySent = false; // Mark as sent to avoid repeating + _logUsermodInaSensor("Home Assistant discovery removal complete"); } } #endif +} + +/** +** Add energy consumption data to a JSON object for reporting +**/ +void UsermodINA2xx::addToJsonInfo(JsonObject &root) { + JsonObject user = root[F("u")]; + if (user.isNull()) { + user = root.createNestedObject(F("u")); + } - /** - ** Add energy consumption data to a JSON object for reporting - **/ - void addToJsonInfo(JsonObject &root) { - JsonObject user = root[F("u")]; - if (user.isNull()) { - user = root.createNestedObject(F("u")); - } - - JsonArray energy_json = user.createNestedArray(F("INA2xx:")); + JsonArray energy_json = user.createNestedArray(F("INA2xx:")); - if (!enabled || !initDone) { - energy_json.add(F("disabled")); - if (!alreadyLoggedDisabled) { - _logUsermodInaSensor("Adding disabled status to JSON info"); - alreadyLoggedDisabled = true; - } - return; - } - alreadyLoggedDisabled = false; - - // File needs to be UTF-8 to show an arrow that points down and right instead of an question mark - // Create a nested array for daily energy - JsonArray dailyEnergy_json = user.createNestedArray(F("⤷ Daily Energy")); - dailyEnergy_json.add(dailyEnergy_kWh); - dailyEnergy_json.add(F(" kWh")); - - // Create a nested array for monthly energy - JsonArray monthlyEnergy_json = user.createNestedArray(F("⤷ Monthly Energy")); - monthlyEnergy_json.add(monthlyEnergy_kWh); - monthlyEnergy_json.add(F(" kWh")); - - // Create a nested array for total energy - JsonArray totalEnergy_json = user.createNestedArray(F("⤷ Total Energy")); - totalEnergy_json.add(totalEnergy_kWh); - totalEnergy_json.add(F(" kWh")); - - _logUsermodInaSensor("Added energy data to JSON info: daily=%.6f, monthly=%.6f, total=%.6f kWh", dailyEnergy_kWh, monthlyEnergy_kWh, totalEnergy_kWh); - } - - /** - ** Add the current state of energy consumption to a JSON object - **/ - void addToJsonState(JsonObject& root) override { - if (!enabled) return; - if (!initDone) { - _logUsermodInaSensor("Not adding to JSON state - initialization not complete"); - return; + if (!enabled || !initDone) { + energy_json.add(F("disabled")); + if (!alreadyLoggedDisabled) { + _logUsermodInaSensor("Adding disabled status to JSON info"); + alreadyLoggedDisabled = true; } + return; + } + alreadyLoggedDisabled = false; + + // File needs to be UTF-8 to show an arrow that points down and right instead of an question mark + // Create a nested array for daily energy + JsonArray dailyEnergy_json = user.createNestedArray(F("⤷ Daily Energy")); + dailyEnergy_json.add(dailyEnergy_kWh); + dailyEnergy_json.add(F(" kWh")); + + // Create a nested array for monthly energy + JsonArray monthlyEnergy_json = user.createNestedArray(F("⤷ Monthly Energy")); + monthlyEnergy_json.add(monthlyEnergy_kWh); + monthlyEnergy_json.add(F(" kWh")); + + // Create a nested array for total energy + JsonArray totalEnergy_json = user.createNestedArray(F("⤷ Total Energy")); + totalEnergy_json.add(totalEnergy_kWh); + totalEnergy_json.add(F(" kWh")); + + _logUsermodInaSensor("Added energy data to JSON info: daily=%.6f, monthly=%.6f, total=%.6f kWh", dailyEnergy_kWh, monthlyEnergy_kWh, totalEnergy_kWh); +} + +/** +** Add the current state of energy consumption to a JSON object +**/ +void UsermodINA2xx::addToJsonState(JsonObject& root) { + if (!enabled) return; + if (!initDone) { + _logUsermodInaSensor("Not adding to JSON state - initialization not complete"); + return; + } - JsonObject usermod = root[FPSTR(_name)]; - if (usermod.isNull()) { - usermod = root.createNestedObject(FPSTR(_name)); - } + JsonObject usermod = root[FPSTR(_name)]; + if (usermod.isNull()) { + usermod = root.createNestedObject(FPSTR(_name)); + } - usermod["enabled"] = enabled; - usermod["shuntVoltage_mV"] = shuntVoltage; - usermod["busVoltage_V"] = busVoltage; - usermod["loadVoltage_V"] = loadVoltage; - usermod["current_A"] = current; - usermod["current_mA"] = current_mA; - usermod["power_W"] = power; - usermod["power_mW"] = power_mW; - usermod["overflow"] = overflow; - usermod["totalEnergy_kWh"] = totalEnergy_kWh; - usermod["dailyEnergy_kWh"] = dailyEnergy_kWh; - usermod["monthlyEnergy_kWh"] = monthlyEnergy_kWh; - usermod["dailyResetTime"] = dailyResetTime; - usermod["monthlyResetTime"] = monthlyResetTime; - - _logUsermodInaSensor("Added sensor readings to JSON state: V=%.3fV, I=%.3fA, P=%.3fW", loadVoltage, current, power); - } - - /** - ** Read energy consumption data from a JSON object - **/ - void readFromJsonState(JsonObject& root) override { - if (!enabled) return; - if (!initDone) { // Prevent crashes on boot if initialization is not done - _logUsermodInaSensor("Not reading from JSON state - initialization not complete"); - return; - } + usermod["enabled"] = enabled; + usermod["shuntVoltage_mV"] = shuntVoltage; + usermod["busVoltage_V"] = busVoltage; + usermod["loadVoltage_V"] = loadVoltage; + usermod["current_A"] = current; + usermod["current_mA"] = current_mA; + usermod["power_W"] = power; + usermod["power_mW"] = power_mW; + usermod["overflow"] = overflow; + usermod["totalEnergy_kWh"] = totalEnergy_kWh; + usermod["dailyEnergy_kWh"] = dailyEnergy_kWh; + usermod["monthlyEnergy_kWh"] = monthlyEnergy_kWh; + usermod["dailyResetTime"] = dailyResetTime; + usermod["monthlyResetTime"] = monthlyResetTime; + + _logUsermodInaSensor("Added sensor readings to JSON state: V=%.3fV, I=%.3fA, P=%.3fW", loadVoltage, current, power); +} + +/** +** Read energy consumption data from a JSON object +**/ +void UsermodINA2xx::readFromJsonState(JsonObject& root) { + if (!enabled) return; + if (!initDone) { // Prevent crashes on boot if initialization is not done + _logUsermodInaSensor("Not reading from JSON state - initialization not complete"); + return; + } - JsonObject usermod = root[FPSTR(_name)]; - if (!usermod.isNull()) { - // Read values from JSON or retain existing values if not present - if (usermod.containsKey("enabled")) { - bool prevEnabled = enabled; - enabled = usermod["enabled"] | enabled; - if (prevEnabled != enabled) { - _logUsermodInaSensor("Enabled state changed: %s", enabled ? "enabled" : "disabled"); - } + JsonObject usermod = root[FPSTR(_name)]; + if (!usermod.isNull()) { + // Read values from JSON or retain existing values if not present + if (usermod.containsKey("enabled")) { + bool prevEnabled = enabled; + enabled = usermod["enabled"] | enabled; + if (prevEnabled != enabled) { + _logUsermodInaSensor("Enabled state changed: %s", enabled ? "enabled" : "disabled"); } + } - if (usermod.containsKey("totalEnergy_kWh")) { - float prevTotal = totalEnergy_kWh; - totalEnergy_kWh = usermod["totalEnergy_kWh"] | totalEnergy_kWh; - if (totalEnergy_kWh != prevTotal) { - _logUsermodInaSensor("Total energy updated from JSON: %.6f kWh", totalEnergy_kWh); - } + if (usermod.containsKey("totalEnergy_kWh")) { + float prevTotal = totalEnergy_kWh; + totalEnergy_kWh = usermod["totalEnergy_kWh"] | totalEnergy_kWh; + if (totalEnergy_kWh != prevTotal) { + _logUsermodInaSensor("Total energy updated from JSON: %.6f kWh", totalEnergy_kWh); } + } - if (usermod.containsKey("dailyEnergy_kWh")) { - float prevDaily = dailyEnergy_kWh; - dailyEnergy_kWh = usermod["dailyEnergy_kWh"] | dailyEnergy_kWh; - if (dailyEnergy_kWh != prevDaily) { - _logUsermodInaSensor("Daily energy updated from JSON: %.6f kWh", dailyEnergy_kWh); - } + if (usermod.containsKey("dailyEnergy_kWh")) { + float prevDaily = dailyEnergy_kWh; + dailyEnergy_kWh = usermod["dailyEnergy_kWh"] | dailyEnergy_kWh; + if (dailyEnergy_kWh != prevDaily) { + _logUsermodInaSensor("Daily energy updated from JSON: %.6f kWh", dailyEnergy_kWh); } + } - if (usermod.containsKey("monthlyEnergy_kWh")) { - float prevMonthly = monthlyEnergy_kWh; - monthlyEnergy_kWh = usermod["monthlyEnergy_kWh"] | monthlyEnergy_kWh; - if (monthlyEnergy_kWh != prevMonthly) { - _logUsermodInaSensor("Monthly energy updated from JSON: %.6f kWh", monthlyEnergy_kWh); - } + if (usermod.containsKey("monthlyEnergy_kWh")) { + float prevMonthly = monthlyEnergy_kWh; + monthlyEnergy_kWh = usermod["monthlyEnergy_kWh"] | monthlyEnergy_kWh; + if (monthlyEnergy_kWh != prevMonthly) { + _logUsermodInaSensor("Monthly energy updated from JSON: %.6f kWh", monthlyEnergy_kWh); } + } - if (usermod.containsKey("dailyResetTime")) { - unsigned long prevDailyReset = dailyResetTime; - dailyResetTime = usermod["dailyResetTime"] | dailyResetTime; - if (dailyResetTime != prevDailyReset) { - _logUsermodInaSensor("Daily reset time updated from JSON: %lu", dailyResetTime); - } + if (usermod.containsKey("dailyResetTime")) { + unsigned long prevDailyReset = dailyResetTime; + dailyResetTime = usermod["dailyResetTime"] | dailyResetTime; + if (dailyResetTime != prevDailyReset) { + _logUsermodInaSensor("Daily reset time updated from JSON: %lu", dailyResetTime); } + } - if (usermod.containsKey("monthlyResetTime")) { - unsigned long prevMonthlyReset = monthlyResetTime; - monthlyResetTime = usermod["monthlyResetTime"] | monthlyResetTime; - if (monthlyResetTime != prevMonthlyReset) { - _logUsermodInaSensor("Monthly reset time updated from JSON: %lu", monthlyResetTime); - } + if (usermod.containsKey("monthlyResetTime")) { + unsigned long prevMonthlyReset = monthlyResetTime; + monthlyResetTime = usermod["monthlyResetTime"] | monthlyResetTime; + if (monthlyResetTime != prevMonthlyReset) { + _logUsermodInaSensor("Monthly reset time updated from JSON: %lu", monthlyResetTime); } - } else { - _logUsermodInaSensor("No usermod data found in JSON state"); } + } else { + _logUsermodInaSensor("No usermod data found in JSON state"); } +} + +/** +** Append configuration options to the Usermod menu. +**/ +void UsermodINA2xx::addToConfig(JsonObject& root) { + JsonObject top = root.createNestedObject(F("INA2xx")); + top["Enabled"] = enabled; + top["i2c_address"] = static_cast(_i2cAddress); + top["check_interval"] = checkInterval / 1000; + top["conversion_time"] = conversionTime; + top["decimals"] = _decimalFactor; + top["shunt_resistor"] = shuntResistor; + top["correction_factor"] = correctionFactor; +#if INA_SENSOR_TYPE == 219 + top["pga_gain"] = pGain; + top["bus_range"] = busRange; + top["shunt_offset"] = shuntVoltOffset_mV; +#elif INA_SENSOR_TYPE == 226 + top["average"] = average; + top["currentRange"] = currentRange; +#endif - /** - ** Append configuration options to the Usermod menu. - **/ - void addToConfig(JsonObject& root) override { - JsonObject top = root.createNestedObject(F("INA2xx")); - top["Enabled"] = enabled; - top["i2c_address"] = static_cast(_i2cAddress); - top["check_interval"] = checkInterval / 1000; - top["conversion_time"] = conversionTime; - top["decimals"] = _decimalFactor; - top["shunt_resistor"] = shuntResistor; - top["correction_factor"] = correctionFactor; - top["pga_gain"] = pGain; - top["bus_range"] = busRange; - top["shunt_offset"] = shuntVoltOffset_mV; - - #ifndef WLED_DISABLE_MQTT - // Store MQTT settings if MQTT is not disabled - top["mqtt_publish"] = mqttPublish; - top["mqtt_publish_always"] = mqttPublishAlways; - top["ha_discovery"] = haDiscovery; - #endif - } - - /** - ** Append configuration UI data for the usermod menu. - **/ - void appendConfigData() override { - // Append the dropdown for I2C address selection - oappend("dd=addDropdown('INA2xx','i2c_address');"); - oappend("addOption(dd,'0x40 - Default',0x40, true);"); - oappend("addOption(dd,'0x41 - A0 soldered',0x41);"); - oappend("addOption(dd,'0x44 - A1 soldered',0x44);"); - oappend("addOption(dd,'0x45 - A0 and A1 soldered',0x45);"); - - // Append the dropdown for ADC mode (resolution + samples) - oappend("ct=addDropdown('INA2xx','conversion_time');"); - oappend("addOption(ct,'9-Bit (84 µs)',0);"); - oappend("addOption(ct,'10-Bit (148 µs)',1);"); - oappend("addOption(ct,'11-Bit (276 µs)',2);"); - oappend("addOption(ct,'12-Bit (532 µs)',3, true);"); - oappend("addOption(ct,'2 samples (1.06 ms)',9);"); - oappend("addOption(ct,'4 samples (2.13 ms)',10);"); - oappend("addOption(ct,'8 samples (4.26 ms)',11);"); - oappend("addOption(ct,'16 samples (8.51 ms)',12);"); - oappend("addOption(ct,'32 samples (17.02 ms)',13);"); - oappend("addOption(ct,'64 samples (34.05 ms)',14);"); - oappend("addOption(ct,'128 samples (68.10 ms)',15);"); - - // Append the dropdown for decimal precision (0 to 3) - oappend("df=addDropdown('INA2xx','decimals');"); - for (int i = 0; i <= 3; i++) { - oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); - } +#ifndef WLED_DISABLE_MQTT + // Store MQTT settings if MQTT is not disabled + top["mqtt_publish"] = mqttPublish; + top["mqtt_publish_always"] = mqttPublishAlways; + top["ha_discovery"] = haDiscovery; +#endif +} + +/** +** Append configuration UI data for the usermod menu. +**/ +void UsermodINA2xx::appendConfigData() { + // Append the dropdown for I2C address selection + oappend("dd=addDropdown('INA2xx','i2c_address');"); + oappend("addOption(dd,'0x40 - Default',0x40, true);"); + oappend("addOption(dd,'0x41 - A0 soldered',0x41);"); + oappend("addOption(dd,'0x44 - A1 soldered',0x44);"); + oappend("addOption(dd,'0x45 - A0 and A1 soldered',0x45);"); + + // Append the dropdown for decimal precision (0 to 3) + oappend("df=addDropdown('INA2xx','decimals');"); + for (int i = 0; i <= 3; i++) { + oappend(String("addOption(df,'" + String(i) + "'," + String(i) + (i == 2 ? ", true);" : ");")).c_str()); + } - oappend("pg=addDropdown('INA2xx','pga_gain');"); - oappend("addOption(pg,'40mV',0);"); - oappend("addOption(pg,'80mV',2048);"); - oappend("addOption(pg,'160mV',4096);"); - oappend("addOption(pg,'320mV',6144, true);"); - - oappend("br=addDropdown('INA2xx','bus_range');"); - oappend("addOption(br,'16V',0);"); - oappend("addOption(br,'32V',8192, true);"); - } - - /** - ** Read settings from the Usermod menu configuration - **/ - bool readFromConfig(JsonObject& root) override { - JsonObject top = root[FPSTR(_name)]; - - bool configComplete = !top.isNull(); - - _logUsermodInaSensor("Checking if configuration has changed:"); - UPDATE_CONFIG(top, "Enabled", enabled, "%u"); - UPDATE_CONFIG(top, "i2c_address", _i2cAddress, "0x%02X"); - UPDATE_CONFIG(top, "conversion_time", conversionTime, "%u"); - UPDATE_CONFIG(top, "decimals", _decimalFactor, "%u"); - UPDATE_CONFIG(top, "shunt_resistor", shuntResistor, "%.6f Ohms"); - UPDATE_CONFIG(top, "correction_factor", correctionFactor, "%.3f"); - UPDATE_CONFIG(top, "pga_gain", pGain, "%d"); - UPDATE_CONFIG(top, "bus_range", busRange, "%d"); - UPDATE_CONFIG(top, "shunt_offset", shuntVoltOffset_mV,"%.3f mV"); - - #ifndef WLED_DISABLE_MQTT - UPDATE_CONFIG(top, "mqtt_publish", mqttPublish, "%u"); - UPDATE_CONFIG(top, "mqtt_publish_always", mqttPublishAlways, "%u"); - - bool tempHaDiscovery = haDiscovery; - UPDATE_CONFIG(top, "ha_discovery", haDiscovery, "%u"); - if (haDiscovery != tempHaDiscovery) haDiscoverySent = !haDiscovery; - #endif - - uint16_t tempInterval = 0; - if (getJsonValue(top[F("check_interval")], tempInterval)) { - if (1 <= tempInterval && tempInterval <= 600) { - uint32_t newInterval = static_cast(tempInterval) * 1000UL; - if (newInterval != checkInterval) { - _logUsermodInaSensor("Check interval updated to: %u ms", newInterval); - checkInterval = newInterval; - } - } else { - _logUsermodInaSensor("Invalid check_interval value %u; using default %u seconds", tempInterval, INA219_CHECK_INTERVAL); - checkInterval = static_cast(_checkInterval) * 1000UL; +#if INA_SENSOR_TYPE == 219 + // Append the dropdown for ADC mode (resolution + samples) + oappend("ct=addDropdown('INA2xx','conversion_time');"); + oappend("addOption(ct,'9-Bit (84 µs)',0);"); + oappend("addOption(ct,'10-Bit (148 µs)',1);"); + oappend("addOption(ct,'11-Bit (276 µs)',2);"); + oappend("addOption(ct,'12-Bit (532 µs) (default)',3, true);"); + oappend("addOption(ct,'2 samples (1.06 ms)',9);"); + oappend("addOption(ct,'4 samples (2.13 ms)',10);"); + oappend("addOption(ct,'8 samples (4.26 ms)',11);"); + oappend("addOption(ct,'16 samples (8.51 ms)',12);"); + oappend("addOption(ct,'32 samples (17.02 ms)',13);"); + oappend("addOption(ct,'64 samples (34.05 ms)',14);"); + oappend("addOption(ct,'128 samples (68.10 ms)',15);"); +#elif INA_SENSOR_TYPE == 226 + oappend("ct=addDropdown('INA2xx','conversion_time');"); + oappend("addOption(ct,'140 µs',0);"); + oappend("addOption(ct,'204 µs',1);"); + oappend("addOption(ct,'332 µs',2);"); + oappend("addOption(ct,'588 µs',3);"); + oappend("addOption(ct,'1.1 ms (default)',4, true);"); + oappend("addOption(ct,'2.116 ms',5);"); + oappend("addOption(ct,'4.156 ms',6);"); + oappend("addOption(ct,'8.244 ms',7);"); +#endif + + //INA226 + oappend("dda=addDropdown('INA2xx','average');"); + oappend("addOption(dda,'1 (default)',0, true);"); + oappend("addOption(dda,'4',512);"); + oappend("addOption(dda,'16',1024);"); + oappend("addOption(dda,'64',1536);"); + oappend("addOption(dda,'128',2048);"); + oappend("addOption(dda,'256',2560);"); + oappend("addOption(dda,'512',3072);"); + oappend("addOption(dda,'1024',3584);"); + + oappend("df = addDropdown('INA2xx','currentRange');"); + for (int i = 1; i <= 100; i++) { + float amp = i * 0.1f; // 0.1, 0.2, …, 10.0 + String strVal = String(amp, 1); // “0.1”, “0.2”, …, “1.3”, …, “10.0” + + // Make “1.3” the default + bool selected = (fabs(amp - 1.3f) < 0.001f); + + // Build the label: e.g. “1.3A (default)” or “3.7A” + String label = strVal + "A"; + if (selected) label += " (default)"; + + // addOption(df,'3.7A',3.7); + String line = String("addOption(df,'") + + label + + "'," + + strVal + + (selected ? ", true);" : ");"); + oappend(line.c_str()); + } + + //INA219 + oappend("pg=addDropdown('INA2xx','pga_gain');"); + oappend("addOption(pg,'40mV',0);"); + oappend("addOption(pg,'80mV',2048);"); + oappend("addOption(pg,'160mV',4096);"); + oappend("addOption(pg,'320mV (default)',6144, true);"); + + oappend("br=addDropdown('INA2xx','bus_range');"); + oappend("addOption(br,'16V',0);"); + oappend("addOption(br,'32V (default)',8192, true);"); +} + +/** +** Read settings from the Usermod menu configuration +**/ +bool UsermodINA2xx::readFromConfig(JsonObject& root) { + JsonObject top = root[FPSTR(_name)]; + + bool configComplete = !top.isNull(); + + _logUsermodInaSensor("Checking if configuration has changed:"); + UPDATE_CONFIG(top, "Enabled", enabled, "%u"); + UPDATE_CONFIG(top, "i2c_address", _i2cAddress, "0x%02X"); + UPDATE_CONFIG(top, "conversion_time", conversionTime, "%u"); + UPDATE_CONFIG(top, "decimals", _decimalFactor, "%u"); + UPDATE_CONFIG(top, "shunt_resistor", shuntResistor, "%.6f Ohms"); + UPDATE_CONFIG(top, "correction_factor", correctionFactor, "%.3f"); +#if INA_SENSOR_TYPE == 219 + UPDATE_CONFIG(top, "pga_gain", pGain, "%d"); + UPDATE_CONFIG(top, "bus_range", busRange, "%d"); + UPDATE_CONFIG(top, "shunt_offset", shuntVoltOffset_mV,"%.3f mV"); +#elif INA_SENSOR_TYPE == 226 + UPDATE_CONFIG(top, "average", average, "%d"); + UPDATE_CONFIG(top, "currentRange", currentRange, "%d"); +#endif + +#ifndef WLED_DISABLE_MQTT + UPDATE_CONFIG(top, "mqtt_publish", mqttPublish, "%u"); + UPDATE_CONFIG(top, "mqtt_publish_always", mqttPublishAlways, "%u"); + + bool tempHaDiscovery = haDiscovery; + UPDATE_CONFIG(top, "ha_discovery", haDiscovery, "%u"); + if (haDiscovery != tempHaDiscovery) haDiscoverySent = !haDiscovery; +#endif + + uint16_t tempInterval = 0; + if (getJsonValue(top[F("check_interval")], tempInterval)) { + if (1 <= tempInterval && tempInterval <= 600) { + uint32_t newInterval = static_cast(tempInterval) * 1000UL; + if (newInterval != checkInterval) { + _logUsermodInaSensor("Check interval updated to: %u ms", newInterval); + checkInterval = newInterval; } } else { - configComplete = false; + _logUsermodInaSensor("Invalid check_interval value %u; using default %u seconds", tempInterval, INA2XX_CHECK_INTERVAL); + checkInterval = static_cast(_checkInterval) * 1000UL; } + } else { + configComplete = false; + } - bool prevInitDone = initDone; - initDone = updateINA2xxSettings(); // Configure INA2xx settings - - if (prevInitDone != initDone) { - _logUsermodInaSensor("Sensor initialization %s", initDone ? "succeeded" : "failed"); - } + bool prevInitDone = initDone; + initDone = updateINA2xxSettings(); // Configure INA2xx settings - return configComplete; + if (prevInitDone != initDone) { + _logUsermodInaSensor("Sensor initialization %s", initDone ? "succeeded" : "failed"); } - - /** - ** Get the unique identifier for this usermod. - **/ - uint16_t getId() override { - return USERMOD_ID_INA2XX; - } -}; -const char UsermodINA2xx::_name[] PROGMEM = "INA2xx"; + return configComplete; +} -static UsermodINA2xx ina2xx_v2; -REGISTER_USERMOD(ina2xx_v2); \ No newline at end of file +/** +** Get the unique identifier for this usermod. +**/ +uint16_t UsermodINA2xx::getId() { + return USERMOD_ID_INA2XX; +} \ No newline at end of file diff --git a/usermods/ina2xx_v2/ina2xx_v2.h b/usermods/ina2xx_v2/ina2xx_v2.h new file mode 100644 index 0000000000..19c746928b --- /dev/null +++ b/usermods/ina2xx_v2/ina2xx_v2.h @@ -0,0 +1,194 @@ +// Configurable settings for the INA2xx Usermod +#pragma once + +#include "wled.h" + +// Choose sensor type: 219 or 226 +#ifndef INA_SENSOR_TYPE + #define INA_SENSOR_TYPE 219 +#endif + +#if INA_SENSOR_TYPE == 219 + #include + using INA_SENSOR_CLASS = INA219_WE; +#elif INA_SENSOR_TYPE == 226 + #include + using INA_SENSOR_CLASS = INA226_WE; +#else + #error "INA_SENSOR_TYPE must be 219 or 226" +#endif + +// logging macro: +#define _logUsermodInaSensor(fmt, ...) \ + DEBUG_PRINTF("[INA2xx_Sensor] " fmt "\n", ##__VA_ARGS__) + +#ifndef INA2XX_ENABLED + #define INA2XX_ENABLED false // Default disabled value +#endif +#ifndef INA2XX_I2C_ADDRESS + #define INA2XX_I2C_ADDRESS 0x40 // Default I2C address +#endif +#ifndef INA2XX_CHECK_INTERVAL + #define INA2XX_CHECK_INTERVAL 5 // Default 5 seconds (will be converted to ms) +#endif +#ifndef INA2XX_CORRECTION_FACTOR + #define INA2XX_CORRECTION_FACTOR 1.0 // Default correction factor. Default 1.0 +#endif +#ifndef INA2XX_CONVERSION_TIME + #if INA_SENSOR_TYPE == 219 + #define INA2XX_CONVERSION_TIME BIT_MODE_12 // Conversion Time, Default 12-bit resolution + #elif INA_SENSOR_TYPE == 226 + #define INA2XX_CONVERSION_TIME CONV_TIME_1100 // Conversion Time + #endif +#endif +#ifndef INA2XX_SHUNT_RESISTOR + #define INA2XX_SHUNT_RESISTOR 0.1 // Shunt Resistor value. Default 0.1 ohms +#endif +#ifndef INA2XX_DECIMAL_FACTOR + #define INA2XX_DECIMAL_FACTOR 3 // Decimal factor for current/power readings. Default 3 decimal places +#endif + +#if INA_SENSOR_TYPE == 219 + #ifndef INA2XX_BUSRANGE + #define INA2XX_BUSRANGE BRNG_32 // BRNG_16, BRNG_32 + #endif + #ifndef INA2XX_P_GAIN + #define INA2XX_P_GAIN PG_320 // PG_40, PG_80, PG_160, PG_320 + #endif + #ifndef INA2XX_SHUNT_VOLT_OFFSET + #define INA2XX_SHUNT_VOLT_OFFSET 0.0 // mV offset at zero current + #endif +#elif INA_SENSOR_TYPE == 226 + #ifndef INA2XX_AVERAGES + #define INA2XX_AVERAGES AVERAGE_1 + #endif + #ifndef INA2XX_RANGE + #define INA2XX_RANGE 1.3 //Current Range, Max 10.0 (10A) + #endif +#endif + +#ifndef INA2XX_MQTT_PUBLISH + #define INA2XX_MQTT_PUBLISH false // Default: do not publish to MQTT +#endif +#ifndef INA2XX_MQTT_PUBLISH_ALWAYS + #define INA2XX_MQTT_PUBLISH_ALWAYS false // Default: only publish on change +#endif +#ifndef INA2XX_HA_DISCOVERY + #define INA2XX_HA_DISCOVERY false // Default: Home Assistant discovery disabled +#endif + +#define UPDATE_CONFIG(obj, key, var, fmt) \ + do { \ + auto _tmp = var; \ + if ( getJsonValue((obj)[(key)], _tmp) ) { \ + if (_tmp != var) { \ + _logUsermodInaSensor("%s updated to: " fmt, key, _tmp);\ + var = _tmp; \ + } \ + } else { \ + configComplete = false; \ + } \ + } while(0) + +class UsermodINA2xx : public Usermod { +private: + static const char _name[]; + bool initDone = false; // Flag for successful initialization + unsigned long lastCheck = 0; // Timestamp for the last check + bool alreadyLoggedDisabled = false; + + // Define the variables using the pre-defined or default values + bool enabled = INA2XX_ENABLED; + uint8_t _i2cAddress = INA2XX_I2C_ADDRESS; + uint16_t _checkInterval = INA2XX_CHECK_INTERVAL; // seconds + uint32_t checkInterval = static_cast(_checkInterval) * 1000UL; // ms + uint8_t _decimalFactor = INA2XX_DECIMAL_FACTOR; + float shuntResistor = INA2XX_SHUNT_RESISTOR; + float correctionFactor = INA2XX_CORRECTION_FACTOR; + +#if INA_SENSOR_TYPE == 219 + INA219_PGAIN pGain = static_cast(INA2XX_P_GAIN); + INA219_BUS_RANGE busRange = static_cast(INA2XX_BUSRANGE); + float shuntVoltOffset_mV = INA2XX_SHUNT_VOLT_OFFSET; + + INA219_ADC_MODE conversionTime = static_cast(INA2XX_CONVERSION_TIME); +#elif INA_SENSOR_TYPE == 226 + INA226_AVERAGES average = static_cast(INA2XX_AVERAGES); + INA226_CONV_TIME conversionTime = static_cast(INA2XX_CONVERSION_TIME); + float currentRange = INA2XX_RANGE; +#endif + + bool mqttPublish = INA2XX_MQTT_PUBLISH; + bool mqttPublishSent = !INA2XX_MQTT_PUBLISH; + bool mqttPublishAlways = INA2XX_MQTT_PUBLISH_ALWAYS; + bool haDiscovery = INA2XX_HA_DISCOVERY; + bool haDiscoverySent = !INA2XX_HA_DISCOVERY; + + // Variables to store sensor readings + float busVoltage = 0.0; + float current = 0.0; + float current_mA = 0.0; + float power = 0.0; + float power_mW = 0.0; + float shuntVoltage = 0.0; + float loadVoltage = 0.0; + bool overflow = false; + + // Last sent variables + float last_sent_shuntVoltage = 0; + float last_sent_busVoltage = 0; + float last_sent_loadVoltage = 0; + float last_sent_current = 0; + float last_sent_current_mA = 0; + float last_sent_power = 0; + float last_sent_power_mW = 0; + bool last_sent_overflow = false; + + float dailyEnergy_kWh = 0.0; // Daily energy in kWh + float monthlyEnergy_kWh = 0.0; // Monthly energy in kWh + float totalEnergy_kWh = 0.0; // Total energy in kWh + unsigned long lastPublishTime = 0; // Track the last publish time + + // Variables to store last reset timestamps + unsigned long dailyResetTime = 0; + unsigned long monthlyResetTime = 0; + + bool mqttStateRestored = false; + + INA_SENSOR_CLASS *_ina2xx = nullptr; // INA2xx sensor object + + float roundDecimals(float val); + bool hasSignificantChange(float oldValue, float newValue, float threshold = 0.01f); + bool hasValueChanged(); + void checkForI2cErrors(); + bool updateINA2xxSettings(); + String sanitizeMqttClientID(const String &clientID); + void updateEnergy(float power, unsigned long durationMs); +#ifndef WLED_DISABLE_MQTT + void publishMqtt(float shuntVoltage, float busVoltage, float loadVoltage, + float current, float current_mA, float power, + float power_mW, bool overflow); + void mqttCreateHassSensor(const String &name, const String &topic, + const String &deviceClass, const String &unitOfMeasurement, + const String &jsonKey, const String &SensorType); + void mqttRemoveHassSensor(const String &name, const String &SensorType); +#endif + +public: + ~UsermodINA2xx(); + void setup() override; + void loop() override; +#ifndef WLED_DISABLE_MQTT + bool onMqttMessage(char* topic, char* payload) override; + void onMqttConnect(bool sessionPresent) override; +#endif + void addToJsonInfo(JsonObject &root) override; + void addToJsonState(JsonObject &root) override; + void readFromJsonState(JsonObject &root) override; + void addToConfig(JsonObject& root) override; + void appendConfigData() override; + bool readFromConfig(JsonObject& root) override; + uint16_t getId() override; +}; + +extern UsermodINA2xx ina2xx_v2; diff --git a/usermods/ina2xx_v2/library.json b/usermods/ina2xx_v2/library.json index 87f90bf6ef..e0158373b3 100644 --- a/usermods/ina2xx_v2/library.json +++ b/usermods/ina2xx_v2/library.json @@ -1,5 +1,8 @@ { "name": "ina2xx_v2", + "build": { + "libArchive": false + }, "dependencies": { "wollewald/INA219_WE":"~1.3.8", "wollewald/INA226_WE":"~1.2.12" From f440a467b68b23aa7d5ca742c30d9d4dd54ff1eb Mon Sep 17 00:00:00 2001 From: KrX3D Date: Sun, 8 Jun 2025 20:55:56 +0200 Subject: [PATCH 55/70] updated picture and readme --- usermods/ina2xx_v2/Readme.md | 17 +++++++++++++++-- usermods/ina2xx_v2/img/INA226-Pin-Outs.png | Bin 0 -> 548919 bytes usermods/ina2xx_v2/img/INA226-Pin-Outs.webp | Bin 61186 -> 0 bytes 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 usermods/ina2xx_v2/img/INA226-Pin-Outs.png delete mode 100644 usermods/ina2xx_v2/img/INA226-Pin-Outs.webp diff --git a/usermods/ina2xx_v2/Readme.md b/usermods/ina2xx_v2/Readme.md index 6f23de67a2..b0da465cde 100644 --- a/usermods/ina2xx_v2/Readme.md +++ b/usermods/ina2xx_v2/Readme.md @@ -170,7 +170,7 @@ custom_usermods = ${env:d1_mini.custom_usermods} INA2XX_v2 To reset daily or monthly energy calculations, you can implement corresponding functions within your main application. -### I2C Configuration (Mandatory) +### I2C Configuration (Mandatory) The INA2XX sensor communicates via I2C, so the SDA and SCL pins must be correctly set before enabling the usermod. 1. Open the **WLED Web Interface**. @@ -178,4 +178,17 @@ The INA2XX sensor communicates via I2C, so the SDA and SCL pins must be correctl 3. Select the appropriate **SDA** and **SCL** pins for your hardware. 4. Save the settings and **reboot WLED**. -🚀 **After rebooting, you can enable the **INA219** or **INA226** usermod in the settings.** \ No newline at end of file +🚀 **After rebooting, you can enable the **INA219** or **INA226** usermod in the settings.** + + +### INA226 Wiring Tip + +- Measuring bus voltage: Tie the INA226’s VIN– pin directly to the VBUS line (load side). This ensures the sensor reads the full voltage drop across your bus. + +### Sensor Pinouts + +The following diagrams show the typical I2C pin configurations for both INA219 and INA226 modules. + +| INA219 Pinout | INA226 Pinout | +|-----------------------------------------------------|-----------------------------------------------------| +| ![INA219 Pinout](./img/INA219-Pin-Outs.png) | ![INA226 Pinout](./img/INA226-Pin-Outs.png) | diff --git a/usermods/ina2xx_v2/img/INA226-Pin-Outs.png b/usermods/ina2xx_v2/img/INA226-Pin-Outs.png new file mode 100644 index 0000000000000000000000000000000000000000..5345af907b6dedc172a90a9b438c2b9b376148fe GIT binary patch literal 548919 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