mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 06:33:51 +00:00 
			
		
		
		
	[prometheus] Adding valve entity metrics (#8223)
This commit is contained in:
		| @@ -83,6 +83,12 @@ void PrometheusHandler::handleRequest(AsyncWebServerRequest *req) { | |||||||
|     this->update_entity_row_(stream, obj, area, node, friendly_name); |     this->update_entity_row_(stream, obj, area, node, friendly_name); | ||||||
| #endif | #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); |   req->send(stream); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -770,6 +776,54 @@ void PrometheusHandler::update_entity_row_(AsyncResponseStream *stream, update:: | |||||||
| } | } | ||||||
| #endif | #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 prometheus | ||||||
| }  // namespace esphome | }  // namespace esphome | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -161,6 +161,14 @@ class PrometheusHandler : public AsyncWebHandler, public Component { | |||||||
|   void handle_update_state_(AsyncResponseStream *stream, update::UpdateState state); |   void handle_update_state_(AsyncResponseStream *stream, update::UpdateState state); | ||||||
| #endif | #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_; |   web_server_base::WebServerBase *base_; | ||||||
|   bool include_internal_{false}; |   bool include_internal_{false}; | ||||||
|   std::map<EntityBase *, std::string> relabel_map_id_; |   std::map<EntityBase *, std::string> relabel_map_id_; | ||||||
|   | |||||||
| @@ -121,6 +121,14 @@ number: | |||||||
|     max_value: 100 |     max_value: 100 | ||||||
|     step: 1 |     step: 1 | ||||||
|  |  | ||||||
|  | valve: | ||||||
|  |   - platform: template | ||||||
|  |     name: "Template Valve" | ||||||
|  |     lambda: |- | ||||||
|  |       return VALVE_OPEN; | ||||||
|  |     optimistic: true | ||||||
|  |     has_position: true | ||||||
|  |  | ||||||
| prometheus: | prometheus: | ||||||
|   include_internal: true |   include_internal: true | ||||||
|   relabel: |   relabel: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user