diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 1cbe1ec79..b2c606106 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -4451,7 +4451,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrremotetemp, - DeviceValueType::INT16, + DeviceValueType::CMD, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(remotetemp), DeviceValueUOM::DEGREES, @@ -4524,7 +4524,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrheatingtype, DeviceValueType::ENUM, FL_(enum_heatingtype), FL_(heatingtype), DeviceValueUOM::NONE, MAKE_CF_CB(set_heatingtype)); register_device_value(tag, &hc->summertemp, DeviceValueType::UINT8, FL_(summertemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_summertemp), 10, 30); register_device_value(tag, &hc->summermode, DeviceValueType::ENUM, FL_(enum_summer), FL_(summermode), DeviceValueUOM::NONE); - register_device_value(tag, &hc->remotetemp, DeviceValueType::INT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(remotetemp), DeviceValueUOM::DEGREES); + register_device_value(tag, &hc->remotetemp, DeviceValueType::CMD, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(remotetemp), DeviceValueUOM::DEGREES); break; case EMSdevice::EMS_DEVICE_FLAG_RC25: register_device_value(tag, &hc->mode, DeviceValueType::ENUM, FL_(enum_mode3), FL_(mode), DeviceValueUOM::NONE, MAKE_CF_CB(set_mode)); @@ -4675,7 +4675,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrvacreducemode, DeviceValueType::ENUM, FL_(enum_reducemode), FL_(vacreducemode), DeviceValueUOM::NONE, MAKE_CF_CB(set_vacreducemode)); register_device_value(tag, &hc->remotetemp, - DeviceValueType::INT16, + DeviceValueType::CMD, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(remotetemp), DeviceValueUOM::DEGREES, @@ -4712,7 +4712,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrprogram, DeviceValueType::ENUM, FL_(enum_progMode4), FL_(program), DeviceValueUOM::NONE, MAKE_CF_CB(set_program)); register_device_value(tag, &hc->remotetemp, - DeviceValueType::INT16, + DeviceValueType::CMD, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(remotetemp), DeviceValueUOM::DEGREES, diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index 0175d5bba..d1ff1e34c 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -534,6 +534,12 @@ void EMSdevice::add_device_value(int8_t tag, // to b *(int8_t *)(value_p) = System::test_set_all_active() ? EMS_VALUE_DEFAULT_BOOL_DUMMY : EMS_VALUE_DEFAULT_BOOL; // bool is uint8_t, but other initial value } else if (type == DeviceValueType::ENUM) { *(uint8_t *)(value_p) = System::test_set_all_active() ? EMS_VALUE_DEFAULT_ENUM_DUMMY : EMS_VALUE_DEFAULT_ENUM; // enums behave as uint8_t + } else if (type == DeviceValueType::CMD) { + if (uom == DeviceValueUOM::NONE) { + *(uint8_t *)(value_p) = System::test_set_all_active() ? EMS_VALUE_DEFAULT_ENUM_DUMMY : EMS_VALUE_DEFAULT_ENUM; // enums behave as uint8_t + } else if (uom == DeviceValueUOM::DEGREES) { + *(int16_t *)(value_p) = System::test_set_all_active() ? EMS_VALUE_DEFAULT_INT16_DUMMY : EMS_VALUE_DEFAULT_INT16; + } } uint8_t state = DeviceValueState::DV_DEFAULT; // determine state @@ -981,7 +987,7 @@ void EMSdevice::generate_values_web(JsonObject output) { l.add(Helpers::render_boolean(result, true, true)); } // add command help template - else if (dv.type == DeviceValueType::STRING || dv.type == DeviceValueType::CMD) { + else if (dv.type == DeviceValueType::STRING || (dv.type == DeviceValueType::CMD && dv.uom == DeviceValueUOM::NONE)) { if (dv.options_size == 1) { obj["h"] = dv.options_single[0]; // NOT translated } diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 211f8d0b2..e912bcacc 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -959,9 +959,18 @@ bool Mqtt::publish_ha_sensor_config(uint8_t type, // EMSdev readonly_sensors = false; break; case DeviceValueType::ENUM: + snprintf(topic, sizeof(topic), "select/%s", config_topic); + readonly_sensors = false; + break; case DeviceValueType::CMD: // hardcoded commands are always ENUMS // select - https://www.home-assistant.io/integrations/select.mqtt - snprintf(topic, sizeof(topic), "select/%s", config_topic); + if (uom == DeviceValueUOM::NONE) { + snprintf(topic, sizeof(topic), "select/%s", config_topic); + } else if (discovery_type() == discoveryType::HOMEASSISTANT || discovery_type() == discoveryType::DOMOTICZ_LATEST) { + snprintf(topic, sizeof(topic), "number/%s", config_topic); + } else { + snprintf(topic, sizeof(topic), "sensor/%s", config_topic); + } readonly_sensors = false; break; case DeviceValueType::STRING: