-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathLedFunctionValueMonitor.cpp
More file actions
59 lines (55 loc) · 2.38 KB
/
LedFunctionValueMonitor.cpp
File metadata and controls
59 lines (55 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "LedFunctionValueMonitor.h"
#include "FunctionBlocks/ValueMonitorBlock.h"
void LedFunctionValueMonitor::loop()
{
#ifdef OPENKNX_LEDFUNC_BASE_TIME
if (_ledFunctionGroup == nullptr)
{
_ledFunctionGroup = openknx.ledFunctions.get(OPENKNX_LEDFUNC_FB_VALUE_MONITOR);
}
auto valueMonitorInstances = ValueMonitorBlock::getInstances();
int intanceCount = 0;
ValueMonitorAlarmState sumAlarmState = ValueMonitorAlarmState::NoAlarm;
for (const auto& instance : valueMonitorInstances)
{
intanceCount++;
auto alarmState = instance->alarmState();
if (alarmState > sumAlarmState)
{
sumAlarmState = alarmState;
}
}
if (sumAlarmState != _lastAlarmState)
{
_lastAlarmState = sumAlarmState;
// logDebug("LedFunctionValueMonitor", "LedFunctionValueMonitor of %d instances: Updating LED state to alarm state %u", intanceCount, static_cast<uint8_t>(sumAlarmState));
switch (sumAlarmState)
{
case ValueMonitorAlarmState::NoAlarm:
_ledFunctionGroup->color(OpenKNX::Led::Color::Green);
_ledFunctionGroup->on(OpenKNX::Led::Capability::COLOR);
_ledFunctionGroup->off(OpenKNX::Led::Capability::MONOCHROME);
break;
case ValueMonitorAlarmState::WaitForValue:
_ledFunctionGroup->color(OpenKNX::Led::Color::Yellow);
_ledFunctionGroup->on(OpenKNX::Led::Capability::COLOR);
_ledFunctionGroup->blinking(500, OpenKNX::Led::Capability::MONOCHROME);
break;
case ValueMonitorAlarmState::ValueTooLow:
_ledFunctionGroup->color(OpenKNX::Led::Color::Blue);
_ledFunctionGroup->on(OpenKNX::Led::Capability::COLOR);
_ledFunctionGroup->blinking(200, OpenKNX::Led::Capability::MONOCHROME);
break;
case ValueMonitorAlarmState::ValueTooHigh:
_ledFunctionGroup->color(OpenKNX::Led::Color::Orange);
_ledFunctionGroup->on(OpenKNX::Led::Capability::COLOR);
_ledFunctionGroup->blinking(100, OpenKNX::Led::Capability::MONOCHROME);
break;
case ValueMonitorAlarmState::Timeout:
_ledFunctionGroup->color(OpenKNX::Led::Color::Red);
_ledFunctionGroup->on();
break;
}
}
#endif
}