esphome 2024.7.3__py3-none-any.whl → 2024.8.0__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 (350) hide show
  1. esphome/__main__.py +15 -81
  2. esphome/automation.py +1 -1
  3. esphome/codegen.py +53 -53
  4. esphome/components/ade7953/sensor.py +1 -1
  5. esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
  6. esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +5 -2
  7. esphome/components/airthings_wave_plus/airthings_wave_plus.h +2 -0
  8. esphome/components/airthings_wave_plus/sensor.py +12 -0
  9. esphome/components/alarm_control_panel/__init__.py +75 -66
  10. esphome/components/apds9306/__init__.py +4 -0
  11. esphome/components/apds9306/apds9306.cpp +151 -0
  12. esphome/components/apds9306/apds9306.h +66 -0
  13. esphome/components/apds9306/sensor.py +95 -0
  14. esphome/components/api/__init__.py +80 -52
  15. esphome/components/api/api_connection.cpp +14 -1
  16. esphome/components/api/api_pb2.cpp +33 -4
  17. esphome/components/api/api_pb2.h +8 -1
  18. esphome/components/api/api_server.cpp +10 -0
  19. esphome/components/api/api_server.h +3 -0
  20. esphome/components/atm90e32/__init__.py +7 -0
  21. esphome/components/atm90e32/atm90e32.cpp +68 -16
  22. esphome/components/atm90e32/atm90e32.h +20 -7
  23. esphome/components/atm90e32/atm90e32_reg.h +2 -0
  24. esphome/components/atm90e32/button/__init__.py +43 -0
  25. esphome/components/atm90e32/button/atm90e32_button.cpp +20 -0
  26. esphome/components/atm90e32/button/atm90e32_button.h +27 -0
  27. esphome/components/atm90e32/sensor.py +15 -11
  28. esphome/components/bedjet/bedjet_codec.h +1 -1
  29. esphome/components/binary/light/binary_light_output.h +3 -2
  30. esphome/components/binary_sensor/__init__.py +5 -5
  31. esphome/components/ble_client/__init__.py +3 -3
  32. esphome/components/ble_client/output/__init__.py +1 -1
  33. esphome/components/ble_client/sensor/__init__.py +4 -3
  34. esphome/components/ble_client/switch/__init__.py +2 -1
  35. esphome/components/ble_client/text_sensor/__init__.py +4 -3
  36. esphome/components/ble_presence/binary_sensor.py +3 -3
  37. esphome/components/ble_rssi/sensor.py +2 -2
  38. esphome/components/ble_scanner/text_sensor.py +1 -1
  39. esphome/components/bluetooth_proxy/__init__.py +3 -3
  40. esphome/components/bme68x_bsec2/__init__.py +196 -0
  41. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +523 -0
  42. esphome/components/bme68x_bsec2/bme68x_bsec2.h +163 -0
  43. esphome/components/bme68x_bsec2/sensor.py +130 -0
  44. esphome/components/bme68x_bsec2/text_sensor.py +33 -0
  45. esphome/components/bme68x_bsec2_i2c/__init__.py +28 -0
  46. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +53 -0
  47. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.h +28 -0
  48. esphome/components/bmp3xx/sensor.py +1 -1
  49. esphome/components/button/__init__.py +4 -4
  50. esphome/components/climate/__init__.py +5 -5
  51. esphome/components/climate/climate.h +1 -1
  52. esphome/components/cover/__init__.py +8 -8
  53. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +11 -7
  54. esphome/components/cst226/touchscreen/cst226_touchscreen.h +1 -1
  55. esphome/components/datetime/__init__.py +11 -13
  56. esphome/components/demo/demo_sensor.h +3 -2
  57. esphome/components/display/display.cpp +31 -0
  58. esphome/components/display/display.h +3 -0
  59. esphome/components/display_menu_base/__init__.py +14 -13
  60. esphome/components/ens160/sensor.py +1 -1
  61. esphome/components/esp32/__init__.py +22 -10
  62. esphome/components/esp32/boards.py +1 -1
  63. esphome/components/esp32/gpio.py +12 -13
  64. esphome/components/esp32/gpio_esp32.py +1 -2
  65. esphome/components/esp32/gpio_esp32_c2.py +1 -2
  66. esphome/components/esp32/gpio_esp32_c3.py +1 -5
  67. esphome/components/esp32/gpio_esp32_c6.py +1 -2
  68. esphome/components/esp32/gpio_esp32_h2.py +1 -2
  69. esphome/components/esp32/gpio_esp32_s2.py +1 -2
  70. esphome/components/esp32/gpio_esp32_s3.py +1 -6
  71. esphome/components/esp32_ble/__init__.py +20 -3
  72. esphome/components/esp32_ble/ble.cpp +9 -1
  73. esphome/components/esp32_ble/ble.h +9 -0
  74. esphome/components/esp32_ble/ble_advertising.cpp +42 -9
  75. esphome/components/esp32_ble/ble_advertising.h +21 -1
  76. esphome/components/esp32_ble_beacon/__init__.py +17 -7
  77. esphome/components/esp32_ble_beacon/esp32_ble_beacon.cpp +45 -113
  78. esphome/components/esp32_ble_beacon/esp32_ble_beacon.h +17 -19
  79. esphome/components/esp32_ble_client/__init__.py +0 -1
  80. esphome/components/esp32_ble_server/__init__.py +2 -3
  81. esphome/components/esp32_ble_tracker/__init__.py +2 -2
  82. esphome/components/esp32_improv/__init__.py +2 -4
  83. esphome/components/ethernet/__init__.py +17 -17
  84. esphome/components/ethernet_info/text_sensor.py +2 -2
  85. esphome/components/event/__init__.py +5 -5
  86. esphome/components/fan/__init__.py +14 -14
  87. esphome/components/fan/fan.cpp +2 -2
  88. esphome/components/fingerprint_grow/fingerprint_grow.cpp +1 -1
  89. esphome/components/fingerprint_grow/fingerprint_grow.h +1 -1
  90. esphome/components/graphical_display_menu/__init__.py +11 -8
  91. esphome/components/haier/haier_base.h +2 -2
  92. esphome/components/homeassistant/__init__.py +8 -1
  93. esphome/components/homeassistant/number/__init__.py +33 -0
  94. esphome/components/homeassistant/number/homeassistant_number.cpp +100 -0
  95. esphome/components/homeassistant/number/homeassistant_number.h +31 -0
  96. esphome/components/homeassistant/switch/__init__.py +30 -0
  97. esphome/components/homeassistant/switch/homeassistant_switch.cpp +59 -0
  98. esphome/components/homeassistant/switch/homeassistant_switch.h +22 -0
  99. esphome/components/host/__init__.py +3 -7
  100. esphome/components/http_request/__init__.py +12 -1
  101. esphome/components/http_request/http_request_arduino.cpp +2 -2
  102. esphome/components/http_request/http_request_idf.cpp +11 -2
  103. esphome/components/http_request/http_request_idf.h +10 -0
  104. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  105. esphome/components/http_request/update/http_request_update.cpp +2 -2
  106. esphome/components/http_request/update/http_request_update.h +2 -1
  107. esphome/components/hx711/hx711.cpp +10 -1
  108. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +1 -1
  109. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +11 -2
  110. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +2 -0
  111. esphome/components/ili9xxx/ili9xxx_defines.h +3 -1
  112. esphome/components/ili9xxx/ili9xxx_display.cpp +9 -22
  113. esphome/components/ili9xxx/ili9xxx_display.h +5 -7
  114. esphome/components/ili9xxx/ili9xxx_init.h +4 -4
  115. esphome/components/improv_base/__init__.py +2 -3
  116. esphome/components/improv_serial/__init__.py +4 -10
  117. esphome/components/improv_serial/improv_serial_component.cpp +4 -0
  118. esphome/components/jsn_sr04t/jsn_sr04t.cpp +18 -1
  119. esphome/components/jsn_sr04t/jsn_sr04t.h +7 -1
  120. esphome/components/jsn_sr04t/sensor.py +13 -0
  121. esphome/components/kalman_combinator/sensor.py +1 -1
  122. esphome/components/light/__init__.py +16 -15
  123. esphome/components/light/addressable_light_effect.h +12 -8
  124. esphome/components/light/automation.h +16 -1
  125. esphome/components/light/automation.py +21 -0
  126. esphome/components/light/base_light_effects.h +5 -5
  127. esphome/components/light/esp_color_correction.h +8 -8
  128. esphome/components/light/types.py +7 -0
  129. esphome/components/lock/__init__.py +3 -3
  130. esphome/components/logger/__init__.py +15 -18
  131. esphome/components/lvgl/__init__.py +346 -0
  132. esphome/components/lvgl/automation.py +226 -0
  133. esphome/components/lvgl/binary_sensor/__init__.py +43 -0
  134. esphome/components/lvgl/defines.py +508 -0
  135. esphome/components/lvgl/encoders.py +77 -0
  136. esphome/components/lvgl/font.cpp +76 -0
  137. esphome/components/lvgl/helpers.py +49 -0
  138. esphome/components/lvgl/light/__init__.py +32 -0
  139. esphome/components/lvgl/light/lvgl_light.h +48 -0
  140. esphome/components/lvgl/lv_validation.py +303 -0
  141. esphome/components/lvgl/lvcode.py +349 -0
  142. esphome/components/lvgl/lvgl_esphome.cpp +407 -0
  143. esphome/components/lvgl/lvgl_esphome.h +274 -0
  144. esphome/components/lvgl/lvgl_hal.h +21 -0
  145. esphome/components/lvgl/number/__init__.py +66 -0
  146. esphome/components/lvgl/number/lvgl_number.h +34 -0
  147. esphome/components/lvgl/schemas.py +436 -0
  148. esphome/components/lvgl/select/__init__.py +55 -0
  149. esphome/components/lvgl/select/lvgl_select.h +62 -0
  150. esphome/components/lvgl/sensor/__init__.py +47 -0
  151. esphome/components/lvgl/styles.py +58 -0
  152. esphome/components/lvgl/switch/__init__.py +56 -0
  153. esphome/components/lvgl/switch/lvgl_switch.h +34 -0
  154. esphome/components/lvgl/text/__init__.py +50 -0
  155. esphome/components/lvgl/text/lvgl_text.h +34 -0
  156. esphome/components/lvgl/text_sensor/__init__.py +42 -0
  157. esphome/components/lvgl/touchscreens.py +45 -0
  158. esphome/components/lvgl/trigger.py +74 -0
  159. esphome/components/lvgl/types.py +191 -0
  160. esphome/components/lvgl/widgets/__init__.py +419 -0
  161. esphome/components/lvgl/widgets/animimg.py +117 -0
  162. esphome/components/lvgl/widgets/arc.py +78 -0
  163. esphome/components/lvgl/widgets/button.py +20 -0
  164. esphome/components/lvgl/widgets/buttonmatrix.py +275 -0
  165. esphome/components/lvgl/widgets/checkbox.py +27 -0
  166. esphome/components/lvgl/widgets/dropdown.py +76 -0
  167. esphome/components/lvgl/widgets/img.py +85 -0
  168. esphome/components/lvgl/widgets/keyboard.py +49 -0
  169. esphome/components/lvgl/widgets/label.py +42 -0
  170. esphome/components/lvgl/widgets/led.py +29 -0
  171. esphome/components/lvgl/widgets/line.py +50 -0
  172. esphome/components/lvgl/widgets/lv_bar.py +55 -0
  173. esphome/components/lvgl/widgets/meter.py +302 -0
  174. esphome/components/lvgl/widgets/msgbox.py +134 -0
  175. esphome/components/lvgl/widgets/obj.py +28 -0
  176. esphome/components/lvgl/widgets/page.py +113 -0
  177. esphome/components/lvgl/widgets/roller.py +77 -0
  178. esphome/components/lvgl/widgets/slider.py +63 -0
  179. esphome/components/lvgl/widgets/spinbox.py +178 -0
  180. esphome/components/lvgl/widgets/spinner.py +43 -0
  181. esphome/components/lvgl/widgets/switch.py +20 -0
  182. esphome/components/lvgl/widgets/tabview.py +114 -0
  183. esphome/components/lvgl/widgets/textarea.py +66 -0
  184. esphome/components/lvgl/widgets/tileview.py +128 -0
  185. esphome/components/m5stack_8angle/__init__.py +33 -0
  186. esphome/components/m5stack_8angle/binary_sensor/__init__.py +30 -0
  187. esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.cpp +17 -0
  188. esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.h +19 -0
  189. esphome/components/m5stack_8angle/light/__init__.py +31 -0
  190. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +45 -0
  191. esphome/components/m5stack_8angle/light/m5stack_8angle_light.h +37 -0
  192. esphome/components/m5stack_8angle/m5stack_8angle.cpp +74 -0
  193. esphome/components/m5stack_8angle/m5stack_8angle.h +34 -0
  194. esphome/components/m5stack_8angle/sensor/__init__.py +66 -0
  195. esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.cpp +24 -0
  196. esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.h +27 -0
  197. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -0
  198. esphome/components/max31856/sensor.py +5 -5
  199. esphome/components/media_player/__init__.py +3 -5
  200. esphome/components/media_player/automation.h +31 -27
  201. esphome/components/micro_wake_word/__init__.py +20 -25
  202. esphome/components/microphone/microphone.h +4 -1
  203. esphome/components/modbus_controller/__init__.py +26 -2
  204. esphome/components/modbus_controller/automation.h +19 -0
  205. esphome/components/modbus_controller/const.py +1 -0
  206. esphome/components/modbus_controller/modbus_controller.cpp +8 -0
  207. esphome/components/modbus_controller/modbus_controller.h +3 -0
  208. esphome/components/mqtt/__init__.py +20 -9
  209. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +128 -0
  210. esphome/components/mqtt/mqtt_alarm_control_panel.h +39 -0
  211. esphome/components/mqtt/mqtt_backend.h +3 -1
  212. esphome/components/mqtt/mqtt_backend_esp32.cpp +4 -1
  213. esphome/components/mqtt/mqtt_backend_esp32.h +3 -1
  214. esphome/components/mqtt/mqtt_backend_esp8266.h +3 -1
  215. esphome/components/mqtt/mqtt_backend_libretiny.h +3 -1
  216. esphome/components/mqtt/mqtt_client.cpp +16 -3
  217. esphome/components/mqtt/mqtt_client.h +5 -1
  218. esphome/components/mqtt/mqtt_component.cpp +32 -4
  219. esphome/components/mqtt/mqtt_const.h +2 -0
  220. esphome/components/network/__init__.py +15 -12
  221. esphome/components/network/ip_address.h +3 -0
  222. esphome/components/network/util.cpp +2 -1
  223. esphome/components/network/util.h +3 -1
  224. esphome/components/nextion/base_component.py +5 -8
  225. esphome/components/number/__init__.py +7 -8
  226. esphome/components/online_image/__init__.py +167 -0
  227. esphome/components/online_image/image_decoder.cpp +44 -0
  228. esphome/components/online_image/image_decoder.h +112 -0
  229. esphome/components/online_image/online_image.cpp +283 -0
  230. esphome/components/online_image/online_image.h +195 -0
  231. esphome/components/online_image/png_image.cpp +68 -0
  232. esphome/components/online_image/png_image.h +33 -0
  233. esphome/components/ota/__init__.py +8 -4
  234. esphome/components/pid/pid_climate.h +2 -0
  235. esphome/components/remote_base/pronto_protocol.cpp +0 -3
  236. esphome/components/remote_transmitter/remote_transmitter.h +1 -1
  237. esphome/components/rgbct/rgbct_light_output.h +3 -2
  238. esphome/components/rgbw/rgbw_light_output.h +3 -2
  239. esphome/components/rgbww/rgbww_light_output.h +3 -2
  240. esphome/components/rp2040_pio_led_strip/led_strip.cpp +31 -5
  241. esphome/components/rp2040_pio_led_strip/led_strip.h +5 -0
  242. esphome/components/rtttl/rtttl.cpp +108 -21
  243. esphome/components/rtttl/rtttl.h +15 -6
  244. esphome/components/select/__init__.py +7 -7
  245. esphome/components/sensor/__init__.py +29 -10
  246. esphome/components/sensor/filter.cpp +8 -0
  247. esphome/components/sensor/filter.h +9 -0
  248. esphome/components/sml/sml_parser.cpp +48 -22
  249. esphome/components/socket/socket.cpp +11 -14
  250. esphome/components/speaker/__init__.py +14 -5
  251. esphome/components/speaker/automation.h +10 -0
  252. esphome/components/speaker/speaker.h +9 -0
  253. esphome/components/spi/spi.cpp +0 -6
  254. esphome/components/spi/spi.h +2 -19
  255. esphome/components/spi_led_strip/spi_led_strip.h +5 -4
  256. esphome/components/sprinkler/sprinkler.cpp +2 -2
  257. esphome/components/sprinkler/sprinkler.h +1 -1
  258. esphome/components/switch/__init__.py +3 -3
  259. esphome/components/text/__init__.py +5 -5
  260. esphome/components/text_sensor/__init__.py +7 -7
  261. esphome/components/time/__init__.py +8 -8
  262. esphome/components/touchscreen/binary_sensor/__init__.py +24 -10
  263. esphome/components/touchscreen/binary_sensor/touchscreen_binary_sensor.cpp +3 -2
  264. esphome/components/touchscreen/binary_sensor/touchscreen_binary_sensor.h +4 -2
  265. esphome/components/uart/uart_component_host.cpp +6 -2
  266. esphome/components/update/__init__.py +33 -15
  267. esphome/components/update/automation.h +23 -0
  268. esphome/components/update/update_entity.h +3 -1
  269. esphome/components/valve/__init__.py +3 -3
  270. esphome/components/voice_assistant/__init__.py +7 -8
  271. esphome/components/wake_on_lan/wake_on_lan.cpp +2 -0
  272. esphome/components/wake_on_lan/wake_on_lan.h +3 -1
  273. esphome/components/watchdog/__init__.py +1 -0
  274. esphome/components/{http_request → watchdog}/watchdog.cpp +0 -2
  275. esphome/components/{http_request → watchdog}/watchdog.h +0 -2
  276. esphome/components/waveshare_epaper/waveshare_epaper.cpp +5 -5
  277. esphome/components/web_server/server_index_v3.h +3615 -3603
  278. esphome/components/web_server/web_server.cpp +0 -209
  279. esphome/components/web_server/web_server.h +1 -1
  280. esphome/components/web_server/web_server_v1.cpp +217 -0
  281. esphome/components/web_server_base/web_server_base.h +1 -0
  282. esphome/components/wifi/__init__.py +15 -14
  283. esphome/components/wifi/wifi_component.cpp +2 -0
  284. esphome/components/wifi/wifi_component.h +7 -1
  285. esphome/components/wifi/wifi_component_esp32_arduino.cpp +5 -2
  286. esphome/components/wifi/wifi_component_esp8266.cpp +2 -0
  287. esphome/components/wifi/wifi_component_esp_idf.cpp +43 -7
  288. esphome/components/wifi/wifi_component_libretiny.cpp +2 -0
  289. esphome/components/wifi/wifi_component_pico_w.cpp +2 -0
  290. esphome/components/wifi/wpa2_eap.py +6 -7
  291. esphome/components/wifi_info/text_sensor.py +3 -3
  292. esphome/components/wifi_info/wifi_info_text_sensor.cpp +2 -0
  293. esphome/components/wifi_info/wifi_info_text_sensor.h +2 -0
  294. esphome/components/wifi_signal/sensor.py +1 -1
  295. esphome/components/wifi_signal/wifi_signal_sensor.cpp +2 -0
  296. esphome/components/wifi_signal/wifi_signal_sensor.h +2 -1
  297. esphome/components/xiaomi_ble/xiaomi_ble.cpp +20 -3
  298. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  299. esphome/components/xiaomi_lywsd02mmc/__init__.py +0 -0
  300. esphome/components/xiaomi_lywsd02mmc/sensor.py +77 -0
  301. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +73 -0
  302. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +37 -0
  303. esphome/config.py +17 -19
  304. esphome/config_validation.py +55 -23
  305. esphome/const.py +25 -9
  306. esphome/core/__init__.py +17 -14
  307. esphome/core/application.h +42 -21
  308. esphome/core/automation.h +5 -3
  309. esphome/core/base_automation.h +3 -2
  310. esphome/core/bytebuffer.cpp +134 -0
  311. esphome/core/bytebuffer.h +96 -0
  312. esphome/core/color.h +24 -16
  313. esphome/core/config.py +3 -3
  314. esphome/core/defines.h +14 -1
  315. esphome/core/entity_base.h +2 -2
  316. esphome/core/entity_helpers.py +1 -2
  317. esphome/core/gpio.h +0 -18
  318. esphome/core/helpers.h +1 -1
  319. esphome/core/optional.h +15 -16
  320. esphome/coroutine.py +1 -1
  321. esphome/cpp_generator.py +1 -1
  322. esphome/cpp_helpers.py +3 -5
  323. esphome/dashboard/core.py +3 -3
  324. esphome/dashboard/dashboard.py +3 -3
  325. esphome/dashboard/entries.py +1 -1
  326. esphome/dashboard/util/file.py +1 -1
  327. esphome/dashboard/web_server.py +3 -3
  328. esphome/external_files.py +5 -3
  329. esphome/final_validate.py +2 -2
  330. esphome/git.py +4 -4
  331. esphome/helpers.py +5 -5
  332. esphome/loader.py +15 -10
  333. esphome/mqtt.py +4 -8
  334. esphome/pins.py +6 -6
  335. esphome/platformio_api.py +5 -5
  336. esphome/storage_json.py +2 -1
  337. esphome/types.py +1 -1
  338. esphome/util.py +2 -3
  339. esphome/voluptuous_schema.py +1 -0
  340. esphome/vscode.py +5 -4
  341. esphome/wizard.py +1 -1
  342. esphome/writer.py +7 -7
  343. esphome/yaml_util.py +3 -3
  344. esphome/zeroconf.py +1 -1
  345. {esphome-2024.7.3.dist-info → esphome-2024.8.0.dist-info}/METADATA +3 -3
  346. {esphome-2024.7.3.dist-info → esphome-2024.8.0.dist-info}/RECORD +350 -244
  347. {esphome-2024.7.3.dist-info → esphome-2024.8.0.dist-info}/LICENSE +0 -0
  348. {esphome-2024.7.3.dist-info → esphome-2024.8.0.dist-info}/WHEEL +0 -0
  349. {esphome-2024.7.3.dist-info → esphome-2024.8.0.dist-info}/entry_points.txt +0 -0
  350. {esphome-2024.7.3.dist-info → esphome-2024.8.0.dist-info}/top_level.txt +0 -0
