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
|
@@ -70,6 +70,7 @@ PROTOCOLS = {
|
|
|
70
70
|
"airway": Protocol.PROTOCOL_AIRWAY,
|
|
71
71
|
"bgh_aud": Protocol.PROTOCOL_BGH_AUD,
|
|
72
72
|
"panasonic_altdke": Protocol.PROTOCOL_PANASONIC_ALTDKE,
|
|
73
|
+
"philco_phs32": Protocol.PROTOCOL_PHILCO_PHS32,
|
|
73
74
|
"vaillantvai8": Protocol.PROTOCOL_VAILLANTVAI8,
|
|
74
75
|
"r51m": Protocol.PROTOCOL_R51M,
|
|
75
76
|
}
|
|
@@ -125,6 +126,6 @@ async def to_code(config):
|
|
|
125
126
|
cg.add(var.set_max_temperature(config[CONF_MAX_TEMPERATURE]))
|
|
126
127
|
cg.add(var.set_min_temperature(config[CONF_MIN_TEMPERATURE]))
|
|
127
128
|
|
|
128
|
-
cg.add_library("tonia/HeatpumpIR", "1.0.
|
|
129
|
+
cg.add_library("tonia/HeatpumpIR", "1.0.35")
|
|
129
130
|
if CORE.is_libretiny:
|
|
130
131
|
CORE.add_platformio_option("lib_ignore", "IRremoteESP8266")
|
|
@@ -65,6 +65,7 @@ const std::map<Protocol, std::function<HeatpumpIR *()>> PROTOCOL_CONSTRUCTOR_MAP
|
|
|
65
65
|
{PROTOCOL_AIRWAY, []() { return new AIRWAYHeatpumpIR(); }}, // NOLINT
|
|
66
66
|
{PROTOCOL_BGH_AUD, []() { return new BGHHeatpumpIR(); }}, // NOLINT
|
|
67
67
|
{PROTOCOL_PANASONIC_ALTDKE, []() { return new PanasonicAltDKEHeatpumpIR(); }}, // NOLINT
|
|
68
|
+
{PROTOCOL_PHILCO_PHS32, []() { return new PhilcoPHS32HeatpumpIR(); }}, // NOLINT
|
|
68
69
|
{PROTOCOL_VAILLANTVAI8, []() { return new VaillantHeatpumpIR(); }}, // NOLINT
|
|
69
70
|
{PROTOCOL_R51M, []() { return new R51MHeatpumpIR(); }}, // NOLINT
|
|
70
71
|
};
|
|
@@ -18,7 +18,6 @@ class HONEYWELLABP2Sensor : public PollingComponent, public i2c::I2CDevice {
|
|
|
18
18
|
void set_temperature_sensor(sensor::Sensor *temperature_sensor) { this->temperature_sensor_ = temperature_sensor; };
|
|
19
19
|
void loop() override;
|
|
20
20
|
void update() override;
|
|
21
|
-
float get_setup_priority() const override { return setup_priority::DATA; };
|
|
22
21
|
void dump_config() override;
|
|
23
22
|
|
|
24
23
|
void read_sensor_data();
|
|
@@ -41,6 +41,8 @@ CONFIG_SCHEMA = cv.All(
|
|
|
41
41
|
async def to_code(config):
|
|
42
42
|
cg.add_build_flag("-DUSE_HOST")
|
|
43
43
|
cg.add_define("USE_ESPHOME_HOST_MAC_ADDRESS", config[CONF_MAC_ADDRESS].parts)
|
|
44
|
-
cg.add_build_flag("-std=
|
|
44
|
+
cg.add_build_flag("-std=gnu++20")
|
|
45
45
|
cg.add_define("ESPHOME_BOARD", "host")
|
|
46
46
|
cg.add_platformio_option("platform", "platformio/native")
|
|
47
|
+
cg.add_platformio_option("lib_ldf_mode", "off")
|
|
48
|
+
cg.add_platformio_option("lib_compat_mode", "strict")
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#include "esphome/core/helpers.h"
|
|
2
|
+
|
|
3
|
+
#ifdef USE_HOST
|
|
4
|
+
|
|
5
|
+
#ifndef _WIN32
|
|
6
|
+
#include <net/if.h>
|
|
7
|
+
#include <netinet/in.h>
|
|
8
|
+
#include <sys/ioctl.h>
|
|
9
|
+
#endif
|
|
10
|
+
#include <unistd.h>
|
|
11
|
+
#include <limits>
|
|
12
|
+
#include <random>
|
|
13
|
+
|
|
14
|
+
#include "esphome/core/defines.h"
|
|
15
|
+
#include "esphome/core/log.h"
|
|
16
|
+
|
|
17
|
+
namespace esphome {
|
|
18
|
+
|
|
19
|
+
static const char *const TAG = "helpers.host";
|
|
20
|
+
|
|
21
|
+
uint32_t random_uint32() {
|
|
22
|
+
std::random_device dev;
|
|
23
|
+
std::mt19937 rng(dev());
|
|
24
|
+
std::uniform_int_distribution<uint32_t> dist(0, std::numeric_limits<uint32_t>::max());
|
|
25
|
+
return dist(rng);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
bool random_bytes(uint8_t *data, size_t len) {
|
|
29
|
+
FILE *fp = fopen("/dev/urandom", "r");
|
|
30
|
+
if (fp == nullptr) {
|
|
31
|
+
ESP_LOGW(TAG, "Could not open /dev/urandom, errno=%d", errno);
|
|
32
|
+
exit(1);
|
|
33
|
+
}
|
|
34
|
+
size_t read = fread(data, 1, len, fp);
|
|
35
|
+
if (read != len) {
|
|
36
|
+
ESP_LOGW(TAG, "Not enough data from /dev/urandom");
|
|
37
|
+
exit(1);
|
|
38
|
+
}
|
|
39
|
+
fclose(fp);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Host platform uses std::mutex for proper thread synchronization
|
|
44
|
+
Mutex::Mutex() { handle_ = new std::mutex(); }
|
|
45
|
+
Mutex::~Mutex() { delete static_cast<std::mutex *>(handle_); }
|
|
46
|
+
void Mutex::lock() { static_cast<std::mutex *>(handle_)->lock(); }
|
|
47
|
+
bool Mutex::try_lock() { return static_cast<std::mutex *>(handle_)->try_lock(); }
|
|
48
|
+
void Mutex::unlock() { static_cast<std::mutex *>(handle_)->unlock(); }
|
|
49
|
+
|
|
50
|
+
void get_mac_address_raw(uint8_t *mac) { // NOLINT(readability-non-const-parameter)
|
|
51
|
+
static const uint8_t esphome_host_mac_address[6] = USE_ESPHOME_HOST_MAC_ADDRESS;
|
|
52
|
+
memcpy(mac, esphome_host_mac_address, sizeof(esphome_host_mac_address));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
} // namespace esphome
|
|
56
|
+
|
|
57
|
+
#endif // USE_HOST
|
|
@@ -2,6 +2,7 @@ from esphome import automation
|
|
|
2
2
|
import esphome.codegen as cg
|
|
3
3
|
from esphome.components import esp32
|
|
4
4
|
from esphome.components.const import CONF_REQUEST_HEADERS
|
|
5
|
+
from esphome.config_helpers import filter_source_files_from_platform
|
|
5
6
|
import esphome.config_validation as cv
|
|
6
7
|
from esphome.const import (
|
|
7
8
|
CONF_ESP8266_DISABLE_SSL_SUPPORT,
|
|
@@ -13,6 +14,7 @@ from esphome.const import (
|
|
|
13
14
|
CONF_URL,
|
|
14
15
|
CONF_WATCHDOG_TIMEOUT,
|
|
15
16
|
PLATFORM_HOST,
|
|
17
|
+
PlatformFramework,
|
|
16
18
|
__version__,
|
|
17
19
|
)
|
|
18
20
|
from esphome.core import CORE, Lambda
|
|
@@ -175,7 +177,7 @@ async def to_code(config):
|
|
|
175
177
|
not config.get(CONF_VERIFY_SSL),
|
|
176
178
|
)
|
|
177
179
|
else:
|
|
178
|
-
cg.add_library("
|
|
180
|
+
cg.add_library("NetworkClientSecure", None)
|
|
179
181
|
cg.add_library("HTTPClient", None)
|
|
180
182
|
if CORE.is_esp8266:
|
|
181
183
|
cg.add_library("ESP8266HTTPClient", None)
|
|
@@ -319,3 +321,19 @@ async def http_request_action_to_code(config, action_id, template_arg, args):
|
|
|
319
321
|
await automation.build_automation(trigger, [], conf)
|
|
320
322
|
|
|
321
323
|
return var
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
FILTER_SOURCE_FILES = filter_source_files_from_platform(
|
|
327
|
+
{
|
|
328
|
+
"http_request_host.cpp": {PlatformFramework.HOST_NATIVE},
|
|
329
|
+
"http_request_arduino.cpp": {
|
|
330
|
+
PlatformFramework.ESP32_ARDUINO,
|
|
331
|
+
PlatformFramework.ESP8266_ARDUINO,
|
|
332
|
+
PlatformFramework.RP2040_ARDUINO,
|
|
333
|
+
PlatformFramework.BK72XX_ARDUINO,
|
|
334
|
+
PlatformFramework.RTL87XX_ARDUINO,
|
|
335
|
+
PlatformFramework.LN882X_ARDUINO,
|
|
336
|
+
},
|
|
337
|
+
"http_request_idf.cpp": {PlatformFramework.ESP32_IDF},
|
|
338
|
+
}
|
|
339
|
+
)
|
|
@@ -239,7 +239,7 @@ template<typename... Ts> class HttpRequestSendAction : public Action<Ts...> {
|
|
|
239
239
|
|
|
240
240
|
std::string response_body;
|
|
241
241
|
if (this->capture_response_.value(x...)) {
|
|
242
|
-
|
|
242
|
+
RAMAllocator<uint8_t> allocator;
|
|
243
243
|
uint8_t *buf = allocator.allocate(max_length);
|
|
244
244
|
if (buf != nullptr) {
|
|
245
245
|
size_t read_index = 0;
|
|
@@ -133,7 +133,6 @@ std::shared_ptr<HttpContainer> HttpRequestArduino::perform(std::string url, std:
|
|
|
133
133
|
std::string header_value = container->client_.header(i).c_str();
|
|
134
134
|
ESP_LOGD(TAG, "Received response header, name: %s, value: %s", header_name.c_str(), header_value.c_str());
|
|
135
135
|
container->response_headers_[header_name].push_back(header_value);
|
|
136
|
-
break;
|
|
137
136
|
}
|
|
138
137
|
}
|
|
139
138
|
|
|
@@ -42,7 +42,6 @@ esp_err_t HttpRequestIDF::http_event_handler(esp_http_client_event_t *evt) {
|
|
|
42
42
|
const std::string header_value = evt->header_value;
|
|
43
43
|
ESP_LOGD(TAG, "Received response header, name: %s, value: %s", header_name.c_str(), header_value.c_str());
|
|
44
44
|
user_data->response_headers[header_name].push_back(header_value);
|
|
45
|
-
break;
|
|
46
45
|
}
|
|
47
46
|
break;
|
|
48
47
|
}
|
|
@@ -258,7 +258,7 @@ bool OtaHttpRequestComponent::http_get_md5_() {
|
|
|
258
258
|
}
|
|
259
259
|
|
|
260
260
|
bool OtaHttpRequestComponent::validate_url_(const std::string &url) {
|
|
261
|
-
if ((url.length() < 8) ||
|
|
261
|
+
if ((url.length() < 8) || !url.starts_with("http") || (url.find("://") == std::string::npos)) {
|
|
262
262
|
ESP_LOGE(TAG, "URL is invalid and/or must be prefixed with 'http://' or 'https://'");
|
|
263
263
|
return false;
|
|
264
264
|
}
|
|
@@ -50,15 +50,17 @@ void HttpRequestUpdate::update_task(void *params) {
|
|
|
50
50
|
|
|
51
51
|
if (container == nullptr || container->status_code != HTTP_STATUS_OK) {
|
|
52
52
|
std::string msg = str_sprintf("Failed to fetch manifest from %s", this_update->source_url_.c_str());
|
|
53
|
-
|
|
53
|
+
// Defer to main loop to avoid race condition on component_state_ read-modify-write
|
|
54
|
+
this_update->defer([this_update, msg]() { this_update->status_set_error(msg.c_str()); });
|
|
54
55
|
UPDATE_RETURN;
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
|
|
58
|
+
RAMAllocator<uint8_t> allocator;
|
|
58
59
|
uint8_t *data = allocator.allocate(container->content_length);
|
|
59
60
|
if (data == nullptr) {
|
|
60
|
-
std::string msg = str_sprintf("Failed to allocate %
|
|
61
|
-
|
|
61
|
+
std::string msg = str_sprintf("Failed to allocate %zu bytes for manifest", container->content_length);
|
|
62
|
+
// Defer to main loop to avoid race condition on component_state_ read-modify-write
|
|
63
|
+
this_update->defer([this_update, msg]() { this_update->status_set_error(msg.c_str()); });
|
|
62
64
|
container->end();
|
|
63
65
|
UPDATE_RETURN;
|
|
64
66
|
}
|
|
@@ -81,7 +83,7 @@ void HttpRequestUpdate::update_task(void *params) {
|
|
|
81
83
|
container.reset(); // Release ownership of the container's shared_ptr
|
|
82
84
|
|
|
83
85
|
valid = json::parse_json(response, [this_update](JsonObject root) -> bool {
|
|
84
|
-
if (!root
|
|
86
|
+
if (!root["name"].is<const char *>() || !root["version"].is<const char *>() || !root["builds"].is<JsonArray>()) {
|
|
85
87
|
ESP_LOGE(TAG, "Manifest does not contain required fields");
|
|
86
88
|
return false;
|
|
87
89
|
}
|
|
@@ -89,26 +91,26 @@ void HttpRequestUpdate::update_task(void *params) {
|
|
|
89
91
|
this_update->update_info_.latest_version = root["version"].as<std::string>();
|
|
90
92
|
|
|
91
93
|
for (auto build : root["builds"].as<JsonArray>()) {
|
|
92
|
-
if (!build
|
|
94
|
+
if (!build["chipFamily"].is<const char *>()) {
|
|
93
95
|
ESP_LOGE(TAG, "Manifest does not contain required fields");
|
|
94
96
|
return false;
|
|
95
97
|
}
|
|
96
98
|
if (build["chipFamily"] == ESPHOME_VARIANT) {
|
|
97
|
-
if (!build
|
|
99
|
+
if (!build["ota"].is<JsonObject>()) {
|
|
98
100
|
ESP_LOGE(TAG, "Manifest does not contain required fields");
|
|
99
101
|
return false;
|
|
100
102
|
}
|
|
101
|
-
|
|
102
|
-
if (!ota
|
|
103
|
+
JsonObject ota = build["ota"].as<JsonObject>();
|
|
104
|
+
if (!ota["path"].is<const char *>() || !ota["md5"].is<const char *>()) {
|
|
103
105
|
ESP_LOGE(TAG, "Manifest does not contain required fields");
|
|
104
106
|
return false;
|
|
105
107
|
}
|
|
106
108
|
this_update->update_info_.firmware_url = ota["path"].as<std::string>();
|
|
107
109
|
this_update->update_info_.md5 = ota["md5"].as<std::string>();
|
|
108
110
|
|
|
109
|
-
if (ota
|
|
111
|
+
if (ota["summary"].is<const char *>())
|
|
110
112
|
this_update->update_info_.summary = ota["summary"].as<std::string>();
|
|
111
|
-
if (ota
|
|
113
|
+
if (ota["release_url"].is<const char *>())
|
|
112
114
|
this_update->update_info_.release_url = ota["release_url"].as<std::string>();
|
|
113
115
|
|
|
114
116
|
return true;
|
|
@@ -120,7 +122,8 @@ void HttpRequestUpdate::update_task(void *params) {
|
|
|
120
122
|
|
|
121
123
|
if (!valid) {
|
|
122
124
|
std::string msg = str_sprintf("Failed to parse JSON from %s", this_update->source_url_.c_str());
|
|
123
|
-
|
|
125
|
+
// Defer to main loop to avoid race condition on component_state_ read-modify-write
|
|
126
|
+
this_update->defer([this_update, msg]() { this_update->status_set_error(msg.c_str()); });
|
|
124
127
|
UPDATE_RETURN;
|
|
125
128
|
}
|
|
126
129
|
|
|
@@ -147,18 +150,34 @@ void HttpRequestUpdate::update_task(void *params) {
|
|
|
147
150
|
this_update->update_info_.current_version = current_version;
|
|
148
151
|
}
|
|
149
152
|
|
|
153
|
+
bool trigger_update_available = false;
|
|
154
|
+
|
|
150
155
|
if (this_update->update_info_.latest_version.empty() ||
|
|
151
156
|
this_update->update_info_.latest_version == this_update->update_info_.current_version) {
|
|
152
157
|
this_update->state_ = update::UPDATE_STATE_NO_UPDATE;
|
|
153
158
|
} else {
|
|
159
|
+
if (this_update->state_ != update::UPDATE_STATE_AVAILABLE) {
|
|
160
|
+
trigger_update_available = true;
|
|
161
|
+
}
|
|
154
162
|
this_update->state_ = update::UPDATE_STATE_AVAILABLE;
|
|
155
163
|
}
|
|
156
164
|
|
|
157
|
-
|
|
158
|
-
|
|
165
|
+
// Defer to main loop to ensure thread-safe execution of:
|
|
166
|
+
// - status_clear_error() performs non-atomic read-modify-write on component_state_
|
|
167
|
+
// - publish_state() triggers API callbacks that write to the shared protobuf buffer
|
|
168
|
+
// which can be corrupted if accessed concurrently from task and main loop threads
|
|
169
|
+
// - update_available trigger to ensure consistent state when the trigger fires
|
|
170
|
+
this_update->defer([this_update, trigger_update_available]() {
|
|
171
|
+
this_update->update_info_.has_progress = false;
|
|
172
|
+
this_update->update_info_.progress = 0.0f;
|
|
173
|
+
|
|
174
|
+
this_update->status_clear_error();
|
|
175
|
+
this_update->publish_state();
|
|
159
176
|
|
|
160
|
-
|
|
161
|
-
|
|
177
|
+
if (trigger_update_available) {
|
|
178
|
+
this_update->get_update_available_trigger()->trigger(this_update->update_info_);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
162
181
|
|
|
163
182
|
UPDATE_RETURN;
|
|
164
183
|
}
|
|
@@ -159,12 +159,6 @@ void HydreonRGxxComponent::schedule_reboot_() {
|
|
|
159
159
|
});
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
bool HydreonRGxxComponent::buffer_starts_with_(const std::string &prefix) {
|
|
163
|
-
return this->buffer_starts_with_(prefix.c_str());
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
bool HydreonRGxxComponent::buffer_starts_with_(const char *prefix) { return buffer_.rfind(prefix, 0) == 0; }
|
|
167
|
-
|
|
168
162
|
void HydreonRGxxComponent::process_line_() {
|
|
169
163
|
ESP_LOGV(TAG, "Read from serial: %s", this->buffer_.substr(0, this->buffer_.size() - 2).c_str());
|
|
170
164
|
|
|
@@ -191,7 +185,7 @@ void HydreonRGxxComponent::process_line_() {
|
|
|
191
185
|
ESP_LOGW(TAG, "Received EmSat!");
|
|
192
186
|
this->em_sat_ = true;
|
|
193
187
|
}
|
|
194
|
-
if (
|
|
188
|
+
if (buffer_.starts_with("PwrDays")) {
|
|
195
189
|
if (this->boot_count_ <= 0) {
|
|
196
190
|
this->boot_count_ = 1;
|
|
197
191
|
} else {
|
|
@@ -220,7 +214,7 @@ void HydreonRGxxComponent::process_line_() {
|
|
|
220
214
|
}
|
|
221
215
|
return;
|
|
222
216
|
}
|
|
223
|
-
if (
|
|
217
|
+
if (buffer_.starts_with("SW")) {
|
|
224
218
|
std::string::size_type majend = this->buffer_.find('.');
|
|
225
219
|
std::string::size_type endversion = this->buffer_.find(' ', 3);
|
|
226
220
|
if (majend == std::string::npos || endversion == std::string::npos || majend > endversion) {
|
|
@@ -282,7 +276,7 @@ void HydreonRGxxComponent::process_line_() {
|
|
|
282
276
|
}
|
|
283
277
|
} else {
|
|
284
278
|
for (const auto *ignore : IGNORE_STRINGS) {
|
|
285
|
-
if (
|
|
279
|
+
if (buffer_.starts_with(ignore)) {
|
|
286
280
|
ESP_LOGI(TAG, "Ignoring %s", this->buffer_.substr(0, this->buffer_.size() - 2).c_str());
|
|
287
281
|
return;
|
|
288
282
|
}
|
|
@@ -111,8 +111,8 @@ CONFIG_SCHEMA = cv.All(
|
|
|
111
111
|
cv.Optional(CONF_MOISTURE): sensor.sensor_schema(
|
|
112
112
|
unit_of_measurement=UNIT_INTENSITY,
|
|
113
113
|
accuracy_decimals=0,
|
|
114
|
-
device_class=DEVICE_CLASS_PRECIPITATION_INTENSITY,
|
|
115
114
|
state_class=STATE_CLASS_MEASUREMENT,
|
|
115
|
+
icon="mdi:weather-rainy",
|
|
116
116
|
),
|
|
117
117
|
cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(
|
|
118
118
|
unit_of_measurement=UNIT_CELSIUS,
|
|
@@ -3,14 +3,13 @@ import logging
|
|
|
3
3
|
from esphome import pins
|
|
4
4
|
import esphome.codegen as cg
|
|
5
5
|
from esphome.components import esp32
|
|
6
|
+
from esphome.config_helpers import filter_source_files_from_platform
|
|
6
7
|
import esphome.config_validation as cv
|
|
7
8
|
from esphome.const import (
|
|
8
9
|
CONF_ADDRESS,
|
|
9
10
|
CONF_FREQUENCY,
|
|
10
11
|
CONF_I2C_ID,
|
|
11
12
|
CONF_ID,
|
|
12
|
-
CONF_INPUT,
|
|
13
|
-
CONF_OUTPUT,
|
|
14
13
|
CONF_SCAN,
|
|
15
14
|
CONF_SCL,
|
|
16
15
|
CONF_SDA,
|
|
@@ -20,6 +19,7 @@ from esphome.const import (
|
|
|
20
19
|
PLATFORM_ESP32,
|
|
21
20
|
PLATFORM_ESP8266,
|
|
22
21
|
PLATFORM_RP2040,
|
|
22
|
+
PlatformFramework,
|
|
23
23
|
)
|
|
24
24
|
from esphome.core import CORE, coroutine_with_priority
|
|
25
25
|
import esphome.final_validate as fv
|
|
@@ -28,8 +28,9 @@ LOGGER = logging.getLogger(__name__)
|
|
|
28
28
|
CODEOWNERS = ["@esphome/core"]
|
|
29
29
|
i2c_ns = cg.esphome_ns.namespace("i2c")
|
|
30
30
|
I2CBus = i2c_ns.class_("I2CBus")
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
InternalI2CBus = i2c_ns.class_("InternalI2CBus", I2CBus)
|
|
32
|
+
ArduinoI2CBus = i2c_ns.class_("ArduinoI2CBus", InternalI2CBus, cg.Component)
|
|
33
|
+
IDFI2CBus = i2c_ns.class_("IDFI2CBus", InternalI2CBus, cg.Component)
|
|
33
34
|
I2CDevice = i2c_ns.class_("I2CDevice")
|
|
34
35
|
|
|
35
36
|
|
|
@@ -72,20 +73,15 @@ def validate_config(config):
|
|
|
72
73
|
return config
|
|
73
74
|
|
|
74
75
|
|
|
75
|
-
pin_with_input_and_output_support = pins.internal_gpio_pin_number(
|
|
76
|
-
{CONF_OUTPUT: True, CONF_INPUT: True}
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
|
|
80
76
|
CONFIG_SCHEMA = cv.All(
|
|
81
77
|
cv.Schema(
|
|
82
78
|
{
|
|
83
79
|
cv.GenerateID(): _bus_declare_type,
|
|
84
|
-
cv.Optional(CONF_SDA, default="SDA"):
|
|
80
|
+
cv.Optional(CONF_SDA, default="SDA"): pins.internal_gpio_pin_number,
|
|
85
81
|
cv.SplitDefault(CONF_SDA_PULLUP_ENABLED, esp32_idf=True): cv.All(
|
|
86
82
|
cv.only_with_esp_idf, cv.boolean
|
|
87
83
|
),
|
|
88
|
-
cv.Optional(CONF_SCL, default="SCL"):
|
|
84
|
+
cv.Optional(CONF_SCL, default="SCL"): pins.internal_gpio_pin_number,
|
|
89
85
|
cv.SplitDefault(CONF_SCL_PULLUP_ENABLED, esp32_idf=True): cv.All(
|
|
90
86
|
cv.only_with_esp_idf, cv.boolean
|
|
91
87
|
),
|
|
@@ -104,6 +100,7 @@ CONFIG_SCHEMA = cv.All(
|
|
|
104
100
|
@coroutine_with_priority(1.0)
|
|
105
101
|
async def to_code(config):
|
|
106
102
|
cg.add_global(i2c_ns.using)
|
|
103
|
+
cg.add_define("USE_I2C")
|
|
107
104
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
108
105
|
await cg.register_component(var, config)
|
|
109
106
|
|
|
@@ -210,3 +207,18 @@ def final_validate_device_schema(
|
|
|
210
207
|
{cv.Required(CONF_I2C_ID): fv.id_declaration_match_schema(hub_schema)},
|
|
211
208
|
extra=cv.ALLOW_EXTRA,
|
|
212
209
|
)
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
FILTER_SOURCE_FILES = filter_source_files_from_platform(
|
|
213
|
+
{
|
|
214
|
+
"i2c_bus_arduino.cpp": {
|
|
215
|
+
PlatformFramework.ESP32_ARDUINO,
|
|
216
|
+
PlatformFramework.ESP8266_ARDUINO,
|
|
217
|
+
PlatformFramework.RP2040_ARDUINO,
|
|
218
|
+
PlatformFramework.BK72XX_ARDUINO,
|
|
219
|
+
PlatformFramework.RTL87XX_ARDUINO,
|
|
220
|
+
PlatformFramework.LN882X_ARDUINO,
|
|
221
|
+
},
|
|
222
|
+
"i2c_bus_esp_idf.cpp": {PlatformFramework.ESP32_IDF},
|
|
223
|
+
}
|
|
224
|
+
)
|
esphome/components/i2c/i2c_bus.h
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#pragma once
|
|
2
|
-
#include <cstdint>
|
|
3
2
|
#include <cstddef>
|
|
3
|
+
#include <cstdint>
|
|
4
4
|
#include <utility>
|
|
5
5
|
#include <vector>
|
|
6
6
|
|
|
@@ -108,5 +108,12 @@ class I2CBus {
|
|
|
108
108
|
bool scan_{false}; ///< Should we scan ? Can be set in the yaml
|
|
109
109
|
};
|
|
110
110
|
|
|
111
|
+
class InternalI2CBus : public I2CBus {
|
|
112
|
+
public:
|
|
113
|
+
/// @brief Returns the I2C port number.
|
|
114
|
+
/// @return the port number of the internal I2C bus
|
|
115
|
+
virtual int get_port() const = 0;
|
|
116
|
+
};
|
|
117
|
+
|
|
111
118
|
} // namespace i2c
|
|
112
119
|
} // namespace esphome
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#ifdef USE_ARDUINO
|
|
2
2
|
|
|
3
3
|
#include "i2c_bus_arduino.h"
|
|
4
|
+
#include <Arduino.h>
|
|
5
|
+
#include <cstring>
|
|
4
6
|
#include "esphome/core/application.h"
|
|
5
7
|
#include "esphome/core/helpers.h"
|
|
6
8
|
#include "esphome/core/log.h"
|
|
7
|
-
#include <Arduino.h>
|
|
8
|
-
#include <cstring>
|
|
9
9
|
|
|
10
10
|
namespace esphome {
|
|
11
11
|
namespace i2c {
|
|
@@ -23,6 +23,7 @@ void ArduinoI2CBus::setup() {
|
|
|
23
23
|
} else {
|
|
24
24
|
wire_ = new TwoWire(next_bus_num); // NOLINT(cppcoreguidelines-owning-memory)
|
|
25
25
|
}
|
|
26
|
+
this->port_ = next_bus_num;
|
|
26
27
|
next_bus_num++;
|
|
27
28
|
#elif defined(USE_ESP8266)
|
|
28
29
|
wire_ = new TwoWire(); // NOLINT(cppcoreguidelines-owning-memory)
|
|
@@ -125,7 +126,7 @@ ErrorCode ArduinoI2CBus::readv(uint8_t address, ReadBuffer *buffers, size_t cnt)
|
|
|
125
126
|
size_t to_request = 0;
|
|
126
127
|
for (size_t i = 0; i < cnt; i++)
|
|
127
128
|
to_request += buffers[i].len;
|
|
128
|
-
size_t ret = wire_->requestFrom(
|
|
129
|
+
size_t ret = wire_->requestFrom(address, to_request, true);
|
|
129
130
|
if (ret != to_request) {
|
|
130
131
|
ESP_LOGVV(TAG, "RX %u from %02X failed with error %u", to_request, address, ret);
|
|
131
132
|
return ERROR_TIMEOUT;
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
#ifdef USE_ARDUINO
|
|
4
4
|
|
|
5
|
-
#include "i2c_bus.h"
|
|
6
|
-
#include "esphome/core/component.h"
|
|
7
5
|
#include <Wire.h>
|
|
6
|
+
#include "esphome/core/component.h"
|
|
7
|
+
#include "i2c_bus.h"
|
|
8
8
|
|
|
9
9
|
namespace esphome {
|
|
10
10
|
namespace i2c {
|
|
@@ -15,7 +15,7 @@ enum RecoveryCode {
|
|
|
15
15
|
RECOVERY_COMPLETED,
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
class ArduinoI2CBus : public
|
|
18
|
+
class ArduinoI2CBus : public InternalI2CBus, public Component {
|
|
19
19
|
public:
|
|
20
20
|
void setup() override;
|
|
21
21
|
void dump_config() override;
|
|
@@ -29,12 +29,15 @@ class ArduinoI2CBus : public I2CBus, public Component {
|
|
|
29
29
|
void set_frequency(uint32_t frequency) { frequency_ = frequency; }
|
|
30
30
|
void set_timeout(uint32_t timeout) { timeout_ = timeout; }
|
|
31
31
|
|
|
32
|
+
int get_port() const override { return this->port_; }
|
|
33
|
+
|
|
32
34
|
private:
|
|
33
35
|
void recover_();
|
|
34
36
|
void set_pins_and_clock_();
|
|
35
37
|
RecoveryCode recovery_result_;
|
|
36
38
|
|
|
37
39
|
protected:
|
|
40
|
+
int8_t port_{-1};
|
|
38
41
|
TwoWire *wire_;
|
|
39
42
|
uint8_t sda_pin_;
|
|
40
43
|
uint8_t scl_pin_;
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
#ifdef USE_ESP_IDF
|
|
4
4
|
|
|
5
|
-
#include "i2c_bus.h"
|
|
6
|
-
#include "esphome/core/component.h"
|
|
7
5
|
#include <driver/i2c.h>
|
|
6
|
+
#include "esphome/core/component.h"
|
|
7
|
+
#include "i2c_bus.h"
|
|
8
8
|
|
|
9
9
|
namespace esphome {
|
|
10
10
|
namespace i2c {
|
|
@@ -15,7 +15,7 @@ enum RecoveryCode {
|
|
|
15
15
|
RECOVERY_COMPLETED,
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
class IDFI2CBus : public
|
|
18
|
+
class IDFI2CBus : public InternalI2CBus, public Component {
|
|
19
19
|
public:
|
|
20
20
|
void setup() override;
|
|
21
21
|
void dump_config() override;
|
|
@@ -31,6 +31,8 @@ class IDFI2CBus : public I2CBus, public Component {
|
|
|
31
31
|
void set_frequency(uint32_t frequency) { frequency_ = frequency; }
|
|
32
32
|
void set_timeout(uint32_t timeout) { timeout_ = timeout; }
|
|
33
33
|
|
|
34
|
+
int get_port() const override { return static_cast<int>(this->port_); }
|
|
35
|
+
|
|
34
36
|
private:
|
|
35
37
|
void recover_();
|
|
36
38
|
RecoveryCode recovery_result_;
|
|
@@ -9,14 +9,7 @@ from esphome.components.esp32.const import (
|
|
|
9
9
|
VARIANT_ESP32S3,
|
|
10
10
|
)
|
|
11
11
|
import esphome.config_validation as cv
|
|
12
|
-
from esphome.const import
|
|
13
|
-
CONF_BITS_PER_SAMPLE,
|
|
14
|
-
CONF_CHANNEL,
|
|
15
|
-
CONF_ID,
|
|
16
|
-
CONF_SAMPLE_RATE,
|
|
17
|
-
KEY_CORE,
|
|
18
|
-
KEY_FRAMEWORK_VERSION,
|
|
19
|
-
)
|
|
12
|
+
from esphome.const import CONF_BITS_PER_SAMPLE, CONF_CHANNEL, CONF_ID, CONF_SAMPLE_RATE
|
|
20
13
|
from esphome.core import CORE
|
|
21
14
|
from esphome.cpp_generator import MockObjClass
|
|
22
15
|
import esphome.final_validate as fv
|
|
@@ -250,8 +243,7 @@ def _final_validate(_):
|
|
|
250
243
|
|
|
251
244
|
|
|
252
245
|
def use_legacy():
|
|
253
|
-
|
|
254
|
-
if CORE.using_esp_idf and framework_version >= cv.Version(5, 0, 0):
|
|
246
|
+
if CORE.using_esp_idf:
|
|
255
247
|
if not _use_legacy_driver:
|
|
256
248
|
return False
|
|
257
249
|
return True
|
|
@@ -9,15 +9,11 @@ namespace i2s_audio {
|
|
|
9
9
|
|
|
10
10
|
static const char *const TAG = "i2s_audio";
|
|
11
11
|
|
|
12
|
-
#if defined(USE_ESP_IDF) && (ESP_IDF_VERSION_MAJOR >= 5)
|
|
13
|
-
static const uint8_t I2S_NUM_MAX = SOC_I2S_NUM; // because IDF 5+ took this away :(
|
|
14
|
-
#endif
|
|
15
|
-
|
|
16
12
|
void I2SAudioComponent::setup() {
|
|
17
13
|
ESP_LOGCONFIG(TAG, "Running setup");
|
|
18
14
|
|
|
19
15
|
static i2s_port_t next_port_num = I2S_NUM_0;
|
|
20
|
-
if (next_port_num >=
|
|
16
|
+
if (next_port_num >= SOC_I2S_NUM) {
|
|
21
17
|
ESP_LOGE(TAG, "Too many components");
|
|
22
18
|
this->mark_failed();
|
|
23
19
|
return;
|
|
@@ -114,7 +114,7 @@ async def to_code(config):
|
|
|
114
114
|
cg.add(var.set_external_dac_channels(2 if config[CONF_MODE] == "stereo" else 1))
|
|
115
115
|
cg.add(var.set_i2s_comm_fmt_lsb(config[CONF_I2S_COMM_FMT] == "lsb"))
|
|
116
116
|
|
|
117
|
-
cg.add_library("
|
|
117
|
+
cg.add_library("NetworkClientSecure", None)
|
|
118
118
|
cg.add_library("HTTPClient", None)
|
|
119
|
-
cg.add_library("esphome/ESP32-audioI2S", "2.
|
|
119
|
+
cg.add_library("esphome/ESP32-audioI2S", "2.3.0")
|
|
120
120
|
cg.add_build_flag("-DAUDIO_NO_SD_FS")
|
|
@@ -180,7 +180,7 @@ async def to_code(config):
|
|
|
180
180
|
await speaker.register_speaker(var, config)
|
|
181
181
|
|
|
182
182
|
if config[CONF_DAC_TYPE] == "internal":
|
|
183
|
-
cg.add(var.set_internal_dac_mode(config[
|
|
183
|
+
cg.add(var.set_internal_dac_mode(config[CONF_MODE]))
|
|
184
184
|
else:
|
|
185
185
|
cg.add(var.set_dout_pin(config[CONF_I2S_DOUT_PIN]))
|
|
186
186
|
if use_legacy():
|