#pragma once #include #include #include #include #include #include #include namespace pid_control { struct VariantToDoubleVisitor { template std::enable_if_t::value, double> operator()(const T& t) const { return static_cast(t); } template std::enable_if_t::value, double> operator()(const T& t) const { throw std::invalid_argument("Cannot translate type to double"); } }; std::string getSensorPath(const std::string& type, const std::string& id); std::string getMatch(const std::string& type, const std::string& id); void scaleSensorReading(const double min, const double max, double& value); bool validType(const std::string& type); bool findSensors(const std::unordered_map& sensors, const std::string& search, std::vector>& matches); // Set zone number for a zone, 0-based int64_t setZoneIndex(const std::string& name, std::map& zones, int64_t index); // Read zone number for a zone. int64_t getZoneIndex(const std::string& name, std::map& zones); } // namespace pid_control