string conversion utility in rtc driver

This commit is contained in:
Emanuele Trabattoni
2025-07-27 13:59:50 +02:00
parent 448e1bad15
commit ad90702ab6
6 changed files with 128 additions and 54 deletions

View File

@@ -1,4 +1,5 @@
#include <commands.h>
#include <cronjobs.h>
namespace commands
{
@@ -53,19 +54,72 @@ namespace commands
const ArduinoJson::JsonDocument Commands::setCronjob(const devices_t &dev, const ArduinoJson::JsonDocument &params)
{
ArduinoJson::JsonDocument response;
LOG_WARN("setCronjob not yet implemented");
response["cmd"] = "setCronjob";
const auto &jobName = params["name"].as<std::string>();
const auto &timeStr = params["timeStr"].as<std::string>();
const auto &actionStr = params["action"].as<std::string>();
ArduinoJson::JsonDocument action;
if (ArduinoJson::deserializeJson(action, actionStr) != ArduinoJson::DeserializationError::Ok)
{
LOG_ERROR("setCronJob unable to deserialize cron job [", actionStr.c_str(), "]");
response["value"]["status"] = "invalid";
return response;
}
auto &cron = Cron::getInstance(dev);
if (!cron.addEvent(jobName, timeStr, action))
{
LOG_ERROR("setCronJob unable to add job [", actionStr.c_str(), "]");
response["value"]["status"] = "invalid";
return response;
}
LOG_INFO("setCronJob added job [", actionStr.c_str(), "]");
response["value"]["status"] = "valid";
return response;
}
const ArduinoJson::JsonDocument Commands::getCronjob(const devices_t &dev, const ArduinoJson::JsonDocument &params)
{
ArduinoJson::JsonDocument response;
LOG_WARN("getCronjob not yet implemented");
response["cmd"] = "getCronjob";
auto &cron = Cron::getInstance(dev);
auto eventName = params["name"].as<std::string>();
Cron::CronEvent event;
if (eventName.empty() || !cron.getEvent(eventName, event))
{
LOG_ERROR("delCronjob failed to get job [", eventName.c_str(), "]");
response["values"]["status"] = "invalid";
return response;
}
auto cmd = std::get<0>(event);
auto chronExpr = std::get<1>(event);
auto cmdParams = std::get<3>(event);
ArduinoJson::JsonDocument action;
action["cmd"] = cmd;
action["params"] = cmdParams;
response["values"]["name"] = eventName;
response["values"]["timeStr"] = cron::to_cronstr(chronExpr);
response["values"]["action"] = action;
LOG_INFO("getCronjob get job [", eventName.c_str(), "]");
return response;
}
const ArduinoJson::JsonDocument Commands::delCronjob(const devices_t &dev, const ArduinoJson::JsonDocument &params)
{
ArduinoJson::JsonDocument response;
LOG_WARN("delCronjob not yet implemented");
response["cmd"] = "delCronjob";
auto &cron = Cron::getInstance(dev);
auto eventName = params["name"].as<std::string>();
if (eventName.empty() || !cron.delEvent(eventName))
{
LOG_ERROR("delCronjob failed to delete job [", eventName.c_str(), "]");
response["values"]["status"] = "invalid";
return response;
}
response["values"]["status"] = "valid";
return response;
}
// CRONJOBS //