9 AsyncResponseStream *stream = req->beginResponseStream(
"text/plain; version=0.0.4; charset=utf-8");
16 for (
auto *obj :
App.get_sensors())
17 this->
sensor_row_(stream, obj, area, node, friendly_name);
20#ifdef USE_BINARY_SENSOR
28 for (
auto *obj :
App.get_fans())
29 this->
fan_row_(stream, obj, area, node, friendly_name);
34 for (
auto *obj :
App.get_lights())
35 this->
light_row_(stream, obj, area, node, friendly_name);
40 for (
auto *obj :
App.get_covers())
41 this->
cover_row_(stream, obj, area, node, friendly_name);
46 for (
auto *obj :
App.get_switches())
47 this->
switch_row_(stream, obj, area, node, friendly_name);
52 for (
auto *obj :
App.get_locks())
53 this->
lock_row_(stream, obj, area, node, friendly_name);
58 for (
auto *obj :
App.get_events())
59 this->
event_row_(stream, obj, area, node, friendly_name);
64 for (
auto *obj :
App.get_texts())
65 this->
text_row_(stream, obj, area, node, friendly_name);
70 for (
auto *obj :
App.get_text_sensors())
76 for (
auto *obj :
App.get_numbers())
77 this->
number_row_(stream, obj, area, node, friendly_name);
82 for (
auto *obj :
App.get_selects())
83 this->
select_row_(stream, obj, area, node, friendly_name);
86#ifdef USE_MEDIA_PLAYER
88 for (
auto *obj :
App.get_media_players())
94 for (
auto *obj :
App.get_updates())
100 for (
auto *obj :
App.get_valves())
101 this->
valve_row_(stream, obj, area, node, friendly_name);
106 for (
auto *obj :
App.get_climates())
107 this->
climate_row_(stream, obj, area, node, friendly_name);
118 char object_id_buf[OBJECT_ID_MAX_LEN];
119 return obj->get_object_id_to(object_id_buf).str();
129 stream->print(ESPHOME_F(
"\",area=\""));
130 stream->print(area.c_str());
136 stream->print(ESPHOME_F(
"\",node=\""));
137 stream->print(node.c_str());
142 if (!friendly_name.empty()) {
143 stream->print(ESPHOME_F(
"\",friendly_name=\""));
144 stream->print(friendly_name.c_str());
150 EntityBase *obj, std::string &area, std::string &node,
151 std::string &friendly_name) {
154 std::string &area, std::string &node, std::string &friendly_name) {
156 stream->print(metric_name);
157 stream->print(ESPHOME_F(
"{id=\""));
162 stream->print(ESPHOME_F(
"\",name=\""));
169 stream->print(ESPHOME_F(
"#TYPE esphome_sensor_value gauge\n"));
170 stream->print(ESPHOME_F(
"#TYPE esphome_sensor_failed gauge\n"));
173 std::string &node, std::string &friendly_name) {
174 if (obj->is_internal() && !this->include_internal_)
176 if (!std::isnan(obj->state)) {
178 stream->print(ESPHOME_F(
"esphome_sensor_failed{id=\""));
183 stream->print(ESPHOME_F(
"\",name=\""));
185 stream->print(ESPHOME_F(
"\"} 0\n"));
187 stream->print(ESPHOME_F(
"esphome_sensor_value{id=\""));
192 stream->print(ESPHOME_F(
"\",name=\""));
194 stream->print(ESPHOME_F(
"\",unit=\""));
195 stream->print(obj->get_unit_of_measurement_ref().c_str());
196 stream->print(ESPHOME_F(
"\"} "));
198 stream->print(ESPHOME_F(
"\n"));
201 stream->print(ESPHOME_F(
"esphome_sensor_failed{id=\""));
206 stream->print(ESPHOME_F(
"\",name=\""));
208 stream->print(ESPHOME_F(
"\"} 1\n"));
214#ifdef USE_BINARY_SENSOR
216 stream->print(ESPHOME_F(
"#TYPE esphome_binary_sensor_value gauge\n"));
217 stream->print(ESPHOME_F(
"#TYPE esphome_binary_sensor_failed gauge\n"));
220 std::string &area, std::string &node, std::string &friendly_name) {
221 if (obj->is_internal() && !this->include_internal_)
223 if (obj->has_state()) {
225 stream->print(ESPHOME_F(
"esphome_binary_sensor_failed{id=\""));
230 stream->print(ESPHOME_F(
"\",name=\""));
232 stream->print(ESPHOME_F(
"\"} 0\n"));
234 stream->print(ESPHOME_F(
"esphome_binary_sensor_value{id=\""));
239 stream->print(ESPHOME_F(
"\",name=\""));
241 stream->print(ESPHOME_F(
"\"} "));
242 stream->print(obj->state);
243 stream->print(ESPHOME_F(
"\n"));
246 stream->print(ESPHOME_F(
"esphome_binary_sensor_failed{id=\""));
251 stream->print(ESPHOME_F(
"\",name=\""));
253 stream->print(ESPHOME_F(
"\"} 1\n"));
260 stream->print(ESPHOME_F(
"#TYPE esphome_fan_value gauge\n"));
261 stream->print(ESPHOME_F(
"#TYPE esphome_fan_failed gauge\n"));
262 stream->print(ESPHOME_F(
"#TYPE esphome_fan_speed gauge\n"));
263 stream->print(ESPHOME_F(
"#TYPE esphome_fan_oscillation gauge\n"));
266 std::string &friendly_name) {
267 if (obj->is_internal() && !this->include_internal_)
269 stream->print(ESPHOME_F(
"esphome_fan_failed{id=\""));
274 stream->print(ESPHOME_F(
"\",name=\""));
276 stream->print(ESPHOME_F(
"\"} 0\n"));
278 stream->print(ESPHOME_F(
"esphome_fan_value{id=\""));
283 stream->print(ESPHOME_F(
"\",name=\""));
285 stream->print(ESPHOME_F(
"\"} "));
286 stream->print(obj->state);
287 stream->print(ESPHOME_F(
"\n"));
289 if (obj->get_traits().supports_speed()) {
290 stream->print(ESPHOME_F(
"esphome_fan_speed{id=\""));
295 stream->print(ESPHOME_F(
"\",name=\""));
297 stream->print(ESPHOME_F(
"\"} "));
298 stream->print(obj->speed);
299 stream->print(ESPHOME_F(
"\n"));
302 if (obj->get_traits().supports_oscillation()) {
303 stream->print(ESPHOME_F(
"esphome_fan_oscillation{id=\""));
308 stream->print(ESPHOME_F(
"\",name=\""));
310 stream->print(ESPHOME_F(
"\"} "));
311 stream->print(obj->oscillating);
312 stream->print(ESPHOME_F(
"\n"));
319 stream->print(ESPHOME_F(
"#TYPE esphome_light_state gauge\n"));
320 stream->print(ESPHOME_F(
"#TYPE esphome_light_color gauge\n"));
321 stream->print(ESPHOME_F(
"#TYPE esphome_light_effect_active gauge\n"));
324 std::string &node, std::string &friendly_name) {
325 if (obj->is_internal() && !this->include_internal_)
329 stream->print(ESPHOME_F(
"\"} "));
330 stream->print(obj->remote_values.is_on());
331 stream->print(ESPHOME_F(
"\n"));
333 light::LightColorValues color = obj->current_values;
334 float brightness, r, g, b, w;
335 color.as_brightness(&brightness);
336 color.as_rgbw(&r, &g, &b, &w);
339 stream->print(ESPHOME_F(
"\",channel=\"brightness\"} "));
340 stream->print(brightness);
341 stream->print(ESPHOME_F(
"\n"));
345 stream->print(ESPHOME_F(
"\",channel=\"r\"} "));
347 stream->print(ESPHOME_F(
"\n"));
349 stream->print(ESPHOME_F(
"\",channel=\"g\"} "));
351 stream->print(ESPHOME_F(
"\n"));
353 stream->print(ESPHOME_F(
"\",channel=\"b\"} "));
355 stream->print(ESPHOME_F(
"\n"));
359 stream->print(ESPHOME_F(
"\",channel=\"w\"} "));
361 stream->print(ESPHOME_F(
"\n"));
364 if (!obj->get_effects().empty()) {
366 std::string effect = obj->get_effect_name();
367 print_metric_labels_(stream, ESPHOME_F(
"esphome_light_effect_active"), obj, area, node, friendly_name);
368 stream->print(ESPHOME_F(
"\",effect=\""));
370 if (effect ==
"None") {
371 stream->print(ESPHOME_F(
"None\"} 0\n"));
373 stream->print(effect.c_str());
374 stream->print(ESPHOME_F(
"\"} 1\n"));
382 stream->print(ESPHOME_F(
"#TYPE esphome_cover_value gauge\n"));
383 stream->print(ESPHOME_F(
"#TYPE esphome_cover_failed gauge\n"));
386 std::string &friendly_name) {
387 if (obj->is_internal() && !this->include_internal_)
389 if (!std::isnan(obj->position)) {
391 stream->print(ESPHOME_F(
"esphome_cover_failed{id=\""));
396 stream->print(ESPHOME_F(
"\",name=\""));
398 stream->print(ESPHOME_F(
"\"} 0\n"));
400 stream->print(ESPHOME_F(
"esphome_cover_value{id=\""));
405 stream->print(ESPHOME_F(
"\",name=\""));
407 stream->print(ESPHOME_F(
"\"} "));
408 stream->print(obj->position);
409 stream->print(ESPHOME_F(
"\n"));
410 if (obj->get_traits().get_supports_tilt()) {
411 stream->print(ESPHOME_F(
"esphome_cover_tilt{id=\""));
416 stream->print(ESPHOME_F(
"\",name=\""));
418 stream->print(ESPHOME_F(
"\"} "));
419 stream->print(obj->tilt);
420 stream->print(ESPHOME_F(
"\n"));
424 stream->print(ESPHOME_F(
"esphome_cover_failed{id=\""));
429 stream->print(ESPHOME_F(
"\",name=\""));
431 stream->print(ESPHOME_F(
"\"} 1\n"));
438 stream->print(ESPHOME_F(
"#TYPE esphome_switch_value gauge\n"));
439 stream->print(ESPHOME_F(
"#TYPE esphome_switch_failed gauge\n"));
442 std::string &node, std::string &friendly_name) {
443 if (obj->is_internal() && !this->include_internal_)
445 stream->print(ESPHOME_F(
"esphome_switch_failed{id=\""));
450 stream->print(ESPHOME_F(
"\",name=\""));
452 stream->print(ESPHOME_F(
"\"} 0\n"));
454 stream->print(ESPHOME_F(
"esphome_switch_value{id=\""));
459 stream->print(ESPHOME_F(
"\",name=\""));
461 stream->print(ESPHOME_F(
"\"} "));
462 stream->print(obj->state);
463 stream->print(ESPHOME_F(
"\n"));
469 stream->print(ESPHOME_F(
"#TYPE esphome_lock_value gauge\n"));
470 stream->print(ESPHOME_F(
"#TYPE esphome_lock_failed gauge\n"));
473 std::string &friendly_name) {
474 if (obj->is_internal() && !this->include_internal_)
476 stream->print(ESPHOME_F(
"esphome_lock_failed{id=\""));
481 stream->print(ESPHOME_F(
"\",name=\""));
483 stream->print(ESPHOME_F(
"\"} 0\n"));
485 stream->print(ESPHOME_F(
"esphome_lock_value{id=\""));
490 stream->print(ESPHOME_F(
"\",name=\""));
492 stream->print(ESPHOME_F(
"\"} "));
493 stream->print(obj->state);
494 stream->print(ESPHOME_F(
"\n"));
499#ifdef USE_TEXT_SENSOR
501 stream->print(ESPHOME_F(
"#TYPE esphome_text_sensor_value gauge\n"));
502 stream->print(ESPHOME_F(
"#TYPE esphome_text_sensor_failed gauge\n"));
505 std::string &node, std::string &friendly_name) {
506 if (obj->is_internal() && !this->include_internal_)
508 if (obj->has_state()) {
510 stream->print(ESPHOME_F(
"esphome_text_sensor_failed{id=\""));
515 stream->print(ESPHOME_F(
"\",name=\""));
517 stream->print(ESPHOME_F(
"\"} 0\n"));
519 stream->print(ESPHOME_F(
"esphome_text_sensor_value{id=\""));
524 stream->print(ESPHOME_F(
"\",name=\""));
526 stream->print(ESPHOME_F(
"\",value=\""));
527 stream->print(obj->state.c_str());
528 stream->print(ESPHOME_F(
"\"} "));
529 stream->print(ESPHOME_F(
"1.0"));
530 stream->print(ESPHOME_F(
"\n"));
533 stream->print(ESPHOME_F(
"esphome_text_sensor_failed{id=\""));
538 stream->print(ESPHOME_F(
"\",name=\""));
540 stream->print(ESPHOME_F(
"\"} 1\n"));
548 stream->print(ESPHOME_F(
"#TYPE esphome_text_value gauge\n"));
549 stream->print(ESPHOME_F(
"#TYPE esphome_text_failed gauge\n"));
552 std::string &friendly_name) {
553 if (obj->is_internal() && !this->include_internal_)
555 if (obj->has_state()) {
557 stream->print(ESPHOME_F(
"esphome_text_failed{id=\""));
562 stream->print(ESPHOME_F(
"\",name=\""));
564 stream->print(ESPHOME_F(
"\"} 0\n"));
566 stream->print(ESPHOME_F(
"esphome_text_value{id=\""));
571 stream->print(ESPHOME_F(
"\",name=\""));
573 stream->print(ESPHOME_F(
"\",value=\""));
574 stream->print(obj->state.c_str());
575 stream->print(ESPHOME_F(
"\"} "));
576 stream->print(ESPHOME_F(
"1.0"));
577 stream->print(ESPHOME_F(
"\n"));
580 stream->print(ESPHOME_F(
"esphome_text_failed{id=\""));
585 stream->print(ESPHOME_F(
"\",name=\""));
587 stream->print(ESPHOME_F(
"\"} 1\n"));
595 stream->print(ESPHOME_F(
"#TYPE esphome_event_value gauge\n"));
596 stream->print(ESPHOME_F(
"#TYPE esphome_event_failed gauge\n"));
599 std::string &friendly_name) {
600 if (obj->is_internal() && !this->include_internal_)
602 if (obj->get_last_event_type() !=
nullptr) {
604 stream->print(ESPHOME_F(
"esphome_event_failed{id=\""));
609 stream->print(ESPHOME_F(
"\",name=\""));
611 stream->print(ESPHOME_F(
"\"} 0\n"));
613 stream->print(ESPHOME_F(
"esphome_event_value{id=\""));
618 stream->print(ESPHOME_F(
"\",name=\""));
620 stream->print(ESPHOME_F(
"\",last_event_type=\""));
621 stream->print(obj->get_last_event_type());
622 stream->print(ESPHOME_F(
"\"} "));
623 stream->print(ESPHOME_F(
"1.0"));
624 stream->print(ESPHOME_F(
"\n"));
627 stream->print(ESPHOME_F(
"esphome_event_failed{id=\""));
632 stream->print(ESPHOME_F(
"\",name=\""));
634 stream->print(ESPHOME_F(
"\"} 1\n"));
642 stream->print(ESPHOME_F(
"#TYPE esphome_number_value gauge\n"));
643 stream->print(ESPHOME_F(
"#TYPE esphome_number_failed gauge\n"));
646 std::string &node, std::string &friendly_name) {
647 if (obj->is_internal() && !this->include_internal_)
649 if (!std::isnan(obj->state)) {
651 stream->print(ESPHOME_F(
"esphome_number_failed{id=\""));
656 stream->print(ESPHOME_F(
"\",name=\""));
658 stream->print(ESPHOME_F(
"\"} 0\n"));
660 stream->print(ESPHOME_F(
"esphome_number_value{id=\""));
665 stream->print(ESPHOME_F(
"\",name=\""));
667 stream->print(ESPHOME_F(
"\"} "));
668 stream->print(obj->state);
669 stream->print(ESPHOME_F(
"\n"));
672 stream->print(ESPHOME_F(
"esphome_number_failed{id=\""));
677 stream->print(ESPHOME_F(
"\",name=\""));
679 stream->print(ESPHOME_F(
"\"} 1\n"));
686 stream->print(ESPHOME_F(
"#TYPE esphome_select_value gauge\n"));
687 stream->print(ESPHOME_F(
"#TYPE esphome_select_failed gauge\n"));
690 std::string &node, std::string &friendly_name) {
691 if (obj->is_internal() && !this->include_internal_)
693 if (obj->has_state()) {
695 stream->print(ESPHOME_F(
"esphome_select_failed{id=\""));
700 stream->print(ESPHOME_F(
"\",name=\""));
702 stream->print(ESPHOME_F(
"\"} 0\n"));
704 stream->print(ESPHOME_F(
"esphome_select_value{id=\""));
709 stream->print(ESPHOME_F(
"\",name=\""));
711 stream->print(ESPHOME_F(
"\",value=\""));
712 stream->print(obj->current_option());
713 stream->print(ESPHOME_F(
"\"} "));
714 stream->print(ESPHOME_F(
"1.0"));
715 stream->print(ESPHOME_F(
"\n"));
718 stream->print(ESPHOME_F(
"esphome_select_failed{id=\""));
723 stream->print(ESPHOME_F(
"\",name=\""));
725 stream->print(ESPHOME_F(
"\"} 1\n"));
730#ifdef USE_MEDIA_PLAYER
732 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_state_value gauge\n"));
733 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_volume gauge\n"));
734 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_is_muted gauge\n"));
735 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_failed gauge\n"));
738 std::string &area, std::string &node, std::string &friendly_name) {
739 if (obj->is_internal() && !this->include_internal_)
741 stream->print(ESPHOME_F(
"esphome_media_player_failed{id=\""));
746 stream->print(ESPHOME_F(
"\",name=\""));
748 stream->print(ESPHOME_F(
"\"} 0\n"));
750 stream->print(ESPHOME_F(
"esphome_media_player_state_value{id=\""));
755 stream->print(ESPHOME_F(
"\",name=\""));
757 stream->print(ESPHOME_F(
"\",value=\""));
759 stream->print(ESPHOME_F(
"\"} "));
760 stream->print(ESPHOME_F(
"1.0"));
761 stream->print(ESPHOME_F(
"\n"));
762 stream->print(ESPHOME_F(
"esphome_media_player_volume{id=\""));
767 stream->print(ESPHOME_F(
"\",name=\""));
769 stream->print(ESPHOME_F(
"\"} "));
770 stream->print(obj->volume);
771 stream->print(ESPHOME_F(
"\n"));
772 stream->print(ESPHOME_F(
"esphome_media_player_is_muted{id=\""));
777 stream->print(ESPHOME_F(
"\",name=\""));
779 stream->print(ESPHOME_F(
"\"} "));
780 if (obj->is_muted()) {
781 stream->print(ESPHOME_F(
"1.0"));
783 stream->print(ESPHOME_F(
"0.0"));
785 stream->print(ESPHOME_F(
"\n"));
791 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_state gauge\n"));
792 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_info gauge\n"));
793 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_failed gauge\n"));
799 stream->print(
"unknown");
802 stream->print(
"none");
805 stream->print(
"available");
808 stream->print(
"installing");
811 stream->print(
"invalid");
817 std::string &node, std::string &friendly_name) {
818 if (obj->is_internal() && !this->include_internal_)
820 if (obj->has_state()) {
822 stream->print(ESPHOME_F(
"esphome_update_entity_failed{id=\""));
827 stream->print(ESPHOME_F(
"\",name=\""));
829 stream->print(ESPHOME_F(
"\"} 0\n"));
831 stream->print(ESPHOME_F(
"esphome_update_entity_state{id=\""));
836 stream->print(ESPHOME_F(
"\",name=\""));
838 stream->print(ESPHOME_F(
"\",value=\""));
840 stream->print(ESPHOME_F(
"\"} "));
841 stream->print(ESPHOME_F(
"1.0"));
842 stream->print(ESPHOME_F(
"\n"));
844 stream->print(ESPHOME_F(
"esphome_update_entity_info{id=\""));
849 stream->print(ESPHOME_F(
"\",name=\""));
851 stream->print(ESPHOME_F(
"\",current_version=\""));
852 stream->print(obj->update_info.current_version.c_str());
853 stream->print(ESPHOME_F(
"\",latest_version=\""));
854 stream->print(obj->update_info.latest_version.c_str());
855 stream->print(ESPHOME_F(
"\",title=\""));
856 stream->print(obj->update_info.title.c_str());
857 stream->print(ESPHOME_F(
"\"} "));
858 stream->print(ESPHOME_F(
"1.0"));
859 stream->print(ESPHOME_F(
"\n"));
862 stream->print(ESPHOME_F(
"esphome_update_entity_failed{id=\""));
867 stream->print(ESPHOME_F(
"\",name=\""));
869 stream->print(ESPHOME_F(
"\"} 1\n"));
876 stream->print(ESPHOME_F(
"#TYPE esphome_valve_operation gauge\n"));
877 stream->print(ESPHOME_F(
"#TYPE esphome_valve_failed gauge\n"));
878 stream->print(ESPHOME_F(
"#TYPE esphome_valve_position gauge\n"));
882 std::string &friendly_name) {
883 if (obj->is_internal() && !this->include_internal_)
885 stream->print(ESPHOME_F(
"esphome_valve_failed{id=\""));
890 stream->print(ESPHOME_F(
"\",name=\""));
892 stream->print(ESPHOME_F(
"\"} 0\n"));
894 stream->print(ESPHOME_F(
"esphome_valve_operation{id=\""));
899 stream->print(ESPHOME_F(
"\",name=\""));
901 stream->print(ESPHOME_F(
"\",operation=\""));
902#ifdef USE_STORE_LOG_STR_IN_FLASH
907 stream->print(ESPHOME_F(
"\"} "));
908 stream->print(ESPHOME_F(
"1.0"));
909 stream->print(ESPHOME_F(
"\n"));
911 if (obj->get_traits().get_supports_position()) {
912 stream->print(ESPHOME_F(
"esphome_valve_position{id=\""));
917 stream->print(ESPHOME_F(
"\",name=\""));
919 stream->print(ESPHOME_F(
"\"} "));
920 stream->print(obj->position);
921 stream->print(ESPHOME_F(
"\n"));
928 stream->print(ESPHOME_F(
"#TYPE esphome_climate_setting gauge\n"));
929 stream->print(ESPHOME_F(
"#TYPE esphome_climate_value gauge\n"));
930 stream->print(ESPHOME_F(
"#TYPE esphome_climate_failed gauge\n"));
934 std::string &node, std::string &friendly_name, std::string &setting,
935 const LogString *setting_value) {
936 stream->print(ESPHOME_F(
"esphome_climate_setting{id=\""));
941 stream->print(ESPHOME_F(
"\",name=\""));
943 stream->print(ESPHOME_F(
"\",category=\""));
944 stream->print(setting.c_str());
945 stream->print(ESPHOME_F(
"\",setting_value=\""));
946 stream->print(LOG_STR_ARG(setting_value));
947 stream->print(ESPHOME_F(
"\"} "));
948 stream->print(ESPHOME_F(
"1.0"));
949 stream->print(ESPHOME_F(
"\n"));
953 std::string &node, std::string &friendly_name, std::string &category,
954 std::string &climate_value) {
955 stream->print(ESPHOME_F(
"esphome_climate_value{id=\""));
960 stream->print(ESPHOME_F(
"\",name=\""));
962 stream->print(ESPHOME_F(
"\",category=\""));
963 stream->print(category.c_str());
964 stream->print(ESPHOME_F(
"\"} "));
965 stream->print(climate_value.c_str());
966 stream->print(ESPHOME_F(
"\n"));
970 std::string &node, std::string &friendly_name, std::string &category,
971 bool is_failed_value) {
972 stream->print(ESPHOME_F(
"esphome_climate_failed{id=\""));
977 stream->print(ESPHOME_F(
"\",name=\""));
979 stream->print(ESPHOME_F(
"\",category=\""));
980 stream->print(category.c_str());
981 stream->print(ESPHOME_F(
"\"} "));
982 if (is_failed_value) {
983 stream->print(ESPHOME_F(
"1.0"));
985 stream->print(ESPHOME_F(
"0.0"));
987 stream->print(ESPHOME_F(
"\n"));
991 std::string &node, std::string &friendly_name) {
992 if (obj->is_internal() && !this->include_internal_)
995 bool any_failures =
false;
996 std::string climate_mode_category =
"mode";
998 climate_setting_row_(stream, obj, area, node, friendly_name, climate_mode_category, climate_mode_value);
999 const auto traits = obj->get_traits();
1001 int8_t target_accuracy = traits.get_target_temperature_accuracy_decimals();
1002 int8_t current_accuracy = traits.get_current_temperature_accuracy_decimals();
1004 std::string max_temp =
"maximum_temperature";
1006 climate_value_row_(stream, obj, area, node, friendly_name, max_temp, max_temp_value);
1008 std::string min_temp =
"mininum_temperature";
1010 climate_value_row_(stream, obj, area, node, friendly_name, min_temp, min_temp_value);
1013 std::string current_temp =
"current_temperature";
1014 if (std::isnan(obj->current_temperature)) {
1016 any_failures =
true;
1019 climate_value_row_(stream, obj, area, node, friendly_name, current_temp, current_temp_value);
1024 std::string current_humidity =
"current_humidity";
1025 if (std::isnan(obj->current_humidity)) {
1027 any_failures =
true;
1030 climate_value_row_(stream, obj, area, node, friendly_name, current_humidity, current_humidity_value);
1036 if (std::isnan(obj->target_humidity)) {
1038 any_failures =
true;
1047 std::string target_temp_low =
"target_temperature_low";
1049 climate_value_row_(stream, obj, area, node, friendly_name, target_temp_low, target_temp_low_value);
1050 std::string target_temp_high =
"target_temperature_high";
1052 climate_value_row_(stream, obj, area, node, friendly_name, target_temp_high, target_temp_high_value);
1054 std::string target_temp =
"target_temperature";
1056 climate_value_row_(stream, obj, area, node, friendly_name, target_temp, target_temp_value);
1059 std::string climate_trait_category =
"action";
1061 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1063 if (traits.get_supports_fan_modes()) {
1064 std::string climate_trait_category =
"fan_mode";
1065 if (obj->fan_mode.has_value()) {
1067 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1068 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
false);
1070 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
true);
1071 any_failures =
true;
1074 if (traits.get_supports_presets()) {
1075 std::string climate_trait_category =
"preset";
1076 if (obj->preset.has_value()) {
1078 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1079 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
false);
1081 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
true);
1082 any_failures =
true;
1085 if (traits.get_supports_swing_modes()) {
1086 std::string climate_trait_category =
"swing_mode";
1088 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1090 std::string all_climate_category =
"all";
1091 climate_failed_row_(stream, obj, area, node, friendly_name, all_climate_category, any_failures);
const std::string & get_friendly_name() const
Get the friendly name of this Application set by pre_setup().
const char * get_area() const
Get the area of this Application set by pre_setup().
const std::string & get_name() const
Get the name of this Application set by pre_setup().
auto & get_binary_sensors() const
void number_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void add_friendly_name_label_(AsyncResponseStream *stream, std::string &friendly_name)
void handle_update_state_(AsyncResponseStream *stream, update::UpdateState state)
void climate_setting_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, std::string &node, std::string &friendly_name, std::string &setting, const LogString *setting_value)
void event_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void media_player_row_(AsyncResponseStream *stream, media_player::MediaPlayer *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the media player state as prometheus data point.
void light_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void text_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void update_entity_row_(AsyncResponseStream *stream, update::UpdateEntity *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the update state and info as prometheus data point.
std::map< EntityBase *, std::string > relabel_map_id_
void fan_row_(AsyncResponseStream *stream, fan::Fan *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the fan state as prometheus data point.
void climate_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void binary_sensor_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void switch_row_(AsyncResponseStream *stream, switch_::Switch *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the switch values state as prometheus data point.
std::map< EntityBase *, std::string > relabel_map_name_
void sensor_row_(AsyncResponseStream *stream, sensor::Sensor *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the sensor state as prometheus data point.
void light_row_(AsyncResponseStream *stream, light::LightState *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the light values state as prometheus data point.
void climate_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the climate state as prometheus data point.
void update_entity_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void climate_failed_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, std::string &node, std::string &friendly_name, std::string &category, bool is_failed_value)
void binary_sensor_row_(AsyncResponseStream *stream, binary_sensor::BinarySensor *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the binary sensor state as prometheus data point.
void number_row_(AsyncResponseStream *stream, number::Number *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the number state as prometheus data point.
void valve_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void switch_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void media_player_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void print_metric_labels_(AsyncResponseStream *stream, const __FlashStringHelper *metric_name, EntityBase *obj, std::string &area, std::string &node, std::string &friendly_name)
Print metric name and common labels (id, area, node, friendly_name, name)
void event_row_(AsyncResponseStream *stream, event::Event *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the event values state as prometheus data point.
void text_sensor_type_(AsyncResponseStream *stream)
Return the type for prometheus.
std::string relabel_id_(EntityBase *obj)
void text_sensor_row_(AsyncResponseStream *stream, text_sensor::TextSensor *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the text sensor values state as prometheus data point.
void add_area_label_(AsyncResponseStream *stream, std::string &area)
void select_row_(AsyncResponseStream *stream, select::Select *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the select state as prometheus data point.
std::string relabel_name_(EntityBase *obj)
void cover_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void select_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void add_node_label_(AsyncResponseStream *stream, std::string &node)
void handleRequest(AsyncWebServerRequest *req) override
void text_row_(AsyncResponseStream *stream, text::Text *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the text values state as prometheus data point.
void climate_value_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, std::string &node, std::string &friendly_name, std::string &category, std::string &climate_value)
void cover_row_(AsyncResponseStream *stream, cover::Cover *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the cover values state as prometheus data point.
void lock_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void valve_row_(AsyncResponseStream *stream, valve::Valve *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the valve state as prometheus data point.
void fan_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void sensor_type_(AsyncResponseStream *stream)
Return the type for prometheus.
void lock_row_(AsyncResponseStream *stream, lock::Lock *obj, std::string &area, std::string &node, std::string &friendly_name)
Return the lock values state as prometheus data point.
const LogString * climate_action_to_string(ClimateAction action)
Convert the given ClimateAction to a human-readable string.
@ CLIMATE_SUPPORTS_CURRENT_HUMIDITY
@ CLIMATE_SUPPORTS_TARGET_HUMIDITY
@ CLIMATE_SUPPORTS_TWO_POINT_TARGET_TEMPERATURE
@ CLIMATE_SUPPORTS_CURRENT_TEMPERATURE
@ CLIMATE_SUPPORTS_ACTION
@ CLIMATE_REQUIRES_TWO_POINT_TARGET_TEMPERATURE
const LogString * climate_swing_mode_to_string(ClimateSwingMode swing_mode)
Convert the given ClimateSwingMode to a human-readable string.
const LogString * climate_preset_to_string(ClimatePreset preset)
Convert the given PresetMode to a human-readable string.
const LogString * climate_fan_mode_to_string(ClimateFanMode fan_mode)
Convert the given ClimateFanMode to a human-readable string.
const LogString * climate_mode_to_string(ClimateMode mode)
Convert the given ClimateMode to a human-readable string.
@ BRIGHTNESS
Master brightness of the light can be controlled.
@ RGB
Color can be controlled using RGB format (includes a brightness control for the color).
@ WHITE
Brightness of white channel can be controlled separately from other channels.
@ UPDATE_STATE_INSTALLING
const LogString * valve_operation_to_str(ValveOperation op)
Providing packet encoding functions for exchanging data with a remote host.
std::string value_accuracy_to_string(float value, int8_t accuracy_decimals)
Create a string from a value and an accuracy in decimals.
Application App
Global storage of Application pointer - only one Application can exist.