esphome 2025.5.2__py3-none-any.whl → 2025.6.0b2__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 +3 -0
- esphome/components/api/api_pb2.h +702 -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 -1
- 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/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 +13 -10
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
- 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_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 +1 -2
- 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/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_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 +1 -1
- 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/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.2.dist-info → esphome-2025.6.0b2.dist-info}/METADATA +12 -11
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/RECORD +746 -692
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/WHEEL +1 -1
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.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
|
}
|
@@ -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());
|
@@ -22,7 +22,7 @@ static const size_t SERIAL_NUMBER_LENGTH = 8;
|
|
22
22
|
static const uint8_t MAX_SKIPPED_DATA_CYCLES_BEFORE_ERROR = 5;
|
23
23
|
|
24
24
|
void SPS30Component::setup() {
|
25
|
-
ESP_LOGCONFIG(TAG, "
|
25
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
26
26
|
this->write_command(SPS30_CMD_SOFT_RESET);
|
27
27
|
/// Deferred Sensor initialization
|
28
28
|
this->set_timeout(500, [this]() {
|
@@ -73,10 +73,10 @@ void SPS30Component::dump_config() {
|
|
73
73
|
if (this->is_failed()) {
|
74
74
|
switch (this->error_code_) {
|
75
75
|
case COMMUNICATION_FAILED:
|
76
|
-
ESP_LOGW(TAG,
|
76
|
+
ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
|
77
77
|
break;
|
78
78
|
case MEASUREMENT_INIT_FAILED:
|
79
|
-
ESP_LOGW(TAG, "Measurement Initialization failed
|
79
|
+
ESP_LOGW(TAG, "Measurement Initialization failed");
|
80
80
|
break;
|
81
81
|
case SERIAL_NUMBER_REQUEST_FAILED:
|
82
82
|
ESP_LOGW(TAG, "Unable to request sensor serial number");
|
@@ -91,14 +91,15 @@ void SPS30Component::dump_config() {
|
|
91
91
|
ESP_LOGW(TAG, "Unable to read sensor firmware version");
|
92
92
|
break;
|
93
93
|
default:
|
94
|
-
ESP_LOGW(TAG, "Unknown setup error
|
94
|
+
ESP_LOGW(TAG, "Unknown setup error");
|
95
95
|
break;
|
96
96
|
}
|
97
97
|
}
|
98
98
|
LOG_UPDATE_INTERVAL(this);
|
99
|
-
ESP_LOGCONFIG(TAG,
|
100
|
-
|
101
|
-
|
99
|
+
ESP_LOGCONFIG(TAG,
|
100
|
+
" Serial Number: '%s'\n"
|
101
|
+
" Firmware version v%0d.%0d",
|
102
|
+
this->serial_number_, (raw_firmware_version_ >> 8), uint16_t(raw_firmware_version_ & 0xFF));
|
102
103
|
LOG_SENSOR(" ", "PM1.0 Weight Concentration", this->pm_1_0_sensor_);
|
103
104
|
LOG_SENSOR(" ", "PM2.5 Weight Concentration", this->pm_2_5_sensor_);
|
104
105
|
LOG_SENSOR(" ", "PM4 Weight Concentration", this->pm_4_0_sensor_);
|
@@ -113,18 +114,18 @@ void SPS30Component::dump_config() {
|
|
113
114
|
void SPS30Component::update() {
|
114
115
|
/// Check if warning flag active (sensor reconnected?)
|
115
116
|
if (this->status_has_warning()) {
|
116
|
-
ESP_LOGD(TAG, "Trying to reconnect
|
117
|
+
ESP_LOGD(TAG, "Trying to reconnect");
|
117
118
|
if (this->write_command(SPS30_CMD_SOFT_RESET)) {
|
118
|
-
ESP_LOGD(TAG, "
|
119
|
+
ESP_LOGD(TAG, "Soft-reset successful. Waiting for reconnection in 500 ms");
|
119
120
|
this->set_timeout(500, [this]() {
|
120
121
|
this->start_continuous_measurement_();
|
121
122
|
/// Sensor restarted and reading attempt made next cycle
|
122
123
|
this->status_clear_warning();
|
123
124
|
this->skipped_data_read_cycles_ = 0;
|
124
|
-
ESP_LOGD(TAG, "
|
125
|
+
ESP_LOGD(TAG, "Reconnect successful. Resuming continuous measurement");
|
125
126
|
});
|
126
127
|
} else {
|
127
|
-
ESP_LOGD(TAG, "
|
128
|
+
ESP_LOGD(TAG, "Soft-reset failed");
|
128
129
|
}
|
129
130
|
return;
|
130
131
|
}
|
@@ -136,19 +137,19 @@ void SPS30Component::update() {
|
|
136
137
|
|
137
138
|
uint16_t raw_read_status;
|
138
139
|
if (!this->read_data(&raw_read_status, 1) || raw_read_status == 0x00) {
|
139
|
-
ESP_LOGD(TAG, "
|
140
|
+
ESP_LOGD(TAG, "Not ready yet");
|
140
141
|
this->skipped_data_read_cycles_++;
|
141
142
|
/// The following logic is required to address the cases when a sensor is quickly replaced before it's marked
|
142
143
|
/// as failed so that new sensor is eventually forced to be reinitialized for continuous measurement.
|
143
144
|
if (this->skipped_data_read_cycles_ > MAX_SKIPPED_DATA_CYCLES_BEFORE_ERROR) {
|
144
|
-
ESP_LOGD(TAG, "
|
145
|
+
ESP_LOGD(TAG, "Exceeded max allowed attempts; communication will be reinitialized");
|
145
146
|
this->status_set_warning();
|
146
147
|
}
|
147
148
|
return;
|
148
149
|
}
|
149
150
|
|
150
151
|
if (!this->write_command(SPS30_CMD_READ_MEASUREMENT)) {
|
151
|
-
ESP_LOGW(TAG, "Error reading
|
152
|
+
ESP_LOGW(TAG, "Error reading status");
|
152
153
|
this->status_set_warning();
|
153
154
|
return;
|
154
155
|
}
|
@@ -156,7 +157,7 @@ void SPS30Component::update() {
|
|
156
157
|
this->set_timeout(50, [this]() {
|
157
158
|
uint16_t raw_data[20];
|
158
159
|
if (!this->read_data(raw_data, 20)) {
|
159
|
-
ESP_LOGW(TAG, "Error reading
|
160
|
+
ESP_LOGW(TAG, "Error reading data");
|
160
161
|
this->status_set_warning();
|
161
162
|
return;
|
162
163
|
}
|