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
|
@@ -62,7 +62,7 @@ struct SavedWifiFastConnectSettings {
|
|
|
62
62
|
uint8_t channel;
|
|
63
63
|
} PACKED; // NOLINT
|
|
64
64
|
|
|
65
|
-
enum WiFiComponentState {
|
|
65
|
+
enum WiFiComponentState : uint8_t {
|
|
66
66
|
/** Nothing has been initialized yet. Internal AP, if configured, is disabled at this point. */
|
|
67
67
|
WIFI_COMPONENT_STATE_OFF = 0,
|
|
68
68
|
/** WiFi is disabled. */
|
|
@@ -146,14 +146,14 @@ class WiFiAP {
|
|
|
146
146
|
|
|
147
147
|
protected:
|
|
148
148
|
std::string ssid_;
|
|
149
|
-
optional<bssid_t> bssid_;
|
|
150
149
|
std::string password_;
|
|
150
|
+
optional<bssid_t> bssid_;
|
|
151
151
|
#ifdef USE_WIFI_WPA2_EAP
|
|
152
152
|
optional<EAPAuth> eap_;
|
|
153
153
|
#endif // USE_WIFI_WPA2_EAP
|
|
154
|
-
optional<uint8_t> channel_;
|
|
155
|
-
float priority_{0};
|
|
156
154
|
optional<ManualIP> manual_ip_;
|
|
155
|
+
float priority_{0};
|
|
156
|
+
optional<uint8_t> channel_;
|
|
157
157
|
bool hidden_{false};
|
|
158
158
|
};
|
|
159
159
|
|
|
@@ -177,14 +177,14 @@ class WiFiScanResult {
|
|
|
177
177
|
bool operator==(const WiFiScanResult &rhs) const;
|
|
178
178
|
|
|
179
179
|
protected:
|
|
180
|
-
bool matches_{false};
|
|
181
180
|
bssid_t bssid_;
|
|
182
181
|
std::string ssid_;
|
|
182
|
+
float priority_{0.0f};
|
|
183
183
|
uint8_t channel_;
|
|
184
184
|
int8_t rssi_;
|
|
185
|
+
bool matches_{false};
|
|
185
186
|
bool with_auth_;
|
|
186
187
|
bool is_hidden_;
|
|
187
|
-
float priority_{0.0f};
|
|
188
188
|
};
|
|
189
189
|
|
|
190
190
|
struct WiFiSTAPriority {
|
|
@@ -192,7 +192,7 @@ struct WiFiSTAPriority {
|
|
|
192
192
|
float priority;
|
|
193
193
|
};
|
|
194
194
|
|
|
195
|
-
enum WiFiPowerSaveMode {
|
|
195
|
+
enum WiFiPowerSaveMode : uint8_t {
|
|
196
196
|
WIFI_POWER_SAVE_NONE = 0,
|
|
197
197
|
WIFI_POWER_SAVE_LIGHT,
|
|
198
198
|
WIFI_POWER_SAVE_HIGH,
|
|
@@ -321,8 +321,6 @@ class WiFiComponent : public Component {
|
|
|
321
321
|
int32_t get_wifi_channel();
|
|
322
322
|
|
|
323
323
|
protected:
|
|
324
|
-
static std::string format_mac_addr(const uint8_t mac[6]);
|
|
325
|
-
|
|
326
324
|
#ifdef USE_WIFI_AP
|
|
327
325
|
void setup_ap_config_();
|
|
328
326
|
#endif // USE_WIFI_AP
|
|
@@ -385,28 +383,36 @@ class WiFiComponent : public Component {
|
|
|
385
383
|
std::string use_address_;
|
|
386
384
|
std::vector<WiFiAP> sta_;
|
|
387
385
|
std::vector<WiFiSTAPriority> sta_priorities_;
|
|
386
|
+
std::vector<WiFiScanResult> scan_result_;
|
|
388
387
|
WiFiAP selected_ap_;
|
|
389
|
-
bool fast_connect_{false};
|
|
390
|
-
bool retry_hidden_{false};
|
|
391
|
-
|
|
392
|
-
bool has_ap_{false};
|
|
393
388
|
WiFiAP ap_;
|
|
394
|
-
|
|
395
|
-
|
|
389
|
+
optional<float> output_power_;
|
|
390
|
+
ESPPreferenceObject pref_;
|
|
391
|
+
ESPPreferenceObject fast_connect_pref_;
|
|
392
|
+
|
|
393
|
+
// Group all 32-bit integers together
|
|
396
394
|
uint32_t action_started_;
|
|
397
|
-
uint8_t num_retried_{0};
|
|
398
395
|
uint32_t last_connected_{0};
|
|
399
396
|
uint32_t reboot_timeout_{};
|
|
400
397
|
uint32_t ap_timeout_{};
|
|
398
|
+
|
|
399
|
+
// Group all 8-bit values together
|
|
400
|
+
WiFiComponentState state_{WIFI_COMPONENT_STATE_OFF};
|
|
401
401
|
WiFiPowerSaveMode power_save_{WIFI_POWER_SAVE_NONE};
|
|
402
|
+
uint8_t num_retried_{0};
|
|
403
|
+
#if USE_NETWORK_IPV6
|
|
404
|
+
uint8_t num_ipv6_addresses_{0};
|
|
405
|
+
#endif /* USE_NETWORK_IPV6 */
|
|
406
|
+
|
|
407
|
+
// Group all boolean values together
|
|
408
|
+
bool fast_connect_{false};
|
|
409
|
+
bool retry_hidden_{false};
|
|
410
|
+
bool has_ap_{false};
|
|
411
|
+
bool handled_connected_state_{false};
|
|
402
412
|
bool error_from_callback_{false};
|
|
403
|
-
std::vector<WiFiScanResult> scan_result_;
|
|
404
413
|
bool scan_done_{false};
|
|
405
414
|
bool ap_setup_{false};
|
|
406
|
-
optional<float> output_power_;
|
|
407
415
|
bool passive_scan_{false};
|
|
408
|
-
ESPPreferenceObject pref_;
|
|
409
|
-
ESPPreferenceObject fast_connect_pref_;
|
|
410
416
|
bool has_saved_wifi_settings_{false};
|
|
411
417
|
#ifdef USE_WIFI_11KV_SUPPORT
|
|
412
418
|
bool btm_{false};
|
|
@@ -414,10 +420,8 @@ class WiFiComponent : public Component {
|
|
|
414
420
|
#endif
|
|
415
421
|
bool enable_on_boot_;
|
|
416
422
|
bool got_ipv4_address_{false};
|
|
417
|
-
#if USE_NETWORK_IPV6
|
|
418
|
-
uint8_t num_ipv6_addresses_{0};
|
|
419
|
-
#endif /* USE_NETWORK_IPV6 */
|
|
420
423
|
|
|
424
|
+
// Pointers at the end (naturally aligned)
|
|
421
425
|
Trigger<> *connect_trigger_{new Trigger<>()};
|
|
422
426
|
Trigger<> *disconnect_trigger_{new Trigger<>()};
|
|
423
427
|
};
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
#include <algorithm>
|
|
10
10
|
#include <utility>
|
|
11
11
|
#ifdef USE_WIFI_WPA2_EAP
|
|
12
|
-
#include <
|
|
12
|
+
#include <esp_eap_client.h>
|
|
13
13
|
#endif
|
|
14
14
|
|
|
15
15
|
#ifdef USE_WIFI_AP
|
|
@@ -78,14 +78,14 @@ bool WiFiComponent::wifi_mode_(optional<bool> sta, optional<bool> ap) {
|
|
|
78
78
|
return true;
|
|
79
79
|
|
|
80
80
|
if (set_sta && !current_sta) {
|
|
81
|
-
ESP_LOGV(TAG, "Enabling STA
|
|
81
|
+
ESP_LOGV(TAG, "Enabling STA");
|
|
82
82
|
} else if (!set_sta && current_sta) {
|
|
83
|
-
ESP_LOGV(TAG, "Disabling STA
|
|
83
|
+
ESP_LOGV(TAG, "Disabling STA");
|
|
84
84
|
}
|
|
85
85
|
if (set_ap && !current_ap) {
|
|
86
|
-
ESP_LOGV(TAG, "Enabling AP
|
|
86
|
+
ESP_LOGV(TAG, "Enabling AP");
|
|
87
87
|
} else if (!set_ap && current_ap) {
|
|
88
|
-
ESP_LOGV(TAG, "Disabling AP
|
|
88
|
+
ESP_LOGV(TAG, "Disabling AP");
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
bool ret = WiFiClass::mode(set_mode);
|
|
@@ -147,11 +147,11 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
|
|
|
147
147
|
wifi_config_t conf;
|
|
148
148
|
memset(&conf, 0, sizeof(conf));
|
|
149
149
|
if (ap.get_ssid().size() > sizeof(conf.sta.ssid)) {
|
|
150
|
-
ESP_LOGE(TAG, "SSID
|
|
150
|
+
ESP_LOGE(TAG, "SSID too long");
|
|
151
151
|
return false;
|
|
152
152
|
}
|
|
153
153
|
if (ap.get_password().size() > sizeof(conf.sta.password)) {
|
|
154
|
-
ESP_LOGE(TAG, "
|
|
154
|
+
ESP_LOGE(TAG, "Password too long");
|
|
155
155
|
return false;
|
|
156
156
|
}
|
|
157
157
|
memcpy(reinterpret_cast<char *>(conf.sta.ssid), ap.get_ssid().c_str(), ap.get_ssid().size());
|
|
@@ -228,43 +228,43 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
|
|
|
228
228
|
if (ap.get_eap().has_value()) {
|
|
229
229
|
// note: all certificates and keys have to be null terminated. Lengths are appended by +1 to include \0.
|
|
230
230
|
EAPAuth eap = ap.get_eap().value();
|
|
231
|
-
err =
|
|
231
|
+
err = esp_eap_client_set_identity((uint8_t *) eap.identity.c_str(), eap.identity.length());
|
|
232
232
|
if (err != ESP_OK) {
|
|
233
|
-
ESP_LOGV(TAG, "
|
|
233
|
+
ESP_LOGV(TAG, "esp_eap_client_set_identity failed: %d", err);
|
|
234
234
|
}
|
|
235
235
|
int ca_cert_len = strlen(eap.ca_cert);
|
|
236
236
|
int client_cert_len = strlen(eap.client_cert);
|
|
237
237
|
int client_key_len = strlen(eap.client_key);
|
|
238
238
|
if (ca_cert_len) {
|
|
239
|
-
err =
|
|
239
|
+
err = esp_eap_client_set_ca_cert((uint8_t *) eap.ca_cert, ca_cert_len + 1);
|
|
240
240
|
if (err != ESP_OK) {
|
|
241
|
-
ESP_LOGV(TAG, "
|
|
241
|
+
ESP_LOGV(TAG, "esp_eap_client_set_ca_cert failed: %d", err);
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
244
|
// workout what type of EAP this is
|
|
245
245
|
// validation is not required as the config tool has already validated it
|
|
246
246
|
if (client_cert_len && client_key_len) {
|
|
247
247
|
// if we have certs, this must be EAP-TLS
|
|
248
|
-
err =
|
|
249
|
-
|
|
250
|
-
|
|
248
|
+
err = esp_eap_client_set_certificate_and_key((uint8_t *) eap.client_cert, client_cert_len + 1,
|
|
249
|
+
(uint8_t *) eap.client_key, client_key_len + 1,
|
|
250
|
+
(uint8_t *) eap.password.c_str(), strlen(eap.password.c_str()));
|
|
251
251
|
if (err != ESP_OK) {
|
|
252
|
-
ESP_LOGV(TAG, "
|
|
252
|
+
ESP_LOGV(TAG, "esp_eap_client_set_certificate_and_key failed: %d", err);
|
|
253
253
|
}
|
|
254
254
|
} else {
|
|
255
255
|
// in the absence of certs, assume this is username/password based
|
|
256
|
-
err =
|
|
256
|
+
err = esp_eap_client_set_username((uint8_t *) eap.username.c_str(), eap.username.length());
|
|
257
257
|
if (err != ESP_OK) {
|
|
258
|
-
ESP_LOGV(TAG, "
|
|
258
|
+
ESP_LOGV(TAG, "esp_eap_client_set_username failed: %d", err);
|
|
259
259
|
}
|
|
260
|
-
err =
|
|
260
|
+
err = esp_eap_client_set_password((uint8_t *) eap.password.c_str(), eap.password.length());
|
|
261
261
|
if (err != ESP_OK) {
|
|
262
|
-
ESP_LOGV(TAG, "
|
|
262
|
+
ESP_LOGV(TAG, "esp_eap_client_set_password failed: %d", err);
|
|
263
263
|
}
|
|
264
264
|
}
|
|
265
|
-
err =
|
|
265
|
+
err = esp_wifi_sta_enterprise_enable();
|
|
266
266
|
if (err != ESP_OK) {
|
|
267
|
-
ESP_LOGV(TAG, "
|
|
267
|
+
ESP_LOGV(TAG, "esp_wifi_sta_enterprise_enable failed: %d", err);
|
|
268
268
|
}
|
|
269
269
|
}
|
|
270
270
|
#endif // USE_WIFI_WPA2_EAP
|
|
@@ -319,7 +319,7 @@ bool WiFiComponent::wifi_sta_ip_config_(optional<ManualIP> manual_ip) {
|
|
|
319
319
|
if (dhcp_status != ESP_NETIF_DHCP_STARTED) {
|
|
320
320
|
err = esp_netif_dhcpc_start(s_sta_netif);
|
|
321
321
|
if (err != ESP_OK) {
|
|
322
|
-
ESP_LOGV(TAG, "Starting DHCP client failed
|
|
322
|
+
ESP_LOGV(TAG, "Starting DHCP client failed: %d", err);
|
|
323
323
|
}
|
|
324
324
|
return err == ESP_OK;
|
|
325
325
|
}
|
|
@@ -332,12 +332,12 @@ bool WiFiComponent::wifi_sta_ip_config_(optional<ManualIP> manual_ip) {
|
|
|
332
332
|
info.netmask = manual_ip->subnet;
|
|
333
333
|
err = esp_netif_dhcpc_stop(s_sta_netif);
|
|
334
334
|
if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED) {
|
|
335
|
-
ESP_LOGV(TAG, "Stopping DHCP client failed
|
|
335
|
+
ESP_LOGV(TAG, "Stopping DHCP client failed: %s", esp_err_to_name(err));
|
|
336
336
|
}
|
|
337
337
|
|
|
338
338
|
err = esp_netif_set_ip_info(s_sta_netif, &info);
|
|
339
339
|
if (err != ESP_OK) {
|
|
340
|
-
ESP_LOGV(TAG, "Setting manual IP info failed
|
|
340
|
+
ESP_LOGV(TAG, "Setting manual IP info failed: %s", esp_err_to_name(err));
|
|
341
341
|
}
|
|
342
342
|
|
|
343
343
|
esp_netif_dns_info_t dns;
|
|
@@ -520,18 +520,18 @@ using esphome_wifi_event_info_t = arduino_event_info_t;
|
|
|
520
520
|
void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_wifi_event_info_t info) {
|
|
521
521
|
switch (event) {
|
|
522
522
|
case ESPHOME_EVENT_ID_WIFI_READY: {
|
|
523
|
-
ESP_LOGV(TAG, "
|
|
523
|
+
ESP_LOGV(TAG, "Ready");
|
|
524
524
|
break;
|
|
525
525
|
}
|
|
526
526
|
case ESPHOME_EVENT_ID_WIFI_SCAN_DONE: {
|
|
527
527
|
auto it = info.wifi_scan_done;
|
|
528
|
-
ESP_LOGV(TAG, "
|
|
528
|
+
ESP_LOGV(TAG, "Scan done: status=%u number=%u scan_id=%u", it.status, it.number, it.scan_id);
|
|
529
529
|
|
|
530
530
|
this->wifi_scan_done_callback_();
|
|
531
531
|
break;
|
|
532
532
|
}
|
|
533
533
|
case ESPHOME_EVENT_ID_WIFI_STA_START: {
|
|
534
|
-
ESP_LOGV(TAG, "
|
|
534
|
+
ESP_LOGV(TAG, "STA start");
|
|
535
535
|
// apply hostname
|
|
536
536
|
s_sta_netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
|
|
537
537
|
esp_err_t err = esp_netif_set_hostname(s_sta_netif, App.get_name().c_str());
|
|
@@ -541,7 +541,7 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
541
541
|
break;
|
|
542
542
|
}
|
|
543
543
|
case ESPHOME_EVENT_ID_WIFI_STA_STOP: {
|
|
544
|
-
ESP_LOGV(TAG, "
|
|
544
|
+
ESP_LOGV(TAG, "STA stop");
|
|
545
545
|
break;
|
|
546
546
|
}
|
|
547
547
|
case ESPHOME_EVENT_ID_WIFI_STA_CONNECTED: {
|
|
@@ -549,10 +549,10 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
549
549
|
char buf[33];
|
|
550
550
|
memcpy(buf, it.ssid, it.ssid_len);
|
|
551
551
|
buf[it.ssid_len] = '\0';
|
|
552
|
-
ESP_LOGV(TAG, "
|
|
553
|
-
|
|
552
|
+
ESP_LOGV(TAG, "Connected ssid='%s' bssid=" LOG_SECRET("%s") " channel=%u, authmode=%s", buf,
|
|
553
|
+
format_mac_address_pretty(it.bssid).c_str(), it.channel, get_auth_mode_str(it.authmode));
|
|
554
554
|
#if USE_NETWORK_IPV6
|
|
555
|
-
this->set_timeout(100, [] { WiFi.
|
|
555
|
+
this->set_timeout(100, [] { WiFi.enableIPv6(); });
|
|
556
556
|
#endif /* USE_NETWORK_IPV6 */
|
|
557
557
|
|
|
558
558
|
break;
|
|
@@ -563,10 +563,10 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
563
563
|
memcpy(buf, it.ssid, it.ssid_len);
|
|
564
564
|
buf[it.ssid_len] = '\0';
|
|
565
565
|
if (it.reason == WIFI_REASON_NO_AP_FOUND) {
|
|
566
|
-
ESP_LOGW(TAG, "
|
|
566
|
+
ESP_LOGW(TAG, "Disconnected ssid='%s' reason='Probe Request Unsuccessful'", buf);
|
|
567
567
|
} else {
|
|
568
|
-
ESP_LOGW(TAG, "
|
|
569
|
-
|
|
568
|
+
ESP_LOGW(TAG, "Disconnected ssid='%s' bssid=" LOG_SECRET("%s") " reason='%s'", buf,
|
|
569
|
+
format_mac_address_pretty(it.bssid).c_str(), get_disconnect_reason_str(it.reason));
|
|
570
570
|
}
|
|
571
571
|
|
|
572
572
|
uint8_t reason = it.reason;
|
|
@@ -585,8 +585,7 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
585
585
|
}
|
|
586
586
|
case ESPHOME_EVENT_ID_WIFI_STA_AUTHMODE_CHANGE: {
|
|
587
587
|
auto it = info.wifi_sta_authmode_change;
|
|
588
|
-
ESP_LOGV(TAG, "
|
|
589
|
-
get_auth_mode_str(it.new_mode));
|
|
588
|
+
ESP_LOGV(TAG, "Authmode Change old=%s new=%s", get_auth_mode_str(it.old_mode), get_auth_mode_str(it.new_mode));
|
|
590
589
|
// Mitigate CVE-2020-12638
|
|
591
590
|
// https://lbsfilm.at/blog/wpa2-authenticationmode-downgrade-in-espressif-microprocessors
|
|
592
591
|
if (it.old_mode != WIFI_AUTH_OPEN && it.new_mode == WIFI_AUTH_OPEN) {
|
|
@@ -603,8 +602,7 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
603
602
|
}
|
|
604
603
|
case ESPHOME_EVENT_ID_WIFI_STA_GOT_IP: {
|
|
605
604
|
auto it = info.got_ip.ip_info;
|
|
606
|
-
ESP_LOGV(TAG, "
|
|
607
|
-
format_ip4_addr(it.gw).c_str());
|
|
605
|
+
ESP_LOGV(TAG, "static_ip=%s gateway=%s", format_ip4_addr(it.ip).c_str(), format_ip4_addr(it.gw).c_str());
|
|
608
606
|
this->got_ipv4_address_ = true;
|
|
609
607
|
#if USE_NETWORK_IPV6
|
|
610
608
|
s_sta_connecting = this->num_ipv6_addresses_ < USE_NETWORK_MIN_IPV6_ADDR_COUNT;
|
|
@@ -616,44 +614,44 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
616
614
|
#if USE_NETWORK_IPV6
|
|
617
615
|
case ESPHOME_EVENT_ID_WIFI_STA_GOT_IP6: {
|
|
618
616
|
auto it = info.got_ip6.ip6_info;
|
|
619
|
-
ESP_LOGV(TAG, "
|
|
617
|
+
ESP_LOGV(TAG, "IPv6 address=" IPV6STR, IPV62STR(it.ip));
|
|
620
618
|
this->num_ipv6_addresses_++;
|
|
621
619
|
s_sta_connecting = !(this->got_ipv4_address_ & (this->num_ipv6_addresses_ >= USE_NETWORK_MIN_IPV6_ADDR_COUNT));
|
|
622
620
|
break;
|
|
623
621
|
}
|
|
624
622
|
#endif /* USE_NETWORK_IPV6 */
|
|
625
623
|
case ESPHOME_EVENT_ID_WIFI_STA_LOST_IP: {
|
|
626
|
-
ESP_LOGV(TAG, "
|
|
624
|
+
ESP_LOGV(TAG, "Lost IP");
|
|
627
625
|
this->got_ipv4_address_ = false;
|
|
628
626
|
break;
|
|
629
627
|
}
|
|
630
628
|
case ESPHOME_EVENT_ID_WIFI_AP_START: {
|
|
631
|
-
ESP_LOGV(TAG, "
|
|
629
|
+
ESP_LOGV(TAG, "AP start");
|
|
632
630
|
break;
|
|
633
631
|
}
|
|
634
632
|
case ESPHOME_EVENT_ID_WIFI_AP_STOP: {
|
|
635
|
-
ESP_LOGV(TAG, "
|
|
633
|
+
ESP_LOGV(TAG, "AP stop");
|
|
636
634
|
break;
|
|
637
635
|
}
|
|
638
636
|
case ESPHOME_EVENT_ID_WIFI_AP_STACONNECTED: {
|
|
639
637
|
auto it = info.wifi_sta_connected;
|
|
640
638
|
auto &mac = it.bssid;
|
|
641
|
-
ESP_LOGV(TAG, "
|
|
639
|
+
ESP_LOGV(TAG, "AP client connected MAC=%s", format_mac_address_pretty(mac).c_str());
|
|
642
640
|
break;
|
|
643
641
|
}
|
|
644
642
|
case ESPHOME_EVENT_ID_WIFI_AP_STADISCONNECTED: {
|
|
645
643
|
auto it = info.wifi_sta_disconnected;
|
|
646
644
|
auto &mac = it.bssid;
|
|
647
|
-
ESP_LOGV(TAG, "
|
|
645
|
+
ESP_LOGV(TAG, "AP client disconnected MAC=%s", format_mac_address_pretty(mac).c_str());
|
|
648
646
|
break;
|
|
649
647
|
}
|
|
650
648
|
case ESPHOME_EVENT_ID_WIFI_AP_STAIPASSIGNED: {
|
|
651
|
-
ESP_LOGV(TAG, "
|
|
649
|
+
ESP_LOGV(TAG, "AP client assigned IP");
|
|
652
650
|
break;
|
|
653
651
|
}
|
|
654
652
|
case ESPHOME_EVENT_ID_WIFI_AP_PROBEREQRECVED: {
|
|
655
653
|
auto it = info.wifi_ap_probereqrecved;
|
|
656
|
-
ESP_LOGVV(TAG, "
|
|
654
|
+
ESP_LOGVV(TAG, "AP receive Probe Request MAC=%s RSSI=%d", format_mac_address_pretty(it.mac).c_str(), it.rssi);
|
|
657
655
|
break;
|
|
658
656
|
}
|
|
659
657
|
default:
|
|
@@ -662,12 +660,7 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
662
660
|
}
|
|
663
661
|
|
|
664
662
|
WiFiSTAConnectStatus WiFiComponent::wifi_sta_connect_status_() {
|
|
665
|
-
#if USE_ARDUINO_VERSION_CODE < VERSION_CODE(3, 1, 0)
|
|
666
|
-
const auto status = WiFiClass::status();
|
|
667
|
-
#else
|
|
668
663
|
const auto status = WiFi.status();
|
|
669
|
-
#endif
|
|
670
|
-
|
|
671
664
|
if (status == WL_CONNECT_FAILED || status == WL_CONNECTION_LOST) {
|
|
672
665
|
return WiFiSTAConnectStatus::ERROR_CONNECT_FAILED;
|
|
673
666
|
}
|
|
@@ -690,7 +683,7 @@ bool WiFiComponent::wifi_scan_start_(bool passive) {
|
|
|
690
683
|
// need to use WiFi because of WiFiScanClass allocations :(
|
|
691
684
|
int16_t err = WiFi.scanNetworks(true, true, passive, 200);
|
|
692
685
|
if (err != WIFI_SCAN_RUNNING) {
|
|
693
|
-
ESP_LOGV(TAG, "WiFi.scanNetworks failed
|
|
686
|
+
ESP_LOGV(TAG, "WiFi.scanNetworks failed: %d", err);
|
|
694
687
|
return false;
|
|
695
688
|
}
|
|
696
689
|
|
|
@@ -746,7 +739,7 @@ bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
|
|
|
746
739
|
|
|
747
740
|
err = esp_netif_set_ip_info(s_ap_netif, &info);
|
|
748
741
|
if (err != ESP_OK) {
|
|
749
|
-
ESP_LOGE(TAG, "esp_netif_set_ip_info failed
|
|
742
|
+
ESP_LOGE(TAG, "esp_netif_set_ip_info failed: %d", err);
|
|
750
743
|
return false;
|
|
751
744
|
}
|
|
752
745
|
|
|
@@ -762,14 +755,14 @@ bool WiFiComponent::wifi_ap_ip_config_(optional<ManualIP> manual_ip) {
|
|
|
762
755
|
err = esp_netif_dhcps_option(s_ap_netif, ESP_NETIF_OP_SET, ESP_NETIF_REQUESTED_IP_ADDRESS, &lease, sizeof(lease));
|
|
763
756
|
|
|
764
757
|
if (err != ESP_OK) {
|
|
765
|
-
ESP_LOGE(TAG, "esp_netif_dhcps_option failed
|
|
758
|
+
ESP_LOGE(TAG, "esp_netif_dhcps_option failed: %d", err);
|
|
766
759
|
return false;
|
|
767
760
|
}
|
|
768
761
|
|
|
769
762
|
err = esp_netif_dhcps_start(s_ap_netif);
|
|
770
763
|
|
|
771
764
|
if (err != ESP_OK) {
|
|
772
|
-
ESP_LOGE(TAG, "esp_netif_dhcps_start failed
|
|
765
|
+
ESP_LOGE(TAG, "esp_netif_dhcps_start failed: %d", err);
|
|
773
766
|
return false;
|
|
774
767
|
}
|
|
775
768
|
|
|
@@ -784,7 +777,7 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
|
784
777
|
wifi_config_t conf;
|
|
785
778
|
memset(&conf, 0, sizeof(conf));
|
|
786
779
|
if (ap.get_ssid().size() > sizeof(conf.ap.ssid)) {
|
|
787
|
-
ESP_LOGE(TAG, "AP SSID
|
|
780
|
+
ESP_LOGE(TAG, "AP SSID too long");
|
|
788
781
|
return false;
|
|
789
782
|
}
|
|
790
783
|
memcpy(reinterpret_cast<char *>(conf.ap.ssid), ap.get_ssid().c_str(), ap.get_ssid().size());
|
|
@@ -799,7 +792,7 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
|
799
792
|
} else {
|
|
800
793
|
conf.ap.authmode = WIFI_AUTH_WPA2_PSK;
|
|
801
794
|
if (ap.get_password().size() > sizeof(conf.ap.password)) {
|
|
802
|
-
ESP_LOGE(TAG, "AP password
|
|
795
|
+
ESP_LOGE(TAG, "AP password too long");
|
|
803
796
|
return false;
|
|
804
797
|
}
|
|
805
798
|
memcpy(reinterpret_cast<char *>(conf.ap.password), ap.get_password().c_str(), ap.get_password().size());
|
|
@@ -810,14 +803,14 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
|
810
803
|
|
|
811
804
|
esp_err_t err = esp_wifi_set_config(WIFI_IF_AP, &conf);
|
|
812
805
|
if (err != ESP_OK) {
|
|
813
|
-
ESP_LOGV(TAG, "esp_wifi_set_config failed
|
|
806
|
+
ESP_LOGV(TAG, "esp_wifi_set_config failed: %d", err);
|
|
814
807
|
return false;
|
|
815
808
|
}
|
|
816
809
|
|
|
817
810
|
yield();
|
|
818
811
|
|
|
819
812
|
if (!this->wifi_ap_ip_config_(ap.get_manual_ip())) {
|
|
820
|
-
ESP_LOGV(TAG, "wifi_ap_ip_config_ failed
|
|
813
|
+
ESP_LOGV(TAG, "wifi_ap_ip_config_ failed");
|
|
821
814
|
return false;
|
|
822
815
|
}
|
|
823
816
|
|