esphome 2025.5.1__py3-none-any.whl → 2025.6.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 +20 -14
- esphome/components/a4988/a4988.cpp +1 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
- esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
- esphome/components/adc/adc_sensor_esp32.cpp +5 -3
- esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
- esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
- esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
- esphome/components/adc128s102/adc128s102.cpp +1 -1
- esphome/components/ade7880/ade7880.cpp +28 -17
- esphome/components/ade7953_base/ade7953_base.cpp +12 -9
- esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
- esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
- esphome/components/ads1115/ads1115.cpp +3 -5
- esphome/components/ads1118/ads1118.cpp +2 -1
- esphome/components/ags10/ags10.cpp +3 -2
- esphome/components/aht10/aht10.cpp +27 -29
- esphome/components/aic3204/aic3204.cpp +2 -2
- esphome/components/alarm_control_panel/__init__.py +1 -0
- esphome/components/am2315c/am2315c.cpp +2 -2
- esphome/components/am2320/am2320.cpp +2 -2
- esphome/components/am43/am43_base.h +1 -1
- esphome/components/am43/cover/am43_cover.cpp +4 -2
- esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
- esphome/components/apds9306/apds9306.cpp +8 -5
- esphome/components/apds9960/apds9960.cpp +2 -2
- esphome/components/api/__init__.py +5 -0
- esphome/components/api/api_connection.cpp +753 -379
- esphome/components/api/api_connection.h +341 -283
- esphome/components/api/api_frame_helper.cpp +349 -344
- esphome/components/api/api_frame_helper.h +121 -94
- esphome/components/api/api_pb2.cpp +5 -0
- esphome/components/api/api_pb2.h +703 -227
- esphome/components/api/api_pb2_service.cpp +12 -688
- esphome/components/api/api_pb2_service.h +53 -207
- esphome/components/api/api_server.cpp +71 -29
- esphome/components/api/api_server.h +9 -0
- esphome/components/api/client.py +5 -4
- esphome/components/api/homeassistant_service.h +1 -1
- esphome/components/api/list_entities.cpp +1 -1
- esphome/components/api/proto.cpp +1 -0
- esphome/components/api/proto.h +5 -4
- esphome/components/api/subscribe_state.cpp +8 -16
- esphome/components/as3935/as3935.cpp +3 -3
- esphome/components/as5600/as5600.cpp +9 -7
- esphome/components/as7341/as7341.cpp +7 -5
- esphome/components/at581x/at581x.cpp +13 -10
- esphome/components/atm90e26/atm90e26.cpp +2 -2
- esphome/components/atm90e32/atm90e32.cpp +3 -3
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
- esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
- esphome/components/bedjet/bedjet_hub.cpp +6 -4
- esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
- esphome/components/bh1750/bh1750.cpp +2 -2
- esphome/components/binary_sensor/__init__.py +1 -0
- esphome/components/binary_sensor/automation.cpp +1 -2
- esphome/components/bl0906/bl0906.cpp +1 -1
- esphome/components/bl0942/bl0942.cpp +11 -8
- esphome/components/bl0942/sensor.py +1 -1
- esphome/components/ble_client/__init__.py +5 -1
- esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
- esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
- esphome/components/bluetooth_proxy/__init__.py +5 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
- esphome/components/bme280_base/bme280_base.cpp +5 -6
- esphome/components/bme680/bme680.cpp +3 -3
- esphome/components/bme680/sensor.py +2 -2
- esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
- esphome/components/bme680_bsec/sensor.py +7 -3
- esphome/components/bme68x_bsec2/__init__.py +6 -5
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
- esphome/components/bme68x_bsec2/sensor.py +4 -4
- esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
- esphome/components/bmi160/bmi160.cpp +11 -11
- esphome/components/bmp085/bmp085.cpp +2 -2
- esphome/components/bmp280_base/bmp280_base.cpp +3 -3
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
- esphome/components/bmp581/bmp581.cpp +33 -27
- esphome/components/bp1658cj/bp1658cj.cpp +5 -3
- esphome/components/bp5758d/bp5758d.cpp +1 -1
- esphome/components/button/__init__.py +1 -0
- esphome/components/canbus/canbus.cpp +1 -1
- esphome/components/cap1188/cap1188.cpp +6 -4
- esphome/components/captive_portal/captive_portal.cpp +1 -1
- esphome/components/ccs811/ccs811.cpp +3 -2
- esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
- esphome/components/ch422g/ch422g.cpp +2 -2
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
- esphome/components/climate/__init__.py +1 -0
- esphome/components/climate/climate.cpp +12 -7
- esphome/components/climate/climate.h +1 -1
- esphome/components/climate_ir/climate_ir.cpp +7 -4
- esphome/components/cm1106/__init__.py +1 -0
- esphome/components/cm1106/cm1106.cpp +112 -0
- esphome/components/cm1106/cm1106.h +40 -0
- esphome/components/cm1106/sensor.py +72 -0
- esphome/components/const/__init__.py +1 -0
- esphome/components/cover/__init__.py +1 -0
- esphome/components/cs5460a/cs5460a.cpp +16 -11
- esphome/components/cse7761/cse7761.cpp +2 -2
- esphome/components/cse7766/cse7766.cpp +0 -5
- esphome/components/cse7766/cse7766.h +5 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
- esphome/components/current_based/current_based_cover.cpp +4 -2
- esphome/components/dac7678/dac7678_output.cpp +4 -4
- esphome/components/dallas_temp/dallas_temp.cpp +2 -3
- esphome/components/daly_bms/daly_bms.cpp +2 -1
- esphome/components/dashboard_import/__init__.py +1 -2
- esphome/components/datetime/__init__.py +3 -1
- esphome/components/datetime/date_entity.cpp +5 -5
- esphome/components/datetime/datetime_base.h +0 -5
- esphome/components/datetime/datetime_entity.cpp +8 -8
- esphome/components/datetime/time_entity.cpp +4 -4
- esphome/components/debug/debug_component.cpp +1 -5
- esphome/components/debug/debug_component.h +1 -1
- esphome/components/debug/debug_esp32.cpp +4 -2
- esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
- esphome/components/demo/__init__.py +206 -0
- esphome/components/demo/demo_alarm_control_panel.h +65 -0
- esphome/components/demo/demo_button.h +15 -0
- esphome/components/demo/demo_date.h +34 -0
- esphome/components/demo/demo_datetime.h +40 -0
- esphome/components/demo/demo_lock.h +17 -0
- esphome/components/demo/demo_select.h +15 -0
- esphome/components/demo/demo_text.h +18 -0
- esphome/components/demo/demo_time.h +34 -0
- esphome/components/demo/demo_valve.h +54 -0
- esphome/components/dfrobot_sen0395/commands.cpp +3 -3
- esphome/components/dht/dht.cpp +29 -50
- esphome/components/dht12/dht12.cpp +2 -2
- esphome/components/display/display.h +5 -3
- esphome/components/dps310/dps310.cpp +7 -5
- esphome/components/ds1307/ds1307.cpp +2 -2
- esphome/components/dsmr/dsmr.cpp +5 -3
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
- esphome/components/duty_time/duty_time_sensor.cpp +5 -3
- esphome/components/ee895/ee895.cpp +3 -3
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
- esphome/components/emc2101/emc2101.cpp +11 -9
- esphome/components/ens160_base/ens160_base.cpp +2 -2
- esphome/components/ens210/ens210.cpp +2 -2
- esphome/components/es7210/es7210.cpp +6 -4
- esphome/components/es7243e/es7243e.cpp +1 -1
- esphome/components/es8156/es8156.cpp +1 -1
- esphome/components/es8311/es8311.cpp +8 -6
- esphome/components/es8388/__init__.py +0 -0
- esphome/components/es8388/audio_dac.py +26 -0
- esphome/components/es8388/es8388.cpp +289 -0
- esphome/components/es8388/es8388.h +81 -0
- esphome/components/es8388/es8388_const.h +83 -0
- esphome/components/es8388/select/__init__.py +47 -0
- esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
- esphome/components/es8388/select/adc_input_mic_select.h +15 -0
- esphome/components/es8388/select/dac_output_select.cpp +12 -0
- esphome/components/es8388/select/dac_output_select.h +15 -0
- esphome/components/esp32/__init__.py +118 -23
- esphome/components/esp32/boards.py +208 -125
- esphome/components/esp32/const.py +6 -0
- esphome/components/esp32/gpio.py +14 -1
- esphome/components/esp32/gpio_esp32_c5.py +45 -0
- esphome/components/esp32/gpio_esp32_p4.py +43 -0
- esphome/components/esp32/preferences.cpp +7 -7
- esphome/components/esp32_ble/__init__.py +115 -0
- esphome/components/esp32_ble/ble.cpp +101 -54
- esphome/components/esp32_ble/ble.h +24 -5
- esphome/components/esp32_ble/ble_event.h +172 -32
- esphome/components/esp32_ble/ble_scan_result.h +24 -0
- esphome/components/esp32_ble/ble_uuid.h +1 -1
- esphome/components/esp32_ble/queue.h +53 -27
- esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
- esphome/components/esp32_ble_server/__init__.py +4 -1
- esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
- esphome/components/esp32_ble_server/ble_server.h +0 -1
- esphome/components/esp32_ble_tracker/__init__.py +7 -2
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
- esphome/components/esp32_camera/esp32_camera.cpp +35 -27
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
- esphome/components/esp32_dac/esp32_dac.cpp +2 -2
- esphome/components/esp32_improv/__init__.py +5 -1
- esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
- esphome/components/esp32_rmt_led_strip/light.py +5 -1
- esphome/components/esp32_touch/esp32_touch.cpp +12 -8
- esphome/components/esp8266/gpio.cpp +10 -1
- esphome/components/esp8266/preferences.cpp +6 -6
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
- esphome/components/esp_ldo/__init__.py +91 -0
- esphome/components/esp_ldo/esp_ldo.cpp +43 -0
- esphome/components/esp_ldo/esp_ldo.h +43 -0
- esphome/components/esphome/ota/ota_esphome.cpp +15 -8
- esphome/components/ethernet/ethernet_component.cpp +38 -26
- esphome/components/ethernet/ethernet_component.h +1 -1
- esphome/components/event/__init__.py +1 -0
- esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
- esphome/components/ezo/ezo.cpp +1 -1
- esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
- esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
- esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
- esphome/components/fan/__init__.py +1 -0
- esphome/components/fan/fan.cpp +30 -19
- esphome/components/fastled_base/fastled_light.cpp +7 -5
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
- esphome/components/fs3000/fs3000.cpp +1 -1
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
- esphome/components/ft63x6/ft63x6.cpp +5 -3
- esphome/components/gcja5/gcja5.cpp +0 -12
- esphome/components/gcja5/gcja5.h +8 -3
- esphome/components/gdk101/gdk101.cpp +2 -2
- esphome/components/globals/globals_component.h +13 -10
- esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
- esphome/components/gp8403/gp8403.cpp +4 -2
- esphome/components/gp8403/output/gp8403_output.cpp +4 -2
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
- esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
- esphome/components/gpio/switch/gpio_switch.cpp +1 -1
- esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
- esphome/components/growatt_solar/growatt_solar.cpp +6 -3
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
- esphome/components/haier/haier_base.cpp +2 -2
- esphome/components/haier/hon_climate.cpp +13 -6
- esphome/components/havells_solar/havells_solar.cpp +5 -2
- esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
- esphome/components/hdc1080/hdc1080.cpp +2 -2
- esphome/components/he60r/he60r.cpp +4 -2
- esphome/components/hlw8012/hlw8012.cpp +6 -4
- esphome/components/hm3301/hm3301.cpp +2 -2
- esphome/components/hmc5883l/hmc5883l.cpp +2 -2
- esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
- esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
- esphome/components/honeywellabp/honeywellabp.cpp +4 -2
- esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
- esphome/components/hte501/hte501.cpp +3 -2
- esphome/components/http_request/__init__.py +2 -2
- esphome/components/http_request/http_request.cpp +7 -5
- esphome/components/http_request/http_request_idf.cpp +4 -2
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/htu21d/htu21d.cpp +2 -2
- esphome/components/htu31d/htu31d.cpp +2 -2
- esphome/components/hx711/hx711.cpp +2 -2
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
- esphome/components/hyt271/hyt271.cpp +2 -2
- esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
- esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
- esphome/components/i2s_audio/__init__.py +2 -0
- esphome/components/i2s_audio/i2s_audio.cpp +3 -4
- esphome/components/i2s_audio/i2s_audio.h +1 -1
- esphome/components/i2s_audio/media_player/__init__.py +1 -1
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +85 -77
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +6 -0
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
- esphome/components/iaqcore/iaqcore.cpp +3 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
- esphome/components/ili9xxx/ili9xxx_display.h +1 -1
- esphome/components/image/image.cpp +1 -0
- esphome/components/ina219/ina219.cpp +2 -2
- esphome/components/ina226/ina226.cpp +8 -5
- esphome/components/ina260/ina260.cpp +1 -1
- esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
- esphome/components/ina3221/ina3221.cpp +2 -2
- esphome/components/inkplate6/display.py +12 -2
- esphome/components/inkplate6/inkplate.cpp +13 -9
- esphome/components/inkplate6/inkplate.h +7 -6
- esphome/components/integration/integration_sensor.cpp +1 -1
- esphome/components/internal_temperature/internal_temperature.cpp +4 -4
- esphome/components/json/json_util.cpp +4 -5
- esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
- esphome/components/key_collector/key_collector.cpp +4 -2
- esphome/components/kmeteriso/kmeteriso.cpp +4 -4
- esphome/components/kuntze/kuntze.cpp +4 -2
- esphome/components/lc709203f/__init__.py +1 -0
- esphome/components/lc709203f/lc709203f.cpp +299 -0
- esphome/components/lc709203f/lc709203f.h +55 -0
- esphome/components/lc709203f/sensor.py +93 -0
- esphome/components/lcd_base/lcd_display.cpp +2 -2
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
- esphome/components/lcd_menu/lcd_menu.cpp +6 -4
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
- esphome/components/ld2410/ld2410.cpp +6 -7
- esphome/components/ld2420/ld2420.cpp +9 -7
- esphome/components/ld2450/ld2450.cpp +6 -4
- esphome/components/ld2450/sensor.py +2 -2
- esphome/components/ledc/ledc_output.cpp +32 -28
- esphome/components/libretiny/const.py +1 -1
- esphome/components/libretiny/preferences.cpp +6 -7
- esphome/components/light/__init__.py +2 -1
- esphome/components/light/esp_hsv_color.h +1 -1
- esphome/components/light/light_state.cpp +9 -5
- esphome/components/light/light_state.h +15 -15
- esphome/components/light/light_transformer.h +1 -1
- esphome/components/lightwaverf/LwTx.cpp +1 -1
- esphome/components/lightwaverf/lightwaverf.cpp +1 -1
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
- esphome/components/lock/__init__.py +1 -0
- esphome/components/lock/lock.h +1 -1
- esphome/components/logger/__init__.py +6 -0
- esphome/components/logger/logger.cpp +11 -20
- esphome/components/logger/logger.h +5 -6
- esphome/components/logger/logger_esp32.cpp +5 -5
- esphome/components/ltr390/ltr390.cpp +8 -5
- esphome/components/ltr501/ltr501.cpp +19 -14
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
- esphome/components/lvgl/__init__.py +2 -2
- esphome/components/lvgl/automation.py +5 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/lv_validation.py +1 -3
- esphome/components/lvgl/lvcode.py +7 -8
- esphome/components/lvgl/lvgl_esphome.cpp +26 -10
- esphome/components/lvgl/schemas.py +22 -23
- esphome/components/lvgl/trigger.py +8 -3
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/canvas.py +9 -3
- esphome/components/lvgl/widgets/line.py +2 -1
- esphome/components/lvgl/widgets/tabview.py +7 -0
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
- esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
- esphome/components/max17043/max17043.cpp +2 -2
- esphome/components/max31855/max31855.cpp +2 -1
- esphome/components/max31856/max31856.cpp +9 -11
- esphome/components/max31865/max31865.cpp +6 -4
- esphome/components/max44009/max44009.cpp +2 -2
- esphome/components/max6675/max6675.cpp +1 -1
- esphome/components/max6956/max6956.cpp +5 -3
- esphome/components/max7219/max7219.cpp +8 -6
- esphome/components/max7219digit/automation.h +52 -0
- esphome/components/max7219digit/display.py +93 -1
- esphome/components/max7219digit/max7219digit.cpp +16 -13
- esphome/components/max9611/max9611.cpp +9 -6
- esphome/components/mcp23008/mcp23008.cpp +1 -1
- esphome/components/mcp23016/mcp23016.cpp +1 -1
- esphome/components/mcp23017/mcp23017.cpp +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +1 -1
- esphome/components/mcp3008/mcp3008.cpp +1 -1
- esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
- esphome/components/mcp3204/mcp3204.cpp +1 -1
- esphome/components/mcp4461/mcp4461.cpp +2 -2
- esphome/components/mcp4725/mcp4725.cpp +2 -2
- esphome/components/mcp4728/mcp4728.cpp +2 -2
- esphome/components/mcp9600/mcp9600.cpp +1 -1
- esphome/components/mcp9808/mcp9808.cpp +4 -4
- esphome/components/mdns/mdns_component.cpp +8 -2
- esphome/components/mdns/mdns_component.h +3 -1
- esphome/components/mdns/mdns_esp32.cpp +2 -2
- esphome/components/media_player/__init__.py +1 -0
- esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
- esphome/components/micro_wake_word/streaming_model.cpp +10 -6
- esphome/components/micronova/micronova.h +2 -2
- esphome/components/mics_4514/mics_4514.cpp +2 -2
- esphome/components/midea/air_conditioner.cpp +7 -5
- esphome/components/midea_ir/midea_ir.cpp +1 -1
- esphome/components/mipi_spi/mipi_spi.cpp +24 -15
- esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
- esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
- esphome/components/mlx90614/mlx90614.cpp +4 -3
- esphome/components/mmc5603/mmc5603.cpp +2 -2
- esphome/components/mmc5983/mmc5983.cpp +1 -1
- esphome/components/modbus/modbus.cpp +7 -5
- esphome/components/modbus_controller/modbus_controller.cpp +6 -4
- esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
- esphome/components/modbus_controller/switch/__init__.py +6 -2
- esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
- esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
- esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
- esphome/components/mpr121/mpr121.cpp +2 -2
- esphome/components/mpu6050/mpu6050.cpp +6 -6
- esphome/components/mpu6886/mpu6886.cpp +6 -6
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
- esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +31 -24
- esphome/components/mqtt/mqtt_component.cpp +3 -3
- esphome/components/mqtt/mqtt_cover.cpp +8 -4
- esphome/components/mqtt/mqtt_fan.cpp +12 -6
- esphome/components/mqtt/mqtt_valve.cpp +4 -2
- esphome/components/ms5611/ms5611.cpp +2 -2
- esphome/components/ms8607/ms8607.cpp +2 -2
- esphome/components/msa3xx/msa3xx.cpp +16 -12
- esphome/components/my9231/my9231.cpp +7 -5
- esphome/components/nau7802/nau7802.cpp +6 -4
- esphome/components/neopixelbus/neopixelbus_light.h +2 -2
- esphome/components/network/ip_address.h +1 -1
- esphome/components/network/util.cpp +13 -0
- esphome/components/nextion/base_component.py +2 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
- esphome/components/nextion/display.py +34 -22
- esphome/components/nextion/nextion.cpp +182 -143
- esphome/components/nextion/nextion.h +36 -0
- esphome/components/nextion/nextion_commands.cpp +3 -3
- esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
- esphome/components/nextion/nextion_upload_idf.cpp +79 -80
- esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
- esphome/components/nextion/switch/nextion_switch.cpp +2 -2
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
- esphome/components/nfc/nci_message.h +1 -1
- esphome/components/nfc/ndef_record.h +1 -1
- esphome/components/nfc/ndef_record_text.h +1 -1
- esphome/components/nfc/ndef_record_uri.h +1 -1
- esphome/components/nfc/nfc.h +1 -1
- esphome/components/nfc/nfc_tag.h +1 -1
- esphome/components/noblex/noblex.cpp +1 -1
- esphome/components/npi19/npi19.cpp +5 -7
- esphome/components/number/__init__.py +11 -0
- esphome/components/number/number.cpp +1 -1
- esphome/components/number/number.h +0 -4
- esphome/components/online_image/__init__.py +13 -1
- esphome/components/online_image/online_image.cpp +26 -4
- esphome/components/online_image/online_image.h +21 -4
- esphome/components/opentherm/generate.py +3 -3
- esphome/components/opentherm/hub.cpp +11 -7
- esphome/components/opentherm/number/number.cpp +5 -3
- esphome/components/opentherm/opentherm.h +1 -1
- esphome/components/opentherm/schema.py +13 -13
- esphome/components/opentherm/validate.py +1 -1
- esphome/components/openthread/__init__.py +146 -0
- esphome/components/openthread/const.py +10 -0
- esphome/components/openthread/openthread.cpp +206 -0
- esphome/components/openthread/openthread.h +68 -0
- esphome/components/openthread/openthread_esp.cpp +164 -0
- esphome/components/openthread/tlv.py +58 -0
- esphome/components/openthread_info/__init__.py +0 -0
- esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
- esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
- esphome/components/openthread_info/text_sensor.py +105 -0
- esphome/components/output/float_output.cpp +1 -1
- esphome/components/output/switch/output_switch.cpp +1 -1
- esphome/components/packet_transport/packet_transport.cpp +6 -4
- esphome/components/pca6416a/pca6416a.cpp +2 -2
- esphome/components/pca9554/pca9554.cpp +6 -4
- esphome/components/pca9685/pca9685_output.cpp +12 -8
- esphome/components/pcd8544/pcd_8544.cpp +1 -1
- esphome/components/pcf85063/pcf85063.cpp +2 -2
- esphome/components/pcf8563/pcf8563.cpp +2 -2
- esphome/components/pcf8574/pcf8574.cpp +2 -2
- esphome/components/pid/pid_climate.cpp +8 -5
- esphome/components/pid/pid_climate.h +1 -1
- esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
- esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
- esphome/components/pipsolar/pipsolar.cpp +3 -3
- esphome/components/pm1006/pm1006.cpp +3 -7
- esphome/components/pm1006/pm1006.h +4 -1
- esphome/components/pm2005/pm2005.cpp +12 -13
- esphome/components/pm2005/sensor.py +1 -1
- esphome/components/pmsa003i/pmsa003i.cpp +2 -2
- esphome/components/pmsx003/pmsx003.cpp +0 -4
- esphome/components/pmsx003/pmsx003.h +5 -2
- esphome/components/pmwcs3/pmwcs3.cpp +9 -13
- esphome/components/pmwcs3/pmwcs3.h +0 -1
- esphome/components/pn532/pn532.cpp +7 -7
- esphome/components/pn532/pn532.h +1 -1
- esphome/components/pn532_spi/pn532_spi.cpp +1 -1
- esphome/components/pn7150/pn7150.cpp +4 -4
- esphome/components/pn7160/pn7160.cpp +4 -4
- esphome/components/power_supply/power_supply.cpp +6 -4
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/prometheus/__init__.py +0 -1
- esphome/components/psram/__init__.py +59 -35
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
- esphome/components/pylontech/pylontech.cpp +2 -2
- esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
- esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
- esphome/components/pzemac/pzemac.cpp +4 -2
- esphome/components/pzemdc/pzemdc.cpp +4 -2
- esphome/components/qmc5883l/qmc5883l.cpp +2 -2
- esphome/components/qmp6988/qmp6988.cpp +2 -2
- esphome/components/qmp6988/qmp6988.h +1 -1
- esphome/components/qr_code/qr_code.cpp +5 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
- esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
- esphome/components/rc522/rc522.cpp +5 -5
- esphome/components/rdm6300/rdm6300.cpp +1 -0
- esphome/components/remote_receiver/__init__.py +10 -2
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
- esphome/components/remote_transmitter/__init__.py +10 -2
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
- esphome/components/resistance/resistance_sensor.cpp +6 -3
- esphome/components/restart/button/restart_button.cpp +1 -1
- esphome/components/restart/switch/restart_switch.cpp +1 -1
- esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
- esphome/components/rp2040/__init__.py +7 -0
- esphome/components/rp2040/core.cpp +8 -1
- esphome/components/rp2040/gpio.cpp +26 -9
- esphome/components/rp2040/preferences.cpp +3 -3
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
- esphome/components/rp2040_pio_led_strip/light.py +1 -1
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
- esphome/components/rtttl/rtttl.cpp +11 -9
- esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
- esphome/components/safe_mode/safe_mode.cpp +9 -8
- esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
- esphome/components/scd30/scd30.cpp +11 -8
- esphome/components/scd4x/scd4x.cpp +12 -8
- esphome/components/sdl/display.py +40 -0
- esphome/components/sdl/sdl_esphome.cpp +2 -2
- esphome/components/sdl/sdl_esphome.h +8 -0
- esphome/components/sdm_meter/sdm_meter.cpp +5 -2
- esphome/components/sdp3x/sdp3x.cpp +11 -11
- esphome/components/sds011/sds011.cpp +5 -6
- esphome/components/sds011/sds011.h +4 -1
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
- esphome/components/selec_meter/selec_meter.cpp +5 -2
- esphome/components/select/__init__.py +1 -0
- esphome/components/select/select.cpp +1 -1
- esphome/components/select/select.h +0 -4
- esphome/components/sen0321/sen0321.cpp +2 -2
- esphome/components/sen21231/sen21231.cpp +1 -1
- esphome/components/sen5x/sen5x.cpp +10 -7
- esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
- esphome/components/sensirion_common/i2c_sensirion.h +1 -0
- esphome/components/sensor/__init__.py +11 -1
- esphome/components/sensor/filter.h +1 -1
- esphome/components/sensor/sensor.cpp +8 -4
- esphome/components/sensor/sensor.h +12 -11
- esphome/components/servo/servo.cpp +12 -9
- esphome/components/servo/servo.h +1 -1
- esphome/components/sfa30/sfa30.cpp +1 -1
- esphome/components/sgp30/sgp30.cpp +10 -8
- esphome/components/sgp4x/sgp4x.cpp +49 -61
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
- esphome/components/sht3xd/sht3xd.cpp +1 -1
- esphome/components/sht4x/sht4x.cpp +2 -2
- esphome/components/shtcx/shtcx.cpp +13 -16
- esphome/components/shutdown/button/shutdown_button.cpp +1 -1
- esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
- esphome/components/sim800l/sim800l.cpp +2 -2
- esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
- esphome/components/sm16716/sm16716.cpp +1 -1
- esphome/components/sm2135/sm2135.cpp +1 -1
- esphome/components/sm2235/sm2235.cpp +5 -3
- esphome/components/sm2335/sm2335.cpp +5 -3
- esphome/components/sml/sml.cpp +1 -1
- esphome/components/sn74hc165/sn74hc165.cpp +1 -2
- esphome/components/sn74hc595/sn74hc595.cpp +1 -2
- esphome/components/sntp/sntp_component.cpp +1 -1
- esphome/components/socket/__init__.py +2 -0
- esphome/components/socket/bsd_sockets_impl.cpp +51 -7
- esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
- esphome/components/socket/lwip_sockets_impl.cpp +51 -7
- esphome/components/socket/socket.cpp +31 -0
- esphome/components/socket/socket.h +27 -1
- esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
- esphome/components/sonoff_d1/sonoff_d1.h +2 -2
- esphome/components/sound_level/sound_level.cpp +4 -2
- esphome/components/speaker/media_player/__init__.py +3 -0
- esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
- esphome/components/speaker/media_player/speaker_media_player.h +6 -0
- esphome/components/spi/__init__.py +10 -2
- esphome/components/spi/spi.cpp +4 -4
- esphome/components/spi/spi_arduino.cpp +22 -9
- esphome/components/spi_device/spi_device.cpp +1 -2
- esphome/components/sprinkler/sprinkler.cpp +9 -6
- esphome/components/sps30/sps30.cpp +16 -15
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
- esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
- esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
- esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
- esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
- esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
- esphome/components/st7567_base/st7567_base.cpp +3 -3
- esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
- esphome/components/st7567_spi/st7567_spi.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +4 -2
- esphome/components/st7735/st7735.cpp +3 -3
- esphome/components/st7789v/st7789v.cpp +10 -7
- esphome/components/st7920/st7920.cpp +6 -4
- esphome/components/statsd/statsd.cpp +9 -5
- esphome/components/status_led/light/status_led_light.cpp +3 -3
- esphome/components/status_led/light/status_led_light.h +1 -1
- esphome/components/status_led/status_led.cpp +1 -1
- esphome/components/stepper/stepper.h +5 -3
- esphome/components/sts3x/sts3x.cpp +2 -2
- esphome/components/switch/__init__.py +1 -0
- esphome/components/switch/switch.cpp +18 -12
- esphome/components/switch/switch.h +14 -8
- esphome/components/sx1509/__init__.py +53 -20
- esphome/components/sx1509/sx1509.cpp +29 -5
- esphome/components/sx1509/sx1509.h +9 -1
- esphome/components/t6615/t6615.cpp +1 -0
- esphome/components/tc74/tc74.cpp +1 -1
- esphome/components/tca9548a/tca9548a.cpp +1 -1
- esphome/components/tca9555/tca9555.cpp +2 -2
- esphome/components/tcs34725/tcs34725.cpp +4 -4
- esphome/components/tee501/tee501.cpp +3 -2
- esphome/components/tem3200/tem3200.cpp +5 -6
- esphome/components/template/alarm_control_panel/__init__.py +6 -0
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
- esphome/components/template/cover/template_cover.cpp +1 -1
- esphome/components/template/select/template_select.cpp +6 -4
- esphome/components/template/text/template_text.cpp +2 -3
- esphome/components/template/valve/template_valve.cpp +5 -3
- esphome/components/text/__init__.py +10 -11
- esphome/components/text/text.cpp +1 -1
- esphome/components/text/text.h +0 -4
- esphome/components/text_sensor/__init__.py +1 -0
- esphome/components/text_sensor/text_sensor.cpp +8 -4
- esphome/components/text_sensor/text_sensor.h +6 -6
- esphome/components/thermostat/thermostat_climate.cpp +67 -43
- esphome/components/time/__init__.py +1 -2
- esphome/components/time_based/time_based_cover.cpp +4 -2
- esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
- esphome/components/tm1621/tm1621.cpp +3 -3
- esphome/components/tm1637/tm1637.cpp +9 -7
- esphome/components/tm1638/tm1638.cpp +7 -5
- esphome/components/tm1651/tm1651.cpp +2 -2
- esphome/components/tmp102/tmp102.cpp +1 -3
- esphome/components/tmp102/tmp102.h +0 -3
- esphome/components/tmp1075/tmp1075.cpp +12 -9
- esphome/components/tmp117/tmp117.cpp +2 -2
- esphome/components/tof10120/tof10120_sensor.cpp +2 -2
- esphome/components/tormatic/tormatic_cover.cpp +4 -2
- esphome/components/tsl2561/tsl2561.cpp +7 -5
- esphome/components/tsl2591/tsl2591.cpp +25 -27
- esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
- esphome/components/tuya/select/tuya_select.cpp +5 -3
- esphome/components/tx20/tx20.cpp +3 -3
- esphome/components/uart/__init__.py +4 -5
- esphome/components/uart/button/uart_button.cpp +1 -1
- esphome/components/uart/switch/uart_switch.cpp +2 -2
- esphome/components/uart/uart.cpp +2 -2
- esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
- esphome/components/uart/uart_component_esp8266.cpp +9 -7
- esphome/components/uart/uart_component_esp_idf.cpp +9 -7
- esphome/components/uart/uart_component_host.cpp +11 -8
- esphome/components/uart/uart_component_libretiny.cpp +8 -6
- esphome/components/uart/uart_component_rp2040.cpp +8 -6
- esphome/components/udp/udp_component.cpp +9 -5
- esphome/components/ufire_ec/ufire_ec.cpp +5 -3
- esphome/components/ufire_ise/ufire_ise.cpp +1 -1
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
- esphome/components/update/__init__.py +1 -0
- esphome/components/update/update_entity.cpp +1 -1
- esphome/components/update/update_entity.h +0 -3
- esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
- esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
- esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
- esphome/components/usb_host/__init__.py +64 -0
- esphome/components/usb_host/usb_host.h +116 -0
- esphome/components/usb_host/usb_host_client.cpp +394 -0
- esphome/components/usb_host/usb_host_component.cpp +35 -0
- esphome/components/usb_uart/__init__.py +134 -0
- esphome/components/usb_uart/ch34x.cpp +80 -0
- esphome/components/usb_uart/cp210x.cpp +126 -0
- esphome/components/usb_uart/usb_uart.cpp +328 -0
- esphome/components/usb_uart/usb_uart.h +151 -0
- esphome/components/valve/__init__.py +1 -0
- esphome/components/veml3235/veml3235.cpp +13 -9
- esphome/components/veml7700/veml7700.cpp +10 -6
- esphome/components/voice_assistant/voice_assistant.cpp +7 -7
- esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
- esphome/components/web_server/server_index_v2.h +632 -630
- esphome/components/web_server/server_index_v3.h +411 -409
- esphome/components/web_server/web_server.cpp +5 -3
- esphome/components/web_server_base/web_server_base.cpp +1 -1
- esphome/components/web_server_idf/__init__.py +0 -2
- esphome/components/web_server_idf/utils.cpp +1 -1
- esphome/components/web_server_idf/web_server_idf.cpp +7 -3
- esphome/components/web_server_idf/web_server_idf.h +7 -0
- esphome/components/weikai/__init__.py +2 -0
- esphome/components/weikai/weikai.cpp +24 -22
- esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
- esphome/components/weikai_spi/weikai_spi.cpp +11 -6
- esphome/components/wiegand/wiegand.cpp +1 -1
- esphome/components/wifi/wifi_component.cpp +50 -37
- esphome/components/wifi/wifi_component.h +7 -4
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
- esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
- esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
- esphome/components/wireguard/wireguard.cpp +21 -21
- esphome/components/wl_134/text_sensor.py +1 -2
- esphome/components/wled/wled_light_effect.cpp +1 -1
- esphome/components/x9c/x9c.cpp +5 -3
- esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
- esphome/components/xl9535/xl9535.cpp +2 -2
- esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
- esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
- esphome/config.py +3 -2
- esphome/config_validation.py +46 -17
- esphome/const.py +10 -1
- esphome/core/__init__.py +37 -18
- esphome/core/application.cpp +197 -8
- esphome/core/application.h +116 -6
- esphome/core/component.cpp +36 -15
- esphome/core/component.h +43 -13
- esphome/core/config.py +12 -0
- esphome/core/defines.h +10 -2
- esphome/core/entity_base.cpp +4 -16
- esphome/core/entity_base.h +27 -13
- esphome/core/hal.h +5 -0
- esphome/core/helpers.cpp +1 -1
- esphome/core/helpers.h +5 -5
- esphome/core/log.h +2 -0
- esphome/core/log_const_en.h +4 -0
- esphome/core/scheduler.cpp +2 -2
- esphome/coroutine.py +3 -4
- esphome/cpp_generator.py +32 -32
- esphome/dashboard/core.py +2 -2
- esphome/dashboard/web_server.py +2 -2
- esphome/git.py +4 -4
- esphome/helpers.py +5 -6
- esphome/loader.py +8 -7
- esphome/log.py +7 -1
- esphome/platformio_api.py +2 -3
- esphome/storage_json.py +13 -5
- esphome/types.py +12 -13
- esphome/util.py +1 -2
- esphome/wizard.py +0 -16
- esphome/writer.py +5 -3
- esphome/yaml_util.py +6 -1
- esphome/zeroconf.py +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/RECORD +753 -699
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -5,6 +5,7 @@
|
|
5
5
|
#ifdef USE_SOCKET_IMPL_BSD_SOCKETS
|
6
6
|
|
7
7
|
#include <cstring>
|
8
|
+
#include "esphome/core/application.h"
|
8
9
|
|
9
10
|
#ifdef USE_ESP32
|
10
11
|
#include <esp_idf_version.h>
|
@@ -40,7 +41,20 @@ std::string format_sockaddr(const struct sockaddr_storage &storage) {
|
|
40
41
|
|
41
42
|
class BSDSocketImpl : public Socket {
|
42
43
|
public:
|
43
|
-
BSDSocketImpl(int fd) : fd_(fd) {
|
44
|
+
BSDSocketImpl(int fd, bool monitor_loop = false) : fd_(fd) {
|
45
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
46
|
+
// Register new socket with the application for select() if monitoring requested
|
47
|
+
if (monitor_loop && fd_ >= 0) {
|
48
|
+
// Only set loop_monitored_ to true if registration succeeds
|
49
|
+
loop_monitored_ = App.register_socket_fd(fd_);
|
50
|
+
} else {
|
51
|
+
loop_monitored_ = false;
|
52
|
+
}
|
53
|
+
#else
|
54
|
+
// Without select support, ignore monitor_loop parameter
|
55
|
+
(void) monitor_loop;
|
56
|
+
#endif
|
57
|
+
}
|
44
58
|
~BSDSocketImpl() override {
|
45
59
|
if (!closed_) {
|
46
60
|
close(); // NOLINT(clang-analyzer-optin.cplusplus.VirtualCall)
|
@@ -48,16 +62,35 @@ class BSDSocketImpl : public Socket {
|
|
48
62
|
}
|
49
63
|
int connect(const struct sockaddr *addr, socklen_t addrlen) override { return ::connect(fd_, addr, addrlen); }
|
50
64
|
std::unique_ptr<Socket> accept(struct sockaddr *addr, socklen_t *addrlen) override {
|
65
|
+
return accept_impl_(addr, addrlen, false);
|
66
|
+
}
|
67
|
+
std::unique_ptr<Socket> accept_loop_monitored(struct sockaddr *addr, socklen_t *addrlen) override {
|
68
|
+
return accept_impl_(addr, addrlen, true);
|
69
|
+
}
|
70
|
+
|
71
|
+
private:
|
72
|
+
std::unique_ptr<Socket> accept_impl_(struct sockaddr *addr, socklen_t *addrlen, bool loop_monitored) {
|
51
73
|
int fd = ::accept(fd_, addr, addrlen);
|
52
74
|
if (fd == -1)
|
53
75
|
return {};
|
54
|
-
return make_unique<BSDSocketImpl>(fd);
|
76
|
+
return make_unique<BSDSocketImpl>(fd, loop_monitored);
|
55
77
|
}
|
78
|
+
|
79
|
+
public:
|
56
80
|
int bind(const struct sockaddr *addr, socklen_t addrlen) override { return ::bind(fd_, addr, addrlen); }
|
57
81
|
int close() override {
|
58
|
-
|
59
|
-
|
60
|
-
|
82
|
+
if (!closed_) {
|
83
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
84
|
+
// Unregister from select() before closing if monitored
|
85
|
+
if (loop_monitored_) {
|
86
|
+
App.unregister_socket_fd(fd_);
|
87
|
+
}
|
88
|
+
#endif
|
89
|
+
int ret = ::close(fd_);
|
90
|
+
closed_ = true;
|
91
|
+
return ret;
|
92
|
+
}
|
93
|
+
return 0;
|
61
94
|
}
|
62
95
|
int shutdown(int how) override { return ::shutdown(fd_, how); }
|
63
96
|
|
@@ -126,16 +159,27 @@ class BSDSocketImpl : public Socket {
|
|
126
159
|
return 0;
|
127
160
|
}
|
128
161
|
|
162
|
+
int get_fd() const override { return fd_; }
|
163
|
+
|
129
164
|
protected:
|
130
165
|
int fd_;
|
131
166
|
bool closed_ = false;
|
132
167
|
};
|
133
168
|
|
134
|
-
|
169
|
+
// Helper to create a socket with optional monitoring
|
170
|
+
static std::unique_ptr<Socket> create_socket(int domain, int type, int protocol, bool loop_monitored = false) {
|
135
171
|
int ret = ::socket(domain, type, protocol);
|
136
172
|
if (ret == -1)
|
137
173
|
return nullptr;
|
138
|
-
return std::unique_ptr<Socket>{new BSDSocketImpl(ret)};
|
174
|
+
return std::unique_ptr<Socket>{new BSDSocketImpl(ret, loop_monitored)};
|
175
|
+
}
|
176
|
+
|
177
|
+
std::unique_ptr<Socket> socket(int domain, int type, int protocol) {
|
178
|
+
return create_socket(domain, type, protocol, false);
|
179
|
+
}
|
180
|
+
|
181
|
+
std::unique_ptr<Socket> socket_loop_monitored(int domain, int type, int protocol) {
|
182
|
+
return create_socket(domain, type, protocol, true);
|
139
183
|
}
|
140
184
|
|
141
185
|
} // namespace socket
|
@@ -606,6 +606,11 @@ std::unique_ptr<Socket> socket(int domain, int type, int protocol) {
|
|
606
606
|
return std::unique_ptr<Socket>{sock};
|
607
607
|
}
|
608
608
|
|
609
|
+
std::unique_ptr<Socket> socket_loop_monitored(int domain, int type, int protocol) {
|
610
|
+
// LWIPRawImpl doesn't use file descriptors, so monitoring is not applicable
|
611
|
+
return socket(domain, type, protocol);
|
612
|
+
}
|
613
|
+
|
609
614
|
} // namespace socket
|
610
615
|
} // namespace esphome
|
611
616
|
|
@@ -5,6 +5,7 @@
|
|
5
5
|
#ifdef USE_SOCKET_IMPL_LWIP_SOCKETS
|
6
6
|
|
7
7
|
#include <cstring>
|
8
|
+
#include "esphome/core/application.h"
|
8
9
|
|
9
10
|
namespace esphome {
|
10
11
|
namespace socket {
|
@@ -33,7 +34,20 @@ std::string format_sockaddr(const struct sockaddr_storage &storage) {
|
|
33
34
|
|
34
35
|
class LwIPSocketImpl : public Socket {
|
35
36
|
public:
|
36
|
-
LwIPSocketImpl(int fd) : fd_(fd) {
|
37
|
+
LwIPSocketImpl(int fd, bool monitor_loop = false) : fd_(fd) {
|
38
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
39
|
+
// Register new socket with the application for select() if monitoring requested
|
40
|
+
if (monitor_loop && fd_ >= 0) {
|
41
|
+
// Only set loop_monitored_ to true if registration succeeds
|
42
|
+
loop_monitored_ = App.register_socket_fd(fd_);
|
43
|
+
} else {
|
44
|
+
loop_monitored_ = false;
|
45
|
+
}
|
46
|
+
#else
|
47
|
+
// Without select support, ignore monitor_loop parameter
|
48
|
+
(void) monitor_loop;
|
49
|
+
#endif
|
50
|
+
}
|
37
51
|
~LwIPSocketImpl() override {
|
38
52
|
if (!closed_) {
|
39
53
|
close(); // NOLINT(clang-analyzer-optin.cplusplus.VirtualCall)
|
@@ -41,16 +55,35 @@ class LwIPSocketImpl : public Socket {
|
|
41
55
|
}
|
42
56
|
int connect(const struct sockaddr *addr, socklen_t addrlen) override { return lwip_connect(fd_, addr, addrlen); }
|
43
57
|
std::unique_ptr<Socket> accept(struct sockaddr *addr, socklen_t *addrlen) override {
|
58
|
+
return accept_impl_(addr, addrlen, false);
|
59
|
+
}
|
60
|
+
std::unique_ptr<Socket> accept_loop_monitored(struct sockaddr *addr, socklen_t *addrlen) override {
|
61
|
+
return accept_impl_(addr, addrlen, true);
|
62
|
+
}
|
63
|
+
|
64
|
+
private:
|
65
|
+
std::unique_ptr<Socket> accept_impl_(struct sockaddr *addr, socklen_t *addrlen, bool loop_monitored) {
|
44
66
|
int fd = lwip_accept(fd_, addr, addrlen);
|
45
67
|
if (fd == -1)
|
46
68
|
return {};
|
47
|
-
return make_unique<LwIPSocketImpl>(fd);
|
69
|
+
return make_unique<LwIPSocketImpl>(fd, loop_monitored);
|
48
70
|
}
|
71
|
+
|
72
|
+
public:
|
49
73
|
int bind(const struct sockaddr *addr, socklen_t addrlen) override { return lwip_bind(fd_, addr, addrlen); }
|
50
74
|
int close() override {
|
51
|
-
|
52
|
-
|
53
|
-
|
75
|
+
if (!closed_) {
|
76
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
77
|
+
// Unregister from select() before closing if monitored
|
78
|
+
if (loop_monitored_) {
|
79
|
+
App.unregister_socket_fd(fd_);
|
80
|
+
}
|
81
|
+
#endif
|
82
|
+
int ret = lwip_close(fd_);
|
83
|
+
closed_ = true;
|
84
|
+
return ret;
|
85
|
+
}
|
86
|
+
return 0;
|
54
87
|
}
|
55
88
|
int shutdown(int how) override { return lwip_shutdown(fd_, how); }
|
56
89
|
|
@@ -98,16 +131,27 @@ class LwIPSocketImpl : public Socket {
|
|
98
131
|
return 0;
|
99
132
|
}
|
100
133
|
|
134
|
+
int get_fd() const override { return fd_; }
|
135
|
+
|
101
136
|
protected:
|
102
137
|
int fd_;
|
103
138
|
bool closed_ = false;
|
104
139
|
};
|
105
140
|
|
106
|
-
|
141
|
+
// Helper to create a socket with optional monitoring
|
142
|
+
static std::unique_ptr<Socket> create_socket(int domain, int type, int protocol, bool loop_monitored = false) {
|
107
143
|
int ret = lwip_socket(domain, type, protocol);
|
108
144
|
if (ret == -1)
|
109
145
|
return nullptr;
|
110
|
-
return std::unique_ptr<Socket>{new LwIPSocketImpl(ret)};
|
146
|
+
return std::unique_ptr<Socket>{new LwIPSocketImpl(ret, loop_monitored)};
|
147
|
+
}
|
148
|
+
|
149
|
+
std::unique_ptr<Socket> socket(int domain, int type, int protocol) {
|
150
|
+
return create_socket(domain, type, protocol, false);
|
151
|
+
}
|
152
|
+
|
153
|
+
std::unique_ptr<Socket> socket_loop_monitored(int domain, int type, int protocol) {
|
154
|
+
return create_socket(domain, type, protocol, true);
|
111
155
|
}
|
112
156
|
|
113
157
|
} // namespace socket
|
@@ -4,12 +4,35 @@
|
|
4
4
|
#include <cstring>
|
5
5
|
#include <string>
|
6
6
|
#include "esphome/core/log.h"
|
7
|
+
#include "esphome/core/application.h"
|
7
8
|
|
8
9
|
namespace esphome {
|
9
10
|
namespace socket {
|
10
11
|
|
11
12
|
Socket::~Socket() {}
|
12
13
|
|
14
|
+
bool Socket::ready() const {
|
15
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
16
|
+
if (!loop_monitored_) {
|
17
|
+
// Non-monitored sockets always return true (assume data may be available)
|
18
|
+
return true;
|
19
|
+
}
|
20
|
+
|
21
|
+
// For loop-monitored sockets, check with the Application's select() results
|
22
|
+
int fd = this->get_fd();
|
23
|
+
if (fd < 0) {
|
24
|
+
// No valid file descriptor, assume ready (fallback behavior)
|
25
|
+
return true;
|
26
|
+
}
|
27
|
+
|
28
|
+
return App.is_socket_ready(fd);
|
29
|
+
#else
|
30
|
+
// Without select() support, we can't monitor sockets in the loop
|
31
|
+
// Always return true (assume data may be available)
|
32
|
+
return true;
|
33
|
+
#endif
|
34
|
+
}
|
35
|
+
|
13
36
|
std::unique_ptr<Socket> socket_ip(int type, int protocol) {
|
14
37
|
#if USE_NETWORK_IPV6
|
15
38
|
return socket(AF_INET6, type, protocol);
|
@@ -18,6 +41,14 @@ std::unique_ptr<Socket> socket_ip(int type, int protocol) {
|
|
18
41
|
#endif /* USE_NETWORK_IPV6 */
|
19
42
|
}
|
20
43
|
|
44
|
+
std::unique_ptr<Socket> socket_ip_loop_monitored(int type, int protocol) {
|
45
|
+
#if USE_NETWORK_IPV6
|
46
|
+
return socket_loop_monitored(AF_INET6, type, protocol);
|
47
|
+
#else
|
48
|
+
return socket_loop_monitored(AF_INET, type, protocol);
|
49
|
+
#endif /* USE_NETWORK_IPV6 */
|
50
|
+
}
|
51
|
+
|
21
52
|
socklen_t set_sockaddr(struct sockaddr *addr, socklen_t addrlen, const std::string &ip_address, uint16_t port) {
|
22
53
|
#if USE_NETWORK_IPV6
|
23
54
|
if (ip_address.find(':') != std::string::npos) {
|
@@ -17,6 +17,11 @@ class Socket {
|
|
17
17
|
Socket &operator=(const Socket &) = delete;
|
18
18
|
|
19
19
|
virtual std::unique_ptr<Socket> accept(struct sockaddr *addr, socklen_t *addrlen) = 0;
|
20
|
+
/// Accept a connection and monitor it in the main loop
|
21
|
+
/// NOTE: This function is NOT thread-safe and must only be called from the main loop
|
22
|
+
virtual std::unique_ptr<Socket> accept_loop_monitored(struct sockaddr *addr, socklen_t *addrlen) {
|
23
|
+
return accept(addr, addrlen); // Default implementation for backward compatibility
|
24
|
+
}
|
20
25
|
virtual int bind(const struct sockaddr *addr, socklen_t addrlen) = 0;
|
21
26
|
virtual int close() = 0;
|
22
27
|
// not supported yet:
|
@@ -44,14 +49,35 @@ class Socket {
|
|
44
49
|
|
45
50
|
virtual int setblocking(bool blocking) = 0;
|
46
51
|
virtual int loop() { return 0; };
|
52
|
+
|
53
|
+
/// Get the underlying file descriptor (returns -1 if not supported)
|
54
|
+
virtual int get_fd() const { return -1; }
|
55
|
+
|
56
|
+
/// Check if socket has data ready to read
|
57
|
+
/// For loop-monitored sockets, checks with the Application's select() results
|
58
|
+
/// For non-monitored sockets, always returns true (assumes data may be available)
|
59
|
+
bool ready() const;
|
60
|
+
|
61
|
+
protected:
|
62
|
+
#ifdef USE_SOCKET_SELECT_SUPPORT
|
63
|
+
bool loop_monitored_{false}; ///< Whether this socket is monitored by the event loop
|
64
|
+
#endif
|
47
65
|
};
|
48
66
|
|
49
67
|
/// Create a socket of the given domain, type and protocol.
|
50
68
|
std::unique_ptr<Socket> socket(int domain, int type, int protocol);
|
51
|
-
|
52
69
|
/// Create a socket in the newest available IP domain (IPv6 or IPv4) of the given type and protocol.
|
53
70
|
std::unique_ptr<Socket> socket_ip(int type, int protocol);
|
54
71
|
|
72
|
+
/// Create a socket and monitor it for data in the main loop.
|
73
|
+
/// Like socket() but also registers the socket with the Application's select() loop.
|
74
|
+
/// WARNING: These functions are NOT thread-safe. They must only be called from the main loop
|
75
|
+
/// as they register the socket file descriptor with the global Application instance.
|
76
|
+
/// NOTE: On ESP platforms, FD_SETSIZE is typically 10, limiting the number of monitored sockets.
|
77
|
+
/// File descriptors >= FD_SETSIZE will not be monitored and will log an error.
|
78
|
+
std::unique_ptr<Socket> socket_loop_monitored(int domain, int type, int protocol);
|
79
|
+
std::unique_ptr<Socket> socket_ip_loop_monitored(int type, int protocol);
|
80
|
+
|
55
81
|
/// Set a sockaddr to the specified address and port for the IP version used by socket_ip().
|
56
82
|
socklen_t set_sockaddr(struct sockaddr *addr, socklen_t addrlen, const std::string &ip_address, uint16_t port);
|
57
83
|
|
@@ -286,10 +286,13 @@ void SonoffD1Output::write_state(light::LightState *state) {
|
|
286
286
|
}
|
287
287
|
|
288
288
|
void SonoffD1Output::dump_config() {
|
289
|
-
ESP_LOGCONFIG(TAG,
|
290
|
-
|
291
|
-
|
292
|
-
|
289
|
+
ESP_LOGCONFIG(TAG,
|
290
|
+
"Sonoff D1 Dimmer: '%s'\n"
|
291
|
+
" Use RM433 Remote: %s\n"
|
292
|
+
" Minimal brightness: %d\n"
|
293
|
+
" Maximal brightness: %d",
|
294
|
+
this->light_state_ ? this->light_state_->get_name().c_str() : "", ONOFF(this->use_rm433_remote_),
|
295
|
+
this->min_value_, this->max_value_);
|
293
296
|
}
|
294
297
|
|
295
298
|
void SonoffD1Output::loop() {
|
@@ -31,9 +31,9 @@
|
|
31
31
|
-----
|
32
32
|
*/
|
33
33
|
|
34
|
-
#include "esphome/core/log.h"
|
35
|
-
#include "esphome/core/helpers.h"
|
36
34
|
#include "esphome/core/component.h"
|
35
|
+
#include "esphome/core/helpers.h"
|
36
|
+
#include "esphome/core/log.h"
|
37
37
|
#include "esphome/components/uart/uart.h"
|
38
38
|
#include "esphome/components/light/light_output.h"
|
39
39
|
#include "esphome/components/light/light_state.h"
|
@@ -19,8 +19,10 @@ static const uint32_t RING_BUFFER_DURATION_MS = 120;
|
|
19
19
|
static const double MAX_SAMPLE_SQUARED_DENOMINATOR = INT16_MIN * INT16_MIN;
|
20
20
|
|
21
21
|
void SoundLevelComponent::dump_config() {
|
22
|
-
ESP_LOGCONFIG(TAG,
|
23
|
-
|
22
|
+
ESP_LOGCONFIG(TAG,
|
23
|
+
"Sound Level Component:\n"
|
24
|
+
" Measurement Duration: %" PRIu32 " ms",
|
25
|
+
measurement_duration_ms_);
|
24
26
|
LOG_SENSOR(" ", "Peak:", this->peak_sensor_);
|
25
27
|
|
26
28
|
LOG_SENSOR(" ", "RMS:", this->rms_sensor_);
|
@@ -48,6 +48,7 @@ CONF_ON_UNMUTE = "on_unmute"
|
|
48
48
|
CONF_ON_VOLUME = "on_volume"
|
49
49
|
CONF_STREAM = "stream"
|
50
50
|
CONF_VOLUME_INCREMENT = "volume_increment"
|
51
|
+
CONF_VOLUME_INITIAL = "volume_initial"
|
51
52
|
CONF_VOLUME_MIN = "volume_min"
|
52
53
|
CONF_VOLUME_MAX = "volume_max"
|
53
54
|
|
@@ -282,6 +283,7 @@ CONFIG_SCHEMA = cv.All(
|
|
282
283
|
cv.Optional(CONF_FILES): cv.ensure_list(MEDIA_FILE_TYPE_SCHEMA),
|
283
284
|
cv.Optional(CONF_TASK_STACK_IN_PSRAM, default=False): cv.boolean,
|
284
285
|
cv.Optional(CONF_VOLUME_INCREMENT, default=0.05): cv.percentage,
|
286
|
+
cv.Optional(CONF_VOLUME_INITIAL, default=0.5): cv.percentage,
|
285
287
|
cv.Optional(CONF_VOLUME_MAX, default=1.0): cv.percentage,
|
286
288
|
cv.Optional(CONF_VOLUME_MIN, default=0.0): cv.percentage,
|
287
289
|
cv.Optional(CONF_ON_MUTE): automation.validate_automation(single=True),
|
@@ -356,6 +358,7 @@ async def to_code(config):
|
|
356
358
|
)
|
357
359
|
|
358
360
|
cg.add(var.set_volume_increment(config[CONF_VOLUME_INCREMENT]))
|
361
|
+
cg.add(var.set_volume_initial(config[CONF_VOLUME_INITIAL]))
|
359
362
|
cg.add(var.set_volume_max(config[CONF_VOLUME_MAX]))
|
360
363
|
cg.add(var.set_volume_min(config[CONF_VOLUME_MIN]))
|
361
364
|
|
@@ -48,8 +48,6 @@ static const uint32_t MEDIA_CONTROLS_QUEUE_LENGTH = 20;
|
|
48
48
|
static const UBaseType_t MEDIA_PIPELINE_TASK_PRIORITY = 1;
|
49
49
|
static const UBaseType_t ANNOUNCEMENT_PIPELINE_TASK_PRIORITY = 1;
|
50
50
|
|
51
|
-
static const float FIRST_BOOT_DEFAULT_VOLUME = 0.5f;
|
52
|
-
|
53
51
|
static const char *const TAG = "speaker_media_player";
|
54
52
|
|
55
53
|
void SpeakerMediaPlayer::setup() {
|
@@ -64,7 +62,7 @@ void SpeakerMediaPlayer::setup() {
|
|
64
62
|
this->set_volume_(volume_restore_state.volume);
|
65
63
|
this->set_mute_state_(volume_restore_state.is_muted);
|
66
64
|
} else {
|
67
|
-
this->set_volume_(
|
65
|
+
this->set_volume_(this->volume_initial_);
|
68
66
|
this->set_mute_state_(false);
|
69
67
|
}
|
70
68
|
|
@@ -55,6 +55,9 @@ class SpeakerMediaPlayer : public Component, public media_player::MediaPlayer {
|
|
55
55
|
// Percentage to increase or decrease the volume for volume up or volume down commands
|
56
56
|
void set_volume_increment(float volume_increment) { this->volume_increment_ = volume_increment; }
|
57
57
|
|
58
|
+
// Volume used initially on first boot when no volume had been previously saved
|
59
|
+
void set_volume_initial(float volume_initial) { this->volume_initial_ = volume_initial; }
|
60
|
+
|
58
61
|
void set_volume_max(float volume_max) { this->volume_max_ = volume_max; }
|
59
62
|
void set_volume_min(float volume_min) { this->volume_min_ = volume_min; }
|
60
63
|
|
@@ -128,6 +131,9 @@ class SpeakerMediaPlayer : public Component, public media_player::MediaPlayer {
|
|
128
131
|
// The amount to change the volume on volume up/down commands
|
129
132
|
float volume_increment_;
|
130
133
|
|
134
|
+
// The initial volume used by Setup when no previous volume was saved
|
135
|
+
float volume_initial_;
|
136
|
+
|
131
137
|
float volume_max_;
|
132
138
|
float volume_min_;
|
133
139
|
|
@@ -2,12 +2,14 @@ import re
|
|
2
2
|
|
3
3
|
from esphome import pins
|
4
4
|
import esphome.codegen as cg
|
5
|
+
from esphome.components.esp32 import only_on_variant
|
5
6
|
from esphome.components.esp32.const import (
|
6
7
|
KEY_ESP32,
|
7
8
|
VARIANT_ESP32C2,
|
8
9
|
VARIANT_ESP32C3,
|
9
10
|
VARIANT_ESP32C6,
|
10
11
|
VARIANT_ESP32H2,
|
12
|
+
VARIANT_ESP32P4,
|
11
13
|
VARIANT_ESP32S2,
|
12
14
|
VARIANT_ESP32S3,
|
13
15
|
)
|
@@ -287,7 +289,15 @@ def spi_mode_schema(mode):
|
|
287
289
|
if mode == TYPE_SINGLE:
|
288
290
|
return SPI_SINGLE_SCHEMA
|
289
291
|
pin_count = 4 if mode == TYPE_QUAD else 8
|
292
|
+
onlys = [cv.only_on([PLATFORM_ESP32]), cv.only_with_esp_idf]
|
293
|
+
if pin_count == 8:
|
294
|
+
onlys.append(
|
295
|
+
only_on_variant(
|
296
|
+
supported=[VARIANT_ESP32S3, VARIANT_ESP32S2, VARIANT_ESP32P4]
|
297
|
+
)
|
298
|
+
)
|
290
299
|
return cv.All(
|
300
|
+
*onlys,
|
291
301
|
cv.Schema(
|
292
302
|
{
|
293
303
|
cv.GenerateID(): cv.declare_id(TYPE_CLASS[mode]),
|
@@ -308,8 +318,6 @@ def spi_mode_schema(mode):
|
|
308
318
|
),
|
309
319
|
}
|
310
320
|
),
|
311
|
-
cv.only_on([PLATFORM_ESP32]),
|
312
|
-
cv.only_with_esp_idf,
|
313
321
|
)
|
314
322
|
|
315
323
|
|
esphome/components/spi/spi.cpp
CHANGED
@@ -18,7 +18,7 @@ GPIOPin *const NullPin::NULL_PIN = new NullPin(); // NOLINT(cppcoreguidelines-a
|
|
18
18
|
SPIDelegate *SPIComponent::register_device(SPIClient *device, SPIMode mode, SPIBitOrder bit_order, uint32_t data_rate,
|
19
19
|
GPIOPin *cs_pin) {
|
20
20
|
if (this->devices_.count(device) != 0) {
|
21
|
-
ESP_LOGE(TAG, "
|
21
|
+
ESP_LOGE(TAG, "Device already registered");
|
22
22
|
return this->devices_[device];
|
23
23
|
}
|
24
24
|
SPIDelegate *delegate = this->spi_bus_->get_delegate(data_rate, bit_order, mode, cs_pin); // NOLINT
|
@@ -28,7 +28,7 @@ SPIDelegate *SPIComponent::register_device(SPIClient *device, SPIMode mode, SPIB
|
|
28
28
|
|
29
29
|
void SPIComponent::unregister_device(SPIClient *device) {
|
30
30
|
if (this->devices_.count(device) == 0) {
|
31
|
-
esph_log_e(TAG, "
|
31
|
+
esph_log_e(TAG, "Device not registered");
|
32
32
|
return;
|
33
33
|
}
|
34
34
|
delete this->devices_[device]; // NOLINT
|
@@ -36,14 +36,14 @@ void SPIComponent::unregister_device(SPIClient *device) {
|
|
36
36
|
}
|
37
37
|
|
38
38
|
void SPIComponent::setup() {
|
39
|
-
|
39
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
40
40
|
|
41
41
|
if (this->sdo_pin_ == nullptr)
|
42
42
|
this->sdo_pin_ = NullPin::NULL_PIN;
|
43
43
|
if (this->sdi_pin_ == nullptr)
|
44
44
|
this->sdi_pin_ = NullPin::NULL_PIN;
|
45
45
|
if (this->clk_pin_ == nullptr) {
|
46
|
-
ESP_LOGE(TAG, "No clock pin
|
46
|
+
ESP_LOGE(TAG, "No clock pin");
|
47
47
|
this->mark_failed();
|
48
48
|
return;
|
49
49
|
}
|
@@ -3,7 +3,6 @@
|
|
3
3
|
|
4
4
|
namespace esphome {
|
5
5
|
namespace spi {
|
6
|
-
|
7
6
|
#ifdef USE_ARDUINO
|
8
7
|
|
9
8
|
static const char *const TAG = "spi-esp-arduino";
|
@@ -38,17 +37,31 @@ class SPIDelegateHw : public SPIDelegate {
|
|
38
37
|
|
39
38
|
void write16(uint16_t data) override { this->channel_->transfer16(data); }
|
40
39
|
|
41
|
-
#ifdef USE_RP2040
|
42
40
|
void write_array(const uint8_t *ptr, size_t length) override {
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
41
|
+
if (length == 1) {
|
42
|
+
this->channel_->transfer(*ptr);
|
43
|
+
return;
|
44
|
+
}
|
45
|
+
#ifdef USE_RP2040
|
46
|
+
// avoid overwriting the supplied buffer. Use vector for automatic deallocation
|
47
|
+
auto rxbuf = std::vector<uint8_t>(length);
|
48
|
+
memcpy(rxbuf.data(), ptr, length);
|
49
|
+
this->channel_->transfer((void *) rxbuf.data(), length);
|
50
|
+
#elif defined(USE_ESP8266)
|
51
|
+
// ESP8266 SPI library requires the pointer to be word aligned, but the data may not be
|
52
|
+
// so we need to copy the data to a temporary buffer
|
53
|
+
if (reinterpret_cast<uintptr_t>(ptr) & 0x3) {
|
54
|
+
ESP_LOGVV(TAG, "SPI write buffer not word aligned, copying to temporary buffer");
|
55
|
+
auto txbuf = std::vector<uint8_t>(length);
|
56
|
+
memcpy(txbuf.data(), ptr, length);
|
57
|
+
this->channel_->writeBytes(txbuf.data(), length);
|
58
|
+
} else {
|
59
|
+
this->channel_->writeBytes(ptr, length);
|
60
|
+
}
|
49
61
|
#else
|
50
|
-
|
62
|
+
this->channel_->writeBytes(ptr, length);
|
51
63
|
#endif
|
64
|
+
}
|
52
65
|
|
53
66
|
void read_array(uint8_t *ptr, size_t length) override { this->channel_->transfer(ptr, length); }
|
54
67
|
|
@@ -9,9 +9,8 @@ namespace spi_device {
|
|
9
9
|
static const char *const TAG = "spi_device";
|
10
10
|
|
11
11
|
void SPIDeviceComponent::setup() {
|
12
|
-
|
12
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
13
13
|
this->spi_setup();
|
14
|
-
ESP_LOGCONFIG(TAG, "SPIDevice started!");
|
15
14
|
}
|
16
15
|
|
17
16
|
void SPIDeviceComponent::dump_config() {
|
@@ -1712,15 +1712,18 @@ void Sprinkler::dump_config() {
|
|
1712
1712
|
if (this->valve_overlap_) {
|
1713
1713
|
ESP_LOGCONFIG(TAG, " Valve Overlap: %" PRIu32 " seconds", this->switching_delay_.value_or(0));
|
1714
1714
|
} else {
|
1715
|
-
ESP_LOGCONFIG(TAG,
|
1716
|
-
|
1717
|
-
|
1715
|
+
ESP_LOGCONFIG(TAG,
|
1716
|
+
" Valve Open Delay: %" PRIu32 " seconds\n"
|
1717
|
+
" Pump Switch Off During Valve Open Delay: %s",
|
1718
|
+
this->switching_delay_.value_or(0), YESNO(this->pump_switch_off_during_valve_open_delay_));
|
1718
1719
|
}
|
1719
1720
|
}
|
1720
1721
|
for (size_t valve_number = 0; valve_number < this->number_of_valves(); valve_number++) {
|
1721
|
-
ESP_LOGCONFIG(TAG,
|
1722
|
-
|
1723
|
-
|
1722
|
+
ESP_LOGCONFIG(TAG,
|
1723
|
+
" Valve %zu:\n"
|
1724
|
+
" Name: %s\n"
|
1725
|
+
" Run Duration: %" PRIu32 " seconds",
|
1726
|
+
valve_number, this->valve_name(valve_number), this->valve_run_duration(valve_number));
|
1724
1727
|
if (this->valve_[valve_number].valve_switch.pulse_duration()) {
|
1725
1728
|
ESP_LOGCONFIG(TAG, " Pulse Duration: %" PRIu32 " milliseconds",
|
1726
1729
|
this->valve_[valve_number].valve_switch.pulse_duration());
|