Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MQTT] (Auto)Discovery implementation #5199

Open
wants to merge 35 commits into
base: mega
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
3656475
[MQTT] (Auto)Discovery implementation
tonhuisman Dec 30, 2024
6fdf84c
[P052] Add MQTT Discovery data for supported Values
tonhuisman Dec 30, 2024
7be7b81
[Source] Fix CR/LF vs LF
tonhuisman Dec 30, 2024
a9ddd65
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Jan 1, 2025
834b2d7
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Jan 9, 2025
d14b111
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Jan 10, 2025
e4b0e4e
[MQTT] Add support for more VTypes, implement more VTypes, small impr…
tonhuisman Jan 10, 2025
5240af6
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Jan 12, 2025
3666157
[MQTT] Move TaskValue VType Discovery to each plugin where needed. So…
tonhuisman Jan 12, 2025
89381f2
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Jan 12, 2025
c06a29b
[P105] Fix Uncrustify formatting
tonhuisman Jan 12, 2025
0bed31b
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Jan 16, 2025
49bf984
[P164] Add fixme for currently unsupported AQI Discovery value
tonhuisman Jan 16, 2025
738159b
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Jan 16, 2025
01daf16
[Discovery] Add VType for Reactive Power
tonhuisman Jan 16, 2025
e143e5f
[Discovery] Implement VType for Reactive Power
tonhuisman Jan 16, 2025
19513a8
[P076] Implement Discovery support (for user-selected values)
tonhuisman Jan 16, 2025
0d4344d
[P077] Implement Discovery support (for user-selected values)
tonhuisman Jan 16, 2025
11b8c2e
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Jan 17, 2025
4fe9219
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Jan 17, 2025
51621ec
[P078] Implement Discovery support (for user-selected values)
tonhuisman Jan 17, 2025
bbf4246
[P085] Implement Discovery support (for user-selected values)
tonhuisman Jan 17, 2025
865852a
[P102] Implement Discovery support (for user-selected values)
tonhuisman Jan 17, 2025
fa3afec
[P108] Implement Discovery support (for user-selected values)
tonhuisman Jan 17, 2025
f060c3d
[P115] Implement Discovery support (for user-selected values)
tonhuisman Jan 18, 2025
9754ae9
[P132] Implement Discovery support (for user-selected values)
tonhuisman Jan 18, 2025
243b271
[P142] Implement Discovery support (for user-selected values)
tonhuisman Jan 18, 2025
d5b8298
[Discovery] Refactor getting VType per plugin, add some more plugins …
tonhuisman Jan 18, 2025
9ac80ed
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Jan 22, 2025
8c6ea9f
[Discovery] Add support for some more VTypes, add AQI and NOx
tonhuisman Jan 23, 2025
4fedeef
[P147] Implement MQTT Discovery support
tonhuisman Jan 23, 2025
d447566
[P164] Update MQTT Discovery support
tonhuisman Jan 23, 2025
29d9453
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Feb 3, 2025
a6cd05f
Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into …
tonhuisman Feb 4, 2025
c0fcf9f
Merge branch 'mega' into feature/MQTT-discovery
tonhuisman Feb 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 42 additions & 3 deletions src/_P076_HLW8012.ino
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
//

