|
|
|
@@ -54,6 +54,16 @@ void PrometheusHandler::handleRequest(AsyncWebServerRequest *req) {
|
|
|
|
|
req->send(stream);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string PrometheusHandler::relabel_id_(EntityBase *obj) {
|
|
|
|
|
auto item = relabel_map_id_.find(obj);
|
|
|
|
|
return item == relabel_map_id_.end() ? obj->get_object_id() : item->second;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string PrometheusHandler::relabel_name_(EntityBase *obj) {
|
|
|
|
|
auto item = relabel_map_name_.find(obj);
|
|
|
|
|
return item == relabel_map_name_.end() ? obj->get_name() : item->second;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Type-specific implementation
|
|
|
|
|
#ifdef USE_SENSOR
|
|
|
|
|
void PrometheusHandler::sensor_type_(AsyncResponseStream *stream) {
|
|
|
|
@@ -66,15 +76,15 @@ void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor
|
|
|
|
|
if (!std::isnan(obj->state)) {
|
|
|
|
|
// We have a valid value, output this value
|
|
|
|
|
stream->print(F("esphome_sensor_failed{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} 0\n"));
|
|
|
|
|
// Data itself
|
|
|
|
|
stream->print(F("esphome_sensor_value{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\",unit=\""));
|
|
|
|
|
stream->print(obj->get_unit_of_measurement().c_str());
|
|
|
|
|
stream->print(F("\"} "));
|
|
|
|
@@ -83,9 +93,9 @@ void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor
|
|
|
|
|
} else {
|
|
|
|
|
// Invalid state
|
|
|
|
|
stream->print(F("esphome_sensor_failed{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} 1\n"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -103,24 +113,24 @@ void PrometheusHandler::binary_sensor_row_(AsyncResponseStream *stream, binary_s
|
|
|
|
|
if (obj->has_state()) {
|
|
|
|
|
// We have a valid value, output this value
|
|
|
|
|
stream->print(F("esphome_binary_sensor_failed{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} 0\n"));
|
|
|
|
|
// Data itself
|
|
|
|
|
stream->print(F("esphome_binary_sensor_value{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} "));
|
|
|
|
|
stream->print(obj->state);
|
|
|
|
|
stream->print('\n');
|
|
|
|
|
} else {
|
|
|
|
|
// Invalid state
|
|
|
|
|
stream->print(F("esphome_binary_sensor_failed{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} 1\n"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -137,24 +147,24 @@ void PrometheusHandler::fan_row_(AsyncResponseStream *stream, fan::Fan *obj) {
|
|
|
|
|
if (obj->is_internal() && !this->include_internal_)
|
|
|
|
|
return;
|
|
|
|
|
stream->print(F("esphome_fan_failed{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} 0\n"));
|
|
|
|
|
// Data itself
|
|
|
|
|
stream->print(F("esphome_fan_value{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} "));
|
|
|
|
|
stream->print(obj->state);
|
|
|
|
|
stream->print('\n');
|
|
|
|
|
// Speed if available
|
|
|
|
|
if (obj->get_traits().supports_speed()) {
|
|
|
|
|
stream->print(F("esphome_fan_speed{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} "));
|
|
|
|
|
stream->print(obj->speed);
|
|
|
|
|
stream->print('\n');
|
|
|
|
@@ -162,9 +172,9 @@ void PrometheusHandler::fan_row_(AsyncResponseStream *stream, fan::Fan *obj) {
|
|
|
|
|
// Oscillation if available
|
|
|
|
|
if (obj->get_traits().supports_oscillation()) {
|
|
|
|
|
stream->print(F("esphome_fan_oscillation{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} "));
|
|
|
|
|
stream->print(obj->oscillating);
|
|
|
|
|
stream->print('\n');
|
|
|
|
@@ -183,9 +193,9 @@ void PrometheusHandler::light_row_(AsyncResponseStream *stream, light::LightStat
|
|
|
|
|
return;
|
|
|
|
|
// State
|
|
|
|
|
stream->print(F("esphome_light_state{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} "));
|
|
|
|
|
stream->print(obj->remote_values.is_on());
|
|
|
|
|
stream->print(F("\n"));
|
|
|
|
@@ -195,37 +205,37 @@ void PrometheusHandler::light_row_(AsyncResponseStream *stream, light::LightStat
|
|
|
|
|
color.as_brightness(&brightness);
|
|
|
|
|
color.as_rgbw(&r, &g, &b, &w);
|
|
|
|
|
stream->print(F("esphome_light_color{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\",channel=\"brightness\"} "));
|
|
|
|
|
stream->print(brightness);
|
|
|
|
|
stream->print(F("\n"));
|
|
|
|
|
stream->print(F("esphome_light_color{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\",channel=\"r\"} "));
|
|
|
|
|
stream->print(r);
|
|
|
|
|
stream->print(F("\n"));
|
|
|
|
|
stream->print(F("esphome_light_color{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\",channel=\"g\"} "));
|
|
|
|
|
stream->print(g);
|
|
|
|
|
stream->print(F("\n"));
|
|
|
|
|
stream->print(F("esphome_light_color{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\",channel=\"b\"} "));
|
|
|
|
|
stream->print(b);
|
|
|
|
|
stream->print(F("\n"));
|
|
|
|
|
stream->print(F("esphome_light_color{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\",channel=\"w\"} "));
|
|
|
|
|
stream->print(w);
|
|
|
|
|
stream->print(F("\n"));
|
|
|
|
@@ -233,15 +243,15 @@ void PrometheusHandler::light_row_(AsyncResponseStream *stream, light::LightStat
|
|
|
|
|
std::string effect = obj->get_effect_name();
|
|
|
|
|
if (effect == "None") {
|
|
|
|
|
stream->print(F("esphome_light_effect_active{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\",effect=\"None\"} 0\n"));
|
|
|
|
|
} else {
|
|
|
|
|
stream->print(F("esphome_light_effect_active{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\",effect=\""));
|
|
|
|
|
stream->print(effect.c_str());
|
|
|
|
|
stream->print(F("\"} 1\n"));
|
|
|
|
@@ -260,23 +270,23 @@ void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *ob
|
|
|
|
|
if (!std::isnan(obj->position)) {
|
|
|
|
|
// We have a valid value, output this value
|
|
|
|
|
stream->print(F("esphome_cover_failed{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} 0\n"));
|
|
|
|
|
// Data itself
|
|
|
|
|
stream->print(F("esphome_cover_value{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} "));
|
|
|
|
|
stream->print(obj->position);
|
|
|
|
|
stream->print('\n');
|
|
|
|
|
if (obj->get_traits().get_supports_tilt()) {
|
|
|
|
|
stream->print(F("esphome_cover_tilt{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} "));
|
|
|
|
|
stream->print(obj->tilt);
|
|
|
|
|
stream->print('\n');
|
|
|
|
@@ -284,9 +294,9 @@ void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *ob
|
|
|
|
|
} else {
|
|
|
|
|
// Invalid state
|
|
|
|
|
stream->print(F("esphome_cover_failed{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} 1\n"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@@ -301,15 +311,15 @@ void PrometheusHandler::switch_row_(AsyncResponseStream *stream, switch_::Switch
|
|
|
|
|
if (obj->is_internal() && !this->include_internal_)
|
|
|
|
|
return;
|
|
|
|
|
stream->print(F("esphome_switch_failed{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} 0\n"));
|
|
|
|
|
// Data itself
|
|
|
|
|
stream->print(F("esphome_switch_value{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} "));
|
|
|
|
|
stream->print(obj->state);
|
|
|
|
|
stream->print('\n');
|
|
|
|
@@ -325,15 +335,15 @@ void PrometheusHandler::lock_row_(AsyncResponseStream *stream, lock::Lock *obj)
|
|
|
|
|
if (obj->is_internal() && !this->include_internal_)
|
|
|
|
|
return;
|
|
|
|
|
stream->print(F("esphome_lock_failed{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} 0\n"));
|
|
|
|
|
// Data itself
|
|
|
|
|
stream->print(F("esphome_lock_value{id=\""));
|
|
|
|
|
stream->print(obj->get_object_id().c_str());
|
|
|
|
|
stream->print(relabel_id_(obj).c_str());
|
|
|
|
|
stream->print(F("\",name=\""));
|
|
|
|
|
stream->print(obj->get_name().c_str());
|
|
|
|
|
stream->print(relabel_name_(obj).c_str());
|
|
|
|
|
stream->print(F("\"} "));
|
|
|
|
|
stream->print(obj->state);
|
|
|
|
|
stream->print('\n');
|
|
|
|
|