diff --git a/scripts/boost_build_1.74.0.sh b/scripts/boost_build_1.74.0.sh
index 074e72c..2775b7c 100755
--- a/scripts/boost_build_1.74.0.sh
+++ b/scripts/boost_build_1.74.0.sh
@@ -13,5 +13,5 @@
     ./b2 install --prefix=build
 fi
 
-echo -e "Please, set BOOST_ROOT to `pwd`/build, e.g.:\n" \
-        "export BOOST_ROOT=`pwd`/build"
+echo -e "Please, set BOOST_ROOT to $(pwd)/build, e.g.:\n" \
+        "export BOOST_ROOT=$(pwd)/build"
diff --git a/src/interfaces/trigger_types.hpp b/src/interfaces/trigger_types.hpp
index eb0f7c4..f99cd3c 100644
--- a/src/interfaces/trigger_types.hpp
+++ b/src/interfaces/trigger_types.hpp
@@ -18,13 +18,27 @@
     critical
 };
 
-inline Severity toSeverity(int x)
+namespace details
 {
-    return utils::toEnum<Severity, Severity::ok, Severity::critical>(x);
+constexpr std::array<std::pair<std::string_view, Severity>, 3>
+    convDataSeverity = {std::make_pair("Ok", Severity::ok),
+                        std::make_pair("Warning", Severity::warning),
+                        std::make_pair("Critical", Severity::critical)};
+
+} // namespace details
+
+inline Severity stringToSeverity(const std::string& str)
+{
+    return utils::stringToEnum(details::convDataSeverity, str);
 }
 
-using ThresholdParam = std::tuple<std::string, std::underlying_type_t<Severity>,
-                                  std::variant<double>, uint64_t>;
+inline std::string severityToString(Severity v)
+{
+    return std::string(utils::enumToString(details::convDataSeverity, v));
+}
+
+using ThresholdParam =
+    std::tuple<std::string, std::string, std::variant<double>, uint64_t>;
 } // namespace discrete
 
 namespace numeric
@@ -45,19 +59,43 @@
     increasing
 };
 
-inline Type toType(int x)
+namespace details
 {
-    return utils::toEnum<Type, Type::lowerCritical, Type::upperCritical>(x);
+
+constexpr std::array<std::pair<std::string_view, Type>, 4> convDataType = {
+    std::make_pair("LowerCritical", Type::lowerCritical),
+    std::make_pair("LowerWarning", Type::lowerWarning),
+    std::make_pair("UpperWarning", Type::upperWarning),
+    std::make_pair("UpperCritical", Type::upperCritical)};
+
+constexpr std::array<std::pair<std::string_view, Direction>, 3>
+    convDataDirection = {std::make_pair("Either", Direction::either),
+                         std::make_pair("Decreasing", Direction::decreasing),
+                         std::make_pair("Increasing", Direction::increasing)};
+
+} // namespace details
+
+inline Type stringToType(const std::string& str)
+{
+    return utils::stringToEnum(details::convDataType, str);
 }
 
-inline Direction toDirection(int x)
+inline std::string typeToString(Type v)
 {
-    return utils::toEnum<Direction, Direction::either, Direction::increasing>(
-        x);
+    return std::string(utils::enumToString(details::convDataType, v));
 }
 
-using ThresholdParam = std::tuple<std::underlying_type_t<Type>, uint64_t,
-                                  std::underlying_type_t<Direction>, double>;
+inline Direction stringToDirection(const std::string& str)
+{
+    return utils::stringToEnum(details::convDataDirection, str);
+}
+
+inline std::string directionToString(Direction v)
+{
+    return std::string(utils::enumToString(details::convDataDirection, v));
+}
+
+using ThresholdParam = std::tuple<std::string, uint64_t, std::string, double>;
 } // namespace numeric
 
 using TriggerThresholdParams =
diff --git a/src/trigger_factory.cpp b/src/trigger_factory.cpp
index d8484c2..7953cd9 100644
--- a/src/trigger_factory.cpp
+++ b/src/trigger_factory.cpp
@@ -34,18 +34,19 @@
 
     const auto& params =
         std::get<std::vector<numeric::ThresholdParam>>(thresholdParams);
-    for (const auto& [type, dwellTime, direction, value] : params)
+    for (const auto& [typeStr, dwellTime, directionStr, value] : params)
     {
+        numeric::Type type = numeric::stringToType(typeStr);
         std::vector<std::unique_ptr<interfaces::TriggerAction>> actions;
         if (logToJournal)
         {
-            actions.emplace_back(std::make_unique<action::LogToJournal>(
-                numeric::toType(type), value));
+            actions.emplace_back(
+                std::make_unique<action::LogToJournal>(type, value));
         }
         if (logToRedfish)
         {
-            actions.emplace_back(std::make_unique<action::LogToRedfish>(
-                numeric::toType(type), value));
+            actions.emplace_back(
+                std::make_unique<action::LogToRedfish>(type, value));
         }
         if (updateReport)
         {
@@ -56,7 +57,7 @@
         thresholds.emplace_back(std::make_shared<NumericThreshold>(
             bus->get_io_context(), sensors, sensorNames, std::move(actions),
             std::chrono::milliseconds(dwellTime),
-            numeric::toDirection(direction), value));
+            numeric::stringToDirection(directionStr), value));
     }
 
     return std::make_unique<Trigger>(
diff --git a/tests/src/params/trigger_params.hpp b/tests/src/params/trigger_params.hpp
index 9aed64d..6d34d3b 100644
--- a/tests/src/params/trigger_params.hpp
+++ b/tests/src/params/trigger_params.hpp
@@ -71,10 +71,10 @@
     std::vector<std::string> reportNamesProperty = {"Report1"};
     TriggerThresholdParams thresholdsProperty =
         std::vector<numeric::ThresholdParam>{
-            {static_cast<int>(numeric::Type::lowerCritical),
+            {numeric::typeToString(numeric::Type::lowerCritical),
              std::chrono::milliseconds(10).count(),
-             static_cast<int>(numeric::Direction::decreasing), 0.0},
-            {static_cast<int>(numeric::Type::upperCritical),
+             numeric::directionToString(numeric::Direction::decreasing), 0.0},
+            {numeric::typeToString(numeric::Type::upperCritical),
              std::chrono::milliseconds(10).count(),
-             static_cast<int>(numeric::Direction::increasing), 90.0}};
+             numeric::directionToString(numeric::Direction::increasing), 90.0}};
 };
