esphome 2025.6.3__py3-none-any.whl → 2025.7.0b2__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 (606) hide show
  1. esphome/__main__.py +1 -3
  2. esphome/codegen.py +2 -0
  3. esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
  4. esphome/components/adc/__init__.py +25 -1
  5. esphome/components/adc/adc_sensor.h +11 -11
  6. esphome/components/adc/adc_sensor_common.cpp +1 -1
  7. esphome/components/adc/adc_sensor_esp32.cpp +16 -8
  8. esphome/components/ade7880/ade7880.h +0 -2
  9. esphome/components/ads1115/ads1115.h +0 -1
  10. esphome/components/ads1118/ads1118.h +0 -1
  11. esphome/components/ags10/ags10.h +0 -2
  12. esphome/components/aic3204/aic3204.h +0 -1
  13. esphome/components/alarm_control_panel/__init__.py +5 -2
  14. esphome/components/alpha3/alpha3.h +0 -1
  15. esphome/components/am43/cover/am43_cover.h +0 -1
  16. esphome/components/am43/sensor/am43_sensor.h +0 -1
  17. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
  18. esphome/components/anova/anova.cpp +5 -1
  19. esphome/components/anova/anova.h +0 -1
  20. esphome/components/apds9960/apds9960.cpp +1 -1
  21. esphome/components/api/__init__.py +57 -21
  22. esphome/components/api/api_connection.cpp +344 -539
  23. esphome/components/api/api_connection.h +224 -141
  24. esphome/components/api/api_frame_helper.cpp +91 -127
  25. esphome/components/api/api_frame_helper.h +64 -54
  26. esphome/components/api/api_pb2.cpp +1837 -9044
  27. esphome/components/api/api_pb2.h +532 -685
  28. esphome/components/api/api_pb2_dump.cpp +4432 -0
  29. esphome/components/api/api_pb2_service.cpp +184 -425
  30. esphome/components/api/api_pb2_service.h +13 -6
  31. esphome/components/api/api_server.cpp +131 -167
  32. esphome/components/api/api_server.h +38 -10
  33. esphome/components/api/client.py +8 -2
  34. esphome/components/api/custom_api_device.h +8 -0
  35. esphome/components/api/list_entities.cpp +37 -104
  36. esphome/components/api/list_entities.h +33 -23
  37. esphome/components/api/proto.h +532 -26
  38. esphome/components/api/subscribe_state.cpp +23 -29
  39. esphome/components/api/subscribe_state.h +26 -19
  40. esphome/components/api/user_services.h +2 -0
  41. esphome/components/as5600/as5600.h +0 -1
  42. esphome/components/async_tcp/__init__.py +14 -5
  43. esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
  44. esphome/components/atm90e32/atm90e32.cpp +2 -1
  45. esphome/components/audio/audio_decoder.cpp +1 -1
  46. esphome/components/audio/audio_transfer_buffer.cpp +2 -2
  47. esphome/components/b_parasite/b_parasite.h +0 -1
  48. esphome/components/bedjet/bedjet_hub.cpp +5 -1
  49. esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
  50. esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
  51. esphome/components/bh1750/bh1750.cpp +5 -5
  52. esphome/components/binary_sensor/__init__.py +82 -5
  53. esphome/components/binary_sensor/automation.h +19 -1
  54. esphome/components/binary_sensor/binary_sensor.cpp +12 -30
  55. esphome/components/binary_sensor/binary_sensor.h +11 -25
  56. esphome/components/binary_sensor/filter.cpp +29 -24
  57. esphome/components/binary_sensor/filter.h +20 -10
  58. esphome/components/ble_client/output/ble_binary_output.h +0 -1
  59. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
  60. esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
  61. esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
  62. esphome/components/ble_client/sensor/ble_sensor.h +0 -1
  63. esphome/components/ble_client/switch/ble_switch.h +0 -1
  64. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
  65. esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
  66. esphome/components/ble_presence/ble_presence_device.h +0 -1
  67. esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
  68. esphome/components/ble_scanner/ble_scanner.h +0 -1
  69. esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
  70. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
  71. esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
  72. esphome/components/bme680/sensor.py +1 -1
  73. esphome/components/bmp581/bmp581.h +0 -2
  74. esphome/components/button/__init__.py +5 -2
  75. esphome/components/camera/__init__.py +1 -0
  76. esphome/components/camera/camera.cpp +22 -0
  77. esphome/components/camera/camera.h +80 -0
  78. esphome/components/canbus/__init__.py +1 -0
  79. esphome/components/cap1188/cap1188.h +0 -1
  80. esphome/components/captive_portal/__init__.py +12 -2
  81. esphome/components/captive_portal/captive_portal.cpp +12 -2
  82. esphome/components/captive_portal/captive_portal.h +5 -2
  83. esphome/components/ccs811/ccs811.h +0 -2
  84. esphome/components/climate/__init__.py +5 -2
  85. esphome/components/cm1106/sensor.py +2 -2
  86. esphome/components/const/__init__.py +2 -0
  87. esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
  88. esphome/components/copy/button/copy_button.h +0 -1
  89. esphome/components/copy/cover/copy_cover.h +0 -1
  90. esphome/components/copy/fan/copy_fan.h +0 -1
  91. esphome/components/copy/lock/copy_lock.h +0 -1
  92. esphome/components/copy/number/copy_number.h +0 -1
  93. esphome/components/copy/select/copy_select.h +0 -1
  94. esphome/components/copy/sensor/copy_sensor.h +0 -1
  95. esphome/components/copy/switch/copy_switch.h +0 -1
  96. esphome/components/copy/text/copy_text.h +0 -1
  97. esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
  98. esphome/components/cover/__init__.py +5 -2
  99. esphome/components/cs5460a/cs5460a.h +0 -1
  100. esphome/components/datetime/__init__.py +4 -2
  101. esphome/components/debug/__init__.py +20 -0
  102. esphome/components/debug/debug_esp32.cpp +2 -0
  103. esphome/components/deep_sleep/__init__.py +43 -9
  104. esphome/components/demo/__init__.py +2 -2
  105. esphome/components/display/display.cpp +4 -3
  106. esphome/components/display/display.h +0 -2
  107. esphome/components/display/display_buffer.cpp +1 -1
  108. esphome/components/ds2484/__init__.py +1 -0
  109. esphome/components/ds2484/ds2484.cpp +209 -0
  110. esphome/components/ds2484/ds2484.h +43 -0
  111. esphome/components/ds2484/one_wire.py +37 -0
  112. esphome/components/duty_time/duty_time_sensor.h +0 -1
  113. esphome/components/ens160_base/ens160_base.h +0 -1
  114. esphome/components/es7210/es7210.h +0 -1
  115. esphome/components/es7243e/es7243e.h +0 -1
  116. esphome/components/es8156/es8156.h +0 -1
  117. esphome/components/es8311/es8311.h +0 -1
  118. esphome/components/es8388/es8388.h +0 -1
  119. esphome/components/esp32/__init__.py +103 -135
  120. esphome/components/esp32/core.cpp +0 -4
  121. esphome/components/esp32/gpio.h +1 -1
  122. esphome/components/esp32/helpers.cpp +69 -0
  123. esphome/components/esp32_ble/ble.cpp +5 -6
  124. esphome/components/esp32_ble/ble.h +29 -14
  125. esphome/components/esp32_ble/ble_event.h +6 -6
  126. esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
  127. esphome/components/esp32_ble_client/ble_client_base.h +24 -9
  128. esphome/components/esp32_ble_tracker/__init__.py +2 -8
  129. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
  130. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
  131. esphome/components/esp32_camera/__init__.py +112 -98
  132. esphome/components/esp32_camera/esp32_camera.cpp +41 -31
  133. esphome/components/esp32_camera/esp32_camera.h +35 -30
  134. esphome/components/esp32_camera_web_server/__init__.py +2 -1
  135. esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
  136. esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
  137. esphome/components/esp32_hall/sensor.py +2 -21
  138. esphome/components/esp32_hosted/__init__.py +101 -0
  139. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  140. esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
  141. esphome/components/esp32_rmt/__init__.py +0 -58
  142. esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
  143. esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
  144. esphome/components/esp32_rmt_led_strip/light.py +14 -76
  145. esphome/components/esp32_touch/esp32_touch.h +174 -28
  146. esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
  147. esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
  148. esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
  149. esphome/components/esp8266/__init__.py +2 -0
  150. esphome/components/esp8266/gpio.cpp +10 -10
  151. esphome/components/esp8266/helpers.cpp +31 -0
  152. esphome/components/esphome/ota/__init__.py +1 -0
  153. esphome/components/esphome/ota/ota_esphome.cpp +24 -19
  154. esphome/components/ethernet/__init__.py +42 -23
  155. esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
  156. esphome/components/ethernet/ethernet_component.cpp +69 -29
  157. esphome/components/ethernet/ethernet_component.h +18 -10
  158. esphome/components/event/__init__.py +5 -2
  159. esphome/components/ezo/ezo.h +0 -1
  160. esphome/components/ezo_pmp/ezo_pmp.h +0 -1
  161. esphome/components/fan/__init__.py +5 -2
  162. esphome/components/feedback/feedback_cover.h +0 -1
  163. esphome/components/font/__init__.py +92 -82
  164. esphome/components/font/font.cpp +9 -2
  165. esphome/components/font/font.h +20 -5
  166. esphome/components/fs3000/fs3000.h +0 -1
  167. esphome/components/gcja5/gcja5.h +0 -1
  168. esphome/components/gl_r01_i2c/__init__.py +0 -0
  169. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
  170. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  171. esphome/components/gl_r01_i2c/sensor.py +36 -0
  172. esphome/components/gp8403/gp8403.h +0 -1
  173. esphome/components/gpio/binary_sensor/__init__.py +17 -0
  174. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
  175. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
  176. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
  177. esphome/components/he60r/he60r.h +0 -1
  178. esphome/components/heatpumpir/climate.py +2 -1
  179. esphome/components/heatpumpir/heatpumpir.cpp +1 -0
  180. esphome/components/heatpumpir/heatpumpir.h +1 -0
  181. esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
  182. esphome/components/host/__init__.py +3 -1
  183. esphome/components/host/helpers.cpp +57 -0
  184. esphome/components/http_request/__init__.py +19 -1
  185. esphome/components/http_request/http_request.h +1 -1
  186. esphome/components/http_request/http_request_arduino.h +1 -0
  187. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  188. esphome/components/http_request/update/http_request_update.cpp +28 -9
  189. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
  190. esphome/components/hydreon_rgxx/sensor.py +1 -1
  191. esphome/components/i2c/__init__.py +23 -11
  192. esphome/components/i2c/i2c_bus.h +8 -1
  193. esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
  194. esphome/components/i2c/i2c_bus_arduino.h +6 -3
  195. esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
  196. esphome/components/i2c_device/i2c_device.h +0 -1
  197. esphome/components/i2s_audio/__init__.py +2 -10
  198. esphome/components/i2s_audio/i2s_audio.cpp +1 -5
  199. esphome/components/i2s_audio/media_player/__init__.py +2 -2
  200. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
  201. esphome/components/iaqcore/iaqcore.h +0 -2
  202. esphome/components/image/__init__.py +123 -24
  203. esphome/components/improv_serial/improv_serial_component.cpp +0 -4
  204. esphome/components/ina219/ina219.cpp +7 -0
  205. esphome/components/ina219/ina219.h +1 -0
  206. esphome/components/ina260/ina260.h +0 -2
  207. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
  208. esphome/components/inkplate6/display.py +15 -0
  209. esphome/components/inkplate6/inkplate.cpp +2 -2
  210. esphome/components/integration/integration_sensor.h +0 -1
  211. esphome/components/internal_temperature/internal_temperature.cpp +8 -27
  212. esphome/components/internal_temperature/sensor.py +0 -26
  213. esphome/components/interval/interval.h +0 -2
  214. esphome/components/ld2410/button/__init__.py +3 -3
  215. esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
  216. esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
  217. esphome/components/ld2410/ld2410.cpp +421 -268
  218. esphome/components/ld2410/ld2410.h +44 -146
  219. esphome/components/ld2410/number/__init__.py +2 -2
  220. esphome/components/ld2410/sensor.py +1 -1
  221. esphome/components/ld2410/switch/__init__.py +1 -1
  222. esphome/components/ld2420/ld2420.cpp +196 -100
  223. esphome/components/ld2420/ld2420.h +46 -118
  224. esphome/components/ld2420/number/__init__.py +2 -2
  225. esphome/components/ld2420/sensor/__init__.py +6 -2
  226. esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
  227. esphome/components/ld2450/button/__init__.py +3 -3
  228. esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
  229. esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
  230. esphome/components/ld2450/ld2450.cpp +384 -232
  231. esphome/components/ld2450/ld2450.h +60 -69
  232. esphome/components/ld2450/switch/__init__.py +1 -1
  233. esphome/components/ledc/ledc_output.cpp +1 -63
  234. esphome/components/libretiny/__init__.py +5 -3
  235. esphome/components/libretiny/const.py +5 -0
  236. esphome/components/libretiny/generate_components.py +1 -0
  237. esphome/components/libretiny/helpers.cpp +35 -0
  238. esphome/components/libretiny/lt_component.cpp +5 -3
  239. esphome/components/light/__init__.py +4 -2
  240. esphome/components/light/addressable_light.h +3 -3
  241. esphome/components/light/light_call.cpp +180 -243
  242. esphome/components/light/light_call.h +72 -20
  243. esphome/components/light/light_color_values.h +14 -14
  244. esphome/components/light/light_state.h +15 -13
  245. esphome/components/light/transformers.h +2 -2
  246. esphome/components/ln882x/__init__.py +52 -0
  247. esphome/components/ln882x/boards.py +285 -0
  248. esphome/components/lock/__init__.py +5 -2
  249. esphome/components/logger/__init__.py +40 -3
  250. esphome/components/logger/logger.cpp +47 -12
  251. esphome/components/logger/logger.h +80 -49
  252. esphome/components/logger/logger_esp32.cpp +3 -3
  253. esphome/components/lps22/__init__.py +0 -0
  254. esphome/components/lps22/lps22.cpp +75 -0
  255. esphome/components/lps22/lps22.h +27 -0
  256. esphome/components/lps22/sensor.py +58 -0
  257. esphome/components/ltr390/ltr390.h +0 -1
  258. esphome/components/ltr501/ltr501.h +0 -1
  259. esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
  260. esphome/components/lvgl/__init__.py +1 -1
  261. esphome/components/lvgl/schemas.py +66 -6
  262. esphome/components/lvgl/styles.py +24 -16
  263. esphome/components/lvgl/widgets/__init__.py +12 -2
  264. esphome/components/lvgl/widgets/lv_bar.py +40 -19
  265. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
  266. esphome/components/max9611/max9611.h +0 -1
  267. esphome/components/mcp23016/__init__.py +1 -1
  268. esphome/components/mcp23xxx_base/__init__.py +1 -1
  269. esphome/components/mcp4461/__init__.py +1 -1
  270. esphome/components/mcp4461/output/__init__.py +3 -2
  271. esphome/components/mcp9600/mcp9600.h +0 -2
  272. esphome/components/md5/md5.cpp +3 -3
  273. esphome/components/md5/md5.h +1 -6
  274. esphome/components/mdns/__init__.py +22 -11
  275. esphome/components/media_player/__init__.py +4 -3
  276. esphome/components/micro_wake_word/__init__.py +1 -5
  277. esphome/components/micro_wake_word/streaming_model.cpp +2 -2
  278. esphome/components/microphone/microphone.cpp +7 -9
  279. esphome/components/microphone/microphone.h +0 -2
  280. esphome/components/mipi_spi/display.py +1 -0
  281. esphome/components/mmc5603/mmc5603.cpp +1 -1
  282. esphome/components/modbus/modbus.cpp +33 -15
  283. esphome/components/modbus/modbus.h +9 -0
  284. esphome/components/modbus_controller/__init__.py +42 -10
  285. esphome/components/modbus_controller/modbus_controller.cpp +92 -11
  286. esphome/components/modbus_controller/modbus_controller.h +61 -7
  287. esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
  288. esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
  289. esphome/components/mpl3115a2/mpl3115a2.h +0 -2
  290. esphome/components/mqtt/__init__.py +16 -0
  291. esphome/components/mqtt/mqtt_backend.h +2 -1
  292. esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
  293. esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
  294. esphome/components/mqtt/mqtt_client.cpp +15 -9
  295. esphome/components/mqtt/mqtt_client.h +8 -3
  296. esphome/components/ms8607/ms8607.h +0 -1
  297. esphome/components/neopixelbus/light.py +4 -1
  298. esphome/components/neopixelbus/neopixelbus_light.h +1 -1
  299. esphome/components/network/__init__.py +4 -1
  300. esphome/components/network/ip_address.h +1 -0
  301. esphome/components/nextion/__init__.py +16 -0
  302. esphome/components/nextion/base_component.py +1 -0
  303. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
  304. esphome/components/nextion/display.py +14 -4
  305. esphome/components/nextion/nextion.cpp +166 -101
  306. esphome/components/nextion/nextion.h +84 -53
  307. esphome/components/nextion/nextion_commands.cpp +11 -10
  308. esphome/components/nextion/nextion_component.cpp +28 -28
  309. esphome/components/nextion/nextion_component.h +53 -18
  310. esphome/components/nextion/nextion_component_base.h +3 -0
  311. esphome/components/nextion/nextion_upload.cpp +36 -0
  312. esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
  313. esphome/components/nextion/nextion_upload_idf.cpp +9 -33
  314. esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
  315. esphome/components/nextion/switch/nextion_switch.cpp +1 -1
  316. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
  317. esphome/components/nfc/nfc.cpp +3 -22
  318. esphome/components/nfc/nfc.h +3 -3
  319. esphome/components/number/__init__.py +5 -2
  320. esphome/components/online_image/__init__.py +5 -0
  321. esphome/components/online_image/online_image.cpp +6 -2
  322. esphome/components/online_image/online_image.h +4 -1
  323. esphome/components/opentherm/opentherm.cpp +7 -12
  324. esphome/components/openthread/__init__.py +47 -40
  325. esphome/components/openthread/const.py +1 -0
  326. esphome/components/openthread/openthread_esp.cpp +27 -5
  327. esphome/components/opt3001/__init__.py +0 -0
  328. esphome/components/opt3001/opt3001.cpp +122 -0
  329. esphome/components/opt3001/opt3001.h +27 -0
  330. esphome/components/opt3001/sensor.py +35 -0
  331. esphome/components/ota/__init__.py +17 -0
  332. esphome/components/ota/ota_backend.h +27 -1
  333. esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
  334. esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
  335. esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
  336. esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
  337. esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
  338. esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
  339. esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
  340. esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
  341. esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
  342. esphome/components/ota/ota_backend_esp_idf.h +1 -0
  343. esphome/components/packages/__init__.py +5 -2
  344. esphome/components/packet_transport/binary_sensor.py +61 -4
  345. esphome/components/packet_transport/packet_transport.cpp +34 -1
  346. esphome/components/packet_transport/packet_transport.h +11 -5
  347. esphome/components/pcf8574/__init__.py +1 -1
  348. esphome/components/pi4ioe5v6408/__init__.py +84 -0
  349. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
  350. esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
  351. esphome/components/pmsa003i/pmsa003i.h +0 -1
  352. esphome/components/pmsx003/pmsx003.h +0 -1
  353. esphome/components/pn7150/pn7150.cpp +7 -7
  354. esphome/components/pn7150/pn7150.h +0 -1
  355. esphome/components/pn7160/pn7160.cpp +7 -7
  356. esphome/components/pn7160/pn7160.h +0 -1
  357. esphome/components/preferences/syncer.h +2 -0
  358. esphome/components/prometheus/prometheus_handler.h +1 -1
  359. esphome/components/psram/psram.cpp +0 -20
  360. esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
  361. esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
  362. esphome/components/pulse_width/pulse_width.h +0 -1
  363. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
  364. esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
  365. esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
  366. esphome/components/qr_code/__init__.py +13 -10
  367. esphome/components/qwiic_pir/qwiic_pir.h +0 -1
  368. esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
  369. esphome/components/rc522/rc522.h +0 -1
  370. esphome/components/rdm6300/rdm6300.h +0 -2
  371. esphome/components/remote_base/__init__.py +7 -5
  372. esphome/components/remote_base/remote_base.cpp +24 -21
  373. esphome/components/remote_base/remote_base.h +3 -26
  374. esphome/components/remote_receiver/__init__.py +40 -46
  375. esphome/components/remote_receiver/remote_receiver.h +4 -18
  376. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
  377. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
  378. esphome/components/remote_transmitter/__init__.py +42 -43
  379. esphome/components/remote_transmitter/remote_transmitter.h +2 -14
  380. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
  381. esphome/components/resistance/resistance_sensor.h +0 -1
  382. esphome/components/rp2040/__init__.py +2 -0
  383. esphome/components/rp2040/helpers.cpp +55 -0
  384. esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
  385. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
  386. esphome/components/rtttl/__init__.py +4 -4
  387. esphome/components/rtttl/rtttl.cpp +10 -1
  388. esphome/components/ruuvitag/ruuvitag.h +0 -1
  389. esphome/components/safe_mode/safe_mode.cpp +2 -0
  390. esphome/components/safe_mode/safe_mode.h +4 -1
  391. esphome/components/scd30/scd30.h +0 -1
  392. esphome/components/scd30/sensor.py +2 -2
  393. esphome/components/scd4x/scd4x.cpp +61 -54
  394. esphome/components/scd4x/scd4x.h +17 -15
  395. esphome/components/scd4x/sensor.py +4 -4
  396. esphome/components/script/script.h +0 -2
  397. esphome/components/sdp3x/sensor.py +1 -1
  398. esphome/components/select/__init__.py +5 -2
  399. esphome/components/sen5x/sen5x.h +0 -1
  400. esphome/components/senseair/senseair.h +0 -1
  401. esphome/components/sensor/__init__.py +4 -2
  402. esphome/components/sensor/filter.cpp +1 -1
  403. esphome/components/sensor/sensor.cpp +12 -6
  404. esphome/components/sensor/sensor.h +13 -5
  405. esphome/components/servo/servo.h +0 -1
  406. esphome/components/sfa30/sfa30.h +0 -1
  407. esphome/components/sgp30/sgp30.h +0 -1
  408. esphome/components/sgp4x/sgp4x.h +0 -1
  409. esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
  410. esphome/components/sht4x/sht4x.h +0 -1
  411. esphome/components/sm300d2/sm300d2.h +0 -2
  412. esphome/components/smt100/sensor.py +8 -4
  413. esphome/components/smt100/smt100.cpp +5 -5
  414. esphome/components/smt100/smt100.h +3 -3
  415. esphome/components/sn74hc595/__init__.py +1 -1
  416. esphome/components/sn74hc595/sn74hc595.cpp +5 -4
  417. esphome/components/sntp/sntp_component.cpp +9 -3
  418. esphome/components/sntp/time.py +2 -0
  419. esphome/components/socket/__init__.py +17 -0
  420. esphome/components/spi/__init__.py +27 -6
  421. esphome/components/spi/spi.cpp +3 -2
  422. esphome/components/spi/spi.h +9 -3
  423. esphome/components/spi/spi_arduino.cpp +3 -5
  424. esphome/components/spi/spi_esp_idf.cpp +40 -21
  425. esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
  426. esphome/components/sps30/sps30.h +0 -1
  427. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  428. esphome/components/st7701s/st7701s.cpp +0 -4
  429. esphome/components/status/status_binary_sensor.h +0 -2
  430. esphome/components/substitutions/__init__.py +76 -19
  431. esphome/components/substitutions/jinja.py +99 -0
  432. esphome/components/sun/sun.cpp +3 -4
  433. esphome/components/switch/__init__.py +5 -2
  434. esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
  435. esphome/components/sx126x/__init__.py +317 -0
  436. esphome/components/sx126x/automation.h +62 -0
  437. esphome/components/sx126x/packet_transport/__init__.py +26 -0
  438. esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
  439. esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
  440. esphome/components/sx126x/sx126x.cpp +523 -0
  441. esphome/components/sx126x/sx126x.h +140 -0
  442. esphome/components/sx126x/sx126x_reg.h +163 -0
  443. esphome/components/sx127x/__init__.py +325 -0
  444. esphome/components/sx127x/automation.h +62 -0
  445. esphome/components/sx127x/packet_transport/__init__.py +26 -0
  446. esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
  447. esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
  448. esphome/components/sx127x/sx127x.cpp +498 -0
  449. esphome/components/sx127x/sx127x.h +128 -0
  450. esphome/components/sx127x/sx127x_reg.h +295 -0
  451. esphome/components/syslog/esphome_syslog.cpp +5 -3
  452. esphome/components/syslog/esphome_syslog.h +1 -1
  453. esphome/components/tca9555/__init__.py +1 -1
  454. esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
  455. esphome/components/text/__init__.py +5 -2
  456. esphome/components/text_sensor/__init__.py +5 -2
  457. esphome/components/thermostat/thermostat_climate.cpp +34 -31
  458. esphome/components/thermostat/thermostat_climate.h +43 -39
  459. esphome/components/time/__init__.py +16 -2
  460. esphome/components/time/real_time_clock.cpp +4 -0
  461. esphome/components/time/real_time_clock.h +5 -1
  462. esphome/components/tlc5971/tlc5971.cpp +4 -1
  463. esphome/components/tmp1075/tmp1075.h +0 -2
  464. esphome/components/tof10120/tof10120_sensor.h +0 -1
  465. esphome/components/tormatic/tormatic_cover.h +0 -1
  466. esphome/components/total_daily_energy/total_daily_energy.h +0 -1
  467. esphome/components/tsl2591/tsl2591.cpp +1 -1
  468. esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
  469. esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
  470. esphome/components/tx20/tx20.cpp +2 -2
  471. esphome/components/uart/__init__.py +18 -0
  472. esphome/components/uart/uart_component_esp_idf.cpp +0 -4
  473. esphome/components/update/__init__.py +5 -2
  474. esphome/components/update/update_entity.h +8 -0
  475. esphome/components/usb_host/__init__.py +5 -2
  476. esphome/components/usb_host/usb_host_client.cpp +10 -10
  477. esphome/components/usb_uart/cp210x.cpp +1 -1
  478. esphome/components/usb_uart/usb_uart.cpp +41 -44
  479. esphome/components/usb_uart/usb_uart.h +4 -3
  480. esphome/components/valve/__init__.py +5 -2
  481. esphome/components/vbus/vbus.h +0 -1
  482. esphome/components/veml3235/veml3235.h +0 -1
  483. esphome/components/veml7700/veml7700.h +0 -1
  484. esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
  485. esphome/components/voice_assistant/voice_assistant.cpp +4 -4
  486. esphome/components/watchdog/watchdog.cpp +0 -4
  487. esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
  488. esphome/components/web_server/__init__.py +34 -19
  489. esphome/components/web_server/ota/__init__.py +32 -0
  490. esphome/components/web_server/ota/ota_web_server.cpp +210 -0
  491. esphome/components/web_server/ota/ota_web_server.h +26 -0
  492. esphome/components/web_server/web_server.cpp +305 -427
  493. esphome/components/web_server/web_server.h +33 -23
  494. esphome/components/web_server/web_server_v1.cpp +4 -5
  495. esphome/components/web_server_base/__init__.py +5 -2
  496. esphome/components/web_server_base/web_server_base.cpp +2 -94
  497. esphome/components/web_server_base/web_server_base.h +5 -25
  498. esphome/components/web_server_idf/multipart.cpp +254 -0
  499. esphome/components/web_server_idf/multipart.h +86 -0
  500. esphome/components/web_server_idf/utils.cpp +32 -0
  501. esphome/components/web_server_idf/utils.h +10 -0
  502. esphome/components/web_server_idf/web_server_idf.cpp +162 -16
  503. esphome/components/web_server_idf/web_server_idf.h +11 -10
  504. esphome/components/wiegand/wiegand.cpp +2 -2
  505. esphome/components/wifi/__init__.py +18 -0
  506. esphome/components/wifi/wifi_component.cpp +17 -22
  507. esphome/components/wifi/wifi_component.h +27 -23
  508. esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
  509. esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
  510. esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
  511. esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
  512. esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
  513. esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
  514. esphome/components/wireguard/__init__.py +2 -11
  515. esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
  516. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  517. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
  518. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
  519. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
  520. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
  521. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
  522. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
  523. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
  524. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
  525. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
  526. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
  527. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
  528. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
  529. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
  530. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
  531. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
  532. esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
  533. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
  534. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
  535. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
  536. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
  537. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  538. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  539. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  540. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  541. esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
  542. esphome/components/zyaura/zyaura.h +0 -1
  543. esphome/config.py +88 -22
  544. esphome/config_helpers.py +74 -1
  545. esphome/config_validation.py +12 -1
  546. esphome/const.py +65 -10
  547. esphome/core/__init__.py +18 -2
  548. esphome/core/application.cpp +163 -10
  549. esphome/core/application.h +145 -165
  550. esphome/core/area.h +19 -0
  551. esphome/core/automation.h +58 -9
  552. esphome/core/color.cpp +3 -5
  553. esphome/core/color.h +16 -16
  554. esphome/core/component.cpp +151 -18
  555. esphome/core/component.h +98 -4
  556. esphome/core/component_iterator.cpp +11 -9
  557. esphome/core/component_iterator.h +12 -10
  558. esphome/core/config.py +155 -6
  559. esphome/core/controller.cpp +4 -2
  560. esphome/core/controller.h +1 -1
  561. esphome/core/datatypes.h +2 -2
  562. esphome/core/defines.h +17 -2
  563. esphome/core/device.h +20 -0
  564. esphome/core/entity_base.cpp +20 -15
  565. esphome/core/entity_base.h +76 -0
  566. esphome/core/entity_helpers.py +168 -1
  567. esphome/core/event_pool.h +81 -0
  568. esphome/core/helpers.cpp +75 -230
  569. esphome/core/helpers.h +164 -104
  570. esphome/core/lock_free_queue.h +151 -0
  571. esphome/core/log.cpp +2 -2
  572. esphome/core/log.h +2 -0
  573. esphome/core/optional.h +5 -0
  574. esphome/core/ring_buffer.cpp +2 -2
  575. esphome/core/scheduler.cpp +275 -103
  576. esphome/core/scheduler.h +154 -17
  577. esphome/core/time.cpp +5 -5
  578. esphome/core/time.h +5 -5
  579. esphome/cpp_generator.py +17 -0
  580. esphome/cpp_helpers.py +0 -22
  581. esphome/cpp_types.py +3 -1
  582. esphome/dashboard/entries.py +1 -1
  583. esphome/dashboard/util/text.py +5 -21
  584. esphome/dashboard/web_server.py +9 -1
  585. esphome/helpers.py +47 -0
  586. esphome/loader.py +15 -1
  587. esphome/pins.py +14 -8
  588. esphome/wizard.py +17 -4
  589. esphome/writer.py +21 -3
  590. esphome/yaml_util.py +0 -2
  591. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/METADATA +10 -9
  592. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/RECORD +597 -538
  593. esphome/components/api/api_pb2_size.h +0 -361
  594. esphome/components/esp32_ble/ble_event_pool.h +0 -72
  595. esphome/components/esp32_ble/queue.h +0 -85
  596. esphome/components/esp32_hall/esp32_hall.cpp +0 -25
  597. esphome/components/esp32_hall/esp32_hall.h +0 -23
  598. esphome/components/esp32_touch/esp32_touch.cpp +0 -355
  599. esphome/components/ld2410/button/reset_button.cpp +0 -9
  600. esphome/components/ld2450/button/reset_button.cpp +0 -9
  601. esphome/components/openthread/tlv.py +0 -65
  602. /esphome/{dashboard/enum.py → enum.py} +0 -0
  603. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/WHEEL +0 -0
  604. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/entry_points.txt +0 -0
  605. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/licenses/LICENSE +0 -0
  606. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,5 @@
