8 AsyncResponseStream *stream = req->beginResponseStream(
"text/plain; version=0.0.4; charset=utf-8");
15 for (
auto *obj :
App.get_sensors())
16 this->
sensor_row_(stream, obj, area, node, friendly_name);
19#ifdef USE_BINARY_SENSOR
21 for (
auto *obj :
App.get_binary_sensors())
27 for (
auto *obj :
App.get_fans())
28 this->
fan_row_(stream, obj, area, node, friendly_name);
33 for (
auto *obj :
App.get_lights())
34 this->
light_row_(stream, obj, area, node, friendly_name);
39 for (
auto *obj :
App.get_covers())
40 this->
cover_row_(stream, obj, area, node, friendly_name);
45 for (
auto *obj :
App.get_switches())
46 this->
switch_row_(stream, obj, area, node, friendly_name);
51 for (
auto *obj :
App.get_locks())
52 this->
lock_row_(stream, obj, area, node, friendly_name);
57 for (
auto *obj :
App.get_events())
58 this->
event_row_(stream, obj, area, node, friendly_name);
63 for (
auto *obj :
App.get_texts())
64 this->
text_row_(stream, obj, area, node, friendly_name);
69 for (
auto *obj :
App.get_text_sensors())
75 for (
auto *obj :
App.get_numbers())
76 this->
number_row_(stream, obj, area, node, friendly_name);
81 for (
auto *obj :
App.get_selects())
82 this->
select_row_(stream, obj, area, node, friendly_name);
85#ifdef USE_MEDIA_PLAYER
87 for (
auto *obj :
App.get_media_players())
93 for (
auto *obj :
App.get_updates())
99 for (
auto *obj :
App.get_valves())
100 this->
valve_row_(stream, obj, area, node, friendly_name);
105 for (
auto *obj :
App.get_climates())
106 this->
climate_row_(stream, obj, area, node, friendly_name);
117 char object_id_buf[OBJECT_ID_MAX_LEN];
118 return obj->get_object_id_to(object_id_buf).str();
128 stream->print(ESPHOME_F(
"\",area=\""));
129 stream->print(area.c_str());
135 stream->print(ESPHOME_F(
"\",node=\""));
136 stream->print(node.c_str());
141 if (!friendly_name.empty()) {
142 stream->print(ESPHOME_F(
"\",friendly_name=\""));
143 stream->print(friendly_name.c_str());
149 EntityBase *obj, std::string &area, std::string &node,
150 std::string &friendly_name) {
153 std::string &area, std::string &node, std::string &friendly_name) {
155 stream->print(metric_name);
156 stream->print(ESPHOME_F(
"{id=\""));
161 stream->print(ESPHOME_F(
"\",name=\""));
168 stream->print(ESPHOME_F(
"#TYPE esphome_sensor_value gauge\n"));
169 stream->print(ESPHOME_F(
"#TYPE esphome_sensor_failed gauge\n"));
172 std::string &node, std::string &friendly_name) {
173 if (obj->is_internal() && !this->include_internal_)
175 if (!std::isnan(obj->state)) {
177 stream->print(ESPHOME_F(
"esphome_sensor_failed{id=\""));
182 stream->print(ESPHOME_F(
"\",name=\""));
184 stream->print(ESPHOME_F(
"\"} 0\n"));
186 stream->print(ESPHOME_F(
"esphome_sensor_value{id=\""));
191 stream->print(ESPHOME_F(
"\",name=\""));
193 stream->print(ESPHOME_F(
"\",unit=\""));
194 stream->print(obj->get_unit_of_measurement_ref().c_str());
195 stream->print(ESPHOME_F(
"\"} "));
196 char value_buf[VALUE_ACCURACY_MAX_LEN];
198 stream->print(value_buf);
199 stream->print(ESPHOME_F(
"\n"));
202 stream->print(ESPHOME_F(
"esphome_sensor_failed{id=\""));
207 stream->print(ESPHOME_F(
"\",name=\""));
209 stream->print(ESPHOME_F(
"\"} 1\n"));
215#ifdef USE_BINARY_SENSOR
217 stream->print(ESPHOME_F(
"#TYPE esphome_binary_sensor_value gauge\n"));
218 stream->print(ESPHOME_F(
"#TYPE esphome_binary_sensor_failed gauge\n"));
221 std::string &area, std::string &node, std::string &friendly_name) {
222 if (obj->is_internal() && !this->include_internal_)
224 if (obj->has_state()) {
226 stream->print(ESPHOME_F(
"esphome_binary_sensor_failed{id=\""));
231 stream->print(ESPHOME_F(
"\",name=\""));
233 stream->print(ESPHOME_F(
"\"} 0\n"));
235 stream->print(ESPHOME_F(
"esphome_binary_sensor_value{id=\""));
240 stream->print(ESPHOME_F(
"\",name=\""));
242 stream->print(ESPHOME_F(
"\"} "));
243 stream->print(obj->state);
244 stream->print(ESPHOME_F(
"\n"));
247 stream->print(ESPHOME_F(
"esphome_binary_sensor_failed{id=\""));
252 stream->print(ESPHOME_F(
"\",name=\""));
254 stream->print(ESPHOME_F(
"\"} 1\n"));
261 stream->print(ESPHOME_F(
"#TYPE esphome_fan_value gauge\n"));
262 stream->print(ESPHOME_F(
"#TYPE esphome_fan_failed gauge\n"));
263 stream->print(ESPHOME_F(
"#TYPE esphome_fan_speed gauge\n"));
264 stream->print(ESPHOME_F(
"#TYPE esphome_fan_oscillation gauge\n"));
267 std::string &friendly_name) {
268 if (obj->is_internal() && !this->include_internal_)
270 stream->print(ESPHOME_F(
"esphome_fan_failed{id=\""));
275 stream->print(ESPHOME_F(
"\",name=\""));
277 stream->print(ESPHOME_F(
"\"} 0\n"));
279 stream->print(ESPHOME_F(
"esphome_fan_value{id=\""));
284 stream->print(ESPHOME_F(
"\",name=\""));
286 stream->print(ESPHOME_F(
"\"} "));
287 stream->print(obj->state);
288 stream->print(ESPHOME_F(
"\n"));
290 if (obj->get_traits().supports_speed()) {
291 stream->print(ESPHOME_F(
"esphome_fan_speed{id=\""));
296 stream->print(ESPHOME_F(
"\",name=\""));
298 stream->print(ESPHOME_F(
"\"} "));
299 stream->print(obj->speed);
300 stream->print(ESPHOME_F(
"\n"));
303 if (obj->get_traits().supports_oscillation()) {
304 stream->print(ESPHOME_F(
"esphome_fan_oscillation{id=\""));
309 stream->print(ESPHOME_F(
"\",name=\""));
311 stream->print(ESPHOME_F(
"\"} "));
312 stream->print(obj->oscillating);
313 stream->print(ESPHOME_F(
"\n"));
320 stream->print(ESPHOME_F(
"#TYPE esphome_light_state gauge\n"));
321 stream->print(ESPHOME_F(
"#TYPE esphome_light_color gauge\n"));
322 stream->print(ESPHOME_F(
"#TYPE esphome_light_effect_active gauge\n"));
325 std::string &node, std::string &friendly_name) {
326 if (obj->is_internal() && !this->include_internal_)
330 stream->print(ESPHOME_F(
"\"} "));
331 stream->print(obj->remote_values.is_on());
332 stream->print(ESPHOME_F(
"\n"));
334 light::LightColorValues color = obj->current_values;
335 float brightness, r, g,
b, w;
336 color.as_brightness(&brightness);
337 color.as_rgbw(&r, &g, &b, &w);
340 stream->print(ESPHOME_F(
"\",channel=\"brightness\"} "));
341 stream->print(brightness);
342 stream->print(ESPHOME_F(
"\n"));
346 stream->print(ESPHOME_F(
"\",channel=\"r\"} "));
348 stream->print(ESPHOME_F(
"\n"));
350 stream->print(ESPHOME_F(
"\",channel=\"g\"} "));
352 stream->print(ESPHOME_F(
"\n"));
354 stream->print(ESPHOME_F(
"\",channel=\"b\"} "));
356 stream->print(ESPHOME_F(
"\n"));
360 stream->print(ESPHOME_F(
"\",channel=\"w\"} "));
362 stream->print(ESPHOME_F(
"\n"));
365 if (!obj->get_effects().empty()) {
367 StringRef effect = obj->get_effect_name();
368 print_metric_labels_(stream, ESPHOME_F(
"esphome_light_effect_active"), obj, area, node, friendly_name);
369 stream->print(ESPHOME_F(
"\",effect=\""));
371 if (effect ==
"None") {
372 stream->print(ESPHOME_F(
"None\"} 0\n"));
375 stream->print(effect.c_str());
376 stream->print(ESPHOME_F(
"\"} 1\n"));
384 stream->print(ESPHOME_F(
"#TYPE esphome_cover_value gauge\n"));
385 stream->print(ESPHOME_F(
"#TYPE esphome_cover_failed gauge\n"));
388 std::string &friendly_name) {
389 if (obj->is_internal() && !this->include_internal_)
391 if (!std::isnan(obj->position)) {
393 stream->print(ESPHOME_F(
"esphome_cover_failed{id=\""));
398 stream->print(ESPHOME_F(
"\",name=\""));
400 stream->print(ESPHOME_F(
"\"} 0\n"));
402 stream->print(ESPHOME_F(
"esphome_cover_value{id=\""));
407 stream->print(ESPHOME_F(
"\",name=\""));
409 stream->print(ESPHOME_F(
"\"} "));
410 stream->print(obj->position);
411 stream->print(ESPHOME_F(
"\n"));
412 if (obj->get_traits().get_supports_tilt()) {
413 stream->print(ESPHOME_F(
"esphome_cover_tilt{id=\""));
418 stream->print(ESPHOME_F(
"\",name=\""));
420 stream->print(ESPHOME_F(
"\"} "));
421 stream->print(obj->tilt);
422 stream->print(ESPHOME_F(
"\n"));
426 stream->print(ESPHOME_F(
"esphome_cover_failed{id=\""));
431 stream->print(ESPHOME_F(
"\",name=\""));
433 stream->print(ESPHOME_F(
"\"} 1\n"));
440 stream->print(ESPHOME_F(
"#TYPE esphome_switch_value gauge\n"));
441 stream->print(ESPHOME_F(
"#TYPE esphome_switch_failed gauge\n"));
444 std::string &node, std::string &friendly_name) {
445 if (obj->is_internal() && !this->include_internal_)
447 stream->print(ESPHOME_F(
"esphome_switch_failed{id=\""));
452 stream->print(ESPHOME_F(
"\",name=\""));
454 stream->print(ESPHOME_F(
"\"} 0\n"));
456 stream->print(ESPHOME_F(
"esphome_switch_value{id=\""));
461 stream->print(ESPHOME_F(
"\",name=\""));
463 stream->print(ESPHOME_F(
"\"} "));
464 stream->print(obj->state);
465 stream->print(ESPHOME_F(
"\n"));
471 stream->print(ESPHOME_F(
"#TYPE esphome_lock_value gauge\n"));
472 stream->print(ESPHOME_F(
"#TYPE esphome_lock_failed gauge\n"));
475 std::string &friendly_name) {
476 if (obj->is_internal() && !this->include_internal_)
478 stream->print(ESPHOME_F(
"esphome_lock_failed{id=\""));
483 stream->print(ESPHOME_F(
"\",name=\""));
485 stream->print(ESPHOME_F(
"\"} 0\n"));
487 stream->print(ESPHOME_F(
"esphome_lock_value{id=\""));
492 stream->print(ESPHOME_F(
"\",name=\""));
494 stream->print(ESPHOME_F(
"\"} "));
495 stream->print(obj->state);
496 stream->print(ESPHOME_F(
"\n"));
501#ifdef USE_TEXT_SENSOR
503 stream->print(ESPHOME_F(
"#TYPE esphome_text_sensor_value gauge\n"));
504 stream->print(ESPHOME_F(
"#TYPE esphome_text_sensor_failed gauge\n"));
507 std::string &node, std::string &friendly_name) {
508 if (obj->is_internal() && !this->include_internal_)
510 if (obj->has_state()) {
512 stream->print(ESPHOME_F(
"esphome_text_sensor_failed{id=\""));
517 stream->print(ESPHOME_F(
"\",name=\""));
519 stream->print(ESPHOME_F(
"\"} 0\n"));
521 stream->print(ESPHOME_F(
"esphome_text_sensor_value{id=\""));
526 stream->print(ESPHOME_F(
"\",name=\""));
528 stream->print(ESPHOME_F(
"\",value=\""));
529 stream->print(obj->state.c_str());
530 stream->print(ESPHOME_F(
"\"} "));
531 stream->print(ESPHOME_F(
"1.0"));
532 stream->print(ESPHOME_F(
"\n"));
535 stream->print(ESPHOME_F(
"esphome_text_sensor_failed{id=\""));
540 stream->print(ESPHOME_F(
"\",name=\""));
542 stream->print(ESPHOME_F(
"\"} 1\n"));
550 stream->print(ESPHOME_F(
"#TYPE esphome_text_value gauge\n"));
551 stream->print(ESPHOME_F(
"#TYPE esphome_text_failed gauge\n"));
554 std::string &friendly_name) {
555 if (obj->is_internal() && !this->include_internal_)
557 if (obj->has_state()) {
559 stream->print(ESPHOME_F(
"esphome_text_failed{id=\""));
564 stream->print(ESPHOME_F(
"\",name=\""));
566 stream->print(ESPHOME_F(
"\"} 0\n"));
568 stream->print(ESPHOME_F(
"esphome_text_value{id=\""));
573 stream->print(ESPHOME_F(
"\",name=\""));
575 stream->print(ESPHOME_F(
"\",value=\""));
576 stream->print(obj->state.c_str());
577 stream->print(ESPHOME_F(
"\"} "));
578 stream->print(ESPHOME_F(
"1.0"));
579 stream->print(ESPHOME_F(
"\n"));
582 stream->print(ESPHOME_F(
"esphome_text_failed{id=\""));
587 stream->print(ESPHOME_F(
"\",name=\""));
589 stream->print(ESPHOME_F(
"\"} 1\n"));
597 stream->print(ESPHOME_F(
"#TYPE esphome_event_value gauge\n"));
598 stream->print(ESPHOME_F(
"#TYPE esphome_event_failed gauge\n"));
601 std::string &friendly_name) {
602 if (obj->is_internal() && !this->include_internal_)
604 if (obj->has_event()) {
606 stream->print(ESPHOME_F(
"esphome_event_failed{id=\""));
611 stream->print(ESPHOME_F(
"\",name=\""));
613 stream->print(ESPHOME_F(
"\"} 0\n"));
615 stream->print(ESPHOME_F(
"esphome_event_value{id=\""));
620 stream->print(ESPHOME_F(
"\",name=\""));
622 stream->print(ESPHOME_F(
"\",last_event_type=\""));
624 stream->print(obj->get_last_event_type().c_str());
625 stream->print(ESPHOME_F(
"\"} "));
626 stream->print(ESPHOME_F(
"1.0"));
627 stream->print(ESPHOME_F(
"\n"));
630 stream->print(ESPHOME_F(
"esphome_event_failed{id=\""));
635 stream->print(ESPHOME_F(
"\",name=\""));
637 stream->print(ESPHOME_F(
"\"} 1\n"));
645 stream->print(ESPHOME_F(
"#TYPE esphome_number_value gauge\n"));
646 stream->print(ESPHOME_F(
"#TYPE esphome_number_failed gauge\n"));
649 std::string &node, std::string &friendly_name) {
650 if (obj->is_internal() && !this->include_internal_)
652 if (!std::isnan(obj->state)) {
654 stream->print(ESPHOME_F(
"esphome_number_failed{id=\""));
659 stream->print(ESPHOME_F(
"\",name=\""));
661 stream->print(ESPHOME_F(
"\"} 0\n"));
663 stream->print(ESPHOME_F(
"esphome_number_value{id=\""));
668 stream->print(ESPHOME_F(
"\",name=\""));
670 stream->print(ESPHOME_F(
"\"} "));
671 stream->print(obj->state);
672 stream->print(ESPHOME_F(
"\n"));
675 stream->print(ESPHOME_F(
"esphome_number_failed{id=\""));
680 stream->print(ESPHOME_F(
"\",name=\""));
682 stream->print(ESPHOME_F(
"\"} 1\n"));
689 stream->print(ESPHOME_F(
"#TYPE esphome_select_value gauge\n"));
690 stream->print(ESPHOME_F(
"#TYPE esphome_select_failed gauge\n"));
693 std::string &node, std::string &friendly_name) {
694 if (obj->is_internal() && !this->include_internal_)
696 if (obj->has_state()) {
698 stream->print(ESPHOME_F(
"esphome_select_failed{id=\""));
703 stream->print(ESPHOME_F(
"\",name=\""));
705 stream->print(ESPHOME_F(
"\"} 0\n"));
707 stream->print(ESPHOME_F(
"esphome_select_value{id=\""));
712 stream->print(ESPHOME_F(
"\",name=\""));
714 stream->print(ESPHOME_F(
"\",value=\""));
716 stream->print(obj->current_option().c_str());
717 stream->print(ESPHOME_F(
"\"} "));
718 stream->print(ESPHOME_F(
"1.0"));
719 stream->print(ESPHOME_F(
"\n"));
722 stream->print(ESPHOME_F(
"esphome_select_failed{id=\""));
727 stream->print(ESPHOME_F(
"\",name=\""));
729 stream->print(ESPHOME_F(
"\"} 1\n"));
734#ifdef USE_MEDIA_PLAYER
736 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_state_value gauge\n"));
737 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_volume gauge\n"));
738 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_is_muted gauge\n"));
739 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_failed gauge\n"));
742 std::string &area, std::string &node, std::string &friendly_name) {
743 if (obj->is_internal() && !this->include_internal_)
745 stream->print(ESPHOME_F(
"esphome_media_player_failed{id=\""));
750 stream->print(ESPHOME_F(
"\",name=\""));
752 stream->print(ESPHOME_F(
"\"} 0\n"));
754 stream->print(ESPHOME_F(
"esphome_media_player_state_value{id=\""));
759 stream->print(ESPHOME_F(
"\",name=\""));
761 stream->print(ESPHOME_F(
"\",value=\""));
763 stream->print(ESPHOME_F(
"\"} "));
764 stream->print(ESPHOME_F(
"1.0"));
765 stream->print(ESPHOME_F(
"\n"));
766 stream->print(ESPHOME_F(
"esphome_media_player_volume{id=\""));
771 stream->print(ESPHOME_F(
"\",name=\""));
773 stream->print(ESPHOME_F(
"\"} "));
774 stream->print(obj->volume);
775 stream->print(ESPHOME_F(
"\n"));
776 stream->print(ESPHOME_F(
"esphome_media_player_is_muted{id=\""));
781 stream->print(ESPHOME_F(
"\",name=\""));
783 stream->print(ESPHOME_F(
"\"} "));
784 if (obj->is_muted()) {
785 stream->print(ESPHOME_F(
"1.0"));
787 stream->print(ESPHOME_F(
"0.0"));
789 stream->print(ESPHOME_F(
"\n"));
795 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_state gauge\n"));
796 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_info gauge\n"));
797 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_failed gauge\n"));
803 stream->print(
"unknown");
806 stream->print(
"none");
809 stream->print(
"available");
812 stream->print(
"installing");
815 stream->print(
"invalid");
821 std::string &node, std::string &friendly_name) {
822 if (obj->is_internal() && !this->include_internal_)
824 if (obj->has_state()) {
826 stream->print(ESPHOME_F(
"esphome_update_entity_failed{id=\""));
831 stream->print(ESPHOME_F(
"\",name=\""));
833 stream->print(ESPHOME_F(
"\"} 0\n"));
835 stream->print(ESPHOME_F(
"esphome_update_entity_state{id=\""));
840 stream->print(ESPHOME_F(
"\",name=\""));
842 stream->print(ESPHOME_F(
"\",value=\""));
844 stream->print(ESPHOME_F(
"\"} "));
845 stream->print(ESPHOME_F(
"1.0"));
846 stream->print(ESPHOME_F(
"\n"));
848 stream->print(ESPHOME_F(
"esphome_update_entity_info{id=\""));
853 stream->print(ESPHOME_F(
"\",name=\""));
855 stream->print(ESPHOME_F(
"\",current_version=\""));
856 stream->print(obj->update_info.current_version.c_str());
857 stream->print(ESPHOME_F(
"\",latest_version=\""));
858 stream->print(obj->update_info.latest_version.c_str());
859 stream->print(ESPHOME_F(
"\",title=\""));
860 stream->print(obj->update_info.title.c_str());
861 stream->print(ESPHOME_F(
"\"} "));
862 stream->print(ESPHOME_F(
"1.0"));
863 stream->print(ESPHOME_F(
"\n"));
866 stream->print(ESPHOME_F(
"esphome_update_entity_failed{id=\""));
871 stream->print(ESPHOME_F(
"\",name=\""));
873 stream->print(ESPHOME_F(
"\"} 1\n"));
880 stream->print(ESPHOME_F(
"#TYPE esphome_valve_operation gauge\n"));
881 stream->print(ESPHOME_F(
"#TYPE esphome_valve_failed gauge\n"));
882 stream->print(ESPHOME_F(
"#TYPE esphome_valve_position gauge\n"));
886 std::string &friendly_name) {
887 if (obj->is_internal() && !this->include_internal_)
889 stream->print(ESPHOME_F(
"esphome_valve_failed{id=\""));
894 stream->print(ESPHOME_F(
"\",name=\""));
896 stream->print(ESPHOME_F(
"\"} 0\n"));
898 stream->print(ESPHOME_F(
"esphome_valve_operation{id=\""));
903 stream->print(ESPHOME_F(
"\",name=\""));
905 stream->print(ESPHOME_F(
"\",operation=\""));
906#ifdef USE_STORE_LOG_STR_IN_FLASH
911 stream->print(ESPHOME_F(
"\"} "));
912 stream->print(ESPHOME_F(
"1.0"));
913 stream->print(ESPHOME_F(
"\n"));
915 if (obj->get_traits().get_supports_position()) {
916 stream->print(ESPHOME_F(
"esphome_valve_position{id=\""));
921 stream->print(ESPHOME_F(
"\",name=\""));
923 stream->print(ESPHOME_F(
"\"} "));
924 stream->print(obj->position);
925 stream->print(ESPHOME_F(
"\n"));
932 stream->print(ESPHOME_F(
"#TYPE esphome_climate_setting gauge\n"));
933 stream->print(ESPHOME_F(
"#TYPE esphome_climate_value gauge\n"));
934 stream->print(ESPHOME_F(
"#TYPE esphome_climate_failed gauge\n"));
938 std::string &node, std::string &friendly_name, std::string &setting,
939 const LogString *setting_value) {
940 stream->print(ESPHOME_F(
"esphome_climate_setting{id=\""));
945 stream->print(ESPHOME_F(
"\",name=\""));
947 stream->print(ESPHOME_F(
"\",category=\""));
948 stream->print(setting.c_str());
949 stream->print(ESPHOME_F(
"\",setting_value=\""));
950 stream->print(LOG_STR_ARG(setting_value));
951 stream->print(ESPHOME_F(
"\"} "));
952 stream->print(ESPHOME_F(
"1.0"));
953 stream->print(ESPHOME_F(
"\n"));
957 std::string &node, std::string &friendly_name, std::string &category,
958 const char *climate_value) {
959 stream->print(ESPHOME_F(
"esphome_climate_value{id=\""));
964 stream->print(ESPHOME_F(
"\",name=\""));
966 stream->print(ESPHOME_F(
"\",category=\""));
967 stream->print(category.c_str());
968 stream->print(ESPHOME_F(
"\"} "));
969 stream->print(climate_value);
970 stream->print(ESPHOME_F(
"\n"));
974 std::string &node, std::string &friendly_name, std::string &category,
975 bool is_failed_value) {
976 stream->print(ESPHOME_F(
"esphome_climate_failed{id=\""));
981 stream->print(ESPHOME_F(
"\",name=\""));
983 stream->print(ESPHOME_F(
"\",category=\""));
984 stream->print(category.c_str());
985 stream->print(ESPHOME_F(
"\"} "));
986 if (is_failed_value) {
987 stream->print(ESPHOME_F(
"1.0"));
989 stream->print(ESPHOME_F(
"0.0"));
991 stream->print(ESPHOME_F(
"\n"));
995 std::string &node, std::string &friendly_name) {
996 if (obj->is_internal() && !this->include_internal_)
999 bool any_failures =
false;
1000 std::string climate_mode_category =
"mode";
1002 climate_setting_row_(stream, obj, area, node, friendly_name, climate_mode_category, climate_mode_value);
1003 const auto traits = obj->get_traits();
1005 int8_t target_accuracy = traits.get_target_temperature_accuracy_decimals();
1006 int8_t current_accuracy = traits.get_current_temperature_accuracy_decimals();
1007 char value_buf[VALUE_ACCURACY_MAX_LEN];
1009 std::string max_temp =
"maximum_temperature";
1013 std::string min_temp =
"minimum_temperature";
1018 std::string current_temp =
"current_temperature";
1019 if (std::isnan(obj->current_temperature)) {
1021 any_failures =
true;
1029 std::string current_humidity =
"current_humidity";
1030 if (std::isnan(obj->current_humidity)) {
1032 any_failures =
true;
1035 climate_value_row_(stream, obj, area, node, friendly_name, current_humidity, value_buf);
1041 if (std::isnan(obj->target_humidity)) {
1043 any_failures =
true;
1052 std::string target_temp_low =
"target_temperature_low";
1054 climate_value_row_(stream, obj, area, node, friendly_name, target_temp_low, value_buf);
1055 std::string target_temp_high =
"target_temperature_high";
1057 climate_value_row_(stream, obj, area, node, friendly_name, target_temp_high, value_buf);
1059 std::string target_temp =
"target_temperature";
1064 std::string climate_trait_category =
"action";
1066 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1068 if (traits.get_supports_fan_modes()) {
1069 std::string climate_trait_category =
"fan_mode";
1070 if (obj->fan_mode.has_value()) {
1072 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1073 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
false);
1075 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
true);
1076 any_failures =
true;
1079 if (traits.get_supports_presets()) {
1080 std::string climate_trait_category =
"preset";
1081 if (obj->preset.has_value()) {
1083 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1084 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
false);
1086 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
true);
1087 any_failures =
true;
1090 if (traits.get_supports_swing_modes()) {
1091 std::string climate_trait_category =
"swing_mode";
1093 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1095 std::string all_climate_category =
"all";
1096 climate_failed_row_(stream, obj, area, node, friendly_name, all_climate_category, any_failures);
const StringRef & get_name() const
Get the name of this Application set by pre_setup().
const StringRef & 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().
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)
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.