mirror of
https://github.com/esphome/esphome.git
synced 2025-07-29 14:46:40 +00:00
Reduce web_server RAM usage by 96 bytes with conditional sorting compilation (#9227)
This commit is contained in:
parent
e907050a17
commit
687cb1cd2b
@ -211,6 +211,7 @@ async def add_entity_config(entity, config):
|
|||||||
sorting_weight = config.get(CONF_SORTING_WEIGHT, 50)
|
sorting_weight = config.get(CONF_SORTING_WEIGHT, 50)
|
||||||
sorting_group_hash = hash(config.get(CONF_SORTING_GROUP_ID))
|
sorting_group_hash = hash(config.get(CONF_SORTING_GROUP_ID))
|
||||||
|
|
||||||
|
cg.add_define("USE_WEBSERVER_SORTING")
|
||||||
cg.add(
|
cg.add(
|
||||||
web_server.add_entity_config(
|
web_server.add_entity_config(
|
||||||
entity,
|
entity,
|
||||||
@ -296,4 +297,5 @@ async def to_code(config):
|
|||||||
cg.add_define("USE_WEBSERVER_LOCAL")
|
cg.add_define("USE_WEBSERVER_LOCAL")
|
||||||
|
|
||||||
if (sorting_group_config := config.get(CONF_SORTING_GROUPS)) is not None:
|
if (sorting_group_config := config.get(CONF_SORTING_GROUPS)) is not None:
|
||||||
|
cg.add_define("USE_WEBSERVER_SORTING")
|
||||||
add_sorting_groups(var, sorting_group_config)
|
add_sorting_groups(var, sorting_group_config)
|
||||||
|
@ -184,6 +184,7 @@ void DeferredUpdateEventSourceList::on_client_connect_(WebServer *ws, DeferredUp
|
|||||||
std::string message = ws->get_config_json();
|
std::string message = ws->get_config_json();
|
||||||
source->try_send_nodefer(message.c_str(), "ping", millis(), 30000);
|
source->try_send_nodefer(message.c_str(), "ping", millis(), 30000);
|
||||||
|
|
||||||
|
#ifdef USE_WEBSERVER_SORTING
|
||||||
for (auto &group : ws->sorting_groups_) {
|
for (auto &group : ws->sorting_groups_) {
|
||||||
message = json::build_json([group](JsonObject root) {
|
message = json::build_json([group](JsonObject root) {
|
||||||
root["name"] = group.second.name;
|
root["name"] = group.second.name;
|
||||||
@ -193,6 +194,7 @@ void DeferredUpdateEventSourceList::on_client_connect_(WebServer *ws, DeferredUp
|
|||||||
// up to 31 groups should be able to be queued initially without defer
|
// up to 31 groups should be able to be queued initially without defer
|
||||||
source->try_send_nodefer(message.c_str(), "sorting_group");
|
source->try_send_nodefer(message.c_str(), "sorting_group");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
source->entities_iterator_.begin(ws->include_internal_);
|
source->entities_iterator_.begin(ws->include_internal_);
|
||||||
|
|
||||||
@ -413,12 +415,7 @@ std::string WebServer::sensor_json(sensor::Sensor *obj, float value, JsonDetail
|
|||||||
}
|
}
|
||||||
set_json_icon_state_value(root, obj, "sensor-" + obj->get_object_id(), state, value, start_config);
|
set_json_icon_state_value(root, obj, "sensor-" + obj->get_object_id(), state, value, start_config);
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!obj->get_unit_of_measurement().empty())
|
if (!obj->get_unit_of_measurement().empty())
|
||||||
root["uom"] = obj->get_unit_of_measurement();
|
root["uom"] = obj->get_unit_of_measurement();
|
||||||
}
|
}
|
||||||
@ -458,12 +455,7 @@ std::string WebServer::text_sensor_json(text_sensor::TextSensor *obj, const std:
|
|||||||
return json::build_json([this, obj, value, start_config](JsonObject root) {
|
return json::build_json([this, obj, value, start_config](JsonObject root) {
|
||||||
set_json_icon_state_value(root, obj, "text_sensor-" + obj->get_object_id(), value, value, start_config);
|
set_json_icon_state_value(root, obj, "text_sensor-" + obj->get_object_id(), value, value, start_config);
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -511,12 +503,7 @@ std::string WebServer::switch_json(switch_::Switch *obj, bool value, JsonDetail
|
|||||||
set_json_icon_state_value(root, obj, "switch-" + obj->get_object_id(), value ? "ON" : "OFF", value, start_config);
|
set_json_icon_state_value(root, obj, "switch-" + obj->get_object_id(), value ? "ON" : "OFF", value, start_config);
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
root["assumed_state"] = obj->assumed_state();
|
root["assumed_state"] = obj->assumed_state();
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -552,12 +539,7 @@ std::string WebServer::button_json(button::Button *obj, JsonDetail start_config)
|
|||||||
return json::build_json([this, obj, start_config](JsonObject root) {
|
return json::build_json([this, obj, start_config](JsonObject root) {
|
||||||
set_json_id(root, obj, "button-" + obj->get_object_id(), start_config);
|
set_json_id(root, obj, "button-" + obj->get_object_id(), start_config);
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -595,12 +577,7 @@ std::string WebServer::binary_sensor_json(binary_sensor::BinarySensor *obj, bool
|
|||||||
set_json_icon_state_value(root, obj, "binary_sensor-" + obj->get_object_id(), value ? "ON" : "OFF", value,
|
set_json_icon_state_value(root, obj, "binary_sensor-" + obj->get_object_id(), value ? "ON" : "OFF", value,
|
||||||
start_config);
|
start_config);
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -681,12 +658,7 @@ std::string WebServer::fan_json(fan::Fan *obj, JsonDetail start_config) {
|
|||||||
if (obj->get_traits().supports_oscillation())
|
if (obj->get_traits().supports_oscillation())
|
||||||
root["oscillation"] = obj->oscillating;
|
root["oscillation"] = obj->oscillating;
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -802,12 +774,7 @@ std::string WebServer::light_json(light::LightState *obj, JsonDetail start_confi
|
|||||||
for (auto const &option : obj->get_effects()) {
|
for (auto const &option : obj->get_effects()) {
|
||||||
opt.add(option->get_name());
|
opt.add(option->get_name());
|
||||||
}
|
}
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -888,12 +855,7 @@ std::string WebServer::cover_json(cover::Cover *obj, JsonDetail start_config) {
|
|||||||
if (obj->get_traits().get_supports_tilt())
|
if (obj->get_traits().get_supports_tilt())
|
||||||
root["tilt"] = obj->tilt;
|
root["tilt"] = obj->tilt;
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -954,12 +916,7 @@ std::string WebServer::number_json(number::Number *obj, float value, JsonDetail
|
|||||||
root["mode"] = (int) obj->traits.get_mode();
|
root["mode"] = (int) obj->traits.get_mode();
|
||||||
if (!obj->traits.get_unit_of_measurement().empty())
|
if (!obj->traits.get_unit_of_measurement().empty())
|
||||||
root["uom"] = obj->traits.get_unit_of_measurement();
|
root["uom"] = obj->traits.get_unit_of_measurement();
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (std::isnan(value)) {
|
if (std::isnan(value)) {
|
||||||
root["value"] = "\"NaN\"";
|
root["value"] = "\"NaN\"";
|
||||||
@ -1028,12 +985,7 @@ std::string WebServer::date_json(datetime::DateEntity *obj, JsonDetail start_con
|
|||||||
root["value"] = value;
|
root["value"] = value;
|
||||||
root["state"] = value;
|
root["state"] = value;
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1091,12 +1043,7 @@ std::string WebServer::time_json(datetime::TimeEntity *obj, JsonDetail start_con
|
|||||||
root["value"] = value;
|
root["value"] = value;
|
||||||
root["state"] = value;
|
root["state"] = value;
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1155,12 +1102,7 @@ std::string WebServer::datetime_json(datetime::DateTimeEntity *obj, JsonDetail s
|
|||||||
root["value"] = value;
|
root["value"] = value;
|
||||||
root["state"] = value;
|
root["state"] = value;
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1221,12 +1163,7 @@ std::string WebServer::text_json(text::Text *obj, const std::string &value, Json
|
|||||||
root["value"] = value;
|
root["value"] = value;
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
root["mode"] = (int) obj->traits.get_mode();
|
root["mode"] = (int) obj->traits.get_mode();
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1282,12 +1219,7 @@ std::string WebServer::select_json(select::Select *obj, const std::string &value
|
|||||||
for (auto &option : obj->traits.get_options()) {
|
for (auto &option : obj->traits.get_options()) {
|
||||||
opt.add(option);
|
opt.add(option);
|
||||||
}
|
}
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1404,12 +1336,7 @@ std::string WebServer::climate_json(climate::Climate *obj, JsonDetail start_conf
|
|||||||
for (auto const &custom_preset : traits.get_supported_custom_presets())
|
for (auto const &custom_preset : traits.get_supported_custom_presets())
|
||||||
opt.add(custom_preset);
|
opt.add(custom_preset);
|
||||||
}
|
}
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool has_state = false;
|
bool has_state = false;
|
||||||
@ -1502,12 +1429,7 @@ std::string WebServer::lock_json(lock::Lock *obj, lock::LockState value, JsonDet
|
|||||||
set_json_icon_state_value(root, obj, "lock-" + obj->get_object_id(), lock::lock_state_to_string(value), value,
|
set_json_icon_state_value(root, obj, "lock-" + obj->get_object_id(), lock::lock_state_to_string(value), value,
|
||||||
start_config);
|
start_config);
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1579,12 +1501,7 @@ std::string WebServer::valve_json(valve::Valve *obj, JsonDetail start_config) {
|
|||||||
if (obj->get_traits().get_supports_position())
|
if (obj->get_traits().get_supports_position())
|
||||||
root["position"] = obj->position;
|
root["position"] = obj->position;
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1652,12 +1569,7 @@ std::string WebServer::alarm_control_panel_json(alarm_control_panel::AlarmContro
|
|||||||
set_json_icon_state_value(root, obj, "alarm-control-panel-" + obj->get_object_id(),
|
set_json_icon_state_value(root, obj, "alarm-control-panel-" + obj->get_object_id(),
|
||||||
PSTR_LOCAL(alarm_control_panel_state_to_string(value)), value, start_config);
|
PSTR_LOCAL(alarm_control_panel_state_to_string(value)), value, start_config);
|
||||||
if (start_config == DETAIL_ALL) {
|
if (start_config == DETAIL_ALL) {
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1705,12 +1617,7 @@ std::string WebServer::event_json(event::Event *obj, const std::string &event_ty
|
|||||||
event_types.add(event_type);
|
event_types.add(event_type);
|
||||||
}
|
}
|
||||||
root["device_class"] = obj->get_device_class();
|
root["device_class"] = obj->get_device_class();
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -1774,12 +1681,7 @@ std::string WebServer::update_json(update::UpdateEntity *obj, JsonDetail start_c
|
|||||||
root["title"] = obj->update_info.title;
|
root["title"] = obj->update_info.title;
|
||||||
root["summary"] = obj->update_info.summary;
|
root["summary"] = obj->update_info.summary;
|
||||||
root["release_url"] = obj->update_info.release_url;
|
root["release_url"] = obj->update_info.release_url;
|
||||||
if (this->sorting_entitys_.find(obj) != this->sorting_entitys_.end()) {
|
this->add_sorting_info_(root, obj);
|
||||||
root["sorting_weight"] = this->sorting_entitys_[obj].weight;
|
|
||||||
if (this->sorting_groups_.find(this->sorting_entitys_[obj].group_id) != this->sorting_groups_.end()) {
|
|
||||||
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[obj].group_id].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -2089,6 +1991,18 @@ void WebServer::handleRequest(AsyncWebServerRequest *request) {
|
|||||||
|
|
||||||
bool WebServer::isRequestHandlerTrivial() const { return false; }
|
bool WebServer::isRequestHandlerTrivial() const { return false; }
|
||||||
|
|
||||||
|
void WebServer::add_sorting_info_(JsonObject &root, EntityBase *entity) {
|
||||||
|
#ifdef USE_WEBSERVER_SORTING
|
||||||
|
if (this->sorting_entitys_.find(entity) != this->sorting_entitys_.end()) {
|
||||||
|
root["sorting_weight"] = this->sorting_entitys_[entity].weight;
|
||||||
|
if (this->sorting_groups_.find(this->sorting_entitys_[entity].group_id) != this->sorting_groups_.end()) {
|
||||||
|
root["sorting_group"] = this->sorting_groups_[this->sorting_entitys_[entity].group_id].name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_WEBSERVER_SORTING
|
||||||
void WebServer::add_entity_config(EntityBase *entity, float weight, uint64_t group) {
|
void WebServer::add_entity_config(EntityBase *entity, float weight, uint64_t group) {
|
||||||
this->sorting_entitys_[entity] = SortingComponents{weight, group};
|
this->sorting_entitys_[entity] = SortingComponents{weight, group};
|
||||||
}
|
}
|
||||||
@ -2096,6 +2010,7 @@ void WebServer::add_entity_config(EntityBase *entity, float weight, uint64_t gro
|
|||||||
void WebServer::add_sorting_group(uint64_t group_id, const std::string &group_name, float weight) {
|
void WebServer::add_sorting_group(uint64_t group_id, const std::string &group_name, float weight) {
|
||||||
this->sorting_groups_[group_id] = SortingGroup{group_name, weight};
|
this->sorting_groups_[group_id] = SortingGroup{group_name, weight};
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void WebServer::schedule_(std::function<void()> &&f) {
|
void WebServer::schedule_(std::function<void()> &&f) {
|
||||||
#ifdef USE_ESP32
|
#ifdef USE_ESP32
|
||||||
|
@ -46,6 +46,7 @@ struct UrlMatch {
|
|||||||
bool valid; ///< Whether this match is valid
|
bool valid; ///< Whether this match is valid
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef USE_WEBSERVER_SORTING
|
||||||
struct SortingComponents {
|
struct SortingComponents {
|
||||||
float weight;
|
float weight;
|
||||||
uint64_t group_id;
|
uint64_t group_id;
|
||||||
@ -55,6 +56,7 @@ struct SortingGroup {
|
|||||||
std::string name;
|
std::string name;
|
||||||
float weight;
|
float weight;
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
enum JsonDetail { DETAIL_ALL, DETAIL_STATE };
|
enum JsonDetail { DETAIL_ALL, DETAIL_STATE };
|
||||||
|
|
||||||
@ -474,14 +476,18 @@ class WebServer : public Controller, public Component, public AsyncWebHandler {
|
|||||||
/// This web handle is not trivial.
|
/// This web handle is not trivial.
|
||||||
bool isRequestHandlerTrivial() const override; // NOLINT(readability-identifier-naming)
|
bool isRequestHandlerTrivial() const override; // NOLINT(readability-identifier-naming)
|
||||||
|
|
||||||
|
#ifdef USE_WEBSERVER_SORTING
|
||||||
void add_entity_config(EntityBase *entity, float weight, uint64_t group);
|
void add_entity_config(EntityBase *entity, float weight, uint64_t group);
|
||||||
void add_sorting_group(uint64_t group_id, const std::string &group_name, float weight);
|
void add_sorting_group(uint64_t group_id, const std::string &group_name, float weight);
|
||||||
|
|
||||||
std::map<EntityBase *, SortingComponents> sorting_entitys_;
|
std::map<EntityBase *, SortingComponents> sorting_entitys_;
|
||||||
std::map<uint64_t, SortingGroup> sorting_groups_;
|
std::map<uint64_t, SortingGroup> sorting_groups_;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool include_internal_{false};
|
bool include_internal_{false};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void add_sorting_info_(JsonObject &root, EntityBase *entity);
|
||||||
void schedule_(std::function<void()> &&f);
|
void schedule_(std::function<void()> &&f);
|
||||||
web_server_base::WebServerBase *base_;
|
web_server_base::WebServerBase *base_;
|
||||||
#ifdef USE_ARDUINO
|
#ifdef USE_ARDUINO
|
||||||
|
@ -338,6 +338,7 @@ AsyncEventSourceResponse::AsyncEventSourceResponse(const AsyncWebServerRequest *
|
|||||||
std::string message = ws->get_config_json();
|
std::string message = ws->get_config_json();
|
||||||
this->try_send_nodefer(message.c_str(), "ping", millis(), 30000);
|
this->try_send_nodefer(message.c_str(), "ping", millis(), 30000);
|
||||||
|
|
||||||
|
#ifdef USE_WEBSERVER_SORTING
|
||||||
for (auto &group : ws->sorting_groups_) {
|
for (auto &group : ws->sorting_groups_) {
|
||||||
message = json::build_json([group](JsonObject root) {
|
message = json::build_json([group](JsonObject root) {
|
||||||
root["name"] = group.second.name;
|
root["name"] = group.second.name;
|
||||||
@ -348,6 +349,7 @@ AsyncEventSourceResponse::AsyncEventSourceResponse(const AsyncWebServerRequest *
|
|||||||
// since the only thing in the send buffer at this point is the initial ping/config
|
// since the only thing in the send buffer at this point is the initial ping/config
|
||||||
this->try_send_nodefer(message.c_str(), "sorting_group");
|
this->try_send_nodefer(message.c_str(), "sorting_group");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
this->entities_iterator_->begin(ws->include_internal_);
|
this->entities_iterator_->begin(ws->include_internal_);
|
||||||
|
|
||||||
|
@ -151,6 +151,7 @@
|
|||||||
#define USE_VOICE_ASSISTANT
|
#define USE_VOICE_ASSISTANT
|
||||||
#define USE_WEBSERVER
|
#define USE_WEBSERVER
|
||||||
#define USE_WEBSERVER_PORT 80 // NOLINT
|
#define USE_WEBSERVER_PORT 80 // NOLINT
|
||||||
|
#define USE_WEBSERVER_SORTING
|
||||||
#define USE_WIFI_11KV_SUPPORT
|
#define USE_WIFI_11KV_SUPPORT
|
||||||
|
|
||||||
#ifdef USE_ARDUINO
|
#ifdef USE_ARDUINO
|
||||||
|
Loading…
x
Reference in New Issue
Block a user