esphome 2025.3.2__py3-none-any.whl → 2025.4.0b1__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 +29 -7
- esphome/components/a01nyub/sensor.py +2 -2
- esphome/components/a02yyuw/sensor.py +2 -2
- esphome/components/a4988/stepper.py +1 -2
- esphome/components/absolute_humidity/sensor.py +3 -3
- esphome/components/ac_dimmer/output.py +3 -3
- esphome/components/adalight/__init__.py +2 -2
- esphome/components/adc128s102/__init__.py +1 -1
- esphome/components/adc128s102/sensor/__init__.py +3 -3
- esphome/components/addressable_light/display.py +5 -5
- esphome/components/ade7880/sensor.py +2 -2
- esphome/components/ade7953_base/__init__.py +10 -10
- esphome/components/ade7953_i2c/sensor.py +1 -2
- esphome/components/ade7953_spi/sensor.py +1 -2
- esphome/components/ads1115/__init__.py +1 -1
- esphome/components/ads1115/sensor/__init__.py +4 -3
- esphome/components/ads1118/__init__.py +1 -1
- esphome/components/ads1118/sensor/__init__.py +5 -4
- esphome/components/ags10/sensor.py +9 -9
- esphome/components/aht10/sensor.py +2 -2
- esphome/components/airthings_ble/__init__.py +1 -1
- esphome/components/airthings_wave_base/__init__.py +2 -3
- esphome/components/airthings_wave_mini/sensor.py +2 -5
- esphome/components/airthings_wave_plus/sensor.py +8 -9
- esphome/components/alpha3/sensor.py +5 -5
- esphome/components/am2315c/sensor.py +1 -1
- esphome/components/am2320/sensor.py +1 -1
- esphome/components/am43/cover/__init__.py +1 -1
- esphome/components/am43/sensor/__init__.py +3 -3
- esphome/components/analog_threshold/binary_sensor.py +2 -5
- esphome/components/anova/climate.py +1 -1
- esphome/components/apds9306/sensor.py +1 -1
- esphome/components/apds9960/__init__.py +1 -1
- esphome/components/apds9960/binary_sensor.py +2 -1
- esphome/components/apds9960/sensor.py +3 -2
- esphome/components/api/api_frame_helper.cpp +21 -1
- esphome/components/as3935/__init__.py +3 -3
- esphome/components/as3935/binary_sensor.py +2 -1
- esphome/components/as3935/sensor.py +4 -3
- esphome/components/as3935_i2c/__init__.py +1 -1
- esphome/components/as3935_spi/__init__.py +1 -1
- esphome/components/as5600/__init__.py +2 -2
- esphome/components/as5600/sensor/__init__.py +10 -9
- esphome/components/as7341/sensor.py +1 -2
- esphome/components/at581x/__init__.py +4 -8
- esphome/components/at581x/switch/__init__.py +2 -4
- esphome/components/atc_mithermometer/sensor.py +3 -3
- esphome/components/b_parasite/sensor.py +2 -2
- esphome/components/ballu/climate.py +1 -1
- esphome/components/bang_bang/climate.py +2 -2
- esphome/components/bedjet/__init__.py +2 -6
- esphome/components/bedjet/climate/__init__.py +3 -6
- esphome/components/bedjet/fan/__init__.py +4 -9
- esphome/components/bedjet/sensor/__init__.py +3 -6
- esphome/components/beken_spi_led_strip/light.py +2 -2
- esphome/components/bh1750/sensor.py +2 -6
- esphome/components/binary/fan/__init__.py +2 -1
- esphome/components/binary/light/__init__.py +3 -2
- esphome/components/binary_sensor_map/sensor.py +5 -6
- esphome/components/bl0939/sensor.py +1 -1
- esphome/components/bl0940/sensor.py +3 -3
- esphome/components/ble_client/__init__.py +3 -2
- esphome/components/ble_client/sensor/__init__.py +1 -1
- esphome/components/ble_client/text_sensor/__init__.py +1 -1
- esphome/components/bluetooth_proxy/__init__.py +35 -23
- esphome/components/bme280_base/__init__.py +1 -1
- esphome/components/bme280_i2c/sensor.py +3 -2
- esphome/components/bme280_spi/sensor.py +3 -2
- esphome/components/bme680/sensor.py +4 -4
- esphome/components/bme680_bsec/__init__.py +1 -1
- esphome/components/bme680_bsec/sensor.py +3 -6
- esphome/components/bme680_bsec/text_sensor.py +3 -2
- esphome/components/bmi160/sensor.py +6 -6
- esphome/components/bmp085/sensor.py +1 -1
- esphome/components/bmp280_base/__init__.py +1 -1
- esphome/components/bmp280_i2c/sensor.py +3 -2
- esphome/components/bmp280_spi/sensor.py +3 -2
- esphome/components/bmp3xx_base/__init__.py +1 -1
- esphome/components/bmp3xx_i2c/sensor.py +2 -1
- esphome/components/bmp3xx_spi/sensor.py +2 -1
- esphome/components/bmp581/sensor.py +2 -1
- esphome/components/bp1658cj/__init__.py +2 -6
- esphome/components/bp1658cj/output.py +2 -1
- esphome/components/bp5758d/__init__.py +2 -6
- esphome/components/bp5758d/output.py +3 -2
- esphome/components/canbus/__init__.py +13 -2
- esphome/components/canbus/canbus.cpp +7 -1
- esphome/components/cap1188/__init__.py +2 -2
- esphome/components/cap1188/binary_sensor.py +3 -2
- esphome/components/captive_portal/__init__.py +3 -3
- esphome/components/ccs811/sensor.py +10 -10
- esphome/components/cd74hc4067/__init__.py +2 -5
- esphome/components/cd74hc4067/sensor.py +6 -5
- esphome/components/climate_ir/__init__.py +2 -2
- esphome/components/climate_ir_lg/climate.py +1 -1
- esphome/components/color/__init__.py +1 -2
- esphome/components/color_temperature/light.py +2 -2
- esphome/components/combination/sensor.py +1 -1
- esphome/components/coolix/climate.py +1 -1
- esphome/components/copy/binary_sensor/__init__.py +1 -1
- esphome/components/copy/button/__init__.py +1 -1
- esphome/components/copy/cover/__init__.py +1 -1
- esphome/components/copy/fan/__init__.py +2 -7
- esphome/components/copy/lock/__init__.py +2 -7
- esphome/components/copy/number/__init__.py +1 -1
- esphome/components/copy/select/__init__.py +2 -7
- esphome/components/copy/sensor/__init__.py +2 -2
- esphome/components/copy/switch/__init__.py +1 -1
- esphome/components/copy/text/__init__.py +2 -7
- esphome/components/copy/text_sensor/__init__.py +2 -6
- esphome/components/cs5460a/sensor.py +7 -7
- esphome/components/cse7761/sensor.py +2 -2
- esphome/components/cse7766/sensor.py +1 -1
- esphome/components/cst226/touchscreen/__init__.py +3 -4
- esphome/components/ct_clamp/sensor.py +1 -1
- esphome/components/current_based/cover.py +3 -4
- esphome/components/cwww/light.py +3 -3
- esphome/components/dac7678/__init__.py +1 -1
- esphome/components/dac7678/output.py +2 -1
- esphome/components/daikin/climate.py +1 -1
- esphome/components/daikin_arc/climate.py +1 -1
- esphome/components/daikin_brc/climate.py +1 -1
- esphome/components/dallas_temp/sensor.py +1 -1
- esphome/components/daly_bms/__init__.py +2 -2
- esphome/components/daly_bms/binary_sensor.py +3 -2
- esphome/components/daly_bms/sensor.py +14 -13
- esphome/components/daly_bms/text_sensor.py +3 -2
- esphome/components/dashboard_import/__init__.py +5 -5
- esphome/components/debug/sensor.py +7 -6
- esphome/components/debug/text_sensor.py +1 -1
- esphome/components/deep_sleep/__init__.py +12 -13
- esphome/components/delonghi/climate.py +1 -1
- esphome/components/demo/__init__.py +1 -1
- esphome/components/dfplayer/__init__.py +3 -3
- esphome/components/dfrobot_sen0395/__init__.py +3 -3
- esphome/components/dfrobot_sen0395/binary_sensor.py +2 -1
- esphome/components/dfrobot_sen0395/switch/__init__.py +2 -3
- esphome/components/dht/sensor.py +4 -5
- esphome/components/dht12/sensor.py +3 -3
- esphome/components/display/display.cpp +2 -2
- esphome/components/dps310/sensor.py +3 -3
- esphome/components/ds1307/time.py +2 -3
- esphome/components/dsmr/__init__.py +3 -7
- esphome/components/dsmr/sensor.py +5 -4
- esphome/components/dsmr/text_sensor.py +3 -2
- esphome/components/duty_cycle/sensor.py +3 -8
- esphome/components/duty_time/sensor.py +7 -7
- esphome/components/e131/__init__.py +3 -3
- esphome/components/ee895/sensor.py +5 -5
- esphome/components/ektf2232/touchscreen/__init__.py +2 -3
- esphome/components/emc2101/__init__.py +1 -1
- esphome/components/emc2101/output/__init__.py +3 -2
- esphome/components/emc2101/sensor/__init__.py +4 -3
- esphome/components/emmeti/climate.py +1 -1
- esphome/components/endstop/cover.py +3 -3
- esphome/components/ens160_base/__init__.py +1 -1
- esphome/components/ens160_i2c/sensor.py +2 -1
- esphome/components/ens160_spi/sensor.py +2 -1
- esphome/components/ens210/sensor.py +1 -1
- esphome/components/esp32/__init__.py +10 -0
- esphome/components/esp32_ble_tracker/__init__.py +135 -51
- esphome/components/esp32_camera/__init__.py +7 -8
- esphome/components/esp32_camera_web_server/__init__.py +2 -2
- esphome/components/esp32_can/canbus.py +21 -0
- esphome/components/esp32_can/esp32_can.cpp +1 -1
- esphome/components/esp32_can/esp32_can.h +4 -0
- esphome/components/esp32_dac/output.py +2 -2
- esphome/components/esp32_hall/sensor.py +2 -6
- esphome/components/esp32_touch/__init__.py +7 -7
- esphome/components/esp32_touch/binary_sensor.py +4 -7
- esphome/components/esp8266_pwm/output.py +3 -8
- esphome/components/ethernet/__init__.py +1 -0
- esphome/components/ethernet/ethernet_component.cpp +1 -1
- esphome/components/ethernet_info/ethernet_info_text_sensor.h +1 -0
- esphome/components/exposure_notifications/__init__.py +2 -2
- esphome/components/external_components/__init__.py +1 -1
- esphome/components/ezo/sensor.py +2 -2
- esphome/components/ezo_pmp/__init__.py +4 -4
- esphome/components/ezo_pmp/binary_sensor.py +4 -4
- esphome/components/ezo_pmp/sensor.py +4 -5
- esphome/components/ezo_pmp/text_sensor.py +2 -6
- esphome/components/factory_reset/button/__init__.py +2 -1
- esphome/components/factory_reset/switch/__init__.py +3 -2
- esphome/components/fastled_base/__init__.py +3 -3
- esphome/components/fastled_clockless/light.py +2 -2
- esphome/components/fastled_spi/light.py +2 -2
- esphome/components/feedback/cover.py +3 -3
- esphome/components/fingerprint_grow/__init__.py +5 -6
- esphome/components/fingerprint_grow/binary_sensor.py +2 -1
- esphome/components/fingerprint_grow/sensor.py +2 -1
- esphome/components/fs3000/sensor.py +2 -6
- esphome/components/ft5x06/touchscreen/__init__.py +2 -2
- esphome/components/ft63x6/touchscreen.py +2 -3
- esphome/components/fujitsu_general/climate.py +1 -1
- esphome/components/gcja5/sensor.py +4 -4
- esphome/components/gdk101/__init__.py +1 -1
- esphome/components/gdk101/binary_sensor.py +2 -1
- esphome/components/gdk101/sensor.py +5 -4
- esphome/components/globals/__init__.py +1 -2
- esphome/components/gp2y1010au0f/sensor.py +3 -3
- esphome/components/gp8403/__init__.py +1 -2
- esphome/components/gp8403/output/__init__.py +3 -4
- esphome/components/gpio/binary_sensor/__init__.py +3 -2
- esphome/components/gpio/one_wire/__init__.py +3 -2
- esphome/components/gpio/output/__init__.py +3 -2
- esphome/components/gpio/switch/__init__.py +3 -2
- esphome/components/gps/__init__.py +4 -5
- esphome/components/gps/time/__init__.py +3 -2
- esphome/components/graph/__init__.py +12 -12
- esphome/components/grove_tb6612fng/__init__.py +5 -6
- esphome/components/growatt_solar/sensor.py +1 -1
- esphome/components/gt911/binary_sensor/__init__.py +2 -2
- esphome/components/haier/binary_sensor/__init__.py +4 -10
- esphome/components/haier/button/__init__.py +3 -6
- esphome/components/haier/sensor/__init__.py +4 -6
- esphome/components/haier/switch/__init__.py +4 -7
- esphome/components/haier/text_sensor/__init__.py +4 -9
- esphome/components/havells_solar/sensor.py +1 -1
- esphome/components/hbridge/fan/__init__.py +6 -6
- esphome/components/hbridge/light/__init__.py +2 -1
- esphome/components/hdc1080/sensor.py +1 -1
- esphome/components/he60r/cover.py +2 -6
- esphome/components/heatpumpir/climate.py +1 -1
- esphome/components/hitachi_ac344/climate.py +1 -1
- esphome/components/hitachi_ac424/climate.py +1 -1
- esphome/components/hlw8012/sensor.py +6 -6
- esphome/components/hm3301/sensor.py +3 -3
- esphome/components/hmc5883l/sensor.py +4 -4
- esphome/components/homeassistant/time/__init__.py +2 -1
- esphome/components/honeywell_hih_i2c/sensor.py +3 -3
- esphome/components/honeywellabp/sensor.py +1 -2
- esphome/components/honeywellabp2_i2c/sensor.py +1 -2
- esphome/components/host/time/__init__.py +2 -2
- esphome/components/hrxl_maxsonar_wr/sensor.py +1 -1
- esphome/components/hte501/sensor.py +3 -3
- esphome/components/http_request/ota/__init__.py +5 -9
- esphome/components/http_request/update/__init__.py +3 -7
- esphome/components/htu21d/sensor.py +6 -6
- esphome/components/htu31d/sensor.py +1 -1
- esphome/components/hx711/sensor.py +3 -8
- esphome/components/hydreon_rgxx/binary_sensor.py +3 -7
- esphome/components/hydreon_rgxx/sensor.py +4 -4
- esphome/components/hyt271/sensor.py +1 -1
- esphome/components/i2c_device/__init__.py +1 -1
- esphome/components/i2s_audio/media_player/__init__.py +6 -8
- esphome/components/iaqcore/sensor.py +2 -2
- esphome/components/ina219/sensor.py +2 -2
- esphome/components/ina226/sensor.py +4 -4
- esphome/components/ina260/sensor.py +4 -4
- esphome/components/ina2xx_base/__init__.py +2 -2
- esphome/components/ina2xx_i2c/sensor.py +1 -1
- esphome/components/ina2xx_spi/sensor.py +1 -1
- esphome/components/ina3221/sensor.py +3 -3
- esphome/components/inkbird_ibsth1_mini/sensor.py +2 -2
- esphome/components/inkplate6/display.py +2 -2
- esphome/components/integration/sensor.py +4 -4
- esphome/components/internal_temperature/sensor.py +5 -7
- esphome/components/interval/__init__.py +1 -1
- esphome/components/jsn_sr04t/sensor.py +3 -3
- esphome/components/kamstrup_kmp/sensor.py +1 -1
- esphome/components/key_collector/__init__.py +2 -2
- esphome/components/kmeteriso/sensor.py +2 -2
- esphome/components/kuntze/sensor.py +5 -5
- esphome/components/lcd_base/__init__.py +2 -2
- esphome/components/lcd_gpio/display.py +4 -4
- esphome/components/lcd_menu/__init__.py +3 -7
- esphome/components/lcd_pcf8574/display.py +1 -1
- esphome/components/ld2410/__init__.py +4 -4
- esphome/components/ld2410/binary_sensor.py +5 -4
- esphome/components/ld2410/button/__init__.py +3 -2
- esphome/components/ld2410/number/__init__.py +5 -4
- esphome/components/ld2410/select/__init__.py +4 -3
- esphome/components/ld2410/sensor.py +6 -5
- esphome/components/ld2410/switch/__init__.py +2 -1
- esphome/components/ld2410/text_sensor.py +3 -2
- esphome/components/ld2420/__init__.py +1 -1
- esphome/components/ld2420/binary_sensor/__init__.py +4 -3
- esphome/components/ld2420/button/__init__.py +3 -2
- esphome/components/ld2420/number/__init__.py +3 -2
- esphome/components/ld2420/select/__init__.py +1 -0
- esphome/components/ld2420/sensor/__init__.py +3 -2
- esphome/components/ld2420/text_sensor/__init__.py +2 -6
- esphome/components/ld2450/__init__.py +2 -5
- esphome/components/ledc/output.py +3 -3
- esphome/components/libretiny/text_sensor.py +1 -1
- esphome/components/libretiny_pwm/output.py +3 -7
- esphome/components/lightwaverf/__init__.py +6 -8
- esphome/components/lilygo_t5_47/touchscreen/__init__.py +2 -3
- esphome/components/ltr390/sensor.py +1 -1
- esphome/components/ltr501/sensor.py +2 -2
- esphome/components/ltr_als_ps/sensor.py +2 -2
- esphome/components/lvgl/__init__.py +9 -12
- esphome/components/lvgl/automation.py +1 -1
- esphome/components/lvgl/defines.py +5 -2
- esphome/components/lvgl/lv_validation.py +17 -9
- esphome/components/lvgl/lvcode.py +9 -8
- esphome/components/lvgl/lvgl_esphome.h +19 -0
- esphome/components/lvgl/schemas.py +67 -18
- esphome/components/lvgl/styles.py +42 -11
- esphome/components/lvgl/switch/__init__.py +13 -8
- esphome/components/lvgl/switch/lvgl_switch.h +5 -16
- esphome/components/lvgl/trigger.py +10 -1
- esphome/components/lvgl/widgets/__init__.py +1 -2
- esphome/components/lvgl/widgets/canvas.py +403 -0
- esphome/components/lvgl/widgets/line.py +22 -32
- esphome/components/m5stack_8angle/__init__.py +1 -2
- esphome/components/m5stack_8angle/binary_sensor/__init__.py +2 -3
- esphome/components/m5stack_8angle/light/__init__.py +2 -4
- esphome/components/m5stack_8angle/sensor/__init__.py +2 -4
- esphome/components/matrix_keypad/binary_sensor/__init__.py +4 -3
- esphome/components/max31855/sensor.py +1 -1
- esphome/components/max31865/sensor.py +1 -1
- esphome/components/max44009/sensor.py +1 -1
- esphome/components/max6675/sensor.py +1 -1
- esphome/components/max6956/__init__.py +5 -5
- esphome/components/max6956/output/__init__.py +4 -3
- esphome/components/max7219/display.py +1 -1
- esphome/components/max7219digit/display.py +1 -1
- esphome/components/max9611/sensor.py +10 -10
- esphome/components/mcp23008/__init__.py +1 -1
- esphome/components/mcp23016/__init__.py +4 -4
- esphome/components/mcp23017/__init__.py +1 -1
- esphome/components/mcp23s08/__init__.py +1 -1
- esphome/components/mcp23s17/__init__.py +1 -1
- esphome/components/mcp23xxx_base/__init__.py +4 -4
- esphome/components/mcp2515/canbus.py +2 -2
- esphome/components/mcp3008/__init__.py +1 -1
- esphome/components/mcp3008/sensor/__init__.py +4 -4
- esphome/components/mcp3204/__init__.py +1 -1
- esphome/components/mcp3204/sensor/__init__.py +3 -2
- esphome/components/mcp4461/__init__.py +42 -0
- esphome/components/mcp4461/mcp4461.cpp +618 -0
- esphome/components/mcp4461/mcp4461.h +171 -0
- esphome/components/mcp4461/output/__init__.py +60 -0
- esphome/components/mcp4461/output/mcp4461_output.cpp +73 -0
- esphome/components/mcp4461/output/mcp4461_output.h +49 -0
- esphome/components/mcp4725/output.py +2 -2
- esphome/components/mcp4728/__init__.py +1 -1
- esphome/components/mcp4728/output/__init__.py +4 -3
- esphome/components/mcp47a1/output.py +2 -2
- esphome/components/mcp9808/sensor.py +1 -1
- esphome/components/mdns/__init__.py +1 -1
- esphome/components/mhz19/sensor.py +4 -4
- esphome/components/micronova/__init__.py +3 -5
- esphome/components/micronova/button/__init__.py +5 -5
- esphome/components/micronova/number/__init__.py +6 -10
- esphome/components/micronova/sensor/__init__.py +6 -6
- esphome/components/micronova/switch/__init__.py +6 -8
- esphome/components/micronova/text_sensor/__init__.py +5 -5
- esphome/components/microphone/__init__.py +2 -4
- esphome/components/midea/climate.py +6 -10
- esphome/components/midea_ir/climate.py +1 -1
- esphome/components/mitsubishi/climate.py +1 -1
- esphome/components/mlx90614/sensor.py +1 -1
- esphome/components/mmc5603/sensor.py +4 -4
- esphome/components/mmc5983/sensor.py +1 -1
- esphome/components/modbus/__init__.py +5 -9
- esphome/components/modbus_controller/__init__.py +1 -1
- esphome/components/monochromatic/light.py +2 -2
- esphome/components/mopeka_ble/__init__.py +1 -1
- esphome/components/mopeka_pro_check/sensor.py +12 -12
- esphome/components/mopeka_std_check/sensor.py +8 -8
- esphome/components/mpl3115a2/sensor.py +1 -1
- esphome/components/mpr121/__init__.py +3 -3
- esphome/components/mpr121/binary_sensor/__init__.py +5 -4
- esphome/components/mpu6050/sensor.py +4 -4
- esphome/components/mpu6886/sensor.py +4 -4
- esphome/components/mqtt_subscribe/sensor/__init__.py +3 -5
- esphome/components/mqtt_subscribe/text_sensor/__init__.py +1 -1
- esphome/components/ms5611/sensor.py +2 -2
- esphome/components/ms8607/sensor.py +1 -1
- esphome/components/my9231/__init__.py +1 -1
- esphome/components/my9231/output.py +2 -1
- esphome/components/nau7802/nau7802.cpp +0 -4
- esphome/components/nau7802/nau7802.h +0 -2
- esphome/components/neopixelbus/_methods.py +11 -9
- esphome/components/neopixelbus/light.py +11 -18
- esphome/components/nextion/binary_sensor/__init__.py +6 -14
- esphome/components/nextion/sensor/__init__.py +7 -10
- esphome/components/nextion/switch/__init__.py +3 -5
- esphome/components/nextion/text_sensor/__init__.py +3 -7
- esphome/components/noblex/climate.py +1 -1
- esphome/components/ntc/sensor.py +1 -1
- esphome/components/opentherm/__init__.py +6 -6
- esphome/components/opentherm/input.py +2 -1
- esphome/components/opentherm/number/__init__.py +5 -4
- esphome/components/opentherm/output/__init__.py +3 -2
- esphome/components/opentherm/schema.py +7 -7
- esphome/components/opentherm/switch/__init__.py +3 -2
- esphome/components/opentherm/validate.py +1 -1
- esphome/components/output/__init__.py +2 -3
- esphome/components/output/button/__init__.py +3 -2
- esphome/components/output/lock/__init__.py +2 -1
- esphome/components/output/switch/__init__.py +2 -1
- esphome/components/partition/light.py +4 -4
- esphome/components/pca6416a/__init__.py +4 -4
- esphome/components/pca9554/__init__.py +4 -4
- esphome/components/pca9685/__init__.py +2 -2
- esphome/components/pca9685/output.py +2 -1
- esphome/components/pcf85063/time.py +2 -3
- esphome/components/pcf8563/time.py +2 -2
- esphome/components/pcf8574/__init__.py +4 -4
- esphome/components/pid/climate.py +2 -2
- esphome/components/pid/sensor/__init__.py +4 -8
- esphome/components/pipsolar/__init__.py +1 -1
- esphome/components/pipsolar/binary_sensor/__init__.py +2 -2
- esphome/components/pipsolar/output/__init__.py +4 -3
- esphome/components/pipsolar/sensor/__init__.py +5 -4
- esphome/components/pipsolar/switch/__init__.py +2 -1
- esphome/components/pipsolar/text_sensor/__init__.py +2 -1
- esphome/components/pm1006/sensor.py +2 -2
- esphome/components/pmsa003i/sensor.py +4 -4
- esphome/components/pmsx003/sensor.py +10 -11
- esphome/components/pmwcs3/sensor.py +5 -5
- esphome/components/pn532/__init__.py +3 -3
- esphome/components/pn532_i2c/__init__.py +1 -1
- esphome/components/pn532_spi/__init__.py +1 -1
- esphome/components/pn7150/__init__.py +2 -2
- esphome/components/pn7150_i2c/__init__.py +1 -1
- esphome/components/pn7160/__init__.py +2 -2
- esphome/components/pn7160_i2c/__init__.py +1 -1
- esphome/components/pn7160_spi/__init__.py +1 -1
- esphome/components/power_supply/__init__.py +1 -1
- esphome/components/prometheus/__init__.py +3 -8
- esphome/components/psram/__init__.py +75 -11
- esphome/components/psram/psram.cpp +18 -7
- esphome/components/pulse_counter/sensor.py +4 -4
- esphome/components/pulse_meter/sensor.py +3 -3
- esphome/components/pulse_width/sensor.py +3 -8
- esphome/components/pvvx_mithermometer/display/__init__.py +1 -1
- esphome/components/pvvx_mithermometer/sensor.py +3 -3
- esphome/components/pylontech/__init__.py +1 -0
- esphome/components/pylontech/sensor/__init__.py +8 -13
- esphome/components/pylontech/text_sensor/__init__.py +2 -7
- esphome/components/pzem004t/sensor.py +3 -3
- esphome/components/pzemac/sensor.py +9 -9
- esphome/components/pzemdc/sensor.py +6 -6
- esphome/components/qmc5883l/sensor.py +5 -5
- esphome/components/qmp6988/sensor.py +3 -3
- esphome/components/qr_code/__init__.py +1 -1
- esphome/components/qspi_dbi/display.py +1 -1
- esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
- esphome/components/qspi_dbi/qspi_dbi.h +1 -1
- esphome/components/qwiic_pir/binary_sensor.py +2 -5
- esphome/components/radon_eye_ble/__init__.py +1 -1
- esphome/components/radon_eye_rd200/sensor.py +3 -4
- esphome/components/rc522/__init__.py +3 -3
- esphome/components/rc522_i2c/__init__.py +1 -1
- esphome/components/rc522_spi/__init__.py +1 -1
- esphome/components/rdm6300/__init__.py +2 -2
- esphome/components/rdm6300/binary_sensor.py +2 -1
- esphome/components/resistance/sensor.py +2 -2
- esphome/components/restart/button/__init__.py +1 -1
- esphome/components/restart/switch/__init__.py +2 -5
- esphome/components/rf_bridge/__init__.py +3 -3
- esphome/components/rgb/light.py +2 -2
- esphome/components/rgbct/light.py +3 -3
- esphome/components/rgbw/light.py +2 -2
- esphome/components/rgbww/light.py +4 -4
- esphome/components/rotary_encoder/sensor.py +8 -8
- esphome/components/rp2040_pio/__init__.py +0 -1
- esphome/components/rp2040_pio_led_strip/light.py +2 -4
- esphome/components/rp2040_pwm/output.py +3 -7
- esphome/components/rtttl/__init__.py +6 -6
- esphome/components/ruuvi_ble/__init__.py +1 -1
- esphome/components/ruuvitag/sensor.py +15 -15
- esphome/components/safe_mode/__init__.py +2 -3
- esphome/components/safe_mode/button/__init__.py +3 -2
- esphome/components/safe_mode/switch/__init__.py +4 -7
- esphome/components/scd30/sensor.py +5 -6
- esphome/components/scd4x/sensor.py +6 -8
- esphome/components/script/__init__.py +2 -2
- esphome/components/sdl/display.py +3 -3
- esphome/components/sdl/touchscreen/__init__.py +2 -2
- esphome/components/sdm_meter/sensor.py +3 -3
- esphome/components/sdp3x/sensor.py +1 -2
- esphome/components/sds011/sensor.py +4 -4
- esphome/components/seeed_mr24hpc1/__init__.py +1 -1
- esphome/components/seeed_mr24hpc1/binary_sensor.py +2 -5
- esphome/components/seeed_mr24hpc1/button/__init__.py +1 -0
- esphome/components/seeed_mr24hpc1/number/__init__.py +2 -4
- esphome/components/seeed_mr24hpc1/select/__init__.py +2 -3
- esphome/components/seeed_mr24hpc1/sensor.py +1 -0
- esphome/components/seeed_mr24hpc1/switch/__init__.py +2 -4
- esphome/components/seeed_mr24hpc1/text_sensor.py +1 -0
- esphome/components/seeed_mr60bha2/binary_sensor.py +2 -4
- esphome/components/seeed_mr60bha2/sensor.py +1 -1
- esphome/components/seeed_mr60fda2/button/__init__.py +1 -1
- esphome/components/seeed_mr60fda2/select/__init__.py +0 -1
- esphome/components/selec_meter/sensor.py +1 -1
- esphome/components/sen0321/sensor.py +2 -2
- esphome/components/sen21231/sensor.py +1 -1
- esphome/components/senseair/sensor.py +3 -3
- esphome/components/sensirion_common/__init__.py +0 -2
- esphome/components/servo/__init__.py +3 -3
- esphome/components/sfa30/sensor.py +4 -5
- esphome/components/sgp4x/sensor.py +2 -2
- esphome/components/shelly_dimmer/light.py +16 -16
- esphome/components/sht3xd/sensor.py +1 -1
- esphome/components/sht4x/sensor.py +6 -6
- esphome/components/shtcx/sensor.py +1 -1
- esphome/components/shutdown/button/__init__.py +2 -6
- esphome/components/shutdown/switch/__init__.py +2 -5
- esphome/components/sigma_delta_output/output.py +2 -7
- esphome/components/sim800l/__init__.py +3 -7
- esphome/components/sim800l/binary_sensor.py +3 -5
- esphome/components/sim800l/sensor.py +2 -1
- esphome/components/slow_pwm/output.py +4 -5
- esphome/components/sm10bit_base/__init__.py +2 -6
- esphome/components/sm16716/__init__.py +1 -1
- esphome/components/sm16716/output.py +2 -1
- esphome/components/sm2135/__init__.py +2 -6
- esphome/components/sm2135/output.py +2 -1
- esphome/components/sm2235/__init__.py +1 -1
- esphome/components/sm2235/output.py +2 -1
- esphome/components/sm2335/__init__.py +1 -1
- esphome/components/sm2335/output.py +2 -1
- esphome/components/sm300d2/sensor.py +13 -13
- esphome/components/sml/__init__.py +1 -1
- esphome/components/sml/sensor/__init__.py +1 -1
- esphome/components/sml/text_sensor/__init__.py +1 -1
- esphome/components/smt100/sensor.py +5 -6
- esphome/components/sn74hc165/__init__.py +5 -5
- esphome/components/sn74hc595/__init__.py +5 -5
- esphome/components/socket/__init__.py +1 -1
- esphome/components/sonoff_d1/light.py +2 -6
- esphome/components/speaker/media_player/speaker_media_player.cpp +47 -12
- esphome/components/speed/fan/__init__.py +2 -2
- esphome/components/spi/__init__.py +45 -36
- esphome/components/spi/spi.h +1 -0
- esphome/components/spi/spi_esp_idf.cpp +13 -5
- esphome/components/sprinkler/__init__.py +4 -5
- esphome/components/sps30/sensor.py +8 -8
- esphome/components/ssd1306_i2c/display.py +2 -2
- esphome/components/ssd1322_base/__init__.py +2 -2
- esphome/components/ssd1325_base/__init__.py +2 -2
- esphome/components/ssd1327_base/__init__.py +2 -2
- esphome/components/ssd1327_i2c/display.py +1 -1
- esphome/components/ssd1331_base/__init__.py +2 -2
- esphome/components/ssd1351_base/__init__.py +2 -2
- esphome/components/st7567_base/__init__.py +4 -4
- esphome/components/st7567_i2c/display.py +1 -1
- esphome/components/st7920/display.py +2 -2
- esphome/components/statsd/__init__.py +3 -3
- esphome/components/status/binary_sensor.py +2 -5
- esphome/components/status_led/__init__.py +1 -1
- esphome/components/status_led/light/__init__.py +2 -1
- esphome/components/stepper/__init__.py +2 -2
- esphome/components/sts3x/sensor.py +1 -1
- esphome/components/substitutions/__init__.py +2 -2
- esphome/components/sun/__init__.py +4 -4
- esphome/components/sun/sensor/__init__.py +4 -7
- esphome/components/sun/text_sensor/__init__.py +5 -4
- esphome/components/sun_gtil2/__init__.py +1 -1
- esphome/components/sun_gtil2/sensor.py +7 -6
- esphome/components/sun_gtil2/text_sensor.py +3 -2
- esphome/components/sx1509/__init__.py +5 -5
- esphome/components/sx1509/binary_sensor/__init__.py +3 -3
- esphome/components/sx1509/output/__init__.py +4 -3
- esphome/components/t6615/sensor.py +1 -1
- esphome/components/tca9548a/__init__.py +1 -1
- esphome/components/tcl112/climate.py +1 -1
- esphome/components/tcs34725/sensor.py +4 -4
- esphome/components/tee501/sensor.py +1 -1
- esphome/components/teleinfo/__init__.py +1 -1
- esphome/components/teleinfo/sensor/__init__.py +1 -7
- esphome/components/teleinfo/text_sensor/__init__.py +1 -1
- esphome/components/tem3200/sensor.py +1 -2
- esphome/components/template/alarm_control_panel/__init__.py +3 -10
- esphome/components/template/cover/__init__.py +4 -3
- esphome/components/template/datetime/__init__.py +8 -9
- esphome/components/template/event/__init__.py +2 -5
- esphome/components/template/fan/__init__.py +2 -6
- esphome/components/template/lock/__init__.py +3 -2
- esphome/components/template/number/__init__.py +3 -2
- esphome/components/template/output/__init__.py +4 -3
- esphome/components/template/select/__init__.py +3 -2
- esphome/components/template/sensor/__init__.py +4 -7
- esphome/components/template/switch/__init__.py +3 -2
- esphome/components/template/text/__init__.py +4 -3
- esphome/components/template/text_sensor/__init__.py +3 -2
- esphome/components/template/valve/__init__.py +3 -2
- esphome/components/time/real_time_clock.cpp +0 -4
- esphome/components/time/real_time_clock.h +4 -3
- esphome/components/time_based/cover.py +3 -3
- esphome/components/tlc59208f/__init__.py +1 -1
- esphome/components/tlc59208f/output.py +2 -1
- esphome/components/tlc5947/__init__.py +1 -1
- esphome/components/tlc5947/output/__init__.py +2 -1
- esphome/components/tlc5971/__init__.py +2 -8
- esphome/components/tlc5971/output/__init__.py +2 -1
- esphome/components/tm1621/display.py +3 -3
- esphome/components/tm1637/binary_sensor.py +1 -1
- esphome/components/tm1637/display.py +3 -3
- esphome/components/tm1651/__init__.py +4 -4
- esphome/components/tmp102/sensor.py +1 -1
- esphome/components/tmp1075/sensor.py +2 -2
- esphome/components/tmp117/sensor.py +1 -1
- esphome/components/tof10120/sensor.py +2 -2
- esphome/components/tormatic/cover.py +2 -6
- esphome/components/toshiba/climate.py +1 -1
- esphome/components/total_daily_energy/sensor.py +4 -4
- esphome/components/tsl2561/sensor.py +1 -1
- esphome/components/tsl2591/sensor.py +9 -9
- esphome/components/tt21100/binary_sensor/__init__.py +2 -2
- esphome/components/tt21100/touchscreen/__init__.py +2 -3
- esphome/components/ttp229_bsf/__init__.py +2 -2
- esphome/components/ttp229_bsf/binary_sensor.py +3 -2
- esphome/components/ttp229_lsf/__init__.py +1 -1
- esphome/components/ttp229_lsf/binary_sensor.py +3 -2
- esphome/components/tuya/__init__.py +3 -5
- esphome/components/tuya/binary_sensor/__init__.py +2 -2
- esphome/components/tuya/climate/__init__.py +6 -5
- esphome/components/tuya/cover/__init__.py +5 -4
- esphome/components/tuya/fan/__init__.py +3 -2
- esphome/components/tuya/light/__init__.py +9 -8
- esphome/components/tuya/number/__init__.py +6 -5
- esphome/components/tuya/select/__init__.py +4 -3
- esphome/components/tuya/sensor/__init__.py +3 -2
- esphome/components/tuya/switch/__init__.py +3 -2
- esphome/components/tuya/text_sensor/__init__.py +3 -2
- esphome/components/tx20/sensor.py +6 -6
- esphome/components/uart/__init__.py +20 -19
- esphome/components/uart/button/__init__.py +2 -1
- esphome/components/uart/switch/__init__.py +2 -1
- esphome/components/ufire_ise/sensor.py +2 -2
- esphome/components/uln2003/stepper.py +2 -2
- esphome/components/ultrasonic/sensor.py +4 -4
- esphome/components/uponor_smatrix/__init__.py +2 -6
- esphome/components/uponor_smatrix/climate/__init__.py +3 -3
- esphome/components/vbus/__init__.py +1 -1
- esphome/components/vbus/binary_sensor/__init__.py +7 -6
- esphome/components/vbus/sensor/__init__.py +7 -6
- esphome/components/veml3235/sensor.py +1 -1
- esphome/components/veml7700/sensor.py +1 -1
- esphome/components/version/text_sensor.py +2 -6
- esphome/components/vl53l0x/sensor.py +6 -6
- esphome/components/web_server_base/__init__.py +2 -2
- esphome/components/web_server_idf/__init__.py +1 -1
- esphome/components/weikai/__init__.py +1 -1
- esphome/components/whirlpool/climate.py +1 -1
- esphome/components/whynter/climate.py +1 -1
- esphome/components/wireguard/binary_sensor.py +1 -1
- esphome/components/wireguard/sensor.py +2 -5
- esphome/components/wireguard/text_sensor.py +2 -5
- esphome/components/wk2132_i2c/__init__.py +1 -1
- esphome/components/wk2132_spi/__init__.py +1 -2
- esphome/components/wk2168_i2c/__init__.py +3 -8
- esphome/components/wk2168_spi/__init__.py +3 -8
- esphome/components/wk2204_i2c/__init__.py +1 -1
- esphome/components/wk2204_spi/__init__.py +1 -1
- esphome/components/wk2212_i2c/__init__.py +3 -8
- esphome/components/wk2212_spi/__init__.py +3 -8
- esphome/components/wl_134/text_sensor.py +2 -4
- esphome/components/wled/__init__.py +2 -2
- esphome/components/x9c/output.py +4 -4
- esphome/components/xgzp68xx/sensor.py +5 -5
- esphome/components/xiaomi_ble/__init__.py +1 -1
- esphome/components/xiaomi_cgd1/sensor.py +3 -3
- esphome/components/xiaomi_cgdk2/sensor.py +3 -3
- esphome/components/xiaomi_cgg1/sensor.py +2 -2
- esphome/components/xiaomi_cgpr1/binary_sensor.py +6 -6
- esphome/components/xiaomi_gcls002/sensor.py +7 -7
- esphome/components/xiaomi_hhccjcy01/sensor.py +9 -9
- esphome/components/xiaomi_hhccjcy10/sensor.py +9 -9
- esphome/components/xiaomi_hhccpot002/sensor.py +7 -7
- esphome/components/xiaomi_jqjcy01ym/sensor.py +6 -6
- esphome/components/xiaomi_lywsd02/sensor.py +4 -4
- esphome/components/xiaomi_lywsd02mmc/sensor.py +5 -5
- esphome/components/xiaomi_lywsd03mmc/sensor.py +6 -6
- esphome/components/xiaomi_lywsdcgq/sensor.py +5 -5
- esphome/components/xiaomi_mhoc303/sensor.py +4 -4
- esphome/components/xiaomi_mhoc401/sensor.py +6 -6
- esphome/components/xiaomi_miscale/sensor.py +6 -6
- esphome/components/xiaomi_mjyd02yla/binary_sensor.py +8 -8
- esphome/components/xiaomi_mue4094rt/binary_sensor.py +2 -7
- esphome/components/xiaomi_rtcgq02lm/__init__.py +2 -3
- esphome/components/xiaomi_rtcgq02lm/binary_sensor.py +3 -3
- esphome/components/xiaomi_rtcgq02lm/sensor.py +3 -3
- esphome/components/xiaomi_wx08zm/binary_sensor.py +2 -3
- esphome/components/xl9535/__init__.py +2 -2
- esphome/components/yashima/climate.py +1 -1
- esphome/components/zhlt01/climate.py +1 -1
- esphome/components/zio_ultrasonic/sensor.py +2 -5
- esphome/components/zyaura/sensor.py +7 -7
- esphome/const.py +3 -1
- esphome/core/component.cpp +3 -1
- esphome/core/component.h +15 -2
- esphome/core/config.py +4 -0
- esphome/core/defines.h +21 -0
- esphome/core/helpers.cpp +6 -7
- esphome/core/scheduler.cpp +34 -67
- esphome/core/scheduler.h +7 -17
- esphome/dashboard/status/mqtt.py +0 -2
- {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info}/METADATA +45 -44
- {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info}/RECORD +700 -693
- {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info}/WHEEL +1 -1
- {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info/licenses}/LICENSE +0 -0
- {esphome-2025.3.2.dist-info → esphome-2025.4.0b1.dist-info}/top_level.txt +0 -0
@@ -67,6 +67,7 @@ AUTO_LOAD = ["preferences"]
|
|
67
67
|
IS_TARGET_PLATFORM = True
|
68
68
|
|
69
69
|
CONF_RELEASE = "release"
|
70
|
+
CONF_ENABLE_IDF_EXPERIMENTAL_FEATURES = "enable_idf_experimental_features"
|
70
71
|
|
71
72
|
|
72
73
|
def set_core_data(config):
|
@@ -273,6 +274,9 @@ SUPPORTED_PLATFORMIO_ESP_IDF_5X = [
|
|
273
274
|
# pioarduino versions that don't require a release number
|
274
275
|
# List based on https://github.com/pioarduino/esp-idf/releases
|
275
276
|
SUPPORTED_PIOARDUINO_ESP_IDF_5X = [
|
277
|
+
cv.Version(5, 4, 1),
|
278
|
+
cv.Version(5, 4, 0),
|
279
|
+
cv.Version(5, 3, 2),
|
276
280
|
cv.Version(5, 3, 1),
|
277
281
|
cv.Version(5, 3, 0),
|
278
282
|
cv.Version(5, 1, 5),
|
@@ -503,6 +507,7 @@ ESP_IDF_FRAMEWORK_SCHEMA = cv.All(
|
|
503
507
|
CONF_IGNORE_EFUSE_CUSTOM_MAC, default=False
|
504
508
|
): cv.boolean,
|
505
509
|
cv.Optional(CONF_IGNORE_EFUSE_MAC_CRC): cv.boolean,
|
510
|
+
cv.Optional(CONF_ENABLE_IDF_EXPERIMENTAL_FEATURES): cv.boolean,
|
506
511
|
}
|
507
512
|
),
|
508
513
|
cv.Optional(CONF_COMPONENTS, default=[]): cv.ensure_list(
|
@@ -642,6 +647,11 @@ async def to_code(config):
|
|
642
647
|
add_idf_sdkconfig_option(
|
643
648
|
"CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE", False
|
644
649
|
)
|
650
|
+
if conf[CONF_ADVANCED].get(CONF_ENABLE_IDF_EXPERIMENTAL_FEATURES):
|
651
|
+
_LOGGER.warning(
|
652
|
+
"Using experimental features in ESP-IDF may result in unexpected failures."
|
653
|
+
)
|
654
|
+
add_idf_sdkconfig_option("CONFIG_IDF_EXPERIMENTAL_FEATURES", True)
|
645
655
|
|
646
656
|
cg.add_define(
|
647
657
|
"USE_ESP_IDF_VERSION_CODE",
|
@@ -1,3 +1,9 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from collections.abc import MutableMapping
|
4
|
+
import logging
|
5
|
+
from typing import Any, Callable
|
6
|
+
|
1
7
|
from esphome import automation
|
2
8
|
import esphome.codegen as cg
|
3
9
|
from esphome.components import esp32_ble
|
@@ -29,11 +35,21 @@ from esphome.core import CORE
|
|
29
35
|
AUTO_LOAD = ["esp32_ble"]
|
30
36
|
DEPENDENCIES = ["esp32"]
|
31
37
|
|
38
|
+
KEY_ESP32_BLE_TRACKER = "esp32_ble_tracker"
|
39
|
+
KEY_USED_CONNECTION_SLOTS = "used_connection_slots"
|
40
|
+
|
41
|
+
CONF_MAX_CONNECTIONS = "max_connections"
|
32
42
|
CONF_ESP32_BLE_ID = "esp32_ble_id"
|
33
43
|
CONF_SCAN_PARAMETERS = "scan_parameters"
|
34
44
|
CONF_WINDOW = "window"
|
35
45
|
CONF_CONTINUOUS = "continuous"
|
36
46
|
CONF_ON_SCAN_END = "on_scan_end"
|
47
|
+
|
48
|
+
DEFAULT_MAX_CONNECTIONS = 3
|
49
|
+
IDF_MAX_CONNECTIONS = 9
|
50
|
+
|
51
|
+
_LOGGER = logging.getLogger(__name__)
|
52
|
+
|
37
53
|
esp32_ble_tracker_ns = cg.esphome_ns.namespace("esp32_ble_tracker")
|
38
54
|
ESP32BLETracker = esp32_ble_tracker_ns.class_(
|
39
55
|
"ESP32BLETracker",
|
@@ -112,61 +128,126 @@ def as_reversed_hex_array(value):
|
|
112
128
|
)
|
113
129
|
|
114
130
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
131
|
+
def max_connections() -> int:
|
132
|
+
return IDF_MAX_CONNECTIONS if CORE.using_esp_idf else DEFAULT_MAX_CONNECTIONS
|
133
|
+
|
134
|
+
|
135
|
+
def consume_connection_slots(
|
136
|
+
value: int, consumer: str
|
137
|
+
) -> Callable[[MutableMapping], MutableMapping]:
|
138
|
+
def _consume_connection_slots(config: MutableMapping) -> MutableMapping:
|
139
|
+
data: dict[str, Any] = CORE.data.setdefault(KEY_ESP32_BLE_TRACKER, {})
|
140
|
+
slots: list[str] = data.setdefault(KEY_USED_CONNECTION_SLOTS, [])
|
141
|
+
slots.extend([consumer] * value)
|
142
|
+
return config
|
143
|
+
|
144
|
+
return _consume_connection_slots
|
145
|
+
|
146
|
+
|
147
|
+
CONFIG_SCHEMA = cv.All(
|
148
|
+
cv.Schema(
|
149
|
+
{
|
150
|
+
cv.GenerateID(): cv.declare_id(ESP32BLETracker),
|
151
|
+
cv.GenerateID(esp32_ble.CONF_BLE_ID): cv.use_id(esp32_ble.ESP32BLE),
|
152
|
+
cv.Optional(CONF_MAX_CONNECTIONS, default=DEFAULT_MAX_CONNECTIONS): cv.All(
|
153
|
+
cv.positive_int, cv.Range(min=0, max=max_connections())
|
154
|
+
),
|
155
|
+
cv.Optional(CONF_SCAN_PARAMETERS, default={}): cv.All(
|
156
|
+
cv.Schema(
|
157
|
+
{
|
158
|
+
cv.Optional(
|
159
|
+
CONF_DURATION, default="5min"
|
160
|
+
): cv.positive_time_period_seconds,
|
161
|
+
cv.Optional(
|
162
|
+
CONF_INTERVAL, default="320ms"
|
163
|
+
): cv.positive_time_period_milliseconds,
|
164
|
+
cv.Optional(
|
165
|
+
CONF_WINDOW, default="30ms"
|
166
|
+
): cv.positive_time_period_milliseconds,
|
167
|
+
cv.Optional(CONF_ACTIVE, default=True): cv.boolean,
|
168
|
+
cv.Optional(CONF_CONTINUOUS, default=True): cv.boolean,
|
169
|
+
}
|
170
|
+
),
|
171
|
+
validate_scan_parameters,
|
172
|
+
),
|
173
|
+
cv.Optional(CONF_ON_BLE_ADVERTISE): automation.validate_automation(
|
121
174
|
{
|
122
|
-
cv.
|
123
|
-
|
124
|
-
)
|
125
|
-
cv.Optional(
|
126
|
-
CONF_INTERVAL, default="320ms"
|
127
|
-
): cv.positive_time_period_milliseconds,
|
128
|
-
cv.Optional(
|
129
|
-
CONF_WINDOW, default="30ms"
|
130
|
-
): cv.positive_time_period_milliseconds,
|
131
|
-
cv.Optional(CONF_ACTIVE, default=True): cv.boolean,
|
132
|
-
cv.Optional(CONF_CONTINUOUS, default=True): cv.boolean,
|
175
|
+
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(
|
176
|
+
ESPBTAdvertiseTrigger
|
177
|
+
),
|
178
|
+
cv.Optional(CONF_MAC_ADDRESS): cv.ensure_list(cv.mac_address),
|
133
179
|
}
|
134
180
|
),
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
)
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
{cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(BLEEndOfScanTrigger)}
|
165
|
-
),
|
166
|
-
}
|
167
|
-
).extend(cv.COMPONENT_SCHEMA)
|
181
|
+
cv.Optional(
|
182
|
+
CONF_ON_BLE_SERVICE_DATA_ADVERTISE
|
183
|
+
): automation.validate_automation(
|
184
|
+
{
|
185
|
+
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(
|
186
|
+
BLEServiceDataAdvertiseTrigger
|
187
|
+
),
|
188
|
+
cv.Optional(CONF_MAC_ADDRESS): cv.mac_address,
|
189
|
+
cv.Required(CONF_SERVICE_UUID): bt_uuid,
|
190
|
+
}
|
191
|
+
),
|
192
|
+
cv.Optional(
|
193
|
+
CONF_ON_BLE_MANUFACTURER_DATA_ADVERTISE
|
194
|
+
): automation.validate_automation(
|
195
|
+
{
|
196
|
+
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(
|
197
|
+
BLEManufacturerDataAdvertiseTrigger
|
198
|
+
),
|
199
|
+
cv.Optional(CONF_MAC_ADDRESS): cv.mac_address,
|
200
|
+
cv.Required(CONF_MANUFACTURER_ID): bt_uuid,
|
201
|
+
}
|
202
|
+
),
|
203
|
+
cv.Optional(CONF_ON_SCAN_END): automation.validate_automation(
|
204
|
+
{cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(BLEEndOfScanTrigger)}
|
205
|
+
),
|
206
|
+
}
|
207
|
+
).extend(cv.COMPONENT_SCHEMA),
|
208
|
+
)
|
209
|
+
|
168
210
|
|
169
|
-
|
211
|
+
def validate_remaining_connections(config):
|
212
|
+
data: dict[str, Any] = CORE.data.get(KEY_ESP32_BLE_TRACKER, {})
|
213
|
+
slots: list[str] = data.get(KEY_USED_CONNECTION_SLOTS, [])
|
214
|
+
used_slots = len(slots)
|
215
|
+
if used_slots <= config[CONF_MAX_CONNECTIONS]:
|
216
|
+
return config
|
217
|
+
slot_users = ", ".join(slots)
|
218
|
+
hard_limit = max_connections()
|
219
|
+
|
220
|
+
if used_slots < hard_limit:
|
221
|
+
_LOGGER.warning(
|
222
|
+
"esp32_ble_tracker exceeded `%s`: components attempted to consume %d "
|
223
|
+
"connection slot(s) out of available configured maximum %d connection "
|
224
|
+
"slot(s); The system automatically increased `%s` to %d to match the "
|
225
|
+
"number of used connection slot(s) by components: %s.",
|
226
|
+
CONF_MAX_CONNECTIONS,
|
227
|
+
used_slots,
|
228
|
+
config[CONF_MAX_CONNECTIONS],
|
229
|
+
CONF_MAX_CONNECTIONS,
|
230
|
+
used_slots,
|
231
|
+
slot_users,
|
232
|
+
)
|
233
|
+
config[CONF_MAX_CONNECTIONS] = used_slots
|
234
|
+
return config
|
235
|
+
|
236
|
+
msg = (
|
237
|
+
f"esp32_ble_tracker exceeded `{CONF_MAX_CONNECTIONS}`: "
|
238
|
+
f"components attempted to consume {used_slots} connection slot(s) "
|
239
|
+
f"out of available configured maximum {config[CONF_MAX_CONNECTIONS]} "
|
240
|
+
f"connection slot(s); Decrease the number of BLE clients ({slot_users})"
|
241
|
+
)
|
242
|
+
if config[CONF_MAX_CONNECTIONS] < hard_limit:
|
243
|
+
msg += f" or increase {CONF_MAX_CONNECTIONS}` to {used_slots}"
|
244
|
+
msg += f" to stay under the {hard_limit} connection slot(s) limit."
|
245
|
+
raise cv.Invalid(msg)
|
246
|
+
|
247
|
+
|
248
|
+
FINAL_VALIDATE_SCHEMA = cv.All(
|
249
|
+
validate_remaining_connections, esp32_ble.validate_variant
|
250
|
+
)
|
170
251
|
|
171
252
|
ESP_BLE_DEVICE_SCHEMA = cv.Schema(
|
172
253
|
{
|
@@ -238,6 +319,9 @@ async def to_code(config):
|
|
238
319
|
else:
|
239
320
|
add_idf_sdkconfig_option("CONFIG_BTU_TASK_STACK_SIZE", 8192)
|
240
321
|
add_idf_sdkconfig_option("CONFIG_BT_ACL_CONNECTIONS", 9)
|
322
|
+
add_idf_sdkconfig_option(
|
323
|
+
"CONFIG_BTDM_CTRL_BLE_MAX_CONN", config[CONF_MAX_CONNECTIONS]
|
324
|
+
)
|
241
325
|
# CONFIG_BT_GATTC_NOTIF_REG_MAX controls the number of
|
242
326
|
# max notifications in 5.x, setting CONFIG_BT_ACL_CONNECTIONS
|
243
327
|
# is enough in 4.x
|
@@ -1,23 +1,22 @@
|
|
1
|
+
from esphome import automation, pins
|
1
2
|
import esphome.codegen as cg
|
3
|
+
from esphome.components.esp32 import add_idf_component
|
2
4
|
import esphome.config_validation as cv
|
3
|
-
from esphome import automation
|
4
|
-
from esphome import pins
|
5
5
|
from esphome.const import (
|
6
|
+
CONF_BRIGHTNESS,
|
7
|
+
CONF_CONTRAST,
|
8
|
+
CONF_DATA_PINS,
|
6
9
|
CONF_FREQUENCY,
|
7
10
|
CONF_ID,
|
8
11
|
CONF_PIN,
|
9
|
-
CONF_SCL,
|
10
|
-
CONF_SDA,
|
11
|
-
CONF_DATA_PINS,
|
12
12
|
CONF_RESET_PIN,
|
13
13
|
CONF_RESOLUTION,
|
14
|
-
|
15
|
-
|
14
|
+
CONF_SCL,
|
15
|
+
CONF_SDA,
|
16
16
|
CONF_TRIGGER_ID,
|
17
17
|
CONF_VSYNC_PIN,
|
18
18
|
)
|
19
19
|
from esphome.core import CORE
|
20
|
-
from esphome.components.esp32 import add_idf_component
|
21
20
|
from esphome.cpp_helpers import setup_entity
|
22
21
|
|
23
22
|
DEPENDENCIES = ["esp32"]
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import esphome.config_validation as cv
|
2
1
|
import esphome.codegen as cg
|
3
|
-
|
2
|
+
import esphome.config_validation as cv
|
3
|
+
from esphome.const import CONF_ID, CONF_MODE, CONF_PORT
|
4
4
|
|
5
5
|
CODEOWNERS = ["@ayufan"]
|
6
6
|
DEPENDENCIES = ["esp32_camera"]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import math
|
2
|
+
|
1
3
|
from esphome import pins
|
2
4
|
import esphome.codegen as cg
|
3
5
|
from esphome.components import canbus
|
@@ -23,6 +25,8 @@ from esphome.const import (
|
|
23
25
|
CODEOWNERS = ["@Sympatron"]
|
24
26
|
DEPENDENCIES = ["esp32"]
|
25
27
|
|
28
|
+
CONF_TX_ENQUEUE_TIMEOUT = "tx_enqueue_timeout"
|
29
|
+
|
26
30
|
esp32_can_ns = cg.esphome_ns.namespace("esp32_can")
|
27
31
|
esp32_can = esp32_can_ns.class_("ESP32Can", CanbusComponent)
|
28
32
|
|
@@ -84,10 +88,20 @@ CONFIG_SCHEMA = canbus.CANBUS_SCHEMA.extend(
|
|
84
88
|
cv.Required(CONF_TX_PIN): pins.internal_gpio_output_pin_number,
|
85
89
|
cv.Optional(CONF_RX_QUEUE_LEN): cv.uint32_t,
|
86
90
|
cv.Optional(CONF_TX_QUEUE_LEN): cv.uint32_t,
|
91
|
+
cv.Optional(CONF_TX_ENQUEUE_TIMEOUT): cv.positive_time_period_milliseconds,
|
87
92
|
}
|
88
93
|
)
|
89
94
|
|
90
95
|
|
96
|
+
def get_default_tx_enqueue_timeout(bit_rate):
|
97
|
+
bit_rate_numeric = canbus.get_rate(bit_rate)
|
98
|
+
bits_per_packet = 140 # ~max CAN message length
|
99
|
+
ms_per_packet = bits_per_packet / bit_rate_numeric * 1000
|
100
|
+
return int(
|
101
|
+
max(min(math.ceil(10 * ms_per_packet), 1000), 1)
|
102
|
+
) # ~10 packet lengths, min 1ms, max 1000ms
|
103
|
+
|
104
|
+
|
91
105
|
async def to_code(config):
|
92
106
|
var = cg.new_Pvariable(config[CONF_ID])
|
93
107
|
await canbus.register_canbus(var, config)
|
@@ -98,3 +112,10 @@ async def to_code(config):
|
|
98
112
|
cg.add(var.set_rx_queue_len(rx_queue_len))
|
99
113
|
if (tx_queue_len := config.get(CONF_TX_QUEUE_LEN)) is not None:
|
100
114
|
cg.add(var.set_tx_queue_len(tx_queue_len))
|
115
|
+
|
116
|
+
if CONF_TX_ENQUEUE_TIMEOUT in config:
|
117
|
+
tx_enqueue_timeout_ms = config[CONF_TX_ENQUEUE_TIMEOUT].total_milliseconds
|
118
|
+
else:
|
119
|
+
tx_enqueue_timeout_ms = get_default_tx_enqueue_timeout(config[CONF_BIT_RATE])
|
120
|
+
|
121
|
+
cg.add(var.set_tx_enqueue_timeout_ms(tx_enqueue_timeout_ms))
|
@@ -124,7 +124,7 @@ canbus::Error ESP32Can::send_message(struct canbus::CanFrame *frame) {
|
|
124
124
|
memcpy(message.data, frame->data, frame->can_data_length_code);
|
125
125
|
}
|
126
126
|
|
127
|
-
if (twai_transmit(&message,
|
127
|
+
if (twai_transmit(&message, this->tx_enqueue_timeout_ticks_) == ESP_OK) {
|
128
128
|
return canbus::ERROR_OK;
|
129
129
|
} else {
|
130
130
|
return canbus::ERROR_ALLTXBUSY;
|
@@ -14,6 +14,9 @@ class ESP32Can : public canbus::Canbus {
|
|
14
14
|
void set_tx(int tx) { tx_ = tx; }
|
15
15
|
void set_tx_queue_len(uint32_t tx_queue_len) { this->tx_queue_len_ = tx_queue_len; }
|
16
16
|
void set_rx_queue_len(uint32_t rx_queue_len) { this->rx_queue_len_ = rx_queue_len; }
|
17
|
+
void set_tx_enqueue_timeout_ms(uint32_t tx_enqueue_timeout_ms) {
|
18
|
+
this->tx_enqueue_timeout_ticks_ = pdMS_TO_TICKS(tx_enqueue_timeout_ms);
|
19
|
+
}
|
17
20
|
ESP32Can(){};
|
18
21
|
|
19
22
|
protected:
|
@@ -23,6 +26,7 @@ class ESP32Can : public canbus::Canbus {
|
|
23
26
|
|
24
27
|
int rx_{-1};
|
25
28
|
int tx_{-1};
|
29
|
+
TickType_t tx_enqueue_timeout_ticks_{};
|
26
30
|
optional<uint32_t> tx_queue_len_{};
|
27
31
|
optional<uint32_t> rx_queue_len_{};
|
28
32
|
};
|
@@ -1,9 +1,9 @@
|
|
1
|
-
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
1
|
from esphome import pins
|
2
|
+
import esphome.codegen as cg
|
4
3
|
from esphome.components import output
|
5
4
|
from esphome.components.esp32 import get_esp32_variant
|
6
5
|
from esphome.components.esp32.const import VARIANT_ESP32, VARIANT_ESP32S2
|
6
|
+
import esphome.config_validation as cv
|
7
7
|
from esphome.const import CONF_ID, CONF_NUMBER, CONF_PIN
|
8
8
|
|
9
9
|
DEPENDENCIES = ["esp32"]
|
@@ -1,11 +1,7 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
2
|
from esphome.components import sensor
|
4
|
-
|
5
|
-
|
6
|
-
UNIT_MICROTESLA,
|
7
|
-
ICON_MAGNET,
|
8
|
-
)
|
3
|
+
import esphome.config_validation as cv
|
4
|
+
from esphome.const import ICON_MAGNET, STATE_CLASS_MEASUREMENT, UNIT_MICROTESLA
|
9
5
|
|
10
6
|
DEPENDENCIES = ["esp32"]
|
11
7
|
|
@@ -1,4 +1,11 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
|
+
from esphome.components import esp32
|
3
|
+
from esphome.components.esp32 import get_esp32_variant, gpio
|
4
|
+
from esphome.components.esp32.const import (
|
5
|
+
VARIANT_ESP32,
|
6
|
+
VARIANT_ESP32S2,
|
7
|
+
VARIANT_ESP32S3,
|
8
|
+
)
|
2
9
|
import esphome.config_validation as cv
|
3
10
|
from esphome.const import (
|
4
11
|
CONF_HIGH_VOLTAGE_REFERENCE,
|
@@ -11,13 +18,6 @@ from esphome.const import (
|
|
11
18
|
CONF_VOLTAGE_ATTENUATION,
|
12
19
|
)
|
13
20
|
from esphome.core import TimePeriod
|
14
|
-
from esphome.components import esp32
|
15
|
-
from esphome.components.esp32 import get_esp32_variant, gpio
|
16
|
-
from esphome.components.esp32.const import (
|
17
|
-
VARIANT_ESP32,
|
18
|
-
VARIANT_ESP32S2,
|
19
|
-
VARIANT_ESP32S3,
|
20
|
-
)
|
21
21
|
|
22
22
|
AUTO_LOAD = ["binary_sensor"]
|
23
23
|
DEPENDENCIES = ["esp32"]
|
@@ -1,12 +1,9 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
2
|
from esphome.components import binary_sensor
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
)
|
9
|
-
from . import esp32_touch_ns, ESP32TouchComponent, validate_touch_pad
|
3
|
+
import esphome.config_validation as cv
|
4
|
+
from esphome.const import CONF_ID, CONF_PIN, CONF_THRESHOLD
|
5
|
+
|
6
|
+
from . import ESP32TouchComponent, esp32_touch_ns, validate_touch_pad
|
10
7
|
|
11
8
|
DEPENDENCIES = ["esp32_touch", "esp32"]
|
12
9
|
|
@@ -1,13 +1,8 @@
|
|
1
|
-
from esphome import
|
1
|
+
from esphome import automation, pins
|
2
|
+
import esphome.codegen as cg
|
2
3
|
from esphome.components import output
|
3
4
|
import esphome.config_validation as cv
|
4
|
-
|
5
|
-
from esphome.const import (
|
6
|
-
CONF_FREQUENCY,
|
7
|
-
CONF_ID,
|
8
|
-
CONF_NUMBER,
|
9
|
-
CONF_PIN,
|
10
|
-
)
|
5
|
+
from esphome.const import CONF_FREQUENCY, CONF_ID, CONF_NUMBER, CONF_PIN
|
11
6
|
|
12
7
|
DEPENDENCIES = ["esp8266"]
|
13
8
|
|
@@ -580,7 +580,7 @@ void EthernetComponent::get_eth_mac_address_raw(uint8_t *mac) {
|
|
580
580
|
|
581
581
|
std::string EthernetComponent::get_eth_mac_address_pretty() {
|
582
582
|
uint8_t mac[6];
|
583
|
-
|
583
|
+
get_eth_mac_address_raw(mac);
|
584
584
|
return str_snprintf("%02X:%02X:%02X:%02X:%02X:%02X", 17, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
585
585
|
}
|
586
586
|
|
@@ -62,6 +62,7 @@ class DNSAddressEthernetInfo : public PollingComponent, public text_sensor::Text
|
|
62
62
|
class MACAddressEthernetInfo : public Component, public text_sensor::TextSensor {
|
63
63
|
public:
|
64
64
|
void setup() override { this->publish_state(ethernet::global_eth_component->get_eth_mac_address_pretty()); }
|
65
|
+
float get_setup_priority() const override { return setup_priority::ETHERNET; }
|
65
66
|
std::string unique_id() override { return get_mac_address() + "-ethernetinfo-mac"; }
|
66
67
|
void dump_config() override;
|
67
68
|
};
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import esphome.codegen as cg
|
2
1
|
from esphome import automation
|
3
|
-
import esphome.
|
2
|
+
import esphome.codegen as cg
|
4
3
|
from esphome.components import esp32_ble_tracker
|
4
|
+
import esphome.config_validation as cv
|
5
5
|
from esphome.const import CONF_TRIGGER_ID
|
6
6
|
|
7
7
|
CODEOWNERS = ["@OttoWinter"]
|
esphome/components/ezo/sensor.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
1
|
from esphome import automation
|
2
|
+
import esphome.codegen as cg
|
4
3
|
from esphome.components import i2c, sensor
|
4
|
+
import esphome.config_validation as cv
|
5
5
|
from esphome.const import CONF_ID, CONF_TRIGGER_ID
|
6
6
|
|
7
7
|
CODEOWNERS = ["@ssieb"]
|
@@ -1,15 +1,15 @@
|
|
1
|
+
from esphome import automation
|
2
|
+
from esphome.automation import maybe_simple_id
|
1
3
|
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
4
|
from esphome.components import i2c
|
5
|
+
import esphome.config_validation as cv
|
4
6
|
from esphome.const import (
|
5
7
|
CONF_ADDRESS,
|
6
8
|
CONF_COMMAND,
|
7
|
-
CONF_ID,
|
8
9
|
CONF_DURATION,
|
10
|
+
CONF_ID,
|
9
11
|
CONF_VOLUME,
|
10
12
|
)
|
11
|
-
from esphome import automation
|
12
|
-
from esphome.automation import maybe_simple_id
|
13
13
|
|
14
14
|
CODEOWNERS = ["@carlos-sarmiento"]
|
15
15
|
DEPENDENCIES = ["i2c"]
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
2
|
from esphome.components import binary_sensor
|
3
|
+
import esphome.config_validation as cv
|
4
4
|
from esphome.const import (
|
5
|
-
ENTITY_CATEGORY_NONE,
|
6
|
-
DEVICE_CLASS_RUNNING,
|
7
|
-
DEVICE_CLASS_EMPTY,
|
8
5
|
CONF_ID,
|
6
|
+
DEVICE_CLASS_EMPTY,
|
7
|
+
DEVICE_CLASS_RUNNING,
|
8
|
+
ENTITY_CATEGORY_NONE,
|
9
9
|
)
|
10
10
|
|
11
11
|
from . import EzoPMP
|
@@ -1,20 +1,19 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
2
|
from esphome.components import sensor
|
3
|
+
import esphome.config_validation as cv
|
4
4
|
from esphome.const import (
|
5
|
-
|
6
|
-
ENTITY_CATEGORY_NONE,
|
5
|
+
CONF_ID,
|
7
6
|
DEVICE_CLASS_EMPTY,
|
8
7
|
DEVICE_CLASS_VOLTAGE,
|
8
|
+
ENTITY_CATEGORY_DIAGNOSTIC,
|
9
|
+
ENTITY_CATEGORY_NONE,
|
9
10
|
STATE_CLASS_MEASUREMENT,
|
10
11
|
STATE_CLASS_NONE,
|
11
|
-
CONF_ID,
|
12
12
|
UNIT_VOLT,
|
13
13
|
)
|
14
14
|
|
15
15
|
from . import EzoPMP
|
16
16
|
|
17
|
-
|
18
17
|
DEPENDENCIES = ["ezo_pmp"]
|
19
18
|
|
20
19
|
CONF_CURRENT_VOLUME_DOSED = "current_volume_dosed"
|
@@ -1,11 +1,7 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
2
|
from esphome.components import text_sensor
|
4
|
-
|
5
|
-
|
6
|
-
ENTITY_CATEGORY_DIAGNOSTIC,
|
7
|
-
CONF_ID,
|
8
|
-
)
|
3
|
+
import esphome.config_validation as cv
|
4
|
+
from esphome.const import CONF_ID, ENTITY_CATEGORY_DIAGNOSTIC, ENTITY_CATEGORY_NONE
|
9
5
|
|
10
6
|
from . import EzoPMP
|
11
7
|
|
@@ -1,12 +1,13 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
2
|
from esphome.components import button
|
3
|
+
import esphome.config_validation as cv
|
4
4
|
from esphome.const import (
|
5
5
|
CONF_ID,
|
6
6
|
DEVICE_CLASS_RESTART,
|
7
7
|
ENTITY_CATEGORY_CONFIG,
|
8
8
|
ICON_RESTART_ALERT,
|
9
9
|
)
|
10
|
+
|
10
11
|
from .. import factory_reset_ns
|
11
12
|
|
12
13
|
FactoryResetButton = factory_reset_ns.class_(
|
@@ -1,14 +1,15 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
2
|
from esphome.components import switch
|
3
|
+
import esphome.config_validation as cv
|
4
4
|
from esphome.const import (
|
5
5
|
CONF_ENTITY_CATEGORY,
|
6
|
+
CONF_ICON,
|
6
7
|
CONF_ID,
|
7
8
|
CONF_INVERTED,
|
8
|
-
CONF_ICON,
|
9
9
|
ENTITY_CATEGORY_CONFIG,
|
10
10
|
ICON_RESTART_ALERT,
|
11
11
|
)
|
12
|
+
|
12
13
|
from .. import factory_reset_ns
|
13
14
|
|
14
15
|
FactoryResetSwitch = factory_reset_ns.class_(
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import esphome.codegen as cg
|
2
|
-
import esphome.config_validation as cv
|
3
2
|
from esphome.components import light
|
3
|
+
import esphome.config_validation as cv
|
4
4
|
from esphome.const import (
|
5
|
-
|
5
|
+
CONF_MAX_REFRESH_RATE,
|
6
6
|
CONF_NUM_LEDS,
|
7
|
+
CONF_OUTPUT_ID,
|
7
8
|
CONF_RGB_ORDER,
|
8
|
-
CONF_MAX_REFRESH_RATE,
|
9
9
|
)
|
10
10
|
|
11
11
|
CODEOWNERS = ["@OttoWinter"]
|