1
0
mirror of https://github.com/esphome/esphome.git synced 2025-03-15 15:18:16 +00:00

This is a little more complicated

This commit is contained in:
Jordan Zucker 2025-02-13 16:30:45 -08:00
parent ea4694cdd1
commit 77f3b5c372

View File

@ -900,6 +900,7 @@ void PrometheusHandler::climate_row_(AsyncResponseStream *stream, climate::Clima
if (obj->is_internal() && !this->include_internal_) if (obj->is_internal() && !this->include_internal_)
return; return;
// Data itself // Data itself
bool any_failures = false;
std::string climate_mode_category = "mode"; std::string climate_mode_category = "mode";
const auto *climate_mode_value = climate::climate_mode_to_string(obj->mode); const auto *climate_mode_value = climate::climate_mode_to_string(obj->mode);
climate_setting_row_(stream, obj, area, node, friendly_name, climate_mode_category, climate_mode_value); climate_setting_row_(stream, obj, area, node, friendly_name, climate_mode_category, climate_mode_value);
@ -920,21 +921,34 @@ void PrometheusHandler::climate_row_(AsyncResponseStream *stream, climate::Clima
std::string current_temp = "current_temperature"; std::string current_temp = "current_temperature";
if (std::isnan(obj->current_temperature)) { if (std::isnan(obj->current_temperature)) {
climate_failed_row_(stream, obj, area, node, friendly_name, current_temp, true); climate_failed_row_(stream, obj, area, node, friendly_name, current_temp, true);
any_failures = true;
} else { } else {
auto current_temp_value = value_accuracy_to_string(obj->current_temperature, current_accuracy); auto current_temp_value = value_accuracy_to_string(obj->current_temperature, current_accuracy);
climate_value_row_(stream, obj, area, node, friendly_name, current_temp, current_temp_value); climate_value_row_(stream, obj, area, node, friendly_name, current_temp, current_temp_value);
climate_failed_row_(stream, obj, area, node, friendly_name, current_temp, false); climate_failed_row_(stream, obj, area, node, friendly_name, current_temp, false);
} }
} }
if (traits.get_supports_current_humidity() && !std::isnan(obj->current_humidity)) { if (traits.get_supports_current_humidity()) {
std::string current_humidity = "current_humidity"; std::string current_humidity = "current_humidity";
if (std::isnan(obj->current_humidity)) {
climate_failed_row_(stream, obj, area, node, friendly_name, current_temp, true);
any_failures = true;
} else {
auto current_humidity_value = value_accuracy_to_string(obj->current_humidity, 0); auto current_humidity_value = value_accuracy_to_string(obj->current_humidity, 0);
climate_value_row_(stream, obj, area, node, friendly_name, current_humidity, current_humidity_value); climate_value_row_(stream, obj, area, node, friendly_name, current_humidity, current_humidity_value);
climate_failed_row_(stream, obj, area, node, friendly_name, current_humidity, false);
} }
if (traits.get_supports_target_humidity() && !std::isnan(obj->target_humidity)) { }
if (traits.get_supports_target_humidity()) {
std::string target_humidity = "target_humidity"; std::string target_humidity = "target_humidity";
if (std::isnan(obj->target_humidity)) {
climate_failed_row_(stream, obj, area, node, friendly_name, current_temp, true);
any_failures = true;
} else {
auto target_humidity_value = value_accuracy_to_string(obj->target_humidity, 0); auto target_humidity_value = value_accuracy_to_string(obj->target_humidity, 0);
climate_value_row_(stream, obj, area, node, friendly_name, target_humidity, target_humidity_value); climate_value_row_(stream, obj, area, node, friendly_name, target_humidity, target_humidity_value);
climate_failed_row_(stream, obj, area, node, friendly_name, target_humidity, false);
}
} }
if (traits.get_supports_two_point_target_temperature()) { if (traits.get_supports_two_point_target_temperature()) {
std::string target_temp_low = "target_temperature_low"; std::string target_temp_low = "target_temperature_low";
@ -953,21 +967,37 @@ void PrometheusHandler::climate_row_(AsyncResponseStream *stream, climate::Clima
const auto *climate_trait_value = climate::climate_action_to_string(obj->action); const auto *climate_trait_value = climate::climate_action_to_string(obj->action);
climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value); climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
} }
if (traits.get_supports_fan_modes() && obj->fan_mode.has_value()) { if (traits.get_supports_fan_modes()) {
std::string climate_trait_category = "fan_mode"; std::string climate_trait_category = "fan_mode";
if (obj->fan_mode.has_value()) {
const auto *climate_trait_value = climate::climate_fan_mode_to_string(obj->fan_mode.value()); const auto *climate_trait_value = climate::climate_fan_mode_to_string(obj->fan_mode.value());
climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value); climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category, false);
} else {
climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category, true);
any_failures = true;
}
} }
if (traits.get_supports_presets() && obj->preset.has_value()) { if (traits.get_supports_presets() && obj->preset.has_value()) {
std::string climate_trait_category = "preset"; std::string climate_trait_category = "preset";
if (obj->fan_mode.has_value()) {
const auto *climate_trait_value = climate::climate_preset_to_string(obj->preset.value()); const auto *climate_trait_value = climate::climate_preset_to_string(obj->preset.value());
climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value); climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category, false);
} else {
climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category, true);
any_failures = true;
}
} }
if (traits.get_supports_swing_modes()) { if (traits.get_supports_swing_modes()) {
std::string climate_trait_category = "swing_mode"; std::string climate_trait_category = "swing_mode";
const auto *climate_trait_value = climate::climate_swing_mode_to_string(obj->swing_mode); const auto *climate_trait_value = climate::climate_swing_mode_to_string(obj->swing_mode);
climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value); climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
} }
if (!any_failures) {
std::string climate_trait_category = "all";
climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category, false);
}
} }
#endif #endif