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(
"\"} "));
197 char value_buf[VALUE_ACCURACY_MAX_LEN];
199 stream->print(value_buf);
200 stream->print(ESPHOME_F(
"\n"));
203 stream->print(ESPHOME_F(
"esphome_sensor_failed{id=\""));
208 stream->print(ESPHOME_F(
"\",name=\""));
210 stream->print(ESPHOME_F(
"\"} 1\n"));
216#ifdef USE_BINARY_SENSOR
218 stream->print(ESPHOME_F(
"#TYPE esphome_binary_sensor_value gauge\n"));
219 stream->print(ESPHOME_F(
"#TYPE esphome_binary_sensor_failed gauge\n"));
222 std::string &area, std::string &node, std::string &friendly_name) {
223 if (obj->is_internal() && !this->include_internal_)
225 if (obj->has_state()) {
227 stream->print(ESPHOME_F(
"esphome_binary_sensor_failed{id=\""));
232 stream->print(ESPHOME_F(
"\",name=\""));
234 stream->print(ESPHOME_F(
"\"} 0\n"));
236 stream->print(ESPHOME_F(
"esphome_binary_sensor_value{id=\""));
241 stream->print(ESPHOME_F(
"\",name=\""));
243 stream->print(ESPHOME_F(
"\"} "));
244 stream->print(obj->state);
245 stream->print(ESPHOME_F(
"\n"));
248 stream->print(ESPHOME_F(
"esphome_binary_sensor_failed{id=\""));
253 stream->print(ESPHOME_F(
"\",name=\""));
255 stream->print(ESPHOME_F(
"\"} 1\n"));
262 stream->print(ESPHOME_F(
"#TYPE esphome_fan_value gauge\n"));
263 stream->print(ESPHOME_F(
"#TYPE esphome_fan_failed gauge\n"));
264 stream->print(ESPHOME_F(
"#TYPE esphome_fan_speed gauge\n"));
265 stream->print(ESPHOME_F(
"#TYPE esphome_fan_oscillation gauge\n"));
268 std::string &friendly_name) {
269 if (obj->is_internal() && !this->include_internal_)
271 stream->print(ESPHOME_F(
"esphome_fan_failed{id=\""));
276 stream->print(ESPHOME_F(
"\",name=\""));
278 stream->print(ESPHOME_F(
"\"} 0\n"));
280 stream->print(ESPHOME_F(
"esphome_fan_value{id=\""));
285 stream->print(ESPHOME_F(
"\",name=\""));
287 stream->print(ESPHOME_F(
"\"} "));
288 stream->print(obj->state);
289 stream->print(ESPHOME_F(
"\n"));
291 if (obj->get_traits().supports_speed()) {
292 stream->print(ESPHOME_F(
"esphome_fan_speed{id=\""));
297 stream->print(ESPHOME_F(
"\",name=\""));
299 stream->print(ESPHOME_F(
"\"} "));
300 stream->print(obj->speed);
301 stream->print(ESPHOME_F(
"\n"));
304 if (obj->get_traits().supports_oscillation()) {
305 stream->print(ESPHOME_F(
"esphome_fan_oscillation{id=\""));
310 stream->print(ESPHOME_F(
"\",name=\""));
312 stream->print(ESPHOME_F(
"\"} "));
313 stream->print(obj->oscillating);
314 stream->print(ESPHOME_F(
"\n"));
321 stream->print(ESPHOME_F(
"#TYPE esphome_light_state gauge\n"));
322 stream->print(ESPHOME_F(
"#TYPE esphome_light_color gauge\n"));
323 stream->print(ESPHOME_F(
"#TYPE esphome_light_effect_active gauge\n"));
326 std::string &node, std::string &friendly_name) {
327 if (obj->is_internal() && !this->include_internal_)
331 stream->print(ESPHOME_F(
"\"} "));
332 stream->print(obj->remote_values.is_on());
333 stream->print(ESPHOME_F(
"\n"));
335 light::LightColorValues color = obj->current_values;
336 float brightness, r, g, b, w;
337 color.as_brightness(&brightness);
338 color.as_rgbw(&r, &g, &b, &w);
341 stream->print(ESPHOME_F(
"\",channel=\"brightness\"} "));
342 stream->print(brightness);
343 stream->print(ESPHOME_F(
"\n"));
347 stream->print(ESPHOME_F(
"\",channel=\"r\"} "));
349 stream->print(ESPHOME_F(
"\n"));
351 stream->print(ESPHOME_F(
"\",channel=\"g\"} "));
353 stream->print(ESPHOME_F(
"\n"));
355 stream->print(ESPHOME_F(
"\",channel=\"b\"} "));
357 stream->print(ESPHOME_F(
"\n"));
361 stream->print(ESPHOME_F(
"\",channel=\"w\"} "));
363 stream->print(ESPHOME_F(
"\n"));
366 if (!obj->get_effects().empty()) {
368 StringRef effect = obj->get_effect_name();
369 print_metric_labels_(stream, ESPHOME_F(
"esphome_light_effect_active"), obj, area, node, friendly_name);
370 stream->print(ESPHOME_F(
"\",effect=\""));
372 if (effect ==
"None") {
373 stream->print(ESPHOME_F(
"None\"} 0\n"));
376 stream->print(effect.c_str());
377 stream->print(ESPHOME_F(
"\"} 1\n"));
385 stream->print(ESPHOME_F(
"#TYPE esphome_cover_value gauge\n"));
386 stream->print(ESPHOME_F(
"#TYPE esphome_cover_failed gauge\n"));
389 std::string &friendly_name) {
390 if (obj->is_internal() && !this->include_internal_)
392 if (!std::isnan(obj->position)) {
394 stream->print(ESPHOME_F(
"esphome_cover_failed{id=\""));
399 stream->print(ESPHOME_F(
"\",name=\""));
401 stream->print(ESPHOME_F(
"\"} 0\n"));
403 stream->print(ESPHOME_F(
"esphome_cover_value{id=\""));
408 stream->print(ESPHOME_F(
"\",name=\""));
410 stream->print(ESPHOME_F(
"\"} "));
411 stream->print(obj->position);
412 stream->print(ESPHOME_F(
"\n"));
413 if (obj->get_traits().get_supports_tilt()) {
414 stream->print(ESPHOME_F(
"esphome_cover_tilt{id=\""));
419 stream->print(ESPHOME_F(
"\",name=\""));
421 stream->print(ESPHOME_F(
"\"} "));
422 stream->print(obj->tilt);
423 stream->print(ESPHOME_F(
"\n"));
427 stream->print(ESPHOME_F(
"esphome_cover_failed{id=\""));
432 stream->print(ESPHOME_F(
"\",name=\""));
434 stream->print(ESPHOME_F(
"\"} 1\n"));
441 stream->print(ESPHOME_F(
"#TYPE esphome_switch_value gauge\n"));
442 stream->print(ESPHOME_F(
"#TYPE esphome_switch_failed gauge\n"));
445 std::string &node, std::string &friendly_name) {
446 if (obj->is_internal() && !this->include_internal_)
448 stream->print(ESPHOME_F(
"esphome_switch_failed{id=\""));
453 stream->print(ESPHOME_F(
"\",name=\""));
455 stream->print(ESPHOME_F(
"\"} 0\n"));
457 stream->print(ESPHOME_F(
"esphome_switch_value{id=\""));
462 stream->print(ESPHOME_F(
"\",name=\""));
464 stream->print(ESPHOME_F(
"\"} "));
465 stream->print(obj->state);
466 stream->print(ESPHOME_F(
"\n"));
472 stream->print(ESPHOME_F(
"#TYPE esphome_lock_value gauge\n"));
473 stream->print(ESPHOME_F(
"#TYPE esphome_lock_failed gauge\n"));
476 std::string &friendly_name) {
477 if (obj->is_internal() && !this->include_internal_)
479 stream->print(ESPHOME_F(
"esphome_lock_failed{id=\""));
484 stream->print(ESPHOME_F(
"\",name=\""));
486 stream->print(ESPHOME_F(
"\"} 0\n"));
488 stream->print(ESPHOME_F(
"esphome_lock_value{id=\""));
493 stream->print(ESPHOME_F(
"\",name=\""));
495 stream->print(ESPHOME_F(
"\"} "));
496 stream->print(obj->state);
497 stream->print(ESPHOME_F(
"\n"));
502#ifdef USE_TEXT_SENSOR
504 stream->print(ESPHOME_F(
"#TYPE esphome_text_sensor_value gauge\n"));
505 stream->print(ESPHOME_F(
"#TYPE esphome_text_sensor_failed gauge\n"));
508 std::string &node, std::string &friendly_name) {
509 if (obj->is_internal() && !this->include_internal_)
511 if (obj->has_state()) {
513 stream->print(ESPHOME_F(
"esphome_text_sensor_failed{id=\""));
518 stream->print(ESPHOME_F(
"\",name=\""));
520 stream->print(ESPHOME_F(
"\"} 0\n"));
522 stream->print(ESPHOME_F(
"esphome_text_sensor_value{id=\""));
527 stream->print(ESPHOME_F(
"\",name=\""));
529 stream->print(ESPHOME_F(
"\",value=\""));
530 stream->print(obj->state.c_str());
531 stream->print(ESPHOME_F(
"\"} "));
532 stream->print(ESPHOME_F(
"1.0"));
533 stream->print(ESPHOME_F(
"\n"));
536 stream->print(ESPHOME_F(
"esphome_text_sensor_failed{id=\""));
541 stream->print(ESPHOME_F(
"\",name=\""));
543 stream->print(ESPHOME_F(
"\"} 1\n"));
551 stream->print(ESPHOME_F(
"#TYPE esphome_text_value gauge\n"));
552 stream->print(ESPHOME_F(
"#TYPE esphome_text_failed gauge\n"));
555 std::string &friendly_name) {
556 if (obj->is_internal() && !this->include_internal_)
558 if (obj->has_state()) {
560 stream->print(ESPHOME_F(
"esphome_text_failed{id=\""));
565 stream->print(ESPHOME_F(
"\",name=\""));
567 stream->print(ESPHOME_F(
"\"} 0\n"));
569 stream->print(ESPHOME_F(
"esphome_text_value{id=\""));
574 stream->print(ESPHOME_F(
"\",name=\""));
576 stream->print(ESPHOME_F(
"\",value=\""));
577 stream->print(obj->state.c_str());
578 stream->print(ESPHOME_F(
"\"} "));
579 stream->print(ESPHOME_F(
"1.0"));
580 stream->print(ESPHOME_F(
"\n"));
583 stream->print(ESPHOME_F(
"esphome_text_failed{id=\""));
588 stream->print(ESPHOME_F(
"\",name=\""));
590 stream->print(ESPHOME_F(
"\"} 1\n"));
598 stream->print(ESPHOME_F(
"#TYPE esphome_event_value gauge\n"));
599 stream->print(ESPHOME_F(
"#TYPE esphome_event_failed gauge\n"));
602 std::string &friendly_name) {
603 if (obj->is_internal() && !this->include_internal_)
605 if (obj->has_event()) {
607 stream->print(ESPHOME_F(
"esphome_event_failed{id=\""));
612 stream->print(ESPHOME_F(
"\",name=\""));
614 stream->print(ESPHOME_F(
"\"} 0\n"));
616 stream->print(ESPHOME_F(
"esphome_event_value{id=\""));
621 stream->print(ESPHOME_F(
"\",name=\""));
623 stream->print(ESPHOME_F(
"\",last_event_type=\""));
625 stream->print(obj->get_last_event_type().c_str());
626 stream->print(ESPHOME_F(
"\"} "));
627 stream->print(ESPHOME_F(
"1.0"));
628 stream->print(ESPHOME_F(
"\n"));
631 stream->print(ESPHOME_F(
"esphome_event_failed{id=\""));
636 stream->print(ESPHOME_F(
"\",name=\""));
638 stream->print(ESPHOME_F(
"\"} 1\n"));
646 stream->print(ESPHOME_F(
"#TYPE esphome_number_value gauge\n"));
647 stream->print(ESPHOME_F(
"#TYPE esphome_number_failed gauge\n"));
650 std::string &node, std::string &friendly_name) {
651 if (obj->is_internal() && !this->include_internal_)
653 if (!std::isnan(obj->state)) {
655 stream->print(ESPHOME_F(
"esphome_number_failed{id=\""));
660 stream->print(ESPHOME_F(
"\",name=\""));
662 stream->print(ESPHOME_F(
"\"} 0\n"));
664 stream->print(ESPHOME_F(
"esphome_number_value{id=\""));
669 stream->print(ESPHOME_F(
"\",name=\""));
671 stream->print(ESPHOME_F(
"\"} "));
672 stream->print(obj->state);
673 stream->print(ESPHOME_F(
"\n"));
676 stream->print(ESPHOME_F(
"esphome_number_failed{id=\""));
681 stream->print(ESPHOME_F(
"\",name=\""));
683 stream->print(ESPHOME_F(
"\"} 1\n"));
690 stream->print(ESPHOME_F(
"#TYPE esphome_select_value gauge\n"));
691 stream->print(ESPHOME_F(
"#TYPE esphome_select_failed gauge\n"));
694 std::string &node, std::string &friendly_name) {
695 if (obj->is_internal() && !this->include_internal_)
697 if (obj->has_state()) {
699 stream->print(ESPHOME_F(
"esphome_select_failed{id=\""));
704 stream->print(ESPHOME_F(
"\",name=\""));
706 stream->print(ESPHOME_F(
"\"} 0\n"));
708 stream->print(ESPHOME_F(
"esphome_select_value{id=\""));
713 stream->print(ESPHOME_F(
"\",name=\""));
715 stream->print(ESPHOME_F(
"\",value=\""));
717 stream->print(obj->current_option().c_str());
718 stream->print(ESPHOME_F(
"\"} "));
719 stream->print(ESPHOME_F(
"1.0"));
720 stream->print(ESPHOME_F(
"\n"));
723 stream->print(ESPHOME_F(
"esphome_select_failed{id=\""));
728 stream->print(ESPHOME_F(
"\",name=\""));
730 stream->print(ESPHOME_F(
"\"} 1\n"));
735#ifdef USE_MEDIA_PLAYER
737 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_state_value gauge\n"));
738 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_volume gauge\n"));
739 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_is_muted gauge\n"));
740 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_failed gauge\n"));
743 std::string &area, std::string &node, std::string &friendly_name) {
744 if (obj->is_internal() && !this->include_internal_)
746 stream->print(ESPHOME_F(
"esphome_media_player_failed{id=\""));
751 stream->print(ESPHOME_F(
"\",name=\""));
753 stream->print(ESPHOME_F(
"\"} 0\n"));
755 stream->print(ESPHOME_F(
"esphome_media_player_state_value{id=\""));
760 stream->print(ESPHOME_F(
"\",name=\""));
762 stream->print(ESPHOME_F(
"\",value=\""));
764 stream->print(ESPHOME_F(
"\"} "));
765 stream->print(ESPHOME_F(
"1.0"));
766 stream->print(ESPHOME_F(
"\n"));
767 stream->print(ESPHOME_F(
"esphome_media_player_volume{id=\""));
772 stream->print(ESPHOME_F(
"\",name=\""));
774 stream->print(ESPHOME_F(
"\"} "));
775 stream->print(obj->volume);
776 stream->print(ESPHOME_F(
"\n"));
777 stream->print(ESPHOME_F(
"esphome_media_player_is_muted{id=\""));
782 stream->print(ESPHOME_F(
"\",name=\""));
784 stream->print(ESPHOME_F(
"\"} "));
785 if (obj->is_muted()) {
786 stream->print(ESPHOME_F(
"1.0"));
788 stream->print(ESPHOME_F(
"0.0"));
790 stream->print(ESPHOME_F(
"\n"));
796 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_state gauge\n"));
797 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_info gauge\n"));
798 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_failed gauge\n"));
804 stream->print(
"unknown");
807 stream->print(
"none");
810 stream->print(
"available");
813 stream->print(
"installing");
816 stream->print(
"invalid");
822 std::string &node, std::string &friendly_name) {
823 if (obj->is_internal() && !this->include_internal_)
825 if (obj->has_state()) {
827 stream->print(ESPHOME_F(
"esphome_update_entity_failed{id=\""));
832 stream->print(ESPHOME_F(
"\",name=\""));
834 stream->print(ESPHOME_F(
"\"} 0\n"));
836 stream->print(ESPHOME_F(
"esphome_update_entity_state{id=\""));
841 stream->print(ESPHOME_F(
"\",name=\""));
843 stream->print(ESPHOME_F(
"\",value=\""));
845 stream->print(ESPHOME_F(
"\"} "));
846 stream->print(ESPHOME_F(
"1.0"));
847 stream->print(ESPHOME_F(
"\n"));
849 stream->print(ESPHOME_F(
"esphome_update_entity_info{id=\""));
854 stream->print(ESPHOME_F(
"\",name=\""));
856 stream->print(ESPHOME_F(
"\",current_version=\""));
857 stream->print(obj->update_info.current_version.c_str());
858 stream->print(ESPHOME_F(
"\",latest_version=\""));
859 stream->print(obj->update_info.latest_version.c_str());
860 stream->print(ESPHOME_F(
"\",title=\""));
861 stream->print(obj->update_info.title.c_str());
862 stream->print(ESPHOME_F(
"\"} "));
863 stream->print(ESPHOME_F(
"1.0"));
864 stream->print(ESPHOME_F(
"\n"));
867 stream->print(ESPHOME_F(
"esphome_update_entity_failed{id=\""));
872 stream->print(ESPHOME_F(
"\",name=\""));
874 stream->print(ESPHOME_F(
"\"} 1\n"));
881 stream->print(ESPHOME_F(
"#TYPE esphome_valve_operation gauge\n"));
882 stream->print(ESPHOME_F(
"#TYPE esphome_valve_failed gauge\n"));
883 stream->print(ESPHOME_F(
"#TYPE esphome_valve_position gauge\n"));
887 std::string &friendly_name) {
888 if (obj->is_internal() && !this->include_internal_)
890 stream->print(ESPHOME_F(
"esphome_valve_failed{id=\""));
895 stream->print(ESPHOME_F(
"\",name=\""));
897 stream->print(ESPHOME_F(
"\"} 0\n"));
899 stream->print(ESPHOME_F(
"esphome_valve_operation{id=\""));
904 stream->print(ESPHOME_F(
"\",name=\""));
906 stream->print(ESPHOME_F(
"\",operation=\""));
907#ifdef USE_STORE_LOG_STR_IN_FLASH
912 stream->print(ESPHOME_F(
"\"} "));
913 stream->print(ESPHOME_F(
"1.0"));
914 stream->print(ESPHOME_F(
"\n"));
916 if (obj->get_traits().get_supports_position()) {
917 stream->print(ESPHOME_F(
"esphome_valve_position{id=\""));
922 stream->print(ESPHOME_F(
"\",name=\""));
924 stream->print(ESPHOME_F(
"\"} "));
925 stream->print(obj->position);
926 stream->print(ESPHOME_F(
"\n"));
933 stream->print(ESPHOME_F(
"#TYPE esphome_climate_setting gauge\n"));
934 stream->print(ESPHOME_F(
"#TYPE esphome_climate_value gauge\n"));
935 stream->print(ESPHOME_F(
"#TYPE esphome_climate_failed gauge\n"));
939 std::string &node, std::string &friendly_name, std::string &setting,
940 const LogString *setting_value) {
941 stream->print(ESPHOME_F(
"esphome_climate_setting{id=\""));
946 stream->print(ESPHOME_F(
"\",name=\""));
948 stream->print(ESPHOME_F(
"\",category=\""));
949 stream->print(setting.c_str());
950 stream->print(ESPHOME_F(
"\",setting_value=\""));
951 stream->print(LOG_STR_ARG(setting_value));
952 stream->print(ESPHOME_F(
"\"} "));
953 stream->print(ESPHOME_F(
"1.0"));
954 stream->print(ESPHOME_F(
"\n"));
958 std::string &node, std::string &friendly_name, std::string &category,
959 const char *climate_value) {
960 stream->print(ESPHOME_F(
"esphome_climate_value{id=\""));
965 stream->print(ESPHOME_F(
"\",name=\""));
967 stream->print(ESPHOME_F(
"\",category=\""));
968 stream->print(category.c_str());
969 stream->print(ESPHOME_F(
"\"} "));
970 stream->print(climate_value);
971 stream->print(ESPHOME_F(
"\n"));
975 std::string &node, std::string &friendly_name, std::string &category,
976 bool is_failed_value) {
977 stream->print(ESPHOME_F(
"esphome_climate_failed{id=\""));
982 stream->print(ESPHOME_F(
"\",name=\""));
984 stream->print(ESPHOME_F(
"\",category=\""));
985 stream->print(category.c_str());
986 stream->print(ESPHOME_F(
"\"} "));
987 if (is_failed_value) {
988 stream->print(ESPHOME_F(
"1.0"));
990 stream->print(ESPHOME_F(
"0.0"));
992 stream->print(ESPHOME_F(
"\n"));
996 std::string &node, std::string &friendly_name) {
997 if (obj->is_internal() && !this->include_internal_)
1000 bool any_failures =
false;
1001 std::string climate_mode_category =
"mode";
1003 climate_setting_row_(stream, obj, area, node, friendly_name, climate_mode_category, climate_mode_value);
1004 const auto traits = obj->get_traits();
1006 int8_t target_accuracy = traits.get_target_temperature_accuracy_decimals();
1007 int8_t current_accuracy = traits.get_current_temperature_accuracy_decimals();
1008 char value_buf[VALUE_ACCURACY_MAX_LEN];
1010 std::string max_temp =
"maximum_temperature";
1014 std::string min_temp =
"minimum_temperature";
1019 std::string current_temp =
"current_temperature";
1020 if (std::isnan(obj->current_temperature)) {
1022 any_failures =
true;
1030 std::string current_humidity =
"current_humidity";
1031 if (std::isnan(obj->current_humidity)) {
1033 any_failures =
true;
1036 climate_value_row_(stream, obj, area, node, friendly_name, current_humidity, value_buf);
1042 if (std::isnan(obj->target_humidity)) {
1044 any_failures =
true;
1053 std::string target_temp_low =
"target_temperature_low";
1055 climate_value_row_(stream, obj, area, node, friendly_name, target_temp_low, value_buf);
1056 std::string target_temp_high =
"target_temperature_high";
1058 climate_value_row_(stream, obj, area, node, friendly_name, target_temp_high, value_buf);
1060 std::string target_temp =
"target_temperature";
1065 std::string climate_trait_category =
"action";
1067 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1069 if (traits.get_supports_fan_modes()) {
1070 std::string climate_trait_category =
"fan_mode";
1071 if (obj->fan_mode.has_value()) {
1073 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1074 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
false);
1076 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
true);
1077 any_failures =
true;
1080 if (traits.get_supports_presets()) {
1081 std::string climate_trait_category =
"preset";
1082 if (obj->preset.has_value()) {
1084 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1085 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
false);
1087 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
true);
1088 any_failures =
true;
1091 if (traits.get_supports_swing_modes()) {
1092 std::string climate_trait_category =
"swing_mode";
1094 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1096 std::string all_climate_category =
"all";
1097 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 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 climate_value_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, std::string &node, std::string &friendly_name, std::string &category, const char *climate_value)
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.
size_t value_accuracy_to_buf(std::span< char, VALUE_ACCURACY_MAX_LEN > buf, float value, int8_t accuracy_decimals)
Format value with accuracy to buffer, returns chars written (excluding null)
Application App
Global storage of Application pointer - only one Application can exist.