supla-device
Loading...
Searching...
No Matches
thermometer_group.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_SUPLET_THERMOMETER_GROUP_H_
5#define SRC_SUPLA_SUPLET_THERMOMETER_GROUP_H_
6
7#include <stdint.h>
8#include <supla/suplet/virtual_channel.h>
9
10#ifndef SUPLA_SUPLET_THERMOMETER_GROUP_MAX_SOURCES
11#define SUPLA_SUPLET_THERMOMETER_GROUP_MAX_SOURCES 8
12#endif
13
14namespace Supla {
15namespace Suplet {
16
17enum class ThermometerGroupMode : uint8_t {
18 Avg = 1,
19 Min = 2,
20 Max = 3,
21};
22
24 uint8_t version = 1;
25 ThermometerGroupMode mode = ThermometerGroupMode::Avg;
26 uint16_t refreshIntervalMs = 1000;
27 uint8_t sourceCount = 0;
28 int16_t sourceChannels[SUPLA_SUPLET_THERMOMETER_GROUP_MAX_SOURCES] = {};
29};
30
32 public:
33 ThermometerGroup(uint8_t subDeviceId,
34 int channelNumber,
35 const ThermometerGroupConfig &config);
36
37 void iterateAlways() override;
38 double calculateValue() const;
39 const ThermometerGroupConfig &getConfig() const;
40
41 private:
42 struct GroupValue {
43 bool hasOnlineSource = false;
44 bool hasValidValue = false;
45 double value = TEMPERATURE_NOT_AVAILABLE;
46 };
47
48 static bool isValidTemperature(double value);
49 GroupValue calculateGroupValue() const;
50
51 ThermometerGroupConfig config = {};
52 uint32_t lastRefreshMs = 0;
53};
54
55bool parseThermometerGroupConfig(const uint8_t *data,
56 uint16_t dataSize,
57 ThermometerGroupConfig *config);
58bool serializeThermometerGroupConfig(const ThermometerGroupConfig &config,
59 uint8_t *data,
60 uint16_t dataSize,
61 uint16_t *writtenSize = nullptr);
62
63} // namespace Suplet
64} // namespace Supla
65
66#endif // SRC_SUPLA_SUPLET_THERMOMETER_GROUP_H_
Definition thermometer_group.h:31
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition virtual_channel.h:39
Definition thermometer_group.h:23