diff options
Diffstat (limited to 'control')
-rw-r--r-- | control/actions.cpp | 21 | ||||
-rw-r--r-- | control/actions.hpp | 14 |
2 files changed, 35 insertions, 0 deletions
diff --git a/control/actions.cpp b/control/actions.cpp index 6eda2a6..66bba2b 100644 --- a/control/actions.cpp +++ b/control/actions.cpp @@ -99,6 +99,27 @@ void default_floor_on_missing_owner(Zone& zone, const Group& group) zone.setFloorChangeAllow(&group, !defFloor); } +Action set_speed_on_missing_owner(uint64_t speed) +{ + return [speed](control::Zone& zone, const Group& group) + { + auto services = zone.getGroupServices(&group); + auto missingOwner = std::any_of( + services.begin(), + services.end(), + [](const auto& s) + { + return !std::get<hasOwnerPos>(s); + }); + if (missingOwner) + { + zone.setSpeed(speed); + } + // Update group's fan control active allowed based on action results + zone.setActiveAllow(&group, !missingOwner); + }; +} + void set_request_speed_base_with_max(control::Zone& zone, const Group& group) { diff --git a/control/actions.hpp b/control/actions.hpp index 4d2c5c3..55c8af8 100644 --- a/control/actions.hpp +++ b/control/actions.hpp @@ -42,6 +42,20 @@ Action call_actions_based_on_timer( void default_floor_on_missing_owner(Zone& zone, const Group& group); /** + * @brief An action to set a speed when a service owner is missing + * @details Sets the fans to the given speed when any service owner associated + * to the group is missing. Once all services are functional and providing + * the event data again, active fan speed changes are allowed. + * + * @param[in] speed - Speed to set the zone to + * + * @return Action lambda function + * An Action function that sets the zone to the given speed if any service + * owners are missing. + */ +Action set_speed_on_missing_owner(uint64_t speed); + +/** * @brief An action to set the request speed base * @details A new target speed is determined using a speed delta being added * or subtracted, for increases or decrease respectively, from a base speed. |