From 24a4cb85ff6452703bf7d70bae1a03605b1f269b Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 21 Feb 2023 15:20:30 +0100 Subject: [PATCH] analogsensor HA discovery: types on remove --- src/analogsensor.cpp | 22 ++++++++++++++++++---- src/analogsensor.h | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/analogsensor.cpp b/src/analogsensor.cpp index 3dde12c7d..8561606f1 100644 --- a/src/analogsensor.cpp +++ b/src/analogsensor.cpp @@ -68,7 +68,7 @@ void AnalogSensor::reload() { analog_enabled_ = true; // for local offline testing #endif for (auto sensor : sensors_) { - remove_ha_topic(sensor.gpio()); + remove_ha_topic(sensor.type(), sensor.gpio()); sensor.ha_registered = false; } if (!analog_enabled_) { @@ -333,7 +333,7 @@ bool AnalogSensor::update(uint8_t gpio, const std::string & name, double offset, // if the sensor exists and we're using HA, delete the old HA record if (found_sensor && Mqtt::ha_enabled()) { - remove_ha_topic(gpio); // the GPIO + remove_ha_topic(type, gpio); // the GPIO } // we didn't find it, it's new, so create and store it @@ -384,7 +384,7 @@ void AnalogSensor::publish_sensor(const Sensor & sensor) const { } // send empty config topic to remove the entry from HA -void AnalogSensor::remove_ha_topic(const uint8_t gpio) const { +void AnalogSensor::remove_ha_topic(const int8_t type, const uint8_t gpio) const { if (!Mqtt::ha_enabled()) { return; } @@ -392,7 +392,21 @@ void AnalogSensor::remove_ha_topic(const uint8_t gpio) const { LOG_DEBUG("Removing HA config for analog sensor GPIO %02d", gpio); #endif char topic[Mqtt::MQTT_TOPIC_MAX_SIZE]; - snprintf(topic, sizeof(topic), "sensor/%s/analogsensor_%02d/config", Mqtt::basename().c_str(), gpio); +#if CONFIG_IDF_TARGET_ESP32 + if (type == AnalogType::DIGITAL_OUT && gpio != 25 && gpio != 26) { +#else + if (type == AnalogType::DIGITAL_OUT) +#endif + snprintf(topic, sizeof(topic), "switch/%s/analogsensor_%02d/config", Mqtt::basename().c_str(), gpio); + } else if (type == AnalogType::DIGITAL_OUT) { // DAC + snprintf(topic, sizeof(topic), "number/%s/analogsensor_%02d/config", Mqtt::basename().c_str(), gpio); + } else if (type >= AnalogType::PWM_0) { + snprintf(topic, sizeof(topic), "number/%s/analogsensor_%02d/config", Mqtt::basename().c_str(), gpio); + } else if (type == AnalogType::DIGITAL_IN) { + snprintf(topic, sizeof(topic), "binary-sensor/%s/analogsensor_%02d/config", Mqtt::basename().c_str(), gpio); + } else { + snprintf(topic, sizeof(topic), "sensor/%s/analogsensor_%02d/config", Mqtt::basename().c_str(), gpio); + } Mqtt::publish_ha(topic); } diff --git a/src/analogsensor.h b/src/analogsensor.h index 9b3d2f6c9..e1a847617 100644 --- a/src/analogsensor.h +++ b/src/analogsensor.h @@ -170,7 +170,7 @@ class AnalogSensor { static uuid::log::Logger logger_; - void remove_ha_topic(const uint8_t id) const; + void remove_ha_topic(const int8_t type, const uint8_t id) const; bool command_setvalue(const char * value, const int8_t gpio); void measure(); bool command_info(const char * value, const int8_t id, JsonObject & output) const;