supla-device
Loading...
Searching...
No Matches
general_purpose_channel_base.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_SENSOR_GENERAL_PURPOSE_CHANNEL_BASE_H_
5#define SRC_SUPLA_SENSOR_GENERAL_PURPOSE_CHANNEL_BASE_H_
6
7#include <supla/channel_element.h>
8
9namespace Supla {
10namespace Sensor {
11
12class MeasurementDriver;
13
23 public:
24#pragma pack(push, 1)
26 int32_t divider = 0;
27 int32_t multiplier = 0;
28 int64_t added = 0;
29 uint8_t precision = 0;
30 uint8_t noSpaceBeforeValue = 0;
31 uint8_t noSpaceAfterValue = 0;
32 uint8_t keepHistory = 0;
33 uint8_t chartType = 0;
34 uint16_t refreshIntervalMs = 0;
35 char unitBeforeValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE] = {};
36 char unitAfterValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE] = {};
37 };
38#pragma pack(pop)
39
48 explicit GeneralPurposeChannelBase(MeasurementDriver *driver = nullptr,
49 bool addMemoryVariableDriver = true);
50
55
64 double getCalculatedValue();
65
72 void getFormattedValue(char *result, int maxSize);
73
81 virtual double getValue();
82
89 virtual void setValue(const double &value);
90
95 void onInit() override;
96
103 void onLoadConfig(SuplaDeviceClass *sdc) override;
104
108 void iterateAlways() override;
109
121 Supla::ApplyConfigResult applyChannelConfig(TSD_ChannelConfig *result,
122 bool local) override;
123
130 void fillChannelConfig(void *channelConfig,
131 int *size,
132 uint8_t configType) override;
133
146
151 void setDefaultValueDivider(int32_t divider);
152
158 void setDefaultValueMultiplier(int32_t multiplier);
159
165 void setDefaultValueAdded(int64_t added);
166
172 void setDefaultValuePrecision(uint8_t precision);
173
179 void setDefaultUnitBeforeValue(const char *unit);
180
186 void setDefaultUnitAfterValue(const char *unit);
188
192
197 int32_t getDefaultValueDivider() const;
198
204 int32_t getDefaultValueMultiplier() const;
205
211 int64_t getDefaultValueAdded() const;
212
218 uint8_t getDefaultValuePrecision() const;
219
225 void getDefaultUnitBeforeValue(char unit[SUPLA_GENERAL_PURPOSE_UNIT_SIZE]);
226
232 void getDefaultUnitAfterValue(char unit[SUPLA_GENERAL_PURPOSE_UNIT_SIZE]);
233
239 void setDefaultRefreshIntervalMs(int32_t intervalMs);
240
242
255
262 void setRefreshIntervalMs(int32_t intervalMs, bool local = true);
263
270 void setValueDivider(int32_t divider, bool local = true);
271
278 void setValueMultiplier(int32_t multiplier, bool local = true);
279
286 void setValueAdded(int64_t added, bool local = true);
287
294 void setValuePrecision(uint8_t precision, bool local = true);
295
302 void setUnitBeforeValue(const char *unit, bool local = true);
303
310 void setUnitAfterValue(const char *unit, bool local = true);
311
319 void setNoSpaceBeforeValue(uint8_t noSpaceBeforeValue, bool local = true);
320
328 void setNoSpaceAfterValue(uint8_t noSpaceAfterValue, bool local = true);
329 // Sets keep history flag
330
338 void setKeepHistory(uint8_t keepHistory, bool local = true);
339
340 // Sets chart type. Allowed values:
341 // For Measurement channel:
342 // SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_LINEAR
343 // SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_BAR
344 // SUPLA_GENERAL_PURPOSE_MEASUREMENT_CHART_TYPE_CANDLE
345 // For Meter channel:
346 // SUPLA_GENERAL_PURPOSE_METER_CHART_TYPE_BAR
347 // SUPLA_GENERAL_PURPOSE_METER_CHART_TYPE_LINEAR
361 void setChartType(uint8_t chartType, bool local = true);
363
367
372 uint16_t getRefreshIntervalMs() const;
373
379 int32_t getValueDivider() const;
380
386 int32_t getValueMultiplier() const;
387
393 int64_t getValueAdded() const;
394
400 uint8_t getValuePrecision() const;
401
407 void getUnitBeforeValue(char unit[SUPLA_GENERAL_PURPOSE_UNIT_SIZE]) const;
408
414 void getUnitAfterValue(char unit[SUPLA_GENERAL_PURPOSE_UNIT_SIZE]) const;
415
421 uint8_t getNoSpaceBeforeValue() const;
422
428 uint8_t getNoSpaceAfterValue() const;
429
435 uint8_t getKeepHistory() const;
436
442 uint8_t getChartType() const;
444
445 protected:
446 void saveConfig();
447 virtual void setChannelRefreshIntervalMs(uint16_t intervalMs);
448
449 MeasurementDriver *driver = nullptr;
450 uint16_t defaultRefreshIntervalMs = 5000;
451 uint16_t refreshIntervalMs = 5000;
452 uint32_t lastReadTime = 0;
453 bool deleteDriver = false;
454 bool initDone = false;
455
456 int32_t defaultValueDivider = 0; // 0.001 units; 0 is considered as 1
457 int32_t defaultValueMultiplier = 0; // 0.001 units; 0 is considered as 1
458 int64_t defaultValueAdded = 0; // 0.001 units
459 uint8_t defaultValuePrecision = 0; // 0 - 4 decimal points
460 // Default unit (before value) - UTF8 including the terminating null byte '\0'
461 char defaultUnitBeforeValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE] = {};
462 // Default unit (after value) - UTF8 including the terminating null byte '\0'
463 char defaultUnitAfterValue[SUPLA_GENERAL_PURPOSE_UNIT_SIZE] = {};
464
465 GPMCommonConfig commonConfig = {};
466};
467
468}; // namespace Sensor
469}; // namespace Supla
470
471#endif // SRC_SUPLA_SENSOR_GENERAL_PURPOSE_CHANNEL_BASE_H_
Definition SuplaDevice.h:167
Definition channel_element.h:15
Base class for General Purpose Measurement (GPM/KPOP) and General Purpose Meter (GPM/KLOP)
Definition general_purpose_channel_base.h:22
void getDefaultUnitAfterValue(char unit[SUPLA_GENERAL_PURPOSE_UNIT_SIZE])
Returns default unit which is displayed after value.
Definition general_purpose_channel_base.cpp:230
Supla::ApplyConfigResult applyChannelConfig(TSD_ChannelConfig *result, bool local) override
Applies new Channel Config (i.e.
Definition general_purpose_channel_base.cpp:444
uint8_t getValuePrecision() const
Returns precision (number of decimal places)
Definition general_purpose_channel_base.cpp:250
void setValueMultiplier(int32_t multiplier, bool local=true)
Sets value multiplier.
Definition general_purpose_channel_base.cpp:334
void setDefaultValueAdded(int64_t added)
Sets default value added.
Definition general_purpose_channel_base.cpp:175
void setChartType(uint8_t chartType, bool local=true)
Sets chart type.
Definition general_purpose_channel_base.cpp:434
void setValueAdded(int64_t added, bool local=true)
Sets value added.
Definition general_purpose_channel_base.cpp:345
void onInit() override
Supla::Element::onInit() - called by SuplaDeviceClass::begin() during initialization.
Definition general_purpose_channel_base.cpp:148
int64_t getDefaultValueAdded() const
Returns default value added.
Definition general_purpose_channel_base.cpp:214
void getDefaultUnitBeforeValue(char unit[SUPLA_GENERAL_PURPOSE_UNIT_SIZE])
Returns default unit which is displayed before value.
Definition general_purpose_channel_base.cpp:222
void setNoSpaceAfterValue(uint8_t noSpaceAfterValue, bool local=true)
Sets no space after value.
Definition general_purpose_channel_base.cpp:412
int32_t getDefaultValueMultiplier() const
Returns default value multiplier.
Definition general_purpose_channel_base.cpp:210
void setDefaultUnitBeforeValue(const char *unit)
Sets default unit which is displayed before value.
Definition general_purpose_channel_base.cpp:188
GeneralPurposeChannelBase(MeasurementDriver *driver=nullptr, bool addMemoryVariableDriver=true)
Constructor.
Definition general_purpose_channel_base.cpp:20
void setKeepHistory(uint8_t keepHistory, bool local=true)
Sets keep history flag.
Definition general_purpose_channel_base.cpp:423
void getUnitAfterValue(char unit[SUPLA_GENERAL_PURPOSE_UNIT_SIZE]) const
Returns unit which is displayed after value.
Definition general_purpose_channel_base.cpp:264
double getCalculatedValue()
Returns calculated value, which is result of the following operations:
Definition general_purpose_channel_base.cpp:40
int64_t getValueAdded() const
Returns value added.
Definition general_purpose_channel_base.cpp:246
void setDefaultUnitAfterValue(const char *unit)
Sets default unit which is displayed after value.
Definition general_purpose_channel_base.cpp:197
uint8_t getNoSpaceAfterValue() const
Returns no space after value.
Definition general_purpose_channel_base.cpp:276
void iterateAlways() override
Supla::Element::iterateAlways() - called by SuplaDeviceClass::iterate()
Definition general_purpose_channel_base.cpp:156
void onLoadConfig(SuplaDeviceClass *sdc) override
Supla::Element::onLoadConfig() - called by SuplaDeviceClass::loadConfig() during initialization.
Definition general_purpose_channel_base.cpp:102
void setDefaultValueDivider(int32_t divider)
Sets default value divider.
Definition general_purpose_channel_base.cpp:163
uint8_t getChartType() const
Returns chart type.
Definition general_purpose_channel_base.cpp:284
uint8_t getKeepHistory() const
Returns keep history flag.
Definition general_purpose_channel_base.cpp:280
void fillChannelConfig(void *channelConfig, int *size, uint8_t configType) override
Fills Channel Config.
Definition general_purpose_channel_base.cpp:496
uint8_t getNoSpaceBeforeValue() const
Returns no space before value.
Definition general_purpose_channel_base.cpp:272
void getFormattedValue(char *result, int maxSize)
Returns formatted value as char array (including units, precision, etc.)
Definition general_purpose_channel_base.cpp:59
void setRefreshIntervalMs(int32_t intervalMs, bool local=true)
Sets refresh interval in milliseconds.
Definition general_purpose_channel_base.cpp:305
int32_t getValueDivider() const
Returns value divider.
Definition general_purpose_channel_base.cpp:238
int32_t getDefaultValueDivider() const
Returns default value divider.
Definition general_purpose_channel_base.cpp:206
void getUnitBeforeValue(char unit[SUPLA_GENERAL_PURPOSE_UNIT_SIZE]) const
Returns unit which is displayed before value.
Definition general_purpose_channel_base.cpp:254
void setUnitAfterValue(const char *unit, bool local=true)
Sets unit which is displayed after value.
Definition general_purpose_channel_base.cpp:384
void setValueDivider(int32_t divider, bool local=true)
Sets value divider.
Definition general_purpose_channel_base.cpp:324
void setUnitBeforeValue(const char *unit, bool local=true)
Sets unit which is displayed before value.
Definition general_purpose_channel_base.cpp:366
virtual ~GeneralPurposeChannelBase()
Destructor.
Definition general_purpose_channel_base.cpp:32
virtual void setValue(const double &value)
Method used to set new value for channel with driver which accepts MeasurementDriver::setValue() meth...
Definition general_purpose_channel_base.cpp:560
void setDefaultValuePrecision(uint8_t precision)
Sets default precision (number of decimal places)
Definition general_purpose_channel_base.cpp:182
int32_t getValueMultiplier() const
Returns value multiplier.
Definition general_purpose_channel_base.cpp:242
void setNoSpaceBeforeValue(uint8_t noSpaceBeforeValue, bool local=true)
Sets no space before value.
Definition general_purpose_channel_base.cpp:401
void setDefaultRefreshIntervalMs(int32_t intervalMs)
Sets default refresh interval in milliseconds.
Definition general_purpose_channel_base.cpp:566
void setDefaultValueMultiplier(int32_t multiplier)
Sets default value multiplier.
Definition general_purpose_channel_base.cpp:169
void setValuePrecision(uint8_t precision, bool local=true)
Sets precision.
Definition general_purpose_channel_base.cpp:355
uint16_t getRefreshIntervalMs() const
Returns refresh interval in milliseconds.
Definition general_purpose_channel_base.cpp:288
virtual double getValue()
Method used to obtain new value for channel.
Definition general_purpose_channel_base.cpp:141
uint8_t getDefaultValuePrecision() const
Returns default precision (number of decimal places)
Definition general_purpose_channel_base.cpp:218
Definition measurement_driver.h:9
Definition general_purpose_channel_base.h:25
Definition proto.h:3159