mirror of
https://github.com/esphome/esphome.git
synced 2025-03-15 07:08:20 +00:00
[prometheus] Adding valve entity metrics (#8223)
This commit is contained in:
parent
33f9d66e81
commit
6b3f3e1da6
@ -83,6 +83,12 @@ void PrometheusHandler::handleRequest(AsyncWebServerRequest *req) {
|
||||
this->update_entity_row_(stream, obj, area, node, friendly_name);
|
||||
#endif
|
||||
|
||||
#ifdef USE_VALVE
|
||||
this->valve_type_(stream);
|
||||
for (auto *obj : App.get_valves())
|
||||
this->valve_row_(stream, obj, area, node, friendly_name);
|
||||
#endif
|
||||
|
||||
req->send(stream);
|
||||
}
|
||||
|
||||
@ -770,6 +776,54 @@ void PrometheusHandler::update_entity_row_(AsyncResponseStream *stream, update::
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef USE_VALVE
|
||||
void PrometheusHandler::valve_type_(AsyncResponseStream *stream) {
|
||||
stream->print(F("#TYPE esphome_valve_operation gauge\n"));
|
||||
stream->print(F("#TYPE esphome_valve_failed gauge\n"));
|
||||
stream->print(F("#TYPE esphome_valve_position gauge\n"));
|
||||
}
|
||||
|
||||
void PrometheusHandler::valve_row_(AsyncResponseStream *stream, valve::Valve *obj, std::string &area, std::string &node,
|
||||
std::string &friendly_name) {
|
||||
if (obj->is_internal() && !this->include_internal_)
|
||||
return;
|
||||
stream->print(F("esphome_valve_failed{id=\""));
|
||||
stream->print(relabel_id_(obj).c_str());
|
||||
add_area_label_(stream, area);
|
||||
add_node_label_(stream, node);
|
||||
add_friendly_name_label_(stream, friendly_name);
|
||||
stream->print(F("\",name=\""));
|
||||
stream->print(relabel_name_(obj).c_str());
|
||||
stream->print(F("\"} 0\n"));
|
||||
// Data itself
|
||||
stream->print(F("esphome_valve_operation{id=\""));
|
||||
stream->print(relabel_id_(obj).c_str());
|
||||
add_area_label_(stream, area);
|
||||
add_node_label_(stream, node);
|
||||
add_friendly_name_label_(stream, friendly_name);
|
||||
stream->print(F("\",name=\""));
|
||||
stream->print(relabel_name_(obj).c_str());
|
||||
stream->print(F("\",operation=\""));
|
||||
stream->print(valve::valve_operation_to_str(obj->current_operation));
|
||||
stream->print(F("\"} "));
|
||||
stream->print(F("1.0"));
|
||||
stream->print(F("\n"));
|
||||
// Now see if position is supported
|
||||
if (obj->get_traits().get_supports_position()) {
|
||||
stream->print(F("esphome_valve_position{id=\""));
|
||||
stream->print(relabel_id_(obj).c_str());
|
||||
add_area_label_(stream, area);
|
||||
add_node_label_(stream, node);
|
||||
add_friendly_name_label_(stream, friendly_name);
|
||||
stream->print(F("\",name=\""));
|
||||
stream->print(relabel_name_(obj).c_str());
|
||||
stream->print(F("\"} "));
|
||||
stream->print(obj->position);
|
||||
stream->print(F("\n"));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace prometheus
|
||||
} // namespace esphome
|
||||
#endif
|
||||
|
@ -161,6 +161,14 @@ class PrometheusHandler : public AsyncWebHandler, public Component {
|
||||
void handle_update_state_(AsyncResponseStream *stream, update::UpdateState state);
|
||||
#endif
|
||||
|
||||
#ifdef USE_VALVE
|
||||
/// Return the type for prometheus
|
||||
void valve_type_(AsyncResponseStream *stream);
|
||||
/// Return the valve state as prometheus data point
|
||||
void valve_row_(AsyncResponseStream *stream, valve::Valve *obj, std::string &area, std::string &node,
|
||||
std::string &friendly_name);
|
||||
#endif
|
||||
|
||||
web_server_base::WebServerBase *base_;
|
||||
bool include_internal_{false};
|
||||
std::map<EntityBase *, std::string> relabel_map_id_;
|
||||
|
@ -121,6 +121,14 @@ number:
|
||||
max_value: 100
|
||||
step: 1
|
||||
|
||||
valve:
|
||||
- platform: template
|
||||
name: "Template Valve"
|
||||
lambda: |-
|
||||
return VALVE_OPEN;
|
||||
optimistic: true
|
||||
has_position: true
|
||||
|
||||
prometheus:
|
||||
include_internal: true
|
||||
relabel:
|
||||
|
Loading…
x
Reference in New Issue
Block a user