mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-06-14 03:46:49 +03:00
updates
This commit is contained in:
@@ -37,10 +37,14 @@ void WebCommandService::begin() {
|
||||
char topic[Mqtt::MQTT_TOPIC_MAX_SIZE];
|
||||
snprintf(topic, sizeof(topic), "%s/#", F_(commands));
|
||||
Mqtt::subscribe(EMSdevice::DeviceType::COMMAND, topic, nullptr);
|
||||
|
||||
#if defined(EMSESP_TEST)
|
||||
load_test_data();
|
||||
#endif
|
||||
}
|
||||
|
||||
void WebCommands::read(WebCommands & webCommands, JsonObject root) {
|
||||
JsonArray items = root["commands"].to<JsonArray>();
|
||||
JsonArray items = root["commands"].to<JsonArray>();
|
||||
uint8_t counter = 1;
|
||||
for (const CommandItem & ci : webCommands.commandItems) {
|
||||
JsonObject obj = items.add<JsonObject>();
|
||||
@@ -57,8 +61,8 @@ StateUpdateResult WebCommands::update(JsonObject root, WebCommands & webCommands
|
||||
|
||||
auto items = root["commands"].as<JsonArray>();
|
||||
for (const JsonObject item : items) {
|
||||
auto ci = CommandItem();
|
||||
ci.cmd = item["cmd"].as<std::string>();
|
||||
auto ci = CommandItem();
|
||||
ci.cmd = item["cmd"].as<std::string>();
|
||||
ci.value = item["value"].as<std::string>();
|
||||
strlcpy(ci.name, item["name"].as<const char *>(), sizeof(ci.name));
|
||||
|
||||
@@ -67,9 +71,7 @@ StateUpdateResult WebCommands::update(JsonObject root, WebCommands & webCommands
|
||||
Command::add(
|
||||
EMSdevice::DeviceType::COMMAND,
|
||||
webCommands.commandItems.back().name,
|
||||
[](const char * value, const int8_t id) {
|
||||
return EMSESP::webCommandService.executeCommand(value);
|
||||
},
|
||||
[](const char * value, const int8_t id) { return EMSESP::webCommandService.executeCommand(value); },
|
||||
FL_(command_cmd),
|
||||
CommandFlag::ADMIN_ONLY);
|
||||
}
|
||||
@@ -99,7 +101,7 @@ bool WebCommandService::executeCommand(const char * name) {
|
||||
EMSESP::logger().warning("Command '%s' not found", name ? name : "");
|
||||
return false;
|
||||
}
|
||||
return executeCommand(ci->name, ci->cmd, ci->value);
|
||||
return executeCommand(ci->name, std::string(ci->cmd.c_str()), std::string(ci->value.c_str()));
|
||||
}
|
||||
|
||||
// execute a command with explicit cmd and value strings
|
||||
@@ -111,7 +113,7 @@ bool WebCommandService::executeCommand(const char * name, const std::string & co
|
||||
JsonDocument doc;
|
||||
if (deserializeJson(doc, cmd) == DeserializationError::Ok) {
|
||||
std::string url = doc["url"] | "";
|
||||
auto q = url.find_first_of('?');
|
||||
auto q = url.find_first_of('?');
|
||||
if (q != std::string::npos) {
|
||||
auto s = url.substr(q + 1);
|
||||
auto l = s.length();
|
||||
@@ -269,21 +271,33 @@ uint8_t WebCommandService::count_entities() {
|
||||
|
||||
#if defined(EMSESP_TEST)
|
||||
void WebCommandService::load_test_data() {
|
||||
Command::erase_device_commands(EMSdevice::DeviceType::COMMAND);
|
||||
update([&](WebCommands & webCommands) {
|
||||
webCommands.commandItems.clear();
|
||||
|
||||
auto ci = CommandItem();
|
||||
ci.cmd = "system/fetch";
|
||||
auto ci = CommandItem();
|
||||
ci.cmd = "system/fetch";
|
||||
ci.value = "10";
|
||||
strcpy(ci.name, "test_cmd1");
|
||||
webCommands.commandItems.push_back(ci);
|
||||
|
||||
ci = CommandItem();
|
||||
ci.cmd = "system/message";
|
||||
ci = CommandItem();
|
||||
ci.cmd = "system/message";
|
||||
ci.value = "hello";
|
||||
strcpy(ci.name, "test_cmd2");
|
||||
webCommands.commandItems.push_back(ci);
|
||||
|
||||
for (const auto & item : webCommands.commandItems) {
|
||||
if (item.name[0] != '\0') {
|
||||
Command::add(
|
||||
EMSdevice::DeviceType::COMMAND,
|
||||
item.name,
|
||||
[](const char * value, const int8_t id) { return EMSESP::webCommandService.executeCommand(value); },
|
||||
FL_(command_cmd),
|
||||
CommandFlag::ADMIN_ONLY);
|
||||
}
|
||||
}
|
||||
|
||||
return StateUpdateResult::CHANGED;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -49,6 +49,10 @@ void WebSchedulerService::begin() {
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(EMSESP_TEST)
|
||||
load_test_data();
|
||||
#endif
|
||||
}
|
||||
|
||||
// this creates the scheduler file, saving it to the FS
|
||||
@@ -454,6 +458,7 @@ void WebSchedulerService::scheduler_task(void * pvParameters) {
|
||||
|
||||
#if defined(EMSESP_TEST)
|
||||
void WebSchedulerService::load_test_data() {
|
||||
Command::erase_device_commands(EMSdevice::DeviceType::SCHEDULER);
|
||||
update([&](WebScheduler & webScheduler) {
|
||||
webScheduler.scheduleItems.clear();
|
||||
|
||||
@@ -479,6 +484,19 @@ void WebSchedulerService::load_test_data() {
|
||||
|
||||
webScheduler.scheduleItems.push_back(si);
|
||||
|
||||
for (const auto & item : webScheduler.scheduleItems) {
|
||||
if (item.name[0] != '\0') {
|
||||
Command::add(
|
||||
EMSdevice::DeviceType::SCHEDULER,
|
||||
item.name,
|
||||
[name = std::string(item.name)](const char * value, const int8_t id) {
|
||||
return EMSESP::webSchedulerService.command_setvalue(value, id, name.c_str());
|
||||
},
|
||||
FL_(schedule_cmd),
|
||||
CommandFlag::ADMIN_ONLY);
|
||||
}
|
||||
}
|
||||
|
||||
return StateUpdateResult::CHANGED;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user