supla-device
Loading...
Searching...
No Matches
relay_hvac_aggregator.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_CONTROL_RELAY_HVAC_AGGREGATOR_H_
5#define SRC_SUPLA_CONTROL_RELAY_HVAC_AGGREGATOR_H_
6
7#include <supla/element.h>
8
9namespace Supla {
10namespace Control {
11
12class Relay;
13class HvacBase;
14
16 public:
17 struct HvacPtr {
18 HvacBase *hvac = nullptr;
19 HvacPtr *nextPtr = nullptr;
20 uint32_t lastSeenTimestamp = 0;
21 };
22
23 static RelayHvacAggregator *GetInstance(int relayChannelNumber);
24 static RelayHvacAggregator *Add(int relayChannelNumber, Relay *relay);
25 static bool Remove(int relayChannelNumber);
26 static void UnregisterHvac(HvacBase *hvac);
27
28 void registerHvac(HvacBase *hvac);
29 void unregisterHvac(HvacBase *hvac);
30 bool isHvacRegistered(HvacBase *hvac) const;
31 int getHvacCount() const;
32
33 void iterateAlways() override;
34 void setTurnOffWhenEmpty(bool turnOffWhenEmpty);
35
36 void setInternalStateCheckInterval(uint32_t intervalMs);
37
38 protected:
39 explicit RelayHvacAggregator(int relayChannelNumber, Relay *relay);
40 virtual ~RelayHvacAggregator();
41
42 private:
43 RelayHvacAggregator *nextPtr = nullptr;
44 HvacPtr *firstHvacPtr = nullptr;
45 Relay *relay = nullptr;
46 int relayChannelNumber = 0;
47 uint32_t lastUpdateTimestamp = 0;
48 uint32_t lastStateUpdateTimestamp = 0;
49 uint32_t relayInternalStateCheckIntervalMs = 10000;
50 bool turnOffWhenEmpty = true;
51 int8_t lastValueSend = -1;
52 int8_t lastRelayState = -1;
53 int8_t turnOffSendOnEmpty = 0;
54};
55
56} // namespace Control
57} // namespace Supla
58
59#endif // SRC_SUPLA_CONTROL_RELAY_HVAC_AGGREGATOR_H_
Definition hvac_base.h:37
Definition relay_hvac_aggregator.h:15
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition relay_hvac_aggregator.cpp:140
Definition relay.h:38
Base class for all elements of SuplaDevice.
Definition element.h:27
Definition relay_hvac_aggregator.h:17