mirror of
https://github.com/esphome/esphome.git
synced 2024-12-12 08:24:55 +01:00
MQTT sensors handling of publishing NaN values (#7768)
Some checks are pending
CI for docker images / Build docker containers (push) Waiting to run
CI / Test split components (push) Blocked by required conditions
CI / Check black (push) Blocked by required conditions
CI / Check flake8 (push) Blocked by required conditions
CI / Create common environment (push) Waiting to run
CI / Check pylint (push) Blocked by required conditions
CI / Check pyupgrade (push) Blocked by required conditions
CI / Run script/ci-custom (push) Blocked by required conditions
CI / Run pytest (push) Blocked by required conditions
CI / Check clang-format (push) Blocked by required conditions
CI / Run script/clang-tidy for ESP32 Arduino 1/4 (push) Blocked by required conditions
CI / Run script/clang-tidy for ESP32 Arduino 2/4 (push) Blocked by required conditions
CI / Run script/clang-tidy for ESP32 Arduino 3/4 (push) Blocked by required conditions
CI / CI Status (push) Blocked by required conditions
YAML lint / yamllint (push) Waiting to run
CI / Run script/clang-tidy for ESP32 Arduino 4/4 (push) Blocked by required conditions
CI / Run script/clang-tidy for ESP32 IDF (push) Blocked by required conditions
CI / Run script/clang-tidy for ESP8266 (push) Blocked by required conditions
CI / list-components (push) Blocked by required conditions
CI / Component test (push) Blocked by required conditions
CI / Split components for testing into 20 groups maximum (push) Blocked by required conditions
Some checks are pending
CI for docker images / Build docker containers (push) Waiting to run
CI / Test split components (push) Blocked by required conditions
CI / Check black (push) Blocked by required conditions
CI / Check flake8 (push) Blocked by required conditions
CI / Create common environment (push) Waiting to run
CI / Check pylint (push) Blocked by required conditions
CI / Check pyupgrade (push) Blocked by required conditions
CI / Run script/ci-custom (push) Blocked by required conditions
CI / Run pytest (push) Blocked by required conditions
CI / Check clang-format (push) Blocked by required conditions
CI / Run script/clang-tidy for ESP32 Arduino 1/4 (push) Blocked by required conditions
CI / Run script/clang-tidy for ESP32 Arduino 2/4 (push) Blocked by required conditions
CI / Run script/clang-tidy for ESP32 Arduino 3/4 (push) Blocked by required conditions
CI / CI Status (push) Blocked by required conditions
YAML lint / yamllint (push) Waiting to run
CI / Run script/clang-tidy for ESP32 Arduino 4/4 (push) Blocked by required conditions
CI / Run script/clang-tidy for ESP32 IDF (push) Blocked by required conditions
CI / Run script/clang-tidy for ESP8266 (push) Blocked by required conditions
CI / list-components (push) Blocked by required conditions
CI / Component test (push) Blocked by required conditions
CI / Split components for testing into 20 groups maximum (push) Blocked by required conditions
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
parent
9c8976be13
commit
584dbf2668
6 changed files with 18 additions and 0 deletions
|
@ -49,6 +49,7 @@ from esphome.const import (
|
||||||
CONF_USE_ABBREVIATIONS,
|
CONF_USE_ABBREVIATIONS,
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
CONF_WILL_MESSAGE,
|
CONF_WILL_MESSAGE,
|
||||||
|
CONF_PUBLISH_NAN_AS_NONE,
|
||||||
PLATFORM_BK72XX,
|
PLATFORM_BK72XX,
|
||||||
PLATFORM_ESP32,
|
PLATFORM_ESP32,
|
||||||
PLATFORM_ESP8266,
|
PLATFORM_ESP8266,
|
||||||
|
@ -296,6 +297,7 @@ CONFIG_SCHEMA = cv.All(
|
||||||
cv.Optional(CONF_QOS, default=0): cv.mqtt_qos,
|
cv.Optional(CONF_QOS, default=0): cv.mqtt_qos,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
|
cv.Optional(CONF_PUBLISH_NAN_AS_NONE, default=False): cv.boolean,
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
validate_config,
|
validate_config,
|
||||||
|
@ -449,6 +451,8 @@ async def to_code(config):
|
||||||
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
||||||
await automation.build_automation(trigger, [], conf)
|
await automation.build_automation(trigger, [], conf)
|
||||||
|
|
||||||
|
cg.add(var.set_publish_nan_as_none(config[CONF_PUBLISH_NAN_AS_NONE]))
|
||||||
|
|
||||||
|
|
||||||
MQTT_PUBLISH_ACTION_SCHEMA = cv.Schema(
|
MQTT_PUBLISH_ACTION_SCHEMA = cv.Schema(
|
||||||
{
|
{
|
||||||
|
|
|
@ -608,6 +608,10 @@ void MQTTClientComponent::set_log_message_template(MQTTMessage &&message) { this
|
||||||
const MQTTDiscoveryInfo &MQTTClientComponent::get_discovery_info() const { return this->discovery_info_; }
|
const MQTTDiscoveryInfo &MQTTClientComponent::get_discovery_info() const { return this->discovery_info_; }
|
||||||
void MQTTClientComponent::set_topic_prefix(const std::string &topic_prefix) { this->topic_prefix_ = topic_prefix; }
|
void MQTTClientComponent::set_topic_prefix(const std::string &topic_prefix) { this->topic_prefix_ = topic_prefix; }
|
||||||
const std::string &MQTTClientComponent::get_topic_prefix() const { return this->topic_prefix_; }
|
const std::string &MQTTClientComponent::get_topic_prefix() const { return this->topic_prefix_; }
|
||||||
|
void MQTTClientComponent::set_publish_nan_as_none(bool publish_nan_as_none) {
|
||||||
|
this->publish_nan_as_none_ = publish_nan_as_none;
|
||||||
|
}
|
||||||
|
bool MQTTClientComponent::is_publish_nan_as_none() const { return this->publish_nan_as_none_; }
|
||||||
void MQTTClientComponent::disable_birth_message() {
|
void MQTTClientComponent::disable_birth_message() {
|
||||||
this->birth_message_.topic = "";
|
this->birth_message_.topic = "";
|
||||||
this->recalculate_availability_();
|
this->recalculate_availability_();
|
||||||
|
|
|
@ -263,6 +263,10 @@ class MQTTClientComponent : public Component {
|
||||||
void set_on_connect(mqtt_on_connect_callback_t &&callback);
|
void set_on_connect(mqtt_on_connect_callback_t &&callback);
|
||||||
void set_on_disconnect(mqtt_on_disconnect_callback_t &&callback);
|
void set_on_disconnect(mqtt_on_disconnect_callback_t &&callback);
|
||||||
|
|
||||||
|
// Publish None state instead of NaN for Home Assistant
|
||||||
|
void set_publish_nan_as_none(bool publish_nan_as_none);
|
||||||
|
bool is_publish_nan_as_none() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void send_device_info_();
|
void send_device_info_();
|
||||||
|
|
||||||
|
@ -328,6 +332,8 @@ class MQTTClientComponent : public Component {
|
||||||
uint32_t connect_begin_;
|
uint32_t connect_begin_;
|
||||||
uint32_t last_connected_{0};
|
uint32_t last_connected_{0};
|
||||||
optional<MQTTClientDisconnectReason> disconnect_reason_{};
|
optional<MQTTClientDisconnectReason> disconnect_reason_{};
|
||||||
|
|
||||||
|
bool publish_nan_as_none_{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
extern MQTTClientComponent *global_mqtt_client; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
extern MQTTClientComponent *global_mqtt_client; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
||||||
|
|
|
@ -69,6 +69,8 @@ bool MQTTSensorComponent::send_initial_state() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool MQTTSensorComponent::publish_state(float value) {
|
bool MQTTSensorComponent::publish_state(float value) {
|
||||||
|
if (mqtt::global_mqtt_client->is_publish_nan_as_none() && std::isnan(value))
|
||||||
|
return this->publish(this->get_state_topic_(), "None");
|
||||||
int8_t accuracy = this->sensor_->get_accuracy_decimals();
|
int8_t accuracy = this->sensor_->get_accuracy_decimals();
|
||||||
return this->publish(this->get_state_topic_(), value_accuracy_to_string(value, accuracy));
|
return this->publish(this->get_state_topic_(), value_accuracy_to_string(value, accuracy));
|
||||||
}
|
}
|
||||||
|
|
|
@ -692,6 +692,7 @@ CONF_PRIORITY = "priority"
|
||||||
CONF_PROJECT = "project"
|
CONF_PROJECT = "project"
|
||||||
CONF_PROTOCOL = "protocol"
|
CONF_PROTOCOL = "protocol"
|
||||||
CONF_PUBLISH_INITIAL_STATE = "publish_initial_state"
|
CONF_PUBLISH_INITIAL_STATE = "publish_initial_state"
|
||||||
|
CONF_PUBLISH_NAN_AS_NONE = "publish_nan_as_none"
|
||||||
CONF_PULL_MODE = "pull_mode"
|
CONF_PULL_MODE = "pull_mode"
|
||||||
CONF_PULLDOWN = "pulldown"
|
CONF_PULLDOWN = "pulldown"
|
||||||
CONF_PULLUP = "pullup"
|
CONF_PULLUP = "pullup"
|
||||||
|
|
|
@ -60,6 +60,7 @@ mqtt:
|
||||||
- mqtt.publish:
|
- mqtt.publish:
|
||||||
topic: some/topic
|
topic: some/topic
|
||||||
payload: Good-bye
|
payload: Good-bye
|
||||||
|
publish_nan_as_none: false
|
||||||
|
|
||||||
binary_sensor:
|
binary_sensor:
|
||||||
- platform: template
|
- platform: template
|
||||||
|
|
Loading…
Reference in a new issue