esphome 2025.6.2__py3-none-any.whl → 2025.7.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.
- esphome/__main__.py +1 -3
- esphome/codegen.py +2 -0
- esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
- esphome/components/adc/__init__.py +25 -1
- esphome/components/adc/adc_sensor.h +11 -11
- esphome/components/adc/adc_sensor_common.cpp +1 -1
- esphome/components/adc/adc_sensor_esp32.cpp +16 -8
- esphome/components/ade7880/ade7880.h +0 -2
- esphome/components/ads1115/ads1115.h +0 -1
- esphome/components/ads1118/ads1118.h +0 -1
- esphome/components/ags10/ags10.h +0 -2
- esphome/components/aic3204/aic3204.h +0 -1
- esphome/components/alarm_control_panel/__init__.py +5 -2
- esphome/components/alpha3/alpha3.h +0 -1
- esphome/components/am43/cover/am43_cover.h +0 -1
- esphome/components/am43/sensor/am43_sensor.h +0 -1
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
- esphome/components/anova/anova.cpp +5 -1
- esphome/components/anova/anova.h +0 -1
- esphome/components/apds9960/apds9960.cpp +1 -1
- esphome/components/api/__init__.py +57 -21
- esphome/components/api/api_connection.cpp +344 -539
- esphome/components/api/api_connection.h +224 -141
- esphome/components/api/api_frame_helper.cpp +91 -127
- esphome/components/api/api_frame_helper.h +64 -54
- esphome/components/api/api_pb2.cpp +1837 -9044
- esphome/components/api/api_pb2.h +532 -685
- esphome/components/api/api_pb2_dump.cpp +4432 -0
- esphome/components/api/api_pb2_service.cpp +184 -425
- esphome/components/api/api_pb2_service.h +13 -6
- esphome/components/api/api_server.cpp +131 -167
- esphome/components/api/api_server.h +38 -10
- esphome/components/api/client.py +10 -4
- esphome/components/api/custom_api_device.h +8 -0
- esphome/components/api/list_entities.cpp +37 -104
- esphome/components/api/list_entities.h +33 -23
- esphome/components/api/proto.h +532 -26
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- esphome/components/api/user_services.h +2 -0
- esphome/components/as3935_spi/as3935_spi.h +0 -2
- esphome/components/as5600/as5600.h +0 -1
- esphome/components/async_tcp/__init__.py +14 -5
- esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
- esphome/components/atm90e32/atm90e32.cpp +2 -1
- esphome/components/audio/audio_decoder.cpp +1 -1
- esphome/components/audio/audio_transfer_buffer.cpp +2 -2
- esphome/components/b_parasite/b_parasite.h +0 -1
- esphome/components/bedjet/bedjet_hub.cpp +5 -1
- esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
- esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
- esphome/components/bh1750/bh1750.cpp +5 -5
- esphome/components/binary_sensor/__init__.py +82 -5
- esphome/components/binary_sensor/automation.h +19 -1
- esphome/components/binary_sensor/binary_sensor.cpp +12 -30
- esphome/components/binary_sensor/binary_sensor.h +11 -25
- esphome/components/binary_sensor/filter.cpp +29 -24
- esphome/components/binary_sensor/filter.h +20 -10
- esphome/components/ble_client/output/ble_binary_output.h +0 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
- esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_sensor.h +0 -1
- esphome/components/ble_client/switch/ble_switch.h +0 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
- esphome/components/ble_presence/ble_presence_device.h +0 -1
- esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
- esphome/components/ble_scanner/ble_scanner.h +0 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
- esphome/components/bme680/sensor.py +1 -1
- esphome/components/bmp581/bmp581.h +0 -2
- esphome/components/button/__init__.py +5 -2
- esphome/components/camera/__init__.py +1 -0
- esphome/components/camera/camera.cpp +22 -0
- esphome/components/camera/camera.h +80 -0
- esphome/components/canbus/__init__.py +1 -0
- esphome/components/cap1188/cap1188.h +0 -1
- esphome/components/captive_portal/__init__.py +12 -2
- esphome/components/captive_portal/captive_portal.cpp +12 -2
- esphome/components/captive_portal/captive_portal.h +5 -2
- esphome/components/ccs811/ccs811.h +0 -2
- esphome/components/climate/__init__.py +5 -2
- esphome/components/cm1106/sensor.py +2 -2
- esphome/components/const/__init__.py +2 -0
- esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
- esphome/components/copy/button/copy_button.h +0 -1
- esphome/components/copy/cover/copy_cover.h +0 -1
- esphome/components/copy/fan/copy_fan.h +0 -1
- esphome/components/copy/lock/copy_lock.h +0 -1
- esphome/components/copy/number/copy_number.h +0 -1
- esphome/components/copy/select/copy_select.h +0 -1
- esphome/components/copy/sensor/copy_sensor.h +0 -1
- esphome/components/copy/switch/copy_switch.h +0 -1
- esphome/components/copy/text/copy_text.h +0 -1
- esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
- esphome/components/cover/__init__.py +5 -2
- esphome/components/cs5460a/cs5460a.h +0 -1
- esphome/components/datetime/__init__.py +4 -2
- esphome/components/debug/__init__.py +20 -0
- esphome/components/debug/debug_esp32.cpp +2 -0
- esphome/components/deep_sleep/__init__.py +43 -9
- esphome/components/demo/__init__.py +2 -2
- esphome/components/display/display.cpp +4 -3
- esphome/components/display/display.h +0 -2
- esphome/components/display/display_buffer.cpp +1 -1
- esphome/components/ds2484/__init__.py +1 -0
- esphome/components/ds2484/ds2484.cpp +209 -0
- esphome/components/ds2484/ds2484.h +43 -0
- esphome/components/ds2484/one_wire.py +37 -0
- esphome/components/duty_time/duty_time_sensor.h +0 -1
- esphome/components/ens160_base/ens160_base.h +0 -1
- esphome/components/es7210/es7210.h +0 -1
- esphome/components/es7243e/es7243e.h +0 -1
- esphome/components/es8156/es8156.h +0 -1
- esphome/components/es8311/es8311.h +0 -1
- esphome/components/es8388/es8388.h +0 -1
- esphome/components/esp32/__init__.py +103 -135
- esphome/components/esp32/core.cpp +0 -4
- esphome/components/esp32/gpio.h +1 -1
- esphome/components/esp32/helpers.cpp +69 -0
- esphome/components/esp32_ble/ble.cpp +5 -6
- esphome/components/esp32_ble/ble.h +29 -14
- esphome/components/esp32_ble/ble_event.h +6 -6
- esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
- esphome/components/esp32_ble_client/ble_client_base.h +24 -9
- esphome/components/esp32_ble_tracker/__init__.py +2 -8
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
- esphome/components/esp32_camera/__init__.py +112 -98
- esphome/components/esp32_camera/esp32_camera.cpp +41 -31
- esphome/components/esp32_camera/esp32_camera.h +35 -30
- esphome/components/esp32_camera_web_server/__init__.py +2 -1
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
- esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
- esphome/components/esp32_hall/sensor.py +2 -21
- esphome/components/esp32_hosted/__init__.py +101 -0
- esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
- esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
- esphome/components/esp32_rmt/__init__.py +0 -58
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
- esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
- esphome/components/esp32_rmt_led_strip/light.py +14 -76
- esphome/components/esp32_touch/esp32_touch.h +174 -28
- esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +2 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -0
- esphome/components/esp_ldo/__init__.py +10 -8
- esphome/components/esp_ldo/esp_ldo.h +3 -0
- esphome/components/esphome/ota/__init__.py +1 -0
- esphome/components/esphome/ota/ota_esphome.cpp +24 -19
- esphome/components/ethernet/__init__.py +42 -23
- esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
- esphome/components/ethernet/ethernet_component.cpp +69 -29
- esphome/components/ethernet/ethernet_component.h +18 -10
- esphome/components/event/__init__.py +5 -2
- esphome/components/ezo/ezo.h +0 -1
- esphome/components/ezo_pmp/ezo_pmp.h +0 -1
- esphome/components/fan/__init__.py +5 -2
- esphome/components/fan/fan.cpp +4 -0
- esphome/components/feedback/feedback_cover.h +0 -1
- esphome/components/font/__init__.py +92 -82
- esphome/components/font/font.cpp +9 -2
- esphome/components/font/font.h +20 -5
- esphome/components/fs3000/fs3000.h +0 -1
- esphome/components/gcja5/gcja5.h +0 -1
- esphome/components/gl_r01_i2c/__init__.py +0 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
- esphome/components/gl_r01_i2c/sensor.py +36 -0
- esphome/components/gp8403/gp8403.h +0 -1
- esphome/components/gpio/binary_sensor/__init__.py +39 -1
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
- esphome/components/he60r/he60r.h +0 -1
- esphome/components/heatpumpir/climate.py +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +1 -0
- esphome/components/heatpumpir/heatpumpir.h +1 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
- esphome/components/host/__init__.py +3 -1
- esphome/components/host/helpers.cpp +57 -0
- esphome/components/http_request/__init__.py +19 -1
- esphome/components/http_request/http_request.h +1 -1
- esphome/components/http_request/http_request_arduino.cpp +0 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/http_request_idf.cpp +0 -1
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +35 -16
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
- esphome/components/hydreon_rgxx/sensor.py +1 -1
- esphome/components/i2c/__init__.py +23 -11
- esphome/components/i2c/i2c_bus.h +8 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
- esphome/components/i2c/i2c_bus_arduino.h +6 -3
- esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
- esphome/components/i2c_device/i2c_device.h +0 -1
- esphome/components/i2s_audio/__init__.py +2 -10
- esphome/components/i2s_audio/i2s_audio.cpp +1 -5
- esphome/components/i2s_audio/media_player/__init__.py +2 -2
- esphome/components/i2s_audio/speaker/__init__.py +1 -1
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
- esphome/components/iaqcore/iaqcore.h +0 -2
- esphome/components/image/__init__.py +123 -24
- esphome/components/improv_serial/improv_serial_component.cpp +0 -4
- esphome/components/ina219/ina219.cpp +7 -0
- esphome/components/ina219/ina219.h +1 -0
- esphome/components/ina260/ina260.h +0 -2
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
- esphome/components/inkplate6/display.py +15 -0
- esphome/components/inkplate6/inkplate.cpp +2 -2
- esphome/components/integration/integration_sensor.h +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +8 -27
- esphome/components/internal_temperature/sensor.py +0 -26
- esphome/components/interval/interval.h +0 -2
- esphome/components/json/__init__.py +1 -1
- esphome/components/json/json_util.cpp +56 -63
- esphome/components/ld2410/button/__init__.py +3 -3
- esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2410/ld2410.cpp +421 -268
- esphome/components/ld2410/ld2410.h +44 -146
- esphome/components/ld2410/number/__init__.py +2 -2
- esphome/components/ld2410/sensor.py +1 -1
- esphome/components/ld2410/switch/__init__.py +1 -1
- esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.cpp +2 -2
- esphome/components/ld2420/button/reconfig_buttons.cpp +1 -1
- esphome/components/ld2420/ld2420.cpp +252 -147
- esphome/components/ld2420/ld2420.h +52 -126
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/number/gate_config_number.cpp +1 -1
- esphome/components/ld2420/select/operating_mode_select.cpp +1 -1
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.cpp +2 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2420/text_sensor/text_sensor.cpp +2 -2
- esphome/components/ld2450/button/__init__.py +3 -3
- esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2450/ld2450.cpp +384 -232
- esphome/components/ld2450/ld2450.h +60 -69
- esphome/components/ld2450/switch/__init__.py +1 -1
- esphome/components/ledc/ledc_output.cpp +1 -63
- esphome/components/libretiny/__init__.py +5 -3
- esphome/components/libretiny/const.py +5 -0
- esphome/components/libretiny/generate_components.py +1 -0
- esphome/components/libretiny/helpers.cpp +35 -0
- esphome/components/libretiny/lt_component.cpp +5 -3
- esphome/components/light/__init__.py +4 -2
- esphome/components/light/addressable_light.h +3 -3
- esphome/components/light/light_call.cpp +180 -243
- esphome/components/light/light_call.h +72 -20
- esphome/components/light/light_color_values.h +14 -14
- esphome/components/light/light_json_schema.cpp +17 -16
- esphome/components/light/light_state.h +15 -13
- esphome/components/light/transformers.h +2 -2
- esphome/components/ln882x/__init__.py +52 -0
- esphome/components/ln882x/boards.py +285 -0
- esphome/components/lock/__init__.py +5 -2
- esphome/components/logger/__init__.py +40 -3
- esphome/components/logger/logger.cpp +47 -12
- esphome/components/logger/logger.h +80 -49
- esphome/components/logger/logger_esp32.cpp +3 -3
- esphome/components/lps22/__init__.py +0 -0
- esphome/components/lps22/lps22.cpp +75 -0
- esphome/components/lps22/lps22.h +27 -0
- esphome/components/lps22/sensor.py +58 -0
- esphome/components/ltr390/ltr390.h +0 -1
- esphome/components/ltr501/ltr501.h +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
- esphome/components/lvgl/__init__.py +1 -1
- esphome/components/lvgl/schemas.py +66 -6
- esphome/components/lvgl/styles.py +24 -16
- esphome/components/lvgl/widgets/__init__.py +12 -2
- esphome/components/lvgl/widgets/lv_bar.py +40 -19
- esphome/components/lvgl/widgets/meter.py +20 -13
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
- esphome/components/max9611/max9611.h +0 -1
- esphome/components/mcp23016/__init__.py +1 -1
- esphome/components/mcp23xxx_base/__init__.py +1 -1
- esphome/components/mcp4461/__init__.py +1 -1
- esphome/components/mcp4461/output/__init__.py +3 -2
- esphome/components/mcp9600/mcp9600.h +0 -2
- esphome/components/md5/md5.cpp +3 -3
- esphome/components/md5/md5.h +1 -6
- esphome/components/mdns/__init__.py +22 -11
- esphome/components/media_player/__init__.py +4 -3
- esphome/components/micro_wake_word/__init__.py +1 -5
- esphome/components/micro_wake_word/streaming_model.cpp +2 -2
- esphome/components/microphone/microphone.cpp +7 -9
- esphome/components/microphone/microphone.h +0 -2
- esphome/components/mipi_spi/display.py +1 -0
- esphome/components/mmc5603/mmc5603.cpp +1 -1
- esphome/components/modbus/modbus.cpp +33 -15
- esphome/components/modbus/modbus.h +9 -0
- esphome/components/modbus_controller/__init__.py +42 -10
- esphome/components/modbus_controller/modbus_controller.cpp +92 -11
- esphome/components/modbus_controller/modbus_controller.h +61 -7
- esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
- esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
- esphome/components/mpl3115a2/mpl3115a2.h +0 -2
- esphome/components/mqtt/__init__.py +16 -0
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +2 -1
- esphome/components/mqtt/mqtt_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_binary_sensor.cpp +1 -0
- esphome/components/mqtt/mqtt_button.cpp +4 -1
- esphome/components/mqtt/mqtt_client.cpp +17 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/mqtt/mqtt_climate.cpp +6 -4
- esphome/components/mqtt/mqtt_component.cpp +3 -1
- esphome/components/mqtt/mqtt_cover.cpp +1 -0
- esphome/components/mqtt/mqtt_date.cpp +4 -3
- esphome/components/mqtt/mqtt_datetime.cpp +7 -6
- esphome/components/mqtt/mqtt_event.cpp +6 -3
- esphome/components/mqtt/mqtt_fan.cpp +1 -0
- esphome/components/mqtt/mqtt_light.cpp +8 -4
- esphome/components/mqtt/mqtt_lock.cpp +3 -1
- esphome/components/mqtt/mqtt_number.cpp +1 -0
- esphome/components/mqtt/mqtt_select.cpp +2 -1
- esphome/components/mqtt/mqtt_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_switch.cpp +3 -1
- esphome/components/mqtt/mqtt_text.cpp +1 -0
- esphome/components/mqtt/mqtt_text_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_time.cpp +4 -3
- esphome/components/mqtt/mqtt_update.cpp +1 -0
- esphome/components/mqtt/mqtt_valve.cpp +3 -1
- esphome/components/ms8607/ms8607.cpp +1 -1
- esphome/components/ms8607/ms8607.h +0 -1
- esphome/components/neopixelbus/light.py +4 -1
- esphome/components/neopixelbus/neopixelbus_light.h +1 -1
- esphome/components/network/__init__.py +4 -1
- esphome/components/network/ip_address.h +1 -0
- esphome/components/nextion/__init__.py +16 -0
- esphome/components/nextion/base_component.py +1 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
- esphome/components/nextion/display.py +14 -4
- esphome/components/nextion/nextion.cpp +166 -101
- esphome/components/nextion/nextion.h +84 -53
- esphome/components/nextion/nextion_commands.cpp +11 -10
- esphome/components/nextion/nextion_component.cpp +28 -28
- esphome/components/nextion/nextion_component.h +53 -18
- esphome/components/nextion/nextion_component_base.h +3 -0
- esphome/components/nextion/nextion_upload.cpp +36 -0
- esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
- esphome/components/nextion/nextion_upload_idf.cpp +9 -33
- esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
- esphome/components/nextion/switch/nextion_switch.cpp +1 -1
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
- esphome/components/nfc/nfc.cpp +3 -22
- esphome/components/nfc/nfc.h +3 -3
- esphome/components/number/__init__.py +5 -2
- esphome/components/online_image/__init__.py +9 -1
- esphome/components/online_image/online_image.cpp +17 -7
- esphome/components/online_image/online_image.h +10 -2
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/opentherm/output/output.cpp +1 -1
- esphome/components/openthread/__init__.py +47 -40
- esphome/components/openthread/const.py +1 -0
- esphome/components/openthread/openthread_esp.cpp +27 -5
- esphome/components/opt3001/__init__.py +0 -0
- esphome/components/opt3001/opt3001.cpp +122 -0
- esphome/components/opt3001/opt3001.h +27 -0
- esphome/components/opt3001/sensor.py +35 -0
- esphome/components/ota/__init__.py +17 -0
- esphome/components/ota/ota_backend.h +27 -1
- esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
- esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
- esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
- esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
- esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
- esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
- esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
- esphome/components/ota/ota_backend_esp_idf.h +1 -0
- esphome/components/packages/__init__.py +5 -2
- esphome/components/packet_transport/binary_sensor.py +61 -4
- esphome/components/packet_transport/packet_transport.cpp +34 -1
- esphome/components/packet_transport/packet_transport.h +11 -5
- esphome/components/pcf8574/__init__.py +1 -1
- esphome/components/pi4ioe5v6408/__init__.py +84 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
- esphome/components/pmsa003i/pmsa003i.h +0 -1
- esphome/components/pmsx003/pmsx003.h +0 -1
- esphome/components/pn7150/pn7150.cpp +7 -7
- esphome/components/pn7150/pn7150.h +0 -1
- esphome/components/pn7160/pn7160.cpp +7 -7
- esphome/components/pn7160/pn7160.h +0 -1
- esphome/components/preferences/syncer.h +2 -0
- esphome/components/prometheus/prometheus_handler.h +1 -1
- esphome/components/psram/psram.cpp +0 -20
- esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
- esphome/components/pulse_width/pulse_width.h +0 -1
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
- esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
- esphome/components/qr_code/__init__.py +13 -10
- esphome/components/qwiic_pir/qwiic_pir.h +0 -1
- esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
- esphome/components/rc522/rc522.h +0 -1
- esphome/components/rdm6300/rdm6300.h +0 -2
- esphome/components/remote_base/__init__.py +7 -5
- esphome/components/remote_base/remote_base.cpp +24 -21
- esphome/components/remote_base/remote_base.h +3 -26
- esphome/components/remote_receiver/__init__.py +40 -46
- esphome/components/remote_receiver/remote_receiver.h +4 -18
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
- esphome/components/remote_transmitter/__init__.py +42 -43
- esphome/components/remote_transmitter/remote_transmitter.h +2 -14
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
- esphome/components/resistance/resistance_sensor.h +0 -1
- esphome/components/rp2040/__init__.py +2 -0
- esphome/components/rp2040/helpers.cpp +55 -0
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
- esphome/components/rtttl/__init__.py +4 -4
- esphome/components/rtttl/rtttl.cpp +10 -1
- esphome/components/ruuvitag/ruuvitag.h +0 -1
- esphome/components/safe_mode/safe_mode.cpp +2 -0
- esphome/components/safe_mode/safe_mode.h +4 -1
- esphome/components/scd30/scd30.h +0 -1
- esphome/components/scd30/sensor.py +2 -2
- esphome/components/scd4x/scd4x.cpp +61 -54
- esphome/components/scd4x/scd4x.h +17 -15
- esphome/components/scd4x/sensor.py +4 -4
- esphome/components/script/script.h +0 -2
- esphome/components/sdp3x/sensor.py +1 -1
- esphome/components/select/__init__.py +5 -2
- esphome/components/sen5x/sen5x.h +0 -1
- esphome/components/senseair/senseair.h +0 -1
- esphome/components/sensor/__init__.py +4 -2
- esphome/components/sensor/filter.cpp +1 -1
- esphome/components/sensor/sensor.cpp +12 -6
- esphome/components/sensor/sensor.h +13 -5
- esphome/components/servo/servo.cpp +2 -2
- esphome/components/servo/servo.h +0 -1
- esphome/components/sfa30/sfa30.h +0 -1
- esphome/components/sgp30/sgp30.h +0 -1
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
- esphome/components/sht4x/sht4x.h +0 -1
- esphome/components/sm300d2/sm300d2.h +0 -2
- esphome/components/smt100/sensor.py +8 -4
- esphome/components/smt100/smt100.cpp +5 -5
- esphome/components/smt100/smt100.h +3 -3
- esphome/components/sn74hc595/__init__.py +1 -1
- esphome/components/sn74hc595/sn74hc595.cpp +5 -4
- esphome/components/sntp/sntp_component.cpp +9 -3
- esphome/components/sntp/time.py +2 -0
- esphome/components/socket/__init__.py +17 -0
- esphome/components/spi/__init__.py +27 -6
- esphome/components/spi/spi.cpp +3 -2
- esphome/components/spi/spi.h +9 -3
- esphome/components/spi/spi_arduino.cpp +3 -5
- esphome/components/spi/spi_esp_idf.cpp +40 -21
- esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
- esphome/components/sps30/sps30.h +0 -1
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +0 -4
- esphome/components/status/status_binary_sensor.h +0 -2
- esphome/components/substitutions/__init__.py +81 -21
- esphome/components/substitutions/jinja.py +99 -0
- esphome/components/sun/sun.cpp +3 -4
- esphome/components/switch/__init__.py +5 -2
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
- esphome/components/sx126x/__init__.py +317 -0
- esphome/components/sx126x/automation.h +62 -0
- esphome/components/sx126x/packet_transport/__init__.py +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
- esphome/components/sx126x/sx126x.cpp +523 -0
- esphome/components/sx126x/sx126x.h +140 -0
- esphome/components/sx126x/sx126x_reg.h +163 -0
- esphome/components/sx127x/__init__.py +325 -0
- esphome/components/sx127x/automation.h +62 -0
- esphome/components/sx127x/packet_transport/__init__.py +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
- esphome/components/sx127x/sx127x.cpp +498 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/syslog/esphome_syslog.cpp +5 -3
- esphome/components/syslog/esphome_syslog.h +1 -1
- esphome/components/tca9555/__init__.py +1 -1
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
- esphome/components/text/__init__.py +5 -2
- esphome/components/text_sensor/__init__.py +5 -2
- esphome/components/thermostat/thermostat_climate.cpp +34 -31
- esphome/components/thermostat/thermostat_climate.h +43 -39
- esphome/components/time/__init__.py +16 -2
- esphome/components/time/real_time_clock.cpp +4 -0
- esphome/components/time/real_time_clock.h +5 -1
- esphome/components/tlc5971/tlc5971.cpp +4 -1
- esphome/components/tmp1075/tmp1075.h +0 -2
- esphome/components/tof10120/tof10120_sensor.h +0 -1
- esphome/components/tormatic/tormatic_cover.h +0 -1
- esphome/components/total_daily_energy/total_daily_energy.h +0 -1
- esphome/components/tsl2591/tsl2591.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
- esphome/components/tx20/tx20.cpp +2 -2
- esphome/components/uart/__init__.py +18 -0
- esphome/components/uart/uart_component_esp_idf.cpp +1 -5
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/usb_host/usb_host_client.cpp +10 -10
- esphome/components/usb_uart/cp210x.cpp +1 -1
- esphome/components/usb_uart/usb_uart.cpp +41 -44
- esphome/components/usb_uart/usb_uart.h +4 -3
- esphome/components/valve/__init__.py +5 -2
- esphome/components/vbus/vbus.h +0 -1
- esphome/components/veml3235/veml3235.h +0 -1
- esphome/components/veml7700/veml7700.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
- esphome/components/voice_assistant/voice_assistant.cpp +4 -4
- esphome/components/watchdog/watchdog.cpp +0 -4
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
- esphome/components/web_server/__init__.py +34 -19
- esphome/components/web_server/ota/__init__.py +32 -0
- esphome/components/web_server/ota/ota_web_server.cpp +210 -0
- esphome/components/web_server/ota/ota_web_server.h +26 -0
- esphome/components/web_server/web_server.cpp +324 -439
- esphome/components/web_server/web_server.h +33 -23
- esphome/components/web_server/web_server_v1.cpp +4 -5
- esphome/components/web_server_base/__init__.py +5 -2
- esphome/components/web_server_base/web_server_base.cpp +2 -94
- esphome/components/web_server_base/web_server_base.h +5 -25
- esphome/components/web_server_idf/multipart.cpp +254 -0
- esphome/components/web_server_idf/multipart.h +86 -0
- esphome/components/web_server_idf/utils.cpp +32 -0
- esphome/components/web_server_idf/utils.h +10 -0
- esphome/components/web_server_idf/web_server_idf.cpp +164 -16
- esphome/components/web_server_idf/web_server_idf.h +11 -10
- esphome/components/wiegand/wiegand.cpp +2 -2
- esphome/components/wifi/__init__.py +18 -0
- esphome/components/wifi/wifi_component.cpp +17 -22
- esphome/components/wifi/wifi_component.h +27 -23
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
- esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
- esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
- esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
- esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
- esphome/components/wireguard/__init__.py +2 -11
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
- esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
- esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
- esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
- esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
- esphome/components/zyaura/zyaura.h +0 -1
- esphome/config.py +88 -22
- esphome/config_helpers.py +74 -1
- esphome/config_validation.py +12 -1
- esphome/const.py +65 -10
- esphome/core/__init__.py +18 -2
- esphome/core/application.cpp +169 -10
- esphome/core/application.h +145 -165
- esphome/core/area.h +19 -0
- esphome/core/automation.h +58 -9
- esphome/core/color.cpp +3 -5
- esphome/core/color.h +16 -16
- esphome/core/component.cpp +156 -22
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +11 -9
- esphome/core/component_iterator.h +12 -10
- esphome/core/config.py +155 -6
- esphome/core/controller.cpp +4 -2
- esphome/core/controller.h +1 -1
- esphome/core/datatypes.h +2 -2
- esphome/core/defines.h +17 -2
- esphome/core/device.h +20 -0
- esphome/core/entity_base.cpp +20 -15
- esphome/core/entity_base.h +76 -0
- esphome/core/entity_helpers.py +168 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +165 -105
- esphome/core/lock_free_queue.h +151 -0
- esphome/core/log.cpp +2 -2
- esphome/core/log.h +2 -0
- esphome/core/optional.h +5 -0
- esphome/core/ring_buffer.cpp +2 -2
- esphome/core/scheduler.cpp +275 -103
- esphome/core/scheduler.h +154 -17
- esphome/core/time.cpp +5 -5
- esphome/core/time.h +5 -5
- esphome/cpp_generator.py +17 -0
- esphome/cpp_helpers.py +0 -22
- esphome/cpp_types.py +3 -1
- esphome/dashboard/entries.py +1 -1
- esphome/dashboard/util/text.py +5 -21
- esphome/dashboard/web_server.py +9 -1
- esphome/helpers.py +47 -0
- esphome/loader.py +15 -1
- esphome/pins.py +14 -8
- esphome/platformio_api.py +2 -0
- esphome/wizard.py +17 -4
- esphome/writer.py +44 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/METADATA +10 -9
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/RECORD +639 -580
- esphome/components/api/api_pb2_size.h +0 -361
- esphome/components/esp32_ble/ble_event_pool.h +0 -72
- esphome/components/esp32_ble/queue.h +0 -85
- esphome/components/esp32_hall/esp32_hall.cpp +0 -25
- esphome/components/esp32_hall/esp32_hall.h +0 -23
- esphome/components/esp32_touch/esp32_touch.cpp +0 -355
- esphome/components/ld2410/button/reset_button.cpp +0 -9
- esphome/components/ld2450/button/reset_button.cpp +0 -9
- esphome/components/openthread/tlv.py +0 -65
- /esphome/{dashboard/enum.py → enum.py} +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/WHEEL +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/top_level.txt +0 -0
|
@@ -932,21 +932,6 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
932
932
|
*/
|
|
933
933
|
void set_backlight_brightness(float brightness);
|
|
934
934
|
|
|
935
|
-
/**
|
|
936
|
-
* Sets whether the Nextion display should skip the connection handshake process.
|
|
937
|
-
* @param skip_handshake True or false. When skip_connection_handshake is true,
|
|
938
|
-
* the connection will be established without performing the handshake.
|
|
939
|
-
* This can be useful when using Nextion Simulator.
|
|
940
|
-
*
|
|
941
|
-
* Example:
|
|
942
|
-
* ```cpp
|
|
943
|
-
* it.set_skip_connection_handshake(true);
|
|
944
|
-
* ```
|
|
945
|
-
*
|
|
946
|
-
* When set to true, the display will be marked as connected without performing a handshake.
|
|
947
|
-
*/
|
|
948
|
-
void set_skip_connection_handshake(bool skip_handshake) { this->skip_connection_handshake_ = skip_handshake; }
|
|
949
|
-
|
|
950
935
|
/**
|
|
951
936
|
* Sets Nextion mode between sleep and awake
|
|
952
937
|
* @param True or false. Sleep=true to enter sleep mode or sleep=false to exit sleep mode.
|
|
@@ -1179,22 +1164,43 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
1179
1164
|
void update_components_by_prefix(const std::string &prefix);
|
|
1180
1165
|
|
|
1181
1166
|
/**
|
|
1182
|
-
* Set the touch sleep timeout of the display.
|
|
1183
|
-
*
|
|
1167
|
+
* Set the touch sleep timeout of the display using the `thsp` command.
|
|
1168
|
+
*
|
|
1169
|
+
* Sets internal No-touch-then-sleep timer to specified value in seconds.
|
|
1170
|
+
* Nextion will auto-enter sleep mode if and when this timer expires.
|
|
1171
|
+
*
|
|
1172
|
+
* @param touch_sleep_timeout Timeout in seconds.
|
|
1173
|
+
* Range: 3 to 65535 seconds (minimum 3 seconds, maximum ~18 hours 12 minutes 15 seconds)
|
|
1174
|
+
* Use 0 to disable touch sleep timeout.
|
|
1175
|
+
*
|
|
1176
|
+
* @note Once `thsp` is set, it will persist until reboot or reset. The Nextion device
|
|
1177
|
+
* needs to exit sleep mode to issue `thsp=0` to disable sleep on no touch.
|
|
1178
|
+
*
|
|
1179
|
+
* @note The display will only wake up by a restart or by setting up `thup` (auto wake on touch).
|
|
1180
|
+
* See set_auto_wake_on_touch() to configure wake behavior.
|
|
1184
1181
|
*
|
|
1185
1182
|
* Example:
|
|
1186
1183
|
* ```cpp
|
|
1184
|
+
* // Set 30 second touch timeout
|
|
1187
1185
|
* it.set_touch_sleep_timeout(30);
|
|
1186
|
+
*
|
|
1187
|
+
* // Set maximum timeout (~18 hours)
|
|
1188
|
+
* it.set_touch_sleep_timeout(65535);
|
|
1189
|
+
*
|
|
1190
|
+
* // Disable touch sleep timeout
|
|
1191
|
+
* it.set_touch_sleep_timeout(0);
|
|
1188
1192
|
* ```
|
|
1189
1193
|
*
|
|
1190
|
-
*
|
|
1191
|
-
*
|
|
1194
|
+
* Related Nextion instruction: `thsp=<value>`
|
|
1195
|
+
*
|
|
1196
|
+
* @see set_auto_wake_on_touch() Configure automatic wake on touch
|
|
1197
|
+
* @see sleep() Manually control sleep state
|
|
1192
1198
|
*/
|
|
1193
|
-
void set_touch_sleep_timeout(
|
|
1199
|
+
void set_touch_sleep_timeout(uint16_t touch_sleep_timeout = 0);
|
|
1194
1200
|
|
|
1195
1201
|
/**
|
|
1196
1202
|
* Sets which page Nextion loads when exiting sleep mode. Note this can be set even when Nextion is in sleep mode.
|
|
1197
|
-
* @param wake_up_page The page id, from 0 to the
|
|
1203
|
+
* @param wake_up_page The page id, from 0 to the last page in Nextion. Set 255 (not set to any existing page) to
|
|
1198
1204
|
* wakes up to current page.
|
|
1199
1205
|
*
|
|
1200
1206
|
* Example:
|
|
@@ -1206,9 +1212,10 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
1206
1212
|
*/
|
|
1207
1213
|
void set_wake_up_page(uint8_t wake_up_page = 255);
|
|
1208
1214
|
|
|
1215
|
+
#ifdef USE_NEXTION_CONF_START_UP_PAGE
|
|
1209
1216
|
/**
|
|
1210
1217
|
* Sets which page Nextion loads when connecting to ESPHome.
|
|
1211
|
-
* @param start_up_page The page id, from 0 to the
|
|
1218
|
+
* @param start_up_page The page id, from 0 to the last page in Nextion. Set 255 (not set to any existing page) to
|
|
1212
1219
|
* wakes up to current page.
|
|
1213
1220
|
*
|
|
1214
1221
|
* Example:
|
|
@@ -1219,6 +1226,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
1219
1226
|
* The display will go to page 2 when it establishes a connection to ESPHome.
|
|
1220
1227
|
*/
|
|
1221
1228
|
void set_start_up_page(uint8_t start_up_page = 255) { this->start_up_page_ = start_up_page; }
|
|
1229
|
+
#endif // USE_NEXTION_CONF_START_UP_PAGE
|
|
1222
1230
|
|
|
1223
1231
|
/**
|
|
1224
1232
|
* Sets if Nextion should auto-wake from sleep when touch press occurs.
|
|
@@ -1234,20 +1242,6 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
1234
1242
|
*/
|
|
1235
1243
|
void set_auto_wake_on_touch(bool auto_wake_on_touch);
|
|
1236
1244
|
|
|
1237
|
-
/**
|
|
1238
|
-
* Sets if Nextion should exit the active reparse mode before the "connect" command is sent
|
|
1239
|
-
* @param exit_reparse_on_start True or false. When exit_reparse_on_start is true, the exit reparse command
|
|
1240
|
-
* will be sent before requesting the connection from Nextion.
|
|
1241
|
-
*
|
|
1242
|
-
* Example:
|
|
1243
|
-
* ```cpp
|
|
1244
|
-
* it.set_exit_reparse_on_start(true);
|
|
1245
|
-
* ```
|
|
1246
|
-
*
|
|
1247
|
-
* The display will be requested to leave active reparse mode before setup.
|
|
1248
|
-
*/
|
|
1249
|
-
void set_exit_reparse_on_start(bool exit_reparse_on_start) { this->exit_reparse_on_start_ = exit_reparse_on_start; }
|
|
1250
|
-
|
|
1251
1245
|
/**
|
|
1252
1246
|
* @brief Retrieves the number of commands pending in the Nextion command queue.
|
|
1253
1247
|
*
|
|
@@ -1290,7 +1284,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
1290
1284
|
* the Nextion display. A connection is considered established when:
|
|
1291
1285
|
*
|
|
1292
1286
|
* - The initial handshake with the display is completed successfully, or
|
|
1293
|
-
* - The handshake is skipped via
|
|
1287
|
+
* - The handshake is skipped via USE_NEXTION_CONFIG_SKIP_CONNECTION_HANDSHAKE flag
|
|
1294
1288
|
*
|
|
1295
1289
|
* The connection status is particularly useful when:
|
|
1296
1290
|
* - Troubleshooting communication issues
|
|
@@ -1300,7 +1294,7 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
1300
1294
|
* @return true if the Nextion display is connected and ready to receive commands
|
|
1301
1295
|
* @return false if the display is not yet connected or connection was lost
|
|
1302
1296
|
*/
|
|
1303
|
-
bool is_connected() { return this->is_connected_; }
|
|
1297
|
+
bool is_connected() { return this->connection_state_.is_connected_; }
|
|
1304
1298
|
|
|
1305
1299
|
protected:
|
|
1306
1300
|
#ifdef USE_NEXTION_MAX_COMMANDS_PER_LOOP
|
|
@@ -1309,34 +1303,54 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
1309
1303
|
#ifdef USE_NEXTION_MAX_QUEUE_SIZE
|
|
1310
1304
|
size_t max_queue_size_{0};
|
|
1311
1305
|
#endif // USE_NEXTION_MAX_QUEUE_SIZE
|
|
1306
|
+
|
|
1312
1307
|
#ifdef USE_NEXTION_COMMAND_SPACING
|
|
1313
1308
|
NextionCommandPacer command_pacer_{0};
|
|
1309
|
+
|
|
1310
|
+
/**
|
|
1311
|
+
* @brief Process any commands in the queue that are pending due to command spacing
|
|
1312
|
+
*
|
|
1313
|
+
* This method checks if the first item in the nextion_queue_ has a pending command
|
|
1314
|
+
* that was previously blocked by command spacing. If spacing now allows and a
|
|
1315
|
+
* pending command exists, it attempts to send the command. Once successfully sent,
|
|
1316
|
+
* the pending command is cleared and the queue item continues normal processing.
|
|
1317
|
+
*
|
|
1318
|
+
* Called from loop() to retry sending commands that were delayed by spacing.
|
|
1319
|
+
*/
|
|
1320
|
+
void process_pending_in_queue_();
|
|
1314
1321
|
#endif // USE_NEXTION_COMMAND_SPACING
|
|
1322
|
+
|
|
1315
1323
|
std::deque<NextionQueue *> nextion_queue_;
|
|
1316
1324
|
std::deque<NextionQueue *> waveform_queue_;
|
|
1317
1325
|
uint16_t recv_ret_string_(std::string &response, uint32_t timeout, bool recv_flag);
|
|
1318
1326
|
void all_components_send_state_(bool force_update = false);
|
|
1319
|
-
|
|
1327
|
+
uint32_t comok_sent_ = 0;
|
|
1320
1328
|
bool remove_from_q_(bool report_empty = true);
|
|
1321
1329
|
|
|
1322
1330
|
/**
|
|
1323
|
-
* @brief
|
|
1324
|
-
*
|
|
1331
|
+
* @brief Status flags for Nextion display state management
|
|
1332
|
+
*
|
|
1333
|
+
* Uses bitfields to pack multiple boolean states into a single byte,
|
|
1334
|
+
* saving 5 bytes of RAM compared to individual bool variables.
|
|
1325
1335
|
*/
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1336
|
+
struct {
|
|
1337
|
+
uint8_t is_connected_ : 1; ///< Connection established with Nextion display
|
|
1338
|
+
uint8_t sent_setup_commands_ : 1; ///< Initial setup commands have been sent
|
|
1339
|
+
uint8_t ignore_is_setup_ : 1; ///< Temporarily ignore setup state for special operations
|
|
1340
|
+
uint8_t nextion_reports_is_setup_ : 1; ///< Nextion has reported successful initialization
|
|
1341
|
+
uint8_t is_updating_ : 1; ///< TFT firmware update is currently in progress
|
|
1342
|
+
uint8_t auto_wake_on_touch_ : 1; ///< Display should wake automatically on touch (default: true)
|
|
1343
|
+
uint8_t reserved_ : 2; ///< Reserved bits for future flag additions
|
|
1344
|
+
} connection_state_{}; ///< Zero-initialized status flags (all start as false)
|
|
1330
1345
|
|
|
1331
1346
|
void process_nextion_commands_();
|
|
1332
1347
|
void process_serial_();
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1348
|
+
uint16_t touch_sleep_timeout_ = 0;
|
|
1349
|
+
uint8_t wake_up_page_ = 255;
|
|
1350
|
+
#ifdef USE_NEXTION_CONF_START_UP_PAGE
|
|
1351
|
+
uint8_t start_up_page_ = 255;
|
|
1352
|
+
#endif // USE_NEXTION_CONF_START_UP_PAGE
|
|
1337
1353
|
bool auto_wake_on_touch_ = true;
|
|
1338
|
-
bool exit_reparse_on_start_ = false;
|
|
1339
|
-
bool skip_connection_handshake_ = false;
|
|
1340
1354
|
|
|
1341
1355
|
/**
|
|
1342
1356
|
* Manually send a raw command to the display and don't wait for an acknowledgement packet.
|
|
@@ -1348,6 +1362,23 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
1348
1362
|
__attribute__((format(printf, 3, 4)));
|
|
1349
1363
|
void add_no_result_to_queue_with_command_(const std::string &variable_name, const std::string &command);
|
|
1350
1364
|
|
|
1365
|
+
#ifdef USE_NEXTION_COMMAND_SPACING
|
|
1366
|
+
/**
|
|
1367
|
+
* @brief Add a command to the Nextion queue with a pending command for retry
|
|
1368
|
+
*
|
|
1369
|
+
* This method creates a queue entry for a command that was blocked by command spacing.
|
|
1370
|
+
* The command string is stored in the queue item's pending_command field so it can
|
|
1371
|
+
* be retried later when spacing allows. This ensures commands are not lost when
|
|
1372
|
+
* sent too quickly.
|
|
1373
|
+
*
|
|
1374
|
+
* If the max_queue_size limit is configured and reached, the command will be dropped.
|
|
1375
|
+
*
|
|
1376
|
+
* @param variable_name Name of the variable or component associated with the command
|
|
1377
|
+
* @param command The actual command string to be sent when spacing allows
|
|
1378
|
+
*/
|
|
1379
|
+
void add_no_result_to_queue_with_pending_command_(const std::string &variable_name, const std::string &command);
|
|
1380
|
+
#endif // USE_NEXTION_COMMAND_SPACING
|
|
1381
|
+
|
|
1351
1382
|
bool add_no_result_to_queue_with_printf_(const std::string &variable_name, const char *format, ...)
|
|
1352
1383
|
__attribute__((format(printf, 3, 4)));
|
|
1353
1384
|
|
|
@@ -1426,10 +1457,12 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
1426
1457
|
optional<nextion_writer_t> writer_;
|
|
1427
1458
|
optional<float> brightness_;
|
|
1428
1459
|
|
|
1460
|
+
#ifdef USE_NEXTION_CONFIG_DUMP_DEVICE_INFO
|
|
1429
1461
|
std::string device_model_;
|
|
1430
1462
|
std::string firmware_version_;
|
|
1431
1463
|
std::string serial_number_;
|
|
1432
1464
|
std::string flash_size_;
|
|
1465
|
+
#endif // USE_NEXTION_CONFIG_DUMP_DEVICE_INFO
|
|
1433
1466
|
|
|
1434
1467
|
void remove_front_no_sensors_();
|
|
1435
1468
|
|
|
@@ -1439,11 +1472,9 @@ class Nextion : public NextionBase, public PollingComponent, public uart::UARTDe
|
|
|
1439
1472
|
void reset_(bool reset_nextion = true);
|
|
1440
1473
|
|
|
1441
1474
|
std::string command_data_;
|
|
1442
|
-
bool is_connected_ = false;
|
|
1443
1475
|
const uint16_t startup_override_ms_ = 8000;
|
|
1444
1476
|
const uint16_t max_q_age_ms_ = 8000;
|
|
1445
1477
|
uint32_t started_ms_ = 0;
|
|
1446
|
-
bool sent_setup_commands_ = false;
|
|
1447
1478
|
};
|
|
1448
1479
|
|
|
1449
1480
|
} // namespace nextion
|
|
@@ -15,14 +15,15 @@ void Nextion::set_wake_up_page(uint8_t wake_up_page) {
|
|
|
15
15
|
this->add_no_result_to_queue_with_set_internal_("wake_up_page", "wup", wake_up_page, true);
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
void Nextion::set_touch_sleep_timeout(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
void Nextion::set_touch_sleep_timeout(const uint16_t touch_sleep_timeout) {
|
|
19
|
+
// Validate range: Nextion thsp command requires min 3, max 65535 seconds (0 disables)
|
|
20
|
+
if (touch_sleep_timeout != 0 && touch_sleep_timeout < 3) {
|
|
21
|
+
this->touch_sleep_timeout_ = 3; // Auto-correct to minimum valid value
|
|
22
|
+
} else {
|
|
23
|
+
this->touch_sleep_timeout_ = touch_sleep_timeout;
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
this->touch_sleep_timeout_
|
|
25
|
-
this->add_no_result_to_queue_with_set_internal_("touch_sleep_timeout", "thsp", touch_sleep_timeout, true);
|
|
26
|
+
this->add_no_result_to_queue_with_set_internal_("touch_sleep_timeout", "thsp", this->touch_sleep_timeout_, true);
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
void Nextion::sleep(bool sleep) {
|
|
@@ -38,7 +39,7 @@ void Nextion::sleep(bool sleep) {
|
|
|
38
39
|
// Protocol reparse mode
|
|
39
40
|
bool Nextion::set_protocol_reparse_mode(bool active_mode) {
|
|
40
41
|
ESP_LOGV(TAG, "Reparse mode: %s", YESNO(active_mode));
|
|
41
|
-
this->ignore_is_setup_ = true; // if not in reparse mode setup will fail, so it should be ignored
|
|
42
|
+
this->connection_state_.ignore_is_setup_ = true; // if not in reparse mode setup will fail, so it should be ignored
|
|
42
43
|
bool all_commands_sent = true;
|
|
43
44
|
if (active_mode) { // Sets active protocol reparse mode
|
|
44
45
|
all_commands_sent &= this->send_command_("recmod=1");
|
|
@@ -48,10 +49,10 @@ bool Nextion::set_protocol_reparse_mode(bool active_mode) {
|
|
|
48
49
|
all_commands_sent &= this->send_command_("recmod=0"); // Sending recmode=0 twice is recommended
|
|
49
50
|
all_commands_sent &= this->send_command_("recmod=0");
|
|
50
51
|
}
|
|
51
|
-
if (!this->nextion_reports_is_setup_) { // No need to connect if is already setup
|
|
52
|
+
if (!this->connection_state_.nextion_reports_is_setup_) { // No need to connect if is already setup
|
|
52
53
|
all_commands_sent &= this->send_command_("connect");
|
|
53
54
|
}
|
|
54
|
-
this->ignore_is_setup_ = false;
|
|
55
|
+
this->connection_state_.ignore_is_setup_ = false;
|
|
55
56
|
return all_commands_sent;
|
|
56
57
|
}
|
|
57
58
|
|
|
@@ -191,7 +192,7 @@ void Nextion::set_backlight_brightness(float brightness) {
|
|
|
191
192
|
}
|
|
192
193
|
|
|
193
194
|
void Nextion::set_auto_wake_on_touch(bool auto_wake_on_touch) {
|
|
194
|
-
this->auto_wake_on_touch_ = auto_wake_on_touch;
|
|
195
|
+
this->connection_state_.auto_wake_on_touch_ = auto_wake_on_touch;
|
|
195
196
|
this->add_no_result_to_queue_with_set("auto_wake_on_touch", "thup", auto_wake_on_touch ? 1 : 0);
|
|
196
197
|
}
|
|
197
198
|
|
|
@@ -8,8 +8,8 @@ void NextionComponent::set_background_color(Color bco) {
|
|
|
8
8
|
return; // This is a variable. no need to set color
|
|
9
9
|
}
|
|
10
10
|
this->bco_ = bco;
|
|
11
|
-
this->
|
|
12
|
-
this->
|
|
11
|
+
this->component_flags_.bco_needs_update = true;
|
|
12
|
+
this->component_flags_.bco_is_set = true;
|
|
13
13
|
this->update_component_settings();
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -19,8 +19,8 @@ void NextionComponent::set_background_pressed_color(Color bco2) {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
this->bco2_ = bco2;
|
|
22
|
-
this->
|
|
23
|
-
this->
|
|
22
|
+
this->component_flags_.bco2_needs_update = true;
|
|
23
|
+
this->component_flags_.bco2_is_set = true;
|
|
24
24
|
this->update_component_settings();
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -29,8 +29,8 @@ void NextionComponent::set_foreground_color(Color pco) {
|
|
|
29
29
|
return; // This is a variable. no need to set color
|
|
30
30
|
}
|
|
31
31
|
this->pco_ = pco;
|
|
32
|
-
this->
|
|
33
|
-
this->
|
|
32
|
+
this->component_flags_.pco_needs_update = true;
|
|
33
|
+
this->component_flags_.pco_is_set = true;
|
|
34
34
|
this->update_component_settings();
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -39,8 +39,8 @@ void NextionComponent::set_foreground_pressed_color(Color pco2) {
|
|
|
39
39
|
return; // This is a variable. no need to set color
|
|
40
40
|
}
|
|
41
41
|
this->pco2_ = pco2;
|
|
42
|
-
this->
|
|
43
|
-
this->
|
|
42
|
+
this->component_flags_.pco2_needs_update = true;
|
|
43
|
+
this->component_flags_.pco2_is_set = true;
|
|
44
44
|
this->update_component_settings();
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -49,8 +49,8 @@ void NextionComponent::set_font_id(uint8_t font_id) {
|
|
|
49
49
|
return; // This is a variable. no need to set color
|
|
50
50
|
}
|
|
51
51
|
this->font_id_ = font_id;
|
|
52
|
-
this->
|
|
53
|
-
this->
|
|
52
|
+
this->component_flags_.font_id_needs_update = true;
|
|
53
|
+
this->component_flags_.font_id_is_set = true;
|
|
54
54
|
this->update_component_settings();
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -58,20 +58,20 @@ void NextionComponent::set_visible(bool visible) {
|
|
|
58
58
|
if (this->variable_name_ == this->variable_name_to_send_) {
|
|
59
59
|
return; // This is a variable. no need to set color
|
|
60
60
|
}
|
|
61
|
-
this->
|
|
62
|
-
this->
|
|
63
|
-
this->
|
|
61
|
+
this->component_flags_.visible = visible;
|
|
62
|
+
this->component_flags_.visible_needs_update = true;
|
|
63
|
+
this->component_flags_.visible_is_set = true;
|
|
64
64
|
this->update_component_settings();
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
void NextionComponent::update_component_settings(bool force_update) {
|
|
68
|
-
if (this->nextion_->is_sleeping() || !this->nextion_->is_setup() || !this->
|
|
69
|
-
(!this->
|
|
68
|
+
if (this->nextion_->is_sleeping() || !this->nextion_->is_setup() || !this->component_flags_.visible_is_set ||
|
|
69
|
+
(!this->component_flags_.visible_needs_update && !this->component_flags_.visible)) {
|
|
70
70
|
this->needs_to_send_update_ = true;
|
|
71
71
|
return;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
if (this->
|
|
74
|
+
if (this->component_flags_.visible_needs_update || (force_update && this->component_flags_.visible_is_set)) {
|
|
75
75
|
std::string name_to_send = this->variable_name_;
|
|
76
76
|
|
|
77
77
|
size_t pos = name_to_send.find_last_of('.');
|
|
@@ -79,9 +79,9 @@ void NextionComponent::update_component_settings(bool force_update) {
|
|
|
79
79
|
name_to_send = name_to_send.substr(pos + 1);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
this->
|
|
82
|
+
this->component_flags_.visible_needs_update = false;
|
|
83
83
|
|
|
84
|
-
if (this->
|
|
84
|
+
if (this->component_flags_.visible) {
|
|
85
85
|
this->nextion_->show_component(name_to_send.c_str());
|
|
86
86
|
this->send_state_to_nextion();
|
|
87
87
|
} else {
|
|
@@ -90,26 +90,26 @@ void NextionComponent::update_component_settings(bool force_update) {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
if (this->
|
|
93
|
+
if (this->component_flags_.bco_needs_update || (force_update && this->component_flags_.bco2_is_set)) {
|
|
94
94
|
this->nextion_->set_component_background_color(this->variable_name_.c_str(), this->bco_);
|
|
95
|
-
this->
|
|
95
|
+
this->component_flags_.bco_needs_update = false;
|
|
96
96
|
}
|
|
97
|
-
if (this->
|
|
97
|
+
if (this->component_flags_.bco2_needs_update || (force_update && this->component_flags_.bco2_is_set)) {
|
|
98
98
|
this->nextion_->set_component_pressed_background_color(this->variable_name_.c_str(), this->bco2_);
|
|
99
|
-
this->
|
|
99
|
+
this->component_flags_.bco2_needs_update = false;
|
|
100
100
|
}
|
|
101
|
-
if (this->
|
|
101
|
+
if (this->component_flags_.pco_needs_update || (force_update && this->component_flags_.pco_is_set)) {
|
|
102
102
|
this->nextion_->set_component_foreground_color(this->variable_name_.c_str(), this->pco_);
|
|
103
|
-
this->
|
|
103
|
+
this->component_flags_.pco_needs_update = false;
|
|
104
104
|
}
|
|
105
|
-
if (this->
|
|
105
|
+
if (this->component_flags_.pco2_needs_update || (force_update && this->component_flags_.pco2_is_set)) {
|
|
106
106
|
this->nextion_->set_component_pressed_foreground_color(this->variable_name_.c_str(), this->pco2_);
|
|
107
|
-
this->
|
|
107
|
+
this->component_flags_.pco2_needs_update = false;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
if (this->
|
|
110
|
+
if (this->component_flags_.font_id_needs_update || (force_update && this->component_flags_.font_id_is_set)) {
|
|
111
111
|
this->nextion_->set_component_font(this->variable_name_.c_str(), this->font_id_);
|
|
112
|
-
this->
|
|
112
|
+
this->component_flags_.font_id_needs_update = false;
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
} // namespace nextion
|
|
@@ -21,29 +21,64 @@ class NextionComponent : public NextionComponentBase {
|
|
|
21
21
|
void set_visible(bool visible);
|
|
22
22
|
|
|
23
23
|
protected:
|
|
24
|
+
/**
|
|
25
|
+
* @brief Constructor initializes component state with visible=true (default state)
|
|
26
|
+
*/
|
|
27
|
+
NextionComponent() {
|
|
28
|
+
component_flags_ = {}; // Zero-initialize all state
|
|
29
|
+
component_flags_.visible = 1; // Set default visibility to true
|
|
30
|
+
}
|
|
31
|
+
|
|
24
32
|
NextionBase *nextion_;
|
|
25
33
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
Color
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Color bco2_;
|
|
32
|
-
bool pco_needs_update_ = false;
|
|
33
|
-
bool pco_is_set_ = false;
|
|
34
|
-
Color pco_;
|
|
35
|
-
bool pco2_needs_update_ = false;
|
|
36
|
-
bool pco2_is_set_ = false;
|
|
37
|
-
Color pco2_;
|
|
34
|
+
// Color and styling properties
|
|
35
|
+
Color bco_; // Background color
|
|
36
|
+
Color bco2_; // Pressed background color
|
|
37
|
+
Color pco_; // Foreground color
|
|
38
|
+
Color pco2_; // Pressed foreground color
|
|
38
39
|
uint8_t font_id_ = 0;
|
|
39
|
-
bool font_id_needs_update_ = false;
|
|
40
|
-
bool font_id_is_set_ = false;
|
|
41
40
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
/**
|
|
42
|
+
* @brief Component state management using compact bitfield structure
|
|
43
|
+
*
|
|
44
|
+
* Stores all component state flags and properties in a single 16-bit bitfield
|
|
45
|
+
* for efficient memory usage and improved cache locality.
|
|
46
|
+
*
|
|
47
|
+
* Each component property maintains two state flags:
|
|
48
|
+
* - needs_update: Indicates the property requires synchronization with the display
|
|
49
|
+
* - is_set: Tracks whether the property has been explicitly configured
|
|
50
|
+
*
|
|
51
|
+
* The visible field stores both the update flags and the actual visibility state.
|
|
52
|
+
*/
|
|
53
|
+
struct ComponentState {
|
|
54
|
+
// Background color flags
|
|
55
|
+
uint16_t bco_needs_update : 1;
|
|
56
|
+
uint16_t bco_is_set : 1;
|
|
57
|
+
|
|
58
|
+
// Pressed background color flags
|
|
59
|
+
uint16_t bco2_needs_update : 1;
|
|
60
|
+
uint16_t bco2_is_set : 1;
|
|
61
|
+
|
|
62
|
+
// Foreground color flags
|
|
63
|
+
uint16_t pco_needs_update : 1;
|
|
64
|
+
uint16_t pco_is_set : 1;
|
|
65
|
+
|
|
66
|
+
// Pressed foreground color flags
|
|
67
|
+
uint16_t pco2_needs_update : 1;
|
|
68
|
+
uint16_t pco2_is_set : 1;
|
|
69
|
+
|
|
70
|
+
// Font ID flags
|
|
71
|
+
uint16_t font_id_needs_update : 1;
|
|
72
|
+
uint16_t font_id_is_set : 1;
|
|
73
|
+
|
|
74
|
+
// Visibility flags
|
|
75
|
+
uint16_t visible_needs_update : 1;
|
|
76
|
+
uint16_t visible_is_set : 1;
|
|
77
|
+
uint16_t visible : 1; // Actual visibility state
|
|
45
78
|
|
|
46
|
-
|
|
79
|
+
// Reserved bits for future expansion
|
|
80
|
+
uint16_t reserved : 3;
|
|
81
|
+
} component_flags_;
|
|
47
82
|
};
|
|
48
83
|
} // namespace nextion
|
|
49
84
|
} // namespace esphome
|
|
@@ -25,6 +25,9 @@ class NextionQueue {
|
|
|
25
25
|
virtual ~NextionQueue() = default;
|
|
26
26
|
NextionComponentBase *component;
|
|
27
27
|
uint32_t queue_time = 0;
|
|
28
|
+
|
|
29
|
+
// Store command for retry if spacing blocked it
|
|
30
|
+
std::string pending_command; // Empty if command was sent successfully
|
|
28
31
|
};
|
|
29
32
|
|
|
30
33
|
class NextionComponentBase {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#include "nextion.h"
|
|
2
|
+
|
|
3
|
+
#ifdef USE_NEXTION_TFT_UPLOAD
|
|
4
|
+
|
|
5
|
+
#include "esphome/core/application.h"
|
|
6
|
+
|
|
7
|
+
namespace esphome {
|
|
8
|
+
namespace nextion {
|
|
9
|
+
static const char *const TAG = "nextion.upload";
|
|
10
|
+
|
|
11
|
+
bool Nextion::upload_end_(bool successful) {
|
|
12
|
+
if (successful) {
|
|
13
|
+
ESP_LOGD(TAG, "Upload successful");
|
|
14
|
+
delay(1500); // NOLINT
|
|
15
|
+
App.safe_reboot();
|
|
16
|
+
} else {
|
|
17
|
+
ESP_LOGE(TAG, "Upload failed");
|
|
18
|
+
|
|
19
|
+
this->connection_state_.is_updating_ = false;
|
|
20
|
+
this->connection_state_.ignore_is_setup_ = false;
|
|
21
|
+
|
|
22
|
+
uint32_t baud_rate = this->parent_->get_baud_rate();
|
|
23
|
+
if (baud_rate != this->original_baud_rate_) {
|
|
24
|
+
ESP_LOGD(TAG, "Baud: %" PRIu32 "->%" PRIu32, baud_rate, this->original_baud_rate_);
|
|
25
|
+
this->parent_->set_baud_rate(this->original_baud_rate_);
|
|
26
|
+
this->parent_->load_settings();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return successful;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
} // namespace nextion
|
|
34
|
+
} // namespace esphome
|
|
35
|
+
|
|
36
|
+
#endif // USE_NEXTION_TFT_UPLOAD
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
#ifdef USE_NEXTION_TFT_UPLOAD
|
|
4
4
|
#ifdef USE_ARDUINO
|
|
5
5
|
|
|
6
|
+
#include <cinttypes>
|
|
7
|
+
#include "esphome/components/network/util.h"
|
|
6
8
|
#include "esphome/core/application.h"
|
|
7
9
|
#include "esphome/core/defines.h"
|
|
8
|
-
#include "esphome/core/util.h"
|
|
9
10
|
#include "esphome/core/log.h"
|
|
10
|
-
#include "esphome/
|
|
11
|
-
#include <cinttypes>
|
|
11
|
+
#include "esphome/core/util.h"
|
|
12
12
|
|
|
13
13
|
#ifdef USE_ESP32
|
|
14
14
|
#include <esp_heap_caps.h>
|
|
@@ -52,7 +52,7 @@ int Nextion::upload_by_chunks_(HTTPClient &http_client, uint32_t &range_start) {
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
// Allocate the buffer dynamically
|
|
55
|
-
|
|
55
|
+
RAMAllocator<uint8_t> allocator;
|
|
56
56
|
uint8_t *buffer = allocator.allocate(4096);
|
|
57
57
|
if (!buffer) {
|
|
58
58
|
ESP_LOGE(TAG, "Buffer alloc failed");
|
|
@@ -67,8 +67,8 @@ int Nextion::upload_by_chunks_(HTTPClient &http_client, uint32_t &range_start) {
|
|
|
67
67
|
ESP_LOGV(TAG, "Fetch %" PRIu16 " bytes", buffer_size);
|
|
68
68
|
uint16_t read_len = 0;
|
|
69
69
|
int partial_read_len = 0;
|
|
70
|
-
const uint32_t start_time =
|
|
71
|
-
while (read_len < buffer_size &&
|
|
70
|
+
const uint32_t start_time = App.get_loop_component_start_time();
|
|
71
|
+
while (read_len < buffer_size && App.get_loop_component_start_time() - start_time < 5000) {
|
|
72
72
|
if (http_client.getStreamPtr()->available() > 0) {
|
|
73
73
|
partial_read_len =
|
|
74
74
|
http_client.getStreamPtr()->readBytes(reinterpret_cast<char *>(buffer) + read_len, buffer_size - read_len);
|
|
@@ -152,7 +152,7 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) {
|
|
|
152
152
|
ESP_LOGD(TAG, "Exit reparse: %s", YESNO(exit_reparse));
|
|
153
153
|
ESP_LOGD(TAG, "URL: %s", this->tft_url_.c_str());
|
|
154
154
|
|
|
155
|
-
if (this->is_updating_) {
|
|
155
|
+
if (this->connection_state_.is_updating_) {
|
|
156
156
|
ESP_LOGW(TAG, "Upload in progress");
|
|
157
157
|
return false;
|
|
158
158
|
}
|
|
@@ -162,7 +162,7 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) {
|
|
|
162
162
|
return false;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
this->is_updating_ = true;
|
|
165
|
+
this->connection_state_.is_updating_ = true;
|
|
166
166
|
|
|
167
167
|
if (exit_reparse) {
|
|
168
168
|
ESP_LOGD(TAG, "Exit reparse mode");
|
|
@@ -203,7 +203,7 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) {
|
|
|
203
203
|
begin_status = http_client.begin(*this->get_wifi_client_(), this->tft_url_.c_str());
|
|
204
204
|
#endif // USE_ESP8266
|
|
205
205
|
if (!begin_status) {
|
|
206
|
-
this->is_updating_ = false;
|
|
206
|
+
this->connection_state_.is_updating_ = false;
|
|
207
207
|
ESP_LOGD(TAG, "Connection failed");
|
|
208
208
|
return false;
|
|
209
209
|
} else {
|
|
@@ -254,7 +254,7 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) {
|
|
|
254
254
|
|
|
255
255
|
// The Nextion will ignore the upload command if it is sleeping
|
|
256
256
|
ESP_LOGV(TAG, "Wake-up");
|
|
257
|
-
this->ignore_is_setup_ = true;
|
|
257
|
+
this->connection_state_.ignore_is_setup_ = true;
|
|
258
258
|
this->send_command_("sleep=0");
|
|
259
259
|
this->send_command_("dim=100");
|
|
260
260
|
delay(250); // NOLINT
|
|
@@ -335,31 +335,6 @@ bool Nextion::upload_tft(uint32_t baud_rate, bool exit_reparse) {
|
|
|
335
335
|
return upload_end_(true);
|
|
336
336
|
}
|
|
337
337
|
|
|
338
|
-
bool Nextion::upload_end_(bool successful) {
|
|
339
|
-
ESP_LOGD(TAG, "TFT upload done: %s", YESNO(successful));
|
|
340
|
-
|
|
341
|
-
if (successful) {
|
|
342
|
-
ESP_LOGD(TAG, "Restart");
|
|
343
|
-
delay(1500); // NOLINT
|
|
344
|
-
App.safe_reboot();
|
|
345
|
-
delay(1500); // NOLINT
|
|
346
|
-
} else {
|
|
347
|
-
ESP_LOGE(TAG, "TFT upload failed");
|
|
348
|
-
|
|
349
|
-
this->is_updating_ = false;
|
|
350
|
-
this->ignore_is_setup_ = false;
|
|
351
|
-
|
|
352
|
-
uint32_t baud_rate = this->parent_->get_baud_rate();
|
|
353
|
-
if (baud_rate != this->original_baud_rate_) {
|
|
354
|
-
ESP_LOGD(TAG, "Baud back: %" PRIu32 "->%" PRIu32, baud_rate, this->original_baud_rate_);
|
|
355
|
-
this->parent_->set_baud_rate(this->original_baud_rate_);
|
|
356
|
-
this->parent_->load_settings();
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
return successful;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
338
|
#ifdef USE_ESP8266
|
|
364
339
|
WiFiClient *Nextion::get_wifi_client_() {
|
|
365
340
|
if (this->tft_url_.compare(0, 6, "https:") == 0) {
|