mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
bool value info, dont show command only in mqtt/telnet
This commit is contained in:
@@ -652,6 +652,11 @@ bool EMSdevice::get_value_info(JsonObject & root, const char * cmd, const int8_t
|
|||||||
for (auto & dv : devicevalues_) {
|
for (auto & dv : devicevalues_) {
|
||||||
if (strcmp(cmd, Helpers::toLower(uuid::read_flash_string(dv.short_name)).c_str()) == 0 && (tag <= 0 || tag == dv.tag)) {
|
if (strcmp(cmd, Helpers::toLower(uuid::read_flash_string(dv.short_name)).c_str()) == 0 && (tag <= 0 || tag == dv.tag)) {
|
||||||
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;
|
||||||
|
const char * type = "type";
|
||||||
|
const char * min = "min";
|
||||||
|
const char * max = "max";
|
||||||
|
const char * value = "value";
|
||||||
|
|
||||||
json["name"] = dv.short_name;
|
json["name"] = dv.short_name;
|
||||||
if (!tag_to_mqtt(dv.tag).empty()) {
|
if (!tag_to_mqtt(dv.tag).empty()) {
|
||||||
json["circuit"] = tag_to_mqtt(dv.tag);
|
json["circuit"] = tag_to_mqtt(dv.tag);
|
||||||
@@ -659,116 +664,133 @@ bool EMSdevice::get_value_info(JsonObject & root, const char * cmd, const int8_t
|
|||||||
switch (dv.type) {
|
switch (dv.type) {
|
||||||
case DeviceValueType::ENUM: {
|
case DeviceValueType::ENUM: {
|
||||||
if (Helpers::hasValue((uint8_t)(*(uint8_t *)(dv.value_p)))) {
|
if (Helpers::hasValue((uint8_t)(*(uint8_t *)(dv.value_p)))) {
|
||||||
json["value"] = dv.options[*(uint8_t *)(dv.value_p)]; // text
|
if (Mqtt::bool_format() == BOOL_FORMAT_10) {
|
||||||
// json["value"] = (uint8_t)(*(uint8_t *)(dv.value_p));
|
json[value] = (uint8_t)(*(uint8_t *)(dv.value_p));
|
||||||
|
} else {
|
||||||
|
json[value] = dv.options[*(uint8_t *)(dv.value_p)]; // text
|
||||||
}
|
}
|
||||||
json["type"] = F_(enum);
|
}
|
||||||
uint8_t min = (uuid::read_flash_string(dv.options[*(uint8_t *)(dv.value_p)]) == "") ? 1 : 0;
|
json[type] = F_(enum);
|
||||||
json["min"] = min;
|
uint8_t min_ = (uuid::read_flash_string(dv.options[0]) == "") ? 1 : 0;
|
||||||
json["max"] = dv.options_size - 1;
|
json[min] = min_;
|
||||||
|
json[max] = dv.options_size - 1;
|
||||||
JsonArray enum_ = json.createNestedArray(F_(enum));
|
JsonArray enum_ = json.createNestedArray(F_(enum));
|
||||||
for (uint8_t i = min; i < dv.options_size; i++) {
|
for (uint8_t i = min_; i < dv.options_size; i++) {
|
||||||
enum_.add(dv.options[i]);
|
enum_.add(dv.options[i]);
|
||||||
}
|
}
|
||||||
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"] = F_(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;
|
||||||
case DeviceValueType::UINT:
|
case DeviceValueType::UINT:
|
||||||
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"] = F_(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;
|
||||||
} else {
|
} else {
|
||||||
json["max"] = divider ? EMS_VALUE_UINT_NOTSET / divider : EMS_VALUE_UINT_NOTSET;
|
json[max] = divider ? EMS_VALUE_UINT_NOTSET / divider : EMS_VALUE_UINT_NOTSET;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DeviceValueType::SHORT:
|
case DeviceValueType::SHORT:
|
||||||
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"] = F_(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;
|
||||||
case DeviceValueType::INT:
|
case DeviceValueType::INT:
|
||||||
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"] = F_(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;
|
||||||
} else {
|
} else {
|
||||||
json["min"] = divider ? -EMS_VALUE_INT_NOTSET / divider : -EMS_VALUE_INT_NOTSET;
|
json[min] = divider ? -EMS_VALUE_INT_NOTSET / divider : -EMS_VALUE_INT_NOTSET;
|
||||||
json["max"] = divider ? EMS_VALUE_INT_NOTSET / divider : EMS_VALUE_INT_NOTSET;
|
json[max] = divider ? EMS_VALUE_INT_NOTSET / divider : EMS_VALUE_INT_NOTSET;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DeviceValueType::ULONG:
|
case DeviceValueType::ULONG:
|
||||||
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"] = F_(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;
|
||||||
case DeviceValueType::BOOL: {
|
case DeviceValueType::BOOL: {
|
||||||
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;
|
if (dv.options_size == 2) {
|
||||||
|
json[value] = (bool)(*(uint8_t *)(dv.value_p)) ? dv.options[0] : dv.options[1];
|
||||||
|
} else if (Mqtt::bool_format() == BOOL_FORMAT_ONOFF) {
|
||||||
|
json[value] = (bool)(*(uint8_t *)(dv.value_p)) ? F_(on) : F_(off);
|
||||||
|
} else if (Mqtt::bool_format() == BOOL_FORMAT_ONOFF_CAP) {
|
||||||
|
json[value] = (bool)(*(uint8_t *)(dv.value_p)) ? F_(ON) : F_(OFF);
|
||||||
|
} else if (Mqtt::bool_format() == BOOL_FORMAT_TRUEFALSE) {
|
||||||
|
json[value] = (bool)(*(uint8_t *)(dv.value_p)) ? true : false;
|
||||||
|
} else {
|
||||||
|
json[value] = (bool)(*(uint8_t *)(dv.value_p)) ? 1 : 0;
|
||||||
}
|
}
|
||||||
json["type"] = F("boolean");
|
}
|
||||||
json["min"] = 0;
|
json[type] = F("boolean");
|
||||||
json["max"] = 1;
|
json[min] = 0;
|
||||||
JsonArray enum_ = json.createNestedArray(F("enum"));
|
json[max] = 1;
|
||||||
|
JsonArray enum_ = json.createNestedArray(F_(enum));
|
||||||
if (dv.options_size == 2) {
|
if (dv.options_size == 2) {
|
||||||
enum_.add(dv.options[1]);
|
enum_.add(dv.options[1]);
|
||||||
enum_.add(dv.options[0]);
|
enum_.add(dv.options[0]);
|
||||||
} else if (Mqtt::bool_format() == BOOL_FORMAT_ONOFF) {
|
} else if (Mqtt::bool_format() == BOOL_FORMAT_ONOFF) {
|
||||||
enum_.add("off");
|
enum_.add(F_(off));
|
||||||
enum_.add("on");
|
enum_.add(F_(on));
|
||||||
} else if (Mqtt::bool_format() == BOOL_FORMAT_ONOFF_CAP) {
|
} else if (Mqtt::bool_format() == BOOL_FORMAT_ONOFF_CAP) {
|
||||||
enum_.add("OFF");
|
enum_.add(F_(OFF));
|
||||||
enum_.add("ON");
|
enum_.add(F_(ON));
|
||||||
} else {
|
} else if (Mqtt::bool_format() == BOOL_FORMAT_TRUEFALSE) {
|
||||||
enum_.add(false);
|
enum_.add(false);
|
||||||
enum_.add(true);
|
enum_.add(true);
|
||||||
|
} else {
|
||||||
|
enum_.add(0);
|
||||||
|
enum_.add(1);
|
||||||
}
|
}
|
||||||
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"] = F_(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;
|
||||||
case DeviceValueType::TEXT:
|
case DeviceValueType::TEXT:
|
||||||
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"] = F_(text);
|
json[type] = F_(text);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
json["type"] = F_(unknown);
|
json[type] = F_(unknown);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (dv.uom != DeviceValueUOM::NONE) {
|
if (dv.uom != DeviceValueUOM::NONE) {
|
||||||
json["unit"] = EMSdevice::uom_to_string(dv.uom);
|
json["unit"] = EMSdevice::uom_to_string(dv.uom);
|
||||||
}
|
}
|
||||||
json["writeable"] = dv.has_cmd;
|
json["writeable"] = dv.has_cmd;
|
||||||
|
// if we have individual limits, overwrite the common limits
|
||||||
if (dv.min != 0 || dv.max != 0) {
|
if (dv.min != 0 || dv.max != 0) {
|
||||||
json["min"] = dv.min;
|
json[min] = dv.min;
|
||||||
json["max"] = dv.max;
|
json[max] = dv.max;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -788,8 +810,8 @@ bool EMSdevice::generate_values_json(JsonObject & root, const uint8_t tag_filter
|
|||||||
bool has_value = false;
|
bool has_value = false;
|
||||||
// only show if tag is either empty (TAG_NONE) or matches a value
|
// only show if tag is either empty (TAG_NONE) or matches a value
|
||||||
// and don't show if full_name is empty unless we're outputing for mqtt payloads
|
// and don't show if full_name is empty unless we're outputing for mqtt payloads
|
||||||
// for nested we use all values
|
// for nested we use all values, dont show command only (have_cmd and no fulname)
|
||||||
if (((nested) || tag_filter == DeviceValueTAG::TAG_NONE || (tag_filter == dv.tag)) && (dv.full_name != nullptr || !console)) {
|
if (((nested) || tag_filter == DeviceValueTAG::TAG_NONE || (tag_filter == dv.tag)) && (dv.full_name != nullptr || !console) && !(dv.full_name == nullptr && dv.has_cmd)) {
|
||||||
// we have a tag if it matches the filter given, and that the tag name is not empty/""
|
// we have a tag if it matches the filter given, and that the tag name is not empty/""
|
||||||
bool have_tag = ((dv.tag != tag_filter) && !tag_to_string(dv.tag).empty());
|
bool have_tag = ((dv.tag != tag_filter) && !tag_to_string(dv.tag).empty());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user