1
1
  #pragma once
2
2
 
3
- #include "esphome/core/optional.h"
4
3
  #include "light_color_values.h"
5
4
  #include <set>
6
5
 
@@ -10,6 +9,11 @@ namespace light {
10
9
  class LightState;
11
10
 
12
11
  /** This class represents a requested change in a light state.
12
+ *
13
+ * Light state changes are tracked using a bitfield flags_ to minimize memory usage.
14
+ * Each possible light property has a flag indicating whether it has been set.
15
+ * This design keeps LightCall at ~56 bytes to minimize heap fragmentation on
16
+ * ESP8266 and other memory-constrained devices.
13
17
  */
14
18
  class LightCall {
15
19
  public:
@@ -131,6 +135,19 @@ class LightCall {
131
135
  /// Set whether this light call should trigger a save state to recover them at startup..
132
136
  LightCall &set_save(bool save);
133
137
 
138
+ // Getter methods to check if values are set
139
+ bool has_state() const { return (flags_ & FLAG_HAS_STATE) != 0; }
140
+ bool has_brightness() const { return (flags_ & FLAG_HAS_BRIGHTNESS) != 0; }
141
+ bool has_color_brightness() const { return (flags_ & FLAG_HAS_COLOR_BRIGHTNESS) != 0; }
142
+ bool has_red() const { return (flags_ & FLAG_HAS_RED) != 0; }
143
+ bool has_green() const { return (flags_ & FLAG_HAS_GREEN) != 0; }
144
+ bool has_blue() const { return (flags_ & FLAG_HAS_BLUE) != 0; }
145
+ bool has_white() const { return (flags_ & FLAG_HAS_WHITE) != 0; }
146
+ bool has_color_temperature() const { return (flags_ & FLAG_HAS_COLOR_TEMPERATURE) != 0; }
147
+ bool has_cold_white() const { return (flags_ & FLAG_HAS_COLD_WHITE) != 0; }
148
+ bool has_warm_white() const { return (flags_ & FLAG_HAS_WARM_WHITE) != 0; }
149
+ bool has_color_mode() const { return (flags_ & FLAG_HAS_COLOR_MODE) != 0; }
150
+
134
151
  /** Set the RGB color of the light by RGB values.
135
152
  *
136
153
  * Please note that this only changes the color of the light, not the brightness.
@@ -170,27 +187,62 @@ class LightCall {
170
187
  /// Some color modes also can be set using non-native parameters, transform those calls.
171
188
  void transform_parameters_();
172
189
 
173
- bool has_transition_() { return this->transition_length_.has_value(); }
174
- bool has_flash_() { return this->flash_length_.has_value(); }
175
- bool has_effect_() { return this->effect_.has_value(); }
190
+ // Bitfield flags - each flag indicates whether a corresponding value has been set.
191
+ enum FieldFlags : uint16_t {
192
+ FLAG_HAS_STATE = 1 << 0,
193
+ FLAG_HAS_TRANSITION = 1 << 1,
194
+ FLAG_HAS_FLASH = 1 << 2,
195
+ FLAG_HAS_EFFECT = 1 << 3,
196
+ FLAG_HAS_BRIGHTNESS = 1 << 4,
197
+ FLAG_HAS_COLOR_BRIGHTNESS = 1 << 5,
198
+ FLAG_HAS_RED = 1 << 6,
199
+ FLAG_HAS_GREEN = 1 << 7,
200
+ FLAG_HAS_BLUE = 1 << 8,
201
+ FLAG_HAS_WHITE = 1 << 9,
202
+ FLAG_HAS_COLOR_TEMPERATURE = 1 << 10,
203
+ FLAG_HAS_COLD_WHITE = 1 << 11,
204
+ FLAG_HAS_WARM_WHITE = 1 << 12,
205
+ FLAG_HAS_COLOR_MODE = 1 << 13,
206
+ FLAG_PUBLISH = 1 << 14,
207
+ FLAG_SAVE = 1 << 15,
208
+ };
209
+
210
+ bool has_transition_() { return (this->flags_ & FLAG_HAS_TRANSITION) != 0; }
211
+ bool has_flash_() { return (this->flags_ & FLAG_HAS_FLASH) != 0; }
212
+ bool has_effect_() { return (this->flags_ & FLAG_HAS_EFFECT) != 0; }
213
+ bool get_publish_() { return (this->flags_ & FLAG_PUBLISH) != 0; }
214
+ bool get_save_() { return (this->flags_ & FLAG_SAVE) != 0; }
215
+
216
+ // Helper to set flag
217
+ void set_flag_(FieldFlags flag, bool value) {
218
+ if (value) {
219
+ this->flags_ |= flag;
220
+ } else {
221
+ this->flags_ &= ~flag;
222
+ }
223
+ }
176
224
 
177
225
  LightState *parent_;
178
- optional<bool> state_;
179
- optional<uint32_t> transition_length_;
180
- optional<uint32_t> flash_length_;
181
- optional<ColorMode> color_mode_;
182
- optional<float> brightness_;
183
- optional<float> color_brightness_;
184
- optional<float> red_;
185
- optional<float> green_;
186
- optional<float> blue_;
187
- optional<float> white_;
188
- optional<float> color_temperature_;
189
- optional<float> cold_white_;
190
- optional<float> warm_white_;
191
- optional<uint32_t> effect_;
192
- bool publish_{true};
193
- bool save_{true};
226
+
227
+ // Light state values - use flags_ to check if a value has been set.
228
+ // Group 4-byte aligned members first
229
+ uint32_t transition_length_;
230
+ uint32_t flash_length_;
231
+ uint32_t effect_;
232
+ float brightness_;
233
+ float color_brightness_;
234
+ float red_;
235
+ float green_;
236
+ float blue_;
237
+ float white_;
238
+ float color_temperature_;
239
+ float cold_white_;
240
+ float warm_white_;
241
+
242
+ // Smaller members at the end for better packing
243
+ uint16_t flags_{FLAG_PUBLISH | FLAG_SAVE}; // Tracks which values are set
244
+ ColorMode color_mode_;
245
+ bool state_;
194
246
  };
195
247
 
196
248
  } // namespace light
@@ -46,8 +46,7 @@ class LightColorValues {
46
46
  public:
47
47
  /// Construct the LightColorValues with all attributes enabled, but state set to off.
48
48
  LightColorValues()
49
- : color_mode_(ColorMode::UNKNOWN),
50
- state_(0.0f),
49
+ : state_(0.0f),
51
50
  brightness_(1.0f),
52
51
  color_brightness_(1.0f),
53
52
  red_(1.0f),
@@ -56,7 +55,8 @@ class LightColorValues {
56
55
  white_(1.0f),
57
56
  color_temperature_{0.0f},
58
57
  cold_white_{1.0f},
59
- warm_white_{1.0f} {}
58
+ warm_white_{1.0f},
59
+ color_mode_(ColorMode::UNKNOWN) {}
60
60
 
61
61
  LightColorValues(ColorMode color_mode, float state, float brightness, float color_brightness, float red, float green,
62
62
  float blue, float white, float color_temperature, float cold_white, float warm_white) {
@@ -86,16 +86,16 @@ class LightColorValues {
86
86
  static LightColorValues lerp(const LightColorValues &start, const LightColorValues &end, float completion) {
87
87
  LightColorValues v;
88
88
  v.set_color_mode(end.color_mode_);
89
- v.set_state(esphome::lerp(completion, start.get_state(), end.get_state()));
90
- v.set_brightness(esphome::lerp(completion, start.get_brightness(), end.get_brightness()));
91
- v.set_color_brightness(esphome::lerp(completion, start.get_color_brightness(), end.get_color_brightness()));
92
- v.set_red(esphome::lerp(completion, start.get_red(), end.get_red()));
93
- v.set_green(esphome::lerp(completion, start.get_green(), end.get_green()));
94
- v.set_blue(esphome::lerp(completion, start.get_blue(), end.get_blue()));
95
- v.set_white(esphome::lerp(completion, start.get_white(), end.get_white()));
96
- v.set_color_temperature(esphome::lerp(completion, start.get_color_temperature(), end.get_color_temperature()));
97
- v.set_cold_white(esphome::lerp(completion, start.get_cold_white(), end.get_cold_white()));
98
- v.set_warm_white(esphome::lerp(completion, start.get_warm_white(), end.get_warm_white()));
89
+ v.set_state(std::lerp(start.get_state(), end.get_state(), completion));
90
+ v.set_brightness(std::lerp(start.get_brightness(), end.get_brightness(), completion));
91
+ v.set_color_brightness(std::lerp(start.get_color_brightness(), end.get_color_brightness(), completion));
92
+ v.set_red(std::lerp(start.get_red(), end.get_red(), completion));
93
+ v.set_green(std::lerp(start.get_green(), end.get_green(), completion));
94
+ v.set_blue(std::lerp(start.get_blue(), end.get_blue(), completion));
95
+ v.set_white(std::lerp(start.get_white(), end.get_white(), completion));
96
+ v.set_color_temperature(std::lerp(start.get_color_temperature(), end.get_color_temperature(), completion));
97
+ v.set_cold_white(std::lerp(start.get_cold_white(), end.get_cold_white(), completion));
98
+ v.set_warm_white(std::lerp(start.get_warm_white(), end.get_warm_white(), completion));
99
99
  return v;
100
100
  }
101
101
 
@@ -292,7 +292,6 @@ class LightColorValues {
292
292
  void set_warm_white(float warm_white) { this->warm_white_ = clamp(warm_white, 0.0f, 1.0f); }
293
293
 
294
294
  protected:
295
- ColorMode color_mode_;
296
295
  float state_; ///< ON / OFF, float for transition
297
296
  float brightness_;
298
297
  float color_brightness_;
@@ -303,6 +302,7 @@ class LightColorValues {
303
302
  float color_temperature_; ///< Color Temperature in Mired
304
303
  float cold_white_;
305
304
  float warm_white_;
305
+ ColorMode color_mode_;
306
306
  };
307
307
 
308
308
  } // namespace light
@@ -31,9 +31,7 @@ enum LightRestoreMode : uint8_t {
31
31
  struct LightStateRTCState {
32
32
  LightStateRTCState(ColorMode color_mode, bool state, float brightness, float color_brightness, float red, float green,
33
33
  float blue, float white, float color_temp, float cold_white, float warm_white)
34
- : color_mode(color_mode),
35
- state(state),
36
- brightness(brightness),
34
+ : brightness(brightness),
37
35
  color_brightness(color_brightness),
38
36
  red(red),
39
37
  green(green),
@@ -41,10 +39,12 @@ struct LightStateRTCState {
41
39
  white(white),
42
40
  color_temp(color_temp),
43
41
  cold_white(cold_white),
44
- warm_white(warm_white) {}
42
+ warm_white(warm_white),
43
+ effect(0),
44
+ color_mode(color_mode),
45
+ state(state) {}
45
46
  LightStateRTCState() = default;
46
- ColorMode color_mode{ColorMode::UNKNOWN};
47
- bool state{false};
47
+ // Group 4-byte aligned members first
48
48
  float brightness{1.0f};
49
49
  float color_brightness{1.0f};
50
50
  float red{1.0f};
@@ -55,6 +55,9 @@ struct LightStateRTCState {
55
55
  float cold_white{1.0f};
56
56
  float warm_white{1.0f};
57
57
  uint32_t effect{0};
58
+ // Group smaller members at the end
59
+ ColorMode color_mode{ColorMode::UNKNOWN};
60
+ bool state{false};
58
61
  };
59
62
 
60
63
  /** This class represents the communication layer between the front-end MQTT layer and the
@@ -216,6 +219,8 @@ class LightState : public EntityBase, public Component {
216
219
  std::unique_ptr<LightTransformer> transformer_{nullptr};
217
220
  /// List of effects for this light.
218
221
  std::vector<LightEffect *> effects_;
222
+ /// Object used to store the persisted values of the light.
223
+ ESPPreferenceObject rtc_;
219
224
  /// Value for storing the index of the currently active effect. 0 if no effect is active
220
225
  uint32_t active_effect_index_{};
221
226
  /// Default transition length for all transitions in ms.
@@ -224,9 +229,10 @@ class LightState : public EntityBase, public Component {
224
229
  uint32_t flash_transition_length_{};
225
230
  /// Gamma correction factor for the light.
226
231
  float gamma_correct_{};
227
-
228
- /// Object used to store the persisted values of the light.
229
- ESPPreferenceObject rtc_;
232
+ /// Whether the light value should be written in the next cycle.
233
+ bool next_write_{true};
234
+ // for effects, true if a transformer (transition) is active.
235
+ bool is_transformer_active_ = false;
230
236
 
231
237
  /** Callback to call when new values for the frontend are available.
232
238
  *
@@ -247,10 +253,6 @@ class LightState : public EntityBase, public Component {
247
253
 
248
254
  /// Restore mode of the light.
249
255
  LightRestoreMode restore_mode_;
250
- /// Whether the light value should be written in the next cycle.
251
- bool next_write_{true};
252
- // for effects, true if a transformer (transition) is active.
253
- bool is_transformer_active_ = false;
254
256
  };
255
257
 
256
258
  } // namespace light
@@ -59,9 +59,9 @@ class LightTransitionTransformer : public LightTransformer {
59
59
  // transition from 0 to 1 on x = [0, 1]
60
60
  static float smoothed_progress(float x) { return x * x * x * (x * (x * 6.0f - 15.0f) + 10.0f); }
61
61
 
62
- bool changing_color_mode_{false};
63
62
  LightColorValues end_values_{};
64
63
  LightColorValues intermediate_values_{};
64
+ bool changing_color_mode_{false};
65
65
  };
66
66
 
67
67
  class LightFlashTransformer : public LightTransformer {
@@ -117,8 +117,8 @@ class LightFlashTransformer : public LightTransformer {
117
117
 
118
118
  protected:
119
119
  LightState &state_;
120
- uint32_t transition_length_;
121
120
  std::unique_ptr<LightTransformer> transformer_{nullptr};
121
+ uint32_t transition_length_;
122
122
  bool begun_lightstate_restore_;
123
123
  };
124
124
 
@@ -0,0 +1,52 @@
1
+ # This file was auto-generated by libretiny/generate_components.py
2
+ # Do not modify its contents.
3
+ # For custom pin validators, put validate_pin() or validate_usage()
4
+ # in gpio.py file in this directory.
5
+ # For changing schema/pin schema, put COMPONENT_SCHEMA or COMPONENT_PIN_SCHEMA
6
+ # in schema.py file in this directory.
7
+
8
+ from esphome import pins
9
+ from esphome.components import libretiny
10
+ from esphome.components.libretiny.const import (
11
+ COMPONENT_LN882X,
12
+ KEY_COMPONENT_DATA,
13
+ KEY_LIBRETINY,
14
+ LibreTinyComponent,
15
+ )
16
+ from esphome.core import CORE
17
+
18
+ from .boards import LN882X_BOARD_PINS, LN882X_BOARDS
19
+
20
+ CODEOWNERS = ["@lamauny"]
21
+ AUTO_LOAD = ["libretiny"]
22
+ IS_TARGET_PLATFORM = True
23
+
24
+ COMPONENT_DATA = LibreTinyComponent(
25
+ name=COMPONENT_LN882X,
26
+ boards=LN882X_BOARDS,
27
+ board_pins=LN882X_BOARD_PINS,
28
+ pin_validation=None,
29
+ usage_validation=None,
30
+ )
31
+
32
+
33
+ def _set_core_data(config):
34
+ CORE.data[KEY_LIBRETINY] = {}
35
+ CORE.data[KEY_LIBRETINY][KEY_COMPONENT_DATA] = COMPONENT_DATA
36
+ return config
37
+
38
+
39
+ CONFIG_SCHEMA = libretiny.BASE_SCHEMA
40
+
41
+ PIN_SCHEMA = libretiny.gpio.BASE_PIN_SCHEMA
42
+
43
+ CONFIG_SCHEMA.prepend_extra(_set_core_data)
44
+
45
+
46
+ async def to_code(config):
47
+ return await libretiny.component_to_code(config)
48
+
49
+
50
+ @pins.PIN_SCHEMA_REGISTRY.register("ln882x", PIN_SCHEMA)
51
+ async def pin_to_code(config):
52
+ return await libretiny.gpio.component_pin_to_code(config)
@@ -0,0 +1,285 @@
1
+ # This file was auto-generated by libretiny/generate_components.py
2
+ # Do not modify its contents.
3
+
4
+ from esphome.components.libretiny.const import FAMILY_LN882H
5
+
6
+ LN882X_BOARDS = {
7
+ "wl2s": {
8
+ "name": "WL2S Wi-Fi/BLE Module",
9
+ "family": FAMILY_LN882H,
10
+ },
11
+ "ln-02": {
12
+ "name": "LN-02 Wi-Fi/BLE Module",
13
+ "family": FAMILY_LN882H,
14
+ },
15
+ "generic-ln882hki": {
16
+ "name": "Generic - LN882HKI",
17
+ "family": FAMILY_LN882H,
18
+ },
19
+ }
20
+
21
+ LN882X_BOARD_PINS = {
22
+ "wl2s": {
23
+ "WIRE0_SCL_0": 7,
24
+ "WIRE0_SCL_1": 12,
25
+ "WIRE0_SCL_2": 3,
26
+ "WIRE0_SCL_3": 10,
27
+ "WIRE0_SCL_4": 2,
28
+ "WIRE0_SCL_5": 0,
29
+ "WIRE0_SCL_6": 19,
30
+ "WIRE0_SCL_7": 11,
31
+ "WIRE0_SCL_8": 9,
32
+ "WIRE0_SCL_9": 24,
33
+ "WIRE0_SCL_10": 25,
34
+ "WIRE0_SCL_11": 5,
35
+ "WIRE0_SCL_12": 1,
36
+ "WIRE0_SDA_0": 7,
37
+ "WIRE0_SDA_1": 12,
38
+ "WIRE0_SDA_2": 3,
39
+ "WIRE0_SDA_3": 10,
40
+ "WIRE0_SDA_4": 2,
41
+ "WIRE0_SDA_5": 0,
42
+ "WIRE0_SDA_6": 19,
43
+ "WIRE0_SDA_7": 11,
44
+ "WIRE0_SDA_8": 9,
45
+ "WIRE0_SDA_9": 24,
46
+ "WIRE0_SDA_10": 25,
47
+ "WIRE0_SDA_11": 5,
48
+ "WIRE0_SDA_12": 1,
49
+ "SERIAL0_RX": 3,
50
+ "SERIAL0_TX": 2,
51
+ "SERIAL1_RX": 24,
52
+ "SERIAL1_TX": 25,
53
+ "ADC2": 0,
54
+ "ADC3": 1,
55
+ "ADC5": 19,
56
+ "PA00": 0,
57
+ "PA0": 0,
58
+ "PA01": 1,
59
+ "PA1": 1,
60
+ "PA02": 2,
61
+ "PA2": 2,
62
+ "PA03": 3,
63
+ "PA3": 3,
64
+ "PA05": 5,
65
+ "PA5": 5,
66
+ "PA07": 7,
67
+ "PA7": 7,
68
+ "PA09": 9,
69
+ "PA9": 9,
70
+ "PA10": 10,
71
+ "PA11": 11,
72
+ "PA12": 12,
73
+ "PB03": 19,
74
+ "PB3": 19,
75
+ "PB08": 24,
76
+ "PB8": 24,
77
+ "PB09": 25,
78
+ "PB9": 25,
79
+ "RX0": 3,
80
+ "RX1": 24,
81
+ "SCL0": 1,
82
+ "SDA0": 1,
83
+ "TX0": 2,
84
+ "TX1": 25,
85
+ "D0": 7,
86
+ "D1": 12,
87
+ "D2": 3,
88
+ "D3": 10,
89
+ "D4": 2,
90
+ "D5": 0,
91
+ "D6": 19,
92
+ "D7": 11,
93
+ "D8": 9,
94
+ "D9": 24,
95
+ "D10": 25,
96
+ "D11": 5,
97
+ "D12": 1,
98
+ "A0": 0,
99
+ "A1": 19,
100
+ "A2": 1,
101
+ },
102
+ "ln-02": {
103
+ "WIRE0_SCL_0": 11,
104
+ "WIRE0_SCL_1": 19,
105
+ "WIRE0_SCL_2": 3,
106
+ "WIRE0_SCL_3": 24,
107
+ "WIRE0_SCL_4": 2,
108
+ "WIRE0_SCL_5": 25,
109
+ "WIRE0_SCL_6": 1,
110
+ "WIRE0_SCL_7": 0,
111
+ "WIRE0_SCL_8": 9,
112
+ "WIRE0_SDA_0": 11,
113
+ "WIRE0_SDA_1": 19,
114
+ "WIRE0_SDA_2": 3,
115
+ "WIRE0_SDA_3": 24,
116
+ "WIRE0_SDA_4": 2,
117
+ "WIRE0_SDA_5": 25,
118
+ "WIRE0_SDA_6": 1,
119
+ "WIRE0_SDA_7": 0,
120
+ "WIRE0_SDA_8": 9,
121
+ "SERIAL0_RX": 3,
122
+ "SERIAL0_TX": 2,
123
+ "SERIAL1_RX": 24,
124
+ "SERIAL1_TX": 25,
125
+ "ADC2": 0,
126
+ "ADC3": 1,
127
+ "ADC5": 19,
128
+ "PA00": 0,
129
+ "PA0": 0,
130
+ "PA01": 1,
131
+ "PA1": 1,
132
+ "PA02": 2,
133
+ "PA2": 2,
134
+ "PA03": 3,
135
+ "PA3": 3,
136
+ "PA09": 9,
137
+ "PA9": 9,
138
+ "PA11": 11,
139
+ "PB03": 19,
140
+ "PB3": 19,
141
+ "PB08": 24,
142
+ "PB8": 24,
143
+ "PB09": 25,
144
+ "PB9": 25,
145
+ "RX0": 3,
146
+ "RX1": 24,
147
+ "SCL0": 9,
148
+ "SDA0": 9,
149
+ "TX0": 2,
150
+ "TX1": 25,
151
+ "D0": 11,
152
+ "D1": 19,
153
+ "D2": 3,
154
+ "D3": 24,
155
+ "D4": 2,
156
+ "D5": 25,
157
+ "D6": 1,
158
+ "D7": 0,
159
+ "D8": 9,
160
+ "A0": 19,
161
+ "A1": 1,
162
+ "A2": 0,
163
+ },
164
+ "generic-ln882hki": {
165
+ "WIRE0_SCL_0": 0,
166
+ "WIRE0_SCL_1": 1,
167
+ "WIRE0_SCL_2": 2,
168
+ "WIRE0_SCL_3": 3,
169
+ "WIRE0_SCL_4": 4,
170
+ "WIRE0_SCL_5": 5,
171
+ "WIRE0_SCL_6": 6,
172
+ "WIRE0_SCL_7": 7,
173
+ "WIRE0_SCL_8": 8,
174
+ "WIRE0_SCL_9": 9,
175
+ "WIRE0_SCL_10": 10,
176
+ "WIRE0_SCL_11": 11,
177
+ "WIRE0_SCL_12": 12,
178
+ "WIRE0_SCL_13": 19,
179
+ "WIRE0_SCL_14": 20,
180
+ "WIRE0_SCL_15": 21,
181
+ "WIRE0_SCL_16": 22,
182
+ "WIRE0_SCL_17": 23,
183
+ "WIRE0_SCL_18": 24,
184
+ "WIRE0_SCL_19": 25,
185
+ "WIRE0_SDA_0": 0,
186
+ "WIRE0_SDA_1": 1,
187
+ "WIRE0_SDA_2": 2,
188
+ "WIRE0_SDA_3": 3,
189
+ "WIRE0_SDA_4": 4,
190
+ "WIRE0_SDA_5": 5,
191
+ "WIRE0_SDA_6": 6,
192
+ "WIRE0_SDA_7": 7,
193
+ "WIRE0_SDA_8": 8,
194
+ "WIRE0_SDA_9": 9,
195
+ "WIRE0_SDA_10": 10,
196
+ "WIRE0_SDA_11": 11,
197
+ "WIRE0_SDA_12": 12,
198
+ "WIRE0_SDA_13": 19,
199
+ "WIRE0_SDA_14": 20,
200
+ "WIRE0_SDA_15": 21,
201
+ "WIRE0_SDA_16": 22,
202
+ "WIRE0_SDA_17": 23,
203
+ "WIRE0_SDA_18": 24,
204
+ "WIRE0_SDA_19": 25,
205
+ "SERIAL0_RX": 3,
206
+ "SERIAL0_TX": 2,
207
+ "SERIAL1_RX": 24,
208
+ "SERIAL1_TX": 25,
209
+ "ADC2": 0,
210
+ "ADC3": 1,
211
+ "ADC4": 4,
212
+ "ADC5": 19,
213
+ "ADC6": 20,
214
+ "ADC7": 21,
215
+ "PA00": 0,
216
+ "PA0": 0,
217
+ "PA01": 1,
218
+ "PA1": 1,
219
+ "PA02": 2,
220
+ "PA2": 2,
221
+ "PA03": 3,
222
+ "PA3": 3,
223
+ "PA04": 4,
224
+ "PA4": 4,
225
+ "PA05": 5,
226
+ "PA5": 5,
227
+ "PA06": 6,
228
+ "PA6": 6,
229
+ "PA07": 7,
230
+ "PA7": 7,
231
+ "PA08": 8,
232
+ "PA8": 8,
233
+ "PA09": 9,
234
+ "PA9": 9,
235
+ "PA10": 10,
236
+ "PA11": 11,
237
+ "PA12": 12,
238
+ "PB03": 19,
239
+ "PB3": 19,
240
+ "PB04": 20,
241
+ "PB4": 20,
242
+ "PB05": 21,
243
+ "PB5": 21,
244
+ "PB06": 22,
245
+ "PB6": 22,
246
+ "PB07": 23,
247
+ "PB7": 23,
248
+ "PB08": 24,
249
+ "PB8": 24,
250
+ "PB09": 25,
251
+ "PB9": 25,
252
+ "RX0": 3,
253
+ "RX1": 24,
254
+ "TX0": 2,
255
+ "TX1": 25,
256
+ "D0": 0,
257
+ "D1": 1,
258
+ "D2": 2,
259
+ "D3": 3,
260
+ "D4": 4,
261
+ "D5": 5,
262
+ "D6": 6,
263
+ "D7": 7,
264
+ "D8": 8,
265
+ "D9": 9,
266
+ "D10": 10,
267
+ "D11": 11,
268
+ "D12": 12,
269
+ "D13": 19,
270
+ "D14": 20,
271
+ "D15": 21,
272
+ "D16": 22,
273
+ "D17": 23,
274
+ "D18": 24,
275
+ "D19": 25,
276
+ "A2": 0,
277
+ "A3": 1,
278
+ "A4": 4,
279
+ "A5": 19,
280
+ "A6": 20,
281
+ "A7": 21,
282
+ },
283
+ }
284
+
285
+ BOARDS = LN882X_BOARDS
@@ -14,8 +14,8 @@ from esphome.const import (
14
14
  CONF_WEB_SERVER,
15
15
  )
16
16
  from esphome.core import CORE, coroutine_with_priority
17
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
17
18
  from esphome.cpp_generator import MockObjClass
18
- from esphome.cpp_helpers import setup_entity
19
19
 
20
20
  CODEOWNERS = ["@esphome/core"]
21
21
  IS_PLATFORM_COMPONENT = True
@@ -67,6 +67,9 @@ _LOCK_SCHEMA = (
67
67
  )
68
68
 
69
69
 
70
+ _LOCK_SCHEMA.add_extra(entity_duplicate_validator("lock"))
71
+
72
+
70
73
  def lock_schema(
71
74
  class_: MockObjClass = cv.UNDEFINED,
72
75
  *,
@@ -94,7 +97,7 @@ LOCK_SCHEMA.add_extra(cv.deprecated_schema_constant("lock"))
94
97
 
95
98
 
96
99
  async def _setup_lock_core(var, config):
97
- await setup_entity(var, config)
100
+ await setup_entity(var, config, "lock")
98
101
 
99
102
  for conf in config.get(CONF_ON_LOCK, []):
100
103
  trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)