esphome 2025.6.2__py3-none-any.whl → 2025.7.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 +1 -3
- esphome/codegen.py +2 -0
- esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
- esphome/components/adc/__init__.py +25 -1
- esphome/components/adc/adc_sensor.h +11 -11
- esphome/components/adc/adc_sensor_common.cpp +1 -1
- esphome/components/adc/adc_sensor_esp32.cpp +16 -8
- esphome/components/ade7880/ade7880.h +0 -2
- esphome/components/ads1115/ads1115.h +0 -1
- esphome/components/ads1118/ads1118.h +0 -1
- esphome/components/ags10/ags10.h +0 -2
- esphome/components/aic3204/aic3204.h +0 -1
- esphome/components/alarm_control_panel/__init__.py +5 -2
- esphome/components/alpha3/alpha3.h +0 -1
- esphome/components/am43/cover/am43_cover.h +0 -1
- esphome/components/am43/sensor/am43_sensor.h +0 -1
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
- esphome/components/anova/anova.cpp +5 -1
- esphome/components/anova/anova.h +0 -1
- esphome/components/apds9960/apds9960.cpp +1 -1
- esphome/components/api/__init__.py +42 -20
- esphome/components/api/api_connection.cpp +318 -391
- esphome/components/api/api_connection.h +206 -126
- esphome/components/api/api_frame_helper.cpp +89 -124
- esphome/components/api/api_frame_helper.h +57 -45
- esphome/components/api/api_pb2.cpp +414 -4350
- esphome/components/api/api_pb2.h +287 -198
- esphome/components/api/api_pb2_dump.cpp +4333 -0
- esphome/components/api/api_pb2_service.cpp +180 -425
- esphome/components/api/api_pb2_service.h +7 -6
- esphome/components/api/api_pb2_size.h +2 -4
- esphome/components/api/api_server.cpp +138 -167
- esphome/components/api/api_server.h +66 -12
- esphome/components/api/client.py +10 -4
- esphome/components/api/list_entities.cpp +36 -105
- esphome/components/api/list_entities.h +31 -23
- esphome/components/api/proto.h +26 -3
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- esphome/components/as5600/as5600.h +0 -1
- esphome/components/async_tcp/__init__.py +14 -5
- esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
- esphome/components/atm90e32/atm90e32.cpp +2 -1
- esphome/components/audio/audio_decoder.cpp +1 -1
- esphome/components/audio/audio_transfer_buffer.cpp +2 -2
- esphome/components/b_parasite/b_parasite.h +0 -1
- esphome/components/bedjet/bedjet_hub.cpp +5 -1
- esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
- esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
- esphome/components/bh1750/bh1750.cpp +5 -5
- esphome/components/binary_sensor/__init__.py +82 -5
- esphome/components/binary_sensor/automation.h +19 -1
- esphome/components/binary_sensor/binary_sensor.cpp +12 -30
- esphome/components/binary_sensor/binary_sensor.h +11 -25
- esphome/components/binary_sensor/filter.cpp +29 -24
- esphome/components/binary_sensor/filter.h +20 -10
- esphome/components/ble_client/output/ble_binary_output.h +0 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
- esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_sensor.h +0 -1
- esphome/components/ble_client/switch/ble_switch.h +0 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
- esphome/components/ble_presence/ble_presence_device.h +0 -1
- esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
- esphome/components/ble_scanner/ble_scanner.h +0 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
- esphome/components/bme680/sensor.py +1 -1
- esphome/components/bmp581/bmp581.h +0 -2
- esphome/components/button/__init__.py +5 -2
- esphome/components/camera/__init__.py +1 -0
- esphome/components/camera/camera.cpp +22 -0
- esphome/components/camera/camera.h +80 -0
- esphome/components/canbus/__init__.py +1 -0
- esphome/components/cap1188/cap1188.h +0 -1
- esphome/components/captive_portal/__init__.py +12 -2
- esphome/components/captive_portal/captive_portal.cpp +12 -2
- esphome/components/captive_portal/captive_portal.h +5 -2
- esphome/components/ccs811/ccs811.h +0 -2
- esphome/components/climate/__init__.py +5 -2
- esphome/components/cm1106/sensor.py +2 -2
- esphome/components/const/__init__.py +2 -0
- esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
- esphome/components/copy/button/copy_button.h +0 -1
- esphome/components/copy/cover/copy_cover.h +0 -1
- esphome/components/copy/fan/copy_fan.h +0 -1
- esphome/components/copy/lock/copy_lock.h +0 -1
- esphome/components/copy/number/copy_number.h +0 -1
- esphome/components/copy/select/copy_select.h +0 -1
- esphome/components/copy/sensor/copy_sensor.h +0 -1
- esphome/components/copy/switch/copy_switch.h +0 -1
- esphome/components/copy/text/copy_text.h +0 -1
- esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
- esphome/components/cover/__init__.py +5 -2
- esphome/components/cs5460a/cs5460a.h +0 -1
- esphome/components/datetime/__init__.py +4 -2
- esphome/components/debug/__init__.py +20 -0
- esphome/components/deep_sleep/__init__.py +43 -9
- esphome/components/demo/__init__.py +2 -2
- esphome/components/display/display.cpp +4 -3
- esphome/components/display/display.h +0 -2
- esphome/components/display/display_buffer.cpp +1 -1
- esphome/components/ds2484/__init__.py +1 -0
- esphome/components/ds2484/ds2484.cpp +209 -0
- esphome/components/ds2484/ds2484.h +43 -0
- esphome/components/ds2484/one_wire.py +37 -0
- esphome/components/duty_time/duty_time_sensor.h +0 -1
- esphome/components/ens160_base/ens160_base.h +0 -1
- esphome/components/es7210/es7210.h +0 -1
- esphome/components/es7243e/es7243e.h +0 -1
- esphome/components/es8156/es8156.h +0 -1
- esphome/components/es8311/es8311.h +0 -1
- esphome/components/es8388/es8388.h +0 -1
- esphome/components/esp32/__init__.py +102 -135
- esphome/components/esp32/core.cpp +0 -4
- esphome/components/esp32/gpio.h +1 -1
- esphome/components/esp32/helpers.cpp +69 -0
- esphome/components/esp32_ble/ble.cpp +5 -6
- esphome/components/esp32_ble/ble.h +29 -14
- esphome/components/esp32_ble/ble_event.h +6 -6
- esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
- esphome/components/esp32_ble_client/ble_client_base.h +24 -9
- esphome/components/esp32_ble_tracker/__init__.py +2 -8
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
- esphome/components/esp32_camera/__init__.py +111 -97
- esphome/components/esp32_camera/esp32_camera.cpp +41 -31
- esphome/components/esp32_camera/esp32_camera.h +35 -30
- esphome/components/esp32_camera_web_server/__init__.py +2 -1
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
- esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
- esphome/components/esp32_hall/sensor.py +2 -21
- esphome/components/esp32_hosted/__init__.py +101 -0
- esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
- esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
- esphome/components/esp32_rmt/__init__.py +0 -58
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
- esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
- esphome/components/esp32_rmt_led_strip/light.py +14 -76
- esphome/components/esp32_touch/esp32_touch.h +174 -28
- esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +238 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +1 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -0
- esphome/components/esphome/ota/__init__.py +1 -0
- esphome/components/esphome/ota/ota_esphome.cpp +24 -19
- esphome/components/ethernet/__init__.py +42 -23
- esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
- esphome/components/ethernet/ethernet_component.cpp +69 -29
- esphome/components/ethernet/ethernet_component.h +18 -10
- esphome/components/event/__init__.py +5 -2
- esphome/components/ezo/ezo.h +0 -1
- esphome/components/ezo_pmp/ezo_pmp.h +0 -1
- esphome/components/fan/__init__.py +5 -2
- esphome/components/feedback/feedback_cover.h +0 -1
- esphome/components/font/__init__.py +92 -82
- esphome/components/font/font.cpp +9 -2
- esphome/components/font/font.h +20 -5
- esphome/components/fs3000/fs3000.h +0 -1
- esphome/components/gcja5/gcja5.h +0 -1
- esphome/components/gl_r01_i2c/__init__.py +0 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
- esphome/components/gl_r01_i2c/sensor.py +36 -0
- esphome/components/gp8403/gp8403.h +0 -1
- esphome/components/gpio/binary_sensor/__init__.py +17 -0
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
- esphome/components/he60r/he60r.h +0 -1
- esphome/components/heatpumpir/climate.py +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +1 -0
- esphome/components/heatpumpir/heatpumpir.h +1 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
- esphome/components/host/__init__.py +2 -1
- esphome/components/host/helpers.cpp +57 -0
- esphome/components/http_request/__init__.py +19 -1
- esphome/components/http_request/http_request.h +1 -1
- esphome/components/http_request/http_request_arduino.cpp +0 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/http_request_idf.cpp +0 -1
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +28 -9
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
- esphome/components/hydreon_rgxx/sensor.py +1 -1
- esphome/components/i2c/__init__.py +23 -11
- esphome/components/i2c/i2c_bus.h +8 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
- esphome/components/i2c/i2c_bus_arduino.h +6 -3
- esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
- esphome/components/i2c_device/i2c_device.h +0 -1
- esphome/components/i2s_audio/__init__.py +2 -10
- esphome/components/i2s_audio/i2s_audio.cpp +1 -5
- esphome/components/i2s_audio/media_player/__init__.py +2 -2
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
- esphome/components/iaqcore/iaqcore.h +0 -2
- esphome/components/image/__init__.py +123 -24
- esphome/components/improv_serial/improv_serial_component.cpp +0 -4
- esphome/components/ina219/ina219.cpp +7 -0
- esphome/components/ina219/ina219.h +1 -0
- esphome/components/ina260/ina260.h +0 -2
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
- esphome/components/inkplate6/display.py +15 -0
- esphome/components/inkplate6/inkplate.cpp +2 -2
- esphome/components/integration/integration_sensor.h +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +8 -27
- esphome/components/internal_temperature/sensor.py +0 -26
- esphome/components/interval/interval.h +0 -2
- esphome/components/ld2410/button/__init__.py +3 -3
- esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2410/ld2410.cpp +430 -261
- esphome/components/ld2410/ld2410.h +44 -146
- esphome/components/ld2410/number/__init__.py +2 -2
- esphome/components/ld2410/sensor.py +1 -1
- esphome/components/ld2410/switch/__init__.py +1 -1
- esphome/components/ld2420/ld2420.cpp +196 -100
- esphome/components/ld2420/ld2420.h +46 -118
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2450/button/__init__.py +3 -3
- esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2450/ld2450.cpp +384 -232
- esphome/components/ld2450/ld2450.h +60 -69
- esphome/components/ld2450/switch/__init__.py +1 -1
- esphome/components/ledc/ledc_output.cpp +1 -63
- esphome/components/libretiny/__init__.py +4 -3
- esphome/components/libretiny/const.py +5 -0
- esphome/components/libretiny/generate_components.py +1 -0
- esphome/components/libretiny/helpers.cpp +35 -0
- esphome/components/libretiny/lt_component.cpp +5 -3
- esphome/components/light/__init__.py +4 -2
- esphome/components/light/addressable_light.h +3 -3
- esphome/components/light/light_call.cpp +180 -243
- esphome/components/light/light_call.h +72 -20
- esphome/components/light/light_color_values.h +14 -14
- esphome/components/light/light_state.h +15 -13
- esphome/components/light/transformers.h +2 -2
- esphome/components/ln882x/__init__.py +52 -0
- esphome/components/ln882x/boards.py +285 -0
- esphome/components/lock/__init__.py +5 -2
- esphome/components/logger/__init__.py +40 -3
- esphome/components/logger/logger.cpp +47 -12
- esphome/components/logger/logger.h +80 -49
- esphome/components/logger/logger_esp32.cpp +3 -3
- esphome/components/lps22/__init__.py +0 -0
- esphome/components/lps22/lps22.cpp +75 -0
- esphome/components/lps22/lps22.h +27 -0
- esphome/components/lps22/sensor.py +58 -0
- esphome/components/ltr390/ltr390.h +0 -1
- esphome/components/ltr501/ltr501.h +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
- esphome/components/lvgl/__init__.py +1 -1
- esphome/components/lvgl/schemas.py +66 -6
- esphome/components/lvgl/styles.py +24 -16
- esphome/components/lvgl/widgets/__init__.py +12 -2
- esphome/components/lvgl/widgets/lv_bar.py +40 -19
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
- esphome/components/max9611/max9611.h +0 -1
- esphome/components/mcp23016/__init__.py +1 -1
- esphome/components/mcp23xxx_base/__init__.py +1 -1
- esphome/components/mcp4461/__init__.py +1 -1
- esphome/components/mcp4461/output/__init__.py +3 -2
- esphome/components/mcp9600/mcp9600.h +0 -2
- esphome/components/md5/md5.cpp +3 -3
- esphome/components/md5/md5.h +1 -6
- esphome/components/mdns/__init__.py +22 -11
- esphome/components/media_player/__init__.py +4 -3
- esphome/components/micro_wake_word/__init__.py +1 -5
- esphome/components/micro_wake_word/streaming_model.cpp +2 -2
- esphome/components/microphone/microphone.cpp +7 -9
- esphome/components/microphone/microphone.h +0 -2
- esphome/components/mipi_spi/display.py +1 -0
- esphome/components/mmc5603/mmc5603.cpp +1 -1
- esphome/components/modbus/modbus.cpp +33 -15
- esphome/components/modbus/modbus.h +9 -0
- esphome/components/modbus_controller/__init__.py +42 -10
- esphome/components/modbus_controller/modbus_controller.cpp +92 -11
- esphome/components/modbus_controller/modbus_controller.h +61 -7
- esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
- esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
- esphome/components/mpl3115a2/mpl3115a2.h +0 -2
- esphome/components/mqtt/__init__.py +16 -0
- esphome/components/mqtt/mqtt_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +126 -45
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_client.cpp +15 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/ms8607/ms8607.h +0 -1
- esphome/components/neopixelbus/light.py +4 -1
- esphome/components/neopixelbus/neopixelbus_light.h +1 -1
- esphome/components/network/__init__.py +4 -1
- esphome/components/network/ip_address.h +1 -0
- esphome/components/nextion/__init__.py +16 -0
- esphome/components/nextion/base_component.py +1 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
- esphome/components/nextion/display.py +14 -4
- esphome/components/nextion/nextion.cpp +166 -101
- esphome/components/nextion/nextion.h +84 -53
- esphome/components/nextion/nextion_commands.cpp +11 -10
- esphome/components/nextion/nextion_component.cpp +28 -28
- esphome/components/nextion/nextion_component.h +53 -18
- esphome/components/nextion/nextion_component_base.h +3 -0
- esphome/components/nextion/nextion_upload.cpp +36 -0
- esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
- esphome/components/nextion/nextion_upload_idf.cpp +9 -33
- esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
- esphome/components/nextion/switch/nextion_switch.cpp +1 -1
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
- esphome/components/nfc/nfc.cpp +3 -22
- esphome/components/nfc/nfc.h +3 -3
- esphome/components/number/__init__.py +5 -2
- esphome/components/online_image/__init__.py +5 -0
- esphome/components/online_image/online_image.cpp +6 -2
- esphome/components/online_image/online_image.h +4 -1
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/openthread/__init__.py +47 -40
- esphome/components/openthread/const.py +1 -0
- esphome/components/openthread/openthread_esp.cpp +27 -5
- esphome/components/opt3001/__init__.py +0 -0
- esphome/components/opt3001/opt3001.cpp +122 -0
- esphome/components/opt3001/opt3001.h +27 -0
- esphome/components/opt3001/sensor.py +35 -0
- esphome/components/ota/__init__.py +17 -0
- esphome/components/ota/ota_backend.h +27 -1
- esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
- esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
- esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
- esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
- esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
- esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
- esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
- esphome/components/ota/ota_backend_esp_idf.h +1 -0
- esphome/components/packages/__init__.py +5 -2
- esphome/components/packet_transport/binary_sensor.py +61 -4
- esphome/components/packet_transport/packet_transport.cpp +31 -1
- esphome/components/packet_transport/packet_transport.h +11 -5
- esphome/components/pcf8574/__init__.py +1 -1
- esphome/components/pi4ioe5v6408/__init__.py +84 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
- esphome/components/pmsa003i/pmsa003i.h +0 -1
- esphome/components/pmsx003/pmsx003.h +0 -1
- esphome/components/pn7150/pn7150.cpp +7 -7
- esphome/components/pn7150/pn7150.h +0 -1
- esphome/components/pn7160/pn7160.cpp +7 -7
- esphome/components/pn7160/pn7160.h +0 -1
- esphome/components/preferences/syncer.h +2 -0
- esphome/components/prometheus/prometheus_handler.h +1 -1
- esphome/components/psram/psram.cpp +0 -20
- esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
- esphome/components/pulse_width/pulse_width.h +0 -1
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
- esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
- esphome/components/qr_code/__init__.py +13 -10
- esphome/components/qwiic_pir/qwiic_pir.h +0 -1
- esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
- esphome/components/rc522/rc522.h +0 -1
- esphome/components/rdm6300/rdm6300.h +0 -2
- esphome/components/remote_base/__init__.py +7 -5
- esphome/components/remote_base/remote_base.cpp +24 -21
- esphome/components/remote_base/remote_base.h +3 -26
- esphome/components/remote_receiver/__init__.py +40 -46
- esphome/components/remote_receiver/remote_receiver.h +4 -18
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
- esphome/components/remote_transmitter/__init__.py +42 -43
- esphome/components/remote_transmitter/remote_transmitter.h +2 -14
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
- esphome/components/resistance/resistance_sensor.h +0 -1
- esphome/components/rp2040/__init__.py +1 -0
- esphome/components/rp2040/helpers.cpp +55 -0
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
- esphome/components/rtttl/__init__.py +4 -4
- esphome/components/rtttl/rtttl.cpp +10 -1
- esphome/components/ruuvitag/ruuvitag.h +0 -1
- esphome/components/safe_mode/safe_mode.cpp +2 -0
- esphome/components/safe_mode/safe_mode.h +4 -1
- esphome/components/scd30/scd30.h +0 -1
- esphome/components/scd30/sensor.py +2 -2
- esphome/components/scd4x/scd4x.cpp +61 -54
- esphome/components/scd4x/scd4x.h +17 -15
- esphome/components/scd4x/sensor.py +4 -4
- esphome/components/script/script.h +0 -2
- esphome/components/sdp3x/sensor.py +1 -1
- esphome/components/select/__init__.py +5 -2
- esphome/components/sen5x/sen5x.h +0 -1
- esphome/components/senseair/senseair.h +0 -1
- esphome/components/sensor/__init__.py +4 -2
- esphome/components/sensor/filter.cpp +1 -1
- esphome/components/sensor/sensor.cpp +12 -6
- esphome/components/sensor/sensor.h +13 -5
- esphome/components/servo/servo.h +0 -1
- esphome/components/sfa30/sfa30.h +0 -1
- esphome/components/sgp30/sgp30.h +0 -1
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
- esphome/components/sht4x/sht4x.h +0 -1
- esphome/components/sm300d2/sm300d2.h +0 -2
- esphome/components/smt100/sensor.py +8 -4
- esphome/components/smt100/smt100.cpp +5 -5
- esphome/components/smt100/smt100.h +3 -3
- esphome/components/sn74hc595/__init__.py +1 -1
- esphome/components/sn74hc595/sn74hc595.cpp +5 -4
- esphome/components/sntp/sntp_component.cpp +9 -3
- esphome/components/sntp/time.py +2 -0
- esphome/components/socket/__init__.py +17 -0
- esphome/components/spi/__init__.py +27 -6
- esphome/components/spi/spi.cpp +3 -2
- esphome/components/spi/spi.h +9 -3
- esphome/components/spi/spi_arduino.cpp +3 -5
- esphome/components/spi/spi_esp_idf.cpp +40 -21
- esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
- esphome/components/sps30/sps30.h +0 -1
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +0 -4
- esphome/components/status/status_binary_sensor.h +0 -2
- esphome/components/substitutions/__init__.py +76 -19
- esphome/components/substitutions/jinja.py +99 -0
- esphome/components/sun/sun.cpp +3 -4
- esphome/components/switch/__init__.py +5 -2
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
- esphome/components/sx126x/__init__.py +317 -0
- esphome/components/sx126x/automation.h +62 -0
- esphome/components/sx126x/packet_transport/__init__.py +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
- esphome/components/sx126x/sx126x.cpp +523 -0
- esphome/components/sx126x/sx126x.h +140 -0
- esphome/components/sx126x/sx126x_reg.h +163 -0
- esphome/components/sx127x/__init__.py +325 -0
- esphome/components/sx127x/automation.h +62 -0
- esphome/components/sx127x/packet_transport/__init__.py +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
- esphome/components/sx127x/sx127x.cpp +498 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/syslog/esphome_syslog.cpp +5 -3
- esphome/components/syslog/esphome_syslog.h +1 -1
- esphome/components/tca9555/__init__.py +1 -1
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
- esphome/components/text/__init__.py +5 -2
- esphome/components/text_sensor/__init__.py +5 -2
- esphome/components/thermostat/thermostat_climate.cpp +34 -31
- esphome/components/thermostat/thermostat_climate.h +43 -39
- esphome/components/time/__init__.py +16 -2
- esphome/components/time/real_time_clock.cpp +4 -0
- esphome/components/time/real_time_clock.h +5 -1
- esphome/components/tlc5971/tlc5971.cpp +4 -1
- esphome/components/tmp1075/tmp1075.h +0 -2
- esphome/components/tof10120/tof10120_sensor.h +0 -1
- esphome/components/tormatic/tormatic_cover.h +0 -1
- esphome/components/total_daily_energy/total_daily_energy.h +0 -1
- esphome/components/tsl2591/tsl2591.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
- esphome/components/tx20/tx20.cpp +2 -2
- esphome/components/uart/__init__.py +18 -0
- esphome/components/uart/uart_component_esp_idf.cpp +1 -5
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/valve/__init__.py +5 -2
- esphome/components/vbus/vbus.h +0 -1
- esphome/components/veml3235/veml3235.h +0 -1
- esphome/components/veml7700/veml7700.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
- esphome/components/voice_assistant/voice_assistant.cpp +4 -4
- esphome/components/watchdog/watchdog.cpp +0 -4
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
- esphome/components/web_server/__init__.py +34 -19
- esphome/components/web_server/ota/__init__.py +32 -0
- esphome/components/web_server/ota/ota_web_server.cpp +210 -0
- esphome/components/web_server/ota/ota_web_server.h +26 -0
- esphome/components/web_server/web_server.cpp +311 -430
- esphome/components/web_server/web_server.h +33 -23
- esphome/components/web_server/web_server_v1.cpp +4 -5
- esphome/components/web_server_base/__init__.py +5 -2
- esphome/components/web_server_base/web_server_base.cpp +2 -94
- esphome/components/web_server_base/web_server_base.h +5 -25
- esphome/components/web_server_idf/multipart.cpp +254 -0
- esphome/components/web_server_idf/multipart.h +86 -0
- esphome/components/web_server_idf/utils.cpp +32 -0
- esphome/components/web_server_idf/utils.h +10 -0
- esphome/components/web_server_idf/web_server_idf.cpp +162 -16
- esphome/components/web_server_idf/web_server_idf.h +11 -10
- esphome/components/wiegand/wiegand.cpp +2 -2
- esphome/components/wifi/__init__.py +18 -0
- esphome/components/wifi/wifi_component.cpp +17 -22
- esphome/components/wifi/wifi_component.h +27 -23
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
- esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
- esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
- esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
- esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
- esphome/components/wireguard/__init__.py +2 -11
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
- esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
- esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
- esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
- esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
- esphome/components/zyaura/zyaura.h +0 -1
- esphome/config.py +88 -22
- esphome/config_helpers.py +74 -1
- esphome/config_validation.py +12 -1
- esphome/const.py +65 -10
- esphome/core/__init__.py +18 -2
- esphome/core/application.cpp +163 -10
- esphome/core/application.h +145 -165
- esphome/core/area.h +19 -0
- esphome/core/automation.h +58 -9
- esphome/core/color.cpp +3 -5
- esphome/core/color.h +16 -16
- esphome/core/component.cpp +151 -18
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +7 -7
- esphome/core/component_iterator.h +9 -7
- esphome/core/config.py +155 -6
- esphome/core/controller.cpp +4 -2
- esphome/core/controller.h +1 -1
- esphome/core/datatypes.h +2 -2
- esphome/core/defines.h +17 -2
- esphome/core/device.h +20 -0
- esphome/core/entity_base.cpp +20 -15
- esphome/core/entity_base.h +76 -0
- esphome/core/entity_helpers.py +162 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +164 -104
- esphome/core/lock_free_queue.h +151 -0
- esphome/core/log.cpp +2 -2
- esphome/core/log.h +2 -0
- esphome/core/optional.h +5 -0
- esphome/core/ring_buffer.cpp +2 -2
- esphome/core/scheduler.cpp +278 -103
- esphome/core/scheduler.h +157 -17
- esphome/core/time.cpp +5 -5
- esphome/core/time.h +5 -5
- esphome/cpp_generator.py +17 -0
- esphome/cpp_helpers.py +0 -22
- esphome/cpp_types.py +3 -1
- esphome/dashboard/entries.py +1 -1
- esphome/dashboard/util/text.py +5 -21
- esphome/dashboard/web_server.py +9 -1
- esphome/helpers.py +47 -0
- esphome/loader.py +15 -1
- esphome/pins.py +14 -8
- esphome/wizard.py +16 -3
- esphome/writer.py +21 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/METADATA +10 -9
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/RECORD +593 -533
- esphome/components/esp32_ble/ble_event_pool.h +0 -72
- esphome/components/esp32_ble/queue.h +0 -85
- esphome/components/esp32_hall/esp32_hall.cpp +0 -25
- esphome/components/esp32_hall/esp32_hall.h +0 -23
- esphome/components/esp32_touch/esp32_touch.cpp +0 -355
- esphome/components/ld2410/button/reset_button.cpp +0 -9
- esphome/components/ld2450/button/reset_button.cpp +0 -9
- esphome/components/openthread/tlv.py +0 -65
- /esphome/{dashboard/enum.py → enum.py} +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/WHEEL +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/top_level.txt +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#ifdef USE_ESP32
|
|
2
2
|
|
|
3
3
|
#include "esp32_camera.h"
|
|
4
|
-
#include "esphome/core/log.h"
|
|
5
|
-
#include "esphome/core/hal.h"
|
|
6
4
|
#include "esphome/core/application.h"
|
|
5
|
+
#include "esphome/core/hal.h"
|
|
6
|
+
#include "esphome/core/log.h"
|
|
7
7
|
|
|
8
8
|
#include <freertos/task.h>
|
|
9
9
|
|
|
@@ -14,7 +14,11 @@ static const char *const TAG = "esp32_camera";
|
|
|
14
14
|
|
|
15
15
|
/* ---------------- public API (derivated) ---------------- */
|
|
16
16
|
void ESP32Camera::setup() {
|
|
17
|
-
|
|
17
|
+
#ifdef USE_I2C
|
|
18
|
+
if (this->i2c_bus_ != nullptr) {
|
|
19
|
+
this->config_.sccb_i2c_port = this->i2c_bus_->get_port();
|
|
20
|
+
}
|
|
21
|
+
#endif
|
|
18
22
|
|
|
19
23
|
/* initialize time to now */
|
|
20
24
|
this->last_update_ = millis();
|
|
@@ -37,7 +41,7 @@ void ESP32Camera::setup() {
|
|
|
37
41
|
xTaskCreatePinnedToCore(&ESP32Camera::framebuffer_task,
|
|
38
42
|
"framebuffer_task", // name
|
|
39
43
|
1024, // stack size
|
|
40
|
-
|
|
44
|
+
this, // task pv params
|
|
41
45
|
1, // priority
|
|
42
46
|
nullptr, // handle
|
|
43
47
|
1 // core
|
|
@@ -170,7 +174,7 @@ void ESP32Camera::loop() {
|
|
|
170
174
|
const uint32_t now = App.get_loop_component_start_time();
|
|
171
175
|
if (this->idle_update_interval_ != 0 && now - this->last_idle_request_ > this->idle_update_interval_) {
|
|
172
176
|
this->last_idle_request_ = now;
|
|
173
|
-
this->request_image(IDLE);
|
|
177
|
+
this->request_image(camera::IDLE);
|
|
174
178
|
}
|
|
175
179
|
|
|
176
180
|
// Check if we should fetch a new image
|
|
@@ -196,7 +200,7 @@ void ESP32Camera::loop() {
|
|
|
196
200
|
xQueueSend(this->framebuffer_return_queue_, &fb, portMAX_DELAY);
|
|
197
201
|
return;
|
|
198
202
|
}
|
|
199
|
-
this->current_image_ = std::make_shared<
|
|
203
|
+
this->current_image_ = std::make_shared<ESP32CameraImage>(fb, this->single_requesters_ | this->stream_requesters_);
|
|
200
204
|
|
|
201
205
|
ESP_LOGD(TAG, "Got Image: len=%u", fb->len);
|
|
202
206
|
this->new_image_callback_.call(this->current_image_);
|
|
@@ -219,8 +223,6 @@ ESP32Camera::ESP32Camera() {
|
|
|
219
223
|
this->config_.fb_count = 1;
|
|
220
224
|
this->config_.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
|
|
221
225
|
this->config_.fb_location = CAMERA_FB_IN_PSRAM;
|
|
222
|
-
|
|
223
|
-
global_esp32_camera = this;
|
|
224
226
|
}
|
|
225
227
|
|
|
226
228
|
/* ---------------- setters ---------------- */
|
|
@@ -246,6 +248,13 @@ void ESP32Camera::set_i2c_pins(uint8_t sda, uint8_t scl) {
|
|
|
246
248
|
this->config_.pin_sccb_sda = sda;
|
|
247
249
|
this->config_.pin_sccb_scl = scl;
|
|
248
250
|
}
|
|
251
|
+
#ifdef USE_I2C
|
|
252
|
+
void ESP32Camera::set_i2c_id(i2c::InternalI2CBus *i2c_bus) {
|
|
253
|
+
this->i2c_bus_ = i2c_bus;
|
|
254
|
+
this->config_.pin_sccb_sda = -1;
|
|
255
|
+
this->config_.pin_sccb_scl = -1;
|
|
256
|
+
}
|
|
257
|
+
#endif // USE_I2C
|
|
249
258
|
void ESP32Camera::set_reset_pin(uint8_t pin) { this->config_.pin_reset = pin; }
|
|
250
259
|
void ESP32Camera::set_power_down_pin(uint8_t pin) { this->config_.pin_pwdn = pin; }
|
|
251
260
|
|
|
@@ -343,7 +352,7 @@ void ESP32Camera::set_frame_buffer_count(uint8_t fb_count) {
|
|
|
343
352
|
}
|
|
344
353
|
|
|
345
354
|
/* ---------------- public API (specific) ---------------- */
|
|
346
|
-
void ESP32Camera::add_image_callback(std::function<void(std::shared_ptr<CameraImage>)> &&callback) {
|
|
355
|
+
void ESP32Camera::add_image_callback(std::function<void(std::shared_ptr<camera::CameraImage>)> &&callback) {
|
|
347
356
|
this->new_image_callback_.add(std::move(callback));
|
|
348
357
|
}
|
|
349
358
|
void ESP32Camera::add_stream_start_callback(std::function<void()> &&callback) {
|
|
@@ -352,15 +361,16 @@ void ESP32Camera::add_stream_start_callback(std::function<void()> &&callback) {
|
|
|
352
361
|
void ESP32Camera::add_stream_stop_callback(std::function<void()> &&callback) {
|
|
353
362
|
this->stream_stop_callback_.add(std::move(callback));
|
|
354
363
|
}
|
|
355
|
-
void ESP32Camera::start_stream(CameraRequester requester) {
|
|
364
|
+
void ESP32Camera::start_stream(camera::CameraRequester requester) {
|
|
356
365
|
this->stream_start_callback_.call();
|
|
357
366
|
this->stream_requesters_ |= (1U << requester);
|
|
358
367
|
}
|
|
359
|
-
void ESP32Camera::stop_stream(CameraRequester requester) {
|
|
368
|
+
void ESP32Camera::stop_stream(camera::CameraRequester requester) {
|
|
360
369
|
this->stream_stop_callback_.call();
|
|
361
370
|
this->stream_requesters_ &= ~(1U << requester);
|
|
362
371
|
}
|
|
363
|
-
void ESP32Camera::request_image(CameraRequester requester) { this->single_requesters_ |= (1U << requester); }
|
|
372
|
+
void ESP32Camera::request_image(camera::CameraRequester requester) { this->single_requesters_ |= (1U << requester); }
|
|
373
|
+
camera::CameraImageReader *ESP32Camera::create_image_reader() { return new ESP32CameraImageReader; }
|
|
364
374
|
void ESP32Camera::update_camera_parameters() {
|
|
365
375
|
sensor_t *s = esp_camera_sensor_get();
|
|
366
376
|
/* update image */
|
|
@@ -389,39 +399,39 @@ void ESP32Camera::update_camera_parameters() {
|
|
|
389
399
|
bool ESP32Camera::has_requested_image_() const { return this->single_requesters_ || this->stream_requesters_; }
|
|
390
400
|
bool ESP32Camera::can_return_image_() const { return this->current_image_.use_count() == 1; }
|
|
391
401
|
void ESP32Camera::framebuffer_task(void *pv) {
|
|
402
|
+
ESP32Camera *that = (ESP32Camera *) pv;
|
|
392
403
|
while (true) {
|
|
393
404
|
camera_fb_t *framebuffer = esp_camera_fb_get();
|
|
394
|
-
xQueueSend(
|
|
405
|
+
xQueueSend(that->framebuffer_get_queue_, &framebuffer, portMAX_DELAY);
|
|
395
406
|
// return is no-op for config with 1 fb
|
|
396
|
-
xQueueReceive(
|
|
407
|
+
xQueueReceive(that->framebuffer_return_queue_, &framebuffer, portMAX_DELAY);
|
|
397
408
|
esp_camera_fb_return(framebuffer);
|
|
398
409
|
}
|
|
399
410
|
}
|
|
400
411
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
void CameraImageReader::set_image(std::shared_ptr<CameraImage> image) {
|
|
405
|
-
this->image_ = std::move(image);
|
|
412
|
+
/* ---------------- ESP32CameraImageReader class ----------- */
|
|
413
|
+
void ESP32CameraImageReader::set_image(std::shared_ptr<camera::CameraImage> image) {
|
|
414
|
+
this->image_ = std::static_pointer_cast<ESP32CameraImage>(image);
|
|
406
415
|
this->offset_ = 0;
|
|
407
416
|
}
|
|
408
|
-
size_t
|
|
417
|
+
size_t ESP32CameraImageReader::available() const {
|
|
409
418
|
if (!this->image_)
|
|
410
419
|
return 0;
|
|
411
420
|
|
|
412
421
|
return this->image_->get_data_length() - this->offset_;
|
|
413
422
|
}
|
|
414
|
-
void
|
|
415
|
-
void
|
|
416
|
-
uint8_t *
|
|
417
|
-
|
|
418
|
-
/* ----------------
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
423
|
+
void ESP32CameraImageReader::return_image() { this->image_.reset(); }
|
|
424
|
+
void ESP32CameraImageReader::consume_data(size_t consumed) { this->offset_ += consumed; }
|
|
425
|
+
uint8_t *ESP32CameraImageReader::peek_data_buffer() { return this->image_->get_data_buffer() + this->offset_; }
|
|
426
|
+
|
|
427
|
+
/* ---------------- ESP32CameraImage class ----------- */
|
|
428
|
+
ESP32CameraImage::ESP32CameraImage(camera_fb_t *buffer, uint8_t requesters)
|
|
429
|
+
: buffer_(buffer), requesters_(requesters) {}
|
|
430
|
+
|
|
431
|
+
camera_fb_t *ESP32CameraImage::get_raw_buffer() { return this->buffer_; }
|
|
432
|
+
uint8_t *ESP32CameraImage::get_data_buffer() { return this->buffer_->buf; }
|
|
433
|
+
size_t ESP32CameraImage::get_data_length() { return this->buffer_->len; }
|
|
434
|
+
bool ESP32CameraImage::was_requested_by(camera::CameraRequester requester) const {
|
|
425
435
|
return (this->requesters_ & (1 << requester)) != 0;
|
|
426
436
|
}
|
|
427
437
|
|
|
@@ -2,22 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
#ifdef USE_ESP32
|
|
4
4
|
|
|
5
|
-
#include "esphome/core/automation.h"
|
|
6
|
-
#include "esphome/core/component.h"
|
|
7
|
-
#include "esphome/core/entity_base.h"
|
|
8
|
-
#include "esphome/core/helpers.h"
|
|
9
5
|
#include <esp_camera.h>
|
|
10
6
|
#include <freertos/FreeRTOS.h>
|
|
11
7
|
#include <freertos/queue.h>
|
|
8
|
+
#include "esphome/core/automation.h"
|
|
9
|
+
#include "esphome/core/component.h"
|
|
10
|
+
#include "esphome/components/camera/camera.h"
|
|
11
|
+
#include "esphome/core/helpers.h"
|
|
12
|
+
|
|
13
|
+
#ifdef USE_I2C
|
|
14
|
+
#include "esphome/components/i2c/i2c_bus.h"
|
|
15
|
+
#endif // USE_I2C
|
|
12
16
|
|
|
13
17
|
namespace esphome {
|
|
14
18
|
namespace esp32_camera {
|
|
15
19
|
|
|
16
20
|
class ESP32Camera;
|
|
17
21
|
|
|
18
|
-
/* ---------------- enum classes ---------------- */
|
|
19
|
-
enum CameraRequester { IDLE, API_REQUESTER, WEB_REQUESTER };
|
|
20
|
-
|
|
21
22
|
enum ESP32CameraFrameSize {
|
|
22
23
|
ESP32_CAMERA_SIZE_160X120, // QQVGA
|
|
23
24
|
ESP32_CAMERA_SIZE_176X144, // QCIF
|
|
@@ -73,13 +74,13 @@ enum ESP32SpecialEffect {
|
|
|
73
74
|
};
|
|
74
75
|
|
|
75
76
|
/* ---------------- CameraImage class ---------------- */
|
|
76
|
-
class CameraImage {
|
|
77
|
+
class ESP32CameraImage : public camera::CameraImage {
|
|
77
78
|
public:
|
|
78
|
-
|
|
79
|
+
ESP32CameraImage(camera_fb_t *buffer, uint8_t requester);
|
|
79
80
|
camera_fb_t *get_raw_buffer();
|
|
80
|
-
uint8_t *get_data_buffer();
|
|
81
|
-
size_t get_data_length();
|
|
82
|
-
bool was_requested_by(CameraRequester requester) const;
|
|
81
|
+
uint8_t *get_data_buffer() override;
|
|
82
|
+
size_t get_data_length() override;
|
|
83
|
+
bool was_requested_by(camera::CameraRequester requester) const override;
|
|
83
84
|
|
|
84
85
|
protected:
|
|
85
86
|
camera_fb_t *buffer_;
|
|
@@ -92,21 +93,21 @@ struct CameraImageData {
|
|
|
92
93
|
};
|
|
93
94
|
|
|
94
95
|
/* ---------------- CameraImageReader class ---------------- */
|
|
95
|
-
class CameraImageReader {
|
|
96
|
+
class ESP32CameraImageReader : public camera::CameraImageReader {
|
|
96
97
|
public:
|
|
97
|
-
void set_image(std::shared_ptr<CameraImage> image);
|
|
98
|
-
size_t available() const;
|
|
99
|
-
uint8_t *peek_data_buffer();
|
|
100
|
-
void consume_data(size_t consumed);
|
|
101
|
-
void return_image();
|
|
98
|
+
void set_image(std::shared_ptr<camera::CameraImage> image) override;
|
|
99
|
+
size_t available() const override;
|
|
100
|
+
uint8_t *peek_data_buffer() override;
|
|
101
|
+
void consume_data(size_t consumed) override;
|
|
102
|
+
void return_image() override;
|
|
102
103
|
|
|
103
104
|
protected:
|
|
104
|
-
std::shared_ptr<
|
|
105
|
+
std::shared_ptr<ESP32CameraImage> image_;
|
|
105
106
|
size_t offset_{0};
|
|
106
107
|
};
|
|
107
108
|
|
|
108
109
|
/* ---------------- ESP32Camera class ---------------- */
|
|
109
|
-
class ESP32Camera : public
|
|
110
|
+
class ESP32Camera : public camera::Camera {
|
|
110
111
|
public:
|
|
111
112
|
ESP32Camera();
|
|
112
113
|
|
|
@@ -118,6 +119,9 @@ class ESP32Camera : public EntityBase, public Component {
|
|
|
118
119
|
void set_pixel_clock_pin(uint8_t pin);
|
|
119
120
|
void set_external_clock(uint8_t pin, uint32_t frequency);
|
|
120
121
|
void set_i2c_pins(uint8_t sda, uint8_t scl);
|
|
122
|
+
#ifdef USE_I2C
|
|
123
|
+
void set_i2c_id(i2c::InternalI2CBus *i2c_bus);
|
|
124
|
+
#endif // USE_I2C
|
|
121
125
|
void set_reset_pin(uint8_t pin);
|
|
122
126
|
void set_power_down_pin(uint8_t pin);
|
|
123
127
|
/* -- image */
|
|
@@ -155,14 +159,15 @@ class ESP32Camera : public EntityBase, public Component {
|
|
|
155
159
|
void dump_config() override;
|
|
156
160
|
float get_setup_priority() const override;
|
|
157
161
|
/* public API (specific) */
|
|
158
|
-
void start_stream(CameraRequester requester);
|
|
159
|
-
void stop_stream(CameraRequester requester);
|
|
160
|
-
void request_image(CameraRequester requester);
|
|
162
|
+
void start_stream(camera::CameraRequester requester) override;
|
|
163
|
+
void stop_stream(camera::CameraRequester requester) override;
|
|
164
|
+
void request_image(camera::CameraRequester requester) override;
|
|
161
165
|
void update_camera_parameters();
|
|
162
166
|
|
|
163
|
-
void add_image_callback(std::function<void(std::shared_ptr<CameraImage>)> &&callback);
|
|
167
|
+
void add_image_callback(std::function<void(std::shared_ptr<camera::CameraImage>)> &&callback) override;
|
|
164
168
|
void add_stream_start_callback(std::function<void()> &&callback);
|
|
165
169
|
void add_stream_stop_callback(std::function<void()> &&callback);
|
|
170
|
+
camera::CameraImageReader *create_image_reader() override;
|
|
166
171
|
|
|
167
172
|
protected:
|
|
168
173
|
/* internal methods */
|
|
@@ -199,26 +204,26 @@ class ESP32Camera : public EntityBase, public Component {
|
|
|
199
204
|
uint32_t idle_update_interval_{15000};
|
|
200
205
|
|
|
201
206
|
esp_err_t init_error_{ESP_OK};
|
|
202
|
-
std::shared_ptr<
|
|
207
|
+
std::shared_ptr<ESP32CameraImage> current_image_;
|
|
203
208
|
uint8_t single_requesters_{0};
|
|
204
209
|
uint8_t stream_requesters_{0};
|
|
205
210
|
QueueHandle_t framebuffer_get_queue_;
|
|
206
211
|
QueueHandle_t framebuffer_return_queue_;
|
|
207
|
-
CallbackManager<void(std::shared_ptr<CameraImage>)> new_image_callback_{};
|
|
212
|
+
CallbackManager<void(std::shared_ptr<camera::CameraImage>)> new_image_callback_{};
|
|
208
213
|
CallbackManager<void()> stream_start_callback_{};
|
|
209
214
|
CallbackManager<void()> stream_stop_callback_{};
|
|
210
215
|
|
|
211
216
|
uint32_t last_idle_request_{0};
|
|
212
217
|
uint32_t last_update_{0};
|
|
218
|
+
#ifdef USE_I2C
|
|
219
|
+
i2c::InternalI2CBus *i2c_bus_{nullptr};
|
|
220
|
+
#endif // USE_I2C
|
|
213
221
|
};
|
|
214
222
|
|
|
215
|
-
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
216
|
-
extern ESP32Camera *global_esp32_camera;
|
|
217
|
-
|
|
218
223
|
class ESP32CameraImageTrigger : public Trigger<CameraImageData> {
|
|
219
224
|
public:
|
|
220
225
|
explicit ESP32CameraImageTrigger(ESP32Camera *parent) {
|
|
221
|
-
parent->add_image_callback([this](const std::shared_ptr<
|
|
226
|
+
parent->add_image_callback([this](const std::shared_ptr<camera::CameraImage> &image) {
|
|
222
227
|
CameraImageData camera_image_data{};
|
|
223
228
|
camera_image_data.length = image->get_data_length();
|
|
224
229
|
camera_image_data.data = image->get_data_buffer();
|
|
@@ -3,7 +3,8 @@ import esphome.config_validation as cv
|
|
|
3
3
|
from esphome.const import CONF_ID, CONF_MODE, CONF_PORT
|
|
4
4
|
|
|
5
5
|
CODEOWNERS = ["@ayufan"]
|
|
6
|
-
|
|
6
|
+
AUTO_LOAD = ["camera"]
|
|
7
|
+
DEPENDENCIES = ["network"]
|
|
7
8
|
MULTI_CONF = True
|
|
8
9
|
|
|
9
10
|
esp32_camera_web_server_ns = cg.esphome_ns.namespace("esp32_camera_web_server")
|
|
@@ -40,7 +40,7 @@ CameraWebServer::CameraWebServer() {}
|
|
|
40
40
|
CameraWebServer::~CameraWebServer() {}
|
|
41
41
|
|
|
42
42
|
void CameraWebServer::setup() {
|
|
43
|
-
if (!
|
|
43
|
+
if (!camera::Camera::instance() || camera::Camera::instance()->is_failed()) {
|
|
44
44
|
this->mark_failed();
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
@@ -67,8 +67,8 @@ void CameraWebServer::setup() {
|
|
|
67
67
|
|
|
68
68
|
httpd_register_uri_handler(this->httpd_, &uri);
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
if (this->running_ && image->was_requested_by(
|
|
70
|
+
camera::Camera::instance()->add_image_callback([this](std::shared_ptr<camera::CameraImage> image) {
|
|
71
|
+
if (this->running_ && image->was_requested_by(camera::WEB_REQUESTER)) {
|
|
72
72
|
this->image_ = std::move(image);
|
|
73
73
|
xSemaphoreGive(this->semaphore_);
|
|
74
74
|
}
|
|
@@ -108,8 +108,8 @@ void CameraWebServer::loop() {
|
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
std::shared_ptr<esphome::
|
|
112
|
-
std::shared_ptr<esphome::
|
|
111
|
+
std::shared_ptr<esphome::camera::CameraImage> CameraWebServer::wait_for_image_() {
|
|
112
|
+
std::shared_ptr<esphome::camera::CameraImage> image;
|
|
113
113
|
image.swap(this->image_);
|
|
114
114
|
|
|
115
115
|
if (!image) {
|
|
@@ -172,7 +172,7 @@ esp_err_t CameraWebServer::streaming_handler_(struct httpd_req *req) {
|
|
|
172
172
|
uint32_t last_frame = millis();
|
|
173
173
|
uint32_t frames = 0;
|
|
174
174
|
|
|
175
|
-
|
|
175
|
+
camera::Camera::instance()->start_stream(esphome::camera::WEB_REQUESTER);
|
|
176
176
|
|
|
177
177
|
while (res == ESP_OK && this->running_) {
|
|
178
178
|
auto image = this->wait_for_image_();
|
|
@@ -205,7 +205,7 @@ esp_err_t CameraWebServer::streaming_handler_(struct httpd_req *req) {
|
|
|
205
205
|
res = httpd_send_all(req, STREAM_ERROR, strlen(STREAM_ERROR));
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
-
|
|
208
|
+
camera::Camera::instance()->stop_stream(esphome::camera::WEB_REQUESTER);
|
|
209
209
|
|
|
210
210
|
ESP_LOGI(TAG, "STREAM: closed. Frames: %" PRIu32, frames);
|
|
211
211
|
|
|
@@ -215,7 +215,7 @@ esp_err_t CameraWebServer::streaming_handler_(struct httpd_req *req) {
|
|
|
215
215
|
esp_err_t CameraWebServer::snapshot_handler_(struct httpd_req *req) {
|
|
216
216
|
esp_err_t res = ESP_OK;
|
|
217
217
|
|
|
218
|
-
|
|
218
|
+
camera::Camera::instance()->request_image(esphome::camera::WEB_REQUESTER);
|
|
219
219
|
|
|
220
220
|
auto image = this->wait_for_image_();
|
|
221
221
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
#include <freertos/FreeRTOS.h>
|
|
7
7
|
#include <freertos/semphr.h>
|
|
8
8
|
|
|
9
|
-
#include "esphome/components/
|
|
9
|
+
#include "esphome/components/camera/camera.h"
|
|
10
10
|
#include "esphome/core/component.h"
|
|
11
11
|
#include "esphome/core/helpers.h"
|
|
12
12
|
#include "esphome/core/preferences.h"
|
|
@@ -32,7 +32,7 @@ class CameraWebServer : public Component {
|
|
|
32
32
|
void loop() override;
|
|
33
33
|
|
|
34
34
|
protected:
|
|
35
|
-
std::shared_ptr<
|
|
35
|
+
std::shared_ptr<camera::CameraImage> wait_for_image_();
|
|
36
36
|
esp_err_t handler_(struct httpd_req *req);
|
|
37
37
|
esp_err_t streaming_handler_(struct httpd_req *req);
|
|
38
38
|
esp_err_t snapshot_handler_(struct httpd_req *req);
|
|
@@ -40,7 +40,7 @@ class CameraWebServer : public Component {
|
|
|
40
40
|
uint16_t port_{0};
|
|
41
41
|
void *httpd_{nullptr};
|
|
42
42
|
SemaphoreHandle_t semaphore_;
|
|
43
|
-
std::shared_ptr<
|
|
43
|
+
std::shared_ptr<camera::CameraImage> image_;
|
|
44
44
|
bool running_{false};
|
|
45
45
|
Mode mode_{STREAM};
|
|
46
46
|
};
|
|
@@ -1,24 +1,5 @@
|
|
|
1
|
-
import esphome.codegen as cg
|
|
2
|
-
from esphome.components import sensor
|
|
3
1
|
import esphome.config_validation as cv
|
|
4
|
-
from esphome.const import ICON_MAGNET, STATE_CLASS_MEASUREMENT, UNIT_MICROTESLA
|
|
5
2
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
esp32_hall_ns = cg.esphome_ns.namespace("esp32_hall")
|
|
9
|
-
ESP32HallSensor = esp32_hall_ns.class_(
|
|
10
|
-
"ESP32HallSensor", sensor.Sensor, cg.PollingComponent
|
|
3
|
+
CONFIG_SCHEMA = cv.invalid(
|
|
4
|
+
"The esp32_hall component has been removed as of ESPHome 2025.7.0. See https://github.com/esphome/esphome/pull/9117 for details."
|
|
11
5
|
)
|
|
12
|
-
|
|
13
|
-
CONFIG_SCHEMA = sensor.sensor_schema(
|
|
14
|
-
ESP32HallSensor,
|
|
15
|
-
unit_of_measurement=UNIT_MICROTESLA,
|
|
16
|
-
icon=ICON_MAGNET,
|
|
17
|
-
accuracy_decimals=1,
|
|
18
|
-
state_class=STATE_CLASS_MEASUREMENT,
|
|
19
|
-
).extend(cv.polling_component_schema("60s"))
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
async def to_code(config):
|
|
23
|
-
var = await sensor.new_sensor(config)
|
|
24
|
-
await cg.register_component(var, config)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from esphome import pins
|
|
4
|
+
from esphome.components import esp32
|
|
5
|
+
import esphome.config_validation as cv
|
|
6
|
+
from esphome.const import (
|
|
7
|
+
CONF_CLK_PIN,
|
|
8
|
+
CONF_RESET_PIN,
|
|
9
|
+
CONF_VARIANT,
|
|
10
|
+
KEY_CORE,
|
|
11
|
+
KEY_FRAMEWORK_VERSION,
|
|
12
|
+
)
|
|
13
|
+
from esphome.core import CORE
|
|
14
|
+
|
|
15
|
+
CODEOWNERS = ["@swoboda1337"]
|
|
16
|
+
|
|
17
|
+
CONF_ACTIVE_HIGH = "active_high"
|
|
18
|
+
CONF_CMD_PIN = "cmd_pin"
|
|
19
|
+
CONF_D0_PIN = "d0_pin"
|
|
20
|
+
CONF_D1_PIN = "d1_pin"
|
|
21
|
+
CONF_D2_PIN = "d2_pin"
|
|
22
|
+
CONF_D3_PIN = "d3_pin"
|
|
23
|
+
CONF_SLOT = "slot"
|
|
24
|
+
|
|
25
|
+
CONFIG_SCHEMA = cv.All(
|
|
26
|
+
cv.Schema(
|
|
27
|
+
{
|
|
28
|
+
cv.Required(CONF_VARIANT): cv.one_of(*esp32.VARIANTS, upper=True),
|
|
29
|
+
cv.Required(CONF_ACTIVE_HIGH): cv.boolean,
|
|
30
|
+
cv.Required(CONF_CLK_PIN): pins.internal_gpio_output_pin_number,
|
|
31
|
+
cv.Required(CONF_CMD_PIN): pins.internal_gpio_output_pin_number,
|
|
32
|
+
cv.Required(CONF_D0_PIN): pins.internal_gpio_output_pin_number,
|
|
33
|
+
cv.Required(CONF_D1_PIN): pins.internal_gpio_output_pin_number,
|
|
34
|
+
cv.Required(CONF_D2_PIN): pins.internal_gpio_output_pin_number,
|
|
35
|
+
cv.Required(CONF_D3_PIN): pins.internal_gpio_output_pin_number,
|
|
36
|
+
cv.Required(CONF_RESET_PIN): pins.internal_gpio_output_pin_number,
|
|
37
|
+
cv.Optional(CONF_SLOT, default=1): cv.int_range(min=0, max=1),
|
|
38
|
+
}
|
|
39
|
+
),
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
async def to_code(config):
|
|
44
|
+
if config[CONF_ACTIVE_HIGH]:
|
|
45
|
+
esp32.add_idf_sdkconfig_option(
|
|
46
|
+
"CONFIG_ESP_HOSTED_SDIO_RESET_ACTIVE_HIGH",
|
|
47
|
+
True,
|
|
48
|
+
)
|
|
49
|
+
else:
|
|
50
|
+
esp32.add_idf_sdkconfig_option(
|
|
51
|
+
"CONFIG_ESP_HOSTED_SDIO_RESET_ACTIVE_LOW",
|
|
52
|
+
True,
|
|
53
|
+
)
|
|
54
|
+
esp32.add_idf_sdkconfig_option(
|
|
55
|
+
"CONFIG_ESP_HOSTED_SDIO_GPIO_RESET_SLAVE", # NOLINT
|
|
56
|
+
config[CONF_RESET_PIN],
|
|
57
|
+
)
|
|
58
|
+
esp32.add_idf_sdkconfig_option(
|
|
59
|
+
f"CONFIG_SLAVE_IDF_TARGET_{config[CONF_VARIANT]}", # NOLINT
|
|
60
|
+
True,
|
|
61
|
+
)
|
|
62
|
+
esp32.add_idf_sdkconfig_option(
|
|
63
|
+
f"CONFIG_ESP_HOSTED_SDIO_SLOT_{config[CONF_SLOT]}",
|
|
64
|
+
True,
|
|
65
|
+
)
|
|
66
|
+
esp32.add_idf_sdkconfig_option(
|
|
67
|
+
f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CLK_SLOT_{config[CONF_SLOT]}",
|
|
68
|
+
config[CONF_CLK_PIN],
|
|
69
|
+
)
|
|
70
|
+
esp32.add_idf_sdkconfig_option(
|
|
71
|
+
f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CMD_SLOT_{config[CONF_SLOT]}",
|
|
72
|
+
config[CONF_CMD_PIN],
|
|
73
|
+
)
|
|
74
|
+
esp32.add_idf_sdkconfig_option(
|
|
75
|
+
f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D0_SLOT_{config[CONF_SLOT]}",
|
|
76
|
+
config[CONF_D0_PIN],
|
|
77
|
+
)
|
|
78
|
+
esp32.add_idf_sdkconfig_option(
|
|
79
|
+
f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D1_4BIT_BUS_SLOT_{config[CONF_SLOT]}",
|
|
80
|
+
config[CONF_D1_PIN],
|
|
81
|
+
)
|
|
82
|
+
esp32.add_idf_sdkconfig_option(
|
|
83
|
+
f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D2_4BIT_BUS_SLOT_{config[CONF_SLOT]}",
|
|
84
|
+
config[CONF_D2_PIN],
|
|
85
|
+
)
|
|
86
|
+
esp32.add_idf_sdkconfig_option(
|
|
87
|
+
f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D3_4BIT_BUS_SLOT_{config[CONF_SLOT]}",
|
|
88
|
+
config[CONF_D3_PIN],
|
|
89
|
+
)
|
|
90
|
+
esp32.add_idf_sdkconfig_option("CONFIG_ESP_HOSTED_CUSTOM_SDIO_PINS", True)
|
|
91
|
+
|
|
92
|
+
framework_ver: cv.Version = CORE.data[KEY_CORE][KEY_FRAMEWORK_VERSION]
|
|
93
|
+
os.environ["ESP_IDF_VERSION"] = f"{framework_ver.major}.{framework_ver.minor}"
|
|
94
|
+
esp32.add_idf_component(name="espressif/esp_wifi_remote", ref="0.10.2")
|
|
95
|
+
esp32.add_idf_component(name="espressif/eppp_link", ref="0.2.0")
|
|
96
|
+
esp32.add_idf_component(name="espressif/esp_hosted", ref="2.0.11")
|
|
97
|
+
esp32.add_extra_script(
|
|
98
|
+
"post",
|
|
99
|
+
"esp32_hosted.py",
|
|
100
|
+
os.path.join(os.path.dirname(__file__), "esp32_hosted.py.script"),
|
|
101
|
+
)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# pylint: disable=E0602
|
|
2
|
+
Import("env") # noqa
|
|
3
|
+
|
|
4
|
+
# Workaround whole archive issue
|
|
5
|
+
if "__LIB_DEPS" in env and "libespressif__esp_hosted.a" in env["__LIB_DEPS"]:
|
|
6
|
+
env.Append(
|
|
7
|
+
LINKFLAGS=[
|
|
8
|
+
"-Wl,--whole-archive",
|
|
9
|
+
env["BUILD_DIR"] + "/esp-idf/espressif__esp_hosted/libespressif__esp_hosted.a",
|
|
10
|
+
"-Wl,--no-whole-archive",
|
|
11
|
+
]
|
|
12
|
+
)
|
|
@@ -168,6 +168,8 @@ void ESP32ImprovComponent::loop() {
|
|
|
168
168
|
case improv::STATE_PROVISIONED: {
|
|
169
169
|
this->incoming_data_.clear();
|
|
170
170
|
this->set_status_indicator_state_(false);
|
|
171
|
+
// Provisioning complete, no further loop execution needed
|
|
172
|
+
this->disable_loop();
|
|
171
173
|
break;
|
|
172
174
|
}
|
|
173
175
|
}
|
|
@@ -254,6 +256,7 @@ void ESP32ImprovComponent::start() {
|
|
|
254
256
|
|
|
255
257
|
ESP_LOGD(TAG, "Setting Improv to start");
|
|
256
258
|
this->should_start_ = true;
|
|
259
|
+
this->enable_loop();
|
|
257
260
|
}
|
|
258
261
|
|
|
259
262
|
void ESP32ImprovComponent::stop() {
|
|
@@ -1,48 +1,8 @@
|
|
|
1
|
-
import esphome.codegen as cg
|
|
2
1
|
from esphome.components import esp32
|
|
3
2
|
import esphome.config_validation as cv
|
|
4
|
-
from esphome.const import KEY_CORE, KEY_FRAMEWORK_VERSION
|
|
5
|
-
from esphome.core import CORE
|
|
6
3
|
|
|
7
4
|
CODEOWNERS = ["@jesserockz"]
|
|
8
5
|
|
|
9
|
-
RMT_TX_CHANNELS = {
|
|
10
|
-
esp32.const.VARIANT_ESP32: [0, 1, 2, 3, 4, 5, 6, 7],
|
|
11
|
-
esp32.const.VARIANT_ESP32S2: [0, 1, 2, 3],
|
|
12
|
-
esp32.const.VARIANT_ESP32S3: [0, 1, 2, 3],
|
|
13
|
-
esp32.const.VARIANT_ESP32C3: [0, 1],
|
|
14
|
-
esp32.const.VARIANT_ESP32C6: [0, 1],
|
|
15
|
-
esp32.const.VARIANT_ESP32H2: [0, 1],
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
RMT_RX_CHANNELS = {
|
|
19
|
-
esp32.const.VARIANT_ESP32: [0, 1, 2, 3, 4, 5, 6, 7],
|
|
20
|
-
esp32.const.VARIANT_ESP32S2: [0, 1, 2, 3],
|
|
21
|
-
esp32.const.VARIANT_ESP32S3: [4, 5, 6, 7],
|
|
22
|
-
esp32.const.VARIANT_ESP32C3: [2, 3],
|
|
23
|
-
esp32.const.VARIANT_ESP32C6: [2, 3],
|
|
24
|
-
esp32.const.VARIANT_ESP32H2: [2, 3],
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
rmt_channel_t = cg.global_ns.enum("rmt_channel_t")
|
|
28
|
-
RMT_CHANNEL_ENUMS = {
|
|
29
|
-
0: rmt_channel_t.RMT_CHANNEL_0,
|
|
30
|
-
1: rmt_channel_t.RMT_CHANNEL_1,
|
|
31
|
-
2: rmt_channel_t.RMT_CHANNEL_2,
|
|
32
|
-
3: rmt_channel_t.RMT_CHANNEL_3,
|
|
33
|
-
4: rmt_channel_t.RMT_CHANNEL_4,
|
|
34
|
-
5: rmt_channel_t.RMT_CHANNEL_5,
|
|
35
|
-
6: rmt_channel_t.RMT_CHANNEL_6,
|
|
36
|
-
7: rmt_channel_t.RMT_CHANNEL_7,
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def use_new_rmt_driver():
|
|
41
|
-
framework_version = CORE.data[KEY_CORE][KEY_FRAMEWORK_VERSION]
|
|
42
|
-
if CORE.using_esp_idf and framework_version >= cv.Version(5, 0, 0):
|
|
43
|
-
return True
|
|
44
|
-
return False
|
|
45
|
-
|
|
46
6
|
|
|
47
7
|
def validate_clock_resolution():
|
|
48
8
|
def _validator(value):
|
|
@@ -60,21 +20,3 @@ def validate_clock_resolution():
|
|
|
60
20
|
return value
|
|
61
21
|
|
|
62
22
|
return _validator
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def validate_rmt_channel(*, tx: bool):
|
|
66
|
-
rmt_channels = RMT_TX_CHANNELS if tx else RMT_RX_CHANNELS
|
|
67
|
-
|
|
68
|
-
def _validator(value):
|
|
69
|
-
cv.only_on_esp32(value)
|
|
70
|
-
value = cv.int_(value)
|
|
71
|
-
variant = esp32.get_esp32_variant()
|
|
72
|
-
if variant not in rmt_channels:
|
|
73
|
-
raise cv.Invalid(f"ESP32 variant {variant} does not support RMT.")
|
|
74
|
-
if value not in rmt_channels[variant]:
|
|
75
|
-
raise cv.Invalid(
|
|
76
|
-
f"RMT channel {value} does not support {'transmitting' if tx else 'receiving'} for ESP32 variant {variant}."
|
|
77
|
-
)
|
|
78
|
-
return cv.enum(RMT_CHANNEL_ENUMS)(value)
|
|
79
|
-
|
|
80
|
-
return _validator
|