esphome 2025.9.2__py3-none-any.whl → 2025.10.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. esphome/__main__.py +87 -31
  2. esphome/address_cache.py +142 -0
  3. esphome/automation.py +130 -32
  4. esphome/build_gen/platformio.py +1 -3
  5. esphome/codegen.py +1 -0
  6. esphome/components/animation/animation.cpp +2 -2
  7. esphome/components/api/__init__.py +167 -3
  8. esphome/components/api/api_connection.cpp +84 -41
  9. esphome/components/api/api_connection.h +22 -16
  10. esphome/components/api/api_frame_helper.cpp +33 -19
  11. esphome/components/api/api_frame_helper.h +19 -4
  12. esphome/components/api/api_frame_helper_noise.cpp +41 -53
  13. esphome/components/api/api_frame_helper_noise.h +1 -1
  14. esphome/components/api/api_frame_helper_plaintext.cpp +22 -31
  15. esphome/components/api/api_frame_helper_plaintext.h +1 -1
  16. esphome/components/api/api_pb2.cpp +189 -15
  17. esphome/components/api/api_pb2.h +132 -20
  18. esphome/components/api/api_pb2_dump.cpp +97 -9
  19. esphome/components/api/api_pb2_service.cpp +118 -160
  20. esphome/components/api/api_pb2_service.h +31 -3
  21. esphome/components/api/api_server.cpp +78 -11
  22. esphome/components/api/api_server.h +32 -4
  23. esphome/components/api/custom_api_device.h +8 -8
  24. esphome/components/api/homeassistant_service.h +123 -6
  25. esphome/components/api/proto.h +6 -2
  26. esphome/components/api/user_services.h +2 -2
  27. esphome/components/as7341/sensor.py +1 -1
  28. esphome/components/audio/__init__.py +1 -1
  29. esphome/components/audio/audio.cpp +1 -1
  30. esphome/components/audio/audio_decoder.cpp +9 -9
  31. esphome/components/bl0906/bl0906.cpp +2 -2
  32. esphome/components/bl0942/bl0942.cpp +2 -2
  33. esphome/components/ble_client/__init__.py +1 -1
  34. esphome/components/bluetooth_proxy/__init__.py +4 -30
  35. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +11 -4
  36. esphome/components/bluetooth_proxy/bluetooth_connection.h +2 -2
  37. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +2 -2
  38. esphome/components/camera_encoder/__init__.py +2 -4
  39. esphome/components/camera_encoder/esp32_camera_jpeg_encoder.cpp +4 -2
  40. esphome/components/camera_encoder/esp32_camera_jpeg_encoder.h +3 -1
  41. esphome/components/canbus/canbus.cpp +7 -5
  42. esphome/components/canbus/canbus.h +4 -4
  43. esphome/components/captive_portal/__init__.py +18 -1
  44. esphome/components/captive_portal/captive_portal.cpp +40 -46
  45. esphome/components/captive_portal/captive_portal.h +20 -22
  46. esphome/components/captive_portal/dns_server_esp32_idf.cpp +205 -0
  47. esphome/components/captive_portal/dns_server_esp32_idf.h +27 -0
  48. esphome/components/ccs811/ccs811.cpp +1 -1
  49. esphome/components/climate/climate.cpp +10 -7
  50. esphome/components/cm1106/cm1106.cpp +1 -1
  51. esphome/components/copy/lock/copy_lock.cpp +1 -1
  52. esphome/components/cover/cover.cpp +1 -0
  53. esphome/components/daikin_arc/daikin_arc.cpp +19 -12
  54. esphome/components/deep_sleep/__init__.py +9 -2
  55. esphome/components/deep_sleep/deep_sleep_component.h +11 -9
  56. esphome/components/deep_sleep/deep_sleep_esp32.cpp +51 -27
  57. esphome/components/ektf2232/touchscreen/__init__.py +8 -5
  58. esphome/components/ektf2232/touchscreen/ektf2232.cpp +4 -4
  59. esphome/components/ektf2232/touchscreen/ektf2232.h +2 -2
  60. esphome/components/epaper_spi/__init__.py +1 -0
  61. esphome/components/epaper_spi/display.py +80 -0
  62. esphome/components/epaper_spi/epaper_spi.cpp +227 -0
  63. esphome/components/epaper_spi/epaper_spi.h +93 -0
  64. esphome/components/epaper_spi/epaper_spi_model_7p3in_spectra_e6.cpp +42 -0
  65. esphome/components/epaper_spi/epaper_spi_model_7p3in_spectra_e6.h +45 -0
  66. esphome/components/epaper_spi/epaper_spi_spectra_e6.cpp +135 -0
  67. esphome/components/epaper_spi/epaper_spi_spectra_e6.h +23 -0
  68. esphome/components/es7210/es7210.cpp +3 -3
  69. esphome/components/esp32/__init__.py +254 -339
  70. esphome/components/esp32/boards.py +81 -0
  71. esphome/components/esp32/preferences.cpp +23 -17
  72. esphome/components/esp32_ble/__init__.py +159 -44
  73. esphome/components/esp32_ble/ble.cpp +47 -3
  74. esphome/components/esp32_ble/ble.h +18 -0
  75. esphome/components/esp32_ble/ble_advertising.cpp +7 -3
  76. esphome/components/esp32_ble/ble_advertising.h +4 -0
  77. esphome/components/esp32_ble/ble_uuid.cpp +16 -42
  78. esphome/components/esp32_ble_beacon/__init__.py +3 -4
  79. esphome/components/esp32_ble_client/ble_client_base.cpp +14 -12
  80. esphome/components/esp32_ble_server/__init__.py +28 -14
  81. esphome/components/esp32_ble_server/ble_characteristic.cpp +67 -57
  82. esphome/components/esp32_ble_server/ble_characteristic.h +27 -16
  83. esphome/components/esp32_ble_server/ble_descriptor.cpp +4 -3
  84. esphome/components/esp32_ble_server/ble_descriptor.h +13 -9
  85. esphome/components/esp32_ble_server/ble_server.cpp +59 -24
  86. esphome/components/esp32_ble_server/ble_server.h +38 -20
  87. esphome/components/esp32_ble_server/ble_server_automations.cpp +49 -33
  88. esphome/components/esp32_ble_server/ble_server_automations.h +39 -24
  89. esphome/components/esp32_ble_tracker/__init__.py +25 -80
  90. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +2 -4
  91. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +0 -3
  92. esphome/components/esp32_camera/__init__.py +1 -3
  93. esphome/components/esp32_can/esp32_can.cpp +22 -4
  94. esphome/components/esp32_can/esp32_can.h +3 -0
  95. esphome/components/esp32_hosted/__init__.py +2 -1
  96. esphome/components/esp32_improv/esp32_improv_component.cpp +102 -44
  97. esphome/components/esp32_improv/esp32_improv_component.h +6 -1
  98. esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -1
  99. esphome/components/esp8266/__init__.py +3 -3
  100. esphome/components/esphome/ota/__init__.py +21 -2
  101. esphome/components/esphome/ota/ota_esphome.cpp +455 -145
  102. esphome/components/esphome/ota/ota_esphome.h +49 -2
  103. esphome/components/ethernet/__init__.py +39 -22
  104. esphome/components/ethernet/ethernet_component.cpp +28 -5
  105. esphome/components/ethernet/ethernet_component.h +5 -1
  106. esphome/components/external_components/__init__.py +8 -6
  107. esphome/components/fingerprint_grow/fingerprint_grow.cpp +1 -1
  108. esphome/components/fingerprint_grow/fingerprint_grow.h +2 -1
  109. esphome/components/font/__init__.py +5 -5
  110. esphome/components/graph/graph.cpp +1 -1
  111. esphome/components/graphical_display_menu/graphical_display_menu.cpp +3 -2
  112. esphome/components/haier/hon_climate.cpp +2 -2
  113. esphome/components/haier/hon_climate.h +1 -1
  114. esphome/components/hdc1080/hdc1080.cpp +42 -34
  115. esphome/components/hdc1080/hdc1080.h +1 -3
  116. esphome/components/homeassistant/number/homeassistant_number.cpp +2 -2
  117. esphome/components/homeassistant/switch/homeassistant_switch.cpp +2 -2
  118. esphome/components/http_request/__init__.py +3 -3
  119. esphome/components/htu21d/htu21d.cpp +13 -18
  120. esphome/components/htu21d/htu21d.h +1 -1
  121. esphome/components/i2s_audio/__init__.py +1 -2
  122. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  123. esphome/components/ili9xxx/ili9xxx_display.cpp +2 -2
  124. esphome/components/improv_serial/improv_serial_component.cpp +12 -15
  125. esphome/components/improv_serial/improv_serial_component.h +6 -8
  126. esphome/components/json/json_util.cpp +35 -43
  127. esphome/components/json/json_util.h +57 -0
  128. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +2 -2
  129. esphome/components/key_collector/key_collector.h +4 -4
  130. esphome/components/libretiny/__init__.py +6 -6
  131. esphome/components/libretiny/preferences.cpp +23 -16
  132. esphome/components/light/light_call.cpp +98 -120
  133. esphome/components/light/light_call.h +17 -7
  134. esphome/components/lm75b/__init__.py +0 -0
  135. esphome/components/lm75b/lm75b.cpp +39 -0
  136. esphome/components/lm75b/lm75b.h +19 -0
  137. esphome/components/lm75b/sensor.py +34 -0
  138. esphome/components/lock/lock.h +12 -6
  139. esphome/components/logger/__init__.py +15 -27
  140. esphome/components/logger/logger.cpp +10 -20
  141. esphome/components/logger/logger.h +105 -62
  142. esphome/components/logger/logger_esp32.cpp +0 -48
  143. esphome/components/logger/logger_zephyr.cpp +2 -3
  144. esphome/components/logger/select/logger_level_select.cpp +6 -7
  145. esphome/components/logger/select/logger_level_select.h +7 -0
  146. esphome/components/ltr501/ltr501.cpp +7 -6
  147. esphome/components/ltr_als_ps/ltr_als_ps.cpp +7 -6
  148. esphome/components/matrix_keypad/matrix_keypad.h +4 -4
  149. esphome/components/max7219digit/max7219digit.cpp +1 -1
  150. esphome/components/mcp2515/mcp2515.cpp +31 -3
  151. esphome/components/mcp2515/mcp2515_defs.h +3 -1
  152. esphome/components/md5/md5.cpp +0 -26
  153. esphome/components/md5/md5.h +10 -20
  154. esphome/components/mdns/__init__.py +19 -6
  155. esphome/components/mdns/mdns_component.cpp +27 -59
  156. esphome/components/mdns/mdns_component.h +23 -10
  157. esphome/components/mdns/mdns_esp32.cpp +7 -7
  158. esphome/components/mdns/mdns_esp8266.cpp +6 -6
  159. esphome/components/mdns/mdns_libretiny.cpp +3 -3
  160. esphome/components/mdns/mdns_rp2040.cpp +3 -3
  161. esphome/components/mipi/__init__.py +1 -5
  162. esphome/components/mipi_spi/display.py +24 -8
  163. esphome/components/mipi_spi/mipi_spi.h +3 -3
  164. esphome/components/mixer/speaker/mixer_speaker.cpp +3 -3
  165. esphome/components/mmc5603/mmc5603.cpp +3 -3
  166. esphome/components/modbus/modbus.cpp +27 -13
  167. esphome/components/modbus/modbus.h +5 -3
  168. esphome/components/modbus/modbus_definitions.h +86 -0
  169. esphome/components/modbus_controller/__init__.py +29 -1
  170. esphome/components/modbus_controller/const.py +4 -0
  171. esphome/components/modbus_controller/modbus_controller.cpp +38 -13
  172. esphome/components/modbus_controller/modbus_controller.h +18 -29
  173. esphome/components/mpr121/mpr121.cpp +41 -42
  174. esphome/components/mpr121/mpr121.h +0 -1
  175. esphome/components/nau7802/nau7802.cpp +2 -2
  176. esphome/components/network/__init__.py +7 -3
  177. esphome/components/nextion/display.py +4 -4
  178. esphome/components/nextion/nextion.cpp +8 -8
  179. esphome/components/number/__init__.py +2 -0
  180. esphome/components/number/number_call.cpp +23 -12
  181. esphome/components/number/number_call.h +5 -0
  182. esphome/components/online_image/bmp_image.cpp +2 -1
  183. esphome/components/online_image/jpeg_image.cpp +4 -2
  184. esphome/components/openthread/openthread.cpp +6 -7
  185. esphome/components/openthread/openthread.h +0 -1
  186. esphome/components/ota/ota_backend.h +1 -0
  187. esphome/components/packages/__init__.py +10 -8
  188. esphome/components/packet_transport/packet_transport.cpp +2 -0
  189. esphome/components/pid/pid_controller.cpp +1 -1
  190. esphome/components/prometheus/prometheus_handler.cpp +239 -239
  191. esphome/components/psram/__init__.py +30 -28
  192. esphome/components/qmc5883l/qmc5883l.cpp +15 -0
  193. esphome/components/qmc5883l/qmc5883l.h +3 -0
  194. esphome/components/qmc5883l/sensor.py +31 -12
  195. esphome/components/remote_base/gobox_protocol.cpp +3 -3
  196. esphome/components/remote_receiver/__init__.py +14 -2
  197. esphome/components/remote_receiver/{remote_receiver_esp8266.cpp → remote_receiver.cpp} +2 -2
  198. esphome/components/remote_receiver/remote_receiver.h +4 -0
  199. esphome/components/remote_receiver/remote_receiver_esp32.cpp +18 -1
  200. esphome/components/remote_transmitter/__init__.py +2 -2
  201. esphome/components/remote_transmitter/remote_transmitter.cpp +103 -0
  202. esphome/components/rp2040/__init__.py +11 -11
  203. esphome/components/rtttl/rtttl.cpp +2 -2
  204. esphome/components/scd30/sensor.py +1 -1
  205. esphome/components/script/__init__.py +1 -1
  206. esphome/components/script/script.h +7 -7
  207. esphome/components/select/select.cpp +5 -4
  208. esphome/components/select/select_call.cpp +1 -1
  209. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  210. esphome/components/sensor/__init__.py +2 -0
  211. esphome/components/sha256/__init__.py +22 -0
  212. esphome/components/sha256/sha256.cpp +116 -0
  213. esphome/components/sha256/sha256.h +60 -0
  214. esphome/components/sim800l/sim800l.cpp +8 -4
  215. esphome/components/socket/lwip_raw_tcp_impl.cpp +34 -6
  216. esphome/components/sonoff_d1/sonoff_d1.cpp +1 -1
  217. esphome/components/spi/__init__.py +0 -3
  218. esphome/components/split_buffer/__init__.py +5 -0
  219. esphome/components/split_buffer/split_buffer.cpp +133 -0
  220. esphome/components/split_buffer/split_buffer.h +40 -0
  221. esphome/components/sps30/sps30.cpp +14 -10
  222. esphome/components/sps30/sps30.h +2 -0
  223. esphome/components/st7567_i2c/st7567_i2c.cpp +3 -1
  224. esphome/components/st7789v/st7789v.cpp +3 -2
  225. esphome/components/statsd/statsd.cpp +1 -1
  226. esphome/components/substitutions/__init__.py +3 -1
  227. esphome/components/substitutions/jinja.py +13 -3
  228. esphome/components/sx126x/__init__.py +16 -0
  229. esphome/components/sx126x/sx126x.cpp +15 -1
  230. esphome/components/sx126x/sx126x.h +9 -1
  231. esphome/components/sx126x/sx126x_reg.h +2 -0
  232. esphome/components/text_sensor/text_sensor.cpp +16 -0
  233. esphome/components/text_sensor/text_sensor.h +3 -10
  234. esphome/components/tormatic/tormatic_cover.cpp +1 -1
  235. esphome/components/tuya/select/tuya_select.cpp +1 -1
  236. esphome/components/tuya/tuya.cpp +29 -4
  237. esphome/components/uart/__init__.py +36 -26
  238. esphome/components/uart/uart.h +6 -0
  239. esphome/components/uart/uart_component.cpp +8 -0
  240. esphome/components/uart/uart_component.h +28 -0
  241. esphome/components/uart/uart_component_esp_idf.cpp +64 -10
  242. esphome/components/uart/uart_component_esp_idf.h +5 -2
  243. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  244. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +1 -1
  245. esphome/components/uponor_smatrix/uponor_smatrix.cpp +3 -3
  246. esphome/components/usb_host/__init__.py +2 -1
  247. esphome/components/usb_host/usb_host.h +82 -13
  248. esphome/components/usb_host/usb_host_client.cpp +180 -24
  249. esphome/components/usb_host/usb_host_component.cpp +1 -1
  250. esphome/components/usb_uart/__init__.py +0 -1
  251. esphome/components/usb_uart/ch34x.cpp +4 -4
  252. esphome/components/usb_uart/cp210x.cpp +3 -3
  253. esphome/components/usb_uart/usb_uart.cpp +88 -32
  254. esphome/components/usb_uart/usb_uart.h +30 -6
  255. esphome/components/valve/valve.cpp +1 -0
  256. esphome/components/veml7700/veml7700.cpp +7 -6
  257. esphome/components/version/version_text_sensor.cpp +2 -1
  258. esphome/components/voice_assistant/voice_assistant.cpp +3 -3
  259. esphome/components/waveshare_epaper/waveshare_epaper.cpp +4 -4
  260. esphome/components/web_server/list_entities.cpp +3 -4
  261. esphome/components/web_server/list_entities.h +8 -10
  262. esphome/components/web_server/ota/__init__.py +1 -1
  263. esphome/components/web_server/ota/ota_web_server.cpp +9 -3
  264. esphome/components/web_server/web_server.cpp +509 -404
  265. esphome/components/web_server/web_server.h +5 -6
  266. esphome/components/web_server/web_server_v1.cpp +21 -19
  267. esphome/components/web_server_base/__init__.py +5 -2
  268. esphome/components/web_server_base/web_server_base.h +27 -7
  269. esphome/components/web_server_idf/__init__.py +1 -1
  270. esphome/components/web_server_idf/multipart.cpp +2 -2
  271. esphome/components/web_server_idf/multipart.h +2 -2
  272. esphome/components/web_server_idf/utils.cpp +2 -2
  273. esphome/components/web_server_idf/utils.h +2 -2
  274. esphome/components/web_server_idf/web_server_idf.cpp +118 -26
  275. esphome/components/web_server_idf/web_server_idf.h +12 -10
  276. esphome/components/wifi/__init__.py +13 -11
  277. esphome/components/wifi/wifi_component.cpp +73 -56
  278. esphome/components/wifi/wifi_component.h +4 -4
  279. esphome/components/wifi/wifi_component_esp8266.cpp +1 -1
  280. esphome/components/wifi/wifi_component_esp_idf.cpp +24 -4
  281. esphome/components/wireguard/__init__.py +1 -1
  282. esphome/components/wts01/__init__.py +0 -0
  283. esphome/components/wts01/sensor.py +41 -0
  284. esphome/components/wts01/wts01.cpp +91 -0
  285. esphome/components/wts01/wts01.h +27 -0
  286. esphome/components/zephyr/__init__.py +5 -5
  287. esphome/components/zwave_proxy/__init__.py +43 -0
  288. esphome/components/zwave_proxy/zwave_proxy.cpp +346 -0
  289. esphome/components/zwave_proxy/zwave_proxy.h +93 -0
  290. esphome/config.py +79 -24
  291. esphome/config_validation.py +13 -15
  292. esphome/const.py +9 -2
  293. esphome/core/__init__.py +31 -22
  294. esphome/core/component.cpp +28 -18
  295. esphome/core/component_iterator.h +2 -1
  296. esphome/core/config.py +15 -15
  297. esphome/core/defines.h +19 -0
  298. esphome/core/hash_base.h +56 -0
  299. esphome/core/helpers.cpp +19 -3
  300. esphome/core/helpers.h +26 -0
  301. esphome/core/scheduler.cpp +5 -21
  302. esphome/core/scheduler.h +19 -8
  303. esphome/core/string_ref.h +1 -1
  304. esphome/core/time.cpp +5 -5
  305. esphome/cpp_generator.py +4 -29
  306. esphome/dashboard/const.py +21 -4
  307. esphome/dashboard/core.py +10 -8
  308. esphome/dashboard/dns.py +15 -0
  309. esphome/dashboard/entries.py +15 -21
  310. esphome/dashboard/models.py +76 -0
  311. esphome/dashboard/settings.py +7 -7
  312. esphome/dashboard/status/mdns.py +46 -2
  313. esphome/dashboard/web_server.py +367 -93
  314. esphome/espota2.py +111 -31
  315. esphome/external_files.py +6 -7
  316. esphome/git.py +8 -0
  317. esphome/helpers.py +124 -77
  318. esphome/loader.py +8 -9
  319. esphome/platformio_api.py +25 -18
  320. esphome/storage_json.py +26 -21
  321. esphome/types.py +30 -2
  322. esphome/util.py +32 -16
  323. esphome/vscode.py +8 -8
  324. esphome/wizard.py +10 -10
  325. esphome/writer.py +50 -15
  326. esphome/yaml_util.py +37 -31
  327. esphome/zeroconf.py +12 -3
  328. {esphome-2025.9.2.dist-info → esphome-2025.10.0b1.dist-info}/METADATA +11 -11
  329. {esphome-2025.9.2.dist-info → esphome-2025.10.0b1.dist-info}/RECORD +333 -313
  330. esphome/components/event_emitter/__init__.py +0 -5
  331. esphome/components/event_emitter/event_emitter.cpp +0 -14
  332. esphome/components/event_emitter/event_emitter.h +0 -63
  333. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -125
  334. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +0 -107
  335. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +0 -110
  336. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -214
  337. esphome/components/uart/uart_component_esp32_arduino.h +0 -60
  338. esphome/components/wifi/wifi_component_esp32_arduino.cpp +0 -860
  339. esphome/core/string_ref.cpp +0 -12
  340. esphome/dashboard/util/file.py +0 -63
  341. {esphome-2025.9.2.dist-info → esphome-2025.10.0b1.dist-info}/WHEEL +0 -0
  342. {esphome-2025.9.2.dist-info → esphome-2025.10.0b1.dist-info}/entry_points.txt +0 -0
  343. {esphome-2025.9.2.dist-info → esphome-2025.10.0b1.dist-info}/licenses/LICENSE +0 -0
  344. {esphome-2025.9.2.dist-info → esphome-2025.10.0b1.dist-info}/top_level.txt +0 -0
