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); | ||||
| #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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user