esphome 2025.6.3__py3-none-any.whl → 2025.7.0b2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +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 +57 -21
- esphome/components/api/api_connection.cpp +344 -539
- esphome/components/api/api_connection.h +224 -141
- esphome/components/api/api_frame_helper.cpp +91 -127
- esphome/components/api/api_frame_helper.h +64 -54
- esphome/components/api/api_pb2.cpp +1837 -9044
- esphome/components/api/api_pb2.h +532 -685
- esphome/components/api/api_pb2_dump.cpp +4432 -0
- esphome/components/api/api_pb2_service.cpp +184 -425
- esphome/components/api/api_pb2_service.h +13 -6
- esphome/components/api/api_server.cpp +131 -167
- esphome/components/api/api_server.h +38 -10
- esphome/components/api/client.py +8 -2
- esphome/components/api/custom_api_device.h +8 -0
- esphome/components/api/list_entities.cpp +37 -104
- esphome/components/api/list_entities.h +33 -23
- esphome/components/api/proto.h +532 -26
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- esphome/components/api/user_services.h +2 -0
- 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/debug/debug_esp32.cpp +2 -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 +103 -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 +112 -98
- 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 +240 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +2 -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 +3 -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.h +1 -0
- 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 +421 -268
- 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 +5 -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 +132 -47
- 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 +34 -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 +2 -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 +0 -4
- 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/usb_host/usb_host_client.cpp +10 -10
- esphome/components/usb_uart/cp210x.cpp +1 -1
- esphome/components/usb_uart/usb_uart.cpp +41 -44
- esphome/components/usb_uart/usb_uart.h +4 -3
- 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 +305 -427
- 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 +11 -9
- esphome/core/component_iterator.h +12 -10
- 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 +168 -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 +275 -103
- esphome/core/scheduler.h +154 -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 +17 -4
- esphome/writer.py +21 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/METADATA +10 -9
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/RECORD +597 -538
- esphome/components/api/api_pb2_size.h +0 -361
- 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.3.dist-info → esphome-2025.7.0b2.dist-info}/WHEEL +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/top_level.txt +0 -0
|
@@ -23,8 +23,10 @@ from esphome.const import (
|
|
|
23
23
|
CONF_INTERRUPT_PIN,
|
|
24
24
|
CONF_MANUAL_IP,
|
|
25
25
|
CONF_MISO_PIN,
|
|
26
|
+
CONF_MODE,
|
|
26
27
|
CONF_MOSI_PIN,
|
|
27
28
|
CONF_PAGE_ID,
|
|
29
|
+
CONF_PIN,
|
|
28
30
|
CONF_POLLING_INTERVAL,
|
|
29
31
|
CONF_RESET_PIN,
|
|
30
32
|
CONF_SPI,
|
|
@@ -49,6 +51,7 @@ PHYRegister = ethernet_ns.struct("PHYRegister")
|
|
|
49
51
|
CONF_PHY_ADDR = "phy_addr"
|
|
50
52
|
CONF_MDC_PIN = "mdc_pin"
|
|
51
53
|
CONF_MDIO_PIN = "mdio_pin"
|
|
54
|
+
CONF_CLK = "clk"
|
|
52
55
|
CONF_CLK_MODE = "clk_mode"
|
|
53
56
|
CONF_POWER_PIN = "power_pin"
|
|
54
57
|
CONF_PHY_REGISTERS = "phy_registers"
|
|
@@ -66,32 +69,25 @@ ETHERNET_TYPES = {
|
|
|
66
69
|
"KSZ8081RNA": EthernetType.ETHERNET_TYPE_KSZ8081RNA,
|
|
67
70
|
"W5500": EthernetType.ETHERNET_TYPE_W5500,
|
|
68
71
|
"OPENETH": EthernetType.ETHERNET_TYPE_OPENETH,
|
|
72
|
+
"DM9051": EthernetType.ETHERNET_TYPE_DM9051,
|
|
69
73
|
}
|
|
70
74
|
|
|
71
|
-
SPI_ETHERNET_TYPES = ["W5500"]
|
|
75
|
+
SPI_ETHERNET_TYPES = ["W5500", "DM9051"]
|
|
72
76
|
SPI_ETHERNET_DEFAULT_POLLING_INTERVAL = TimePeriodMilliseconds(milliseconds=10)
|
|
73
77
|
|
|
74
78
|
emac_rmii_clock_mode_t = cg.global_ns.enum("emac_rmii_clock_mode_t")
|
|
75
|
-
|
|
79
|
+
|
|
76
80
|
CLK_MODES = {
|
|
77
|
-
"
|
|
78
|
-
|
|
79
|
-
emac_rmii_clock_gpio_t.EMAC_CLK_IN_GPIO,
|
|
80
|
-
),
|
|
81
|
-
"GPIO0_OUT": (
|
|
82
|
-
emac_rmii_clock_mode_t.EMAC_CLK_OUT,
|
|
83
|
-
emac_rmii_clock_gpio_t.EMAC_APPL_CLK_OUT_GPIO,
|
|
84
|
-
),
|
|
85
|
-
"GPIO16_OUT": (
|
|
86
|
-
emac_rmii_clock_mode_t.EMAC_CLK_OUT,
|
|
87
|
-
emac_rmii_clock_gpio_t.EMAC_CLK_OUT_GPIO,
|
|
88
|
-
),
|
|
89
|
-
"GPIO17_OUT": (
|
|
90
|
-
emac_rmii_clock_mode_t.EMAC_CLK_OUT,
|
|
91
|
-
emac_rmii_clock_gpio_t.EMAC_CLK_OUT_180_GPIO,
|
|
92
|
-
),
|
|
81
|
+
"CLK_EXT_IN": emac_rmii_clock_mode_t.EMAC_CLK_EXT_IN,
|
|
82
|
+
"CLK_OUT": emac_rmii_clock_mode_t.EMAC_CLK_OUT,
|
|
93
83
|
}
|
|
94
84
|
|
|
85
|
+
CLK_MODES_DEPRECATED = {
|
|
86
|
+
"GPIO0_IN": ("CLK_EXT_IN", 0),
|
|
87
|
+
"GPIO0_OUT": ("CLK_OUT", 0),
|
|
88
|
+
"GPIO16_OUT": ("CLK_OUT", 16),
|
|
89
|
+
"GPIO17_OUT": ("CLK_OUT", 17),
|
|
90
|
+
}
|
|
95
91
|
|
|
96
92
|
MANUAL_IP_SCHEMA = cv.Schema(
|
|
97
93
|
{
|
|
@@ -153,6 +149,18 @@ def _validate(config):
|
|
|
153
149
|
f"({CORE.target_framework} {CORE.data[KEY_CORE][KEY_FRAMEWORK_VERSION]}), "
|
|
154
150
|
f"'{CONF_INTERRUPT_PIN}' is a required option for [ethernet]."
|
|
155
151
|
)
|
|
152
|
+
elif config[CONF_TYPE] != "OPENETH":
|
|
153
|
+
if CONF_CLK_MODE in config:
|
|
154
|
+
LOGGER.warning(
|
|
155
|
+
"[ethernet] The 'clk_mode' option is deprecated and will be removed in ESPHome 2026.1. "
|
|
156
|
+
"Please update your configuration to use 'clk' instead."
|
|
157
|
+
)
|
|
158
|
+
mode = CLK_MODES_DEPRECATED[config[CONF_CLK_MODE]]
|
|
159
|
+
config[CONF_CLK] = CLK_SCHEMA({CONF_MODE: mode[0], CONF_PIN: mode[1]})
|
|
160
|
+
del config[CONF_CLK_MODE]
|
|
161
|
+
elif CONF_CLK not in config:
|
|
162
|
+
raise cv.Invalid("'clk' is a required option for [ethernet].")
|
|
163
|
+
|
|
156
164
|
return config
|
|
157
165
|
|
|
158
166
|
|
|
@@ -176,14 +184,21 @@ PHY_REGISTER_SCHEMA = cv.Schema(
|
|
|
176
184
|
cv.Optional(CONF_PAGE_ID): cv.hex_int,
|
|
177
185
|
}
|
|
178
186
|
)
|
|
187
|
+
CLK_SCHEMA = cv.Schema(
|
|
188
|
+
{
|
|
189
|
+
cv.Required(CONF_MODE): cv.enum(CLK_MODES, upper=True, space="_"),
|
|
190
|
+
cv.Required(CONF_PIN): pins.internal_gpio_pin_number,
|
|
191
|
+
}
|
|
192
|
+
)
|
|
179
193
|
RMII_SCHEMA = BASE_SCHEMA.extend(
|
|
180
194
|
cv.Schema(
|
|
181
195
|
{
|
|
182
196
|
cv.Required(CONF_MDC_PIN): pins.internal_gpio_output_pin_number,
|
|
183
197
|
cv.Required(CONF_MDIO_PIN): pins.internal_gpio_output_pin_number,
|
|
184
|
-
cv.Optional(CONF_CLK_MODE
|
|
185
|
-
|
|
198
|
+
cv.Optional(CONF_CLK_MODE): cv.enum(
|
|
199
|
+
CLK_MODES_DEPRECATED, upper=True, space="_"
|
|
186
200
|
),
|
|
201
|
+
cv.Optional(CONF_CLK): CLK_SCHEMA,
|
|
187
202
|
cv.Optional(CONF_PHY_ADDR, default=0): cv.int_range(min=0, max=31),
|
|
188
203
|
cv.Optional(CONF_POWER_PIN): pins.internal_gpio_output_pin_number,
|
|
189
204
|
cv.Optional(CONF_PHY_REGISTERS): cv.ensure_list(PHY_REGISTER_SCHEMA),
|
|
@@ -224,6 +239,7 @@ CONFIG_SCHEMA = cv.All(
|
|
|
224
239
|
"KSZ8081RNA": RMII_SCHEMA,
|
|
225
240
|
"W5500": SPI_SCHEMA,
|
|
226
241
|
"OPENETH": BASE_SCHEMA,
|
|
242
|
+
"DM9051": SPI_SCHEMA,
|
|
227
243
|
},
|
|
228
244
|
upper=True,
|
|
229
245
|
),
|
|
@@ -278,7 +294,7 @@ async def to_code(config):
|
|
|
278
294
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
279
295
|
await cg.register_component(var, config)
|
|
280
296
|
|
|
281
|
-
if config[CONF_TYPE]
|
|
297
|
+
if config[CONF_TYPE] in SPI_ETHERNET_TYPES:
|
|
282
298
|
cg.add(var.set_clk_pin(config[CONF_CLK_PIN]))
|
|
283
299
|
cg.add(var.set_miso_pin(config[CONF_MISO_PIN]))
|
|
284
300
|
cg.add(var.set_mosi_pin(config[CONF_MOSI_PIN]))
|
|
@@ -296,7 +312,9 @@ async def to_code(config):
|
|
|
296
312
|
cg.add_define("USE_ETHERNET_SPI")
|
|
297
313
|
if CORE.using_esp_idf:
|
|
298
314
|
add_idf_sdkconfig_option("CONFIG_ETH_USE_SPI_ETHERNET", True)
|
|
299
|
-
add_idf_sdkconfig_option(
|
|
315
|
+
add_idf_sdkconfig_option(
|
|
316
|
+
f"CONFIG_ETH_SPI_ETHERNET_{config[CONF_TYPE]}", True
|
|
317
|
+
)
|
|
300
318
|
elif config[CONF_TYPE] == "OPENETH":
|
|
301
319
|
cg.add_define("USE_ETHERNET_OPENETH")
|
|
302
320
|
add_idf_sdkconfig_option("CONFIG_ETH_USE_OPENETH", True)
|
|
@@ -304,7 +322,8 @@ async def to_code(config):
|
|
|
304
322
|
cg.add(var.set_phy_addr(config[CONF_PHY_ADDR]))
|
|
305
323
|
cg.add(var.set_mdc_pin(config[CONF_MDC_PIN]))
|
|
306
324
|
cg.add(var.set_mdio_pin(config[CONF_MDIO_PIN]))
|
|
307
|
-
cg.add(var.set_clk_mode(
|
|
325
|
+
cg.add(var.set_clk_mode(config[CONF_CLK][CONF_MODE]))
|
|
326
|
+
cg.add(var.set_clk_pin(config[CONF_CLK][CONF_PIN]))
|
|
308
327
|
if CONF_POWER_PIN in config:
|
|
309
328
|
cg.add(var.set_power_pin(config[CONF_POWER_PIN]))
|
|
310
329
|
for register_value in config.get(CONF_PHY_REGISTERS, []):
|
|
@@ -19,11 +19,7 @@
|
|
|
19
19
|
#include <sys/cdefs.h>
|
|
20
20
|
#include "esp_log.h"
|
|
21
21
|
#include "esp_eth.h"
|
|
22
|
-
#if ESP_IDF_VERSION_MAJOR >= 5
|
|
23
22
|
#include "esp_eth_phy_802_3.h"
|
|
24
|
-
#else
|
|
25
|
-
#include "eth_phy_regs_struct.h"
|
|
26
|
-
#endif
|
|
27
23
|
#include "freertos/FreeRTOS.h"
|
|
28
24
|
#include "freertos/task.h"
|
|
29
25
|
#include "driver/gpio.h"
|
|
@@ -174,11 +170,7 @@ static esp_err_t jl1101_reset_hw(esp_eth_phy_t *phy) {
|
|
|
174
170
|
return ESP_OK;
|
|
175
171
|
}
|
|
176
172
|
|
|
177
|
-
#if ESP_IDF_VERSION_MAJOR >= 5
|
|
178
173
|
static esp_err_t jl1101_negotiate(esp_eth_phy_t *phy, eth_phy_autoneg_cmd_t cmd, bool *nego_state) {
|
|
179
|
-
#else
|
|
180
|
-
static esp_err_t jl1101_negotiate(esp_eth_phy_t *phy) {
|
|
181
|
-
#endif
|
|
182
174
|
phy_jl1101_t *jl1101 = __containerof(phy, phy_jl1101_t, parent);
|
|
183
175
|
esp_eth_mediator_t *eth = jl1101->eth;
|
|
184
176
|
/* in case any link status has changed, let's assume we're in link down status */
|
|
@@ -293,11 +285,7 @@ static esp_err_t jl1101_init(esp_eth_phy_t *phy) {
|
|
|
293
285
|
esp_eth_mediator_t *eth = jl1101->eth;
|
|
294
286
|
// Detect PHY address
|
|
295
287
|
if (jl1101->addr == ESP_ETH_PHY_ADDR_AUTO) {
|
|
296
|
-
#if ESP_IDF_VERSION_MAJOR >= 5
|
|
297
288
|
PHY_CHECK(esp_eth_phy_802_3_detect_phy_addr(eth, &jl1101->addr) == ESP_OK, "Detect PHY address failed", err);
|
|
298
|
-
#else
|
|
299
|
-
PHY_CHECK(esp_eth_detect_phy_addr(eth, &jl1101->addr) == ESP_OK, "Detect PHY address failed", err);
|
|
300
|
-
#endif
|
|
301
289
|
}
|
|
302
290
|
/* Power on Ethernet PHY */
|
|
303
291
|
PHY_CHECK(jl1101_pwrctl(phy, true) == ESP_OK, "power control failed", err);
|
|
@@ -336,11 +324,7 @@ esp_eth_phy_t *esp_eth_phy_new_jl1101(const eth_phy_config_t *config) {
|
|
|
336
324
|
jl1101->parent.init = jl1101_init;
|
|
337
325
|
jl1101->parent.deinit = jl1101_deinit;
|
|
338
326
|
jl1101->parent.set_mediator = jl1101_set_mediator;
|
|
339
|
-
#if ESP_IDF_VERSION_MAJOR >= 5
|
|
340
327
|
jl1101->parent.autonego_ctrl = jl1101_negotiate;
|
|
341
|
-
#else
|
|
342
|
-
jl1101->parent.negotiate = jl1101_negotiate;
|
|
343
|
-
#endif
|
|
344
328
|
jl1101->parent.get_link = jl1101_get_link;
|
|
345
329
|
jl1101->parent.pwrctl = jl1101_pwrctl;
|
|
346
330
|
jl1101->parent.get_addr = jl1101_get_addr;
|
|
@@ -17,6 +17,22 @@
|
|
|
17
17
|
namespace esphome {
|
|
18
18
|
namespace ethernet {
|
|
19
19
|
|
|
20
|
+
#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 4, 2)
|
|
21
|
+
// work around IDF compile issue on P4 https://github.com/espressif/esp-idf/pull/15637
|
|
22
|
+
#ifdef USE_ESP32_VARIANT_ESP32P4
|
|
23
|
+
#undef ETH_ESP32_EMAC_DEFAULT_CONFIG
|
|
24
|
+
#define ETH_ESP32_EMAC_DEFAULT_CONFIG() \
|
|
25
|
+
{ \
|
|
26
|
+
.smi_gpio = {.mdc_num = 31, .mdio_num = 52}, .interface = EMAC_DATA_INTERFACE_RMII, \
|
|
27
|
+
.clock_config = {.rmii = {.clock_mode = EMAC_CLK_EXT_IN, .clock_gpio = (emac_rmii_clock_gpio_t) 50}}, \
|
|
28
|
+
.dma_burst_len = ETH_DMA_BURST_LEN_32, .intr_priority = 0, \
|
|
29
|
+
.emac_dataif_gpio = \
|
|
30
|
+
{.rmii = {.tx_en_num = 49, .txd0_num = 34, .txd1_num = 35, .crs_dv_num = 28, .rxd0_num = 29, .rxd1_num = 30}}, \
|
|
31
|
+
.clock_config_out_in = {.rmii = {.clock_mode = EMAC_CLK_EXT_IN, .clock_gpio = (emac_rmii_clock_gpio_t) -1}}, \
|
|
32
|
+
}
|
|
33
|
+
#endif
|
|
34
|
+
#endif
|
|
35
|
+
|
|
20
36
|
static const char *const TAG = "ethernet";
|
|
21
37
|
|
|
22
38
|
EthernetComponent *global_eth_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
|
@@ -90,8 +106,8 @@ void EthernetComponent::setup() {
|
|
|
90
106
|
|
|
91
107
|
#ifdef USE_ETHERNET_SPI // Configure SPI interface and Ethernet driver for specific SPI module
|
|
92
108
|
spi_device_interface_config_t devcfg = {
|
|
93
|
-
.command_bits =
|
|
94
|
-
.address_bits =
|
|
109
|
+
.command_bits = 0,
|
|
110
|
+
.address_bits = 0,
|
|
95
111
|
.dummy_bits = 0,
|
|
96
112
|
.mode = 0,
|
|
97
113
|
.duty_cycle_pos = 0,
|
|
@@ -106,45 +122,49 @@ void EthernetComponent::setup() {
|
|
|
106
122
|
.post_cb = nullptr,
|
|
107
123
|
};
|
|
108
124
|
|
|
109
|
-
#if
|
|
125
|
+
#if CONFIG_ETH_SPI_ETHERNET_W5500
|
|
110
126
|
eth_w5500_config_t w5500_config = ETH_W5500_DEFAULT_CONFIG(host, &devcfg);
|
|
111
|
-
#else
|
|
112
|
-
spi_device_handle_t spi_handle = nullptr;
|
|
113
|
-
err = spi_bus_add_device(host, &devcfg, &spi_handle);
|
|
114
|
-
ESPHL_ERROR_CHECK(err, "SPI bus add device error");
|
|
115
|
-
|
|
116
|
-
eth_w5500_config_t w5500_config = ETH_W5500_DEFAULT_CONFIG(spi_handle);
|
|
117
127
|
#endif
|
|
128
|
+
#if CONFIG_ETH_SPI_ETHERNET_DM9051
|
|
129
|
+
eth_dm9051_config_t dm9051_config = ETH_DM9051_DEFAULT_CONFIG(host, &devcfg);
|
|
130
|
+
#endif
|
|
131
|
+
|
|
132
|
+
#if CONFIG_ETH_SPI_ETHERNET_W5500
|
|
118
133
|
w5500_config.int_gpio_num = this->interrupt_pin_;
|
|
119
134
|
#ifdef USE_ETHERNET_SPI_POLLING_SUPPORT
|
|
120
135
|
w5500_config.poll_period_ms = this->polling_interval_;
|
|
121
136
|
#endif
|
|
137
|
+
#endif
|
|
138
|
+
|
|
139
|
+
#if CONFIG_ETH_SPI_ETHERNET_DM9051
|
|
140
|
+
dm9051_config.int_gpio_num = this->interrupt_pin_;
|
|
141
|
+
#ifdef USE_ETHERNET_SPI_POLLING_SUPPORT
|
|
142
|
+
dm9051_config.poll_period_ms = this->polling_interval_;
|
|
143
|
+
#endif
|
|
144
|
+
#endif
|
|
145
|
+
|
|
122
146
|
phy_config.phy_addr = this->phy_addr_spi_;
|
|
123
147
|
phy_config.reset_gpio_num = this->reset_pin_;
|
|
124
148
|
|
|
125
|
-
esp_eth_mac_t *mac =
|
|
149
|
+
esp_eth_mac_t *mac = nullptr;
|
|
126
150
|
#elif defined(USE_ETHERNET_OPENETH)
|
|
127
151
|
esp_eth_mac_t *mac = esp_eth_mac_new_openeth(&mac_config);
|
|
128
152
|
#else
|
|
129
153
|
phy_config.phy_addr = this->phy_addr_;
|
|
130
154
|
phy_config.reset_gpio_num = this->power_pin_;
|
|
131
155
|
|
|
132
|
-
#if ESP_IDF_VERSION_MAJOR >= 5
|
|
133
156
|
eth_esp32_emac_config_t esp32_emac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG();
|
|
157
|
+
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 3, 0)
|
|
158
|
+
esp32_emac_config.smi_gpio.mdc_num = this->mdc_pin_;
|
|
159
|
+
esp32_emac_config.smi_gpio.mdio_num = this->mdio_pin_;
|
|
160
|
+
#else
|
|
134
161
|
esp32_emac_config.smi_mdc_gpio_num = this->mdc_pin_;
|
|
135
162
|
esp32_emac_config.smi_mdio_gpio_num = this->mdio_pin_;
|
|
163
|
+
#endif
|
|
136
164
|
esp32_emac_config.clock_config.rmii.clock_mode = this->clk_mode_;
|
|
137
|
-
esp32_emac_config.clock_config.rmii.clock_gpio = this->
|
|
165
|
+
esp32_emac_config.clock_config.rmii.clock_gpio = (emac_rmii_clock_gpio_t) this->clk_pin_;
|
|
138
166
|
|
|
139
167
|
esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config);
|
|
140
|
-
#else
|
|
141
|
-
mac_config.smi_mdc_gpio_num = this->mdc_pin_;
|
|
142
|
-
mac_config.smi_mdio_gpio_num = this->mdio_pin_;
|
|
143
|
-
mac_config.clock_config.rmii.clock_mode = this->clk_mode_;
|
|
144
|
-
mac_config.clock_config.rmii.clock_gpio = this->clk_gpio_;
|
|
145
|
-
|
|
146
|
-
esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&mac_config);
|
|
147
|
-
#endif
|
|
148
168
|
#endif
|
|
149
169
|
|
|
150
170
|
switch (this->type_) {
|
|
@@ -178,19 +198,25 @@ void EthernetComponent::setup() {
|
|
|
178
198
|
}
|
|
179
199
|
case ETHERNET_TYPE_KSZ8081:
|
|
180
200
|
case ETHERNET_TYPE_KSZ8081RNA: {
|
|
181
|
-
#if ESP_IDF_VERSION_MAJOR >= 5
|
|
182
201
|
this->phy_ = esp_eth_phy_new_ksz80xx(&phy_config);
|
|
183
|
-
#else
|
|
184
|
-
this->phy_ = esp_eth_phy_new_ksz8081(&phy_config);
|
|
185
|
-
#endif
|
|
186
202
|
break;
|
|
187
203
|
}
|
|
188
204
|
#endif
|
|
189
205
|
#ifdef USE_ETHERNET_SPI
|
|
206
|
+
#if CONFIG_ETH_SPI_ETHERNET_W5500
|
|
190
207
|
case ETHERNET_TYPE_W5500: {
|
|
208
|
+
mac = esp_eth_mac_new_w5500(&w5500_config, &mac_config);
|
|
191
209
|
this->phy_ = esp_eth_phy_new_w5500(&phy_config);
|
|
192
210
|
break;
|
|
193
211
|
}
|
|
212
|
+
#endif
|
|
213
|
+
#if CONFIG_ETH_SPI_ETHERNET_DM9051
|
|
214
|
+
case ETHERNET_TYPE_DM9051: {
|
|
215
|
+
mac = esp_eth_mac_new_dm9051(&dm9051_config, &mac_config);
|
|
216
|
+
this->phy_ = esp_eth_phy_new_dm9051(&phy_config);
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
#endif
|
|
194
220
|
#endif
|
|
195
221
|
default: {
|
|
196
222
|
this->mark_failed();
|
|
@@ -274,6 +300,9 @@ void EthernetComponent::loop() {
|
|
|
274
300
|
ESP_LOGW(TAG, "Connection lost; reconnecting");
|
|
275
301
|
this->state_ = EthernetComponentState::CONNECTING;
|
|
276
302
|
this->start_connect_();
|
|
303
|
+
} else {
|
|
304
|
+
// When connected and stable, disable the loop to save CPU cycles
|
|
305
|
+
this->disable_loop();
|
|
277
306
|
}
|
|
278
307
|
break;
|
|
279
308
|
}
|
|
@@ -318,6 +347,10 @@ void EthernetComponent::dump_config() {
|
|
|
318
347
|
eth_type = "OPENETH";
|
|
319
348
|
break;
|
|
320
349
|
|
|
350
|
+
case ETHERNET_TYPE_DM9051:
|
|
351
|
+
eth_type = "DM9051";
|
|
352
|
+
break;
|
|
353
|
+
|
|
321
354
|
default:
|
|
322
355
|
eth_type = "Unknown";
|
|
323
356
|
break;
|
|
@@ -349,10 +382,11 @@ void EthernetComponent::dump_config() {
|
|
|
349
382
|
ESP_LOGCONFIG(TAG, " Power Pin: %u", this->power_pin_);
|
|
350
383
|
}
|
|
351
384
|
ESP_LOGCONFIG(TAG,
|
|
385
|
+
" CLK Pin: %u\n"
|
|
352
386
|
" MDC Pin: %u\n"
|
|
353
387
|
" MDIO Pin: %u\n"
|
|
354
388
|
" PHY addr: %u",
|
|
355
|
-
this->mdc_pin_, this->mdio_pin_, this->phy_addr_);
|
|
389
|
+
this->clk_pin_, this->mdc_pin_, this->mdio_pin_, this->phy_addr_);
|
|
356
390
|
#endif
|
|
357
391
|
ESP_LOGCONFIG(TAG, " Type: %s", eth_type);
|
|
358
392
|
}
|
|
@@ -397,11 +431,13 @@ void EthernetComponent::eth_event_handler(void *arg, esp_event_base_t event_base
|
|
|
397
431
|
case ETHERNET_EVENT_START:
|
|
398
432
|
event_name = "ETH started";
|
|
399
433
|
global_eth_component->started_ = true;
|
|
434
|
+
global_eth_component->enable_loop_soon_any_context();
|
|
400
435
|
break;
|
|
401
436
|
case ETHERNET_EVENT_STOP:
|
|
402
437
|
event_name = "ETH stopped";
|
|
403
438
|
global_eth_component->started_ = false;
|
|
404
439
|
global_eth_component->connected_ = false;
|
|
440
|
+
global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
|
|
405
441
|
break;
|
|
406
442
|
case ETHERNET_EVENT_CONNECTED:
|
|
407
443
|
event_name = "ETH connected";
|
|
@@ -409,6 +445,7 @@ void EthernetComponent::eth_event_handler(void *arg, esp_event_base_t event_base
|
|
|
409
445
|
case ETHERNET_EVENT_DISCONNECTED:
|
|
410
446
|
event_name = "ETH disconnected";
|
|
411
447
|
global_eth_component->connected_ = false;
|
|
448
|
+
global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
|
|
412
449
|
break;
|
|
413
450
|
default:
|
|
414
451
|
return;
|
|
@@ -425,8 +462,10 @@ void EthernetComponent::got_ip_event_handler(void *arg, esp_event_base_t event_b
|
|
|
425
462
|
global_eth_component->got_ipv4_address_ = true;
|
|
426
463
|
#if USE_NETWORK_IPV6 && (USE_NETWORK_MIN_IPV6_ADDR_COUNT > 0)
|
|
427
464
|
global_eth_component->connected_ = global_eth_component->ipv6_count_ >= USE_NETWORK_MIN_IPV6_ADDR_COUNT;
|
|
465
|
+
global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
|
|
428
466
|
#else
|
|
429
467
|
global_eth_component->connected_ = true;
|
|
468
|
+
global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
|
|
430
469
|
#endif /* USE_NETWORK_IPV6 */
|
|
431
470
|
}
|
|
432
471
|
|
|
@@ -439,8 +478,10 @@ void EthernetComponent::got_ip6_event_handler(void *arg, esp_event_base_t event_
|
|
|
439
478
|
#if (USE_NETWORK_MIN_IPV6_ADDR_COUNT > 0)
|
|
440
479
|
global_eth_component->connected_ =
|
|
441
480
|
global_eth_component->got_ipv4_address_ && (global_eth_component->ipv6_count_ >= USE_NETWORK_MIN_IPV6_ADDR_COUNT);
|
|
481
|
+
global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
|
|
442
482
|
#else
|
|
443
483
|
global_eth_component->connected_ = global_eth_component->got_ipv4_address_;
|
|
484
|
+
global_eth_component->enable_loop_soon_any_context(); // Enable loop when connection state changes
|
|
444
485
|
#endif
|
|
445
486
|
}
|
|
446
487
|
#endif /* USE_NETWORK_IPV6 */
|
|
@@ -566,10 +607,8 @@ void EthernetComponent::set_phy_addr(uint8_t phy_addr) { this->phy_addr_ = phy_a
|
|
|
566
607
|
void EthernetComponent::set_power_pin(int power_pin) { this->power_pin_ = power_pin; }
|
|
567
608
|
void EthernetComponent::set_mdc_pin(uint8_t mdc_pin) { this->mdc_pin_ = mdc_pin; }
|
|
568
609
|
void EthernetComponent::set_mdio_pin(uint8_t mdio_pin) { this->mdio_pin_ = mdio_pin; }
|
|
569
|
-
void EthernetComponent::
|
|
570
|
-
|
|
571
|
-
this->clk_gpio_ = clk_gpio;
|
|
572
|
-
}
|
|
610
|
+
void EthernetComponent::set_clk_pin(uint8_t clk_pin) { this->clk_pin_ = clk_pin; }
|
|
611
|
+
void EthernetComponent::set_clk_mode(emac_rmii_clock_mode_t clk_mode) { this->clk_mode_ = clk_mode; }
|
|
573
612
|
void EthernetComponent::add_phy_register(PHYRegister register_value) { this->phy_registers_.push_back(register_value); }
|
|
574
613
|
#endif
|
|
575
614
|
void EthernetComponent::set_type(EthernetType type) { this->type_ = type; }
|
|
@@ -620,6 +659,7 @@ bool EthernetComponent::powerdown() {
|
|
|
620
659
|
}
|
|
621
660
|
this->connected_ = false;
|
|
622
661
|
this->started_ = false;
|
|
662
|
+
// No need to enable_loop() here as this is only called during shutdown/reboot
|
|
623
663
|
if (this->phy_->pwrctl(this->phy_, false) != ESP_OK) {
|
|
624
664
|
ESP_LOGE(TAG, "Error powering down ethernet PHY");
|
|
625
665
|
return false;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
namespace esphome {
|
|
16
16
|
namespace ethernet {
|
|
17
17
|
|
|
18
|
-
enum EthernetType {
|
|
18
|
+
enum EthernetType : uint8_t {
|
|
19
19
|
ETHERNET_TYPE_UNKNOWN = 0,
|
|
20
20
|
ETHERNET_TYPE_LAN8720,
|
|
21
21
|
ETHERNET_TYPE_RTL8201,
|
|
@@ -26,6 +26,7 @@ enum EthernetType {
|
|
|
26
26
|
ETHERNET_TYPE_KSZ8081RNA,
|
|
27
27
|
ETHERNET_TYPE_W5500,
|
|
28
28
|
ETHERNET_TYPE_OPENETH,
|
|
29
|
+
ETHERNET_TYPE_DM9051,
|
|
29
30
|
};
|
|
30
31
|
|
|
31
32
|
struct ManualIP {
|
|
@@ -42,7 +43,7 @@ struct PHYRegister {
|
|
|
42
43
|
uint32_t page;
|
|
43
44
|
};
|
|
44
45
|
|
|
45
|
-
enum class EthernetComponentState {
|
|
46
|
+
enum class EthernetComponentState : uint8_t {
|
|
46
47
|
STOPPED,
|
|
47
48
|
CONNECTING,
|
|
48
49
|
CONNECTED,
|
|
@@ -75,7 +76,8 @@ class EthernetComponent : public Component {
|
|
|
75
76
|
void set_power_pin(int power_pin);
|
|
76
77
|
void set_mdc_pin(uint8_t mdc_pin);
|
|
77
78
|
void set_mdio_pin(uint8_t mdio_pin);
|
|
78
|
-
void
|
|
79
|
+
void set_clk_pin(uint8_t clk_pin);
|
|
80
|
+
void set_clk_mode(emac_rmii_clock_mode_t clk_mode);
|
|
79
81
|
void add_phy_register(PHYRegister register_value);
|
|
80
82
|
#endif
|
|
81
83
|
void set_type(EthernetType type);
|
|
@@ -119,25 +121,31 @@ class EthernetComponent : public Component {
|
|
|
119
121
|
uint32_t polling_interval_{0};
|
|
120
122
|
#endif
|
|
121
123
|
#else
|
|
122
|
-
|
|
124
|
+
// Group all 32-bit members first
|
|
123
125
|
int power_pin_{-1};
|
|
124
|
-
uint8_t mdc_pin_{23};
|
|
125
|
-
uint8_t mdio_pin_{18};
|
|
126
126
|
emac_rmii_clock_mode_t clk_mode_{EMAC_CLK_EXT_IN};
|
|
127
|
-
emac_rmii_clock_gpio_t clk_gpio_{EMAC_CLK_IN_GPIO};
|
|
128
127
|
std::vector<PHYRegister> phy_registers_{};
|
|
128
|
+
|
|
129
|
+
// Group all 8-bit members together
|
|
130
|
+
uint8_t clk_pin_{0};
|
|
131
|
+
uint8_t phy_addr_{0};
|
|
132
|
+
uint8_t mdc_pin_{23};
|
|
133
|
+
uint8_t mdio_pin_{18};
|
|
129
134
|
#endif
|
|
130
|
-
EthernetType type_{ETHERNET_TYPE_UNKNOWN};
|
|
131
135
|
optional<ManualIP> manual_ip_{};
|
|
136
|
+
uint32_t connect_begin_;
|
|
132
137
|
|
|
138
|
+
// Group all uint8_t types together (enums and bools)
|
|
139
|
+
EthernetType type_{ETHERNET_TYPE_UNKNOWN};
|
|
140
|
+
EthernetComponentState state_{EthernetComponentState::STOPPED};
|
|
133
141
|
bool started_{false};
|
|
134
142
|
bool connected_{false};
|
|
135
143
|
bool got_ipv4_address_{false};
|
|
136
144
|
#if LWIP_IPV6
|
|
137
145
|
uint8_t ipv6_count_{0};
|
|
138
146
|
#endif /* LWIP_IPV6 */
|
|
139
|
-
|
|
140
|
-
|
|
147
|
+
|
|
148
|
+
// Pointers at the end (naturally aligned)
|
|
141
149
|
esp_netif_t *eth_netif_{nullptr};
|
|
142
150
|
esp_eth_handle_t eth_handle_;
|
|
143
151
|
esp_eth_phy_t *phy_{nullptr};
|
|
@@ -18,8 +18,8 @@ from esphome.const import (
|
|
|
18
18
|
DEVICE_CLASS_MOTION,
|
|
19
19
|
)
|
|
20
20
|
from esphome.core import CORE, coroutine_with_priority
|
|
21
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
21
22
|
from esphome.cpp_generator import MockObjClass
|
|
22
|
-
from esphome.cpp_helpers import setup_entity
|
|
23
23
|
|
|
24
24
|
CODEOWNERS = ["@nohat"]
|
|
25
25
|
IS_PLATFORM_COMPONENT = True
|
|
@@ -59,6 +59,9 @@ _EVENT_SCHEMA = (
|
|
|
59
59
|
)
|
|
60
60
|
|
|
61
61
|
|
|
62
|
+
_EVENT_SCHEMA.add_extra(entity_duplicate_validator("event"))
|
|
63
|
+
|
|
64
|
+
|
|
62
65
|
def event_schema(
|
|
63
66
|
class_: MockObjClass = cv.UNDEFINED,
|
|
64
67
|
*,
|
|
@@ -88,7 +91,7 @@ EVENT_SCHEMA.add_extra(cv.deprecated_schema_constant("event"))
|
|
|
88
91
|
|
|
89
92
|
|
|
90
93
|
async def setup_event_core_(var, config, *, event_types: list[str]):
|
|
91
|
-
await setup_entity(var, config)
|
|
94
|
+
await setup_entity(var, config, "event")
|
|
92
95
|
|
|
93
96
|
for conf in config.get(CONF_ON_EVENT, []):
|
|
94
97
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
esphome/components/ezo/ezo.h
CHANGED
|
@@ -38,7 +38,6 @@ class EZOSensor : public sensor::Sensor, public PollingComponent, public i2c::I2
|
|
|
38
38
|
void loop() override;
|
|
39
39
|
void dump_config() override;
|
|
40
40
|
void update() override;
|
|
41
|
-
float get_setup_priority() const override { return setup_priority::DATA; };
|
|
42
41
|
|
|
43
42
|
// I2C
|
|
44
43
|
void set_address(uint8_t address);
|
|
@@ -23,7 +23,6 @@ namespace ezo_pmp {
|
|
|
23
23
|
class EzoPMP : public PollingComponent, public i2c::I2CDevice {
|
|
24
24
|
public:
|
|
25
25
|
void dump_config() override;
|
|
26
|
-
float get_setup_priority() const override { return setup_priority::DATA; };
|
|
27
26
|
|
|
28
27
|
void loop() override;
|
|
29
28
|
void update() override;
|
|
@@ -32,7 +32,7 @@ from esphome.const import (
|
|
|
32
32
|
CONF_WEB_SERVER,
|
|
33
33
|
)
|
|
34
34
|
from esphome.core import CORE, coroutine_with_priority
|
|
35
|
-
from esphome.
|
|
35
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
36
36
|
|
|
37
37
|
IS_PLATFORM_COMPONENT = True
|
|
38
38
|
|
|
@@ -161,6 +161,9 @@ _FAN_SCHEMA = (
|
|
|
161
161
|
)
|
|
162
162
|
|
|
163
163
|
|
|
164
|
+
_FAN_SCHEMA.add_extra(entity_duplicate_validator("fan"))
|
|
165
|
+
|
|
166
|
+
|
|
164
167
|
def fan_schema(
|
|
165
168
|
class_: cg.Pvariable,
|
|
166
169
|
*,
|
|
@@ -225,7 +228,7 @@ def validate_preset_modes(value):
|
|
|
225
228
|
|
|
226
229
|
|
|
227
230
|
async def setup_fan_core_(var, config):
|
|
228
|
-
await setup_entity(var, config)
|
|
231
|
+
await setup_entity(var, config, "fan")
|
|
229
232
|
|
|
230
233
|
cg.add(var.set_restore_mode(config[CONF_RESTORE_MODE]))
|
|
231
234
|
|
|
@@ -16,7 +16,6 @@ class FeedbackCover : public cover::Cover, public Component {
|
|
|
16
16
|
void setup() override;
|
|
17
17
|
void loop() override;
|
|
18
18
|
void dump_config() override;
|
|
19
|
-
float get_setup_priority() const override { return setup_priority::DATA; };
|
|
20
19
|
|
|
21
20
|
Trigger<> *get_open_trigger() const { return this->open_trigger_; }
|
|
22
21
|
Trigger<> *get_close_trigger() const { return this->close_trigger_; }
|