@@ -110,21 +110,21 @@ std::string PrometheusHandler::relabel_name_(EntityBase *obj) {
110
110
 
111
111
  void PrometheusHandler::add_area_label_(AsyncResponseStream *stream, std::string &area) {
112
112
  if (!area.empty()) {
113
- stream->print(F("\",area=\""));
113
+ stream->print(ESPHOME_F("\",area=\""));
114
114
  stream->print(area.c_str());
115
115
  }
116
116
  }
117
117
 
118
118
  void PrometheusHandler::add_node_label_(AsyncResponseStream *stream, std::string &node) {
119
119
  if (!node.empty()) {
120
- stream->print(F("\",node=\""));
120
+ stream->print(ESPHOME_F("\",node=\""));
121
121
  stream->print(node.c_str());
122
122
  }
123
123
  }
124
124
 
125
125
  void PrometheusHandler::add_friendly_name_label_(AsyncResponseStream *stream, std::string &friendly_name) {
126
126
  if (!friendly_name.empty()) {
127
- stream->print(F("\",friendly_name=\""));
127
+ stream->print(ESPHOME_F("\",friendly_name=\""));
128
128
  stream->print(friendly_name.c_str());
129
129
  }
130
130
  }
@@ -132,8 +132,8 @@ void PrometheusHandler::add_friendly_name_label_(AsyncResponseStream *stream, st
132
132
  // Type-specific implementation
133
133
  #ifdef USE_SENSOR
134
134
  void PrometheusHandler::sensor_type_(AsyncResponseStream *stream) {
135
- stream->print(F("#TYPE esphome_sensor_value gauge\n"));
136
- stream->print(F("#TYPE esphome_sensor_failed gauge\n"));
135
+ stream->print(ESPHOME_F("#TYPE esphome_sensor_value gauge\n"));
136
+ stream->print(ESPHOME_F("#TYPE esphome_sensor_failed gauge\n"));
137
137
  }
138
138
  void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor *obj, std::string &area,
139
139
  std::string &node, std::string &friendly_name) {
@@ -141,37 +141,37 @@ void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor
141
141
  return;
142
142
  if (!std::isnan(obj->state)) {
143
143
  // We have a valid value, output this value
144
- stream->print(F("esphome_sensor_failed{id=\""));
144
+ stream->print(ESPHOME_F("esphome_sensor_failed{id=\""));
145
145
  stream->print(relabel_id_(obj).c_str());
146
146
  add_area_label_(stream, area);
147
147
  add_node_label_(stream, node);
148
148
  add_friendly_name_label_(stream, friendly_name);
149
- stream->print(F("\",name=\""));
149
+ stream->print(ESPHOME_F("\",name=\""));
150
150
  stream->print(relabel_name_(obj).c_str());
151
- stream->print(F("\"} 0\n"));
151
+ stream->print(ESPHOME_F("\"} 0\n"));
152
152
  // Data itself
153
- stream->print(F("esphome_sensor_value{id=\""));
153
+ stream->print(ESPHOME_F("esphome_sensor_value{id=\""));
154
154
  stream->print(relabel_id_(obj).c_str());
155
155
  add_area_label_(stream, area);
156
156
  add_node_label_(stream, node);
157
157
  add_friendly_name_label_(stream, friendly_name);
158
- stream->print(F("\",name=\""));
158
+ stream->print(ESPHOME_F("\",name=\""));
159
159
  stream->print(relabel_name_(obj).c_str());
160
- stream->print(F("\",unit=\""));
160
+ stream->print(ESPHOME_F("\",unit=\""));
161
161
  stream->print(obj->get_unit_of_measurement().c_str());
162
- stream->print(F("\"} "));
162
+ stream->print(ESPHOME_F("\"} "));
163
163
  stream->print(value_accuracy_to_string(obj->state, obj->get_accuracy_decimals()).c_str());
164
- stream->print(F("\n"));
164
+ stream->print(ESPHOME_F("\n"));
165
165
  } else {
166
166
  // Invalid state
167
- stream->print(F("esphome_sensor_failed{id=\""));
167
+ stream->print(ESPHOME_F("esphome_sensor_failed{id=\""));
168
168
  stream->print(relabel_id_(obj).c_str());
169
169
  add_area_label_(stream, area);
170
170
  add_node_label_(stream, node);
171
171
  add_friendly_name_label_(stream, friendly_name);
172
- stream->print(F("\",name=\""));
172
+ stream->print(ESPHOME_F("\",name=\""));
173
173
  stream->print(relabel_name_(obj).c_str());
174
- stream->print(F("\"} 1\n"));
174
+ stream->print(ESPHOME_F("\"} 1\n"));
175
175
  }
176
176
  }
177
177
  #endif
@@ -179,8 +179,8 @@ void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor
179
179
  // Type-specific implementation
180
180
  #ifdef USE_BINARY_SENSOR
181
181
  void PrometheusHandler::binary_sensor_type_(AsyncResponseStream *stream) {
182
- stream->print(F("#TYPE esphome_binary_sensor_value gauge\n"));
183
- stream->print(F("#TYPE esphome_binary_sensor_failed gauge\n"));
182
+ stream->print(ESPHOME_F("#TYPE esphome_binary_sensor_value gauge\n"));
183
+ stream->print(ESPHOME_F("#TYPE esphome_binary_sensor_failed gauge\n"));
184
184
  }
185
185
  void PrometheusHandler::binary_sensor_row_(AsyncResponseStream *stream, binary_sensor::BinarySensor *obj,
186
186
  std::string &area, std::string &node, std::string &friendly_name) {
@@ -188,204 +188,204 @@ void PrometheusHandler::binary_sensor_row_(AsyncResponseStream *stream, binary_s
188
188
  return;
189
189
  if (obj->has_state()) {
190
190
  // We have a valid value, output this value
191
- stream->print(F("esphome_binary_sensor_failed{id=\""));
191
+ stream->print(ESPHOME_F("esphome_binary_sensor_failed{id=\""));
192
192
  stream->print(relabel_id_(obj).c_str());
193
193
  add_area_label_(stream, area);
194
194
  add_node_label_(stream, node);
195
195
  add_friendly_name_label_(stream, friendly_name);
196
- stream->print(F("\",name=\""));
196
+ stream->print(ESPHOME_F("\",name=\""));
197
197
  stream->print(relabel_name_(obj).c_str());
198
- stream->print(F("\"} 0\n"));
198
+ stream->print(ESPHOME_F("\"} 0\n"));
199
199
  // Data itself
200
- stream->print(F("esphome_binary_sensor_value{id=\""));
200
+ stream->print(ESPHOME_F("esphome_binary_sensor_value{id=\""));
201
201
  stream->print(relabel_id_(obj).c_str());
202
202
  add_area_label_(stream, area);
203
203
  add_node_label_(stream, node);
204
204
  add_friendly_name_label_(stream, friendly_name);
205
- stream->print(F("\",name=\""));
205
+ stream->print(ESPHOME_F("\",name=\""));
206
206
  stream->print(relabel_name_(obj).c_str());
207
- stream->print(F("\"} "));
207
+ stream->print(ESPHOME_F("\"} "));
208
208
  stream->print(obj->state);
209
- stream->print(F("\n"));
209
+ stream->print(ESPHOME_F("\n"));
210
210
  } else {
211
211
  // Invalid state
212
- stream->print(F("esphome_binary_sensor_failed{id=\""));
212
+ stream->print(ESPHOME_F("esphome_binary_sensor_failed{id=\""));
213
213
  stream->print(relabel_id_(obj).c_str());
214
214
  add_area_label_(stream, area);
215
215
  add_node_label_(stream, node);
216
216
  add_friendly_name_label_(stream, friendly_name);
217
- stream->print(F("\",name=\""));
217
+ stream->print(ESPHOME_F("\",name=\""));
218
218
  stream->print(relabel_name_(obj).c_str());
219
- stream->print(F("\"} 1\n"));
219
+ stream->print(ESPHOME_F("\"} 1\n"));
220
220
  }
221
221
  }
222
222
  #endif
223
223
 
224
224
  #ifdef USE_FAN
225
225
  void PrometheusHandler::fan_type_(AsyncResponseStream *stream) {
226
- stream->print(F("#TYPE esphome_fan_value gauge\n"));
227
- stream->print(F("#TYPE esphome_fan_failed gauge\n"));
228
- stream->print(F("#TYPE esphome_fan_speed gauge\n"));
229
- stream->print(F("#TYPE esphome_fan_oscillation gauge\n"));
226
+ stream->print(ESPHOME_F("#TYPE esphome_fan_value gauge\n"));
227
+ stream->print(ESPHOME_F("#TYPE esphome_fan_failed gauge\n"));
228
+ stream->print(ESPHOME_F("#TYPE esphome_fan_speed gauge\n"));
229
+ stream->print(ESPHOME_F("#TYPE esphome_fan_oscillation gauge\n"));
230
230
  }
231
231
  void PrometheusHandler::fan_row_(AsyncResponseStream *stream, fan::Fan *obj, std::string &area, std::string &node,
232
232
  std::string &friendly_name) {
233
233
  if (obj->is_internal() && !this->include_internal_)
234
234
  return;
235
- stream->print(F("esphome_fan_failed{id=\""));
235
+ stream->print(ESPHOME_F("esphome_fan_failed{id=\""));
236
236
  stream->print(relabel_id_(obj).c_str());
237
237
  add_area_label_(stream, area);
238
238
  add_node_label_(stream, node);
239
239
  add_friendly_name_label_(stream, friendly_name);
240
- stream->print(F("\",name=\""));
240
+ stream->print(ESPHOME_F("\",name=\""));
241
241
  stream->print(relabel_name_(obj).c_str());
242
- stream->print(F("\"} 0\n"));
242
+ stream->print(ESPHOME_F("\"} 0\n"));
243
243
  // Data itself
244
- stream->print(F("esphome_fan_value{id=\""));
244
+ stream->print(ESPHOME_F("esphome_fan_value{id=\""));
245
245
  stream->print(relabel_id_(obj).c_str());
246
246
  add_area_label_(stream, area);
247
247
  add_node_label_(stream, node);
248
248
  add_friendly_name_label_(stream, friendly_name);
249
- stream->print(F("\",name=\""));
249
+ stream->print(ESPHOME_F("\",name=\""));
250
250
  stream->print(relabel_name_(obj).c_str());
251
- stream->print(F("\"} "));
251
+ stream->print(ESPHOME_F("\"} "));
252
252
  stream->print(obj->state);
253
- stream->print(F("\n"));
253
+ stream->print(ESPHOME_F("\n"));
254
254
  // Speed if available
255
255
  if (obj->get_traits().supports_speed()) {
256
- stream->print(F("esphome_fan_speed{id=\""));
256
+ stream->print(ESPHOME_F("esphome_fan_speed{id=\""));
257
257
  stream->print(relabel_id_(obj).c_str());
258
258
  add_area_label_(stream, area);
259
259
  add_node_label_(stream, node);
260
260
  add_friendly_name_label_(stream, friendly_name);
261
- stream->print(F("\",name=\""));
261
+ stream->print(ESPHOME_F("\",name=\""));
262
262
  stream->print(relabel_name_(obj).c_str());
263
- stream->print(F("\"} "));
263
+ stream->print(ESPHOME_F("\"} "));
264
264
  stream->print(obj->speed);
265
- stream->print(F("\n"));
265
+ stream->print(ESPHOME_F("\n"));
266
266
  }
267
267
  // Oscillation if available
268
268
  if (obj->get_traits().supports_oscillation()) {
269
- stream->print(F("esphome_fan_oscillation{id=\""));
269
+ stream->print(ESPHOME_F("esphome_fan_oscillation{id=\""));
270
270
  stream->print(relabel_id_(obj).c_str());
271
271
  add_area_label_(stream, area);
272
272
  add_node_label_(stream, node);
273
273
  add_friendly_name_label_(stream, friendly_name);
274
- stream->print(F("\",name=\""));
274
+ stream->print(ESPHOME_F("\",name=\""));
275
275
  stream->print(relabel_name_(obj).c_str());
276
- stream->print(F("\"} "));
276
+ stream->print(ESPHOME_F("\"} "));
277
277
  stream->print(obj->oscillating);
278
- stream->print(F("\n"));
278
+ stream->print(ESPHOME_F("\n"));
279
279
  }
280
280
  }
281
281
  #endif
282
282
 
283
283
  #ifdef USE_LIGHT
284
284
  void PrometheusHandler::light_type_(AsyncResponseStream *stream) {
285
- stream->print(F("#TYPE esphome_light_state gauge\n"));
286
- stream->print(F("#TYPE esphome_light_color gauge\n"));
287
- stream->print(F("#TYPE esphome_light_effect_active gauge\n"));
285
+ stream->print(ESPHOME_F("#TYPE esphome_light_state gauge\n"));
286
+ stream->print(ESPHOME_F("#TYPE esphome_light_color gauge\n"));
287
+ stream->print(ESPHOME_F("#TYPE esphome_light_effect_active gauge\n"));
288
288
  }
289
289
  void PrometheusHandler::light_row_(AsyncResponseStream *stream, light::LightState *obj, std::string &area,
290
290
  std::string &node, std::string &friendly_name) {
291
291
  if (obj->is_internal() && !this->include_internal_)
292
292
  return;
293
293
  // State
294
- stream->print(F("esphome_light_state{id=\""));
294
+ stream->print(ESPHOME_F("esphome_light_state{id=\""));
295
295
  stream->print(relabel_id_(obj).c_str());
296
296
  add_area_label_(stream, area);
297
297
  add_node_label_(stream, node);
298
298
  add_friendly_name_label_(stream, friendly_name);
299
- stream->print(F("\",name=\""));
299
+ stream->print(ESPHOME_F("\",name=\""));
300
300
  stream->print(relabel_name_(obj).c_str());
301
- stream->print(F("\"} "));
301
+ stream->print(ESPHOME_F("\"} "));
302
302
  stream->print(obj->remote_values.is_on());
303
- stream->print(F("\n"));
303
+ stream->print(ESPHOME_F("\n"));
304
304
  // Brightness and RGBW
305
305
  light::LightColorValues color = obj->current_values;
306
306
  float brightness, r, g, b, w;
307
307
  color.as_brightness(&brightness);
308
308
  color.as_rgbw(&r, &g, &b, &w);
309
- stream->print(F("esphome_light_color{id=\""));
309
+ stream->print(ESPHOME_F("esphome_light_color{id=\""));
310
310
  stream->print(relabel_id_(obj).c_str());
311
311
  add_area_label_(stream, area);
312
312
  add_node_label_(stream, node);
313
313
  add_friendly_name_label_(stream, friendly_name);
314
- stream->print(F("\",name=\""));
314
+ stream->print(ESPHOME_F("\",name=\""));
315
315
  stream->print(relabel_name_(obj).c_str());
316
- stream->print(F("\",channel=\"brightness\"} "));
316
+ stream->print(ESPHOME_F("\",channel=\"brightness\"} "));
317
317
  stream->print(brightness);
318
- stream->print(F("\n"));
319
- stream->print(F("esphome_light_color{id=\""));
318
+ stream->print(ESPHOME_F("\n"));
319
+ stream->print(ESPHOME_F("esphome_light_color{id=\""));
320
320
  stream->print(relabel_id_(obj).c_str());
321
321
  add_area_label_(stream, area);
322
322
  add_node_label_(stream, node);
323
323
  add_friendly_name_label_(stream, friendly_name);
324
- stream->print(F("\",name=\""));
324
+ stream->print(ESPHOME_F("\",name=\""));
325
325
  stream->print(relabel_name_(obj).c_str());
326
- stream->print(F("\",channel=\"r\"} "));
326
+ stream->print(ESPHOME_F("\",channel=\"r\"} "));
327
327
  stream->print(r);
328
- stream->print(F("\n"));
329
- stream->print(F("esphome_light_color{id=\""));
328
+ stream->print(ESPHOME_F("\n"));
329
+ stream->print(ESPHOME_F("esphome_light_color{id=\""));
330
330
  stream->print(relabel_id_(obj).c_str());
331
331
  add_area_label_(stream, area);
332
332
  add_node_label_(stream, node);
333
333
  add_friendly_name_label_(stream, friendly_name);
334
- stream->print(F("\",name=\""));
334
+ stream->print(ESPHOME_F("\",name=\""));
335
335
  stream->print(relabel_name_(obj).c_str());
336
- stream->print(F("\",channel=\"g\"} "));
336
+ stream->print(ESPHOME_F("\",channel=\"g\"} "));
337
337
  stream->print(g);
338
- stream->print(F("\n"));
339
- stream->print(F("esphome_light_color{id=\""));
338
+ stream->print(ESPHOME_F("\n"));
339
+ stream->print(ESPHOME_F("esphome_light_color{id=\""));
340
340
  stream->print(relabel_id_(obj).c_str());
341
341
  add_area_label_(stream, area);
342
342
  add_node_label_(stream, node);
343
343
  add_friendly_name_label_(stream, friendly_name);
344
- stream->print(F("\",name=\""));
344
+ stream->print(ESPHOME_F("\",name=\""));
345
345
  stream->print(relabel_name_(obj).c_str());
346
- stream->print(F("\",channel=\"b\"} "));
346
+ stream->print(ESPHOME_F("\",channel=\"b\"} "));
347
347
  stream->print(b);
348
- stream->print(F("\n"));
349
- stream->print(F("esphome_light_color{id=\""));
348
+ stream->print(ESPHOME_F("\n"));
349
+ stream->print(ESPHOME_F("esphome_light_color{id=\""));
350
350
  stream->print(relabel_id_(obj).c_str());
351
351
  add_area_label_(stream, area);
352
352
  add_node_label_(stream, node);
353
353
  add_friendly_name_label_(stream, friendly_name);
354
- stream->print(F("\",name=\""));
354
+ stream->print(ESPHOME_F("\",name=\""));
355
355
  stream->print(relabel_name_(obj).c_str());
356
- stream->print(F("\",channel=\"w\"} "));
356
+ stream->print(ESPHOME_F("\",channel=\"w\"} "));
357
357
  stream->print(w);
358
- stream->print(F("\n"));
358
+ stream->print(ESPHOME_F("\n"));
359
359
  // Effect
360
360
  std::string effect = obj->get_effect_name();
361
361
  if (effect == "None") {
362
- stream->print(F("esphome_light_effect_active{id=\""));
362
+ stream->print(ESPHOME_F("esphome_light_effect_active{id=\""));
363
363
  stream->print(relabel_id_(obj).c_str());
364
364
  add_area_label_(stream, area);
365
365
  add_node_label_(stream, node);
366
366
  add_friendly_name_label_(stream, friendly_name);
367
- stream->print(F("\",name=\""));
367
+ stream->print(ESPHOME_F("\",name=\""));
368
368
  stream->print(relabel_name_(obj).c_str());
369
- stream->print(F("\",effect=\"None\"} 0\n"));
369
+ stream->print(ESPHOME_F("\",effect=\"None\"} 0\n"));
370
370
  } else {
371
- stream->print(F("esphome_light_effect_active{id=\""));
371
+ stream->print(ESPHOME_F("esphome_light_effect_active{id=\""));
372
372
  stream->print(relabel_id_(obj).c_str());
373
373
  add_area_label_(stream, area);
374
374
  add_node_label_(stream, node);
375
375
  add_friendly_name_label_(stream, friendly_name);
376
- stream->print(F("\",name=\""));
376
+ stream->print(ESPHOME_F("\",name=\""));
377
377
  stream->print(relabel_name_(obj).c_str());
378
- stream->print(F("\",effect=\""));
378
+ stream->print(ESPHOME_F("\",effect=\""));
379
379
  stream->print(effect.c_str());
380
- stream->print(F("\"} 1\n"));
380
+ stream->print(ESPHOME_F("\"} 1\n"));
381
381
  }
382
382
  }
383
383
  #endif
384
384
 
385
385
  #ifdef USE_COVER
386
386
  void PrometheusHandler::cover_type_(AsyncResponseStream *stream) {
387
- stream->print(F("#TYPE esphome_cover_value gauge\n"));
388
- stream->print(F("#TYPE esphome_cover_failed gauge\n"));
387
+ stream->print(ESPHOME_F("#TYPE esphome_cover_value gauge\n"));
388
+ stream->print(ESPHOME_F("#TYPE esphome_cover_failed gauge\n"));
389
389
  }
390
390
  void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *obj, std::string &area, std::string &node,
391
391
  std::string &friendly_name) {
@@ -393,118 +393,118 @@ void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *ob
393
393
  return;
394
394
  if (!std::isnan(obj->position)) {
395
395
  // We have a valid value, output this value
396
- stream->print(F("esphome_cover_failed{id=\""));
396
+ stream->print(ESPHOME_F("esphome_cover_failed{id=\""));
397
397
  stream->print(relabel_id_(obj).c_str());
398
398
  add_area_label_(stream, area);
399
399
  add_node_label_(stream, node);
400
400
  add_friendly_name_label_(stream, friendly_name);
401
- stream->print(F("\",name=\""));
401
+ stream->print(ESPHOME_F("\",name=\""));
402
402
  stream->print(relabel_name_(obj).c_str());
403
- stream->print(F("\"} 0\n"));
403
+ stream->print(ESPHOME_F("\"} 0\n"));
404
404
  // Data itself
405
- stream->print(F("esphome_cover_value{id=\""));
405
+ stream->print(ESPHOME_F("esphome_cover_value{id=\""));
406
406
  stream->print(relabel_id_(obj).c_str());
407
407
  add_area_label_(stream, area);
408
408
  add_node_label_(stream, node);
409
409
  add_friendly_name_label_(stream, friendly_name);
410
- stream->print(F("\",name=\""));
410
+ stream->print(ESPHOME_F("\",name=\""));
411
411
  stream->print(relabel_name_(obj).c_str());
412
- stream->print(F("\"} "));
412
+ stream->print(ESPHOME_F("\"} "));
413
413
  stream->print(obj->position);
414
- stream->print(F("\n"));
414
+ stream->print(ESPHOME_F("\n"));
415
415
  if (obj->get_traits().get_supports_tilt()) {
416
- stream->print(F("esphome_cover_tilt{id=\""));
416
+ stream->print(ESPHOME_F("esphome_cover_tilt{id=\""));
417
417
  stream->print(relabel_id_(obj).c_str());
418
418
  add_area_label_(stream, area);
419
419
  add_node_label_(stream, node);
420
420
  add_friendly_name_label_(stream, friendly_name);
421
- stream->print(F("\",name=\""));
421
+ stream->print(ESPHOME_F("\",name=\""));
422
422
  stream->print(relabel_name_(obj).c_str());
423
- stream->print(F("\"} "));
423
+ stream->print(ESPHOME_F("\"} "));
424
424
  stream->print(obj->tilt);
425
- stream->print(F("\n"));
425
+ stream->print(ESPHOME_F("\n"));
426
426
  }
427
427
  } else {
428
428
  // Invalid state
429
- stream->print(F("esphome_cover_failed{id=\""));
429
+ stream->print(ESPHOME_F("esphome_cover_failed{id=\""));
430
430
  stream->print(relabel_id_(obj).c_str());
431
431
  add_area_label_(stream, area);
432
432
  add_node_label_(stream, node);
433
433
  add_friendly_name_label_(stream, friendly_name);
434
- stream->print(F("\",name=\""));
434
+ stream->print(ESPHOME_F("\",name=\""));
435
435
  stream->print(relabel_name_(obj).c_str());
436
- stream->print(F("\"} 1\n"));
436
+ stream->print(ESPHOME_F("\"} 1\n"));
437
437
  }
438
438
  }
439
439
  #endif
440
440
 
441
441
  #ifdef USE_SWITCH
442
442
  void PrometheusHandler::switch_type_(AsyncResponseStream *stream) {
443
- stream->print(F("#TYPE esphome_switch_value gauge\n"));
444
- stream->print(F("#TYPE esphome_switch_failed gauge\n"));
443
+ stream->print(ESPHOME_F("#TYPE esphome_switch_value gauge\n"));
444
+ stream->print(ESPHOME_F("#TYPE esphome_switch_failed gauge\n"));
445
445
  }
446
446
  void PrometheusHandler::switch_row_(AsyncResponseStream *stream, switch_::Switch *obj, std::string &area,
447
447
  std::string &node, std::string &friendly_name) {
448
448
  if (obj->is_internal() && !this->include_internal_)
449
449
  return;
450
- stream->print(F("esphome_switch_failed{id=\""));
450
+ stream->print(ESPHOME_F("esphome_switch_failed{id=\""));
451
451
  stream->print(relabel_id_(obj).c_str());
452
452
  add_area_label_(stream, area);
453
453
  add_node_label_(stream, node);
454
454
  add_friendly_name_label_(stream, friendly_name);
455
- stream->print(F("\",name=\""));
455
+ stream->print(ESPHOME_F("\",name=\""));
456
456
  stream->print(relabel_name_(obj).c_str());
457
- stream->print(F("\"} 0\n"));
457
+ stream->print(ESPHOME_F("\"} 0\n"));
458
458
  // Data itself
459
- stream->print(F("esphome_switch_value{id=\""));
459
+ stream->print(ESPHOME_F("esphome_switch_value{id=\""));
460
460
  stream->print(relabel_id_(obj).c_str());
461
461
  add_area_label_(stream, area);
462
462
  add_node_label_(stream, node);
463
463
  add_friendly_name_label_(stream, friendly_name);
464
- stream->print(F("\",name=\""));
464
+ stream->print(ESPHOME_F("\",name=\""));
465
465
  stream->print(relabel_name_(obj).c_str());
466
- stream->print(F("\"} "));
466
+ stream->print(ESPHOME_F("\"} "));
467
467
  stream->print(obj->state);
468
- stream->print(F("\n"));
468
+ stream->print(ESPHOME_F("\n"));
469
469
  }
470
470
  #endif
471
471
 
472
472
  #ifdef USE_LOCK
473
473
  void PrometheusHandler::lock_type_(AsyncResponseStream *stream) {
474
- stream->print(F("#TYPE esphome_lock_value gauge\n"));
475
- stream->print(F("#TYPE esphome_lock_failed gauge\n"));
474
+ stream->print(ESPHOME_F("#TYPE esphome_lock_value gauge\n"));
475
+ stream->print(ESPHOME_F("#TYPE esphome_lock_failed gauge\n"));
476
476
  }
477
477
  void PrometheusHandler::lock_row_(AsyncResponseStream *stream, lock::Lock *obj, std::string &area, std::string &node,
478
478
  std::string &friendly_name) {
479
479
  if (obj->is_internal() && !this->include_internal_)
480
480
  return;
481
- stream->print(F("esphome_lock_failed{id=\""));
481
+ stream->print(ESPHOME_F("esphome_lock_failed{id=\""));
482
482
  stream->print(relabel_id_(obj).c_str());
483
483
  add_area_label_(stream, area);
484
484
  add_node_label_(stream, node);
485
485
  add_friendly_name_label_(stream, friendly_name);
486
- stream->print(F("\",name=\""));
486
+ stream->print(ESPHOME_F("\",name=\""));
487
487
  stream->print(relabel_name_(obj).c_str());
488
- stream->print(F("\"} 0\n"));
488
+ stream->print(ESPHOME_F("\"} 0\n"));
489
489
  // Data itself
490
- stream->print(F("esphome_lock_value{id=\""));
490
+ stream->print(ESPHOME_F("esphome_lock_value{id=\""));
491
491
  stream->print(relabel_id_(obj).c_str());
492
492
  add_area_label_(stream, area);
493
493
  add_node_label_(stream, node);
494
494
  add_friendly_name_label_(stream, friendly_name);
495
- stream->print(F("\",name=\""));
495
+ stream->print(ESPHOME_F("\",name=\""));
496
496
  stream->print(relabel_name_(obj).c_str());
497
- stream->print(F("\"} "));
497
+ stream->print(ESPHOME_F("\"} "));
498
498
  stream->print(obj->state);
499
- stream->print(F("\n"));
499
+ stream->print(ESPHOME_F("\n"));
500
500
  }
501
501
  #endif
502
502
 
503
503
  // Type-specific implementation
504
504
  #ifdef USE_TEXT_SENSOR
505
505
  void PrometheusHandler::text_sensor_type_(AsyncResponseStream *stream) {
506
- stream->print(F("#TYPE esphome_text_sensor_value gauge\n"));
507
- stream->print(F("#TYPE esphome_text_sensor_failed gauge\n"));
506
+ stream->print(ESPHOME_F("#TYPE esphome_text_sensor_value gauge\n"));
507
+ stream->print(ESPHOME_F("#TYPE esphome_text_sensor_failed gauge\n"));
508
508
  }
509
509
  void PrometheusHandler::text_sensor_row_(AsyncResponseStream *stream, text_sensor::TextSensor *obj, std::string &area,
510
510
  std::string &node, std::string &friendly_name) {
@@ -512,37 +512,37 @@ void PrometheusHandler::text_sensor_row_(AsyncResponseStream *stream, text_senso
512
512
  return;
513
513
  if (obj->has_state()) {
514
514
  // We have a valid value, output this value
515
- stream->print(F("esphome_text_sensor_failed{id=\""));
515
+ stream->print(ESPHOME_F("esphome_text_sensor_failed{id=\""));
516
516
  stream->print(relabel_id_(obj).c_str());
517
517
  add_area_label_(stream, area);
518
518
  add_node_label_(stream, node);
519
519
  add_friendly_name_label_(stream, friendly_name);
520
- stream->print(F("\",name=\""));
520
+ stream->print(ESPHOME_F("\",name=\""));
521
521
  stream->print(relabel_name_(obj).c_str());
522
- stream->print(F("\"} 0\n"));
522
+ stream->print(ESPHOME_F("\"} 0\n"));
523
523
  // Data itself
524
- stream->print(F("esphome_text_sensor_value{id=\""));
524
+ stream->print(ESPHOME_F("esphome_text_sensor_value{id=\""));
525
525
  stream->print(relabel_id_(obj).c_str());
526
526
  add_area_label_(stream, area);
527
527
  add_node_label_(stream, node);
528
528
  add_friendly_name_label_(stream, friendly_name);
529
- stream->print(F("\",name=\""));
529
+ stream->print(ESPHOME_F("\",name=\""));
530
530
  stream->print(relabel_name_(obj).c_str());
531
- stream->print(F("\",value=\""));
531
+ stream->print(ESPHOME_F("\",value=\""));
532
532
  stream->print(obj->state.c_str());
533
- stream->print(F("\"} "));
534
- stream->print(F("1.0"));
535
- stream->print(F("\n"));
533
+ stream->print(ESPHOME_F("\"} "));
534
+ stream->print(ESPHOME_F("1.0"));
535
+ stream->print(ESPHOME_F("\n"));
536
536
  } else {
537
537
  // Invalid state
538
- stream->print(F("esphome_text_sensor_failed{id=\""));
538
+ stream->print(ESPHOME_F("esphome_text_sensor_failed{id=\""));
539
539
  stream->print(relabel_id_(obj).c_str());
540
540
  add_area_label_(stream, area);
541
541
  add_node_label_(stream, node);
542
542
  add_friendly_name_label_(stream, friendly_name);
543
- stream->print(F("\",name=\""));
543
+ stream->print(ESPHOME_F("\",name=\""));
544
544
  stream->print(relabel_name_(obj).c_str());
545
- stream->print(F("\"} 1\n"));
545
+ stream->print(ESPHOME_F("\"} 1\n"));
546
546
  }
547
547
  }
548
548
  #endif
@@ -550,8 +550,8 @@ void PrometheusHandler::text_sensor_row_(AsyncResponseStream *stream, text_senso
550
550
  // Type-specific implementation
551
551
  #ifdef USE_NUMBER
552
552
  void PrometheusHandler::number_type_(AsyncResponseStream *stream) {
553
- stream->print(F("#TYPE esphome_number_value gauge\n"));
554
- stream->print(F("#TYPE esphome_number_failed gauge\n"));
553
+ stream->print(ESPHOME_F("#TYPE esphome_number_value gauge\n"));
554
+ stream->print(ESPHOME_F("#TYPE esphome_number_failed gauge\n"));
555
555
  }
556
556
  void PrometheusHandler::number_row_(AsyncResponseStream *stream, number::Number *obj, std::string &area,
557
557
  std::string &node, std::string &friendly_name) {
@@ -559,43 +559,43 @@ void PrometheusHandler::number_row_(AsyncResponseStream *stream, number::Number
559
559
  return;
560
560
  if (!std::isnan(obj->state)) {
561
561
  // We have a valid value, output this value
562
- stream->print(F("esphome_number_failed{id=\""));
562
+ stream->print(ESPHOME_F("esphome_number_failed{id=\""));
563
563
  stream->print(relabel_id_(obj).c_str());
564
564
  add_area_label_(stream, area);
565
565
  add_node_label_(stream, node);
566
566
  add_friendly_name_label_(stream, friendly_name);
567
- stream->print(F("\",name=\""));
567
+ stream->print(ESPHOME_F("\",name=\""));
568
568
  stream->print(relabel_name_(obj).c_str());
569
- stream->print(F("\"} 0\n"));
569
+ stream->print(ESPHOME_F("\"} 0\n"));
570
570
  // Data itself
571
- stream->print(F("esphome_number_value{id=\""));
571
+ stream->print(ESPHOME_F("esphome_number_value{id=\""));
572
572
  stream->print(relabel_id_(obj).c_str());
573
573
  add_area_label_(stream, area);
574
574
  add_node_label_(stream, node);
575
575
  add_friendly_name_label_(stream, friendly_name);
576
- stream->print(F("\",name=\""));
576
+ stream->print(ESPHOME_F("\",name=\""));
577
577
  stream->print(relabel_name_(obj).c_str());
578
- stream->print(F("\"} "));
578
+ stream->print(ESPHOME_F("\"} "));
579
579
  stream->print(obj->state);
580
- stream->print(F("\n"));
580
+ stream->print(ESPHOME_F("\n"));
581
581
  } else {
582
582
  // Invalid state
583
- stream->print(F("esphome_number_failed{id=\""));
583
+ stream->print(ESPHOME_F("esphome_number_failed{id=\""));
584
584
  stream->print(relabel_id_(obj).c_str());
585
585
  add_area_label_(stream, area);
586
586
  add_node_label_(stream, node);
587
587
  add_friendly_name_label_(stream, friendly_name);
588
- stream->print(F("\",name=\""));
588
+ stream->print(ESPHOME_F("\",name=\""));
589
589
  stream->print(relabel_name_(obj).c_str());
590
- stream->print(F("\"} 1\n"));
590
+ stream->print(ESPHOME_F("\"} 1\n"));
591
591
  }
592
592
  }
593
593
  #endif
594
594
 
595
595
  #ifdef USE_SELECT
596
596
  void PrometheusHandler::select_type_(AsyncResponseStream *stream) {
597
- stream->print(F("#TYPE esphome_select_value gauge\n"));
598
- stream->print(F("#TYPE esphome_select_failed gauge\n"));
597
+ stream->print(ESPHOME_F("#TYPE esphome_select_value gauge\n"));
598
+ stream->print(ESPHOME_F("#TYPE esphome_select_failed gauge\n"));
599
599
  }
600
600
  void PrometheusHandler::select_row_(AsyncResponseStream *stream, select::Select *obj, std::string &area,
601
601
  std::string &node, std::string &friendly_name) {
@@ -603,105 +603,105 @@ void PrometheusHandler::select_row_(AsyncResponseStream *stream, select::Select
603
603
  return;
604
604
  if (obj->has_state()) {
605
605
  // We have a valid value, output this value
606
- stream->print(F("esphome_select_failed{id=\""));
606
+ stream->print(ESPHOME_F("esphome_select_failed{id=\""));
607
607
  stream->print(relabel_id_(obj).c_str());
608
608
  add_area_label_(stream, area);
609
609
  add_node_label_(stream, node);
610
610
  add_friendly_name_label_(stream, friendly_name);
611
- stream->print(F("\",name=\""));
611
+ stream->print(ESPHOME_F("\",name=\""));
612
612
  stream->print(relabel_name_(obj).c_str());
613
- stream->print(F("\"} 0\n"));
613
+ stream->print(ESPHOME_F("\"} 0\n"));
614
614
  // Data itself
615
- stream->print(F("esphome_select_value{id=\""));
615
+ stream->print(ESPHOME_F("esphome_select_value{id=\""));
616
616
  stream->print(relabel_id_(obj).c_str());
617
617
  add_area_label_(stream, area);
618
618
  add_node_label_(stream, node);
619
619
  add_friendly_name_label_(stream, friendly_name);
620
- stream->print(F("\",name=\""));
620
+ stream->print(ESPHOME_F("\",name=\""));
621
621
  stream->print(relabel_name_(obj).c_str());
622
- stream->print(F("\",value=\""));
622
+ stream->print(ESPHOME_F("\",value=\""));
623
623
  stream->print(obj->state.c_str());
624
- stream->print(F("\"} "));
625
- stream->print(F("1.0"));
626
- stream->print(F("\n"));
624
+ stream->print(ESPHOME_F("\"} "));
625
+ stream->print(ESPHOME_F("1.0"));
626
+ stream->print(ESPHOME_F("\n"));
627
627
  } else {
628
628
  // Invalid state
629
- stream->print(F("esphome_select_failed{id=\""));
629
+ stream->print(ESPHOME_F("esphome_select_failed{id=\""));
630
630
  stream->print(relabel_id_(obj).c_str());
631
631
  add_area_label_(stream, area);
632
632
  add_node_label_(stream, node);
633
633
  add_friendly_name_label_(stream, friendly_name);
634
- stream->print(F("\",name=\""));
634
+ stream->print(ESPHOME_F("\",name=\""));
635
635
  stream->print(relabel_name_(obj).c_str());
636
- stream->print(F("\"} 1\n"));
636
+ stream->print(ESPHOME_F("\"} 1\n"));
637
637
  }
638
638
  }
639
639
  #endif
640
640
 
641
641
  #ifdef USE_MEDIA_PLAYER
642
642
  void PrometheusHandler::media_player_type_(AsyncResponseStream *stream) {
643
- stream->print(F("#TYPE esphome_media_player_state_value gauge\n"));
644
- stream->print(F("#TYPE esphome_media_player_volume gauge\n"));
645
- stream->print(F("#TYPE esphome_media_player_is_muted gauge\n"));
646
- stream->print(F("#TYPE esphome_media_player_failed gauge\n"));
643
+ stream->print(ESPHOME_F("#TYPE esphome_media_player_state_value gauge\n"));
644
+ stream->print(ESPHOME_F("#TYPE esphome_media_player_volume gauge\n"));
645
+ stream->print(ESPHOME_F("#TYPE esphome_media_player_is_muted gauge\n"));
646
+ stream->print(ESPHOME_F("#TYPE esphome_media_player_failed gauge\n"));
647
647
  }
648
648
  void PrometheusHandler::media_player_row_(AsyncResponseStream *stream, media_player::MediaPlayer *obj,
649
649
  std::string &area, std::string &node, std::string &friendly_name) {
650
650
  if (obj->is_internal() && !this->include_internal_)
651
651
  return;
652
- stream->print(F("esphome_media_player_failed{id=\""));
652
+ stream->print(ESPHOME_F("esphome_media_player_failed{id=\""));
653
653
  stream->print(relabel_id_(obj).c_str());
654
654
  add_area_label_(stream, area);
655
655
  add_node_label_(stream, node);
656
656
  add_friendly_name_label_(stream, friendly_name);
657
- stream->print(F("\",name=\""));
657
+ stream->print(ESPHOME_F("\",name=\""));
658
658
  stream->print(relabel_name_(obj).c_str());
659
- stream->print(F("\"} 0\n"));
659
+ stream->print(ESPHOME_F("\"} 0\n"));
660
660
  // Data itself
661
- stream->print(F("esphome_media_player_state_value{id=\""));
661
+ stream->print(ESPHOME_F("esphome_media_player_state_value{id=\""));
662
662
  stream->print(relabel_id_(obj).c_str());
663
663
  add_area_label_(stream, area);
664
664
  add_node_label_(stream, node);
665
665
  add_friendly_name_label_(stream, friendly_name);
666
- stream->print(F("\",name=\""));
666
+ stream->print(ESPHOME_F("\",name=\""));
667
667
  stream->print(relabel_name_(obj).c_str());
668
- stream->print(F("\",value=\""));
668
+ stream->print(ESPHOME_F("\",value=\""));
669
669
  stream->print(media_player::media_player_state_to_string(obj->state));
670
- stream->print(F("\"} "));
671
- stream->print(F("1.0"));
672
- stream->print(F("\n"));
673
- stream->print(F("esphome_media_player_volume{id=\""));
670
+ stream->print(ESPHOME_F("\"} "));
671
+ stream->print(ESPHOME_F("1.0"));
672
+ stream->print(ESPHOME_F("\n"));
673
+ stream->print(ESPHOME_F("esphome_media_player_volume{id=\""));
674
674
  stream->print(relabel_id_(obj).c_str());
675
675
  add_area_label_(stream, area);
676
676
  add_node_label_(stream, node);
677
677
  add_friendly_name_label_(stream, friendly_name);
678
- stream->print(F("\",name=\""));
678
+ stream->print(ESPHOME_F("\",name=\""));
679
679
  stream->print(relabel_name_(obj).c_str());
680
- stream->print(F("\"} "));
680
+ stream->print(ESPHOME_F("\"} "));
681
681
  stream->print(obj->volume);
682
- stream->print(F("\n"));
683
- stream->print(F("esphome_media_player_is_muted{id=\""));
682
+ stream->print(ESPHOME_F("\n"));
683
+ stream->print(ESPHOME_F("esphome_media_player_is_muted{id=\""));
684
684
  stream->print(relabel_id_(obj).c_str());
685
685
  add_area_label_(stream, area);
686
686
  add_node_label_(stream, node);
687
687
  add_friendly_name_label_(stream, friendly_name);
688
- stream->print(F("\",name=\""));
688
+ stream->print(ESPHOME_F("\",name=\""));
689
689
  stream->print(relabel_name_(obj).c_str());
690
- stream->print(F("\"} "));
690
+ stream->print(ESPHOME_F("\"} "));
691
691
  if (obj->is_muted()) {
692
- stream->print(F("1.0"));
692
+ stream->print(ESPHOME_F("1.0"));
693
693
  } else {
694
- stream->print(F("0.0"));
694
+ stream->print(ESPHOME_F("0.0"));
695
695
  }
696
- stream->print(F("\n"));
696
+ stream->print(ESPHOME_F("\n"));
697
697
  }
698
698
  #endif
699
699
 
700
700
  #ifdef USE_UPDATE
701
701
  void PrometheusHandler::update_entity_type_(AsyncResponseStream *stream) {
702
- stream->print(F("#TYPE esphome_update_entity_state gauge\n"));
703
- stream->print(F("#TYPE esphome_update_entity_info gauge\n"));
704
- stream->print(F("#TYPE esphome_update_entity_failed gauge\n"));
702
+ stream->print(ESPHOME_F("#TYPE esphome_update_entity_state gauge\n"));
703
+ stream->print(ESPHOME_F("#TYPE esphome_update_entity_info gauge\n"));
704
+ stream->print(ESPHOME_F("#TYPE esphome_update_entity_failed gauge\n"));
705
705
  }
706
706
 
707
707
  void PrometheusHandler::handle_update_state_(AsyncResponseStream *stream, update::UpdateState state) {
@@ -730,168 +730,168 @@ void PrometheusHandler::update_entity_row_(AsyncResponseStream *stream, update::
730
730
  return;
731
731
  if (obj->has_state()) {
732
732
  // We have a valid value, output this value
733
- stream->print(F("esphome_update_entity_failed{id=\""));
733
+ stream->print(ESPHOME_F("esphome_update_entity_failed{id=\""));
734
734
  stream->print(relabel_id_(obj).c_str());
735
735
  add_area_label_(stream, area);
736
736
  add_node_label_(stream, node);
737
737
  add_friendly_name_label_(stream, friendly_name);
738
- stream->print(F("\",name=\""));
738
+ stream->print(ESPHOME_F("\",name=\""));
739
739
  stream->print(relabel_name_(obj).c_str());
740
- stream->print(F("\"} 0\n"));
740
+ stream->print(ESPHOME_F("\"} 0\n"));
741
741
  // First update state
742
- stream->print(F("esphome_update_entity_state{id=\""));
742
+ stream->print(ESPHOME_F("esphome_update_entity_state{id=\""));
743
743
  stream->print(relabel_id_(obj).c_str());
744
744
  add_area_label_(stream, area);
745
745
  add_node_label_(stream, node);
746
746
  add_friendly_name_label_(stream, friendly_name);
747
- stream->print(F("\",name=\""));
747
+ stream->print(ESPHOME_F("\",name=\""));
748
748
  stream->print(relabel_name_(obj).c_str());
749
- stream->print(F("\",value=\""));
749
+ stream->print(ESPHOME_F("\",value=\""));
750
750
  handle_update_state_(stream, obj->state);
751
- stream->print(F("\"} "));
752
- stream->print(F("1.0"));
753
- stream->print(F("\n"));
751
+ stream->print(ESPHOME_F("\"} "));
752
+ stream->print(ESPHOME_F("1.0"));
753
+ stream->print(ESPHOME_F("\n"));
754
754
  // Next update info
755
- stream->print(F("esphome_update_entity_info{id=\""));
755
+ stream->print(ESPHOME_F("esphome_update_entity_info{id=\""));
756
756
  stream->print(relabel_id_(obj).c_str());
757
757
  add_area_label_(stream, area);
758
758
  add_node_label_(stream, node);
759
759
  add_friendly_name_label_(stream, friendly_name);
760
- stream->print(F("\",name=\""));
760
+ stream->print(ESPHOME_F("\",name=\""));
761
761
  stream->print(relabel_name_(obj).c_str());
762
- stream->print(F("\",current_version=\""));
762
+ stream->print(ESPHOME_F("\",current_version=\""));
763
763
  stream->print(obj->update_info.current_version.c_str());
764
- stream->print(F("\",latest_version=\""));
764
+ stream->print(ESPHOME_F("\",latest_version=\""));
765
765
  stream->print(obj->update_info.latest_version.c_str());
766
- stream->print(F("\",title=\""));
766
+ stream->print(ESPHOME_F("\",title=\""));
767
767
  stream->print(obj->update_info.title.c_str());
768
- stream->print(F("\"} "));
769
- stream->print(F("1.0"));
770
- stream->print(F("\n"));
768
+ stream->print(ESPHOME_F("\"} "));
769
+ stream->print(ESPHOME_F("1.0"));
770
+ stream->print(ESPHOME_F("\n"));
771
771
  } else {
772
772
  // Invalid state
773
- stream->print(F("esphome_update_entity_failed{id=\""));
773
+ stream->print(ESPHOME_F("esphome_update_entity_failed{id=\""));
774
774
  stream->print(relabel_id_(obj).c_str());
775
775
  add_area_label_(stream, area);
776
776
  add_node_label_(stream, node);
777
777
  add_friendly_name_label_(stream, friendly_name);
778
- stream->print(F("\",name=\""));
778
+ stream->print(ESPHOME_F("\",name=\""));
779
779
  stream->print(relabel_name_(obj).c_str());
780
- stream->print(F("\"} 1\n"));
780
+ stream->print(ESPHOME_F("\"} 1\n"));
781
781
  }
782
782
  }
783
783
  #endif
784
784
 
785
785
  #ifdef USE_VALVE
786
786
  void PrometheusHandler::valve_type_(AsyncResponseStream *stream) {
787
- stream->print(F("#TYPE esphome_valve_operation gauge\n"));
788
- stream->print(F("#TYPE esphome_valve_failed gauge\n"));
789
- stream->print(F("#TYPE esphome_valve_position gauge\n"));
787
+ stream->print(ESPHOME_F("#TYPE esphome_valve_operation gauge\n"));
788
+ stream->print(ESPHOME_F("#TYPE esphome_valve_failed gauge\n"));
789
+ stream->print(ESPHOME_F("#TYPE esphome_valve_position gauge\n"));
790
790
  }
791
791
 
792
792
  void PrometheusHandler::valve_row_(AsyncResponseStream *stream, valve::Valve *obj, std::string &area, std::string &node,
793
793
  std::string &friendly_name) {
794
794
  if (obj->is_internal() && !this->include_internal_)
795
795
  return;
796
- stream->print(F("esphome_valve_failed{id=\""));
796
+ stream->print(ESPHOME_F("esphome_valve_failed{id=\""));
797
797
  stream->print(relabel_id_(obj).c_str());
798
798
  add_area_label_(stream, area);
799
799
  add_node_label_(stream, node);
800
800
  add_friendly_name_label_(stream, friendly_name);
801
- stream->print(F("\",name=\""));
801
+ stream->print(ESPHOME_F("\",name=\""));
802
802
  stream->print(relabel_name_(obj).c_str());
803
- stream->print(F("\"} 0\n"));
803
+ stream->print(ESPHOME_F("\"} 0\n"));
804
804
  // Data itself
805
- stream->print(F("esphome_valve_operation{id=\""));
805
+ stream->print(ESPHOME_F("esphome_valve_operation{id=\""));
806
806
  stream->print(relabel_id_(obj).c_str());
807
807
  add_area_label_(stream, area);
808
808
  add_node_label_(stream, node);
809
809
  add_friendly_name_label_(stream, friendly_name);
810
- stream->print(F("\",name=\""));
810
+ stream->print(ESPHOME_F("\",name=\""));
811
811
  stream->print(relabel_name_(obj).c_str());
812
- stream->print(F("\",operation=\""));
812
+ stream->print(ESPHOME_F("\",operation=\""));
813
813
  stream->print(valve::valve_operation_to_str(obj->current_operation));
814
- stream->print(F("\"} "));
815
- stream->print(F("1.0"));
816
- stream->print(F("\n"));
814
+ stream->print(ESPHOME_F("\"} "));
815
+ stream->print(ESPHOME_F("1.0"));
816
+ stream->print(ESPHOME_F("\n"));
817
817
  // Now see if position is supported
818
818
  if (obj->get_traits().get_supports_position()) {
819
- stream->print(F("esphome_valve_position{id=\""));
819
+ stream->print(ESPHOME_F("esphome_valve_position{id=\""));
820
820
  stream->print(relabel_id_(obj).c_str());
821
821
  add_area_label_(stream, area);
822
822
  add_node_label_(stream, node);
823
823
  add_friendly_name_label_(stream, friendly_name);
824
- stream->print(F("\",name=\""));
824
+ stream->print(ESPHOME_F("\",name=\""));
825
825
  stream->print(relabel_name_(obj).c_str());
826
- stream->print(F("\"} "));
826
+ stream->print(ESPHOME_F("\"} "));
827
827
  stream->print(obj->position);
828
- stream->print(F("\n"));
828
+ stream->print(ESPHOME_F("\n"));
829
829
  }
830
830
  }
831
831
  #endif
832
832
 
833
833
  #ifdef USE_CLIMATE
834
834
  void PrometheusHandler::climate_type_(AsyncResponseStream *stream) {
835
- stream->print(F("#TYPE esphome_climate_setting gauge\n"));
836
- stream->print(F("#TYPE esphome_climate_value gauge\n"));
837
- stream->print(F("#TYPE esphome_climate_failed gauge\n"));
835
+ stream->print(ESPHOME_F("#TYPE esphome_climate_setting gauge\n"));
836
+ stream->print(ESPHOME_F("#TYPE esphome_climate_value gauge\n"));
837
+ stream->print(ESPHOME_F("#TYPE esphome_climate_failed gauge\n"));
838
838
  }
839
839
 
840
840
  void PrometheusHandler::climate_setting_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area,
841
841
  std::string &node, std::string &friendly_name, std::string &setting,
842
842
  const LogString *setting_value) {
843
- stream->print(F("esphome_climate_setting{id=\""));
843
+ stream->print(ESPHOME_F("esphome_climate_setting{id=\""));
844
844
  stream->print(relabel_id_(obj).c_str());
845
845
  add_area_label_(stream, area);
846
846
  add_node_label_(stream, node);
847
847
  add_friendly_name_label_(stream, friendly_name);
848
- stream->print(F("\",name=\""));
848
+ stream->print(ESPHOME_F("\",name=\""));
849
849
  stream->print(relabel_name_(obj).c_str());
850
- stream->print(F("\",category=\""));
850
+ stream->print(ESPHOME_F("\",category=\""));
851
851
  stream->print(setting.c_str());
852
- stream->print(F("\",setting_value=\""));
852
+ stream->print(ESPHOME_F("\",setting_value=\""));
853
853
  stream->print(LOG_STR_ARG(setting_value));
854
- stream->print(F("\"} "));
855
- stream->print(F("1.0"));
856
- stream->print(F("\n"));
854
+ stream->print(ESPHOME_F("\"} "));
855
+ stream->print(ESPHOME_F("1.0"));
856
+ stream->print(ESPHOME_F("\n"));
857
857
  }
858
858
 
859
859
  void PrometheusHandler::climate_value_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area,
860
860
  std::string &node, std::string &friendly_name, std::string &category,
861
861
  std::string &climate_value) {
862
- stream->print(F("esphome_climate_value{id=\""));
862
+ stream->print(ESPHOME_F("esphome_climate_value{id=\""));
863
863
  stream->print(relabel_id_(obj).c_str());
864
864
  add_area_label_(stream, area);
865
865
  add_node_label_(stream, node);
866
866
  add_friendly_name_label_(stream, friendly_name);
867
- stream->print(F("\",name=\""));
867
+ stream->print(ESPHOME_F("\",name=\""));
868
868
  stream->print(relabel_name_(obj).c_str());
869
- stream->print(F("\",category=\""));
869
+ stream->print(ESPHOME_F("\",category=\""));
870
870
  stream->print(category.c_str());
871
- stream->print(F("\"} "));
871
+ stream->print(ESPHOME_F("\"} "));
872
872
  stream->print(climate_value.c_str());
873
- stream->print(F("\n"));
873
+ stream->print(ESPHOME_F("\n"));
874
874
  }
875
875
 
876
876
  void PrometheusHandler::climate_failed_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area,
877
877
  std::string &node, std::string &friendly_name, std::string &category,
878
878
  bool is_failed_value) {
879
- stream->print(F("esphome_climate_failed{id=\""));
879
+ stream->print(ESPHOME_F("esphome_climate_failed{id=\""));
880
880
  stream->print(relabel_id_(obj).c_str());
881
881
  add_area_label_(stream, area);
882
882
  add_node_label_(stream, node);
883
883
  add_friendly_name_label_(stream, friendly_name);
884
- stream->print(F("\",name=\""));
884
+ stream->print(ESPHOME_F("\",name=\""));
885
885
  stream->print(relabel_name_(obj).c_str());
886
- stream->print(F("\",category=\""));
886
+ stream->print(ESPHOME_F("\",category=\""));
887
887
  stream->print(category.c_str());
888
- stream->print(F("\"} "));
888
+ stream->print(ESPHOME_F("\"} "));
889
889
  if (is_failed_value) {
890
- stream->print(F("1.0"));
890
+ stream->print(ESPHOME_F("1.0"));
891
891
  } else {
892
- stream->print(F("0.0"));
892
+ stream->print(ESPHOME_F("0.0"));
893
893
  }
894
- stream->print(F("\n"));
894
+ stream->print(ESPHOME_F("\n"));
895
895
  }
896
896
 
897
897
  void PrometheusHandler::climate_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area,