/** Changelog:
* 2025-01-16 tonhuisman: Implement support for MQTT AutoDiscovery
* Add support for PLUGIN_GET_DEVICEVALUECOUNT that was missing.
* 2025-01-16 tonhuisman: Fix merge conflict, (re-)apply Uncrustify formatting
* 2025-01-12 tonhuisman: Add support for MQTT AutoDiscovery (not supported yet for HLW8012)
* 2024-12-26 tonhuisman: Add preset for Shelly Plus PLUG-S (ESP32 device), only enabled for ESP32 builds
Expand Down Expand Up @@ -109,6 +111,9 @@ unsigned long p076_timer{};
// Forward declaration helper function
const __FlashStringHelper* p076_getQueryString(uint8_t value_nr,
bool displayString);
# if FEATURE_MQTT_DISCOVER
Sensor_VType p076_getQueryVType(uint8_t value_nr);
# endif // if FEATURE_MQTT_DISCOVER

# if ESP_IDF_VERSION_MAJOR >= 5

Expand Down Expand Up @@ -242,7 +247,7 @@ boolean Plugin_076(uint8_t function, struct EventStruct *event, String& string)
{
if (i < P076_NR_OUTPUT_VALUES)
{
uint8_t choice = PCONFIG(i + P076_QUERY1_CONFIG_POS);
const uint8_t choice = PCONFIG(i + P076_QUERY1_CONFIG_POS);
ExtraTaskSettings.setTaskDeviceValueName(i, p076_getQueryString(choice, false));
}
else
Expand All @@ -253,11 +258,21 @@ boolean Plugin_076(uint8_t function, struct EventStruct *event, String& string)
break;
}

case PLUGIN_GET_DEVICEVALUECOUNT:
{
event->Par1 = P076_NR_OUTPUT_VALUES;
success = true;
break;
}

# if FEATURE_MQTT_DISCOVER
case PLUGIN_GET_DISCOVERY_VTYPES:
{
event->Par1 = static_cast<int>(Sensor_VType::SENSOR_TYPE_NONE); // Not yet supported
success = true;
for (uint8_t i = 0; i < event->Par5; ++i) {
const uint8_t choice = PCONFIG(i + P076_QUERY1_CONFIG_POS);
event->ParN[i] = static_cast<int>(p076_getQueryVType(choice));
}
success = true;
break;
}
# endif // if FEATURE_MQTT_DISCOVER
Expand Down Expand Up @@ -921,6 +936,30 @@ const __FlashStringHelper* p076_getQueryString(uint8_t value_nr, bool displayStr
return F("");
}

# if FEATURE_MQTT_DISCOVER
Sensor_VType p076_getQueryVType(uint8_t value_nr) {
switch (value_nr)
{
case P076_INDEX_VOLT:
return Sensor_VType::SENSOR_TYPE_VOLTAGE_ONLY;
case P076_INDEX_CURR:
return Sensor_VType::SENSOR_TYPE_CURRENT_ONLY;
case P076_INDEX_POWR:
return Sensor_VType::SENSOR_TYPE_POWER_USG_ONLY;
case P076_INDEX_VAR:
return Sensor_VType::SENSOR_TYPE_REACTIVE_POWER_ONLY;
case P076_INDEX_VA:
return Sensor_VType::SENSOR_TYPE_APPRNT_POWER_USG_ONLY;
case P076_INDEX_PF:
return Sensor_VType::SENSOR_TYPE_POWER_FACT_ONLY;
case P076_INDEX_ENER:
return Sensor_VType::SENSOR_TYPE_NONE; // FIXME Add support for Energy + Unit of Measure
}
return Sensor_VType::SENSOR_TYPE_NONE;
}

# endif // if FEATURE_MQTT_DISCOVER

void p076_checkdefault_queries(struct EventStruct *event)
{
// Set default querys if not set
Expand Down
16 changes: 14 additions & 2 deletions src/_P077_CSE7766.ino
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
// #######################################################################################################

/** Changelog:
* 2025-01-16 tonhuisman: Implement support for MQTT AutoDiscovery
* Add support for PLUGIN_GET_DEVICEVALUECOUNT that was missing.
* 2025-01-12 tonhuisman: Add support for MQTT AutoDiscovery (not supported yet for CSE7766)
* 2023-02-12 tonhuisman: Separate PLUGIN_SERIAL_IN and PLUGIN_TEN_PER_SECOND (changed from PLUGIN_FIFTY_PER_SECOND) handling
* Fixed some minor code-issues
Expand Down Expand Up @@ -84,11 +86,21 @@ boolean Plugin_077(uint8_t function, struct EventStruct *event, String& string)
break;
}

case PLUGIN_GET_DEVICEVALUECOUNT:
{
event->Par1 = P077_NR_OUTPUT_VALUES;
success = true;
break;
}

# if FEATURE_MQTT_DISCOVER
case PLUGIN_GET_DISCOVERY_VTYPES:
{
event->Par1 = static_cast<int>(Sensor_VType::SENSOR_TYPE_NONE); // Not yet supported
success = true;
for (uint8_t i = 0; i < event->Par5; ++i) {
const uint8_t choice = PCONFIG(i + P077_QUERY1_CONFIG_POS);
tonhuisman marked this conversation as resolved.
Show resolved Hide resolved
event->ParN[i] = static_cast<int>(Plugin_077_QueryVType(choice));
}
success = true;
break;
}
# endif // if FEATURE_MQTT_DISCOVER
Expand Down
15 changes: 11 additions & 4 deletions src/_P078_Eastron.ino
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
*/

