dashboard: add temperature group priority
This commit is contained in:
@@ -667,6 +667,16 @@ static void parse_status_json(const String &body)
|
||||
bool tile_has_value[4] = {false, false, false, false};
|
||||
String outside_status = "OUT --";
|
||||
|
||||
struct TempDisplayItem {
|
||||
int tile_index;
|
||||
int priority;
|
||||
int rounded_f;
|
||||
String name;
|
||||
};
|
||||
|
||||
TempDisplayItem items[8];
|
||||
int item_count = 0;
|
||||
|
||||
for (JsonObject temp : doc["temps"].as<JsonArray>()) {
|
||||
bool enabled = temp["enabled"] | false;
|
||||
bool online = temp["online"] | false;
|
||||
@@ -691,9 +701,6 @@ static void parse_status_json(const String &body)
|
||||
String name = raw_name && raw_name[0] ? String(raw_name) : String("Cabin");
|
||||
String group = normalize_temp_group(String(raw_group), name, false);
|
||||
|
||||
// Weather-tagged sensors are excluded above. A manually configured outside
|
||||
// group can still be shown later on a dedicated Temps page, but the main
|
||||
// overview reserves the top status strip for outside/weather temp.
|
||||
if (group == "outside") {
|
||||
outside_status = "OUT ";
|
||||
outside_status += String((int)round(temp_f));
|
||||
@@ -702,12 +709,34 @@ static void parse_status_json(const String &body)
|
||||
}
|
||||
|
||||
int index = temp_group_index(group);
|
||||
if (index == 2) {
|
||||
index = 3; // Keep main temp card from using an Outside tile.
|
||||
if (index < 0 || index > 3) {
|
||||
index = 3;
|
||||
}
|
||||
|
||||
int rounded = (int)round(temp_f);
|
||||
String value = String(rounded);
|
||||
int priority = temp["priority"] | 99;
|
||||
|
||||
if (item_count < 8) {
|
||||
items[item_count] = {index, priority, (int)round(temp_f), name};
|
||||
item_count++;
|
||||
}
|
||||
}
|
||||
|
||||
for (int a = 0; a < item_count - 1; a++) {
|
||||
for (int b = a + 1; b < item_count; b++) {
|
||||
if (
|
||||
items[b].tile_index < items[a].tile_index ||
|
||||
(items[b].tile_index == items[a].tile_index && items[b].priority < items[a].priority)
|
||||
) {
|
||||
TempDisplayItem tmp = items[a];
|
||||
items[a] = items[b];
|
||||
items[b] = tmp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < item_count; i++) {
|
||||
int index = items[i].tile_index;
|
||||
String value = String(items[i].rounded_f);
|
||||
value += "°";
|
||||
|
||||
if (tile_has_value[index]) {
|
||||
@@ -718,6 +747,7 @@ static void parse_status_json(const String &body)
|
||||
tile_has_value[index] = true;
|
||||
|
||||
if (index == 0) {
|
||||
String name = items[i].name;
|
||||
name.replace(" Area", "");
|
||||
name.replace(" Zone", "");
|
||||
tile_names[index] = name.length() ? name : "Cabin";
|
||||
|
||||
Reference in New Issue
Block a user