Display embedded temperature in F or C accordingly

Partially solves #2063
This commit is contained in:
Edward Firmo
2024-04-24 11:00:06 +02:00
parent 4e329cb58c
commit 1c43b8a874

View File

@@ -2120,16 +2120,18 @@ script:
then:
- lambda: |-
if (id(embedded_indoor_temp) or !wifi_component->is_connected() or !api_server->is_connected()) {
float unit_based_temperature = id(temp_nspanel).state;
const std::string temp_units = "${temp_units}";
if (!temp_units.empty()) {
const char last_char = std::tolower(temp_units.back()); // Access the last character and convert to lowercase
char buffer[15]; // Buffer for formatted temperature string
if ("${temp_units}"[0] == 'F' || "${temp_units}"[0] == 'f' || "${temp_units}"[1] == 'F' || "${temp_units}"[1] == 'f') {
unit_based_temperature = (unit_based_temperature * 9.0 / 5.0) + 32; // Convert to Fahrenheit if necessary
snprintf(buffer, sizeof(buffer), "%.0f${temp_units}", unit_based_temperature); // Fahrenheit with no decimal
if (last_char == 'f') {
snprintf(buffer, sizeof(buffer), "%.0f${temp_units}", (id(temp_nspanel).state * 9.0 / 5.0) + 32); // Fahrenheit with no decimal
} else {
snprintf(buffer, sizeof(buffer), "%.1f${temp_units}", unit_based_temperature); // Celsius with one decimal
snprintf(buffer, sizeof(buffer), "%.1f${temp_units}", id(temp_nspanel).state); // Celsius with one decimal
}
id(disp1)->set_component_text("home.indr_temp", adjustDecimalSeparator(buffer, id(mui_decimal_separator)).c_str());
}
}
- id: display_wrapped_text
mode: parallel