/** Changelog:
* 2025-01-17 tonhuisman: Implement support for MQTT AutoDiscovery (partial)
* 2025-01-12 tonhuisman: Add support for MQTT AutoDiscovery (not supported yet for Eastron)
*/

Expand Down Expand Up @@ -66,10 +67,11 @@ boolean Plugin_078(uint8_t function, struct EventStruct *event, String& string)

case PLUGIN_GET_DEVICEVALUENAMES:
{
const SDM_MODEL model = static_cast<SDM_MODEL>(P078_MODEL);

for (uint8_t i = 0; i < VARS_PER_TASK; ++i) {
if (i < P078_NR_OUTPUT_VALUES) {
const SDM_MODEL model = static_cast<SDM_MODEL>(P078_MODEL);
const uint8_t choice = PCONFIG(i + P078_QUERY1_CONFIG_POS);
const uint8_t choice = PCONFIG(i + P078_QUERY1_CONFIG_POS);
ExtraTaskSettings.setTaskDeviceValueName(i, SDM_getValueNameForModel(model, choice));
} else {
ExtraTaskSettings.clearTaskDeviceValueName(i);
Expand All @@ -87,8 +89,13 @@ boolean Plugin_078(uint8_t function, struct EventStruct *event, String& string)
# if FEATURE_MQTT_DISCOVER
case PLUGIN_GET_DISCOVERY_VTYPES:
{
event->Par1 = static_cast<int>(Sensor_VType::SENSOR_TYPE_NONE); // Not yet supported
success = true;
const SDM_MODEL model = static_cast<SDM_MODEL>(P078_MODEL);

for (uint8_t i = 0; i < event->Par5; ++i) {
const uint8_t choice = PCONFIG(i + P078_QUERY1_CONFIG_POS);
event->ParN[i] = static_cast<int>(SDM_QueryVType(model, choice));
}
success = true;
break;
}
# endif // if FEATURE_MQTT_DISCOVER
Expand Down
8 changes: 6 additions & 2 deletions src/_P085_AcuDC243.ino
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
*/

/** Changelog:
* 2025-01-12 tonhuisman: Implement support for MQTT AutoDiscovery (partially)
* 2025-01-12 tonhuisman: Add support for MQTT AutoDiscovery (not supported yet for AcuDC)
*/

Expand Down Expand Up @@ -73,8 +74,11 @@ boolean Plugin_085(uint8_t function, struct EventStruct *event, String& string)
# if FEATURE_MQTT_DISCOVER
case PLUGIN_GET_DISCOVERY_VTYPES:
{
event->Par1 = static_cast<int>(Sensor_VType::SENSOR_TYPE_NONE); // Not yet supported
success = true;
for (uint8_t i = 0; i < event->Par5; ++i) {
const uint8_t choice = PCONFIG(i + P085_QUERY1_CONFIG_POS);
event->ParN[i] = static_cast<int>(Plugin_085_QueryVType(choice));
}
success = true;
break;
}
# endif // if FEATURE_MQTT_DISCOVER
Expand Down
1 change: 1 addition & 0 deletions src/_P097_Esp32Touch.ino
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
// #######################################################################################################

/** Changelog:
* 2025-01-16 tonhuisman: Move technical #defines to P097_data_struct.h to avoid Arduino compiler warning
* 2025-01-12 tonhuisman: Add support for MQTT AutoDiscovery (not supported yet for Touch)
* 2024-12-11 chromoxdor: Added extra routine for ESP32S2 and ESP32S3.
* Added "Wake Up from Sleep", Switch like behaviour + toggle and long press option.
Expand Down
24 changes: 22 additions & 2 deletions src/_P102_PZEM004Tv3.ino
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
//

/** Changelog:
* 2025-01-17 tonhuisman: Implement support for MQTT AutoDiscovery (partially)
* 2025-01-12 tonhuisman: Add support for MQTT AutoDiscovery (not supported yet for PZEM00x)
*/

Expand Down Expand Up @@ -96,8 +97,11 @@ boolean Plugin_102(uint8_t function, struct EventStruct *even
# if FEATURE_MQTT_DISCOVER
case PLUGIN_GET_DISCOVERY_VTYPES:
{
event->Par1 = static_cast<int>(Sensor_VType::SENSOR_TYPE_NONE); // Not yet supported
success = true;
for (uint8_t i = 0; i < event->Par5; ++i) {
const uint8_t choice = PCONFIG(i + P102_QUERY1_CONFIG_POS);
event->ParN[i] = static_cast<int>(p102_getQueryVType(choice));
}
success = true;
break;
}
# endif // if FEATURE_MQTT_DISCOVER
Expand Down Expand Up @@ -394,4 +398,20 @@ const __FlashStringHelper* p102_getQueryString(uint8_t query) {
return F("");
}

# if FEATURE_MQTT_DISCOVER
Sensor_VType p102_getQueryVType(uint8_t query) {
switch (query)
{
case 0: return Sensor_VType::SENSOR_TYPE_VOLTAGE_ONLY;
case 1: return Sensor_VType::SENSOR_TYPE_CURRENT_ONLY;
case 2: return Sensor_VType::SENSOR_TYPE_POWER_USG_ONLY;
case 3: return Sensor_VType::SENSOR_TYPE_NONE; // FIXME
case 4: return Sensor_VType::SENSOR_TYPE_POWER_FACT_ONLY;
case 5: return Sensor_VType::SENSOR_TYPE_NONE;
}
return Sensor_VType::SENSOR_TYPE_NONE;
}

# endif // if FEATURE_MQTT_DISCOVER

#endif // USES_P102
8 changes: 6 additions & 2 deletions src/_P108_DDS238.ino
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
// with most code copied from plugin 085: _P085_AcuDC243.ino

/** Changelog:
* 2025-01-17 tonhuisman: Implement support for MQTT AutoDiscovery (partially)
* 2025-01-12 tonhuisman: Add support for MQTT AutoDiscovery (not supported yet for DDS238)
*/

Expand Down Expand Up @@ -81,8 +82,11 @@ boolean Plugin_108(uint8_t function, struct EventStruct *event, String& string)
# if FEATURE_MQTT_DISCOVER
case PLUGIN_GET_DISCOVERY_VTYPES:
{
event->Par1 = static_cast<int>(Sensor_VType::SENSOR_TYPE_NONE); // Not yet supported
success = true;
for (uint8_t i = 0; i < event->Par5; ++i) {
const uint8_t choice = PCONFIG(i + P108_QUERY1_CONFIG_POS);
event->ParN[i] = static_cast<int>(Plugin_108_getQueryVType(choice));
}
success = true;
break;
}
# endif // if FEATURE_MQTT_DISCOVER
Expand Down
3 changes: 3 additions & 0 deletions src/src/DataTypes/SensorVType.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ uint8_t getValueCountFromSensorType(Sensor_VType sensorType)
case Sensor_VType::SENSOR_TYPE_COLOR_GREEN_ONLY:
case Sensor_VType::SENSOR_TYPE_COLOR_BLUE_ONLY:
case Sensor_VType::SENSOR_TYPE_COLOR_TEMP_ONLY:
case Sensor_VType::SENSOR_TYPE_REACTIVE_POWER_ONLY:
return 1;
}
#ifndef BUILD_NO_DEBUG
Expand Down Expand Up @@ -153,6 +154,7 @@ const __FlashStringHelper* getSensorTypeLabel(Sensor_VType sensorType) {
case Sensor_VType::SENSOR_TYPE_COLOR_GREEN_ONLY: return F("Green");
case Sensor_VType::SENSOR_TYPE_COLOR_BLUE_ONLY: return F("Blue");
case Sensor_VType::SENSOR_TYPE_COLOR_TEMP_ONLY: return F("Color temperature");
case Sensor_VType::SENSOR_TYPE_REACTIVE_POWER_ONLY: return F("Reactive Power");
#else // if FEATURE_MQTT_DISCOVER
case Sensor_VType::SENSOR_TYPE_ANALOG_ONLY:
case Sensor_VType::SENSOR_TYPE_TEMP_ONLY:
Expand Down Expand Up @@ -181,6 +183,7 @@ const __FlashStringHelper* getSensorTypeLabel(Sensor_VType sensorType) {
case Sensor_VType::SENSOR_TYPE_COLOR_GREEN_ONLY:
case Sensor_VType::SENSOR_TYPE_COLOR_BLUE_ONLY:
case Sensor_VType::SENSOR_TYPE_COLOR_TEMP_ONLY:
case Sensor_VType::SENSOR_TYPE_REACTIVE_POWER_ONLY:
break;
#endif // if FEATURE_MQTT_DISCOVER
}
Expand Down
1 change: 1 addition & 0 deletions src/src/DataTypes/SensorVType.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ enum class Sensor_VType : uint8_t {
SENSOR_TYPE_COLOR_GREEN_ONLY = 124,
SENSOR_TYPE_COLOR_BLUE_ONLY = 125,
SENSOR_TYPE_COLOR_TEMP_ONLY = 126,
SENSOR_TYPE_REACTIVE_POWER_ONLY = 127,

SENSOR_TYPE_NOT_SET = 255
};
Expand Down
2 changes: 2 additions & 0 deletions src/src/Helpers/_CPlugin_Helper_mqtt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -577,12 +577,14 @@ bool MQTT_HomeAssistant_SendAutoDiscovery(controllerIndex_t ControllerIn
}
case Sensor_VType::SENSOR_TYPE_POWER_FACT_ONLY:
case Sensor_VType::SENSOR_TYPE_POWER_USG_ONLY:
case Sensor_VType::SENSOR_TYPE_REACTIVE_POWER_ONLY:
case Sensor_VType::SENSOR_TYPE_APPRNT_POWER_USG_ONLY:
{
const __FlashStringHelper*dev = Sensor_VType::SENSOR_TYPE_POWER_FACT_ONLY == discoveryItems[s].VType ?
F("power_factor") : F("power");
const __FlashStringHelper*uom = Sensor_VType::SENSOR_TYPE_POWER_FACT_ONLY == discoveryItems[s].VType ? F("Cos φ") :
Sensor_VType::SENSOR_TYPE_POWER_USG_ONLY == discoveryItems[s].VType ? F("kWh") :
Sensor_VType::SENSOR_TYPE_REACTIVE_POWER_ONLY == discoveryItems[s].VType ? F("var") :
F("VA");

for (uint8_t v = discoveryItems[s].varIndex; v < varCount; ++v) {
Expand Down
28 changes: 25 additions & 3 deletions src/src/PluginStructs/P077_data_struct.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,28 @@ const __FlashStringHelper* Plugin_077_valuename(P077_query value_nr, bool displa
return F("");
}

# if FEATURE_MQTT_DISCOVER
Sensor_VType Plugin_077_QueryVType(uint8_t value_nr) {
const Sensor_VType vtypes[] = {
Sensor_VType::SENSOR_TYPE_VOLTAGE_ONLY,
Sensor_VType::SENSOR_TYPE_POWER_USG_ONLY,
Sensor_VType::SENSOR_TYPE_CURRENT_ONLY,
Sensor_VType::SENSOR_TYPE_NONE,
Sensor_VType::SENSOR_TYPE_POWER_USG_ONLY,
Sensor_VType::SENSOR_TYPE_APPRNT_POWER_USG_ONLY,
Sensor_VType::SENSOR_TYPE_POWER_FACT_ONLY,
Sensor_VType::SENSOR_TYPE_REACTIVE_POWER_ONLY,
};
constexpr uint8_t valueCount = NR_ELEMENTS(vtypes);

if (value_nr < valueCount) {
return vtypes[value_nr];
}
return Sensor_VType::SENSOR_TYPE_NONE;
}

# endif // if FEATURE_MQTT_DISCOVER

P077_query Plugin_077_from_valuename(const String& valuename)
{
for (uint8_t query = 0; query < static_cast<uint8_t>(P077_query::P077_QUERY_NR_OUTPUT_OPTIONS); ++query) {
Expand Down Expand Up @@ -321,7 +343,7 @@ bool P077_data_struct::plugin_read(struct EventStruct *event) {
float value{};

if (_cache[index].peek(value)) {
UserVar.setFloat(event->TaskIndex, i, value);
UserVar.setFloat(event->TaskIndex, i, value);
}
}
}
Expand Down Expand Up @@ -359,7 +381,7 @@ bool P077_data_struct::plugin_write(struct EventStruct *event,
setOutputValue(event, P077_query::P077_QUERY_KWH, cf_pulses);
setOutputValue(event, P077_query::P077_QUERY_PULSES, cf_pulses);
Scheduler.schedule_task_device_timer(event->TaskIndex, millis() + 10);
success = true;
success = true;
} else if (equals(cmd, F("csecalibrate"))) { // Set 1 or more calibration values, 0 will skip that value
success = true;
float CalibVolt = 0.0f;
Expand Down Expand Up @@ -441,7 +463,7 @@ void P077_data_struct::setOutputValue(struct EventStruct *event, P077_query outp
// Set preliminary averaged value as task value.
// This way we can see intermediate updates.
_cache[index].peek(value);
UserVar.setFloat(event->TaskIndex, i, value);
UserVar.setFloat(event->TaskIndex, i, value);
}
}
}
Expand Down
10 changes: 7 additions & 3 deletions src/src/PluginStructs/P077_data_struct.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#include "../../_Plugin_Helper.h"
#ifdef USES_P077
#include "../Helpers/OversamplingHelper.h"
# include "../Helpers/OversamplingHelper.h"

# define CSE_NOT_CALIBRATED 0xAA
# define CSE_PULSES_NOT_INITIALIZED -1
Expand Down Expand Up @@ -47,7 +47,9 @@ enum class P077_query : uint8_t {

const __FlashStringHelper* Plugin_077_valuename(P077_query value_nr,
bool displayString);

# if FEATURE_MQTT_DISCOVER
Sensor_VType Plugin_077_QueryVType(uint8_t value_nr);
# endif // if FEATURE_MQTT_DISCOVER
P077_query Plugin_077_from_valuename(const String& valuename);

struct P077_data_struct : public PluginTaskData_base {
Expand Down Expand Up @@ -99,9 +101,11 @@ struct P077_data_struct : public PluginTaskData_base {
uint32_t last_cf_pulses_moment{};

private:
OversamplingHelper<float> _cache[static_cast<uint8_t>(P077_query::P077_QUERY_NR_OUTPUT_OPTIONS)]{};

OversamplingHelper<float>_cache[static_cast<uint8_t>(P077_query::P077_QUERY_NR_OUTPUT_OPTIONS)]{};

public:

// stats
long t_max = 0;
long t_all = 0;
Expand Down
Loading
Loading