remove/recreate HA config for dallas/analog on change #888

This commit is contained in:
MichaelDvP
2023-01-11 18:38:07 +01:00
parent 1f0d2b147b
commit 3e3a600a60
2 changed files with 15 additions and 3 deletions

View File

@@ -67,6 +67,10 @@ void AnalogSensor::reload() {
#if defined(EMSESP_STANDALONE) #if defined(EMSESP_STANDALONE)
analog_enabled_ = true; // for local offline testing analog_enabled_ = true; // for local offline testing
#endif #endif
for (auto sensor : sensors_) {
remove_ha_topic(sensor.gpio());
sensor.ha_registered = false;
}
if (!analog_enabled_) { if (!analog_enabled_) {
sensors_.clear(); sensors_.clear();
return; return;
@@ -607,12 +611,16 @@ std::string AnalogSensor::Sensor::name() const {
return name_; return name_;
} }
// set the counter value, id is gpio-no // set the dig_out/counter/DAC/PWM value, id is gpio-no
bool AnalogSensor::command_setvalue(const char * value, const int8_t gpio) { bool AnalogSensor::command_setvalue(const char * value, const int8_t gpio) {
float val; float val;
if (!Helpers::value2float(value, val)) { if (!Helpers::value2float(value, val)) {
bool b;
if (!Helpers::value2bool(value, b)) {
return false; return false;
} }
val = b ? 1 : 0;
}
for (auto & sensor : sensors_) { for (auto & sensor : sensors_) {
if (sensor.gpio() == gpio) { if (sensor.gpio() == gpio) {
if (sensor.type() == AnalogType::COUNTER) { if (sensor.type() == AnalogType::COUNTER) {

View File

@@ -75,6 +75,7 @@ void DallasSensor::reload() {
}); });
for (auto & sensor : sensors_) { for (auto & sensor : sensors_) {
remove_ha_topic(sensor.id());
sensor.ha_registered = false; // force HA configs to be re-created sensor.ha_registered = false; // force HA configs to be re-created
} }
} }
@@ -498,7 +499,10 @@ void DallasSensor::publish_values(const bool force) {
// create the HA MQTT config // create the HA MQTT config
// to e.g. homeassistant/sensor/ems-esp/dallassensor_28-233D-9497-0C03/config // to e.g. homeassistant/sensor/ems-esp/dallassensor_28-233D-9497-0C03/config
if (Mqtt::ha_enabled()) { if (Mqtt::ha_enabled()) {
if (!sensor.ha_registered || force) { if (!has_value && sensor.ha_registered) {
remove_ha_topic(sensor.id());
sensor.ha_registered = false;
} else if (!sensor.ha_registered || force) {
LOG_DEBUG("Recreating HA config for sensor ID %s", sensor.id().c_str()); LOG_DEBUG("Recreating HA config for sensor ID %s", sensor.id().c_str());
StaticJsonDocument<EMSESP_JSON_SIZE_MEDIUM> config; StaticJsonDocument<EMSESP_JSON_SIZE_MEDIUM> config;