mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 07:49:52 +03:00
Merge branch 'dev' into dev
This commit is contained in:
@@ -286,7 +286,7 @@ const char * Command::parse_command_string(const char * command, int8_t & id) {
|
||||
|
||||
// check if command contains an attribute
|
||||
const char * Command::get_attribute(const char * cmd) {
|
||||
char * breakp = strchr(cmd, '/');
|
||||
char * breakp = (char *)strchr(cmd, '/');
|
||||
if (breakp) {
|
||||
*breakp = '\0';
|
||||
return breakp + 1;
|
||||
|
||||
@@ -541,14 +541,14 @@ static void setup_commands(std::shared_ptr<Commands> & commands) {
|
||||
cmd = Command::parse_command_string(cmd, id); // extract hc or dhw
|
||||
}
|
||||
if (cmd == nullptr) {
|
||||
cmd = device_type == EMSdevice::DeviceType::SYSTEM ? F_(info) : F_(values);
|
||||
cmd = F_(values);
|
||||
}
|
||||
|
||||
if (arguments.size() == 2) {
|
||||
// no value specified, just the cmd
|
||||
return_code = Command::call(device_type, cmd, nullptr, true, id, json);
|
||||
} else if (arguments.size() == 3) {
|
||||
if ((strncmp(cmd, F_(info), 4) == 0) || strncmp(cmd, F_(values), 6) == 0) {
|
||||
if (!strcmp(cmd, F_(info)) || !strcmp(cmd, F_(values))) {
|
||||
// info has a id but no value
|
||||
return_code = Command::call(device_type, cmd, nullptr, true, atoi(arguments.back().c_str()), json);
|
||||
} else if (arguments[2] == "?") {
|
||||
|
||||
@@ -1316,7 +1316,7 @@ bool System::get_value_info(JsonObject output, const char * cmd) {
|
||||
if (p.value().is<JsonObject>()) {
|
||||
// String prefix = p.key().c_str();
|
||||
for (JsonPair p1 : p.value().as<JsonObject>()) {
|
||||
JsonObject entity = output[String(p.key().c_str()) + '.' + p1.key().c_str()].to<JsonObject>();
|
||||
JsonObject entity = output[std::string(p.key().c_str()) + "." + p1.key().c_str()].to<JsonObject>();
|
||||
get_value_json(entity, p.key().c_str(), p1.key().c_str(), p1.value());
|
||||
}
|
||||
} // else { // we don't have pairs in json root object
|
||||
@@ -1326,12 +1326,12 @@ bool System::get_value_info(JsonObject output, const char * cmd) {
|
||||
return true;
|
||||
}
|
||||
|
||||
char * val = strstr(cmd, "/value");
|
||||
char * val = (char *)strstr(cmd, "/value");
|
||||
if (val) {
|
||||
*val = '\0';
|
||||
}
|
||||
|
||||
char * slash = strchr(cmd, '/');
|
||||
char * slash = (char *)strchr(cmd, '/');
|
||||
if (slash) {
|
||||
*slash = '\0';
|
||||
slash++;
|
||||
|
||||
@@ -336,29 +336,30 @@ bool WebSchedulerService::command(const char * name, const std::string & command
|
||||
if (deserializeJson(doc, cmd) == DeserializationError::Ok) {
|
||||
HTTPClient http;
|
||||
int httpResult = 0;
|
||||
String url = doc["url"] | "";
|
||||
std::string url = doc["url"] | "";
|
||||
// for a GET with parameters replace commands with values
|
||||
auto q = url.indexOf('?');
|
||||
if (q != -1) {
|
||||
auto s = url.substring(q + 1);
|
||||
std::string v = s.c_str();
|
||||
commands(v, false);
|
||||
url.replace(s, v.c_str());
|
||||
// don't search the complete url, it may contain a devicename in path
|
||||
auto q = url.find_first_of('?');
|
||||
if (q != std::string::npos) {
|
||||
auto s = url.substr(q + 1); // copy only parameters
|
||||
auto l = s.length();
|
||||
commands(s, false);
|
||||
url.replace(q + 1, l, s);
|
||||
}
|
||||
if (url.startsWith("http") && http.begin(url)) {
|
||||
if (!url.find("http") && http.begin(url.c_str())) {
|
||||
// add any given headers
|
||||
for (JsonPair p : doc["header"].as<JsonObject>()) {
|
||||
http.addHeader(p.key().c_str(), p.value().as<String>().c_str());
|
||||
}
|
||||
String value = doc["value"] | data.c_str(); // extract value if its in the command, or take the data
|
||||
String method = doc["method"] | "GET"; // default GET
|
||||
std::string value = doc["value"] | data.c_str(); // extract value if its in the command, or take the data
|
||||
std::string method = doc["method"] | "GET"; // default GET
|
||||
|
||||
// if there is data, force a POST
|
||||
if (value.length() || method == "post") { // we have all lowercase
|
||||
if (value.startsWith("{")) {
|
||||
if (value.find_first_of('{') != std::string::npos) {
|
||||
http.addHeader("Content-Type", "application/json"); // auto-set to JSON
|
||||
}
|
||||
httpResult = http.POST(value);
|
||||
httpResult = http.POST(value.c_str());
|
||||
} else {
|
||||
httpResult = http.GET(); // normal GET
|
||||
}
|
||||
|
||||
@@ -613,28 +613,28 @@ std::string compute(const std::string & expr) {
|
||||
JsonDocument doc;
|
||||
if (DeserializationError::Ok == deserializeJson(doc, cmd)) {
|
||||
HTTPClient http;
|
||||
String url = doc["url"] | "";
|
||||
if (url.startsWith("http") && http.begin(url)) {
|
||||
std::string url = doc["url"] | "";
|
||||
if (!url.find("http") && http.begin(url.c_str())) {
|
||||
int httpResult = 0;
|
||||
for (JsonPair p : doc["header"].as<JsonObject>()) {
|
||||
http.addHeader(p.key().c_str(), p.value().as<std::string>().c_str());
|
||||
}
|
||||
String value = doc["value"] | "";
|
||||
String method = doc["method"] | "GET"; // default GET
|
||||
std::string value = doc["value"] | "";
|
||||
std::string method = doc["method"] | "GET"; // default GET
|
||||
|
||||
// if there is data, force a POST
|
||||
if (value.length() || method == "post") {
|
||||
if (value.startsWith("{")) {
|
||||
if (value.find_first_of('{') != std::string::npos) {
|
||||
http.addHeader("Content-Type", "application/json"); // auto-set to JSON
|
||||
}
|
||||
httpResult = http.POST(value);
|
||||
httpResult = http.POST(value.c_str());
|
||||
} else {
|
||||
httpResult = http.GET(); // normal GET
|
||||
}
|
||||
|
||||
if (httpResult > 0) {
|
||||
std::string result = emsesp::Helpers::toLower(http.getString().c_str());
|
||||
String key = doc["key"] | "";
|
||||
std::string key = doc["key"] | "";
|
||||
doc.clear();
|
||||
if (key.length() && DeserializationError::Ok == deserializeJson(doc, result)) {
|
||||
result = doc[key.c_str()].as<std::string>();
|
||||
@@ -644,7 +644,7 @@ std::string compute(const std::string & expr) {
|
||||
http.end();
|
||||
}
|
||||
}
|
||||
f = expr_new.find_first_of("{", e);
|
||||
f = expr_new.find_first_of('{', e);
|
||||
}
|
||||
|
||||
// positions: q-questionmark, c-colon
|
||||
|
||||
Reference in New Issue
Block a user