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
@@ -30,22 +30,22 @@ static const int32_t DC_OFFSET_MOVING_AVERAGE_COEFFICIENT_DENOMINATOR = 1000;
|
|
30
30
|
static const char *const TAG = "i2s_audio.microphone";
|
31
31
|
|
32
32
|
enum MicrophoneEventGroupBits : uint32_t {
|
33
|
-
COMMAND_STOP = (1 << 0), // stops the microphone task
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
TASK_STOPPED = (1 << 13),
|
33
|
+
COMMAND_STOP = (1 << 0), // stops the microphone task, set and cleared by ``loop``
|
34
|
+
|
35
|
+
TASK_STARTING = (1 << 10), // set by mic task, cleared by ``loop``
|
36
|
+
TASK_RUNNING = (1 << 11), // set by mic task, cleared by ``loop``
|
37
|
+
TASK_STOPPED = (1 << 13), // set by mic task, cleared by ``loop``
|
38
38
|
|
39
39
|
ALL_BITS = 0x00FFFFFF, // All valid FreeRTOS event group bits
|
40
40
|
};
|
41
41
|
|
42
42
|
void I2SAudioMicrophone::setup() {
|
43
|
-
ESP_LOGCONFIG(TAG, "
|
43
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
44
44
|
#ifdef USE_I2S_LEGACY
|
45
45
|
#if SOC_I2S_SUPPORTS_ADC
|
46
46
|
if (this->adc_) {
|
47
47
|
if (this->parent_->get_port() != I2S_NUM_0) {
|
48
|
-
ESP_LOGE(TAG, "Internal ADC only works on I2S0
|
48
|
+
ESP_LOGE(TAG, "Internal ADC only works on I2S0");
|
49
49
|
this->mark_failed();
|
50
50
|
return;
|
51
51
|
}
|
@@ -55,7 +55,7 @@ void I2SAudioMicrophone::setup() {
|
|
55
55
|
{
|
56
56
|
if (this->pdm_) {
|
57
57
|
if (this->parent_->get_port() != I2S_NUM_0) {
|
58
|
-
ESP_LOGE(TAG, "PDM only works on I2S0
|
58
|
+
ESP_LOGE(TAG, "PDM only works on I2S0");
|
59
59
|
this->mark_failed();
|
60
60
|
return;
|
61
61
|
}
|
@@ -64,14 +64,14 @@ void I2SAudioMicrophone::setup() {
|
|
64
64
|
|
65
65
|
this->active_listeners_semaphore_ = xSemaphoreCreateCounting(MAX_LISTENERS, MAX_LISTENERS);
|
66
66
|
if (this->active_listeners_semaphore_ == nullptr) {
|
67
|
-
ESP_LOGE(TAG, "
|
67
|
+
ESP_LOGE(TAG, "Creating semaphore failed");
|
68
68
|
this->mark_failed();
|
69
69
|
return;
|
70
70
|
}
|
71
71
|
|
72
72
|
this->event_group_ = xEventGroupCreate();
|
73
73
|
if (this->event_group_ == nullptr) {
|
74
|
-
ESP_LOGE(TAG, "
|
74
|
+
ESP_LOGE(TAG, "Creating event group failed");
|
75
75
|
this->mark_failed();
|
76
76
|
return;
|
77
77
|
}
|
@@ -79,6 +79,15 @@ void I2SAudioMicrophone::setup() {
|
|
79
79
|
this->configure_stream_settings_();
|
80
80
|
}
|
81
81
|
|
82
|
+
void I2SAudioMicrophone::dump_config() {
|
83
|
+
ESP_LOGCONFIG(TAG,
|
84
|
+
"Microphone:\n"
|
85
|
+
" Pin: %d\n"
|
86
|
+
" PDM: %s\n"
|
87
|
+
" DC offset correction: %s",
|
88
|
+
static_cast<int8_t>(this->din_pin_), YESNO(this->pdm_), YESNO(this->correct_dc_offset_));
|
89
|
+
}
|
90
|
+
|
82
91
|
void I2SAudioMicrophone::configure_stream_settings_() {
|
83
92
|
uint8_t channel_count = 1;
|
84
93
|
#ifdef USE_I2S_LEGACY
|
@@ -127,6 +136,7 @@ bool I2SAudioMicrophone::start_driver_() {
|
|
127
136
|
if (!this->parent_->try_lock()) {
|
128
137
|
return false; // Waiting for another i2s to return lock
|
129
138
|
}
|
139
|
+
this->locked_driver_ = true;
|
130
140
|
esp_err_t err;
|
131
141
|
|
132
142
|
#ifdef USE_I2S_LEGACY
|
@@ -151,24 +161,21 @@ bool I2SAudioMicrophone::start_driver_() {
|
|
151
161
|
config.mode = (i2s_mode_t) (config.mode | I2S_MODE_ADC_BUILT_IN);
|
152
162
|
err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr);
|
153
163
|
if (err != ESP_OK) {
|
154
|
-
|
155
|
-
this->status_set_error();
|
164
|
+
ESP_LOGE(TAG, "Error installing driver: %s", esp_err_to_name(err));
|
156
165
|
return false;
|
157
166
|
}
|
158
167
|
|
159
168
|
err = i2s_set_adc_mode(ADC_UNIT_1, this->adc_channel_);
|
160
169
|
if (err != ESP_OK) {
|
161
|
-
|
162
|
-
this->status_set_error();
|
170
|
+
ESP_LOGE(TAG, "Error setting ADC mode: %s", esp_err_to_name(err));
|
163
171
|
return false;
|
164
172
|
}
|
173
|
+
|
165
174
|
err = i2s_adc_enable(this->parent_->get_port());
|
166
175
|
if (err != ESP_OK) {
|
167
|
-
|
168
|
-
this->status_set_error();
|
176
|
+
ESP_LOGE(TAG, "Error enabling ADC: %s", esp_err_to_name(err));
|
169
177
|
return false;
|
170
178
|
}
|
171
|
-
|
172
179
|
} else
|
173
180
|
#endif
|
174
181
|
{
|
@@ -177,8 +184,7 @@ bool I2SAudioMicrophone::start_driver_() {
|
|
177
184
|
|
178
185
|
err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr);
|
179
186
|
if (err != ESP_OK) {
|
180
|
-
|
181
|
-
this->status_set_error();
|
187
|
+
ESP_LOGE(TAG, "Error installing driver: %s", esp_err_to_name(err));
|
182
188
|
return false;
|
183
189
|
}
|
184
190
|
|
@@ -187,8 +193,7 @@ bool I2SAudioMicrophone::start_driver_() {
|
|
187
193
|
|
188
194
|
err = i2s_set_pin(this->parent_->get_port(), &pin_config);
|
189
195
|
if (err != ESP_OK) {
|
190
|
-
|
191
|
-
this->status_set_error();
|
196
|
+
ESP_LOGE(TAG, "Error setting pin: %s", esp_err_to_name(err));
|
192
197
|
return false;
|
193
198
|
}
|
194
199
|
}
|
@@ -203,8 +208,7 @@ bool I2SAudioMicrophone::start_driver_() {
|
|
203
208
|
/* Allocate a new RX channel and get the handle of this channel */
|
204
209
|
err = i2s_new_channel(&chan_cfg, NULL, &this->rx_handle_);
|
205
210
|
if (err != ESP_OK) {
|
206
|
-
|
207
|
-
this->status_set_error();
|
211
|
+
ESP_LOGE(TAG, "Error creating channel: %s", esp_err_to_name(err));
|
208
212
|
return false;
|
209
213
|
}
|
210
214
|
|
@@ -276,22 +280,20 @@ bool I2SAudioMicrophone::start_driver_() {
|
|
276
280
|
err = i2s_channel_init_std_mode(this->rx_handle_, &std_cfg);
|
277
281
|
}
|
278
282
|
if (err != ESP_OK) {
|
279
|
-
|
280
|
-
this->status_set_error();
|
283
|
+
ESP_LOGE(TAG, "Error initializing channel: %s", esp_err_to_name(err));
|
281
284
|
return false;
|
282
285
|
}
|
283
286
|
|
284
287
|
/* Before reading data, start the RX channel first */
|
285
288
|
i2s_channel_enable(this->rx_handle_);
|
286
289
|
if (err != ESP_OK) {
|
287
|
-
|
288
|
-
this->status_set_error();
|
290
|
+
ESP_LOGE(TAG, "Enabling failed: %s", esp_err_to_name(err));
|
289
291
|
return false;
|
290
292
|
}
|
291
293
|
#endif
|
292
294
|
|
293
|
-
this->status_clear_error();
|
294
295
|
this->configure_stream_settings_(); // redetermine the settings in case some settings were changed after compilation
|
296
|
+
|
295
297
|
return true;
|
296
298
|
}
|
297
299
|
|
@@ -303,6 +305,9 @@ void I2SAudioMicrophone::stop() {
|
|
303
305
|
}
|
304
306
|
|
305
307
|
void I2SAudioMicrophone::stop_driver_() {
|
308
|
+
// There is no harm continuing to unload the driver if an error is ever returned by the various functions. This
|
309
|
+
// ensures that we stop/unload the driver when it only partially starts.
|
310
|
+
|
306
311
|
esp_err_t err;
|
307
312
|
#ifdef USE_I2S_LEGACY
|
308
313
|
#if SOC_I2S_SUPPORTS_ADC
|
@@ -310,64 +315,51 @@ void I2SAudioMicrophone::stop_driver_() {
|
|
310
315
|
err = i2s_adc_disable(this->parent_->get_port());
|
311
316
|
if (err != ESP_OK) {
|
312
317
|
ESP_LOGW(TAG, "Error disabling ADC: %s", esp_err_to_name(err));
|
313
|
-
this->status_set_error();
|
314
|
-
return;
|
315
318
|
}
|
316
319
|
}
|
317
320
|
#endif
|
318
321
|
err = i2s_stop(this->parent_->get_port());
|
319
322
|
if (err != ESP_OK) {
|
320
|
-
ESP_LOGW(TAG, "Error stopping
|
321
|
-
this->status_set_error();
|
322
|
-
return;
|
323
|
+
ESP_LOGW(TAG, "Error stopping: %s", esp_err_to_name(err));
|
323
324
|
}
|
324
325
|
err = i2s_driver_uninstall(this->parent_->get_port());
|
325
326
|
if (err != ESP_OK) {
|
326
|
-
ESP_LOGW(TAG, "Error uninstalling
|
327
|
-
this->status_set_error();
|
328
|
-
return;
|
327
|
+
ESP_LOGW(TAG, "Error uninstalling driver: %s", esp_err_to_name(err));
|
329
328
|
}
|
330
329
|
#else
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
this->
|
343
|
-
return;
|
330
|
+
if (this->rx_handle_ != nullptr) {
|
331
|
+
/* Have to stop the channel before deleting it */
|
332
|
+
err = i2s_channel_disable(this->rx_handle_);
|
333
|
+
if (err != ESP_OK) {
|
334
|
+
ESP_LOGW(TAG, "Error stopping: %s", esp_err_to_name(err));
|
335
|
+
}
|
336
|
+
/* If the handle is not needed any more, delete it to release the channel resources */
|
337
|
+
err = i2s_del_channel(this->rx_handle_);
|
338
|
+
if (err != ESP_OK) {
|
339
|
+
ESP_LOGW(TAG, "Error deleting channel: %s", esp_err_to_name(err));
|
340
|
+
}
|
341
|
+
this->rx_handle_ = nullptr;
|
344
342
|
}
|
345
343
|
#endif
|
346
|
-
this->
|
347
|
-
|
344
|
+
if (this->locked_driver_) {
|
345
|
+
this->parent_->unlock();
|
346
|
+
this->locked_driver_ = false;
|
347
|
+
}
|
348
348
|
}
|
349
349
|
|
350
350
|
void I2SAudioMicrophone::mic_task(void *params) {
|
351
351
|
I2SAudioMicrophone *this_microphone = (I2SAudioMicrophone *) params;
|
352
|
-
|
353
352
|
xEventGroupSetBits(this_microphone->event_group_, MicrophoneEventGroupBits::TASK_STARTING);
|
354
353
|
|
355
|
-
|
356
|
-
bool started = this_microphone->start_driver_();
|
357
|
-
while (!started && start_counter < 10) {
|
358
|
-
// Attempt to load the driver again in 100 ms. Doesn't slow down main loop since its in a task.
|
359
|
-
vTaskDelay(pdMS_TO_TICKS(100));
|
360
|
-
++start_counter;
|
361
|
-
started = this_microphone->start_driver_();
|
362
|
-
}
|
354
|
+
{ // Ensures the samples vector is freed when the task stops
|
363
355
|
|
364
|
-
if (started) {
|
365
|
-
xEventGroupSetBits(this_microphone->event_group_, MicrophoneEventGroupBits::TASK_RUNNING);
|
366
356
|
const size_t bytes_to_read = this_microphone->audio_stream_info_.ms_to_bytes(READ_DURATION_MS);
|
367
357
|
std::vector<uint8_t> samples;
|
368
358
|
samples.reserve(bytes_to_read);
|
369
359
|
|
370
|
-
|
360
|
+
xEventGroupSetBits(this_microphone->event_group_, MicrophoneEventGroupBits::TASK_RUNNING);
|
361
|
+
|
362
|
+
while (!(xEventGroupGetBits(this_microphone->event_group_) & MicrophoneEventGroupBits::COMMAND_STOP)) {
|
371
363
|
if (this_microphone->data_callbacks_.size() > 0) {
|
372
364
|
samples.resize(bytes_to_read);
|
373
365
|
size_t bytes_read = this_microphone->read_(samples.data(), bytes_to_read, 2 * pdMS_TO_TICKS(READ_DURATION_MS));
|
@@ -382,9 +374,6 @@ void I2SAudioMicrophone::mic_task(void *params) {
|
|
382
374
|
}
|
383
375
|
}
|
384
376
|
|
385
|
-
xEventGroupSetBits(this_microphone->event_group_, MicrophoneEventGroupBits::TASK_STOPPING);
|
386
|
-
this_microphone->stop_driver_();
|
387
|
-
|
388
377
|
xEventGroupSetBits(this_microphone->event_group_, MicrophoneEventGroupBits::TASK_STOPPED);
|
389
378
|
while (true) {
|
390
379
|
// Continuously delay until the loop method deletes the task
|
@@ -425,7 +414,10 @@ size_t I2SAudioMicrophone::read_(uint8_t *buf, size_t len, TickType_t ticks_to_w
|
|
425
414
|
#endif
|
426
415
|
if ((err != ESP_OK) && ((err != ESP_ERR_TIMEOUT) || (ticks_to_wait != 0))) {
|
427
416
|
// Ignore ESP_ERR_TIMEOUT if ticks_to_wait = 0, as it will read the data on the next call
|
428
|
-
|
417
|
+
if (!this->status_has_warning()) {
|
418
|
+
// Avoid spamming the logs with the error message if its repeated
|
419
|
+
ESP_LOGW(TAG, "Read error: %s", esp_err_to_name(err));
|
420
|
+
}
|
429
421
|
this->status_set_warning();
|
430
422
|
return 0;
|
431
423
|
}
|
@@ -452,34 +444,36 @@ void I2SAudioMicrophone::loop() {
|
|
452
444
|
uint32_t event_group_bits = xEventGroupGetBits(this->event_group_);
|
453
445
|
|
454
446
|
if (event_group_bits & MicrophoneEventGroupBits::TASK_STARTING) {
|
455
|
-
|
447
|
+
ESP_LOGV(TAG, "Task started, attempting to allocate buffer");
|
456
448
|
xEventGroupClearBits(this->event_group_, MicrophoneEventGroupBits::TASK_STARTING);
|
457
449
|
}
|
458
450
|
|
459
451
|
if (event_group_bits & MicrophoneEventGroupBits::TASK_RUNNING) {
|
460
|
-
|
452
|
+
ESP_LOGV(TAG, "Task is running and reading data");
|
461
453
|
|
462
454
|
xEventGroupClearBits(this->event_group_, MicrophoneEventGroupBits::TASK_RUNNING);
|
463
455
|
this->state_ = microphone::STATE_RUNNING;
|
464
456
|
}
|
465
457
|
|
466
|
-
if (event_group_bits & MicrophoneEventGroupBits::TASK_STOPPING) {
|
467
|
-
ESP_LOGD(TAG, "Task is stopping, attempting to unload the I2S audio driver");
|
468
|
-
xEventGroupClearBits(this->event_group_, MicrophoneEventGroupBits::TASK_STOPPING);
|
469
|
-
}
|
470
|
-
|
471
458
|
if ((event_group_bits & MicrophoneEventGroupBits::TASK_STOPPED)) {
|
472
|
-
|
459
|
+
ESP_LOGV(TAG, "Task finished, freeing resources and uninstalling driver");
|
460
|
+
|
473
461
|
vTaskDelete(this->task_handle_);
|
474
462
|
this->task_handle_ = nullptr;
|
463
|
+
this->stop_driver_();
|
475
464
|
xEventGroupClearBits(this->event_group_, ALL_BITS);
|
465
|
+
this->status_clear_error();
|
466
|
+
|
476
467
|
this->state_ = microphone::STATE_STOPPED;
|
477
468
|
}
|
478
469
|
|
470
|
+
// Start the microphone if any semaphores are taken
|
479
471
|
if ((uxSemaphoreGetCount(this->active_listeners_semaphore_) < MAX_LISTENERS) &&
|
480
472
|
(this->state_ == microphone::STATE_STOPPED)) {
|
481
473
|
this->state_ = microphone::STATE_STARTING;
|
482
474
|
}
|
475
|
+
|
476
|
+
// Stop the microphone if all semaphores are returned
|
483
477
|
if ((uxSemaphoreGetCount(this->active_listeners_semaphore_) == MAX_LISTENERS) &&
|
484
478
|
(this->state_ == microphone::STATE_RUNNING)) {
|
485
479
|
this->state_ = microphone::STATE_STOPPING;
|
@@ -487,14 +481,28 @@ void I2SAudioMicrophone::loop() {
|
|
487
481
|
|
488
482
|
switch (this->state_) {
|
489
483
|
case microphone::STATE_STARTING:
|
490
|
-
if (
|
484
|
+
if (this->status_has_error()) {
|
485
|
+
break;
|
486
|
+
}
|
487
|
+
|
488
|
+
if (!this->start_driver_()) {
|
489
|
+
ESP_LOGE(TAG, "Driver failed to start; retrying in 1 second");
|
490
|
+
this->status_momentary_error("driver_fail", 1000);
|
491
|
+
this->stop_driver_(); // Stop/frees whatever possibly started
|
492
|
+
break;
|
493
|
+
}
|
494
|
+
|
495
|
+
if (this->task_handle_ == nullptr) {
|
491
496
|
xTaskCreate(I2SAudioMicrophone::mic_task, "mic_task", TASK_STACK_SIZE, (void *) this, TASK_PRIORITY,
|
492
497
|
&this->task_handle_);
|
493
498
|
|
494
499
|
if (this->task_handle_ == nullptr) {
|
495
|
-
|
500
|
+
ESP_LOGE(TAG, "Task failed to start, retrying in 1 second");
|
501
|
+
this->status_momentary_error("task_fail", 1000);
|
502
|
+
this->stop_driver_(); // Stops the driver to return the lock; will be reloaded in next attempt
|
496
503
|
}
|
497
504
|
}
|
505
|
+
|
498
506
|
break;
|
499
507
|
case microphone::STATE_RUNNING:
|
500
508
|
break;
|
@@ -18,6 +18,7 @@ namespace i2s_audio {
|
|
18
18
|
class I2SAudioMicrophone : public I2SAudioIn, public microphone::Microphone, public Component {
|
19
19
|
public:
|
20
20
|
void setup() override;
|
21
|
+
void dump_config() override;
|
21
22
|
void start() override;
|
22
23
|
void stop() override;
|
23
24
|
|
@@ -43,7 +44,11 @@ class I2SAudioMicrophone : public I2SAudioIn, public microphone::Microphone, pub
|
|
43
44
|
#endif
|
44
45
|
|
45
46
|
protected:
|
47
|
+
/// @brief Starts the I2S driver. Updates the ``audio_stream_info_`` member variable with the current setttings.
|
48
|
+
/// @return True if succesful, false otherwise
|
46
49
|
bool start_driver_();
|
50
|
+
|
51
|
+
/// @brief Stops the I2S driver.
|
47
52
|
void stop_driver_();
|
48
53
|
|
49
54
|
/// @brief Attempts to correct a microphone DC offset; e.g., a microphones silent level is offset from 0. Applies a
|
@@ -76,6 +81,7 @@ class I2SAudioMicrophone : public I2SAudioIn, public microphone::Microphone, pub
|
|
76
81
|
bool pdm_{false};
|
77
82
|
|
78
83
|
bool correct_dc_offset_;
|
84
|
+
bool locked_driver_{false};
|
79
85
|
int32_t dc_offset_{0};
|
80
86
|
};
|
81
87
|
|
@@ -99,7 +99,7 @@ static const std::vector<int16_t> Q15_VOLUME_SCALING_FACTORS = {
|
|
99
99
|
19508, 20665, 21891, 23189, 24565, 26022, 27566, 29201, 30933, 32767};
|
100
100
|
|
101
101
|
void I2SAudioSpeaker::setup() {
|
102
|
-
ESP_LOGCONFIG(TAG, "
|
102
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
103
103
|
|
104
104
|
this->event_group_ = xEventGroupCreate();
|
105
105
|
|
@@ -110,29 +110,48 @@ void I2SAudioSpeaker::setup() {
|
|
110
110
|
}
|
111
111
|
}
|
112
112
|
|
113
|
+
void I2SAudioSpeaker::dump_config() {
|
114
|
+
ESP_LOGCONFIG(TAG,
|
115
|
+
"Speaker:\n"
|
116
|
+
" Pin: %d\n"
|
117
|
+
" Buffer duration: %" PRIu32,
|
118
|
+
static_cast<int8_t>(this->dout_pin_), this->buffer_duration_ms_);
|
119
|
+
if (this->timeout_.has_value()) {
|
120
|
+
ESP_LOGCONFIG(TAG, " Timeout: %" PRIu32 " ms", this->timeout_.value());
|
121
|
+
}
|
122
|
+
#ifdef USE_I2S_LEGACY
|
123
|
+
#if SOC_I2S_SUPPORTS_DAC
|
124
|
+
ESP_LOGCONFIG(TAG, " Internal DAC mode: %d", static_cast<int8_t>(this->internal_dac_mode_));
|
125
|
+
#endif
|
126
|
+
ESP_LOGCONFIG(TAG, " Communication format: %d", static_cast<int8_t>(this->i2s_comm_fmt_));
|
127
|
+
#else
|
128
|
+
ESP_LOGCONFIG(TAG, " Communication format: %s", this->i2s_comm_fmt_.c_str());
|
129
|
+
#endif
|
130
|
+
}
|
131
|
+
|
113
132
|
void I2SAudioSpeaker::loop() {
|
114
133
|
uint32_t event_group_bits = xEventGroupGetBits(this->event_group_);
|
115
134
|
|
116
135
|
if (event_group_bits & SpeakerEventGroupBits::STATE_STARTING) {
|
117
|
-
ESP_LOGD(TAG, "Starting
|
136
|
+
ESP_LOGD(TAG, "Starting");
|
118
137
|
this->state_ = speaker::STATE_STARTING;
|
119
138
|
xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::STATE_STARTING);
|
120
139
|
}
|
121
140
|
if (event_group_bits & SpeakerEventGroupBits::STATE_RUNNING) {
|
122
|
-
ESP_LOGD(TAG, "Started
|
141
|
+
ESP_LOGD(TAG, "Started");
|
123
142
|
this->state_ = speaker::STATE_RUNNING;
|
124
143
|
xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::STATE_RUNNING);
|
125
144
|
this->status_clear_warning();
|
126
145
|
this->status_clear_error();
|
127
146
|
}
|
128
147
|
if (event_group_bits & SpeakerEventGroupBits::STATE_STOPPING) {
|
129
|
-
ESP_LOGD(TAG, "Stopping
|
148
|
+
ESP_LOGD(TAG, "Stopping");
|
130
149
|
this->state_ = speaker::STATE_STOPPING;
|
131
150
|
xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::STATE_STOPPING);
|
132
151
|
}
|
133
152
|
if (event_group_bits & SpeakerEventGroupBits::STATE_STOPPED) {
|
134
153
|
if (!this->task_created_) {
|
135
|
-
ESP_LOGD(TAG, "Stopped
|
154
|
+
ESP_LOGD(TAG, "Stopped");
|
136
155
|
this->state_ = speaker::STATE_STOPPED;
|
137
156
|
xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::ALL_BITS);
|
138
157
|
this->speaker_task_handle_ = nullptr;
|
@@ -140,20 +159,19 @@ void I2SAudioSpeaker::loop() {
|
|
140
159
|
}
|
141
160
|
|
142
161
|
if (event_group_bits & SpeakerEventGroupBits::ERR_TASK_FAILED_TO_START) {
|
143
|
-
this->status_set_error("Failed to start
|
162
|
+
this->status_set_error("Failed to start task");
|
144
163
|
xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::ERR_TASK_FAILED_TO_START);
|
145
164
|
}
|
146
165
|
|
147
166
|
if (event_group_bits & SpeakerEventGroupBits::ALL_ERR_ESP_BITS) {
|
148
167
|
uint32_t error_bits = event_group_bits & SpeakerEventGroupBits::ALL_ERR_ESP_BITS;
|
149
|
-
ESP_LOGW(TAG, "
|
168
|
+
ESP_LOGW(TAG, "Writing failed: %s", esp_err_to_name(err_bit_to_esp_err(error_bits)));
|
150
169
|
this->status_set_warning();
|
151
170
|
}
|
152
171
|
|
153
172
|
if (event_group_bits & SpeakerEventGroupBits::ERR_ESP_NOT_SUPPORTED) {
|
154
|
-
this->status_set_error("Failed to adjust
|
155
|
-
ESP_LOGE(TAG,
|
156
|
-
"Incompatible audio format: sample rate = %" PRIu32 ", channels = %" PRIu8 ", bits per sample = %" PRIu8,
|
173
|
+
this->status_set_error("Failed to adjust bus to match incoming audio");
|
174
|
+
ESP_LOGE(TAG, "Incompatible audio format: sample rate = %" PRIu32 ", channels = %u, bits per sample = %u",
|
157
175
|
this->audio_stream_info_.get_sample_rate(), this->audio_stream_info_.get_channels(),
|
158
176
|
this->audio_stream_info_.get_bits_per_sample());
|
159
177
|
}
|
@@ -202,7 +220,7 @@ void I2SAudioSpeaker::set_mute_state(bool mute_state) {
|
|
202
220
|
|
203
221
|
size_t I2SAudioSpeaker::play(const uint8_t *data, size_t length, TickType_t ticks_to_wait) {
|
204
222
|
if (this->is_failed()) {
|
205
|
-
ESP_LOGE(TAG, "
|
223
|
+
ESP_LOGE(TAG, "Setup failed; cannot play audio");
|
206
224
|
return 0;
|
207
225
|
}
|
208
226
|
if (this->state_ != speaker::STATE_RUNNING && this->state_ != speaker::STATE_STARTING) {
|
@@ -24,6 +24,7 @@ class I2SAudioSpeaker : public I2SAudioOut, public speaker::Speaker, public Comp
|
|
24
24
|
float get_setup_priority() const override { return esphome::setup_priority::PROCESSOR; }
|
25
25
|
|
26
26
|
void setup() override;
|
27
|
+
void dump_config() override;
|
27
28
|
void loop() override;
|
28
29
|
|
29
30
|
void set_buffer_duration(uint32_t buffer_duration_ms) { this->buffer_duration_ms_ = buffer_duration_ms; }
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#include "iaqcore.h"
|
2
|
-
#include "esphome/core/log.h"
|
3
2
|
#include "esphome/core/hal.h"
|
4
3
|
#include "esphome/core/helpers.h"
|
4
|
+
#include "esphome/core/log.h"
|
5
5
|
|
6
6
|
namespace esphome {
|
7
7
|
namespace iaqcore {
|
@@ -26,7 +26,7 @@ struct SensorData {
|
|
26
26
|
|
27
27
|
void IAQCore::setup() {
|
28
28
|
if (this->write(nullptr, 0) != i2c::ERROR_OK) {
|
29
|
-
ESP_LOGD(TAG,
|
29
|
+
ESP_LOGD(TAG, ESP_LOG_MSG_COMM_FAIL);
|
30
30
|
this->mark_failed();
|
31
31
|
return;
|
32
32
|
}
|
@@ -89,7 +89,7 @@ void IAQCore::dump_config() {
|
|
89
89
|
LOG_I2C_DEVICE(this);
|
90
90
|
LOG_UPDATE_INTERVAL(this);
|
91
91
|
if (this->is_failed()) {
|
92
|
-
ESP_LOGE(TAG,
|
92
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
93
93
|
}
|
94
94
|
LOG_SENSOR(" ", "CO2", this->co2_);
|
95
95
|
LOG_SENSOR(" ", "TVOC", this->tvoc_);
|
@@ -89,8 +89,10 @@ void ILI9XXXDisplay::setup_pins_() {
|
|
89
89
|
|
90
90
|
void ILI9XXXDisplay::dump_config() {
|
91
91
|
LOG_DISPLAY("", "ili9xxx", this);
|
92
|
-
ESP_LOGCONFIG(TAG,
|
93
|
-
|
92
|
+
ESP_LOGCONFIG(TAG,
|
93
|
+
" Width Offset: %u\n"
|
94
|
+
" Height Offset: %u",
|
95
|
+
this->offset_x_, this->offset_y_);
|
94
96
|
switch (this->buffer_color_mode_) {
|
95
97
|
case BITS_8_INDEXED:
|
96
98
|
ESP_LOGCONFIG(TAG, " Color mode: 8bit Indexed");
|
@@ -111,11 +113,14 @@ void ILI9XXXDisplay::dump_config() {
|
|
111
113
|
LOG_PIN(" CS Pin: ", this->cs_);
|
112
114
|
LOG_PIN(" DC Pin: ", this->dc_pin_);
|
113
115
|
LOG_PIN(" Busy Pin: ", this->busy_pin_);
|
114
|
-
ESP_LOGCONFIG(TAG,
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
116
|
+
ESP_LOGCONFIG(TAG,
|
117
|
+
" Color order: %s\n"
|
118
|
+
" Swap_xy: %s\n"
|
119
|
+
" Mirror_x: %s\n"
|
120
|
+
" Mirror_y: %s\n"
|
121
|
+
" Invert colors: %s",
|
122
|
+
this->color_order_ == display::COLOR_ORDER_BGR ? "BGR" : "RGB", YESNO(this->swap_xy_),
|
123
|
+
YESNO(this->mirror_x_), YESNO(this->mirror_y_), YESNO(this->pre_invertcolors_));
|
119
124
|
|
120
125
|
if (this->is_failed()) {
|
121
126
|
ESP_LOGCONFIG(TAG, " => Failed to init Memory: YES!");
|
@@ -89,7 +89,7 @@ class ILI9XXXDisplay : public display::DisplayBuffer,
|
|
89
89
|
|
90
90
|
void dump_config() override;
|
91
91
|
void setup() override;
|
92
|
-
void
|
92
|
+
void on_powerdown() override { this->command(ILI9XXX_SLPIN); }
|
93
93
|
|
94
94
|
display::DisplayType get_display_type() override { return display::DisplayType::DISPLAY_TYPE_COLOR; }
|
95
95
|
void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, display::ColorOrder order,
|
@@ -34,7 +34,7 @@ static const uint8_t INA219_REGISTER_CURRENT = 0x04;
|
|
34
34
|
static const uint8_t INA219_REGISTER_CALIBRATION = 0x05;
|
35
35
|
|
36
36
|
void INA219Component::setup() {
|
37
|
-
ESP_LOGCONFIG(TAG, "
|
37
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
38
38
|
// Config Register
|
39
39
|
// 0bx000000000000000 << 15 RESET Bit (1 -> trigger reset)
|
40
40
|
if (!this->write_byte_16(INA219_REGISTER_CONFIG, 0x8000)) {
|
@@ -134,7 +134,7 @@ void INA219Component::dump_config() {
|
|
134
134
|
LOG_I2C_DEVICE(this);
|
135
135
|
|
136
136
|
if (this->is_failed()) {
|
137
|
-
ESP_LOGE(TAG,
|
137
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
138
138
|
return;
|
139
139
|
}
|
140
140
|
LOG_UPDATE_INTERVAL(this);
|
@@ -37,7 +37,7 @@ static const uint16_t INA226_ADC_TIMES[] = {140, 204, 332, 588, 1100, 2116, 4156
|
|
37
37
|
static const uint16_t INA226_ADC_AVG_SAMPLES[] = {1, 4, 16, 64, 128, 256, 512, 1024};
|
38
38
|
|
39
39
|
void INA226Component::setup() {
|
40
|
-
ESP_LOGCONFIG(TAG, "
|
40
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
41
41
|
|
42
42
|
ConfigurationRegister config;
|
43
43
|
|
@@ -88,14 +88,17 @@ void INA226Component::dump_config() {
|
|
88
88
|
LOG_I2C_DEVICE(this);
|
89
89
|
|
90
90
|
if (this->is_failed()) {
|
91
|
-
ESP_LOGE(TAG,
|
91
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
92
92
|
return;
|
93
93
|
}
|
94
94
|
LOG_UPDATE_INTERVAL(this);
|
95
95
|
|
96
|
-
ESP_LOGCONFIG(TAG,
|
97
|
-
|
98
|
-
|
96
|
+
ESP_LOGCONFIG(TAG,
|
97
|
+
" ADC Conversion Time Bus Voltage: %d\n"
|
98
|
+
" ADC Conversion Time Shunt Voltage: %d\n"
|
99
|
+
" ADC Averaging Samples: %d",
|
100
|
+
INA226_ADC_TIMES[this->adc_time_voltage_ & 0b111], INA226_ADC_TIMES[this->adc_time_current_ & 0b111],
|
101
|
+
INA226_ADC_AVG_SAMPLES[this->adc_avg_samples_ & 0b111]);
|
99
102
|
|
100
103
|
LOG_SENSOR(" ", "Bus Voltage", this->bus_voltage_sensor_);
|
101
104
|
LOG_SENSOR(" ", "Shunt Voltage", this->shunt_voltage_sensor_);
|
@@ -35,7 +35,7 @@ static const uint8_t INA260_REGISTER_MANUFACTURE_ID = 0xFE;
|
|
35
35
|
static const uint8_t INA260_REGISTER_DEVICE_ID = 0xFF;
|
36
36
|
|
37
37
|
void INA260Component::setup() {
|
38
|
-
ESP_LOGCONFIG(TAG, "
|
38
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
39
39
|
|
40
40
|
// Reset device on setup
|
41
41
|
if (!this->write_byte_16(INA260_REGISTER_CONFIG, 0x8000)) {
|