value-info enum as text with list

This commit is contained in:
MichaelDvP
2021-04-22 18:24:10 +02:00
parent 7cabae7ef5
commit 23455750fa
2 changed files with 27 additions and 16 deletions

View File

@@ -618,22 +618,28 @@ bool EMSdevice::get_value_info(JsonObject & root, const char * cmd) {
for (auto & dv : devicevalues_) { for (auto & dv : devicevalues_) {
if (strcmp(cmd, uuid::read_flash_string(dv.short_name).c_str()) == 0) { if (strcmp(cmd, uuid::read_flash_string(dv.short_name).c_str()) == 0) {
uint8_t divider = (dv.options_size == 1) ? Helpers::atoint(uuid::read_flash_string(dv.options[0]).c_str()) : 0; uint8_t divider = (dv.options_size == 1) ? Helpers::atoint(uuid::read_flash_string(dv.options[0]).c_str()) : 0;
json["name"] = cmd; json["name"] = cmd;
switch (dv.type) { switch (dv.type) {
case DeviceValueType::ENUM: case DeviceValueType::ENUM: {
// json["value"] = dv.options[*(uint8_t *)(dv.value_p)]; // text
if (Helpers::hasValue((uint8_t)(*(uint8_t *)(dv.value_p)))) { if (Helpers::hasValue((uint8_t)(*(uint8_t *)(dv.value_p)))) {
json["value"] = (uint8_t)(*(uint8_t *)(dv.value_p)); json["value"] = dv.options[*(uint8_t *)(dv.value_p)]; // text
// json["value"] = (uint8_t)(*(uint8_t *)(dv.value_p));
}
json["type"] = F_(enum);
uint8_t min = (uuid::read_flash_string(dv.options[*(uint8_t *)(dv.value_p)]) == "") ? 1 : 0;
json["min"] = min;
json["max"] = dv.options_size - 1;
JsonArray enum_ = json.createNestedArray(F_(enum));
for (uint8_t i = min; i < dv.options_size; i++) {
enum_.add(dv.options[i]);
} }
json["type"] = "enum";
json["min"] = 0;
json["max"] = dv.options_size - 1;
break; break;
}
case DeviceValueType::USHORT: case DeviceValueType::USHORT:
if (Helpers::hasValue(*(uint16_t *)(dv.value_p))) { if (Helpers::hasValue(*(uint16_t *)(dv.value_p))) {
json["value"] = Helpers::round2(*(uint16_t *)(dv.value_p), divider); json["value"] = Helpers::round2(*(uint16_t *)(dv.value_p), divider);
} }
json["type"] = "number"; json["type"] = F_(number);
json["min"] = 0; json["min"] = 0;
json["max"] = divider ? EMS_VALUE_USHORT_NOTSET / divider : EMS_VALUE_USHORT_NOTSET; json["max"] = divider ? EMS_VALUE_USHORT_NOTSET / divider : EMS_VALUE_USHORT_NOTSET;
break; break;
@@ -641,7 +647,7 @@ bool EMSdevice::get_value_info(JsonObject & root, const char * cmd) {
if (Helpers::hasValue(*(uint8_t *)(dv.value_p))) { if (Helpers::hasValue(*(uint8_t *)(dv.value_p))) {
json["value"] = Helpers::round2(*(uint8_t *)(dv.value_p), divider); json["value"] = Helpers::round2(*(uint8_t *)(dv.value_p), divider);
} }
json["type"] = "number"; json["type"] = F_(number);
json["min"] = 0; json["min"] = 0;
if (dv.uom == DeviceValueUOM::PERCENT) { if (dv.uom == DeviceValueUOM::PERCENT) {
json["max"] = 100; json["max"] = 100;
@@ -653,7 +659,7 @@ bool EMSdevice::get_value_info(JsonObject & root, const char * cmd) {
if (Helpers::hasValue(*(int16_t *)(dv.value_p))) { if (Helpers::hasValue(*(int16_t *)(dv.value_p))) {
json["value"] = Helpers::round2(*(int16_t *)(dv.value_p), divider); json["value"] = Helpers::round2(*(int16_t *)(dv.value_p), divider);
} }
json["type"] = "number"; json["type"] = F_(number);
json["min"] = divider ? -EMS_VALUE_SHORT_NOTSET / divider : -EMS_VALUE_SHORT_NOTSET; json["min"] = divider ? -EMS_VALUE_SHORT_NOTSET / divider : -EMS_VALUE_SHORT_NOTSET;
json["max"] = divider ? EMS_VALUE_SHORT_NOTSET / divider : EMS_VALUE_SHORT_NOTSET; json["max"] = divider ? EMS_VALUE_SHORT_NOTSET / divider : EMS_VALUE_SHORT_NOTSET;
break; break;
@@ -661,7 +667,7 @@ bool EMSdevice::get_value_info(JsonObject & root, const char * cmd) {
if (Helpers::hasValue(*(int8_t *)(dv.value_p))) { if (Helpers::hasValue(*(int8_t *)(dv.value_p))) {
json["value"] = Helpers::round2(*(int8_t *)(dv.value_p), divider); json["value"] = Helpers::round2(*(int8_t *)(dv.value_p), divider);
} }
json["type"] = "number"; json["type"] = F_(number);
if (dv.uom == DeviceValueUOM::PERCENT) { if (dv.uom == DeviceValueUOM::PERCENT) {
json["min"] = -100; json["min"] = -100;
json["max"] = 100; json["max"] = 100;
@@ -674,7 +680,7 @@ bool EMSdevice::get_value_info(JsonObject & root, const char * cmd) {
if (Helpers::hasValue(*(uint32_t *)(dv.value_p))) { if (Helpers::hasValue(*(uint32_t *)(dv.value_p))) {
json["value"] = Helpers::round2(*(uint32_t *)(dv.value_p), divider); json["value"] = Helpers::round2(*(uint32_t *)(dv.value_p), divider);
} }
json["type"] = "number"; json["type"] = F_(number);
json["min"] = 0; json["min"] = 0;
json["max"] = divider ? EMS_VALUE_ULONG_NOTSET / divider : EMS_VALUE_ULONG_NOTSET; json["max"] = divider ? EMS_VALUE_ULONG_NOTSET / divider : EMS_VALUE_ULONG_NOTSET;
break; break;
@@ -682,13 +688,13 @@ bool EMSdevice::get_value_info(JsonObject & root, const char * cmd) {
if (Helpers::hasValue(*(uint8_t *)(dv.value_p), EMS_VALUE_BOOL)) { if (Helpers::hasValue(*(uint8_t *)(dv.value_p), EMS_VALUE_BOOL)) {
json["value"] = (bool)(*(uint8_t *)(dv.value_p)) ? true : false; json["value"] = (bool)(*(uint8_t *)(dv.value_p)) ? true : false;
} }
json["type"] = "boolean"; json["type"] = F_(boolean);
break; break;
case DeviceValueType::TIME: case DeviceValueType::TIME:
if (Helpers::hasValue(*(uint32_t *)(dv.value_p))) { if (Helpers::hasValue(*(uint32_t *)(dv.value_p))) {
json["value"] = (divider) ? *(uint32_t *)(dv.value_p) / divider : *(uint32_t *)(dv.value_p); json["value"] = (divider) ? *(uint32_t *)(dv.value_p) / divider : *(uint32_t *)(dv.value_p);
} }
json["type"] = "number"; json["type"] = F_(number);
json["min"] = 0; json["min"] = 0;
json["max"] = divider ? EMS_VALUE_ULONG_NOTSET / divider : EMS_VALUE_ULONG_NOTSET; json["max"] = divider ? EMS_VALUE_ULONG_NOTSET / divider : EMS_VALUE_ULONG_NOTSET;
break; break;
@@ -696,10 +702,10 @@ bool EMSdevice::get_value_info(JsonObject & root, const char * cmd) {
if (Helpers::hasValue((char *)(dv.value_p))) { if (Helpers::hasValue((char *)(dv.value_p))) {
json["value"] = (char *)(dv.value_p); json["value"] = (char *)(dv.value_p);
} }
json["type"] = "text"; json["type"] = F_(text);
break; break;
default: default:
json["type"] = "unknown"; json["type"] = F_(unknown);
break; break;
} }
if (dv.uom != DeviceValueUOM::NONE) { if (dv.uom != DeviceValueUOM::NONE) {

View File

@@ -135,6 +135,11 @@ MAKE_PSTR(new_password_prompt2, "Retype new password: ")
MAKE_PSTR(password_prompt, "Password: ") MAKE_PSTR(password_prompt, "Password: ")
MAKE_PSTR(unset, "<unset>") MAKE_PSTR(unset, "<unset>")
MAKE_PSTR_WORD(number);
MAKE_PSTR_WORD(enum);
MAKE_PSTR_WORD(boolean);
MAKE_PSTR_WORD(text);
MAKE_PSTR_WORD(2); MAKE_PSTR_WORD(2);
MAKE_PSTR_WORD(10); MAKE_PSTR_WORD(10);
MAKE_PSTR_WORD(100); MAKE_PSTR_WORD(100);