esphome 2025.6.2__py3-none-any.whl → 2025.7.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +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 +10 -4
- 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/as3935_spi/as3935_spi.h +0 -2
- 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/esp_ldo/__init__.py +10 -8
- esphome/components/esp_ldo/esp_ldo.h +3 -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/fan/fan.cpp +4 -0
- 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 +39 -1
- 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.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 +35 -16
- 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/__init__.py +1 -1
- 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/json/__init__.py +1 -1
- esphome/components/json/json_util.cpp +56 -63
- 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/binary_sensor/ld2420_binary_sensor.cpp +2 -2
- esphome/components/ld2420/button/reconfig_buttons.cpp +1 -1
- esphome/components/ld2420/ld2420.cpp +252 -147
- esphome/components/ld2420/ld2420.h +52 -126
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/number/gate_config_number.cpp +1 -1
- esphome/components/ld2420/select/operating_mode_select.cpp +1 -1
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.cpp +2 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2420/text_sensor/text_sensor.cpp +2 -2
- 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_json_schema.cpp +17 -16
- 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/lvgl/widgets/meter.py +20 -13
- 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_alarm_control_panel.cpp +2 -1
- 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_binary_sensor.cpp +1 -0
- esphome/components/mqtt/mqtt_button.cpp +4 -1
- esphome/components/mqtt/mqtt_client.cpp +17 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/mqtt/mqtt_climate.cpp +6 -4
- esphome/components/mqtt/mqtt_component.cpp +3 -1
- esphome/components/mqtt/mqtt_cover.cpp +1 -0
- esphome/components/mqtt/mqtt_date.cpp +4 -3
- esphome/components/mqtt/mqtt_datetime.cpp +7 -6
- esphome/components/mqtt/mqtt_event.cpp +6 -3
- esphome/components/mqtt/mqtt_fan.cpp +1 -0
- esphome/components/mqtt/mqtt_light.cpp +8 -4
- esphome/components/mqtt/mqtt_lock.cpp +3 -1
- esphome/components/mqtt/mqtt_number.cpp +1 -0
- esphome/components/mqtt/mqtt_select.cpp +2 -1
- esphome/components/mqtt/mqtt_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_switch.cpp +3 -1
- esphome/components/mqtt/mqtt_text.cpp +1 -0
- esphome/components/mqtt/mqtt_text_sensor.cpp +3 -1
- esphome/components/mqtt/mqtt_time.cpp +4 -3
- esphome/components/mqtt/mqtt_update.cpp +1 -0
- esphome/components/mqtt/mqtt_valve.cpp +3 -1
- esphome/components/ms8607/ms8607.cpp +1 -1
- 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 +9 -1
- esphome/components/online_image/online_image.cpp +17 -7
- esphome/components/online_image/online_image.h +10 -2
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/opentherm/output/output.cpp +1 -1
- 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.cpp +2 -2
- 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 +81 -21
- 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/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 +324 -439
- 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 +164 -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 +169 -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 +156 -22
- 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 +165 -105
- 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/platformio_api.py +2 -0
- esphome/wizard.py +17 -4
- esphome/writer.py +44 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/METADATA +10 -9
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/RECORD +639 -580
- 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.2.dist-info → esphome-2025.7.0.dist-info}/WHEEL +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "esphome/core/automation.h"
|
|
4
|
+
#include "esphome/core/component.h"
|
|
5
|
+
#include "esphome/core/entity_base.h"
|
|
6
|
+
#include "esphome/core/helpers.h"
|
|
7
|
+
|
|
8
|
+
namespace esphome {
|
|
9
|
+
namespace camera {
|
|
10
|
+
|
|
11
|
+
/** Different sources for filtering.
|
|
12
|
+
* IDLE: Camera requests to send an image to the API.
|
|
13
|
+
* API_REQUESTER: API requests a new image.
|
|
14
|
+
* WEB_REQUESTER: ESP32 web server request an image. Ignored by API.
|
|
15
|
+
*/
|
|
16
|
+
enum CameraRequester : uint8_t { IDLE, API_REQUESTER, WEB_REQUESTER };
|
|
17
|
+
|
|
18
|
+
/** Abstract camera image base class.
|
|
19
|
+
* Encapsulates the JPEG encoded data and it is shared among
|
|
20
|
+
* all connected clients.
|
|
21
|
+
*/
|
|
22
|
+
class CameraImage {
|
|
23
|
+
public:
|
|
24
|
+
virtual uint8_t *get_data_buffer() = 0;
|
|
25
|
+
virtual size_t get_data_length() = 0;
|
|
26
|
+
virtual bool was_requested_by(CameraRequester requester) const = 0;
|
|
27
|
+
virtual ~CameraImage() {}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/** Abstract image reader base class.
|
|
31
|
+
* Keeps track of the data offset of the camera image and
|
|
32
|
+
* how many bytes are remaining to read. When the image
|
|
33
|
+
* is returned, the shared_ptr is reset and the camera can
|
|
34
|
+
* reuse the memory of the camera image.
|
|
35
|
+
*/
|
|
36
|
+
class CameraImageReader {
|
|
37
|
+
public:
|
|
38
|
+
virtual void set_image(std::shared_ptr<CameraImage> image) = 0;
|
|
39
|
+
virtual size_t available() const = 0;
|
|
40
|
+
virtual uint8_t *peek_data_buffer() = 0;
|
|
41
|
+
virtual void consume_data(size_t consumed) = 0;
|
|
42
|
+
virtual void return_image() = 0;
|
|
43
|
+
virtual ~CameraImageReader() {}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/** Abstract camera base class. Collaborates with API.
|
|
47
|
+
* 1) API server starts and installs callback (add_image_callback)
|
|
48
|
+
* which is called by the camera when a new image is available.
|
|
49
|
+
* 2) New API client connects and creates a new image reader (create_image_reader).
|
|
50
|
+
* 3) API connection receives protobuf CameraImageRequest and calls request_image.
|
|
51
|
+
* 3.a) API connection receives protobuf CameraImageRequest and calls start_stream.
|
|
52
|
+
* 4) Camera implementation provides JPEG data in the CameraImage and calls callback.
|
|
53
|
+
* 5) API connection sets the image in the image reader.
|
|
54
|
+
* 6) API connection consumes data from the image reader and returns the image when finished.
|
|
55
|
+
* 7.a) Camera captures a new image and continues with 4) until start_stream is called.
|
|
56
|
+
*/
|
|
57
|
+
class Camera : public EntityBase, public Component {
|
|
58
|
+
public:
|
|
59
|
+
Camera();
|
|
60
|
+
// Camera implementation invokes callback to publish a new image.
|
|
61
|
+
virtual void add_image_callback(std::function<void(std::shared_ptr<CameraImage>)> &&callback) = 0;
|
|
62
|
+
/// Returns a new camera image reader that keeps track of the JPEG data in the camera image.
|
|
63
|
+
virtual CameraImageReader *create_image_reader() = 0;
|
|
64
|
+
// Connection, camera or web server requests one new JPEG image.
|
|
65
|
+
virtual void request_image(CameraRequester requester) = 0;
|
|
66
|
+
// Connection, camera or web server requests a stream of images.
|
|
67
|
+
virtual void start_stream(CameraRequester requester) = 0;
|
|
68
|
+
// Connection or web server stops the previously started stream.
|
|
69
|
+
virtual void stop_stream(CameraRequester requester) = 0;
|
|
70
|
+
virtual ~Camera() {}
|
|
71
|
+
/// The singleton instance of the camera implementation.
|
|
72
|
+
static Camera *instance();
|
|
73
|
+
|
|
74
|
+
protected:
|
|
75
|
+
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
76
|
+
static Camera *global_camera;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
} // namespace camera
|
|
80
|
+
} // namespace esphome
|
|
@@ -46,7 +46,6 @@ class CAP1188Component : public Component, public i2c::I2CDevice {
|
|
|
46
46
|
void set_reset_pin(GPIOPin *reset_pin) { this->reset_pin_ = reset_pin; }
|
|
47
47
|
void setup() override;
|
|
48
48
|
void dump_config() override;
|
|
49
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
50
49
|
void loop() override;
|
|
51
50
|
|
|
52
51
|
protected:
|
|
@@ -7,11 +7,12 @@ from esphome.const import (
|
|
|
7
7
|
PLATFORM_BK72XX,
|
|
8
8
|
PLATFORM_ESP32,
|
|
9
9
|
PLATFORM_ESP8266,
|
|
10
|
+
PLATFORM_LN882X,
|
|
10
11
|
PLATFORM_RTL87XX,
|
|
11
12
|
)
|
|
12
13
|
from esphome.core import CORE, coroutine_with_priority
|
|
13
14
|
|
|
14
|
-
AUTO_LOAD = ["web_server_base"]
|
|
15
|
+
AUTO_LOAD = ["web_server_base", "ota.web_server"]
|
|
15
16
|
DEPENDENCIES = ["wifi"]
|
|
16
17
|
CODEOWNERS = ["@OttoWinter"]
|
|
17
18
|
|
|
@@ -27,7 +28,15 @@ CONFIG_SCHEMA = cv.All(
|
|
|
27
28
|
),
|
|
28
29
|
}
|
|
29
30
|
).extend(cv.COMPONENT_SCHEMA),
|
|
30
|
-
cv.only_on(
|
|
31
|
+
cv.only_on(
|
|
32
|
+
[
|
|
33
|
+
PLATFORM_ESP32,
|
|
34
|
+
PLATFORM_ESP8266,
|
|
35
|
+
PLATFORM_BK72XX,
|
|
36
|
+
PLATFORM_LN882X,
|
|
37
|
+
PLATFORM_RTL87XX,
|
|
38
|
+
]
|
|
39
|
+
),
|
|
31
40
|
)
|
|
32
41
|
|
|
33
42
|
|
|
@@ -41,6 +50,7 @@ async def to_code(config):
|
|
|
41
50
|
|
|
42
51
|
if CORE.using_arduino:
|
|
43
52
|
if CORE.is_esp32:
|
|
53
|
+
cg.add_library("ESP32 Async UDP", None)
|
|
44
54
|
cg.add_library("DNSServer", None)
|
|
45
55
|
cg.add_library("WiFi", None)
|
|
46
56
|
if CORE.is_esp8266:
|
|
@@ -37,12 +37,16 @@ void CaptivePortal::handle_wifisave(AsyncWebServerRequest *request) {
|
|
|
37
37
|
request->redirect("/?save");
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
void CaptivePortal::setup() {
|
|
40
|
+
void CaptivePortal::setup() {
|
|
41
|
+
#ifndef USE_ARDUINO
|
|
42
|
+
// No DNS server needed for non-Arduino frameworks
|
|
43
|
+
this->disable_loop();
|
|
44
|
+
#endif
|
|
45
|
+
}
|
|
41
46
|
void CaptivePortal::start() {
|
|
42
47
|
this->base_->init();
|
|
43
48
|
if (!this->initialized_) {
|
|
44
49
|
this->base_->add_handler(this);
|
|
45
|
-
this->base_->add_ota_handler();
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
#ifdef USE_ARDUINO
|
|
@@ -50,6 +54,8 @@ void CaptivePortal::start() {
|
|
|
50
54
|
this->dns_server_->setErrorReplyCode(DNSReplyCode::NoError);
|
|
51
55
|
network::IPAddress ip = wifi::global_wifi_component->wifi_soft_ap_ip();
|
|
52
56
|
this->dns_server_->start(53, "*", ip);
|
|
57
|
+
// Re-enable loop() when DNS server is started
|
|
58
|
+
this->enable_loop();
|
|
53
59
|
#endif
|
|
54
60
|
|
|
55
61
|
this->base_->get_server()->onNotFound([this](AsyncWebServerRequest *req) {
|
|
@@ -68,7 +74,11 @@ void CaptivePortal::start() {
|
|
|
68
74
|
|
|
69
75
|
void CaptivePortal::handleRequest(AsyncWebServerRequest *req) {
|
|
70
76
|
if (req->url() == "/") {
|
|
77
|
+
#ifndef USE_ESP8266
|
|
78
|
+
auto *response = req->beginResponse(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
|
|
79
|
+
#else
|
|
71
80
|
auto *response = req->beginResponse_P(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
|
|
81
|
+
#endif
|
|
72
82
|
response->addHeader("Content-Encoding", "gzip");
|
|
73
83
|
req->send(response);
|
|
74
84
|
return;
|
|
@@ -21,8 +21,11 @@ class CaptivePortal : public AsyncWebHandler, public Component {
|
|
|
21
21
|
void dump_config() override;
|
|
22
22
|
#ifdef USE_ARDUINO
|
|
23
23
|
void loop() override {
|
|
24
|
-
if (this->dns_server_ != nullptr)
|
|
24
|
+
if (this->dns_server_ != nullptr) {
|
|
25
25
|
this->dns_server_->processNextRequest();
|
|
26
|
+
} else {
|
|
27
|
+
this->disable_loop();
|
|
28
|
+
}
|
|
26
29
|
}
|
|
27
30
|
#endif
|
|
28
31
|
float get_setup_priority() const override;
|
|
@@ -37,7 +40,7 @@ class CaptivePortal : public AsyncWebHandler, public Component {
|
|
|
37
40
|
#endif
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
bool canHandle(AsyncWebServerRequest *request) override {
|
|
43
|
+
bool canHandle(AsyncWebServerRequest *request) const override {
|
|
41
44
|
if (!this->active_)
|
|
42
45
|
return false;
|
|
43
46
|
|
|
@@ -25,8 +25,6 @@ class CCS811Component : public PollingComponent, public i2c::I2CDevice {
|
|
|
25
25
|
|
|
26
26
|
void dump_config() override;
|
|
27
27
|
|
|
28
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
29
|
-
|
|
30
28
|
protected:
|
|
31
29
|
optional<uint8_t> read_status_() { return this->read_byte(0x00); }
|
|
32
30
|
bool status_has_error_() { return this->read_status_().value_or(1) & 1; }
|
|
@@ -48,8 +48,8 @@ from esphome.const import (
|
|
|
48
48
|
CONF_WEB_SERVER,
|
|
49
49
|
)
|
|
50
50
|
from esphome.core import CORE, coroutine_with_priority
|
|
51
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
51
52
|
from esphome.cpp_generator import MockObjClass
|
|
52
|
-
from esphome.cpp_helpers import setup_entity
|
|
53
53
|
|
|
54
54
|
IS_PLATFORM_COMPONENT = True
|
|
55
55
|
|
|
@@ -247,6 +247,9 @@ _CLIMATE_SCHEMA = (
|
|
|
247
247
|
)
|
|
248
248
|
|
|
249
249
|
|
|
250
|
+
_CLIMATE_SCHEMA.add_extra(entity_duplicate_validator("climate"))
|
|
251
|
+
|
|
252
|
+
|
|
250
253
|
def climate_schema(
|
|
251
254
|
class_: MockObjClass,
|
|
252
255
|
*,
|
|
@@ -273,7 +276,7 @@ CLIMATE_SCHEMA.add_extra(cv.deprecated_schema_constant("climate"))
|
|
|
273
276
|
|
|
274
277
|
|
|
275
278
|
async def setup_climate_core_(var, config):
|
|
276
|
-
await setup_entity(var, config)
|
|
279
|
+
await setup_entity(var, config, "climate")
|
|
277
280
|
|
|
278
281
|
visual = config[CONF_VISUAL]
|
|
279
282
|
if (min_temp := visual.get(CONF_MIN_TEMPERATURE)) is not None:
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"""CM1106 Sensor component for ESPHome."""
|
|
2
2
|
|
|
3
|
-
import esphome.codegen as cg
|
|
4
|
-
import esphome.config_validation as cv
|
|
5
3
|
from esphome import automation
|
|
6
4
|
from esphome.automation import maybe_simple_id
|
|
5
|
+
import esphome.codegen as cg
|
|
7
6
|
from esphome.components import sensor, uart
|
|
7
|
+
import esphome.config_validation as cv
|
|
8
8
|
from esphome.const import (
|
|
9
9
|
CONF_CO2,
|
|
10
10
|
CONF_ID,
|
|
@@ -11,7 +11,6 @@ class CopyBinarySensor : public binary_sensor::BinarySensor, public Component {
|
|
|
11
11
|
void set_source(binary_sensor::BinarySensor *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
protected:
|
|
17
16
|
binary_sensor::BinarySensor *source_;
|
|
@@ -10,7 +10,6 @@ class CopyButton : public button::Button, public Component {
|
|
|
10
10
|
public:
|
|
11
11
|
void set_source(button::Button *source) { source_ = source; }
|
|
12
12
|
void dump_config() override;
|
|
13
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
14
13
|
|
|
15
14
|
protected:
|
|
16
15
|
void press_action() override;
|
|
@@ -11,7 +11,6 @@ class CopyCover : public cover::Cover, public Component {
|
|
|
11
11
|
void set_source(cover::Cover *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
cover::CoverTraits get_traits() override;
|
|
17
16
|
|
|
@@ -11,7 +11,6 @@ class CopyFan : public fan::Fan, public Component {
|
|
|
11
11
|
void set_source(fan::Fan *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
fan::FanTraits get_traits() override;
|
|
17
16
|
|
|
@@ -11,7 +11,6 @@ class CopyLock : public lock::Lock, public Component {
|
|
|
11
11
|
void set_source(lock::Lock *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
protected:
|
|
17
16
|
void control(const lock::LockCall &call) override;
|
|
@@ -11,7 +11,6 @@ class CopyNumber : public number::Number, public Component {
|
|
|
11
11
|
void set_source(number::Number *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
protected:
|
|
17
16
|
void control(float value) override;
|
|
@@ -11,7 +11,6 @@ class CopySelect : public select::Select, public Component {
|
|
|
11
11
|
void set_source(select::Select *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
protected:
|
|
17
16
|
void control(const std::string &value) override;
|
|
@@ -11,7 +11,6 @@ class CopySensor : public sensor::Sensor, public Component {
|
|
|
11
11
|
void set_source(sensor::Sensor *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
protected:
|
|
17
16
|
sensor::Sensor *source_;
|
|
@@ -11,7 +11,6 @@ class CopySwitch : public switch_::Switch, public Component {
|
|
|
11
11
|
void set_source(switch_::Switch *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
protected:
|
|
17
16
|
void write_state(bool state) override;
|
|
@@ -11,7 +11,6 @@ class CopyText : public text::Text, public Component {
|
|
|
11
11
|
void set_source(text::Text *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
protected:
|
|
17
16
|
void control(const std::string &value) override;
|
|
@@ -11,7 +11,6 @@ class CopyTextSensor : public text_sensor::TextSensor, public Component {
|
|
|
11
11
|
void set_source(text_sensor::TextSensor *source) { source_ = source; }
|
|
12
12
|
void setup() override;
|
|
13
13
|
void dump_config() override;
|
|
14
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
15
14
|
|
|
16
15
|
protected:
|
|
17
16
|
text_sensor::TextSensor *source_;
|
|
@@ -33,8 +33,8 @@ from esphome.const import (
|
|
|
33
33
|
DEVICE_CLASS_WINDOW,
|
|
34
34
|
)
|
|
35
35
|
from esphome.core import CORE, coroutine_with_priority
|
|
36
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
36
37
|
from esphome.cpp_generator import MockObjClass
|
|
37
|
-
from esphome.cpp_helpers import setup_entity
|
|
38
38
|
|
|
39
39
|
IS_PLATFORM_COMPONENT = True
|
|
40
40
|
|
|
@@ -126,6 +126,9 @@ _COVER_SCHEMA = (
|
|
|
126
126
|
)
|
|
127
127
|
|
|
128
128
|
|
|
129
|
+
_COVER_SCHEMA.add_extra(entity_duplicate_validator("cover"))
|
|
130
|
+
|
|
131
|
+
|
|
129
132
|
def cover_schema(
|
|
130
133
|
class_: MockObjClass,
|
|
131
134
|
*,
|
|
@@ -154,7 +157,7 @@ COVER_SCHEMA.add_extra(cv.deprecated_schema_constant("cover"))
|
|
|
154
157
|
|
|
155
158
|
|
|
156
159
|
async def setup_cover_core_(var, config):
|
|
157
|
-
await setup_entity(var, config)
|
|
160
|
+
await setup_entity(var, config, "cover")
|
|
158
161
|
|
|
159
162
|
if (device_class := config.get(CONF_DEVICE_CLASS)) is not None:
|
|
160
163
|
cg.add(var.set_device_class(device_class))
|
|
@@ -22,8 +22,8 @@ from esphome.const import (
|
|
|
22
22
|
CONF_YEAR,
|
|
23
23
|
)
|
|
24
24
|
from esphome.core import CORE, coroutine_with_priority
|
|
25
|
+
from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
|
|
25
26
|
from esphome.cpp_generator import MockObjClass
|
|
26
|
-
from esphome.cpp_helpers import setup_entity
|
|
27
27
|
|
|
28
28
|
CODEOWNERS = ["@rfdarter", "@jesserockz"]
|
|
29
29
|
|
|
@@ -84,6 +84,8 @@ _DATETIME_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(
|
|
|
84
84
|
.extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
|
|
85
85
|
).add_extra(_validate_time_present)
|
|
86
86
|
|
|
87
|
+
_DATETIME_SCHEMA.add_extra(entity_duplicate_validator("datetime"))
|
|
88
|
+
|
|
87
89
|
|
|
88
90
|
def date_schema(class_: MockObjClass) -> cv.Schema:
|
|
89
91
|
schema = cv.Schema(
|
|
@@ -133,7 +135,7 @@ def datetime_schema(class_: MockObjClass) -> cv.Schema:
|
|
|
133
135
|
|
|
134
136
|
|
|
135
137
|
async def setup_datetime_core_(var, config):
|
|
136
|
-
await setup_entity(var, config)
|
|
138
|
+
await setup_entity(var, config, "datetime")
|
|
137
139
|
|
|
138
140
|
if (mqtt_id := config.get(CONF_MQTT_ID)) is not None:
|
|
139
141
|
mqtt_ = cg.new_Pvariable(mqtt_id, var)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import esphome.codegen as cg
|
|
2
|
+
from esphome.config_helpers import filter_source_files_from_platform
|
|
2
3
|
import esphome.config_validation as cv
|
|
3
4
|
from esphome.const import (
|
|
4
5
|
CONF_BLOCK,
|
|
@@ -7,6 +8,7 @@ from esphome.const import (
|
|
|
7
8
|
CONF_FREE,
|
|
8
9
|
CONF_ID,
|
|
9
10
|
CONF_LOOP_TIME,
|
|
11
|
+
PlatformFramework,
|
|
10
12
|
)
|
|
11
13
|
|
|
12
14
|
CODEOWNERS = ["@OttoWinter"]
|
|
@@ -44,3 +46,21 @@ CONFIG_SCHEMA = cv.All(
|
|
|
44
46
|
async def to_code(config):
|
|
45
47
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
46
48
|
await cg.register_component(var, config)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
FILTER_SOURCE_FILES = filter_source_files_from_platform(
|
|
52
|
+
{
|
|
53
|
+
"debug_esp32.cpp": {
|
|
54
|
+
PlatformFramework.ESP32_ARDUINO,
|
|
55
|
+
PlatformFramework.ESP32_IDF,
|
|
56
|
+
},
|
|
57
|
+
"debug_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
|
|
58
|
+
"debug_host.cpp": {PlatformFramework.HOST_NATIVE},
|
|
59
|
+
"debug_rp2040.cpp": {PlatformFramework.RP2040_ARDUINO},
|
|
60
|
+
"debug_libretiny.cpp": {
|
|
61
|
+
PlatformFramework.BK72XX_ARDUINO,
|
|
62
|
+
PlatformFramework.RTL87XX_ARDUINO,
|
|
63
|
+
PlatformFramework.LN882X_ARDUINO,
|
|
64
|
+
},
|
|
65
|
+
}
|
|
66
|
+
)
|
|
@@ -53,6 +53,7 @@ void DebugComponent::on_shutdown() {
|
|
|
53
53
|
auto pref = global_preferences->make_preference(REBOOT_MAX_LEN, fnv1_hash(REBOOT_KEY + App.get_name()));
|
|
54
54
|
if (component != nullptr) {
|
|
55
55
|
strncpy(buffer, component->get_component_source(), REBOOT_MAX_LEN - 1);
|
|
56
|
+
buffer[REBOOT_MAX_LEN - 1] = '\0';
|
|
56
57
|
}
|
|
57
58
|
ESP_LOGD(TAG, "Storing reboot source: %s", buffer);
|
|
58
59
|
pref.save(&buffer);
|
|
@@ -68,6 +69,7 @@ std::string DebugComponent::get_reset_reason_() {
|
|
|
68
69
|
auto pref = global_preferences->make_preference(REBOOT_MAX_LEN, fnv1_hash(REBOOT_KEY + App.get_name()));
|
|
69
70
|
char buffer[REBOOT_MAX_LEN]{};
|
|
70
71
|
if (pref.load(&buffer)) {
|
|
72
|
+
buffer[REBOOT_MAX_LEN - 1] = '\0';
|
|
71
73
|
reset_reason = "Reboot request from " + std::string(buffer);
|
|
72
74
|
}
|
|
73
75
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from esphome import automation, pins
|
|
2
2
|
import esphome.codegen as cg
|
|
3
|
-
from esphome.components import time
|
|
3
|
+
from esphome.components import esp32, time
|
|
4
4
|
from esphome.components.esp32 import get_esp32_variant
|
|
5
5
|
from esphome.components.esp32.const import (
|
|
6
6
|
VARIANT_ESP32,
|
|
@@ -11,6 +11,7 @@ from esphome.components.esp32.const import (
|
|
|
11
11
|
VARIANT_ESP32S2,
|
|
12
12
|
VARIANT_ESP32S3,
|
|
13
13
|
)
|
|
14
|
+
from esphome.config_helpers import filter_source_files_from_platform
|
|
14
15
|
import esphome.config_validation as cv
|
|
15
16
|
from esphome.const import (
|
|
16
17
|
CONF_DEFAULT,
|
|
@@ -27,6 +28,7 @@ from esphome.const import (
|
|
|
27
28
|
CONF_WAKEUP_PIN,
|
|
28
29
|
PLATFORM_ESP32,
|
|
29
30
|
PLATFORM_ESP8266,
|
|
31
|
+
PlatformFramework,
|
|
30
32
|
)
|
|
31
33
|
|
|
32
34
|
WAKEUP_PINS = {
|
|
@@ -114,12 +116,20 @@ def validate_pin_number(value):
|
|
|
114
116
|
return value
|
|
115
117
|
|
|
116
118
|
|
|
117
|
-
def
|
|
118
|
-
if
|
|
119
|
-
|
|
120
|
-
if
|
|
121
|
-
|
|
122
|
-
|
|
119
|
+
def _validate_ex1_wakeup_mode(value):
|
|
120
|
+
if value == "ALL_LOW":
|
|
121
|
+
esp32.only_on_variant(supported=[VARIANT_ESP32], msg_prefix="ALL_LOW")(value)
|
|
122
|
+
if value == "ANY_LOW":
|
|
123
|
+
esp32.only_on_variant(
|
|
124
|
+
supported=[
|
|
125
|
+
VARIANT_ESP32S2,
|
|
126
|
+
VARIANT_ESP32S3,
|
|
127
|
+
VARIANT_ESP32C6,
|
|
128
|
+
VARIANT_ESP32H2,
|
|
129
|
+
],
|
|
130
|
+
msg_prefix="ANY_LOW",
|
|
131
|
+
)(value)
|
|
132
|
+
return value
|
|
123
133
|
|
|
124
134
|
|
|
125
135
|
deep_sleep_ns = cg.esphome_ns.namespace("deep_sleep")
|
|
@@ -146,6 +156,7 @@ WAKEUP_PIN_MODES = {
|
|
|
146
156
|
esp_sleep_ext1_wakeup_mode_t = cg.global_ns.enum("esp_sleep_ext1_wakeup_mode_t")
|
|
147
157
|
Ext1Wakeup = deep_sleep_ns.struct("Ext1Wakeup")
|
|
148
158
|
EXT1_WAKEUP_MODES = {
|
|
159
|
+
"ANY_LOW": esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ANY_LOW,
|
|
149
160
|
"ALL_LOW": esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ALL_LOW,
|
|
150
161
|
"ANY_HIGH": esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ANY_HIGH,
|
|
151
162
|
}
|
|
@@ -185,16 +196,28 @@ CONFIG_SCHEMA = cv.All(
|
|
|
185
196
|
),
|
|
186
197
|
cv.Optional(CONF_ESP32_EXT1_WAKEUP): cv.All(
|
|
187
198
|
cv.only_on_esp32,
|
|
199
|
+
esp32.only_on_variant(
|
|
200
|
+
unsupported=[VARIANT_ESP32C3], msg_prefix="Wakeup from ext1"
|
|
201
|
+
),
|
|
188
202
|
cv.Schema(
|
|
189
203
|
{
|
|
190
204
|
cv.Required(CONF_PINS): cv.ensure_list(
|
|
191
205
|
pins.internal_gpio_input_pin_schema, validate_pin_number
|
|
192
206
|
),
|
|
193
|
-
cv.Required(CONF_MODE): cv.
|
|
207
|
+
cv.Required(CONF_MODE): cv.All(
|
|
208
|
+
cv.enum(EXT1_WAKEUP_MODES, upper=True),
|
|
209
|
+
_validate_ex1_wakeup_mode,
|
|
210
|
+
),
|
|
194
211
|
}
|
|
195
212
|
),
|
|
196
213
|
),
|
|
197
|
-
cv.Optional(CONF_TOUCH_WAKEUP): cv.All(
|
|
214
|
+
cv.Optional(CONF_TOUCH_WAKEUP): cv.All(
|
|
215
|
+
cv.only_on_esp32,
|
|
216
|
+
esp32.only_on_variant(
|
|
217
|
+
unsupported=[VARIANT_ESP32C3], msg_prefix="Wakeup from touch"
|
|
218
|
+
),
|
|
219
|
+
cv.boolean,
|
|
220
|
+
),
|
|
198
221
|
}
|
|
199
222
|
).extend(cv.COMPONENT_SCHEMA),
|
|
200
223
|
cv.only_on([PLATFORM_ESP32, PLATFORM_ESP8266]),
|
|
@@ -313,3 +336,14 @@ async def deep_sleep_action_to_code(config, action_id, template_arg, args):
|
|
|
313
336
|
var = cg.new_Pvariable(action_id, template_arg)
|
|
314
337
|
await cg.register_parented(var, config[CONF_ID])
|
|
315
338
|
return var
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
FILTER_SOURCE_FILES = filter_source_files_from_platform(
|
|
342
|
+
{
|
|
343
|
+
"deep_sleep_esp32.cpp": {
|
|
344
|
+
PlatformFramework.ESP32_ARDUINO,
|
|
345
|
+
PlatformFramework.ESP32_IDF,
|
|
346
|
+
},
|
|
347
|
+
"deep_sleep_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
|
|
348
|
+
}
|
|
349
|
+
)
|
|
@@ -455,7 +455,7 @@ CONFIG_SCHEMA = cv.Schema(
|
|
|
455
455
|
CONF_NAME: "Demo Plain Sensor",
|
|
456
456
|
},
|
|
457
457
|
{
|
|
458
|
-
CONF_NAME: "Demo Temperature Sensor",
|
|
458
|
+
CONF_NAME: "Demo Temperature Sensor 1",
|
|
459
459
|
CONF_UNIT_OF_MEASUREMENT: UNIT_CELSIUS,
|
|
460
460
|
CONF_ICON: ICON_THERMOMETER,
|
|
461
461
|
CONF_ACCURACY_DECIMALS: 1,
|
|
@@ -463,7 +463,7 @@ CONFIG_SCHEMA = cv.Schema(
|
|
|
463
463
|
CONF_STATE_CLASS: STATE_CLASS_MEASUREMENT,
|
|
464
464
|
},
|
|
465
465
|
{
|
|
466
|
-
CONF_NAME: "Demo Temperature Sensor",
|
|
466
|
+
CONF_NAME: "Demo Temperature Sensor 2",
|
|
467
467
|
CONF_UNIT_OF_MEASUREMENT: UNIT_CELSIUS,
|
|
468
468
|
CONF_ICON: ICON_THERMOMETER,
|
|
469
469
|
CONF_ACCURACY_DECIMALS: 1,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#include "display.h"
|
|
2
2
|
#include <utility>
|
|
3
|
+
#include <numbers>
|
|
3
4
|
#include "display_color_utils.h"
|
|
4
5
|
#include "esphome/core/hal.h"
|
|
5
6
|
#include "esphome/core/log.h"
|
|
@@ -424,15 +425,15 @@ void HOT Display::get_regular_polygon_vertex(int vertex_id, int *vertex_x, int *
|
|
|
424
425
|
// hence we rotate the shape by 270° to orient the polygon up.
|
|
425
426
|
rotation_degrees += ROTATION_270_DEGREES;
|
|
426
427
|
// Convert the rotation to radians, easier to use in trigonometrical calculations
|
|
427
|
-
float rotation_radians = rotation_degrees *
|
|
428
|
+
float rotation_radians = rotation_degrees * std::numbers::pi / 180;
|
|
428
429
|
// A pointy top variation means the first vertex of the polygon is at the top center of the shape, this requires no
|
|
429
430
|
// additional rotation of the shape.
|
|
430
431
|
// A flat top variation means the first point of the polygon has to be rotated so that the first edge is horizontal,
|
|
431
432
|
// this requires to rotate the shape by π/edges radians counter-clockwise so that the first point is located on the
|
|
432
433
|
// left side of the first horizontal edge.
|
|
433
|
-
rotation_radians -= (variation == VARIATION_FLAT_TOP) ?
|
|
434
|
+
rotation_radians -= (variation == VARIATION_FLAT_TOP) ? std::numbers::pi / edges : 0.0;
|
|
434
435
|
|
|
435
|
-
float vertex_angle = ((float) vertex_id) / edges * 2 *
|
|
436
|
+
float vertex_angle = ((float) vertex_id) / edges * 2 * std::numbers::pi + rotation_radians;
|
|
436
437
|
*vertex_x = (int) round(cos(vertex_angle) * radius) + center_x;
|
|
437
438
|
*vertex_y = (int) round(sin(vertex_angle) * radius) + center_y;
|
|
438
439
|
}
|
|
@@ -11,7 +11,7 @@ namespace display {
|
|
|
11
11
|
static const char *const TAG = "display";
|
|
12
12
|
|
|
13
13
|
void DisplayBuffer::init_internal_(uint32_t buffer_length) {
|
|
14
|
-
|
|
14
|
+
RAMAllocator<uint8_t> allocator;
|
|
15
15
|
this->buffer_ = allocator.allocate(buffer_length);
|
|
16
16
|
if (this->buffer_ == nullptr) {
|
|
17
17
|
ESP_LOGE(TAG, "Could not allocate buffer for display!");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
CODEOWNERS = ["@mrk-its"]
|