@@ -163,8 +163,6 @@ class Utility {
163
163
  }
164
164
  };
165
165
 
166
- class SPIDelegateDummy;
167
-
168
166
  // represents a device attached to an SPI bus, with a defined clock rate, mode and bit order. On Arduino this is
169
167
  // a thin wrapper over SPIClass.
170
168
  class SPIDelegate {
@@ -250,21 +248,6 @@ class SPIDelegate {
250
248
  uint32_t data_rate_{1000000};
251
249
  SPIMode mode_{MODE0};
252
250
  GPIOPin *cs_pin_{NullPin::NULL_PIN};
253
- static SPIDelegate *const NULL_DELEGATE; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
254
- };
255
-
256
- /**
257
- * A dummy SPIDelegate that complains if it's used.
258
- */
259
-
260
- class SPIDelegateDummy : public SPIDelegate {
261
- public:
262
- SPIDelegateDummy() = default;
263
-
264
- uint8_t transfer(uint8_t data) override { return 0; }
265
- void end_transaction() override{};
266
-
267
- void begin_transaction() override;
268
251
  };
269
252
 
270
253
  /**
@@ -382,7 +365,7 @@ class SPIClient {
382
365
 
383
366
  virtual void spi_teardown() {
384
367
  this->parent_->unregister_device(this);
385
- this->delegate_ = SPIDelegate::NULL_DELEGATE;
368
+ this->delegate_ = nullptr;
386
369
  }
387
370
 
388
371
  bool spi_is_ready() { return this->delegate_->is_ready(); }
@@ -393,7 +376,7 @@ class SPIClient {
393
376
  uint32_t data_rate_{1000000};
394
377
  SPIComponent *parent_{nullptr};
395
378
  GPIOPin *cs_{nullptr};
396
- SPIDelegate *delegate_{SPIDelegate::NULL_DELEGATE};
379
+ SPIDelegate *delegate_{nullptr};
397
380
  };
398
381
 
399
382
  /**
@@ -13,7 +13,7 @@ class SpiLedStrip : public light::AddressableLight,
13
13
  public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_HIGH, spi::CLOCK_PHASE_TRAILING,
14
14
  spi::DATA_RATE_1MHZ> {
15
15
  public:
16
- void setup() { this->spi_setup(); }
16
+ void setup() override { this->spi_setup(); }
17
17
 
18
18
  int32_t size() const override { return this->num_leds_; }
19
19
 
@@ -43,13 +43,14 @@ class SpiLedStrip : public light::AddressableLight,
43
43
  memset(this->buf_, 0, 4);
44
44
  }
45
45
 
46
- void dump_config() {
46
+ void dump_config() override {
47
47
  esph_log_config(TAG, "SPI LED Strip:");
48
48
  esph_log_config(TAG, " LEDs: %d", this->num_leds_);
49
- if (this->data_rate_ >= spi::DATA_RATE_1MHZ)
49
+ if (this->data_rate_ >= spi::DATA_RATE_1MHZ) {
50
50
  esph_log_config(TAG, " Data rate: %uMHz", (unsigned) (this->data_rate_ / 1000000));
51
- else
51
+ } else {
52
52
  esph_log_config(TAG, " Data rate: %ukHz", (unsigned) (this->data_rate_ / 1000));
53
+ }
53
54
  }
54
55
 
55
56
  void write_state(light::LightState *state) override {
@@ -647,7 +647,7 @@ void Sprinkler::set_valve_run_duration(const optional<size_t> valve_number, cons
647
647
  return;
648
648
  }
649
649
  auto call = this->valve_[valve_number.value()].run_duration_number->make_call();
650
- if (this->valve_[valve_number.value()].run_duration_number->traits.get_unit_of_measurement() == min_str) {
650
+ if (this->valve_[valve_number.value()].run_duration_number->traits.get_unit_of_measurement() == MIN_STR) {
651
651
  call.set_value(run_duration.value() / 60.0);
652
652
  } else {
653
653
  call.set_value(run_duration.value());
@@ -729,7 +729,7 @@ uint32_t Sprinkler::valve_run_duration(const size_t valve_number) {
729
729
  return 0;
730
730
  }
731
731
  if (this->valve_[valve_number].run_duration_number != nullptr) {
732
- if (this->valve_[valve_number].run_duration_number->traits.get_unit_of_measurement() == min_str) {
732
+ if (this->valve_[valve_number].run_duration_number->traits.get_unit_of_measurement() == MIN_STR) {
733
733
  return static_cast<uint32_t>(roundf(this->valve_[valve_number].run_duration_number->state * 60));
734
734
  } else {
735
735
  return static_cast<uint32_t>(roundf(this->valve_[valve_number].run_duration_number->state));
@@ -11,7 +11,7 @@
11
11
  namespace esphome {
12
12
  namespace sprinkler {
13
13
 
14
- const std::string min_str = "min";
14
+ const std::string MIN_STR = "min";
15
15
 
16
16
  enum SprinklerState : uint8_t {
17
17
  // NOTE: these states are used by both SprinklerValveOperator and Sprinkler (the controller)!
@@ -1,8 +1,8 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
1
  from esphome import automation
4
2
  from esphome.automation import Condition, maybe_simple_id
3
+ import esphome.codegen as cg
5
4
  from esphome.components import mqtt, web_server
5
+ import esphome.config_validation as cv
6
6
  from esphome.const import (
7
7
  CONF_DEVICE_CLASS,
8
8
  CONF_ENTITY_CATEGORY,
@@ -10,11 +10,11 @@ from esphome.const import (
10
10
  CONF_ID,
11
11
  CONF_INVERTED,
12
12
  CONF_MQTT_ID,
13
- CONF_WEB_SERVER_ID,
14
13
  CONF_ON_TURN_OFF,
15
14
  CONF_ON_TURN_ON,
16
15
  CONF_RESTORE_MODE,
17
16
  CONF_TRIGGER_ID,
17
+ CONF_WEB_SERVER_ID,
18
18
  DEVICE_CLASS_EMPTY,
19
19
  DEVICE_CLASS_OUTLET,
20
20
  DEVICE_CLASS_SWITCH,
@@ -1,18 +1,18 @@
1
1
  from typing import Optional
2
- import esphome.codegen as cg
3
- import esphome.config_validation as cv
2
+
4
3
  from esphome import automation
4
+ import esphome.codegen as cg
5
5
  from esphome.components import mqtt, web_server
6
+ import esphome.config_validation as cv
6
7
  from esphome.const import (
7
8
  CONF_ID,
8
9
  CONF_MODE,
10
+ CONF_MQTT_ID,
9
11
  CONF_ON_VALUE,
10
12
  CONF_TRIGGER_ID,
11
- CONF_MQTT_ID,
12
- CONF_WEB_SERVER_ID,
13
13
  CONF_VALUE,
14
+ CONF_WEB_SERVER_ID,
14
15
  )
15
-
16
16
  from esphome.core import CORE, coroutine_with_priority
17
17
  from esphome.cpp_helpers import setup_entity
18
18
 
@@ -1,21 +1,21 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
1
  from esphome import automation
2
+ import esphome.codegen as cg
4
3
  from esphome.components import mqtt, web_server
4
+ import esphome.config_validation as cv
5
5
  from esphome.const import (
6
6
  CONF_DEVICE_CLASS,
7
7
  CONF_ENTITY_CATEGORY,
8
8
  CONF_FILTERS,
9
+ CONF_FROM,
9
10
  CONF_ICON,
10
11
  CONF_ID,
11
- CONF_ON_VALUE,
12
- CONF_ON_RAW_VALUE,
13
- CONF_TRIGGER_ID,
14
12
  CONF_MQTT_ID,
15
- CONF_WEB_SERVER_ID,
13
+ CONF_ON_RAW_VALUE,
14
+ CONF_ON_VALUE,
16
15
  CONF_STATE,
17
- CONF_FROM,
18
16
  CONF_TO,
17
+ CONF_TRIGGER_ID,
18
+ CONF_WEB_SERVER_ID,
19
19
  DEVICE_CLASS_DATE,
20
20
  DEVICE_CLASS_EMPTY,
21
21
  DEVICE_CLASS_TIMESTAMP,
@@ -1,32 +1,32 @@
1
- import logging
2
1
  from importlib import resources
2
+ import logging
3
3
  from typing import Optional
4
4
 
5
5
  import tzlocal
6
6
 
7
+ from esphome import automation
8
+ from esphome.automation import Condition
7
9
  import esphome.codegen as cg
8
10
  import esphome.config_validation as cv
9
- from esphome import automation
10
11
  from esphome.const import (
11
- CONF_ID,
12
+ CONF_AT,
12
13
  CONF_CRON,
13
14
  CONF_DAYS_OF_MONTH,
14
15
  CONF_DAYS_OF_WEEK,
16
+ CONF_HOUR,
15
17
  CONF_HOURS,
18
+ CONF_ID,
19
+ CONF_MINUTE,
16
20
  CONF_MINUTES,
17
21
  CONF_MONTHS,
18
22
  CONF_ON_TIME,
19
23
  CONF_ON_TIME_SYNC,
24
+ CONF_SECOND,
20
25
  CONF_SECONDS,
21
26
  CONF_TIMEZONE,
22
27
  CONF_TRIGGER_ID,
23
- CONF_AT,
24
- CONF_SECOND,
25
- CONF_HOUR,
26
- CONF_MINUTE,
27
28
  )
28
29
  from esphome.core import coroutine_with_priority
29
- from esphome.automation import Condition
30
30
 
31
31
  _LOGGER = logging.getLogger(__name__)
32
32
 
@@ -1,10 +1,9 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
-
4
2
  from esphome.components import binary_sensor, display
5
- from esphome.const import CONF_PAGE_ID
3
+ import esphome.config_validation as cv
4
+ from esphome.const import CONF_PAGE_ID, CONF_PAGES
6
5
 
7
- from .. import touchscreen_ns, CONF_TOUCHSCREEN_ID, Touchscreen, TouchListener
6
+ from .. import CONF_TOUCHSCREEN_ID, TouchListener, Touchscreen, touchscreen_ns
8
7
 
9
8
  DEPENDENCIES = ["touchscreen"]
10
9
 
@@ -22,7 +21,7 @@ CONF_Y_MIN = "y_min"
22
21
  CONF_Y_MAX = "y_max"
23
22
 
24
23
 
25
- def validate_coords(config):
24
+ def _validate_coords(config):
26
25
  if (
27
26
  config[CONF_X_MAX] < config[CONF_X_MIN]
28
27
  or config[CONF_Y_MAX] < config[CONF_Y_MIN]
@@ -33,6 +32,15 @@ def validate_coords(config):
33
32
  return config
34
33
 
35
34
 
35
+ def _set_pages(config: dict) -> dict:
36
+ if CONF_PAGES in config or CONF_PAGE_ID not in config:
37
+ return config
38
+
39
+ config = config.copy()
40
+ config[CONF_PAGES] = [config.pop(CONF_PAGE_ID)]
41
+ return config
42
+
43
+
36
44
  CONFIG_SCHEMA = cv.All(
37
45
  binary_sensor.binary_sensor_schema(TouchscreenBinarySensor)
38
46
  .extend(
@@ -42,11 +50,17 @@ CONFIG_SCHEMA = cv.All(
42
50
  cv.Required(CONF_X_MAX): cv.int_range(min=0, max=2000),
43
51
  cv.Required(CONF_Y_MIN): cv.int_range(min=0, max=2000),
44
52
  cv.Required(CONF_Y_MAX): cv.int_range(min=0, max=2000),
45
- cv.Optional(CONF_PAGE_ID): cv.use_id(display.DisplayPage),
53
+ cv.Exclusive(CONF_PAGE_ID, group_of_exclusion=CONF_PAGES): cv.use_id(
54
+ display.DisplayPage
55
+ ),
56
+ cv.Exclusive(CONF_PAGES, group_of_exclusion=CONF_PAGES): cv.ensure_list(
57
+ cv.use_id(display.DisplayPage)
58
+ ),
46
59
  }
47
60
  )
48
61
  .extend(cv.COMPONENT_SCHEMA),
49
- validate_coords,
62
+ _validate_coords,
63
+ _set_pages,
50
64
  )
51
65
 
52
66
 
@@ -64,6 +78,6 @@ async def to_code(config):
64
78
  )
65
79
  )
66
80
 
67
- if CONF_PAGE_ID in config:
68
- page = await cg.get_variable(config[CONF_PAGE_ID])
69
- cg.add(var.set_page(page))
81
+ for page_id in config.get(CONF_PAGES, []):
82
+ page = await cg.get_variable(page_id)
83
+ cg.add(var.add_page(page))
@@ -11,8 +11,9 @@ void TouchscreenBinarySensor::setup() {
11
11
  void TouchscreenBinarySensor::touch(TouchPoint tp) {
12
12
  bool touched = (tp.x >= this->x_min_ && tp.x <= this->x_max_ && tp.y >= this->y_min_ && tp.y <= this->y_max_);
13
13
 
14
- if (this->page_ != nullptr) {
15
- touched &= this->page_ == this->parent_->get_display()->get_active_page();
14
+ if (!this->pages_.empty()) {
15
+ auto *current_page = this->parent_->get_display()->get_active_page();
16
+ touched &= std::find(this->pages_.begin(), this->pages_.end(), current_page) != this->pages_.end();
16
17
  }
17
18
  if (touched) {
18
19
  this->publish_state(true);
@@ -6,6 +6,8 @@
6
6
  #include "esphome/core/component.h"
7
7
  #include "esphome/core/helpers.h"
8
8
 
9
+ #include <vector>
10
+
9
11
  namespace esphome {
10
12
  namespace touchscreen {
11
13
 
@@ -30,14 +32,14 @@ class TouchscreenBinarySensor : public binary_sensor::BinarySensor,
30
32
  int16_t get_width() { return this->x_max_ - this->x_min_; }
31
33
  int16_t get_height() { return this->y_max_ - this->y_min_; }
32
34
 
33
- void set_page(display::DisplayPage *page) { this->page_ = page; }
35
+ void add_page(display::DisplayPage *page) { this->pages_.push_back(page); }
34
36
 
35
37
  void touch(TouchPoint tp) override;
36
38
  void release() override;
37
39
 
38
40
  protected:
39
41
  int16_t x_min_, x_max_, y_min_, y_max_;
40
- display::DisplayPage *page_{nullptr};
42
+ std::vector<display::DisplayPage *> pages_{};
41
43
  };
42
44
 
43
45
  } // namespace touchscreen
@@ -5,8 +5,8 @@
5
5
  #include "esphome/core/helpers.h"
6
6
  #include "esphome/core/log.h"
7
7
 
8
- #ifndef __linux__
9
- #error This HostUartComponent implementation is only for Linux
8
+ #if !(defined(__linux__) || defined(__APPLE__))
9
+ #error This HostUartComponent implementation is not supported on this host OS
10
10
  #endif
11
11
 
12
12
  #include <stdio.h>
@@ -24,6 +24,9 @@
24
24
  namespace {
25
25
 
26
26
  speed_t get_baud(int baud) {
27
+ #ifdef __APPLE__
28
+ return baud;
29
+ #else
27
30
  switch (baud) {
28
31
  case 50:
29
32
  return B50;
@@ -88,6 +91,7 @@ speed_t get_baud(int baud) {
88
91
  default:
89
92
  return B0;
90
93
  }
94
+ #endif
91
95
  }
92
96
 
93
97
  } // namespace
@@ -1,10 +1,11 @@
1
1
  from esphome import automation
2
+ import esphome.codegen as cg
2
3
  from esphome.components import mqtt, web_server
3
4
  import esphome.config_validation as cv
4
- import esphome.codegen as cg
5
5
  from esphome.const import (
6
6
  CONF_DEVICE_CLASS,
7
7
  CONF_ENTITY_CATEGORY,
8
+ CONF_FORCE_UPDATE,
8
9
  CONF_ID,
9
10
  CONF_MQTT_ID,
10
11
  CONF_WEB_SERVER_ID,
@@ -23,8 +24,12 @@ UpdateEntity = update_ns.class_("UpdateEntity", cg.EntityBase)
23
24
 
24
25
  UpdateInfo = update_ns.struct("UpdateInfo")
25
26
 
26
- PerformAction = update_ns.class_("PerformAction", automation.Action)
27
- IsAvailableCondition = update_ns.class_("IsAvailableCondition", automation.Condition)
27
+ PerformAction = update_ns.class_(
28
+ "PerformAction", automation.Action, cg.Parented.template(UpdateEntity)
29
+ )
30
+ IsAvailableCondition = update_ns.class_(
31
+ "IsAvailableCondition", automation.Condition, cg.Parented.template(UpdateEntity)
32
+ )
28
33
 
29
34
  DEVICE_CLASSES = [
30
35
  DEVICE_CLASS_EMPTY,
@@ -92,24 +97,37 @@ async def to_code(config):
92
97
  cg.add_global(update_ns.using)
93
98
 
94
99
 
95
- UPDATE_AUTOMATION_SCHEMA = cv.Schema(
96
- {
97
- cv.GenerateID(): cv.use_id(UpdateEntity),
98
- }
100
+ @automation.register_action(
101
+ "update.perform",
102
+ PerformAction,
103
+ automation.maybe_simple_id(
104
+ {
105
+ cv.GenerateID(): cv.use_id(UpdateEntity),
106
+ cv.Optional(CONF_FORCE_UPDATE, default=False): cv.templatable(cv.boolean),
107
+ }
108
+ ),
99
109
  )
100
-
101
-
102
- @automation.register_action("update.perform", PerformAction, UPDATE_AUTOMATION_SCHEMA)
103
110
  async def update_perform_action_to_code(config, action_id, template_arg, args):
104
- paren = await cg.get_variable(config[CONF_ID])
105
- return cg.new_Pvariable(action_id, paren, paren)
111
+ var = cg.new_Pvariable(action_id, template_arg)
112
+ await cg.register_parented(var, config[CONF_ID])
113
+
114
+ force = await cg.templatable(config[CONF_FORCE_UPDATE], args, cg.bool_)
115
+ cg.add(var.set_force(force))
116
+ return var
106
117
 
107
118
 
108
119
  @automation.register_condition(
109
- "update.is_available", IsAvailableCondition, UPDATE_AUTOMATION_SCHEMA
120
+ "update.is_available",
121
+ IsAvailableCondition,
122
+ automation.maybe_simple_id(
123
+ {
124
+ cv.GenerateID(): cv.use_id(UpdateEntity),
125
+ }
126
+ ),
110
127
  )
111
128
  async def update_is_available_condition_to_code(
112
129
  config, condition_id, template_arg, args
113
130
  ):
114
- paren = await cg.get_variable(config[CONF_ID])
115
- return cg.new_Pvariable(condition_id, paren, paren)
131
+ var = cg.new_Pvariable(condition_id, template_arg)
132
+ await cg.register_parented(var, config[CONF_ID])
133
+ return var
@@ -0,0 +1,23 @@
1
+ #pragma once
2
+
3
+ #include "update_entity.h"
4
+
5
+ #include "esphome/core/automation.h"
6
+
7
+ namespace esphome {
8
+ namespace update {
9
+
10
+ template<typename... Ts> class PerformAction : public Action<Ts...>, public Parented<UpdateEntity> {
11
+ TEMPLATABLE_VALUE(bool, force)
12
+
13
+ public:
14
+ void play(Ts... x) override { this->parent_->perform(this->force_.value(x...)); }
15
+ };
16
+
17
+ template<typename... Ts> class IsAvailableCondition : public Condition<Ts...>, public Parented<UpdateEntity> {
18
+ public:
19
+ bool check(Ts... x) override { return this->parent_->state == UPDATE_STATE_AVAILABLE; }
20
+ };
21
+
22
+ } // namespace update
23
+ } // namespace esphome
@@ -32,7 +32,9 @@ class UpdateEntity : public EntityBase, public EntityBase_DeviceClass {
32
32
 
33
33
  void publish_state();
34
34
 
35
- virtual void perform() = 0;
35
+ void perform() { this->perform(false); }
36
+ virtual void perform(bool force) = 0;
37
+ virtual void check() = 0;
36
38
 
37
39
  const UpdateInfo &update_info = update_info_;
38
40
  const UpdateState &state = state_;
@@ -1,8 +1,8 @@
1
- import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
1
  from esphome import automation
4
- from esphome.automation import maybe_simple_id, Condition
2
+ from esphome.automation import Condition, maybe_simple_id
3
+ import esphome.codegen as cg
5
4
  from esphome.components import mqtt, web_server
5
+ import esphome.config_validation as cv
6
6
  from esphome.const import (
7
7
  CONF_DEVICE_CLASS,
8
8
  CONF_ID,
@@ -1,18 +1,18 @@
1
- import esphome.config_validation as cv
1
+ from esphome import automation
2
+ from esphome.automation import register_action, register_condition
2
3
  import esphome.codegen as cg
3
-
4
+ from esphome.components import media_player, microphone, speaker
5
+ import esphome.config_validation as cv
4
6
  from esphome.const import (
5
7
  CONF_ID,
6
- CONF_MICROPHONE,
7
- CONF_SPEAKER,
8
8
  CONF_MEDIA_PLAYER,
9
+ CONF_MICROPHONE,
9
10
  CONF_ON_CLIENT_CONNECTED,
10
11
  CONF_ON_CLIENT_DISCONNECTED,
12
+ CONF_ON_ERROR,
11
13
  CONF_ON_IDLE,
14
+ CONF_SPEAKER,
12
15
  )
13
- from esphome import automation
14
- from esphome.automation import register_action, register_condition
15
- from esphome.components import microphone, speaker, media_player
16
16
 
17
17
  AUTO_LOAD = ["socket"]
18
18
  DEPENDENCIES = ["api", "microphone"]
@@ -20,7 +20,6 @@ DEPENDENCIES = ["api", "microphone"]
20
20
  CODEOWNERS = ["@jesserockz"]
21
21
 
22
22
  CONF_ON_END = "on_end"
23
- CONF_ON_ERROR = "on_error"
24
23
  CONF_ON_INTENT_END = "on_intent_end"
25
24
  CONF_ON_INTENT_START = "on_intent_start"
26
25
  CONF_ON_LISTENING = "on_listening"
@@ -1,4 +1,5 @@
1
1
  #include "wake_on_lan.h"
2
+ #ifdef USE_NETWORK
2
3
  #include "esphome/core/log.h"
3
4
  #include "esphome/components/network/ip_address.h"
4
5
  #include "esphome/components/network/util.h"
@@ -85,3 +86,4 @@ void WakeOnLanButton::setup() {
85
86
 
86
87
  } // namespace wake_on_lan
87
88
  } // namespace esphome
89
+ #endif
@@ -1,5 +1,6 @@
1
1
  #pragma once
2
-
2
+ #include "esphome/core/defines.h"
3
+ #ifdef USE_NETWORK
3
4
  #include "esphome/components/button/button.h"
4
5
  #include "esphome/core/component.h"
5
6
  #if defined(USE_SOCKET_IMPL_BSD_SOCKETS) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS)
@@ -32,3 +33,4 @@ class WakeOnLanButton : public button::Button, public Component {
32
33
 
33
34
  } // namespace wake_on_lan
34
35
  } // namespace esphome
36
+ #endif
@@ -0,0 +1 @@
1
+ CODEOWNERS = ["@oarcher"]
@@ -15,7 +15,6 @@
15
15
  #endif
16
16
 
17
17
  namespace esphome {
18
- namespace http_request {
19
18
  namespace watchdog {
20
19
 
21
20
  static const char *const TAG = "http_request.watchdog";
@@ -72,5 +71,4 @@ uint32_t WatchdogManager::get_timeout_() {
72
71
  }
73
72
 
74
73
  } // namespace watchdog
75
- } // namespace http_request
76
74
  } // namespace esphome
@@ -5,7 +5,6 @@
5
5
  #include <cstdint>
6
6
 
7
7
  namespace esphome {
8
- namespace http_request {
9
8
  namespace watchdog {
10
9
 
11
10
  class WatchdogManager {
@@ -22,5 +21,4 @@ class WatchdogManager {
22
21
  };
23
22
 
24
23
  } // namespace watchdog
25
- } // namespace http_request
26
24
  } // namespace esphome
@@ -480,7 +480,7 @@ void HOT WaveshareEPaperTypeA::display() {
480
480
  this->start_data_();
481
481
  switch (this->model_) {
482
482
  case TTGO_EPAPER_2_13_IN_B1: { // block needed because of variable initializations
483
- int16_t wb = ((this->get_width_internal()) >> 3);
483
+ int16_t wb = ((this->get_width_controller()) >> 3);
484
484
  for (int i = 0; i < this->get_height_internal(); i++) {
485
485
  for (int j = 0; j < wb; j++) {
486
486
  int idx = j + (this->get_height_internal() - 1 - i) * wb;
@@ -766,7 +766,7 @@ void WaveshareEPaper2P7InV2::initialize() {
766
766
  // XRAM_START_AND_END_POSITION
767
767
  this->command(0x44);
768
768
  this->data(0x00);
769
- this->data(((get_width_internal() - 1) >> 3) & 0xFF);
769
+ this->data(((this->get_width_controller() - 1) >> 3) & 0xFF);
770
770
  // YRAM_START_AND_END_POSITION
771
771
  this->command(0x45);
772
772
  this->data(0x00);
@@ -928,8 +928,8 @@ void HOT WaveshareEPaper2P7InB::display() {
928
928
 
929
929
  // TCON_RESOLUTION
930
930
  this->command(0x61);
931
- this->data(this->get_width_internal() >> 8);
932
- this->data(this->get_width_internal() & 0xff); // 176
931
+ this->data(this->get_width_controller() >> 8);
932
+ this->data(this->get_width_controller() & 0xff); // 176
933
933
  this->data(this->get_height_internal() >> 8);
934
934
  this->data(this->get_height_internal() & 0xff); // 264
935
935
 
@@ -994,7 +994,7 @@ void WaveshareEPaper2P7InBV2::initialize() {
994
994
  // self.SetWindows(0, 0, self.width-1, self.height-1)
995
995
  // SetWindows(self, Xstart, Ystart, Xend, Yend):
996
996
 
997
- uint32_t xend = this->get_width_internal() - 1;
997
+ uint32_t xend = this->get_width_controller() - 1;
998
998
  uint32_t yend = this->get_height_internal() - 1;
999
999
  this->command(0x44);
1000
1000
  this->data(0x00);