2#if defined(USE_NETWORK) && !defined(USE_HOST)
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);
115 stream->print(item->second.c_str());
118 char object_id_buf[OBJECT_ID_MAX_LEN];
125 stream->print(item->second.c_str());
133 stream->print(ESPHOME_F(
"\",area=\""));
134 stream->print(area.c_str());
140 stream->print(ESPHOME_F(
"\",node=\""));
141 stream->print(node.c_str());
146 if (!friendly_name.empty()) {
147 stream->print(ESPHOME_F(
"\",friendly_name=\""));
148 stream->print(friendly_name.c_str());
153 std::string &area, std::string &node, std::string &friendly_name) {
154 stream->print(metric_name);
155 stream->print(ESPHOME_F(
"{id=\""));
160 stream->print(ESPHOME_F(
"\",name=\""));
167 stream->print(ESPHOME_F(
"#TYPE esphome_sensor_value gauge\n"));
168 stream->print(ESPHOME_F(
"#TYPE esphome_sensor_failed gauge\n"));
171 std::string &node, std::string &friendly_name) {
172 if (obj->
is_internal() && !this->include_internal_)
174 if (!std::isnan(obj->
state)) {
176 stream->print(ESPHOME_F(
"esphome_sensor_failed{id=\""));
181 stream->print(ESPHOME_F(
"\",name=\""));
183 stream->print(ESPHOME_F(
"\"} 0\n"));
185 stream->print(ESPHOME_F(
"esphome_sensor_value{id=\""));
190 stream->print(ESPHOME_F(
"\",name=\""));
192 stream->print(ESPHOME_F(
"\",unit=\""));
194 stream->print(ESPHOME_F(
"\"} "));
195 char value_buf[VALUE_ACCURACY_MAX_LEN];
197 stream->print(value_buf);
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_)
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"));
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"));
303 stream->print(ESPHOME_F(
"esphome_fan_oscillation{id=\""));
308 stream->print(ESPHOME_F(
"\",name=\""));
310 stream->print(ESPHOME_F(
"\"} "));
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(
"\"} "));
331 stream->print(ESPHOME_F(
"\n"));
334 float brightness, 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"));
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"));
374 stream->print(effect.
c_str());
375 stream->print(ESPHOME_F(
"\"} 1\n"));
383 stream->print(ESPHOME_F(
"#TYPE esphome_cover_value gauge\n"));
384 stream->print(ESPHOME_F(
"#TYPE esphome_cover_failed gauge\n"));
387 std::string &friendly_name) {
388 if (obj->
is_internal() && !this->include_internal_)
392 stream->print(ESPHOME_F(
"esphome_cover_failed{id=\""));
397 stream->print(ESPHOME_F(
"\",name=\""));
399 stream->print(ESPHOME_F(
"\"} 0\n"));
401 stream->print(ESPHOME_F(
"esphome_cover_value{id=\""));
406 stream->print(ESPHOME_F(
"\",name=\""));
408 stream->print(ESPHOME_F(
"\"} "));
410 stream->print(ESPHOME_F(
"\n"));
412 stream->print(ESPHOME_F(
"esphome_cover_tilt{id=\""));
417 stream->print(ESPHOME_F(
"\",name=\""));
419 stream->print(ESPHOME_F(
"\"} "));
420 stream->print(obj->
tilt);
421 stream->print(ESPHOME_F(
"\n"));
425 stream->print(ESPHOME_F(
"esphome_cover_failed{id=\""));
430 stream->print(ESPHOME_F(
"\",name=\""));
432 stream->print(ESPHOME_F(
"\"} 1\n"));
439 stream->print(ESPHOME_F(
"#TYPE esphome_switch_value gauge\n"));
440 stream->print(ESPHOME_F(
"#TYPE esphome_switch_failed gauge\n"));
443 std::string &node, std::string &friendly_name) {
444 if (obj->
is_internal() && !this->include_internal_)
446 stream->print(ESPHOME_F(
"esphome_switch_failed{id=\""));
451 stream->print(ESPHOME_F(
"\",name=\""));
453 stream->print(ESPHOME_F(
"\"} 0\n"));
455 stream->print(ESPHOME_F(
"esphome_switch_value{id=\""));
460 stream->print(ESPHOME_F(
"\",name=\""));
462 stream->print(ESPHOME_F(
"\"} "));
463 stream->print(obj->
state);
464 stream->print(ESPHOME_F(
"\n"));
470 stream->print(ESPHOME_F(
"#TYPE esphome_lock_value gauge\n"));
471 stream->print(ESPHOME_F(
"#TYPE esphome_lock_failed gauge\n"));
474 std::string &friendly_name) {
475 if (obj->
is_internal() && !this->include_internal_)
477 stream->print(ESPHOME_F(
"esphome_lock_failed{id=\""));
482 stream->print(ESPHOME_F(
"\",name=\""));
484 stream->print(ESPHOME_F(
"\"} 0\n"));
486 stream->print(ESPHOME_F(
"esphome_lock_value{id=\""));
491 stream->print(ESPHOME_F(
"\",name=\""));
493 stream->print(ESPHOME_F(
"\"} "));
494 stream->print(obj->
state);
495 stream->print(ESPHOME_F(
"\n"));
500#ifdef USE_TEXT_SENSOR
502 stream->print(ESPHOME_F(
"#TYPE esphome_text_sensor_value gauge\n"));
503 stream->print(ESPHOME_F(
"#TYPE esphome_text_sensor_failed gauge\n"));
506 std::string &node, std::string &friendly_name) {
507 if (obj->
is_internal() && !this->include_internal_)
511 stream->print(ESPHOME_F(
"esphome_text_sensor_failed{id=\""));
516 stream->print(ESPHOME_F(
"\",name=\""));
518 stream->print(ESPHOME_F(
"\"} 0\n"));
520 stream->print(ESPHOME_F(
"esphome_text_sensor_value{id=\""));
525 stream->print(ESPHOME_F(
"\",name=\""));
527 stream->print(ESPHOME_F(
"\",value=\""));
528 stream->print(obj->
state.c_str());
529 stream->print(ESPHOME_F(
"\"} "));
530 stream->print(ESPHOME_F(
"1.0"));
531 stream->print(ESPHOME_F(
"\n"));
534 stream->print(ESPHOME_F(
"esphome_text_sensor_failed{id=\""));
539 stream->print(ESPHOME_F(
"\",name=\""));
541 stream->print(ESPHOME_F(
"\"} 1\n"));
549 stream->print(ESPHOME_F(
"#TYPE esphome_text_value gauge\n"));
550 stream->print(ESPHOME_F(
"#TYPE esphome_text_failed gauge\n"));
553 std::string &friendly_name) {
554 if (obj->
is_internal() && !this->include_internal_)
558 stream->print(ESPHOME_F(
"esphome_text_failed{id=\""));
563 stream->print(ESPHOME_F(
"\",name=\""));
565 stream->print(ESPHOME_F(
"\"} 0\n"));
567 stream->print(ESPHOME_F(
"esphome_text_value{id=\""));
572 stream->print(ESPHOME_F(
"\",name=\""));
574 stream->print(ESPHOME_F(
"\",value=\""));
575 stream->print(obj->
state.c_str());
576 stream->print(ESPHOME_F(
"\"} "));
577 stream->print(ESPHOME_F(
"1.0"));
578 stream->print(ESPHOME_F(
"\n"));
581 stream->print(ESPHOME_F(
"esphome_text_failed{id=\""));
586 stream->print(ESPHOME_F(
"\",name=\""));
588 stream->print(ESPHOME_F(
"\"} 1\n"));
596 stream->print(ESPHOME_F(
"#TYPE esphome_event_value gauge\n"));
597 stream->print(ESPHOME_F(
"#TYPE esphome_event_failed gauge\n"));
600 std::string &friendly_name) {
601 if (obj->
is_internal() && !this->include_internal_)
605 stream->print(ESPHOME_F(
"esphome_event_failed{id=\""));
610 stream->print(ESPHOME_F(
"\",name=\""));
612 stream->print(ESPHOME_F(
"\"} 0\n"));
614 stream->print(ESPHOME_F(
"esphome_event_value{id=\""));
619 stream->print(ESPHOME_F(
"\",name=\""));
621 stream->print(ESPHOME_F(
"\",last_event_type=\""));
624 stream->print(ESPHOME_F(
"\"} "));
625 stream->print(ESPHOME_F(
"1.0"));
626 stream->print(ESPHOME_F(
"\n"));
629 stream->print(ESPHOME_F(
"esphome_event_failed{id=\""));
634 stream->print(ESPHOME_F(
"\",name=\""));
636 stream->print(ESPHOME_F(
"\"} 1\n"));
644 stream->print(ESPHOME_F(
"#TYPE esphome_number_value gauge\n"));
645 stream->print(ESPHOME_F(
"#TYPE esphome_number_failed gauge\n"));
648 std::string &node, std::string &friendly_name) {
649 if (obj->
is_internal() && !this->include_internal_)
651 if (!std::isnan(obj->
state)) {
653 stream->print(ESPHOME_F(
"esphome_number_failed{id=\""));
658 stream->print(ESPHOME_F(
"\",name=\""));
660 stream->print(ESPHOME_F(
"\"} 0\n"));
662 stream->print(ESPHOME_F(
"esphome_number_value{id=\""));
667 stream->print(ESPHOME_F(
"\",name=\""));
669 stream->print(ESPHOME_F(
"\"} "));
670 stream->print(obj->
state);
671 stream->print(ESPHOME_F(
"\n"));
674 stream->print(ESPHOME_F(
"esphome_number_failed{id=\""));
679 stream->print(ESPHOME_F(
"\",name=\""));
681 stream->print(ESPHOME_F(
"\"} 1\n"));
688 stream->print(ESPHOME_F(
"#TYPE esphome_select_value gauge\n"));
689 stream->print(ESPHOME_F(
"#TYPE esphome_select_failed gauge\n"));
692 std::string &node, std::string &friendly_name) {
693 if (obj->
is_internal() && !this->include_internal_)
697 stream->print(ESPHOME_F(
"esphome_select_failed{id=\""));
702 stream->print(ESPHOME_F(
"\",name=\""));
704 stream->print(ESPHOME_F(
"\"} 0\n"));
706 stream->print(ESPHOME_F(
"esphome_select_value{id=\""));
711 stream->print(ESPHOME_F(
"\",name=\""));
713 stream->print(ESPHOME_F(
"\",value=\""));
716 stream->print(ESPHOME_F(
"\"} "));
717 stream->print(ESPHOME_F(
"1.0"));
718 stream->print(ESPHOME_F(
"\n"));
721 stream->print(ESPHOME_F(
"esphome_select_failed{id=\""));
726 stream->print(ESPHOME_F(
"\",name=\""));
728 stream->print(ESPHOME_F(
"\"} 1\n"));
733#ifdef USE_MEDIA_PLAYER
735 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_state_value gauge\n"));
736 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_volume gauge\n"));
737 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_is_muted gauge\n"));
738 stream->print(ESPHOME_F(
"#TYPE esphome_media_player_failed gauge\n"));
741 std::string &area, std::string &node, std::string &friendly_name) {
742 if (obj->
is_internal() && !this->include_internal_)
744 stream->print(ESPHOME_F(
"esphome_media_player_failed{id=\""));
749 stream->print(ESPHOME_F(
"\",name=\""));
751 stream->print(ESPHOME_F(
"\"} 0\n"));
753 stream->print(ESPHOME_F(
"esphome_media_player_state_value{id=\""));
758 stream->print(ESPHOME_F(
"\",name=\""));
760 stream->print(ESPHOME_F(
"\",value=\""));
762 stream->print(ESPHOME_F(
"\"} "));
763 stream->print(ESPHOME_F(
"1.0"));
764 stream->print(ESPHOME_F(
"\n"));
765 stream->print(ESPHOME_F(
"esphome_media_player_volume{id=\""));
770 stream->print(ESPHOME_F(
"\",name=\""));
772 stream->print(ESPHOME_F(
"\"} "));
773 stream->print(obj->
volume);
774 stream->print(ESPHOME_F(
"\n"));
775 stream->print(ESPHOME_F(
"esphome_media_player_is_muted{id=\""));
780 stream->print(ESPHOME_F(
"\",name=\""));
782 stream->print(ESPHOME_F(
"\"} "));
784 stream->print(ESPHOME_F(
"1.0"));
786 stream->print(ESPHOME_F(
"0.0"));
788 stream->print(ESPHOME_F(
"\n"));
794 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_state gauge\n"));
795 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_info gauge\n"));
796 stream->print(ESPHOME_F(
"#TYPE esphome_update_entity_failed gauge\n"));
802 stream->print(
"unknown");
805 stream->print(
"none");
808 stream->print(
"available");
811 stream->print(
"installing");
814 stream->print(
"invalid");
820 std::string &node, std::string &friendly_name) {
821 if (obj->
is_internal() && !this->include_internal_)
825 stream->print(ESPHOME_F(
"esphome_update_entity_failed{id=\""));
830 stream->print(ESPHOME_F(
"\",name=\""));
832 stream->print(ESPHOME_F(
"\"} 0\n"));
834 stream->print(ESPHOME_F(
"esphome_update_entity_state{id=\""));
839 stream->print(ESPHOME_F(
"\",name=\""));
841 stream->print(ESPHOME_F(
"\",value=\""));
843 stream->print(ESPHOME_F(
"\"} "));
844 stream->print(ESPHOME_F(
"1.0"));
845 stream->print(ESPHOME_F(
"\n"));
847 stream->print(ESPHOME_F(
"esphome_update_entity_info{id=\""));
852 stream->print(ESPHOME_F(
"\",name=\""));
854 stream->print(ESPHOME_F(
"\",current_version=\""));
856 stream->print(ESPHOME_F(
"\",latest_version=\""));
858 stream->print(ESPHOME_F(
"\",title=\""));
860 stream->print(ESPHOME_F(
"\"} "));
861 stream->print(ESPHOME_F(
"1.0"));
862 stream->print(ESPHOME_F(
"\n"));
865 stream->print(ESPHOME_F(
"esphome_update_entity_failed{id=\""));
870 stream->print(ESPHOME_F(
"\",name=\""));
872 stream->print(ESPHOME_F(
"\"} 1\n"));
879 stream->print(ESPHOME_F(
"#TYPE esphome_valve_operation gauge\n"));
880 stream->print(ESPHOME_F(
"#TYPE esphome_valve_failed gauge\n"));
881 stream->print(ESPHOME_F(
"#TYPE esphome_valve_position gauge\n"));
885 std::string &friendly_name) {
886 if (obj->
is_internal() && !this->include_internal_)
888 stream->print(ESPHOME_F(
"esphome_valve_failed{id=\""));
893 stream->print(ESPHOME_F(
"\",name=\""));
895 stream->print(ESPHOME_F(
"\"} 0\n"));
897 stream->print(ESPHOME_F(
"esphome_valve_operation{id=\""));
902 stream->print(ESPHOME_F(
"\",name=\""));
904 stream->print(ESPHOME_F(
"\",operation=\""));
906 stream->print(ESPHOME_F(
"\"} "));
907 stream->print(ESPHOME_F(
"1.0"));
908 stream->print(ESPHOME_F(
"\n"));
911 stream->print(ESPHOME_F(
"esphome_valve_position{id=\""));
916 stream->print(ESPHOME_F(
"\",name=\""));
918 stream->print(ESPHOME_F(
"\"} "));
920 stream->print(ESPHOME_F(
"\n"));
927 stream->print(ESPHOME_F(
"#TYPE esphome_climate_setting gauge\n"));
928 stream->print(ESPHOME_F(
"#TYPE esphome_climate_value gauge\n"));
929 stream->print(ESPHOME_F(
"#TYPE esphome_climate_failed gauge\n"));
933 std::string &node, std::string &friendly_name, std::string &setting,
934 const LogString *setting_value) {
935 stream->print(ESPHOME_F(
"esphome_climate_setting{id=\""));
940 stream->print(ESPHOME_F(
"\",name=\""));
942 stream->print(ESPHOME_F(
"\",category=\""));
943 stream->print(setting.c_str());
944 stream->print(ESPHOME_F(
"\",setting_value=\""));
946 stream->print((
const __FlashStringHelper *) setting_value);
948 stream->print(LOG_STR_ARG(setting_value));
950 stream->print(ESPHOME_F(
"\"} "));
951 stream->print(ESPHOME_F(
"1.0"));
952 stream->print(ESPHOME_F(
"\n"));
956 std::string &node, std::string &friendly_name, std::string &category,
957 const char *climate_value) {
958 stream->print(ESPHOME_F(
"esphome_climate_value{id=\""));
963 stream->print(ESPHOME_F(
"\",name=\""));
965 stream->print(ESPHOME_F(
"\",category=\""));
966 stream->print(category.c_str());
967 stream->print(ESPHOME_F(
"\"} "));
968 stream->print(climate_value);
969 stream->print(ESPHOME_F(
"\n"));
973 std::string &node, std::string &friendly_name, std::string &category,
974 bool is_failed_value) {
975 stream->print(ESPHOME_F(
"esphome_climate_failed{id=\""));
980 stream->print(ESPHOME_F(
"\",name=\""));
982 stream->print(ESPHOME_F(
"\",category=\""));
983 stream->print(category.c_str());
984 stream->print(ESPHOME_F(
"\"} "));
985 if (is_failed_value) {
986 stream->print(ESPHOME_F(
"1.0"));
988 stream->print(ESPHOME_F(
"0.0"));
990 stream->print(ESPHOME_F(
"\n"));
994 std::string &node, std::string &friendly_name) {
995 if (obj->
is_internal() && !this->include_internal_)
998 bool any_failures =
false;
999 std::string climate_mode_category =
"mode";
1001 climate_setting_row_(stream, obj, area, node, friendly_name, climate_mode_category, climate_mode_value);
1005 int8_t current_accuracy = traits.get_current_temperature_accuracy_decimals();
1006 char value_buf[VALUE_ACCURACY_MAX_LEN];
1008 std::string max_temp =
"maximum_temperature";
1012 std::string min_temp =
"minimum_temperature";
1017 std::string current_temp =
"current_temperature";
1020 any_failures =
true;
1028 std::string current_humidity =
"current_humidity";
1031 any_failures =
true;
1034 climate_value_row_(stream, obj, area, node, friendly_name, current_humidity, value_buf);
1042 any_failures =
true;
1051 std::string target_temp_low =
"target_temperature_low";
1053 climate_value_row_(stream, obj, area, node, friendly_name, target_temp_low, value_buf);
1054 std::string target_temp_high =
"target_temperature_high";
1056 climate_value_row_(stream, obj, area, node, friendly_name, target_temp_high, value_buf);
1058 std::string target_temp =
"target_temperature";
1063 std::string climate_trait_category =
"action";
1065 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1067 if (traits.get_supports_fan_modes()) {
1068 std::string climate_trait_category =
"fan_mode";
1071 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1072 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
false);
1074 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
true);
1075 any_failures =
true;
1078 if (traits.get_supports_presets()) {
1079 std::string climate_trait_category =
"preset";
1080 if (obj->
preset.has_value()) {
1082 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1083 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
false);
1085 climate_failed_row_(stream, obj, area, node, friendly_name, climate_trait_category,
true);
1086 any_failures =
true;
1089 if (traits.get_supports_swing_modes()) {
1090 std::string climate_trait_category =
"swing_mode";
1092 climate_setting_row_(stream, obj, area, node, friendly_name, climate_trait_category, climate_trait_value);
1094 std::string all_climate_category =
"all";
1095 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().
const ProgmemStringRef & get_name_progmem() const
The name as stored, for consumers that read flash themselves (e.g. API progmem fields).
StringRef get_unit_of_measurement_ref() const
StringRef get_object_id_to(std::span< char, OBJECT_ID_MAX_LEN > buf) const
Get object_id with zero heap allocation For static case: returns StringRef to internal storage (buffe...
constexpr const char * progmem_ptr() const
StringRef is a reference to a string owned by something else.
constexpr const char * c_str() const
Base class for all binary_sensor-type classes.
bool state
The current state of this binary sensor. Also used as the backing storage for StatefulEntityBase.
ClimateDevice - This is the base class for all climate integrations.
ClimateMode mode
The active mode of the climate device.
optional< ClimateFanMode > fan_mode
The active fan mode of the climate device.
ClimateTraits get_traits()
Get the traits of this climate device with all overrides applied.
float target_temperature
The target temperature of the climate device.
float current_humidity
The current humidity of the climate device, as reported from the integration.
ClimateSwingMode swing_mode
The active swing mode of the climate device.
float target_temperature_low
The minimum target temperature of the climate device, for climate devices with split target temperatu...
float current_temperature
The current temperature of the climate device, as reported from the integration.
ClimateAction action
The active state of the climate device.
optional< ClimatePreset > preset
The active preset of the climate device.
float target_humidity
The target humidity of the climate device.
float target_temperature_high
The maximum target temperature of the climate device, for climate devices with split target temperatu...
int8_t get_target_temperature_accuracy_decimals() const
Base class for all cover devices.
float tilt
The current tilt value of the cover from 0.0 to 1.0.
float position
The position of the cover from 0.0 (fully closed) to 1.0 (fully open).
virtual CoverTraits get_traits()=0
bool get_supports_tilt() const
bool has_event() const
Check if an event has been triggered.
StringRef get_last_event_type() const
Return the last triggered event type, or empty StringRef if no event triggered yet.
virtual FanTraits get_traits()=0
bool oscillating
The current oscillation state of the fan.
bool state
The current on/off state of the fan.
int speed
The current fan speed level.
bool supports_speed() const
Return if this fan supports speed modes.
bool supports_oscillation() const
Return if this fan supports oscillation.
This class represents the color state for a light object.
void as_rgbw(float *red, float *green, float *blue, float *white) const
Convert these light color values to an RGBW representation and write them to red, green,...
bool is_on() const
Get the binary true/false state of these light color values.
void as_brightness(float *brightness) const
Convert these light color values to a brightness-only representation and write them to brightness.
This class represents the communication layer between the front-end MQTT layer and the hardware outpu...
StringRef get_effect_name()
Return the name of the current effect, or if no effect is active "None".
const LightColorValues & get_reported_values() const
The values reported to the frontend: current_values while a light publishes intermediate states on an...
const ConstVector< LightEffect * > & get_effects() const
Get all effects for this light state.
LightColorValues current_values
The current values of the light as outputted to the light.
bool supports_color_capability(ColorCapability color_capability) const
Base class for all locks.
LockState state
The current reported state of the lock.
Base-class for all numbers.
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 print_relabel_name_(AsyncResponseStream *stream, EntityBase *obj)
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 print_relabel_id_(AsyncResponseStream *stream, EntityBase *obj)
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 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.
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 print_metric_labels_(AsyncResponseStream *stream, ProgmemStr 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 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.
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.
Base-class for all selects.
StringRef current_option() const
Return the currently selected option, or empty StringRef if no state.
Base-class for all sensors.
float state
This member variable stores the last state that has passed through all filters.
int8_t get_accuracy_decimals()
Get the accuracy in decimals, using the manual override if set.
Base class for all switches.
bool state
The current reported state of the binary sensor.
Base-class for all text inputs.
const UpdateState & state
const UpdateInfo & update_info
Base class for all valve devices.
float position
The position of the valve from 0.0 (fully closed) to 1.0 (fully open).
ValveOperation current_operation
The current operation of the valve (idle, opening, closing).
virtual ValveTraits get_traits()=0
bool get_supports_position() const
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.
const __FlashStringHelper * ProgmemStr
std::string current_version
std::string latest_version