esphome 2025.7.4__py3-none-any.whl → 2025.8.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.
Potentially problematic release.
This version of esphome might be problematic. Click here for more details.
- esphome/__main__.py +189 -82
- esphome/automation.py +2 -4
- esphome/build_gen/__init__.py +0 -0
- esphome/build_gen/platformio.py +102 -0
- esphome/components/a4988/a4988.cpp +0 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
- esphome/components/absolute_humidity/sensor.py +2 -2
- esphome/components/adc/__init__.py +123 -85
- esphome/components/adc/adc_sensor.h +98 -35
- esphome/components/adc/adc_sensor_common.cpp +10 -4
- esphome/components/adc/adc_sensor_esp32.cpp +291 -123
- esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
- esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
- esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
- esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
- esphome/components/adc/sensor.py +61 -27
- esphome/components/adc128s102/adc128s102.cpp +1 -4
- esphome/components/ade7880/sensor.py +75 -49
- esphome/components/ads1115/ads1115.cpp +0 -1
- esphome/components/ads1118/ads1118.cpp +0 -1
- esphome/components/ags10/ags10.cpp +0 -4
- esphome/components/aht10/aht10.cpp +0 -4
- esphome/components/aic3204/aic3204.cpp +0 -2
- esphome/components/airthings_wave_plus/__init__.py +1 -1
- esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
- esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
- esphome/components/airthings_wave_plus/sensor.py +55 -28
- esphome/components/alarm_control_panel/__init__.py +4 -9
- esphome/components/am2315c/am2315c.cpp +0 -2
- esphome/components/am2320/am2320.cpp +0 -1
- esphome/components/animation/__init__.py +14 -11
- esphome/components/apds9306/apds9306.cpp +0 -4
- esphome/components/apds9960/apds9960.cpp +0 -1
- esphome/components/api/__init__.py +29 -4
- esphome/components/api/api_connection.cpp +378 -401
- esphome/components/api/api_connection.h +112 -56
- esphome/components/api/api_frame_helper.cpp +69 -896
- esphome/components/api/api_frame_helper.h +31 -126
- esphome/components/api/api_frame_helper_noise.cpp +583 -0
- esphome/components/api/api_frame_helper_noise.h +68 -0
- esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
- esphome/components/api/api_frame_helper_plaintext.h +53 -0
- esphome/components/api/api_noise_context.h +2 -4
- esphome/components/api/api_pb2.cpp +1601 -1808
- esphome/components/api/api_pb2.h +367 -323
- esphome/components/api/api_pb2_dump.cpp +1137 -3466
- esphome/components/api/api_pb2_includes.h +34 -0
- esphome/components/api/api_pb2_service.cpp +94 -105
- esphome/components/api/api_pb2_service.h +27 -16
- esphome/components/api/api_server.cpp +18 -17
- esphome/components/api/api_server.h +8 -5
- esphome/components/api/client.py +16 -8
- esphome/components/api/custom_api_device.h +68 -14
- esphome/components/api/homeassistant_service.h +24 -19
- esphome/components/api/list_entities.cpp +3 -5
- esphome/components/api/list_entities.h +2 -4
- esphome/components/api/proto.cpp +3 -5
- esphome/components/api/proto.h +239 -274
- esphome/components/api/subscribe_state.cpp +2 -4
- esphome/components/api/subscribe_state.h +2 -4
- esphome/components/api/user_services.cpp +2 -4
- esphome/components/api/user_services.h +8 -8
- esphome/components/as3935/as3935.cpp +0 -2
- esphome/components/as3935_spi/as3935_spi.cpp +0 -2
- esphome/components/as5600/__init__.py +1 -1
- esphome/components/as5600/as5600.cpp +0 -2
- esphome/components/as5600/sensor/__init__.py +0 -1
- esphome/components/as7341/as7341.cpp +0 -1
- esphome/components/async_tcp/__init__.py +1 -1
- esphome/components/at581x/at581x.cpp +1 -1
- esphome/components/atm90e26/atm90e26.cpp +0 -1
- esphome/components/atm90e32/atm90e32.cpp +488 -118
- esphome/components/atm90e32/atm90e32.h +44 -5
- esphome/components/audio/audio.h +2 -2
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
- esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
- esphome/components/bh1750/bh1750.cpp +0 -1
- esphome/components/binary_sensor/__init__.py +14 -12
- esphome/components/ble_client/__init__.py +4 -7
- esphome/components/bluetooth_proxy/__init__.py +40 -3
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +387 -82
- esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
- esphome/components/bme280_base/bme280_base.cpp +15 -16
- esphome/components/bme680/bme680.cpp +2 -3
- esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
- esphome/components/bmi160/bmi160.cpp +0 -1
- esphome/components/bmp085/bmp085.cpp +0 -1
- esphome/components/bmp280_base/bmp280_base.cpp +13 -14
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
- esphome/components/bmp581/bmp581.cpp +0 -2
- esphome/components/bp1658cj/bp1658cj.cpp +0 -1
- esphome/components/bp5758d/bp5758d.cpp +0 -1
- esphome/components/button/__init__.py +0 -1
- esphome/components/canbus/__init__.py +2 -3
- esphome/components/canbus/canbus.cpp +0 -1
- esphome/components/cap1188/cap1188.cpp +0 -2
- esphome/components/captive_portal/__init__.py +1 -1
- esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
- esphome/components/ch422g/ch422g.cpp +0 -1
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
- esphome/components/climate/__init__.py +0 -1
- esphome/components/climate/climate_traits.h +24 -0
- esphome/components/cm1106/cm1106.cpp +0 -1
- esphome/components/const/__init__.py +6 -0
- esphome/components/cover/__init__.py +0 -1
- esphome/components/cover/cover.cpp +9 -13
- esphome/components/cs5460a/cs5460a.cpp +0 -2
- esphome/components/cse7761/cse7761.cpp +0 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
- esphome/components/dac7678/dac7678_output.cpp +0 -2
- esphome/components/dallas_temp/dallas_temp.cpp +0 -1
- esphome/components/datetime/__init__.py +0 -2
- esphome/components/debug/__init__.py +15 -1
- esphome/components/debug/debug_zephyr.cpp +281 -0
- esphome/components/debug/sensor.py +2 -1
- esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
- esphome/components/dfrobot_sen0395/__init__.py +1 -2
- esphome/components/dht/dht.cpp +0 -1
- esphome/components/dht12/dht12.cpp +0 -1
- esphome/components/display/__init__.py +16 -3
- esphome/components/display_menu_base/__init__.py +1 -1
- esphome/components/dps310/dps310.cpp +0 -2
- esphome/components/ds1307/ds1307.cpp +0 -1
- esphome/components/ds2484/ds2484.cpp +0 -1
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
- esphome/components/ee895/ee895.cpp +0 -1
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
- esphome/components/emc2101/emc2101.cpp +0 -2
- esphome/components/ens160_base/ens160_base.cpp +0 -2
- esphome/components/ens210/ens210.cpp +0 -1
- esphome/components/es7210/es7210.cpp +0 -2
- esphome/components/es7243e/es7243e.cpp +0 -2
- esphome/components/es8156/es8156.cpp +0 -2
- esphome/components/es8311/es8311.cpp +0 -2
- esphome/components/es8388/es8388.cpp +0 -2
- esphome/components/esp32/__init__.py +199 -58
- esphome/components/esp32/boards.py +17 -0
- esphome/components/esp32/gpio.cpp +0 -1
- esphome/components/esp32/gpio.py +1 -2
- esphome/components/esp32/gpio_esp32_h2.py +2 -7
- esphome/components/esp32/gpio_esp32_p4.py +2 -7
- esphome/components/esp32/post_build.py.script +112 -61
- esphome/components/esp32_ble/__init__.py +40 -2
- esphome/components/esp32_ble/ble.cpp +12 -8
- esphome/components/esp32_ble/ble.h +18 -18
- esphome/components/esp32_ble/ble_advertising.cpp +5 -5
- esphome/components/esp32_ble/ble_advertising.h +7 -5
- esphome/components/esp32_ble/ble_event.h +2 -4
- esphome/components/esp32_ble/ble_scan_result.h +2 -4
- esphome/components/esp32_ble/ble_uuid.cpp +5 -5
- esphome/components/esp32_ble/ble_uuid.h +6 -5
- esphome/components/esp32_ble_beacon/__init__.py +4 -0
- esphome/components/esp32_ble_client/__init__.py +1 -1
- esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
- esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
- esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
- esphome/components/esp32_ble_client/ble_client_base.h +17 -6
- esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
- esphome/components/esp32_ble_client/ble_service.cpp +4 -4
- esphome/components/esp32_ble_client/ble_service.h +6 -4
- esphome/components/esp32_ble_server/__init__.py +15 -12
- esphome/components/esp32_ble_tracker/__init__.py +79 -11
- esphome/components/esp32_ble_tracker/automation.h +4 -4
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
- esphome/components/esp32_camera/__init__.py +13 -1
- esphome/components/esp32_camera/esp32_camera.cpp +7 -2
- esphome/components/esp32_camera/esp32_camera.h +1 -0
- esphome/components/esp32_dac/esp32_dac.cpp +3 -19
- esphome/components/esp32_dac/esp32_dac.h +4 -8
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
- esphome/components/esp32_rmt_led_strip/light.py +1 -1
- esphome/components/esp32_touch/__init__.py +2 -3
- esphome/components/esp32_touch/esp32_touch.h +9 -6
- esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
- esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
- esphome/components/esp8266/__init__.py +3 -1
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
- esphome/components/esphome/ota/__init__.py +1 -2
- esphome/components/esphome/ota/ota_esphome.cpp +150 -77
- esphome/components/esphome/ota/ota_esphome.h +8 -1
- esphome/components/espnow/__init__.py +309 -0
- esphome/components/espnow/automation.h +175 -0
- esphome/components/espnow/espnow_component.cpp +468 -0
- esphome/components/espnow/espnow_component.h +183 -0
- esphome/components/espnow/espnow_err.h +19 -0
- esphome/components/espnow/espnow_packet.h +166 -0
- esphome/components/ethernet/__init__.py +7 -1
- esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
- esphome/components/ethernet/ethernet_component.cpp +0 -1
- esphome/components/ethernet/ethernet_component.h +4 -0
- esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
- esphome/components/event/__init__.py +0 -1
- esphome/components/factory_reset/__init__.py +92 -0
- esphome/components/factory_reset/factory_reset.cpp +76 -0
- esphome/components/factory_reset/factory_reset.h +43 -0
- esphome/components/fan/__init__.py +0 -1
- esphome/components/fan/fan_traits.h +16 -0
- esphome/components/fastled_base/fastled_light.cpp +0 -1
- esphome/components/fastled_spi/light.py +1 -3
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
- esphome/components/font/__init__.py +9 -1
- esphome/components/fs3000/fs3000.cpp +0 -2
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
- esphome/components/ft63x6/ft63x6.cpp +0 -1
- esphome/components/gdk101/gdk101.cpp +0 -1
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
- esphome/components/gl_r01_i2c/sensor.py +1 -1
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
- esphome/components/gpio/switch/gpio_switch.cpp +0 -2
- esphome/components/gpio_expander/cached_gpio.h +24 -15
- esphome/components/gps/__init__.py +6 -2
- esphome/components/gps/gps.cpp +50 -49
- esphome/components/gps/gps.h +4 -8
- esphome/components/gps/time/gps_time.cpp +3 -9
- esphome/components/gps/time/gps_time.h +4 -7
- esphome/components/graph/__init__.py +1 -1
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
- esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
- esphome/components/haier/climate.py +5 -10
- esphome/components/haier/haier_base.cpp +0 -1
- esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
- esphome/components/hdc1080/hdc1080.cpp +0 -2
- esphome/components/heatpumpir/climate.py +2 -2
- esphome/components/hlw8012/hlw8012.cpp +0 -1
- esphome/components/hm3301/hm3301.cpp +0 -1
- esphome/components/hmc5883l/hmc5883l.cpp +0 -1
- esphome/components/homeassistant/__init__.py +1 -0
- esphome/components/homeassistant/number/__init__.py +1 -0
- esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
- esphome/components/homeassistant/switch/__init__.py +1 -0
- esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
- esphome/components/honeywellabp/honeywellabp.cpp +1 -4
- esphome/components/host/__init__.py +2 -0
- esphome/components/hte501/hte501.cpp +0 -1
- esphome/components/http_request/__init__.py +2 -3
- esphome/components/http_request/http_request_idf.cpp +2 -2
- esphome/components/htu21d/htu21d.cpp +0 -2
- esphome/components/htu31d/htu31d.cpp +0 -2
- esphome/components/hx711/hx711.cpp +0 -1
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
- esphome/components/hydreon_rgxx/sensor.py +4 -5
- esphome/components/i2c/i2c_bus.h +1 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
- esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
- esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
- esphome/components/i2s_audio/__init__.py +6 -5
- esphome/components/i2s_audio/i2s_audio.cpp +0 -2
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
- esphome/components/i2s_audio/microphone/__init__.py +4 -6
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +46 -19
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -3
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
- esphome/components/ili9xxx/display.py +4 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
- esphome/components/image/__init__.py +123 -92
- esphome/components/improv_serial/__init__.py +7 -8
- esphome/components/ina219/ina219.cpp +0 -1
- esphome/components/ina226/ina226.cpp +0 -2
- esphome/components/ina260/ina260.cpp +0 -2
- esphome/components/ina2xx_base/__init__.py +2 -5
- esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
- esphome/components/ina3221/ina3221.cpp +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +0 -2
- esphome/components/interval/interval.h +5 -9
- esphome/components/json/__init__.py +1 -1
- esphome/components/kmeteriso/kmeteriso.cpp +0 -2
- esphome/components/lc709203f/lc709203f.cpp +0 -2
- esphome/components/lcd_gpio/display.py +1 -3
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
- esphome/components/ld2410/__init__.py +4 -6
- esphome/components/ld2410/binary_sensor.py +4 -0
- esphome/components/ld2410/ld2410.cpp +56 -100
- esphome/components/ld2410/ld2410.h +17 -15
- esphome/components/ld2410/sensor.py +24 -10
- esphome/components/ld2412/__init__.py +46 -0
- esphome/components/ld2412/binary_sensor.py +70 -0
- esphome/components/ld2412/button/__init__.py +74 -0
- esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2412/button/factory_reset_button.h +18 -0
- esphome/components/ld2412/button/query_button.cpp +9 -0
- esphome/components/ld2412/button/query_button.h +18 -0
- esphome/components/ld2412/button/restart_button.cpp +9 -0
- esphome/components/ld2412/button/restart_button.h +18 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
- esphome/components/ld2412/ld2412.cpp +861 -0
- esphome/components/ld2412/ld2412.h +141 -0
- esphome/components/ld2412/number/__init__.py +126 -0
- esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
- esphome/components/ld2412/number/gate_threshold_number.h +19 -0
- esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
- esphome/components/ld2412/number/light_threshold_number.h +18 -0
- esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
- esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
- esphome/components/ld2412/select/__init__.py +82 -0
- esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
- esphome/components/ld2412/select/baud_rate_select.h +18 -0
- esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
- esphome/components/ld2412/select/distance_resolution_select.h +18 -0
- esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
- esphome/components/ld2412/select/light_out_control_select.h +18 -0
- esphome/components/ld2412/sensor.py +124 -0
- esphome/components/ld2412/switch/__init__.py +45 -0
- esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
- esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
- esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
- esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
- esphome/components/ld2412/text_sensor.py +34 -0
- esphome/components/ld2420/ld2420.cpp +0 -1
- esphome/components/ld2450/__init__.py +3 -4
- esphome/components/ld2450/binary_sensor.py +3 -0
- esphome/components/ld2450/ld2450.cpp +77 -165
- esphome/components/ld2450/ld2450.h +26 -54
- esphome/components/ld2450/sensor.py +120 -6
- esphome/components/ld2450/text_sensor.py +5 -4
- esphome/components/ld24xx/__init__.py +1 -0
- esphome/components/ld24xx/ld24xx.h +65 -0
- esphome/components/ledc/ledc_output.cpp +0 -1
- esphome/components/libretiny/__init__.py +2 -0
- esphome/components/light/__init__.py +0 -1
- esphome/components/light/effects.py +70 -45
- esphome/components/light/light_call.cpp +101 -66
- esphome/components/light/light_color_values.h +16 -11
- esphome/components/light/light_json_schema.cpp +46 -44
- esphome/components/light/light_state.cpp +8 -11
- esphome/components/light/light_traits.h +17 -0
- esphome/components/lightwaverf/lightwaverf.cpp +0 -2
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
- esphome/components/lock/__init__.py +0 -1
- esphome/components/logger/__init__.py +31 -9
- esphome/components/logger/logger.cpp +12 -7
- esphome/components/logger/logger.h +25 -14
- esphome/components/logger/logger_esp32.cpp +2 -7
- esphome/components/logger/logger_esp8266.cpp +2 -4
- esphome/components/logger/logger_host.cpp +2 -4
- esphome/components/logger/logger_libretiny.cpp +2 -4
- esphome/components/logger/logger_rp2040.cpp +2 -4
- esphome/components/logger/logger_zephyr.cpp +86 -0
- esphome/components/logger/select/logger_level_select.cpp +2 -4
- esphome/components/logger/select/logger_level_select.h +2 -4
- esphome/components/logger/task_log_buffer.cpp +2 -4
- esphome/components/logger/task_log_buffer.h +2 -4
- esphome/components/lps22/sensor.py +5 -5
- esphome/components/ltr390/ltr390.cpp +0 -2
- esphome/components/ltr501/ltr501.cpp +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
- esphome/components/lvgl/__init__.py +14 -13
- esphome/components/lvgl/automation.py +2 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/helpers.py +1 -1
- esphome/components/lvgl/lv_validation.py +7 -4
- esphome/components/lvgl/lvgl_esphome.cpp +2 -3
- esphome/components/lvgl/styles.py +2 -2
- esphome/components/lvgl/types.py +1 -1
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/arc.py +14 -11
- esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
- esphome/components/lvgl/widgets/qrcode.py +7 -7
- esphome/components/lvgl/widgets/spinner.py +6 -6
- esphome/components/lvgl/widgets/switch.py +2 -2
- esphome/components/lvgl/widgets/tabview.py +3 -3
- esphome/components/lvgl/widgets/tileview.py +15 -7
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
- esphome/components/matrix_keypad/__init__.py +4 -3
- esphome/components/max17043/max17043.cpp +0 -2
- esphome/components/max31855/max31855.cpp +1 -4
- esphome/components/max31856/max31856.cpp +0 -4
- esphome/components/max31865/max31865.cpp +0 -1
- esphome/components/max44009/max44009.cpp +0 -1
- esphome/components/max6675/max6675.cpp +1 -4
- esphome/components/max6956/max6956.cpp +0 -1
- esphome/components/max7219/max7219.cpp +0 -1
- esphome/components/max7219digit/display.py +1 -1
- esphome/components/max7219digit/max7219digit.cpp +0 -1
- esphome/components/max9611/max9611.cpp +0 -1
- esphome/components/mcp23008/__init__.py +1 -1
- esphome/components/mcp23008/mcp23008.cpp +0 -1
- esphome/components/mcp23016/mcp23016.cpp +0 -1
- esphome/components/mcp23017/__init__.py +1 -1
- esphome/components/mcp23017/mcp23017.cpp +0 -1
- esphome/components/mcp23s08/__init__.py +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +0 -1
- esphome/components/mcp23s17/__init__.py +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +0 -1
- esphome/components/mcp23x08_base/__init__.py +2 -0
- esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
- esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
- esphome/components/mcp23x17_base/__init__.py +2 -0
- esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
- esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
- esphome/components/mcp23xxx_base/__init__.py +11 -5
- esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
- esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
- esphome/components/mcp3008/mcp3008.cpp +1 -4
- esphome/components/mcp3204/mcp3204.cpp +1 -4
- esphome/components/mcp4461/mcp4461.cpp +0 -1
- esphome/components/mcp4725/mcp4725.cpp +0 -1
- esphome/components/mcp4728/mcp4728.cpp +0 -1
- esphome/components/mcp9600/mcp9600.cpp +0 -2
- esphome/components/mcp9808/mcp9808.cpp +0 -2
- esphome/components/mdns/__init__.py +3 -0
- esphome/components/mdns/mdns_component.cpp +2 -0
- esphome/components/mdns/mdns_component.h +4 -0
- esphome/components/media_player/__init__.py +40 -0
- esphome/components/media_player/automation.h +16 -0
- esphome/components/media_player/media_player.cpp +13 -0
- esphome/components/media_player/media_player.h +50 -3
- esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
- esphome/components/mics_4514/mics_4514.cpp +1 -6
- esphome/components/midea/ir_transmitter.h +4 -4
- esphome/components/mipi/__init__.py +416 -0
- esphome/components/mipi_dsi/__init__.py +5 -0
- esphome/components/mipi_dsi/display.py +233 -0
- esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
- esphome/components/mipi_dsi/mipi_dsi.h +123 -0
- esphome/components/mipi_dsi/models/__init__.py +0 -0
- esphome/components/mipi_dsi/models/guition.py +38 -0
- esphome/components/mipi_dsi/models/m5stack.py +57 -0
- esphome/components/mipi_dsi/models/waveshare.py +105 -0
- esphome/components/mipi_rgb/models/lilygo.py +0 -0
- esphome/components/mipi_spi/__init__.py +0 -9
- esphome/components/mipi_spi/display.py +220 -256
- esphome/components/mipi_spi/mipi_spi.cpp +1 -485
- esphome/components/mipi_spi/mipi_spi.h +556 -108
- esphome/components/mipi_spi/models/__init__.py +0 -65
- esphome/components/mipi_spi/models/adafruit.py +30 -0
- esphome/components/mipi_spi/models/amoled.py +41 -5
- esphome/components/mipi_spi/models/ili.py +5 -5
- esphome/components/mipi_spi/models/jc.py +1 -3
- esphome/components/mipi_spi/models/lilygo.py +1 -1
- esphome/components/mipi_spi/models/waveshare.py +16 -1
- esphome/components/mixer/speaker/__init__.py +4 -5
- esphome/components/mlx90393/sensor.py +7 -5
- esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
- esphome/components/mlx90614/mlx90614.cpp +0 -1
- esphome/components/mmc5603/mmc5603.cpp +0 -1
- esphome/components/mmc5983/mmc5983.cpp +0 -2
- esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
- esphome/components/mpr121/__init__.py +7 -6
- esphome/components/mpr121/mpr121.cpp +0 -1
- esphome/components/mpu6050/mpu6050.cpp +0 -1
- esphome/components/mpu6886/mpu6886.cpp +0 -1
- esphome/components/mqtt/__init__.py +1 -2
- esphome/components/mqtt/mqtt_button.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +0 -1
- esphome/components/mqtt/mqtt_component.cpp +8 -14
- esphome/components/mqtt/mqtt_component.h +0 -7
- esphome/components/mqtt/mqtt_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_sensor.h +0 -1
- esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_text_sensor.h +0 -1
- esphome/components/ms5611/ms5611.cpp +0 -1
- esphome/components/ms8607/ms8607.cpp +0 -1
- esphome/components/msa3xx/msa3xx.cpp +0 -2
- esphome/components/my9231/my9231.cpp +0 -2
- esphome/components/nau7802/nau7802.cpp +0 -1
- esphome/components/neopixelbus/light.py +3 -0
- esphome/components/network/util.cpp +29 -0
- esphome/components/nextion/nextion.cpp +0 -1
- esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
- esphome/components/npi19/npi19.cpp +0 -2
- esphome/components/nrf52/__init__.py +223 -0
- esphome/components/nrf52/boards.py +34 -0
- esphome/components/nrf52/const.py +18 -0
- esphome/components/nrf52/gpio.py +79 -0
- esphome/components/number/__init__.py +2 -1
- esphome/components/one_wire/__init__.py +1 -2
- esphome/components/one_wire/one_wire.cpp +0 -2
- esphome/components/one_wire/one_wire.h +0 -2
- esphome/components/opentherm/hub.cpp +0 -1
- esphome/components/opentherm/number/__init__.py +2 -2
- esphome/components/openthread/__init__.py +2 -3
- esphome/components/openthread/openthread.cpp +30 -13
- esphome/components/openthread/openthread.h +3 -0
- esphome/components/openthread/openthread_esp.cpp +3 -1
- esphome/components/opt3001/sensor.py +2 -6
- esphome/components/output/__init__.py +38 -0
- esphome/components/output/automation.h +24 -0
- esphome/components/output/switch/output_switch.cpp +0 -2
- esphome/components/packages/__init__.py +1 -2
- esphome/components/packet_transport/__init__.py +4 -3
- esphome/components/pca6416a/pca6416a.cpp +0 -1
- esphome/components/pca9554/pca9554.cpp +0 -1
- esphome/components/pca9685/pca9685_output.cpp +0 -2
- esphome/components/pcf85063/pcf85063.cpp +0 -1
- esphome/components/pcf8563/pcf8563.cpp +0 -1
- esphome/components/pcf8574/pcf8574.cpp +0 -1
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
- esphome/components/pipsolar/sensor/__init__.py +1 -1
- esphome/components/pm2005/pm2005.cpp +0 -1
- esphome/components/pmsa003i/pmsa003i.cpp +0 -2
- esphome/components/pmwcs3/sensor.py +1 -2
- esphome/components/pn532/pn532.cpp +0 -2
- esphome/components/pn532_spi/pn532_spi.cpp +0 -2
- esphome/components/power_supply/power_supply.cpp +7 -10
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/psram/__init__.py +2 -1
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
- esphome/components/pulse_counter/sensor.py +9 -6
- esphome/components/pylontech/pylontech.cpp +0 -1
- esphome/components/qmc5883l/qmc5883l.cpp +0 -1
- esphome/components/qmp6988/qmp6988.cpp +0 -2
- esphome/components/qspi_dbi/display.py +2 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
- esphome/components/qwiic_pir/binary_sensor.py +2 -3
- esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
- esphome/components/rc522/rc522.cpp +9 -31
- esphome/components/rc522_spi/rc522_spi.cpp +0 -1
- esphome/components/remote_base/__init__.py +5 -6
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
- esphome/components/remote_transmitter/__init__.py +26 -0
- esphome/components/remote_transmitter/automation.h +18 -0
- esphome/components/remote_transmitter/remote_transmitter.h +2 -1
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
- esphome/components/resampler/speaker/__init__.py +4 -5
- esphome/components/rf_bridge/__init__.py +4 -8
- esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
- esphome/components/rp2040/__init__.py +3 -1
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
- esphome/components/rp2040_pio_led_strip/light.py +1 -2
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
- esphome/components/rpi_dpi_rgb/display.py +13 -15
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
- esphome/components/runtime_stats/__init__.py +34 -0
- esphome/components/runtime_stats/runtime_stats.cpp +102 -0
- esphome/components/runtime_stats/runtime_stats.h +132 -0
- esphome/components/scd30/scd30.cpp +0 -2
- esphome/components/scd30/sensor.py +1 -2
- esphome/components/scd4x/scd4x.cpp +0 -1
- esphome/components/scd4x/sensor.py +1 -3
- esphome/components/sdl/display.py +3 -1
- esphome/components/sdl/sdl_esphome.cpp +0 -2
- esphome/components/sdp3x/sdp3x.cpp +0 -2
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
- esphome/components/select/__init__.py +2 -3
- esphome/components/select/select_traits.cpp +1 -1
- esphome/components/select/select_traits.h +1 -1
- esphome/components/sen0321/sen0321.cpp +0 -1
- esphome/components/sen5x/sen5x.cpp +0 -2
- esphome/components/sensor/__init__.py +36 -4
- esphome/components/sensor/filter.cpp +49 -10
- esphome/components/sensor/filter.h +22 -7
- esphome/components/sensor/sensor.cpp +0 -1
- esphome/components/sensor/sensor.h +0 -9
- esphome/components/sfa30/sfa30.cpp +0 -4
- esphome/components/sgp30/sgp30.cpp +0 -2
- esphome/components/sgp4x/sensor.py +1 -1
- esphome/components/sgp4x/sgp4x.cpp +0 -2
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
- esphome/components/sht3xd/sht3xd.cpp +0 -2
- esphome/components/sht4x/sht4x.cpp +0 -2
- esphome/components/shtcx/shtcx.cpp +0 -1
- esphome/components/sim800l/__init__.py +2 -4
- esphome/components/sm16716/sm16716.cpp +0 -1
- esphome/components/sm2135/sm2135.cpp +0 -1
- esphome/components/sm2235/sm2235.cpp +0 -1
- esphome/components/sm2335/sm2335.cpp +0 -1
- esphome/components/sn74hc165/sn74hc165.cpp +0 -1
- esphome/components/sn74hc595/sn74hc595.cpp +0 -1
- esphome/components/sntp/sntp_component.cpp +0 -1
- esphome/components/sound_level/sensor.py +1 -1
- esphome/components/speaker/media_player/__init__.py +21 -33
- esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
- esphome/components/spi/__init__.py +29 -13
- esphome/components/spi/spi.cpp +0 -2
- esphome/components/spi_device/spi_device.cpp +1 -4
- esphome/components/sprinkler/__init__.py +4 -4
- esphome/components/sps30/sps30.cpp +0 -1
- esphome/components/ssd1306_base/__init__.py +11 -11
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
- esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
- esphome/components/st7567_spi/st7567_spi.cpp +0 -1
- esphome/components/st7701s/display.py +10 -14
- esphome/components/st7701s/st7701s.cpp +0 -3
- esphome/components/st7735/st7735.cpp +0 -1
- esphome/components/st7789v/st7789v.cpp +0 -1
- esphome/components/st7920/st7920.cpp +0 -1
- esphome/components/status_led/light/status_led_light.cpp +0 -2
- esphome/components/status_led/status_led.cpp +0 -1
- esphome/components/stepper/__init__.py +2 -4
- esphome/components/sts3x/sts3x.cpp +0 -1
- esphome/components/substitutions/__init__.py +10 -16
- esphome/components/substitutions/jinja.py +24 -1
- esphome/components/sun/__init__.py +2 -3
- esphome/components/switch/__init__.py +31 -1
- esphome/components/switch/automation.h +24 -0
- esphome/components/switch/switch.cpp +8 -0
- esphome/components/switch/switch.h +8 -0
- esphome/components/sx126x/sx126x.cpp +0 -2
- esphome/components/sx127x/sx127x.cpp +0 -2
- esphome/components/sx1509/__init__.py +7 -5
- esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
- esphome/components/sx1509/sx1509.cpp +0 -2
- esphome/components/syslog/esphome_syslog.cpp +1 -1
- esphome/components/tc74/tc74.cpp +0 -1
- esphome/components/tca9548a/tca9548a.cpp +0 -1
- esphome/components/tca9555/tca9555.cpp +0 -1
- esphome/components/tcs34725/tcs34725.cpp +0 -1
- esphome/components/tee501/tee501.cpp +0 -1
- esphome/components/tem3200/tem3200.cpp +0 -2
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
- esphome/components/template/cover/template_cover.cpp +0 -1
- esphome/components/template/select/template_select.cpp +0 -1
- esphome/components/template/text/template_text.cpp +0 -2
- esphome/components/template/valve/template_valve.cpp +0 -1
- esphome/components/text/__init__.py +0 -1
- esphome/components/text/text_traits.h +2 -0
- esphome/components/text_sensor/__init__.py +2 -1
- esphome/components/text_sensor/text_sensor.cpp +0 -2
- esphome/components/text_sensor/text_sensor.h +0 -8
- esphome/components/thermostat/climate.py +4 -4
- esphome/components/time/__init__.py +7 -4
- esphome/components/time/real_time_clock.cpp +16 -3
- esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
- esphome/components/tlc5947/tlc5947.cpp +0 -2
- esphome/components/tlc5971/tlc5971.cpp +0 -2
- esphome/components/tm1621/tm1621.cpp +0 -2
- esphome/components/tm1637/tm1637.cpp +0 -2
- esphome/components/tm1638/tm1638.cpp +0 -2
- esphome/components/tm1651/__init__.py +45 -48
- esphome/components/tm1651/tm1651.cpp +213 -47
- esphome/components/tm1651/tm1651.h +37 -32
- esphome/components/tmp117/tmp117.cpp +0 -2
- esphome/components/tsl2561/tsl2561.cpp +0 -1
- esphome/components/tsl2591/tsl2591.cpp +0 -1
- esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
- esphome/components/tuya/climate/__init__.py +9 -10
- esphome/components/tuya/number/__init__.py +8 -6
- esphome/components/tx20/tx20.cpp +0 -1
- esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
- esphome/components/uart/uart_component_esp8266.cpp +0 -1
- esphome/components/uart/uart_component_esp_idf.cpp +0 -2
- esphome/components/uart/uart_component_libretiny.cpp +0 -2
- esphome/components/uart/uart_component_rp2040.cpp +0 -2
- esphome/components/udp/__init__.py +1 -1
- esphome/components/ufire_ec/sensor.py +1 -2
- esphome/components/ufire_ec/ufire_ec.cpp +0 -2
- esphome/components/ufire_ise/sensor.py +1 -2
- esphome/components/ufire_ise/ufire_ise.cpp +0 -2
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
- esphome/components/update/__init__.py +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
- esphome/components/usb_host/usb_host_client.cpp +0 -1
- esphome/components/usb_host/usb_host_component.cpp +0 -1
- esphome/components/valve/__init__.py +0 -1
- esphome/components/veml3235/veml3235.cpp +0 -3
- esphome/components/veml7700/veml7700.cpp +0 -2
- esphome/components/version/version_text_sensor.cpp +0 -1
- esphome/components/version/version_text_sensor.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
- esphome/components/voice_assistant/voice_assistant.cpp +9 -8
- esphome/components/web_server/__init__.py +13 -0
- esphome/components/web_server/web_server.cpp +187 -352
- esphome/components/web_server/web_server.h +61 -1
- esphome/components/web_server_base/__init__.py +1 -1
- esphome/components/web_server_base/web_server_base.cpp +2 -0
- esphome/components/web_server_base/web_server_base.h +6 -0
- esphome/components/web_server_idf/web_server_idf.cpp +10 -8
- esphome/components/web_server_idf/web_server_idf.h +2 -0
- esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
- esphome/components/weikai_spi/weikai_spi.cpp +1 -1
- esphome/components/wifi/__init__.py +8 -43
- esphome/components/wifi/wifi_component.cpp +100 -36
- esphome/components/wifi/wifi_component.h +5 -1
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
- esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
- esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
- esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
- esphome/components/wireguard/wireguard.cpp +0 -2
- esphome/components/x9c/x9c.cpp +0 -2
- esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
- esphome/components/xl9535/xl9535.cpp +0 -2
- esphome/components/zephyr/__init__.py +252 -0
- esphome/components/zephyr/const.py +16 -0
- esphome/components/zephyr/core.cpp +90 -0
- esphome/components/zephyr/gpio.cpp +120 -0
- esphome/components/zephyr/gpio.h +38 -0
- esphome/components/zephyr/pre_build.py.script +4 -0
- esphome/components/zephyr/preferences.cpp +156 -0
- esphome/components/zephyr/preferences.h +13 -0
- esphome/config.py +38 -16
- esphome/config_helpers.py +1 -2
- esphome/config_validation.py +8 -15
- esphome/const.py +26 -1
- esphome/core/__init__.py +88 -51
- esphome/core/application.cpp +75 -21
- esphome/core/application.h +106 -171
- esphome/core/color.h +10 -0
- esphome/core/component.cpp +41 -25
- esphome/core/component.h +9 -6
- esphome/core/component_iterator.cpp +61 -261
- esphome/core/component_iterator.h +15 -0
- esphome/core/config.py +26 -11
- esphome/core/defines.h +40 -2
- esphome/core/entity_base.h +18 -0
- esphome/core/entity_helpers.py +41 -6
- esphome/core/helpers.cpp +8 -15
- esphome/core/helpers.h +60 -6
- esphome/core/lock_free_queue.h +1 -1
- esphome/core/scheduler.cpp +277 -74
- esphome/core/scheduler.h +89 -27
- esphome/cpp_generator.py +2 -6
- esphome/cpp_helpers.py +1 -1
- esphome/dashboard/dashboard.py +2 -3
- esphome/dashboard/dns.py +2 -8
- esphome/dashboard/web_server.py +34 -19
- esphome/espota2.py +1 -4
- esphome/git.py +3 -1
- esphome/helpers.py +23 -4
- esphome/log.py +3 -1
- esphome/mqtt.py +3 -5
- esphome/platformio_api.py +7 -4
- esphome/types.py +12 -0
- esphome/util.py +20 -8
- esphome/voluptuous_schema.py +4 -3
- esphome/vscode.py +1 -2
- esphome/wizard.py +1 -4
- esphome/writer.py +5 -107
- esphome/yaml_util.py +7 -5
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/METADATA +12 -13
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/RECORD +753 -673
- esphome/components/mipi_spi/models/commands.py +0 -82
- /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/WHEEL +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#ifdef USE_ESP32
|
|
4
|
+
|
|
5
|
+
#include "espnow_err.h"
|
|
6
|
+
|
|
7
|
+
#include <cstdint>
|
|
8
|
+
#include <cstring>
|
|
9
|
+
#include <functional>
|
|
10
|
+
#include <memory>
|
|
11
|
+
#include <vector>
|
|
12
|
+
|
|
13
|
+
#include <esp_err.h>
|
|
14
|
+
#include <esp_idf_version.h>
|
|
15
|
+
#include <esp_now.h>
|
|
16
|
+
|
|
17
|
+
namespace esphome::espnow {
|
|
18
|
+
|
|
19
|
+
static const uint8_t ESPNOW_BROADCAST_ADDR[ESP_NOW_ETH_ALEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
|
20
|
+
static const uint8_t ESPNOW_MULTICAST_ADDR[ESP_NOW_ETH_ALEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE};
|
|
21
|
+
|
|
22
|
+
struct WifiPacketRxControl {
|
|
23
|
+
int8_t rssi; // Received Signal Strength Indicator (RSSI) of packet, unit: dBm
|
|
24
|
+
uint32_t timestamp; // Timestamp in microseconds when the packet was received, precise only if modem sleep or
|
|
25
|
+
// light sleep is not enabled
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
struct ESPNowRecvInfo {
|
|
29
|
+
uint8_t src_addr[ESP_NOW_ETH_ALEN]; /**< Source address of ESPNOW packet */
|
|
30
|
+
uint8_t des_addr[ESP_NOW_ETH_ALEN]; /**< Destination address of ESPNOW packet */
|
|
31
|
+
wifi_pkt_rx_ctrl_t *rx_ctrl; /**< Rx control info of ESPNOW packet */
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
using send_callback_t = std::function<void(esp_err_t)>;
|
|
35
|
+
|
|
36
|
+
class ESPNowPacket {
|
|
37
|
+
public:
|
|
38
|
+
// NOLINTNEXTLINE(readability-identifier-naming)
|
|
39
|
+
enum esp_now_packet_type_t : uint8_t {
|
|
40
|
+
RECEIVED,
|
|
41
|
+
SENT,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// Constructor for received data
|
|
45
|
+
ESPNowPacket(const esp_now_recv_info_t *info, const uint8_t *data, int size) {
|
|
46
|
+
this->init_received_data_(info, data, size);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 5, 0)
|
|
50
|
+
// Constructor for sent data
|
|
51
|
+
ESPNowPacket(const esp_now_send_info_t *info, esp_now_send_status_t status) {
|
|
52
|
+
this->init_sent_data_(info->src_addr, status);
|
|
53
|
+
}
|
|
54
|
+
#else
|
|
55
|
+
// Constructor for sent data
|
|
56
|
+
ESPNowPacket(const uint8_t *mac_addr, esp_now_send_status_t status) { this->init_sent_data_(mac_addr, status); }
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
// Default constructor for pre-allocation in pool
|
|
60
|
+
ESPNowPacket() {}
|
|
61
|
+
|
|
62
|
+
void release() {}
|
|
63
|
+
|
|
64
|
+
void load_received_data(const esp_now_recv_info_t *info, const uint8_t *data, int size) {
|
|
65
|
+
this->type_ = RECEIVED;
|
|
66
|
+
this->init_received_data_(info, data, size);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
void load_sent_data(const uint8_t *mac_addr, esp_now_send_status_t status) {
|
|
70
|
+
this->type_ = SENT;
|
|
71
|
+
this->init_sent_data_(mac_addr, status);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Disable copy to prevent double-delete
|
|
75
|
+
ESPNowPacket(const ESPNowPacket &) = delete;
|
|
76
|
+
ESPNowPacket &operator=(const ESPNowPacket &) = delete;
|
|
77
|
+
|
|
78
|
+
union {
|
|
79
|
+
// NOLINTNEXTLINE(readability-identifier-naming)
|
|
80
|
+
struct received_data {
|
|
81
|
+
ESPNowRecvInfo info; // Information about the received packet
|
|
82
|
+
uint8_t data[ESP_NOW_MAX_DATA_LEN]; // Data received in the packet
|
|
83
|
+
uint8_t size; // Size of the received data
|
|
84
|
+
WifiPacketRxControl rx_ctrl; // Status of the received packet
|
|
85
|
+
} receive;
|
|
86
|
+
|
|
87
|
+
// NOLINTNEXTLINE(readability-identifier-naming)
|
|
88
|
+
struct sent_data {
|
|
89
|
+
uint8_t address[ESP_NOW_ETH_ALEN];
|
|
90
|
+
esp_now_send_status_t status;
|
|
91
|
+
} sent;
|
|
92
|
+
} packet_;
|
|
93
|
+
|
|
94
|
+
esp_now_packet_type_t type_;
|
|
95
|
+
|
|
96
|
+
esp_now_packet_type_t type() const { return this->type_; }
|
|
97
|
+
const ESPNowRecvInfo &get_receive_info() const { return this->packet_.receive.info; }
|
|
98
|
+
|
|
99
|
+
private:
|
|
100
|
+
void init_received_data_(const esp_now_recv_info_t *info, const uint8_t *data, int size) {
|
|
101
|
+
memcpy(this->packet_.receive.info.src_addr, info->src_addr, ESP_NOW_ETH_ALEN);
|
|
102
|
+
memcpy(this->packet_.receive.info.des_addr, info->des_addr, ESP_NOW_ETH_ALEN);
|
|
103
|
+
memcpy(this->packet_.receive.data, data, size);
|
|
104
|
+
this->packet_.receive.size = size;
|
|
105
|
+
|
|
106
|
+
this->packet_.receive.rx_ctrl.rssi = info->rx_ctrl->rssi;
|
|
107
|
+
this->packet_.receive.rx_ctrl.timestamp = info->rx_ctrl->timestamp;
|
|
108
|
+
|
|
109
|
+
this->packet_.receive.info.rx_ctrl = reinterpret_cast<wifi_pkt_rx_ctrl_t *>(&this->packet_.receive.rx_ctrl);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
void init_sent_data_(const uint8_t *mac_addr, esp_now_send_status_t status) {
|
|
113
|
+
memcpy(this->packet_.sent.address, mac_addr, ESP_NOW_ETH_ALEN);
|
|
114
|
+
this->packet_.sent.status = status;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
class ESPNowSendPacket {
|
|
119
|
+
public:
|
|
120
|
+
ESPNowSendPacket(const uint8_t *peer_address, const uint8_t *payload, size_t size, const send_callback_t &&callback)
|
|
121
|
+
: callback_(callback) {
|
|
122
|
+
this->init_data_(peer_address, payload, size);
|
|
123
|
+
}
|
|
124
|
+
ESPNowSendPacket(const uint8_t *peer_address, const uint8_t *payload, size_t size) {
|
|
125
|
+
this->init_data_(peer_address, payload, size);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Default constructor for pre-allocation in pool
|
|
129
|
+
ESPNowSendPacket() {}
|
|
130
|
+
|
|
131
|
+
void release() {}
|
|
132
|
+
|
|
133
|
+
// Disable copy to prevent double-delete
|
|
134
|
+
ESPNowSendPacket(const ESPNowSendPacket &) = delete;
|
|
135
|
+
ESPNowSendPacket &operator=(const ESPNowSendPacket &) = delete;
|
|
136
|
+
|
|
137
|
+
void load_data(const uint8_t *peer_address, const uint8_t *payload, size_t size, const send_callback_t &callback) {
|
|
138
|
+
this->init_data_(peer_address, payload, size);
|
|
139
|
+
this->callback_ = callback;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
void load_data(const uint8_t *peer_address, const uint8_t *payload, size_t size) {
|
|
143
|
+
this->init_data_(peer_address, payload, size);
|
|
144
|
+
this->callback_ = nullptr; // Reset callback
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
uint8_t address_[ESP_NOW_ETH_ALEN]{0}; // MAC address of the peer to send the packet to
|
|
148
|
+
uint8_t data_[ESP_NOW_MAX_DATA_LEN]{0}; // Data to send
|
|
149
|
+
uint8_t size_{0}; // Size of the data to send, must be <= ESP_NOW_MAX_DATA_LEN
|
|
150
|
+
send_callback_t callback_{nullptr}; // Callback to call when the send operation is complete
|
|
151
|
+
|
|
152
|
+
private:
|
|
153
|
+
void init_data_(const uint8_t *peer_address, const uint8_t *payload, size_t size) {
|
|
154
|
+
memcpy(this->address_, peer_address, ESP_NOW_ETH_ALEN);
|
|
155
|
+
if (size > ESP_NOW_MAX_DATA_LEN) {
|
|
156
|
+
this->size_ = 0;
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
this->size_ = size;
|
|
160
|
+
memcpy(this->data_, payload, this->size_);
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
} // namespace esphome::espnow
|
|
165
|
+
|
|
166
|
+
#endif // USE_ESP32
|
|
@@ -112,7 +112,7 @@ def _is_framework_spi_polling_mode_supported():
|
|
|
112
112
|
return True
|
|
113
113
|
if cv.Version(5, 3, 0) > framework_version >= cv.Version(5, 2, 1):
|
|
114
114
|
return True
|
|
115
|
-
if cv.Version(5, 2, 0) > framework_version >= cv.Version(5, 1, 4):
|
|
115
|
+
if cv.Version(5, 2, 0) > framework_version >= cv.Version(5, 1, 4): # noqa: SIM103
|
|
116
116
|
return True
|
|
117
117
|
return False
|
|
118
118
|
if CORE.using_arduino:
|
|
@@ -342,5 +342,11 @@ async def to_code(config):
|
|
|
342
342
|
|
|
343
343
|
cg.add_define("USE_ETHERNET")
|
|
344
344
|
|
|
345
|
+
# Disable WiFi when using Ethernet to save memory
|
|
346
|
+
if CORE.using_esp_idf:
|
|
347
|
+
add_idf_sdkconfig_option("CONFIG_ESP_WIFI_ENABLED", False)
|
|
348
|
+
# Also disable WiFi/BT coexistence since WiFi is disabled
|
|
349
|
+
add_idf_sdkconfig_option("CONFIG_SW_COEXIST_ENABLE", False)
|
|
350
|
+
|
|
345
351
|
if CORE.using_arduino:
|
|
346
352
|
cg.add_library("WiFi", None)
|
|
@@ -25,6 +25,9 @@
|
|
|
25
25
|
#include "driver/gpio.h"
|
|
26
26
|
#include "esp_rom_gpio.h"
|
|
27
27
|
#include "esp_rom_sys.h"
|
|
28
|
+
#include "esp_idf_version.h"
|
|
29
|
+
|
|
30
|
+
#if defined(USE_ARDUINO) || ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 4, 2)
|
|
28
31
|
|
|
29
32
|
static const char *TAG = "jl1101";
|
|
30
33
|
#define PHY_CHECK(a, str, goto_tag, ...) \
|
|
@@ -336,4 +339,6 @@ esp_eth_phy_t *esp_eth_phy_new_jl1101(const eth_phy_config_t *config) {
|
|
|
336
339
|
err:
|
|
337
340
|
return NULL;
|
|
338
341
|
}
|
|
342
|
+
|
|
343
|
+
#endif /* USE_ARDUINO */
|
|
339
344
|
#endif /* USE_ESP32 */
|
|
@@ -54,7 +54,6 @@ EthernetComponent *global_eth_component; // NOLINT(cppcoreguidelines-avoid-non-
|
|
|
54
54
|
EthernetComponent::EthernetComponent() { global_eth_component = this; }
|
|
55
55
|
|
|
56
56
|
void EthernetComponent::setup() {
|
|
57
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
58
57
|
if (esp_reset_reason() != ESP_RST_DEEPSLEEP) {
|
|
59
58
|
// Delay here to allow power to stabilise before Ethernet is initialized.
|
|
60
59
|
delay(300); // NOLINT
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
#include "esp_eth_mac.h"
|
|
12
12
|
#include "esp_netif.h"
|
|
13
13
|
#include "esp_mac.h"
|
|
14
|
+
#include "esp_idf_version.h"
|
|
14
15
|
|
|
15
16
|
namespace esphome {
|
|
16
17
|
namespace ethernet {
|
|
@@ -153,7 +154,10 @@ class EthernetComponent : public Component {
|
|
|
153
154
|
|
|
154
155
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
155
156
|
extern EthernetComponent *global_eth_component;
|
|
157
|
+
|
|
158
|
+
#if defined(USE_ARDUINO) || ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 4, 2)
|
|
156
159
|
extern "C" esp_eth_phy_t *esp_eth_phy_new_jl1101(const eth_phy_config_t *config);
|
|
160
|
+
#endif
|
|
157
161
|
|
|
158
162
|
} // namespace ethernet
|
|
159
163
|
} // namespace esphome
|
|
@@ -29,7 +29,6 @@ class IPAddressEthernetInfo : public PollingComponent, public text_sensor::TextS
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
float get_setup_priority() const override { return setup_priority::ETHERNET; }
|
|
32
|
-
std::string unique_id() override { return get_mac_address() + "-ethernetinfo"; }
|
|
33
32
|
void dump_config() override;
|
|
34
33
|
void add_ip_sensors(uint8_t index, text_sensor::TextSensor *s) { this->ip_sensors_[index] = s; }
|
|
35
34
|
|
|
@@ -52,7 +51,6 @@ class DNSAddressEthernetInfo : public PollingComponent, public text_sensor::Text
|
|
|
52
51
|
}
|
|
53
52
|
}
|
|
54
53
|
float get_setup_priority() const override { return setup_priority::ETHERNET; }
|
|
55
|
-
std::string unique_id() override { return get_mac_address() + "-ethernetinfo-dns"; }
|
|
56
54
|
void dump_config() override;
|
|
57
55
|
|
|
58
56
|
protected:
|
|
@@ -63,7 +61,6 @@ class MACAddressEthernetInfo : public Component, public text_sensor::TextSensor
|
|
|
63
61
|
public:
|
|
64
62
|
void setup() override { this->publish_state(ethernet::global_eth_component->get_eth_mac_address_pretty()); }
|
|
65
63
|
float get_setup_priority() const override { return setup_priority::ETHERNET; }
|
|
66
|
-
std::string unique_id() override { return get_mac_address() + "-ethernetinfo-mac"; }
|
|
67
64
|
void dump_config() override;
|
|
68
65
|
};
|
|
69
66
|
|
|
@@ -1,5 +1,97 @@
|
|
|
1
|
+
from esphome.automation import Trigger, build_automation, validate_automation
|
|
1
2
|
import esphome.codegen as cg
|
|
3
|
+
from esphome.components.esp8266 import CONF_RESTORE_FROM_FLASH, KEY_ESP8266
|
|
4
|
+
import esphome.config_validation as cv
|
|
5
|
+
from esphome.const import (
|
|
6
|
+
CONF_ID,
|
|
7
|
+
CONF_TRIGGER_ID,
|
|
8
|
+
PLATFORM_BK72XX,
|
|
9
|
+
PLATFORM_ESP32,
|
|
10
|
+
PLATFORM_ESP8266,
|
|
11
|
+
PLATFORM_LN882X,
|
|
12
|
+
PLATFORM_RTL87XX,
|
|
13
|
+
)
|
|
14
|
+
from esphome.core import CORE
|
|
15
|
+
from esphome.final_validate import full_config
|
|
2
16
|
|
|
3
17
|
CODEOWNERS = ["@anatoly-savchenkov"]
|
|
4
18
|
|
|
5
19
|
factory_reset_ns = cg.esphome_ns.namespace("factory_reset")
|
|
20
|
+
FactoryResetComponent = factory_reset_ns.class_("FactoryResetComponent", cg.Component)
|
|
21
|
+
FastBootTrigger = factory_reset_ns.class_("FastBootTrigger", Trigger, cg.Component)
|
|
22
|
+
|
|
23
|
+
CONF_MAX_DELAY = "max_delay"
|
|
24
|
+
CONF_RESETS_REQUIRED = "resets_required"
|
|
25
|
+
CONF_ON_INCREMENT = "on_increment"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _validate(config):
|
|
29
|
+
if CONF_RESETS_REQUIRED in config:
|
|
30
|
+
return cv.only_on(
|
|
31
|
+
[
|
|
32
|
+
PLATFORM_BK72XX,
|
|
33
|
+
PLATFORM_ESP32,
|
|
34
|
+
PLATFORM_ESP8266,
|
|
35
|
+
PLATFORM_LN882X,
|
|
36
|
+
PLATFORM_RTL87XX,
|
|
37
|
+
]
|
|
38
|
+
)(config)
|
|
39
|
+
|
|
40
|
+
if CONF_ON_INCREMENT in config:
|
|
41
|
+
raise cv.Invalid(
|
|
42
|
+
f"'{CONF_ON_INCREMENT}' requires a value for '{CONF_RESETS_REQUIRED}'"
|
|
43
|
+
)
|
|
44
|
+
return config
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
CONFIG_SCHEMA = cv.All(
|
|
48
|
+
cv.Schema(
|
|
49
|
+
{
|
|
50
|
+
cv.GenerateID(): cv.declare_id(FactoryResetComponent),
|
|
51
|
+
cv.Optional(CONF_MAX_DELAY, default="10s"): cv.All(
|
|
52
|
+
cv.positive_time_period_seconds,
|
|
53
|
+
cv.Range(min=cv.TimePeriod(milliseconds=1000)),
|
|
54
|
+
),
|
|
55
|
+
cv.Optional(CONF_RESETS_REQUIRED): cv.positive_not_null_int,
|
|
56
|
+
cv.Optional(CONF_ON_INCREMENT): validate_automation(
|
|
57
|
+
{
|
|
58
|
+
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(FastBootTrigger),
|
|
59
|
+
}
|
|
60
|
+
),
|
|
61
|
+
}
|
|
62
|
+
).extend(cv.COMPONENT_SCHEMA),
|
|
63
|
+
_validate,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _final_validate(config):
|
|
68
|
+
if CORE.is_esp8266 and CONF_RESETS_REQUIRED in config:
|
|
69
|
+
fconfig = full_config.get()
|
|
70
|
+
if not fconfig.get_config_for_path([KEY_ESP8266, CONF_RESTORE_FROM_FLASH]):
|
|
71
|
+
raise cv.Invalid(
|
|
72
|
+
"'resets_required' needs 'restore_from_flash' to be enabled in the 'esp8266' configuration"
|
|
73
|
+
)
|
|
74
|
+
return config
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
FINAL_VALIDATE_SCHEMA = _final_validate
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
async def to_code(config):
|
|
81
|
+
if reset_count := config.get(CONF_RESETS_REQUIRED):
|
|
82
|
+
var = cg.new_Pvariable(
|
|
83
|
+
config[CONF_ID],
|
|
84
|
+
reset_count,
|
|
85
|
+
config[CONF_MAX_DELAY].total_milliseconds,
|
|
86
|
+
)
|
|
87
|
+
await cg.register_component(var, config)
|
|
88
|
+
for conf in config.get(CONF_ON_INCREMENT, []):
|
|
89
|
+
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
|
90
|
+
await build_automation(
|
|
91
|
+
trigger,
|
|
92
|
+
[
|
|
93
|
+
(cg.uint8, "x"),
|
|
94
|
+
(cg.uint8, "target"),
|
|
95
|
+
],
|
|
96
|
+
conf,
|
|
97
|
+
)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#include "factory_reset.h"
|
|
2
|
+
|
|
3
|
+
#include "esphome/core/application.h"
|
|
4
|
+
#include "esphome/core/hal.h"
|
|
5
|
+
#include "esphome/core/log.h"
|
|
6
|
+
|
|
7
|
+
#include <cinttypes>
|
|
8
|
+
|
|
9
|
+
#if !defined(USE_RP2040) && !defined(USE_HOST)
|
|
10
|
+
|
|
11
|
+
namespace esphome {
|
|
12
|
+
namespace factory_reset {
|
|
13
|
+
|
|
14
|
+
static const char *const TAG = "factory_reset";
|
|
15
|
+
static const uint32_t POWER_CYCLES_KEY = 0xFA5C0DE;
|
|
16
|
+
|
|
17
|
+
static bool was_power_cycled() {
|
|
18
|
+
#ifdef USE_ESP32
|
|
19
|
+
return esp_reset_reason() == ESP_RST_POWERON;
|
|
20
|
+
#endif
|
|
21
|
+
#ifdef USE_ESP8266
|
|
22
|
+
auto reset_reason = EspClass::getResetReason();
|
|
23
|
+
return strcasecmp(reset_reason.c_str(), "power On") == 0 || strcasecmp(reset_reason.c_str(), "external system") == 0;
|
|
24
|
+
#endif
|
|
25
|
+
#ifdef USE_LIBRETINY
|
|
26
|
+
auto reason = lt_get_reboot_reason();
|
|
27
|
+
return reason == REBOOT_REASON_POWER || reason == REBOOT_REASON_HARDWARE;
|
|
28
|
+
#endif
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
void FactoryResetComponent::dump_config() {
|
|
32
|
+
uint8_t count = 0;
|
|
33
|
+
this->flash_.load(&count);
|
|
34
|
+
ESP_LOGCONFIG(TAG, "Factory Reset by Reset:");
|
|
35
|
+
ESP_LOGCONFIG(TAG,
|
|
36
|
+
" Max interval between resets %" PRIu32 " seconds\n"
|
|
37
|
+
" Current count: %u\n"
|
|
38
|
+
" Factory reset after %u resets",
|
|
39
|
+
this->max_interval_ / 1000, count, this->required_count_);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
void FactoryResetComponent::save_(uint8_t count) {
|
|
43
|
+
this->flash_.save(&count);
|
|
44
|
+
global_preferences->sync();
|
|
45
|
+
this->defer([count, this] { this->increment_callback_.call(count, this->required_count_); });
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void FactoryResetComponent::setup() {
|
|
49
|
+
this->flash_ = global_preferences->make_preference<uint8_t>(POWER_CYCLES_KEY, true);
|
|
50
|
+
if (was_power_cycled()) {
|
|
51
|
+
uint8_t count = 0;
|
|
52
|
+
this->flash_.load(&count);
|
|
53
|
+
// this is a power on reset or external system reset
|
|
54
|
+
count++;
|
|
55
|
+
if (count == this->required_count_) {
|
|
56
|
+
ESP_LOGW(TAG, "Reset count reached, factory resetting");
|
|
57
|
+
global_preferences->reset();
|
|
58
|
+
// delay to allow log to be sent
|
|
59
|
+
delay(100); // NOLINT
|
|
60
|
+
App.safe_reboot(); // should not return
|
|
61
|
+
}
|
|
62
|
+
this->save_(count);
|
|
63
|
+
ESP_LOGD(TAG, "Power on reset detected, incremented count to %u", count);
|
|
64
|
+
this->set_timeout(this->max_interval_, [this]() {
|
|
65
|
+
ESP_LOGD(TAG, "No reset in the last %" PRIu32 " seconds, resetting count", this->max_interval_ / 1000);
|
|
66
|
+
this->save_(0); // reset count
|
|
67
|
+
});
|
|
68
|
+
} else {
|
|
69
|
+
this->save_(0); // reset count if not a power cycle
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
} // namespace factory_reset
|
|
74
|
+
} // namespace esphome
|
|
75
|
+
|
|
76
|
+
#endif // !defined(USE_RP2040) && !defined(USE_HOST)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "esphome/core/component.h"
|
|
4
|
+
#include "esphome/core/automation.h"
|
|
5
|
+
#include "esphome/core/preferences.h"
|
|
6
|
+
#if !defined(USE_RP2040) && !defined(USE_HOST)
|
|
7
|
+
|
|
8
|
+
#ifdef USE_ESP32
|
|
9
|
+
#include <esp_system.h>
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
namespace esphome {
|
|
13
|
+
namespace factory_reset {
|
|
14
|
+
class FactoryResetComponent : public Component {
|
|
15
|
+
public:
|
|
16
|
+
FactoryResetComponent(uint8_t required_count, uint32_t max_interval)
|
|
17
|
+
: required_count_(required_count), max_interval_(max_interval) {}
|
|
18
|
+
|
|
19
|
+
void dump_config() override;
|
|
20
|
+
void setup() override;
|
|
21
|
+
void add_increment_callback(std::function<void(uint8_t, uint8_t)> &&callback) {
|
|
22
|
+
this->increment_callback_.add(std::move(callback));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
protected:
|
|
26
|
+
~FactoryResetComponent() = default;
|
|
27
|
+
void save_(uint8_t count);
|
|
28
|
+
ESPPreferenceObject flash_{}; // saves the number of fast power cycles
|
|
29
|
+
uint8_t required_count_; // The number of boot attempts before fast boot is enabled
|
|
30
|
+
uint32_t max_interval_; // max interval between power cycles
|
|
31
|
+
CallbackManager<void(uint8_t, uint8_t)> increment_callback_{};
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
class FastBootTrigger : public Trigger<uint8_t, uint8_t> {
|
|
35
|
+
public:
|
|
36
|
+
explicit FastBootTrigger(FactoryResetComponent *parent) {
|
|
37
|
+
parent->add_increment_callback([this](uint8_t current, uint8_t target) { this->trigger(current, target); });
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
} // namespace factory_reset
|
|
41
|
+
} // namespace esphome
|
|
42
|
+
|
|
43
|
+
#endif // !defined(USE_RP2040) && !defined(USE_HOST)
|
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
#pragma once
|
|
5
5
|
|
|
6
6
|
namespace esphome {
|
|
7
|
+
|
|
8
|
+
#ifdef USE_API
|
|
9
|
+
namespace api {
|
|
10
|
+
class APIConnection;
|
|
11
|
+
} // namespace api
|
|
12
|
+
#endif
|
|
13
|
+
|
|
7
14
|
namespace fan {
|
|
8
15
|
|
|
9
16
|
class FanTraits {
|
|
@@ -36,6 +43,15 @@ class FanTraits {
|
|
|
36
43
|
bool supports_preset_modes() const { return !this->preset_modes_.empty(); }
|
|
37
44
|
|
|
38
45
|
protected:
|
|
46
|
+
#ifdef USE_API
|
|
47
|
+
// The API connection is a friend class to access internal methods
|
|
48
|
+
friend class api::APIConnection;
|
|
49
|
+
// This method returns a reference to the internal preset modes set.
|
|
50
|
+
// It is used by the API to avoid copying data when encoding messages.
|
|
51
|
+
// Warning: Do not use this method outside of the API connection code.
|
|
52
|
+
// It returns a reference to internal data that can be invalidated.
|
|
53
|
+
const std::set<std::string> &supported_preset_modes_for_api_() const { return this->preset_modes_; }
|
|
54
|
+
#endif
|
|
39
55
|
bool oscillation_{false};
|
|
40
56
|
bool speed_{false};
|
|
41
57
|
bool direction_{false};
|
|
@@ -9,7 +9,6 @@ namespace fastled_base {
|
|
|
9
9
|
static const char *const TAG = "fastled";
|
|
10
10
|
|
|
11
11
|
void FastLEDLightOutput::setup() {
|
|
12
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
13
12
|
this->controller_->init();
|
|
14
13
|
this->controller_->setLeds(this->leds_, this->num_leds_);
|
|
15
14
|
this->effect_data_ = new uint8_t[this->num_leds_]; // NOLINT
|
|
@@ -55,9 +55,7 @@ CONFIG_SCHEMA = cv.All(
|
|
|
55
55
|
async def to_code(config):
|
|
56
56
|
var = await fastled_base.new_fastled_light(config)
|
|
57
57
|
|
|
58
|
-
rgb_order = cg.RawExpression(
|
|
59
|
-
config[CONF_RGB_ORDER] if CONF_RGB_ORDER in config else "RGB"
|
|
60
|
-
)
|
|
58
|
+
rgb_order = cg.RawExpression(config.get(CONF_RGB_ORDER, "RGB"))
|
|
61
59
|
data_rate = None
|
|
62
60
|
|
|
63
61
|
if CONF_DATA_RATE in config:
|
|
@@ -57,8 +57,6 @@ void FingerprintGrowComponent::update() {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
void FingerprintGrowComponent::setup() {
|
|
60
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
61
|
-
|
|
62
60
|
this->has_sensing_pin_ = (this->sensing_pin_ != nullptr);
|
|
63
61
|
this->has_power_pin_ = (this->sensor_power_pin_ != nullptr);
|
|
64
62
|
|
|
@@ -15,6 +15,7 @@ from freetype import (
|
|
|
15
15
|
FT_LOAD_RENDER,
|
|
16
16
|
FT_LOAD_TARGET_MONO,
|
|
17
17
|
Face,
|
|
18
|
+
FT_Exception,
|
|
18
19
|
ft_pixel_mode_mono,
|
|
19
20
|
)
|
|
20
21
|
import requests
|
|
@@ -94,7 +95,14 @@ class FontCache(MutableMapping):
|
|
|
94
95
|
return self.store[self._keytransform(item)]
|
|
95
96
|
|
|
96
97
|
def __setitem__(self, key, value):
|
|
97
|
-
self.
|
|
98
|
+
transformed = self._keytransform(key)
|
|
99
|
+
try:
|
|
100
|
+
self.store[transformed] = Face(str(value))
|
|
101
|
+
except FT_Exception as exc:
|
|
102
|
+
file = transformed.split(":", 1)
|
|
103
|
+
raise cv.Invalid(
|
|
104
|
+
f"{file[0].capitalize()} {file[1]} is not a valid font file"
|
|
105
|
+
) from exc
|
|
98
106
|
|
|
99
107
|
|
|
100
108
|
FONT_CACHE = FontCache()
|
|
@@ -7,8 +7,6 @@ namespace fs3000 {
|
|
|
7
7
|
static const char *const TAG = "fs3000";
|
|
8
8
|
|
|
9
9
|
void FS3000Component::setup() {
|
|
10
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
11
|
-
|
|
12
10
|
if (model_ == FIVE) {
|
|
13
11
|
// datasheet gives 9 points to interpolate from for the 1005 model
|
|
14
12
|
static const uint16_t RAW_DATA_POINTS_1005[9] = {409, 915, 1522, 2066, 2523, 2908, 3256, 3572, 3686};
|
|
@@ -9,7 +9,6 @@ namespace ft5x06 {
|
|
|
9
9
|
static const char *const TAG = "ft5x06.touchscreen";
|
|
10
10
|
|
|
11
11
|
void FT5x06Touchscreen::setup() {
|
|
12
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
13
12
|
if (this->interrupt_pin_ != nullptr) {
|
|
14
13
|
this->interrupt_pin_->setup();
|
|
15
14
|
this->interrupt_pin_->pin_mode(gpio::FLAG_INPUT | gpio::FLAG_PULLUP);
|
|
@@ -50,7 +49,6 @@ void FT5x06Touchscreen::continue_setup_() {
|
|
|
50
49
|
this->y_raw_max_ = this->display_->get_native_height();
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
|
-
ESP_LOGCONFIG(TAG, "FT5x06 Touchscreen setup complete");
|
|
54
52
|
}
|
|
55
53
|
|
|
56
54
|
void FT5x06Touchscreen::update_touches() {
|
|
@@ -28,7 +28,6 @@ static const uint8_t FT63X6_ADDR_CHIP_ID = 0xA3;
|
|
|
28
28
|
static const char *const TAG = "FT63X6";
|
|
29
29
|
|
|
30
30
|
void FT63X6Touchscreen::setup() {
|
|
31
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
32
31
|
if (this->interrupt_pin_ != nullptr) {
|
|
33
32
|
this->interrupt_pin_->pin_mode(gpio::FLAG_INPUT | gpio::FLAG_PULLUP);
|
|
34
33
|
this->interrupt_pin_->setup();
|
|
@@ -17,7 +17,6 @@ static const uint8_t RESTART_CMD2 = 0xA5;
|
|
|
17
17
|
static const uint8_t READ_DELAY = 40; // minimum milliseconds from datasheet to safely read measurement result
|
|
18
18
|
|
|
19
19
|
void GLR01I2CComponent::setup() {
|
|
20
|
-
ESP_LOGCONFIG(TAG, "Setting up GL-R01 I2C...");
|
|
21
20
|
// Verify sensor presence
|
|
22
21
|
if (!this->read_byte_16(REG_VERSION, &this->version_)) {
|
|
23
22
|
ESP_LOGE(TAG, "Failed to communicate with GL-R01 I2C sensor!");
|
|
@@ -8,7 +8,6 @@ namespace gpio {
|
|
|
8
8
|
static const char *const TAG = "gpio.one_wire";
|
|
9
9
|
|
|
10
10
|
void GPIOOneWireBus::setup() {
|
|
11
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
12
11
|
this->t_pin_->setup();
|
|
13
12
|
this->t_pin_->pin_mode(gpio::FLAG_INPUT | gpio::FLAG_PULLUP);
|
|
14
13
|
// clear bus with 480µs high, otherwise initial reset in search might fail
|
|
@@ -8,8 +8,6 @@ static const char *const TAG = "switch.gpio";
|
|
|
8
8
|
|
|
9
9
|
float GPIOSwitch::get_setup_priority() const { return setup_priority::HARDWARE; }
|
|
10
10
|
void GPIOSwitch::setup() {
|
|
11
|
-
ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
|
|
12
|
-
|
|
13
11
|
bool initial_state = this->get_initial_state_with_restore_mode().value_or(false);
|
|
14
12
|
|
|
15
13
|
// write state before setup
|