esphome 2025.12.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/__init__.py +0 -0
- esphome/__main__.py +1517 -0
- esphome/address_cache.py +142 -0
- esphome/analyze_memory/__init__.py +335 -0
- esphome/analyze_memory/__main__.py +6 -0
- esphome/analyze_memory/cli.py +435 -0
- esphome/analyze_memory/const.py +1052 -0
- esphome/analyze_memory/demangle.py +182 -0
- esphome/analyze_memory/helpers.py +121 -0
- esphome/analyze_memory/ram_strings.py +493 -0
- esphome/analyze_memory/toolchain.py +57 -0
- esphome/automation.py +589 -0
- esphome/build_gen/__init__.py +0 -0
- esphome/build_gen/platformio.py +100 -0
- esphome/codegen.py +97 -0
- esphome/components/__init__.py +0 -0
- esphome/components/a01nyub/__init__.py +1 -0
- esphome/components/a01nyub/a01nyub.cpp +44 -0
- esphome/components/a01nyub/a01nyub.h +27 -0
- esphome/components/a01nyub/sensor.py +41 -0
- esphome/components/a02yyuw/__init__.py +1 -0
- esphome/components/a02yyuw/a02yyuw.cpp +43 -0
- esphome/components/a02yyuw/a02yyuw.h +27 -0
- esphome/components/a02yyuw/sensor.py +41 -0
- esphome/components/a4988/__init__.py +0 -0
- esphome/components/a4988/a4988.cpp +55 -0
- esphome/components/a4988/a4988.h +29 -0
- esphome/components/a4988/stepper.py +32 -0
- esphome/components/absolute_humidity/__init__.py +1 -0
- esphome/components/absolute_humidity/absolute_humidity.cpp +180 -0
- esphome/components/absolute_humidity/absolute_humidity.h +76 -0
- esphome/components/absolute_humidity/sensor.py +56 -0
- esphome/components/ac_dimmer/__init__.py +0 -0
- esphome/components/ac_dimmer/ac_dimmer.cpp +236 -0
- esphome/components/ac_dimmer/ac_dimmer.h +70 -0
- esphome/components/ac_dimmer/output.py +52 -0
- esphome/components/adalight/__init__.py +27 -0
- esphome/components/adalight/adalight_light_effect.cpp +142 -0
- esphome/components/adalight/adalight_light_effect.h +39 -0
- esphome/components/adc/__init__.py +281 -0
- esphome/components/adc/adc_sensor.h +170 -0
- esphome/components/adc/adc_sensor_common.cpp +85 -0
- esphome/components/adc/adc_sensor_esp32.cpp +368 -0
- esphome/components/adc/adc_sensor_esp8266.cpp +61 -0
- esphome/components/adc/adc_sensor_libretiny.cpp +54 -0
- esphome/components/adc/adc_sensor_rp2040.cpp +97 -0
- esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
- esphome/components/adc/sensor.py +196 -0
- esphome/components/adc128s102/__init__.py +23 -0
- esphome/components/adc128s102/adc128s102.cpp +32 -0
- esphome/components/adc128s102/adc128s102.h +23 -0
- esphome/components/adc128s102/sensor/__init__.py +38 -0
- esphome/components/adc128s102/sensor/adc128s102_sensor.cpp +24 -0
- esphome/components/adc128s102/sensor/adc128s102_sensor.h +29 -0
- esphome/components/addressable_light/__init__.py +0 -0
- esphome/components/addressable_light/addressable_light_display.cpp +67 -0
- esphome/components/addressable_light/addressable_light_display.h +63 -0
- esphome/components/addressable_light/display.py +62 -0
- esphome/components/ade7880/__init__.py +1 -0
- esphome/components/ade7880/ade7880.cpp +315 -0
- esphome/components/ade7880/ade7880.h +129 -0
- esphome/components/ade7880/ade7880_i2c.cpp +101 -0
- esphome/components/ade7880/ade7880_registers.h +243 -0
- esphome/components/ade7880/sensor.py +316 -0
- esphome/components/ade7953/__init__.py +1 -0
- esphome/components/ade7953/sensor.py +5 -0
- esphome/components/ade7953_base/__init__.py +203 -0
- esphome/components/ade7953_base/ade7953_base.cpp +156 -0
- esphome/components/ade7953_base/ade7953_base.h +131 -0
- esphome/components/ade7953_i2c/__init__.py +1 -0
- esphome/components/ade7953_i2c/ade7953_i2c.cpp +80 -0
- esphome/components/ade7953_i2c/ade7953_i2c.h +28 -0
- esphome/components/ade7953_i2c/sensor.py +26 -0
- esphome/components/ade7953_spi/__init__.py +1 -0
- esphome/components/ade7953_spi/ade7953_spi.cpp +81 -0
- esphome/components/ade7953_spi/ade7953_spi.h +32 -0
- esphome/components/ade7953_spi/sensor.py +26 -0
- esphome/components/ads1115/__init__.py +32 -0
- esphome/components/ads1115/ads1115.cpp +223 -0
- esphome/components/ads1115/ads1115.h +64 -0
- esphome/components/ads1115/sensor/__init__.py +98 -0
- esphome/components/ads1115/sensor/ads1115_sensor.cpp +31 -0
- esphome/components/ads1115/sensor/ads1115_sensor.h +37 -0
- esphome/components/ads1118/__init__.py +25 -0
- esphome/components/ads1118/ads1118.cpp +126 -0
- esphome/components/ads1118/ads1118.h +45 -0
- esphome/components/ads1118/sensor/__init__.py +98 -0
- esphome/components/ads1118/sensor/ads1118_sensor.cpp +29 -0
- esphome/components/ads1118/sensor/ads1118_sensor.h +36 -0
- esphome/components/ags10/__init__.py +1 -0
- esphome/components/ags10/ags10.cpp +196 -0
- esphome/components/ags10/ags10.h +140 -0
- esphome/components/ags10/sensor.py +132 -0
- esphome/components/aht10/__init__.py +0 -0
- esphome/components/aht10/aht10.cpp +166 -0
- esphome/components/aht10/aht10.h +36 -0
- esphome/components/aht10/sensor.py +65 -0
- esphome/components/aic3204/__init__.py +0 -0
- esphome/components/aic3204/aic3204.cpp +171 -0
- esphome/components/aic3204/aic3204.h +87 -0
- esphome/components/aic3204/audio_dac.py +52 -0
- esphome/components/aic3204/automation.h +23 -0
- esphome/components/airthings_ble/__init__.py +23 -0
- esphome/components/airthings_ble/airthings_listener.cpp +34 -0
- esphome/components/airthings_ble/airthings_listener.h +19 -0
- esphome/components/airthings_wave_base/__init__.py +102 -0
- esphome/components/airthings_wave_base/airthings_wave_base.cpp +211 -0
- esphome/components/airthings_wave_base/airthings_wave_base.h +90 -0
- esphome/components/airthings_wave_mini/__init__.py +1 -0
- esphome/components/airthings_wave_mini/airthings_wave_mini.cpp +55 -0
- esphome/components/airthings_wave_mini/airthings_wave_mini.h +40 -0
- esphome/components/airthings_wave_mini/sensor.py +25 -0
- esphome/components/airthings_wave_plus/__init__.py +1 -0
- esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +104 -0
- esphome/components/airthings_wave_plus/airthings_wave_plus.h +64 -0
- esphome/components/airthings_wave_plus/sensor.py +102 -0
- esphome/components/alarm_control_panel/__init__.py +344 -0
- esphome/components/alarm_control_panel/alarm_control_panel.cpp +161 -0
- esphome/components/alarm_control_panel/alarm_control_panel.h +200 -0
- esphome/components/alarm_control_panel/alarm_control_panel_call.cpp +103 -0
- esphome/components/alarm_control_panel/alarm_control_panel_call.h +40 -0
- esphome/components/alarm_control_panel/alarm_control_panel_state.cpp +34 -0
- esphome/components/alarm_control_panel/alarm_control_panel_state.h +29 -0
- esphome/components/alarm_control_panel/automation.h +191 -0
- esphome/components/alpha3/__init__.py +1 -0
- esphome/components/alpha3/alpha3.cpp +191 -0
- esphome/components/alpha3/alpha3.h +72 -0
- esphome/components/alpha3/sensor.py +85 -0
- esphome/components/am2315c/__init__.py +1 -0
- esphome/components/am2315c/am2315c.cpp +182 -0
- esphome/components/am2315c/am2315c.h +50 -0
- esphome/components/am2315c/sensor.py +54 -0
- esphome/components/am2320/__init__.py +0 -0
- esphome/components/am2320/am2320.cpp +91 -0
- esphome/components/am2320/am2320.h +29 -0
- esphome/components/am2320/sensor.py +56 -0
- esphome/components/am43/__init__.py +1 -0
- esphome/components/am43/am43_base.cpp +144 -0
- esphome/components/am43/am43_base.h +78 -0
- esphome/components/am43/cover/__init__.py +35 -0
- esphome/components/am43/cover/am43_cover.cpp +159 -0
- esphome/components/am43/cover/am43_cover.h +44 -0
- esphome/components/am43/sensor/__init__.py +53 -0
- esphome/components/am43/sensor/am43_sensor.cpp +117 -0
- esphome/components/am43/sensor/am43_sensor.h +44 -0
- esphome/components/analog_threshold/__init__.py +1 -0
- esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +47 -0
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +27 -0
- esphome/components/analog_threshold/binary_sensor.py +49 -0
- esphome/components/animation/__init__.py +108 -0
- esphome/components/animation/animation.cpp +70 -0
- esphome/components/animation/animation.h +68 -0
- esphome/components/anova/__init__.py +0 -0
- esphome/components/anova/anova.cpp +161 -0
- esphome/components/anova/anova.h +51 -0
- esphome/components/anova/anova_base.cpp +134 -0
- esphome/components/anova/anova_base.h +79 -0
- esphome/components/anova/climate.py +35 -0
- esphome/components/apds9306/__init__.py +4 -0
- esphome/components/apds9306/apds9306.cpp +151 -0
- esphome/components/apds9306/apds9306.h +66 -0
- esphome/components/apds9306/sensor.py +95 -0
- esphome/components/apds9960/__init__.py +69 -0
- esphome/components/apds9960/apds9960.cpp +407 -0
- esphome/components/apds9960/apds9960.h +76 -0
- esphome/components/apds9960/binary_sensor.py +26 -0
- esphome/components/apds9960/sensor.py +34 -0
- esphome/components/api/__init__.py +802 -0
- esphome/components/api/api_connection.cpp +1983 -0
- esphome/components/api/api_connection.h +739 -0
- esphome/components/api/api_frame_helper.cpp +266 -0
- esphome/components/api/api_frame_helper.h +215 -0
- esphome/components/api/api_frame_helper_noise.cpp +604 -0
- esphome/components/api/api_frame_helper_noise.h +63 -0
- esphome/components/api/api_frame_helper_plaintext.cpp +292 -0
- esphome/components/api/api_frame_helper_plaintext.h +50 -0
- esphome/components/api/api_noise_context.h +30 -0
- esphome/components/api/api_pb2.cpp +3250 -0
- esphome/components/api/api_pb2.h +3072 -0
- esphome/components/api/api_pb2_dump.cpp +2243 -0
- esphome/components/api/api_pb2_includes.h +34 -0
- esphome/components/api/api_pb2_service.cpp +857 -0
- esphome/components/api/api_pb2_service.h +486 -0
- esphome/components/api/api_server.cpp +702 -0
- esphome/components/api/api_server.h +312 -0
- esphome/components/api/client.py +82 -0
- esphome/components/api/custom_api_device.h +296 -0
- esphome/components/api/homeassistant_service.h +243 -0
- esphome/components/api/list_entities.cpp +96 -0
- esphome/components/api/list_entities.h +99 -0
- esphome/components/api/proto.cpp +150 -0
- esphome/components/api/proto.h +892 -0
- esphome/components/api/subscribe_state.cpp +72 -0
- esphome/components/api/subscribe_state.h +92 -0
- esphome/components/api/user_services.cpp +91 -0
- esphome/components/api/user_services.h +307 -0
- esphome/components/as3935/__init__.py +59 -0
- esphome/components/as3935/as3935.cpp +324 -0
- esphome/components/as3935/as3935.h +132 -0
- esphome/components/as3935/binary_sensor.py +19 -0
- esphome/components/as3935/sensor.py +41 -0
- esphome/components/as3935_i2c/__init__.py +26 -0
- esphome/components/as3935_i2c/as3935_i2c.cpp +44 -0
- esphome/components/as3935_i2c/as3935_i2c.h +19 -0
- esphome/components/as3935_spi/__init__.py +26 -0
- esphome/components/as3935_spi/as3935_spi.cpp +46 -0
- esphome/components/as3935_spi/as3935_spi.h +25 -0
- esphome/components/as5600/__init__.py +227 -0
- esphome/components/as5600/as5600.cpp +138 -0
- esphome/components/as5600/as5600.h +104 -0
- esphome/components/as5600/sensor/__init__.py +119 -0
- esphome/components/as5600/sensor/as5600_sensor.cpp +98 -0
- esphome/components/as5600/sensor/as5600_sensor.h +43 -0
- esphome/components/as7341/__init__.py +0 -0
- esphome/components/as7341/as7341.cpp +272 -0
- esphome/components/as7341/as7341.h +144 -0
- esphome/components/as7341/sensor.py +111 -0
- esphome/components/async_tcp/__init__.py +37 -0
- esphome/components/at581x/__init__.py +219 -0
- esphome/components/at581x/at581x.cpp +198 -0
- esphome/components/at581x/at581x.h +62 -0
- esphome/components/at581x/automation.h +71 -0
- esphome/components/at581x/switch/__init__.py +29 -0
- esphome/components/at581x/switch/rf_switch.cpp +12 -0
- esphome/components/at581x/switch/rf_switch.h +15 -0
- esphome/components/atc_mithermometer/__init__.py +0 -0
- esphome/components/atc_mithermometer/atc_mithermometer.cpp +133 -0
- esphome/components/atc_mithermometer/atc_mithermometer.h +50 -0
- esphome/components/atc_mithermometer/sensor.py +100 -0
- esphome/components/atm90e26/__init__.py +1 -0
- esphome/components/atm90e26/atm90e26.cpp +234 -0
- esphome/components/atm90e26/atm90e26.h +72 -0
- esphome/components/atm90e26/atm90e26_reg.h +70 -0
- esphome/components/atm90e26/sensor.py +159 -0
- esphome/components/atm90e32/__init__.py +8 -0
- esphome/components/atm90e32/atm90e32.cpp +1233 -0
- esphome/components/atm90e32/atm90e32.h +275 -0
- esphome/components/atm90e32/atm90e32_reg.h +272 -0
- esphome/components/atm90e32/button/__init__.py +95 -0
- esphome/components/atm90e32/button/atm90e32_button.cpp +79 -0
- esphome/components/atm90e32/button/atm90e32_button.h +59 -0
- esphome/components/atm90e32/number/__init__.py +130 -0
- esphome/components/atm90e32/number/atm90e32_number.h +16 -0
- esphome/components/atm90e32/sensor.py +252 -0
- esphome/components/atm90e32/text_sensor/__init__.py +48 -0
- esphome/components/audio/__init__.py +168 -0
- esphome/components/audio/audio.cpp +67 -0
- esphome/components/audio/audio.h +187 -0
- esphome/components/audio/audio_decoder.cpp +393 -0
- esphome/components/audio/audio_decoder.h +135 -0
- esphome/components/audio/audio_reader.cpp +328 -0
- esphome/components/audio/audio_reader.h +85 -0
- esphome/components/audio/audio_resampler.cpp +163 -0
- esphome/components/audio/audio_resampler.h +102 -0
- esphome/components/audio/audio_transfer_buffer.cpp +175 -0
- esphome/components/audio/audio_transfer_buffer.h +144 -0
- esphome/components/audio_adc/__init__.py +41 -0
- esphome/components/audio_adc/audio_adc.h +17 -0
- esphome/components/audio_adc/automation.h +23 -0
- esphome/components/audio_dac/__init__.py +57 -0
- esphome/components/audio_dac/audio_dac.h +23 -0
- esphome/components/audio_dac/automation.h +43 -0
- esphome/components/axs15231/__init__.py +6 -0
- esphome/components/axs15231/touchscreen/__init__.py +36 -0
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +68 -0
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.h +27 -0
- esphome/components/b_parasite/__init__.py +0 -0
- esphome/components/b_parasite/b_parasite.cpp +108 -0
- esphome/components/b_parasite/b_parasite.h +41 -0
- esphome/components/b_parasite/sensor.py +92 -0
- esphome/components/ballu/__init__.py +0 -0
- esphome/components/ballu/ballu.cpp +239 -0
- esphome/components/ballu/ballu.h +31 -0
- esphome/components/ballu/climate.py +14 -0
- esphome/components/bang_bang/__init__.py +1 -0
- esphome/components/bang_bang/bang_bang_climate.cpp +232 -0
- esphome/components/bang_bang/bang_bang_climate.h +92 -0
- esphome/components/bang_bang/climate.py +81 -0
- esphome/components/bedjet/__init__.py +48 -0
- esphome/components/bedjet/bedjet_child.h +23 -0
- esphome/components/bedjet/bedjet_codec.cpp +169 -0
- esphome/components/bedjet/bedjet_codec.h +194 -0
- esphome/components/bedjet/bedjet_const.h +105 -0
- esphome/components/bedjet/bedjet_hub.cpp +553 -0
- esphome/components/bedjet/bedjet_hub.h +178 -0
- esphome/components/bedjet/climate/__init__.py +67 -0
- esphome/components/bedjet/climate/bedjet_climate.cpp +351 -0
- esphome/components/bedjet/climate/bedjet_climate.h +85 -0
- esphome/components/bedjet/fan/__init__.py +22 -0
- esphome/components/bedjet/fan/bedjet_fan.cpp +113 -0
- esphome/components/bedjet/fan/bedjet_fan.h +40 -0
- esphome/components/bedjet/sensor/__init__.py +52 -0
- esphome/components/bedjet/sensor/bedjet_sensor.cpp +34 -0
- esphome/components/bedjet/sensor/bedjet_sensor.h +32 -0
- esphome/components/beken_spi_led_strip/__init__.py +0 -0
- esphome/components/beken_spi_led_strip/led_strip.cpp +388 -0
- esphome/components/beken_spi_led_strip/led_strip.h +85 -0
- esphome/components/beken_spi_led_strip/light.py +134 -0
- esphome/components/bh1750/__init__.py +0 -0
- esphome/components/bh1750/bh1750.cpp +168 -0
- esphome/components/bh1750/bh1750.h +33 -0
- esphome/components/bh1750/sensor.py +41 -0
- esphome/components/bh1900nux/__init__.py +0 -0
- esphome/components/bh1900nux/bh1900nux.cpp +54 -0
- esphome/components/bh1900nux/bh1900nux.h +18 -0
- esphome/components/bh1900nux/sensor.py +34 -0
- esphome/components/binary/__init__.py +3 -0
- esphome/components/binary/fan/__init__.py +36 -0
- esphome/components/binary/fan/binary_fan.cpp +40 -0
- esphome/components/binary/fan/binary_fan.h +31 -0
- esphome/components/binary/light/__init__.py +23 -0
- esphome/components/binary/light/binary_light_output.h +33 -0
- esphome/components/binary_sensor/__init__.py +679 -0
- esphome/components/binary_sensor/automation.cpp +120 -0
- esphome/components/binary_sensor/automation.h +174 -0
- esphome/components/binary_sensor/binary_sensor.cpp +71 -0
- esphome/components/binary_sensor/binary_sensor.h +73 -0
- esphome/components/binary_sensor/filter.cpp +133 -0
- esphome/components/binary_sensor/filter.h +140 -0
- esphome/components/binary_sensor_map/__init__.py +0 -0
- esphome/components/binary_sensor_map/binary_sensor_map.cpp +142 -0
- esphome/components/binary_sensor_map/binary_sensor_map.h +100 -0
- esphome/components/binary_sensor_map/sensor.py +105 -0
- esphome/components/bk72xx/__init__.py +52 -0
- esphome/components/bk72xx/boards.py +1264 -0
- esphome/components/bl0906/__init__.py +1 -0
- esphome/components/bl0906/bl0906.cpp +238 -0
- esphome/components/bl0906/bl0906.h +96 -0
- esphome/components/bl0906/const.py +4 -0
- esphome/components/bl0906/constants.h +122 -0
- esphome/components/bl0906/sensor.py +185 -0
- esphome/components/bl0939/__init__.py +1 -0
- esphome/components/bl0939/bl0939.cpp +146 -0
- esphome/components/bl0939/bl0939.h +107 -0
- esphome/components/bl0939/sensor.py +119 -0
- esphome/components/bl0940/__init__.py +6 -0
- esphome/components/bl0940/bl0940.cpp +275 -0
- esphome/components/bl0940/bl0940.h +154 -0
- esphome/components/bl0940/button/__init__.py +27 -0
- esphome/components/bl0940/button/calibration_reset_button.cpp +20 -0
- esphome/components/bl0940/button/calibration_reset_button.h +19 -0
- esphome/components/bl0940/number/__init__.py +94 -0
- esphome/components/bl0940/number/calibration_number.cpp +29 -0
- esphome/components/bl0940/number/calibration_number.h +26 -0
- esphome/components/bl0940/sensor.py +250 -0
- esphome/components/bl0942/__init__.py +1 -0
- esphome/components/bl0942/bl0942.cpp +218 -0
- esphome/components/bl0942/bl0942.h +152 -0
- esphome/components/bl0942/sensor.py +128 -0
- esphome/components/ble_client/__init__.py +316 -0
- esphome/components/ble_client/automation.cpp +11 -0
- esphome/components/ble_client/automation.h +395 -0
- esphome/components/ble_client/ble_client.cpp +86 -0
- esphome/components/ble_client/ble_client.h +79 -0
- esphome/components/ble_client/output/__init__.py +68 -0
- esphome/components/ble_client/output/ble_binary_output.cpp +78 -0
- esphome/components/ble_client/output/ble_binary_output.h +40 -0
- esphome/components/ble_client/sensor/__init__.py +161 -0
- esphome/components/ble_client/sensor/automation.h +39 -0
- esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +81 -0
- esphome/components/ble_client/sensor/ble_rssi_sensor.h +32 -0
- esphome/components/ble_client/sensor/ble_sensor.cpp +150 -0
- esphome/components/ble_client/sensor/ble_sensor.h +51 -0
- esphome/components/ble_client/switch/__init__.py +22 -0
- esphome/components/ble_client/switch/ble_switch.cpp +34 -0
- esphome/components/ble_client/switch/ble_switch.h +27 -0
- esphome/components/ble_client/text_sensor/__init__.py +106 -0
- esphome/components/ble_client/text_sensor/automation.h +37 -0
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +141 -0
- esphome/components/ble_client/text_sensor/ble_text_sensor.h +43 -0
- esphome/components/ble_nus/__init__.py +29 -0
- esphome/components/ble_nus/ble_nus.cpp +161 -0
- esphome/components/ble_nus/ble_nus.h +48 -0
- esphome/components/ble_presence/__init__.py +0 -0
- esphome/components/ble_presence/binary_sensor.py +93 -0
- esphome/components/ble_presence/ble_presence_device.cpp +16 -0
- esphome/components/ble_presence/ble_presence_device.h +142 -0
- esphome/components/ble_rssi/__init__.py +0 -0
- esphome/components/ble_rssi/ble_rssi_sensor.cpp +16 -0
- esphome/components/ble_rssi/ble_rssi_sensor.h +125 -0
- esphome/components/ble_rssi/sensor.py +89 -0
- esphome/components/ble_scanner/__init__.py +0 -0
- esphome/components/ble_scanner/ble_scanner.cpp +16 -0
- esphome/components/ble_scanner/ble_scanner.h +37 -0
- esphome/components/ble_scanner/text_sensor.py +25 -0
- esphome/components/bluetooth_proxy/__init__.py +110 -0
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +579 -0
- esphome/components/bluetooth_proxy/bluetooth_connection.h +56 -0
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +455 -0
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +183 -0
- esphome/components/bm8563/__init__.py +1 -0
- esphome/components/bm8563/bm8563.cpp +198 -0
- esphome/components/bm8563/bm8563.h +57 -0
- esphome/components/bm8563/time.py +80 -0
- esphome/components/bme280_base/__init__.py +108 -0
- esphome/components/bme280_base/bme280_base.cpp +357 -0
- esphome/components/bme280_base/bme280_base.h +114 -0
- esphome/components/bme280_i2c/__init__.py +0 -0
- esphome/components/bme280_i2c/bme280_i2c.cpp +30 -0
- esphome/components/bme280_i2c/bme280_i2c.h +20 -0
- esphome/components/bme280_i2c/sensor.py +22 -0
- esphome/components/bme280_spi/__init__.py +0 -0
- esphome/components/bme280_spi/bme280_spi.cpp +65 -0
- esphome/components/bme280_spi/bme280_spi.h +20 -0
- esphome/components/bme280_spi/sensor.py +24 -0
- esphome/components/bme680/__init__.py +0 -0
- esphome/components/bme680/bme680.cpp +514 -0
- esphome/components/bme680/bme680.h +139 -0
- esphome/components/bme680/sensor.py +159 -0
- esphome/components/bme680_bsec/__init__.py +96 -0
- esphome/components/bme680_bsec/bme680_bsec.cpp +565 -0
- esphome/components/bme680_bsec/bme680_bsec.h +137 -0
- esphome/components/bme680_bsec/sensor.py +124 -0
- esphome/components/bme680_bsec/text_sensor.py +33 -0
- esphome/components/bme68x_bsec2/__init__.py +197 -0
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +531 -0
- esphome/components/bme68x_bsec2/bme68x_bsec2.h +161 -0
- esphome/components/bme68x_bsec2/sensor.py +130 -0
- esphome/components/bme68x_bsec2/text_sensor.py +33 -0
- esphome/components/bme68x_bsec2_i2c/__init__.py +28 -0
- esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +54 -0
- esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.h +28 -0
- esphome/components/bmi160/__init__.py +1 -0
- esphome/components/bmi160/bmi160.cpp +269 -0
- esphome/components/bmi160/bmi160.h +44 -0
- esphome/components/bmi160/sensor.py +102 -0
- esphome/components/bmp085/__init__.py +0 -0
- esphome/components/bmp085/bmp085.cpp +137 -0
- esphome/components/bmp085/bmp085.h +45 -0
- esphome/components/bmp085/sensor.py +56 -0
- esphome/components/bmp280/__init__.py +0 -0
- esphome/components/bmp280/sensor.py +5 -0
- esphome/components/bmp280_base/__init__.py +88 -0
- esphome/components/bmp280_base/bmp280_base.cpp +273 -0
- esphome/components/bmp280_base/bmp280_base.h +98 -0
- esphome/components/bmp280_i2c/__init__.py +0 -0
- esphome/components/bmp280_i2c/bmp280_i2c.cpp +14 -0
- esphome/components/bmp280_i2c/bmp280_i2c.h +24 -0
- esphome/components/bmp280_i2c/sensor.py +23 -0
- esphome/components/bmp280_spi/__init__.py +0 -0
- esphome/components/bmp280_spi/bmp280_spi.cpp +65 -0
- esphome/components/bmp280_spi/bmp280_spi.h +20 -0
- esphome/components/bmp280_spi/sensor.py +23 -0
- esphome/components/bmp3xx/__init__.py +0 -0
- esphome/components/bmp3xx/sensor.py +7 -0
- esphome/components/bmp3xx_base/__init__.py +95 -0
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +388 -0
- esphome/components/bmp3xx_base/bmp3xx_base.h +242 -0
- esphome/components/bmp3xx_i2c/__init__.py +0 -0
- esphome/components/bmp3xx_i2c/bmp3xx_i2c.cpp +29 -0
- esphome/components/bmp3xx_i2c/bmp3xx_i2c.h +17 -0
- esphome/components/bmp3xx_i2c/sensor.py +23 -0
- esphome/components/bmp3xx_spi/__init__.py +0 -0
- esphome/components/bmp3xx_spi/bmp3xx_spi.cpp +57 -0
- esphome/components/bmp3xx_spi/bmp3xx_spi.h +19 -0
- esphome/components/bmp3xx_spi/sensor.py +23 -0
- esphome/components/bmp581/__init__.py +0 -0
- esphome/components/bmp581/bmp581.cpp +600 -0
- esphome/components/bmp581/bmp581.h +220 -0
- esphome/components/bmp581/sensor.py +164 -0
- esphome/components/bp1658cj/__init__.py +40 -0
- esphome/components/bp1658cj/bp1658cj.cpp +132 -0
- esphome/components/bp1658cj/bp1658cj.h +64 -0
- esphome/components/bp1658cj/output.py +28 -0
- esphome/components/bp5758d/__init__.py +29 -0
- esphome/components/bp5758d/bp5758d.cpp +168 -0
- esphome/components/bp5758d/bp5758d.h +64 -0
- esphome/components/bp5758d/output.py +30 -0
- esphome/components/button/__init__.py +134 -0
- esphome/components/button/automation.h +26 -0
- esphome/components/button/button.cpp +28 -0
- esphome/components/button/button.h +47 -0
- esphome/components/bytebuffer/__init__.py +5 -0
- esphome/components/bytebuffer/bytebuffer.h +421 -0
- esphome/components/camera/__init__.py +1 -0
- esphome/components/camera/buffer.h +18 -0
- esphome/components/camera/buffer_impl.cpp +20 -0
- esphome/components/camera/buffer_impl.h +26 -0
- esphome/components/camera/camera.cpp +22 -0
- esphome/components/camera/camera.h +138 -0
- esphome/components/camera/encoder.h +69 -0
- esphome/components/camera_encoder/__init__.py +60 -0
- esphome/components/camera_encoder/encoder_buffer_impl.cpp +23 -0
- esphome/components/camera_encoder/encoder_buffer_impl.h +25 -0
- esphome/components/camera_encoder/esp32_camera_jpeg_encoder.cpp +84 -0
- esphome/components/camera_encoder/esp32_camera_jpeg_encoder.h +41 -0
- esphome/components/canbus/__init__.py +183 -0
- esphome/components/canbus/canbus.cpp +106 -0
- esphome/components/canbus/canbus.h +184 -0
- esphome/components/cap1188/__init__.py +45 -0
- esphome/components/cap1188/binary_sensor.py +24 -0
- esphome/components/cap1188/cap1188.cpp +104 -0
- esphome/components/cap1188/cap1188.h +71 -0
- esphome/components/captive_portal/__init__.py +115 -0
- esphome/components/captive_portal/captive_index.h +89 -0
- esphome/components/captive_portal/captive_portal.cpp +130 -0
- esphome/components/captive_portal/captive_portal.h +80 -0
- esphome/components/captive_portal/dns_server_esp32_idf.cpp +205 -0
- esphome/components/captive_portal/dns_server_esp32_idf.h +27 -0
- esphome/components/cc1101/__init__.py +220 -0
- esphome/components/cc1101/cc1101.cpp +549 -0
- esphome/components/cc1101/cc1101.h +110 -0
- esphome/components/cc1101/cc1101defs.h +644 -0
- esphome/components/cc1101/cc1101pa.h +174 -0
- esphome/components/ccs811/__init__.py +0 -0
- esphome/components/ccs811/ccs811.cpp +190 -0
- esphome/components/ccs811/ccs811.h +55 -0
- esphome/components/ccs811/sensor.py +87 -0
- esphome/components/cd74hc4067/__init__.py +51 -0
- esphome/components/cd74hc4067/cd74hc4067.cpp +85 -0
- esphome/components/cd74hc4067/cd74hc4067.h +65 -0
- esphome/components/cd74hc4067/sensor.py +56 -0
- esphome/components/ch422g/__init__.py +76 -0
- esphome/components/ch422g/ch422g.cpp +138 -0
- esphome/components/ch422g/ch422g.h +70 -0
- esphome/components/chsc6x/__init__.py +2 -0
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +46 -0
- esphome/components/chsc6x/chsc6x_touchscreen.h +34 -0
- esphome/components/chsc6x/touchscreen.py +33 -0
- esphome/components/climate/__init__.py +517 -0
- esphome/components/climate/automation.h +60 -0
- esphome/components/climate/climate.cpp +764 -0
- esphome/components/climate/climate.h +347 -0
- esphome/components/climate/climate_mode.cpp +109 -0
- esphome/components/climate/climate_mode.h +134 -0
- esphome/components/climate/climate_traits.cpp +13 -0
- esphome/components/climate/climate_traits.h +294 -0
- esphome/components/climate_ir/__init__.py +78 -0
- esphome/components/climate_ir/climate_ir.cpp +99 -0
- esphome/components/climate_ir/climate_ir.h +75 -0
- esphome/components/climate_ir_lg/__init__.py +0 -0
- esphome/components/climate_ir_lg/climate.py +44 -0
- esphome/components/climate_ir_lg/climate_ir_lg.cpp +222 -0
- esphome/components/climate_ir_lg/climate_ir_lg.h +57 -0
- esphome/components/cm1106/__init__.py +1 -0
- esphome/components/cm1106/cm1106.cpp +111 -0
- esphome/components/cm1106/cm1106.h +40 -0
- esphome/components/cm1106/sensor.py +72 -0
- esphome/components/color/__init__.py +109 -0
- esphome/components/color_temperature/__init__.py +0 -0
- esphome/components/color_temperature/ct_light_output.h +38 -0
- esphome/components/color_temperature/light.py +42 -0
- esphome/components/combination/__init__.py +0 -0
- esphome/components/combination/combination.cpp +262 -0
- esphome/components/combination/combination.h +141 -0
- esphome/components/combination/sensor.py +176 -0
- esphome/components/const/__init__.py +17 -0
- esphome/components/coolix/__init__.py +0 -0
- esphome/components/coolix/climate.py +14 -0
- esphome/components/coolix/coolix.cpp +163 -0
- esphome/components/coolix/coolix.h +45 -0
- esphome/components/copy/__init__.py +5 -0
- esphome/components/copy/binary_sensor/__init__.py +41 -0
- esphome/components/copy/binary_sensor/copy_binary_sensor.cpp +18 -0
- esphome/components/copy/binary_sensor/copy_binary_sensor.h +20 -0
- esphome/components/copy/button/__init__.py +41 -0
- esphome/components/copy/button/copy_button.cpp +14 -0
- esphome/components/copy/button/copy_button.h +21 -0
- esphome/components/copy/cover/__init__.py +39 -0
- esphome/components/copy/cover/copy_cover.cpp +51 -0
- esphome/components/copy/cover/copy_cover.h +24 -0
- esphome/components/copy/fan/__init__.py +33 -0
- esphome/components/copy/fan/copy_fan.cpp +58 -0
- esphome/components/copy/fan/copy_fan.h +25 -0
- esphome/components/copy/lock/__init__.py +33 -0
- esphome/components/copy/lock/copy_lock.cpp +29 -0
- esphome/components/copy/lock/copy_lock.h +22 -0
- esphome/components/copy/number/__init__.py +41 -0
- esphome/components/copy/number/copy_number.cpp +29 -0
- esphome/components/copy/number/copy_number.h +22 -0
- esphome/components/copy/select/__init__.py +34 -0
- esphome/components/copy/select/copy_select.cpp +27 -0
- esphome/components/copy/select/copy_select.h +22 -0
- esphome/components/copy/sensor/__init__.py +45 -0
- esphome/components/copy/sensor/copy_sensor.cpp +18 -0
- esphome/components/copy/sensor/copy_sensor.h +20 -0
- esphome/components/copy/switch/__init__.py +39 -0
- esphome/components/copy/switch/copy_switch.cpp +26 -0
- esphome/components/copy/switch/copy_switch.h +22 -0
- esphome/components/copy/text/__init__.py +34 -0
- esphome/components/copy/text/copy_text.cpp +25 -0
- esphome/components/copy/text/copy_text.h +22 -0
- esphome/components/copy/text_sensor/__init__.py +33 -0
- esphome/components/copy/text_sensor/copy_text_sensor.cpp +18 -0
- esphome/components/copy/text_sensor/copy_text_sensor.h +20 -0
- esphome/components/cover/__init__.py +263 -0
- esphome/components/cover/automation.h +133 -0
- esphome/components/cover/cover.cpp +214 -0
- esphome/components/cover/cover.h +160 -0
- esphome/components/cover/cover_traits.h +28 -0
- esphome/components/cs5460a/__init__.py +0 -0
- esphome/components/cs5460a/cs5460a.cpp +343 -0
- esphome/components/cs5460a/cs5460a.h +124 -0
- esphome/components/cs5460a/sensor.py +138 -0
- esphome/components/cse7761/__init__.py +0 -0
- esphome/components/cse7761/cse7761.cpp +243 -0
- esphome/components/cse7761/cse7761.h +52 -0
- esphome/components/cse7761/sensor.py +90 -0
- esphome/components/cse7766/__init__.py +0 -0
- esphome/components/cse7766/cse7766.cpp +239 -0
- esphome/components/cse7766/cse7766.h +52 -0
- esphome/components/cse7766/sensor.py +111 -0
- esphome/components/cst226/__init__.py +6 -0
- esphome/components/cst226/binary_sensor/__init__.py +28 -0
- esphome/components/cst226/binary_sensor/cs226_button.h +22 -0
- esphome/components/cst226/binary_sensor/cstt6_button.cpp +19 -0
- esphome/components/cst226/touchscreen/__init__.py +37 -0
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +114 -0
- esphome/components/cst226/touchscreen/cst226_touchscreen.h +44 -0
- esphome/components/cst816/__init__.py +6 -0
- esphome/components/cst816/binary_sensor/__init__.py +5 -0
- esphome/components/cst816/touchscreen/__init__.py +37 -0
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +125 -0
- esphome/components/cst816/touchscreen/cst816_touchscreen.h +61 -0
- esphome/components/ct_clamp/__init__.py +0 -0
- esphome/components/ct_clamp/ct_clamp_sensor.cpp +74 -0
- esphome/components/ct_clamp/ct_clamp_sensor.h +54 -0
- esphome/components/ct_clamp/sensor.py +45 -0
- esphome/components/current_based/__init__.py +1 -0
- esphome/components/current_based/cover.py +128 -0
- esphome/components/current_based/current_based_cover.cpp +273 -0
- esphome/components/current_based/current_based_cover.h +97 -0
- esphome/components/custom/__init__.py +0 -0
- esphome/components/custom/binary_sensor/__init__.py +5 -0
- esphome/components/custom/climate/__init__.py +5 -0
- esphome/components/custom/cover/__init__.py +5 -0
- esphome/components/custom/light/__init__.py +5 -0
- esphome/components/custom/output/__init__.py +5 -0
- esphome/components/custom/sensor/__init__.py +5 -0
- esphome/components/custom/switch/__init__.py +5 -0
- esphome/components/custom/text_sensor/__init__.py +5 -0
- esphome/components/custom_component/__init__.py +7 -0
- esphome/components/cwww/__init__.py +0 -0
- esphome/components/cwww/cwww_light_output.h +40 -0
- esphome/components/cwww/light.py +48 -0
- esphome/components/dac7678/__init__.py +32 -0
- esphome/components/dac7678/dac7678_output.cpp +84 -0
- esphome/components/dac7678/dac7678_output.h +55 -0
- esphome/components/dac7678/output.py +28 -0
- esphome/components/daikin/__init__.py +0 -0
- esphome/components/daikin/climate.py +13 -0
- esphome/components/daikin/daikin.cpp +255 -0
- esphome/components/daikin/daikin.h +64 -0
- esphome/components/daikin_arc/__init__.py +1 -0
- esphome/components/daikin_arc/climate.py +13 -0
- esphome/components/daikin_arc/daikin_arc.cpp +492 -0
- esphome/components/daikin_arc/daikin_arc.h +76 -0
- esphome/components/daikin_brc/__init__.py +1 -0
- esphome/components/daikin_brc/climate.py +21 -0
- esphome/components/daikin_brc/daikin_brc.cpp +273 -0
- esphome/components/daikin_brc/daikin_brc.h +82 -0
- esphome/components/dallas/__init__.py +7 -0
- esphome/components/dallas/sensor.py +5 -0
- esphome/components/dallas_temp/__init__.py +1 -0
- esphome/components/dallas_temp/dallas_temp.cpp +160 -0
- esphome/components/dallas_temp/dallas_temp.h +31 -0
- esphome/components/dallas_temp/sensor.py +43 -0
- esphome/components/daly_bms/__init__.py +33 -0
- esphome/components/daly_bms/binary_sensor.py +39 -0
- esphome/components/daly_bms/daly_bms.cpp +327 -0
- esphome/components/daly_bms/daly_bms.h +93 -0
- esphome/components/daly_bms/sensor.py +236 -0
- esphome/components/daly_bms/text_sensor.py +35 -0
- esphome/components/dashboard_import/__init__.py +167 -0
- esphome/components/dashboard_import/dashboard_import.cpp +12 -0
- esphome/components/dashboard_import/dashboard_import.h +10 -0
- esphome/components/datetime/__init__.py +273 -0
- esphome/components/datetime/date_entity.cpp +133 -0
- esphome/components/datetime/date_entity.h +115 -0
- esphome/components/datetime/datetime_base.h +39 -0
- esphome/components/datetime/datetime_entity.cpp +254 -0
- esphome/components/datetime/datetime_entity.h +150 -0
- esphome/components/datetime/time_entity.cpp +156 -0
- esphome/components/datetime/time_entity.h +129 -0
- esphome/components/debug/__init__.py +81 -0
- esphome/components/debug/debug_component.cpp +98 -0
- esphome/components/debug/debug_component.h +92 -0
- esphome/components/debug/debug_esp32.cpp +241 -0
- esphome/components/debug/debug_esp8266.cpp +94 -0
- esphome/components/debug/debug_host.cpp +18 -0
- esphome/components/debug/debug_libretiny.cpp +44 -0
- esphome/components/debug/debug_rp2040.cpp +23 -0
- esphome/components/debug/debug_zephyr.cpp +378 -0
- esphome/components/debug/sensor.py +102 -0
- esphome/components/debug/text_sensor.py +40 -0
- esphome/components/deep_sleep/__init__.py +367 -0
- esphome/components/deep_sleep/deep_sleep_component.cpp +81 -0
- esphome/components/deep_sleep/deep_sleep_component.h +219 -0
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +172 -0
- esphome/components/deep_sleep/deep_sleep_esp8266.cpp +23 -0
- esphome/components/delonghi/__init__.py +1 -0
- esphome/components/delonghi/climate.py +13 -0
- esphome/components/delonghi/delonghi.cpp +186 -0
- esphome/components/delonghi/delonghi.h +64 -0
- esphome/components/demo/__init__.py +629 -0
- esphome/components/demo/demo_alarm_control_panel.h +65 -0
- esphome/components/demo/demo_binary_sensor.h +22 -0
- esphome/components/demo/demo_button.h +15 -0
- esphome/components/demo/demo_climate.h +152 -0
- esphome/components/demo/demo_cover.h +87 -0
- esphome/components/demo/demo_date.h +34 -0
- esphome/components/demo/demo_datetime.h +40 -0
- esphome/components/demo/demo_fan.h +66 -0
- esphome/components/demo/demo_light.h +68 -0
- esphome/components/demo/demo_lock.h +17 -0
- esphome/components/demo/demo_number.h +39 -0
- esphome/components/demo/demo_select.h +15 -0
- esphome/components/demo/demo_sensor.h +29 -0
- esphome/components/demo/demo_switch.h +22 -0
- esphome/components/demo/demo_text.h +18 -0
- esphome/components/demo/demo_text_sensor.h +25 -0
- esphome/components/demo/demo_time.h +34 -0
- esphome/components/demo/demo_valve.h +54 -0
- esphome/components/dfplayer/__init__.py +373 -0
- esphome/components/dfplayer/dfplayer.cpp +276 -0
- esphome/components/dfplayer/dfplayer.h +182 -0
- esphome/components/dfrobot_sen0395/__init__.py +204 -0
- esphome/components/dfrobot_sen0395/automation.h +89 -0
- esphome/components/dfrobot_sen0395/binary_sensor.py +23 -0
- esphome/components/dfrobot_sen0395/commands.cpp +321 -0
- esphome/components/dfrobot_sen0395/commands.h +156 -0
- esphome/components/dfrobot_sen0395/dfrobot_sen0395.cpp +143 -0
- esphome/components/dfrobot_sen0395/dfrobot_sen0395.h +125 -0
- esphome/components/dfrobot_sen0395/switch/__init__.py +63 -0
- esphome/components/dfrobot_sen0395/switch/dfrobot_sen0395_switch.cpp +48 -0
- esphome/components/dfrobot_sen0395/switch/dfrobot_sen0395_switch.h +34 -0
- esphome/components/dht/__init__.py +1 -0
- esphome/components/dht/dht.cpp +237 -0
- esphome/components/dht/dht.h +65 -0
- esphome/components/dht/sensor.py +70 -0
- esphome/components/dht12/__init__.py +0 -0
- esphome/components/dht12/dht12.cpp +69 -0
- esphome/components/dht12/dht12.h +28 -0
- esphome/components/dht12/sensor.py +54 -0
- esphome/components/display/__init__.py +224 -0
- esphome/components/display/display.cpp +929 -0
- esphome/components/display/display.h +875 -0
- esphome/components/display/display_buffer.cpp +72 -0
- esphome/components/display/display_buffer.h +34 -0
- esphome/components/display/display_color_utils.h +159 -0
- esphome/components/display/rect.cpp +94 -0
- esphome/components/display/rect.h +36 -0
- esphome/components/display_menu_base/__init__.py +428 -0
- esphome/components/display_menu_base/automation.h +133 -0
- esphome/components/display_menu_base/display_menu_base.cpp +329 -0
- esphome/components/display_menu_base/display_menu_base.h +82 -0
- esphome/components/display_menu_base/menu_item.cpp +202 -0
- esphome/components/display_menu_base/menu_item.h +191 -0
- esphome/components/dps310/__init__.py +0 -0
- esphome/components/dps310/dps310.cpp +189 -0
- esphome/components/dps310/dps310.h +65 -0
- esphome/components/dps310/sensor.py +62 -0
- esphome/components/ds1307/__init__.py +0 -0
- esphome/components/ds1307/ds1307.cpp +108 -0
- esphome/components/ds1307/ds1307.h +70 -0
- esphome/components/ds1307/time.py +57 -0
- esphome/components/ds2484/__init__.py +1 -0
- esphome/components/ds2484/ds2484.cpp +208 -0
- esphome/components/ds2484/ds2484.h +43 -0
- esphome/components/ds2484/one_wire.py +37 -0
- esphome/components/dsmr/__init__.py +89 -0
- esphome/components/dsmr/dsmr.cpp +335 -0
- esphome/components/dsmr/dsmr.h +146 -0
- esphome/components/dsmr/sensor.py +291 -0
- esphome/components/dsmr/text_sensor.py +52 -0
- esphome/components/duty_cycle/__init__.py +0 -0
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +62 -0
- esphome/components/duty_cycle/duty_cycle_sensor.h +37 -0
- esphome/components/duty_cycle/sensor.py +30 -0
- esphome/components/duty_time/__init__.py +1 -0
- esphome/components/duty_time/duty_time_sensor.cpp +107 -0
- esphome/components/duty_time/duty_time_sensor.h +75 -0
- esphome/components/duty_time/sensor.py +127 -0
- esphome/components/e131/__init__.py +58 -0
- esphome/components/e131/e131.cpp +127 -0
- esphome/components/e131/e131.h +55 -0
- esphome/components/e131/e131_addressable_light_effect.cpp +94 -0
- esphome/components/e131/e131_addressable_light_effect.h +45 -0
- esphome/components/e131/e131_packet.cpp +147 -0
- esphome/components/ee895/__init__.py +0 -0
- esphome/components/ee895/ee895.cpp +114 -0
- esphome/components/ee895/ee895.h +34 -0
- esphome/components/ee895/sensor.py +69 -0
- esphome/components/ektf2232/__init__.py +0 -0
- esphome/components/ektf2232/touchscreen/__init__.py +44 -0
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +134 -0
- esphome/components/ektf2232/touchscreen/ektf2232.h +35 -0
- esphome/components/emc2101/__init__.py +83 -0
- esphome/components/emc2101/emc2101.cpp +169 -0
- esphome/components/emc2101/emc2101.h +115 -0
- esphome/components/emc2101/output/__init__.py +22 -0
- esphome/components/emc2101/output/emc2101_output.cpp +9 -0
- esphome/components/emc2101/output/emc2101_output.h +22 -0
- esphome/components/emc2101/sensor/__init__.py +75 -0
- esphome/components/emc2101/sensor/emc2101_sensor.cpp +43 -0
- esphome/components/emc2101/sensor/emc2101_sensor.h +39 -0
- esphome/components/emmeti/__init__.py +0 -0
- esphome/components/emmeti/climate.py +14 -0
- esphome/components/emmeti/emmeti.cpp +316 -0
- esphome/components/emmeti/emmeti.h +109 -0
- esphome/components/endstop/__init__.py +0 -0
- esphome/components/endstop/cover.py +60 -0
- esphome/components/endstop/endstop_cover.cpp +193 -0
- esphome/components/endstop/endstop_cover.h +58 -0
- esphome/components/ens160/__init__.py +0 -0
- esphome/components/ens160/sensor.py +7 -0
- esphome/components/ens160_base/__init__.py +81 -0
- esphome/components/ens160_base/ens160_base.cpp +318 -0
- esphome/components/ens160_base/ens160_base.h +63 -0
- esphome/components/ens160_i2c/__init__.py +0 -0
- esphome/components/ens160_i2c/ens160_i2c.cpp +32 -0
- esphome/components/ens160_i2c/ens160_i2c.h +19 -0
- esphome/components/ens160_i2c/sensor.py +23 -0
- esphome/components/ens160_spi/__init__.py +0 -0
- esphome/components/ens160_spi/ens160_spi.cpp +59 -0
- esphome/components/ens160_spi/ens160_spi.h +22 -0
- esphome/components/ens160_spi/sensor.py +23 -0
- esphome/components/ens210/__init__.py +0 -0
- esphome/components/ens210/ens210.cpp +229 -0
- esphome/components/ens210/ens210.h +39 -0
- esphome/components/ens210/sensor.py +58 -0
- esphome/components/epaper_spi/__init__.py +1 -0
- esphome/components/epaper_spi/display.py +233 -0
- esphome/components/epaper_spi/epaper_spi.cpp +346 -0
- esphome/components/epaper_spi/epaper_spi.h +181 -0
- esphome/components/epaper_spi/epaper_spi_spectra_e6.cpp +159 -0
- esphome/components/epaper_spi/epaper_spi_spectra_e6.h +28 -0
- esphome/components/epaper_spi/epaper_spi_ssd1677.cpp +86 -0
- esphome/components/epaper_spi/epaper_spi_ssd1677.h +25 -0
- esphome/components/epaper_spi/models/__init__.py +65 -0
- esphome/components/epaper_spi/models/spectra_e6.py +55 -0
- esphome/components/epaper_spi/models/ssd1677.py +42 -0
- esphome/components/es7210/__init__.py +0 -0
- esphome/components/es7210/audio_adc.py +51 -0
- esphome/components/es7210/es7210.cpp +228 -0
- esphome/components/es7210/es7210.h +61 -0
- esphome/components/es7210/es7210_const.h +129 -0
- esphome/components/es7243e/__init__.py +0 -0
- esphome/components/es7243e/audio_adc.py +34 -0
- esphome/components/es7243e/es7243e.cpp +123 -0
- esphome/components/es7243e/es7243e.h +36 -0
- esphome/components/es7243e/es7243e_const.h +54 -0
- esphome/components/es8156/__init__.py +0 -0
- esphome/components/es8156/audio_dac.py +27 -0
- esphome/components/es8156/es8156.cpp +85 -0
- esphome/components/es8156/es8156.h +50 -0
- esphome/components/es8156/es8156_const.h +68 -0
- esphome/components/es8311/__init__.py +0 -0
- esphome/components/es8311/audio_dac.py +67 -0
- esphome/components/es8311/es8311.cpp +227 -0
- esphome/components/es8311/es8311.h +134 -0
- esphome/components/es8311/es8311_const.h +195 -0
- esphome/components/es8388/__init__.py +0 -0
- esphome/components/es8388/audio_dac.py +26 -0
- esphome/components/es8388/es8388.cpp +287 -0
- esphome/components/es8388/es8388.h +80 -0
- esphome/components/es8388/es8388_const.h +83 -0
- esphome/components/es8388/select/__init__.py +47 -0
- esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
- esphome/components/es8388/select/adc_input_mic_select.h +15 -0
- esphome/components/es8388/select/dac_output_select.cpp +12 -0
- esphome/components/es8388/select/dac_output_select.h +15 -0
- esphome/components/esp32/__init__.py +1323 -0
- esphome/components/esp32/boards.py +2536 -0
- esphome/components/esp32/const.py +51 -0
- esphome/components/esp32/core.cpp +114 -0
- esphome/components/esp32/gpio.cpp +209 -0
- esphome/components/esp32/gpio.h +57 -0
- esphome/components/esp32/gpio.py +239 -0
- esphome/components/esp32/gpio_esp32.py +70 -0
- esphome/components/esp32/gpio_esp32_c2.py +32 -0
- esphome/components/esp32/gpio_esp32_c3.py +45 -0
- esphome/components/esp32/gpio_esp32_c5.py +58 -0
- esphome/components/esp32/gpio_esp32_c6.py +58 -0
- esphome/components/esp32/gpio_esp32_c61.py +46 -0
- esphome/components/esp32/gpio_esp32_h2.py +47 -0
- esphome/components/esp32/gpio_esp32_p4.py +52 -0
- esphome/components/esp32/gpio_esp32_s2.py +74 -0
- esphome/components/esp32/gpio_esp32_s3.py +64 -0
- esphome/components/esp32/helpers.cpp +109 -0
- esphome/components/esp32/iram_fix.py.script +71 -0
- esphome/components/esp32/post_build.py.script +128 -0
- esphome/components/esp32/pre_build.py.script +9 -0
- esphome/components/esp32/preferences.cpp +209 -0
- esphome/components/esp32/preferences.h +12 -0
- esphome/components/esp32_ble/__init__.py +553 -0
- esphome/components/esp32_ble/ble.cpp +673 -0
- esphome/components/esp32_ble/ble.h +230 -0
- esphome/components/esp32_ble/ble_advertising.cpp +170 -0
- esphome/components/esp32_ble/ble_advertising.h +69 -0
- esphome/components/esp32_ble/ble_event.h +467 -0
- esphome/components/esp32_ble/ble_scan_result.h +22 -0
- esphome/components/esp32_ble/ble_uuid.cpp +190 -0
- esphome/components/esp32_ble/ble_uuid.h +48 -0
- esphome/components/esp32_ble_beacon/__init__.py +90 -0
- esphome/components/esp32_ble_beacon/esp32_ble_beacon.cpp +127 -0
- esphome/components/esp32_ble_beacon/esp32_ble_beacon.h +71 -0
- esphome/components/esp32_ble_client/__init__.py +11 -0
- esphome/components/esp32_ble_client/ble_characteristic.cpp +99 -0
- esphome/components/esp32_ble_client/ble_characteristic.h +41 -0
- esphome/components/esp32_ble_client/ble_client_base.cpp +683 -0
- esphome/components/esp32_ble_client/ble_client_base.h +148 -0
- esphome/components/esp32_ble_client/ble_descriptor.h +27 -0
- esphome/components/esp32_ble_client/ble_service.cpp +77 -0
- esphome/components/esp32_ble_client/ble_service.h +38 -0
- esphome/components/esp32_ble_server/__init__.py +649 -0
- esphome/components/esp32_ble_server/ble_2902.cpp +20 -0
- esphome/components/esp32_ble_server/ble_2902.h +18 -0
- esphome/components/esp32_ble_server/ble_characteristic.cpp +328 -0
- esphome/components/esp32_ble_server/ble_characteristic.h +120 -0
- esphome/components/esp32_ble_server/ble_descriptor.cpp +93 -0
- esphome/components/esp32_ble_server/ble_descriptor.h +69 -0
- esphome/components/esp32_ble_server/ble_server.cpp +239 -0
- esphome/components/esp32_ble_server/ble_server.h +116 -0
- esphome/components/esp32_ble_server/ble_server_automations.cpp +93 -0
- esphome/components/esp32_ble_server/ble_server_automations.h +130 -0
- esphome/components/esp32_ble_server/ble_service.cpp +179 -0
- esphome/components/esp32_ble_server/ble_service.h +86 -0
- esphome/components/esp32_ble_tracker/__init__.py +451 -0
- esphome/components/esp32_ble_tracker/automation.h +115 -0
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +868 -0
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +389 -0
- esphome/components/esp32_camera/__init__.py +368 -0
- esphome/components/esp32_camera/esp32_camera.cpp +443 -0
- esphome/components/esp32_camera/esp32_camera.h +247 -0
- esphome/components/esp32_camera_web_server/__init__.py +44 -0
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +248 -0
- esphome/components/esp32_camera_web_server/camera_web_server.h +54 -0
- esphome/components/esp32_can/__init__.py +0 -0
- esphome/components/esp32_can/canbus.py +130 -0
- esphome/components/esp32_can/esp32_can.cpp +177 -0
- esphome/components/esp32_can/esp32_can.h +40 -0
- esphome/components/esp32_dac/__init__.py +0 -0
- esphome/components/esp32_dac/esp32_dac.cpp +47 -0
- esphome/components/esp32_dac/esp32_dac.h +36 -0
- esphome/components/esp32_dac/output.py +46 -0
- esphome/components/esp32_hall/__init__.py +0 -0
- esphome/components/esp32_hall/sensor.py +5 -0
- esphome/components/esp32_hosted/__init__.py +107 -0
- esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
- esphome/components/esp32_hosted/update/__init__.py +78 -0
- esphome/components/esp32_hosted/update/esp32_hosted_update.cpp +169 -0
- esphome/components/esp32_hosted/update/esp32_hosted_update.h +32 -0
- esphome/components/esp32_improv/__init__.py +158 -0
- esphome/components/esp32_improv/automation.h +72 -0
- esphome/components/esp32_improv/esp32_improv_component.cpp +482 -0
- esphome/components/esp32_improv/esp32_improv_component.h +130 -0
- esphome/components/esp32_rmt/__init__.py +22 -0
- esphome/components/esp32_rmt_led_strip/__init__.py +0 -0
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +309 -0
- esphome/components/esp32_rmt_led_strip/led_strip.h +106 -0
- esphome/components/esp32_rmt_led_strip/light.py +170 -0
- esphome/components/esp32_touch/__init__.py +325 -0
- esphome/components/esp32_touch/binary_sensor.py +36 -0
- esphome/components/esp32_touch/esp32_touch.h +271 -0
- esphome/components/esp32_touch/esp32_touch_common.cpp +164 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +244 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +401 -0
- esphome/components/esp8266/__init__.py +280 -0
- esphome/components/esp8266/boards.py +362 -0
- esphome/components/esp8266/const.py +11 -0
- esphome/components/esp8266/core.cpp +73 -0
- esphome/components/esp8266/core.h +12 -0
- esphome/components/esp8266/gpio.cpp +183 -0
- esphome/components/esp8266/gpio.h +37 -0
- esphome/components/esp8266/gpio.py +212 -0
- esphome/components/esp8266/helpers.cpp +35 -0
- esphome/components/esp8266/post_build.py.script +23 -0
- esphome/components/esp8266/preferences.cpp +293 -0
- esphome/components/esp8266/preferences.h +12 -0
- esphome/components/esp8266/testing_mode.py.script +166 -0
- esphome/components/esp8266_pwm/__init__.py +0 -0
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +57 -0
- esphome/components/esp8266_pwm/esp8266_pwm.h +54 -0
- esphome/components/esp8266_pwm/output.py +63 -0
- esphome/components/esp_ldo/__init__.py +93 -0
- esphome/components/esp_ldo/esp_ldo.cpp +43 -0
- esphome/components/esp_ldo/esp_ldo.h +46 -0
- esphome/components/esphome/ota/__init__.py +166 -0
- esphome/components/esphome/ota/ota_esphome.cpp +802 -0
- esphome/components/esphome/ota/ota_esphome.h +103 -0
- esphome/components/espnow/__init__.py +314 -0
- esphome/components/espnow/automation.h +175 -0
- esphome/components/espnow/espnow_component.cpp +486 -0
- esphome/components/espnow/espnow_component.h +183 -0
- esphome/components/espnow/espnow_err.h +19 -0
- esphome/components/espnow/espnow_packet.h +166 -0
- esphome/components/espnow/packet_transport/__init__.py +39 -0
- esphome/components/espnow/packet_transport/espnow_transport.cpp +97 -0
- esphome/components/espnow/packet_transport/espnow_transport.h +44 -0
- esphome/components/ethernet/__init__.py +470 -0
- esphome/components/ethernet/esp_eth_phy_jl1101.c +344 -0
- esphome/components/ethernet/ethernet_component.cpp +813 -0
- esphome/components/ethernet/ethernet_component.h +180 -0
- esphome/components/ethernet_info/__init__.py +1 -0
- esphome/components/ethernet_info/ethernet_info_text_sensor.cpp +18 -0
- esphome/components/ethernet_info/ethernet_info_text_sensor.h +70 -0
- esphome/components/ethernet_info/text_sensor.py +64 -0
- esphome/components/event/__init__.py +143 -0
- esphome/components/event/automation.h +25 -0
- esphome/components/event/event.cpp +53 -0
- esphome/components/event/event.h +63 -0
- esphome/components/exposure_notifications/__init__.py +39 -0
- esphome/components/exposure_notifications/exposure_notifications.cpp +49 -0
- esphome/components/exposure_notifications/exposure_notifications.h +29 -0
- esphome/components/external_components/__init__.py +118 -0
- esphome/components/ezo/__init__.py +0 -0
- esphome/components/ezo/automation.h +53 -0
- esphome/components/ezo/ezo.cpp +235 -0
- esphome/components/ezo/ezo.h +110 -0
- esphome/components/ezo/sensor.py +114 -0
- esphome/components/ezo_pmp/__init__.py +296 -0
- esphome/components/ezo_pmp/binary_sensor.py +42 -0
- esphome/components/ezo_pmp/ezo_pmp.cpp +543 -0
- esphome/components/ezo_pmp/ezo_pmp.h +251 -0
- esphome/components/ezo_pmp/sensor.py +103 -0
- esphome/components/ezo_pmp/text_sensor.py +35 -0
- esphome/components/factory_reset/__init__.py +97 -0
- esphome/components/factory_reset/button/__init__.py +28 -0
- esphome/components/factory_reset/button/factory_reset_button.cpp +38 -0
- esphome/components/factory_reset/button/factory_reset_button.h +23 -0
- esphome/components/factory_reset/factory_reset.cpp +76 -0
- esphome/components/factory_reset/factory_reset.h +43 -0
- esphome/components/factory_reset/switch/__init__.py +22 -0
- esphome/components/factory_reset/switch/factory_reset_switch.cpp +43 -0
- esphome/components/factory_reset/switch/factory_reset_switch.h +22 -0
- esphome/components/fan/__init__.py +398 -0
- esphome/components/fan/automation.h +231 -0
- esphome/components/fan/fan.cpp +276 -0
- esphome/components/fan/fan.h +165 -0
- esphome/components/fan/fan_traits.h +69 -0
- esphome/components/fastled_base/__init__.py +45 -0
- esphome/components/fastled_base/fastled_light.cpp +44 -0
- esphome/components/fastled_base/fastled_light.h +243 -0
- esphome/components/fastled_clockless/__init__.py +0 -0
- esphome/components/fastled_clockless/light.py +85 -0
- esphome/components/fastled_spi/__init__.py +0 -0
- esphome/components/fastled_spi/light.py +75 -0
- esphome/components/feedback/__init__.py +1 -0
- esphome/components/feedback/cover.py +162 -0
- esphome/components/feedback/feedback_cover.cpp +447 -0
- esphome/components/feedback/feedback_cover.h +89 -0
- esphome/components/fingerprint_grow/__init__.py +372 -0
- esphome/components/fingerprint_grow/binary_sensor.py +21 -0
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +576 -0
- esphome/components/fingerprint_grow/fingerprint_grow.h +336 -0
- esphome/components/fingerprint_grow/sensor.py +74 -0
- esphome/components/font/__init__.py +625 -0
- esphome/components/font/font.cpp +288 -0
- esphome/components/font/font.h +102 -0
- esphome/components/fs3000/__init__.py +0 -0
- esphome/components/fs3000/fs3000.cpp +105 -0
- esphome/components/fs3000/fs3000.h +34 -0
- esphome/components/fs3000/sensor.py +46 -0
- esphome/components/ft5x06/__init__.py +6 -0
- esphome/components/ft5x06/touchscreen/__init__.py +32 -0
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +103 -0
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.h +56 -0
- esphome/components/ft63x6/__init__.py +1 -0
- esphome/components/ft63x6/ft63x6.cpp +137 -0
- esphome/components/ft63x6/ft63x6.h +51 -0
- esphome/components/ft63x6/touchscreen.py +44 -0
- esphome/components/fujitsu_general/__init__.py +0 -0
- esphome/components/fujitsu_general/climate.py +15 -0
- esphome/components/fujitsu_general/fujitsu_general.cpp +404 -0
- esphome/components/fujitsu_general/fujitsu_general.h +82 -0
- esphome/components/gcja5/__init__.py +1 -0
- esphome/components/gcja5/gcja5.cpp +109 -0
- esphome/components/gcja5/gcja5.h +56 -0
- esphome/components/gcja5/sensor.py +118 -0
- esphome/components/gdk101/__init__.py +32 -0
- esphome/components/gdk101/binary_sensor.py +30 -0
- esphome/components/gdk101/gdk101.cpp +191 -0
- esphome/components/gdk101/gdk101.h +57 -0
- esphome/components/gdk101/sensor.py +79 -0
- esphome/components/gdk101/text_sensor.py +23 -0
- esphome/components/gl_r01_i2c/__init__.py +0 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +67 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
- esphome/components/gl_r01_i2c/sensor.py +36 -0
- esphome/components/globals/__init__.py +88 -0
- esphome/components/globals/globals_component.h +148 -0
- esphome/components/gp2y1010au0f/__init__.py +0 -0
- esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +69 -0
- esphome/components/gp2y1010au0f/gp2y1010au0f.h +52 -0
- esphome/components/gp2y1010au0f/sensor.py +61 -0
- esphome/components/gp8403/__init__.py +46 -0
- esphome/components/gp8403/gp8403.cpp +55 -0
- esphome/components/gp8403/gp8403.h +35 -0
- esphome/components/gp8403/output/__init__.py +30 -0
- esphome/components/gp8403/output/gp8403_output.cpp +20 -0
- esphome/components/gp8403/output/gp8403_output.h +23 -0
- esphome/components/gpio/__init__.py +4 -0
- esphome/components/gpio/binary_sensor/__init__.py +102 -0
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +101 -0
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +68 -0
- esphome/components/gpio/one_wire/__init__.py +26 -0
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +206 -0
- esphome/components/gpio/one_wire/gpio_one_wire.h +42 -0
- esphome/components/gpio/output/__init__.py +25 -0
- esphome/components/gpio/output/gpio_binary_output.cpp +16 -0
- esphome/components/gpio/output/gpio_binary_output.h +29 -0
- esphome/components/gpio/switch/__init__.py +40 -0
- esphome/components/gpio/switch/gpio_switch.cpp +73 -0
- esphome/components/gpio/switch/gpio_switch.h +33 -0
- esphome/components/gpio_expander/__init__.py +0 -0
- esphome/components/gpio_expander/cached_gpio.h +82 -0
- esphome/components/gps/__init__.py +130 -0
- esphome/components/gps/gps.cpp +95 -0
- esphome/components/gps/gps.h +71 -0
- esphome/components/gps/time/__init__.py +28 -0
- esphome/components/gps/time/gps_time.cpp +32 -0
- esphome/components/gps/time/gps_time.h +25 -0
- esphome/components/graph/__init__.py +219 -0
- esphome/components/graph/graph.cpp +397 -0
- esphome/components/graph/graph.h +187 -0
- esphome/components/graphical_display_menu/__init__.py +100 -0
- esphome/components/graphical_display_menu/graphical_display_menu.cpp +250 -0
- esphome/components/graphical_display_menu/graphical_display_menu.h +84 -0
- esphome/components/gree/__init__.py +3 -0
- esphome/components/gree/climate.py +33 -0
- esphome/components/gree/gree.cpp +252 -0
- esphome/components/gree/gree.h +109 -0
- esphome/components/gree/switch/__init__.py +74 -0
- esphome/components/gree/switch/gree_switch.cpp +24 -0
- esphome/components/gree/switch/gree_switch.h +24 -0
- esphome/components/grove_gas_mc_v2/__init__.py +0 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +86 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +37 -0
- esphome/components/grove_gas_mc_v2/sensor.py +77 -0
- esphome/components/grove_tb6612fng/__init__.py +176 -0
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +170 -0
- esphome/components/grove_tb6612fng/grove_tb6612fng.h +215 -0
- esphome/components/growatt_solar/__init__.py +0 -0
- esphome/components/growatt_solar/growatt_solar.cpp +145 -0
- esphome/components/growatt_solar/growatt_solar.h +87 -0
- esphome/components/growatt_solar/sensor.py +212 -0
- esphome/components/gt911/__init__.py +6 -0
- esphome/components/gt911/binary_sensor/__init__.py +31 -0
- esphome/components/gt911/binary_sensor/gt911_button.cpp +27 -0
- esphome/components/gt911/binary_sensor/gt911_button.h +28 -0
- esphome/components/gt911/touchscreen/__init__.py +33 -0
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +146 -0
- esphome/components/gt911/touchscreen/gt911_touchscreen.h +59 -0
- esphome/components/haier/__init__.py +0 -0
- esphome/components/haier/automation.h +130 -0
- esphome/components/haier/binary_sensor/__init__.py +65 -0
- esphome/components/haier/button/__init__.py +38 -0
- esphome/components/haier/button/self_cleaning.cpp +9 -0
- esphome/components/haier/button/self_cleaning.h +18 -0
- esphome/components/haier/button/steri_cleaning.cpp +9 -0
- esphome/components/haier/button/steri_cleaning.h +18 -0
- esphome/components/haier/climate.py +521 -0
- esphome/components/haier/haier_base.cpp +427 -0
- esphome/components/haier/haier_base.h +186 -0
- esphome/components/haier/hon_climate.cpp +1384 -0
- esphome/components/haier/hon_climate.h +214 -0
- esphome/components/haier/hon_packet.h +260 -0
- esphome/components/haier/logger_handler.cpp +33 -0
- esphome/components/haier/logger_handler.h +14 -0
- esphome/components/haier/sensor/__init__.py +150 -0
- esphome/components/haier/smartair2_climate.cpp +553 -0
- esphome/components/haier/smartair2_climate.h +40 -0
- esphome/components/haier/smartair2_packet.h +88 -0
- esphome/components/haier/switch/__init__.py +88 -0
- esphome/components/haier/switch/beeper.cpp +14 -0
- esphome/components/haier/switch/beeper.h +18 -0
- esphome/components/haier/switch/display.cpp +14 -0
- esphome/components/haier/switch/display.h +18 -0
- esphome/components/haier/switch/health_mode.cpp +14 -0
- esphome/components/haier/switch/health_mode.h +18 -0
- esphome/components/haier/switch/quiet_mode.cpp +14 -0
- esphome/components/haier/switch/quiet_mode.h +18 -0
- esphome/components/haier/text_sensor/__init__.py +49 -0
- esphome/components/havells_solar/__init__.py +0 -0
- esphome/components/havells_solar/havells_solar.cpp +168 -0
- esphome/components/havells_solar/havells_solar.h +117 -0
- esphome/components/havells_solar/havells_solar_registers.h +49 -0
- esphome/components/havells_solar/sensor.py +291 -0
- esphome/components/hbridge/__init__.py +3 -0
- esphome/components/hbridge/fan/__init__.py +78 -0
- esphome/components/hbridge/fan/hbridge_fan.cpp +94 -0
- esphome/components/hbridge/fan/hbridge_fan.h +58 -0
- esphome/components/hbridge/light/__init__.py +31 -0
- esphome/components/hbridge/light/hbridge_light_output.h +58 -0
- esphome/components/hbridge/switch/__init__.py +44 -0
- esphome/components/hbridge/switch/hbridge_switch.cpp +93 -0
- esphome/components/hbridge/switch/hbridge_switch.h +50 -0
- esphome/components/hc8/__init__.py +1 -0
- esphome/components/hc8/hc8.cpp +99 -0
- esphome/components/hc8/hc8.h +37 -0
- esphome/components/hc8/sensor.py +79 -0
- esphome/components/hdc1080/__init__.py +0 -0
- esphome/components/hdc1080/hdc1080.cpp +82 -0
- esphome/components/hdc1080/hdc1080.h +27 -0
- esphome/components/hdc1080/sensor.py +56 -0
- esphome/components/hdc2010/__init__.py +1 -0
- esphome/components/hdc2010/hdc2010.cpp +111 -0
- esphome/components/hdc2010/hdc2010.h +32 -0
- esphome/components/hdc2010/sensor.py +56 -0
- esphome/components/he60r/__init__.py +1 -0
- esphome/components/he60r/cover.py +42 -0
- esphome/components/he60r/he60r.cpp +265 -0
- esphome/components/he60r/he60r.h +45 -0
- esphome/components/heatpumpir/__init__.py +0 -0
- esphome/components/heatpumpir/climate.py +131 -0
- esphome/components/heatpumpir/heatpumpir.cpp +213 -0
- esphome/components/heatpumpir/heatpumpir.h +132 -0
- esphome/components/heatpumpir/ir_sender_esphome.cpp +32 -0
- esphome/components/heatpumpir/ir_sender_esphome.h +25 -0
- esphome/components/hitachi_ac344/__init__.py +0 -0
- esphome/components/hitachi_ac344/climate.py +13 -0
- esphome/components/hitachi_ac344/hitachi_ac344.cpp +370 -0
- esphome/components/hitachi_ac344/hitachi_ac344.h +121 -0
- esphome/components/hitachi_ac424/__init__.py +1 -0
- esphome/components/hitachi_ac424/climate.py +13 -0
- esphome/components/hitachi_ac424/hitachi_ac424.cpp +371 -0
- esphome/components/hitachi_ac424/hitachi_ac424.h +123 -0
- esphome/components/hlk_fm22x/__init__.py +247 -0
- esphome/components/hlk_fm22x/binary_sensor.py +21 -0
- esphome/components/hlk_fm22x/hlk_fm22x.cpp +325 -0
- esphome/components/hlk_fm22x/hlk_fm22x.h +224 -0
- esphome/components/hlk_fm22x/sensor.py +47 -0
- esphome/components/hlk_fm22x/text_sensor.py +42 -0
- esphome/components/hlw8012/__init__.py +0 -0
- esphome/components/hlw8012/hlw8012.cpp +109 -0
- esphome/components/hlw8012/hlw8012.h +77 -0
- esphome/components/hlw8012/sensor.py +124 -0
- esphome/components/hlw8032/__init__.py +1 -0
- esphome/components/hlw8032/hlw8032.cpp +194 -0
- esphome/components/hlw8032/hlw8032.h +44 -0
- esphome/components/hlw8032/sensor.py +93 -0
- esphome/components/hm3301/__init__.py +0 -0
- esphome/components/hm3301/abstract_aqi_calculator.h +14 -0
- esphome/components/hm3301/aqi_calculator.h +50 -0
- esphome/components/hm3301/aqi_calculator_factory.h +29 -0
- esphome/components/hm3301/caqi_calculator.h +52 -0
- esphome/components/hm3301/hm3301.cpp +100 -0
- esphome/components/hm3301/hm3301.h +52 -0
- esphome/components/hm3301/sensor.py +111 -0
- esphome/components/hmac_md5/__init__.py +2 -0
- esphome/components/hmac_md5/hmac_md5.cpp +58 -0
- esphome/components/hmac_md5/hmac_md5.h +49 -0
- esphome/components/hmc5883l/__init__.py +0 -0
- esphome/components/hmc5883l/hmc5883l.cpp +145 -0
- esphome/components/hmc5883l/hmc5883l.h +70 -0
- esphome/components/hmc5883l/sensor.py +142 -0
- esphome/components/homeassistant/__init__.py +41 -0
- esphome/components/homeassistant/binary_sensor/__init__.py +24 -0
- esphome/components/homeassistant/binary_sensor/homeassistant_binary_sensor.cpp +47 -0
- esphome/components/homeassistant/binary_sensor/homeassistant_binary_sensor.h +24 -0
- esphome/components/homeassistant/number/__init__.py +34 -0
- esphome/components/homeassistant/number/homeassistant_number.cpp +103 -0
- esphome/components/homeassistant/number/homeassistant_number.h +31 -0
- esphome/components/homeassistant/sensor/__init__.py +24 -0
- esphome/components/homeassistant/sensor/homeassistant_sensor.cpp +38 -0
- esphome/components/homeassistant/sensor/homeassistant_sensor.h +23 -0
- esphome/components/homeassistant/switch/__init__.py +44 -0
- esphome/components/homeassistant/switch/homeassistant_switch.cpp +63 -0
- esphome/components/homeassistant/switch/homeassistant_switch.h +22 -0
- esphome/components/homeassistant/text_sensor/__init__.py +24 -0
- esphome/components/homeassistant/text_sensor/homeassistant_text_sensor.cpp +30 -0
- esphome/components/homeassistant/text_sensor/homeassistant_text_sensor.h +23 -0
- esphome/components/homeassistant/time/__init__.py +23 -0
- esphome/components/homeassistant/time/homeassistant_time.cpp +22 -0
- esphome/components/homeassistant/time/homeassistant_time.h +22 -0
- esphome/components/honeywell_hih_i2c/__init__.py +3 -0
- esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +97 -0
- esphome/components/honeywell_hih_i2c/honeywell_hih.h +34 -0
- esphome/components/honeywell_hih_i2c/sensor.py +56 -0
- esphome/components/honeywellabp/__init__.py +1 -0
- esphome/components/honeywellabp/honeywellabp.cpp +101 -0
- esphome/components/honeywellabp/honeywellabp.h +45 -0
- esphome/components/honeywellabp/sensor.py +68 -0
- esphome/components/honeywellabp2_i2c/__init__.py +3 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +111 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.h +59 -0
- esphome/components/honeywellabp2_i2c/sensor.py +74 -0
- esphome/components/host/__init__.py +50 -0
- esphome/components/host/const.py +5 -0
- esphome/components/host/core.cpp +77 -0
- esphome/components/host/gpio.cpp +59 -0
- esphome/components/host/gpio.h +38 -0
- esphome/components/host/gpio.py +65 -0
- esphome/components/host/helpers.cpp +57 -0
- esphome/components/host/preferences.cpp +87 -0
- esphome/components/host/preferences.h +67 -0
- esphome/components/host/time/__init__.py +20 -0
- esphome/components/host/time/host_time.h +15 -0
- esphome/components/hrxl_maxsonar_wr/__init__.py +0 -0
- esphome/components/hrxl_maxsonar_wr/hrxl_maxsonar_wr.cpp +77 -0
- esphome/components/hrxl_maxsonar_wr/hrxl_maxsonar_wr.h +25 -0
- esphome/components/hrxl_maxsonar_wr/sensor.py +29 -0
- esphome/components/hte501/__init__.py +0 -0
- esphome/components/hte501/hte501.cpp +71 -0
- esphome/components/hte501/hte501.h +29 -0
- esphome/components/hte501/sensor.py +58 -0
- esphome/components/http_request/__init__.py +339 -0
- esphome/components/http_request/http_request.cpp +46 -0
- esphome/components/http_request/http_request.h +306 -0
- esphome/components/http_request/http_request_arduino.cpp +183 -0
- esphome/components/http_request/http_request_arduino.h +42 -0
- esphome/components/http_request/http_request_host.cpp +145 -0
- esphome/components/http_request/http_request_host.h +33 -0
- esphome/components/http_request/http_request_idf.cpp +251 -0
- esphome/components/http_request/http_request_idf.h +54 -0
- esphome/components/http_request/httplib.h +9695 -0
- esphome/components/http_request/ota/__init__.py +97 -0
- esphome/components/http_request/ota/automation.h +42 -0
- esphome/components/http_request/ota/ota_http_request.cpp +268 -0
- esphome/components/http_request/ota/ota_http_request.h +61 -0
- esphome/components/http_request/update/__init__.py +43 -0
- esphome/components/http_request/update/http_request_update.cpp +205 -0
- esphome/components/http_request/update/http_request_update.h +44 -0
- esphome/components/htu21d/__init__.py +0 -0
- esphome/components/htu21d/htu21d.cpp +149 -0
- esphome/components/htu21d/htu21d.h +63 -0
- esphome/components/htu21d/sensor.py +121 -0
- esphome/components/htu31d/__init__.py +1 -0
- esphome/components/htu31d/htu31d.cpp +269 -0
- esphome/components/htu31d/htu31d.h +33 -0
- esphome/components/htu31d/sensor.py +56 -0
- esphome/components/hub75/__init__.py +6 -0
- esphome/components/hub75/boards/__init__.py +80 -0
- esphome/components/hub75/boards/adafruit.py +23 -0
- esphome/components/hub75/boards/apollo.py +41 -0
- esphome/components/hub75/boards/huidu.py +22 -0
- esphome/components/hub75/boards/trinity.py +24 -0
- esphome/components/hub75/display.py +578 -0
- esphome/components/hub75/hub75.cpp +192 -0
- esphome/components/hub75/hub75_component.h +55 -0
- esphome/components/hx711/__init__.py +0 -0
- esphome/components/hx711/hx711.cpp +82 -0
- esphome/components/hx711/hx711.h +38 -0
- esphome/components/hx711/sensor.py +45 -0
- esphome/components/hydreon_rgxx/__init__.py +12 -0
- esphome/components/hydreon_rgxx/binary_sensor.py +49 -0
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +290 -0
- esphome/components/hydreon_rgxx/hydreon_rgxx.h +98 -0
- esphome/components/hydreon_rgxx/sensor.py +156 -0
- esphome/components/hyt271/__init__.py +1 -0
- esphome/components/hyt271/hyt271.cpp +52 -0
- esphome/components/hyt271/hyt271.h +27 -0
- esphome/components/hyt271/sensor.py +56 -0
- esphome/components/i2c/__init__.py +336 -0
- esphome/components/i2c/i2c.cpp +122 -0
- esphome/components/i2c/i2c.h +307 -0
- esphome/components/i2c/i2c_bus.h +147 -0
- esphome/components/i2c/i2c_bus_arduino.cpp +264 -0
- esphome/components/i2c/i2c_bus_arduino.h +51 -0
- esphome/components/i2c/i2c_bus_esp_idf.cpp +311 -0
- esphome/components/i2c/i2c_bus_esp_idf.h +62 -0
- esphome/components/i2c/i2c_bus_zephyr.cpp +134 -0
- esphome/components/i2c/i2c_bus_zephyr.h +38 -0
- esphome/components/i2c_device/__init__.py +26 -0
- esphome/components/i2c_device/i2c_device.cpp +17 -0
- esphome/components/i2c_device/i2c_device.h +17 -0
- esphome/components/i2s_audio/__init__.py +284 -0
- esphome/components/i2s_audio/i2s_audio.cpp +27 -0
- esphome/components/i2s_audio/i2s_audio.h +115 -0
- esphome/components/i2s_audio/media_player/__init__.py +120 -0
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +257 -0
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.h +87 -0
- esphome/components/i2s_audio/microphone/__init__.py +146 -0
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +547 -0
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +92 -0
- esphome/components/i2s_audio/speaker/__init__.py +199 -0
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +728 -0
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +143 -0
- esphome/components/iaqcore/__init__.py +0 -0
- esphome/components/iaqcore/iaqcore.cpp +99 -0
- esphome/components/iaqcore/iaqcore.h +27 -0
- esphome/components/iaqcore/sensor.py +57 -0
- esphome/components/ili9341/__init__.py +0 -0
- esphome/components/ili9341/display.py +5 -0
- esphome/components/ili9xxx/__init__.py +0 -0
- esphome/components/ili9xxx/display.py +313 -0
- esphome/components/ili9xxx/ili9xxx_defines.h +100 -0
- esphome/components/ili9xxx/ili9xxx_display.cpp +463 -0
- esphome/components/ili9xxx/ili9xxx_display.h +287 -0
- esphome/components/ili9xxx/ili9xxx_init.h +482 -0
- esphome/components/image/__init__.py +760 -0
- esphome/components/image/image.cpp +251 -0
- esphome/components/image/image.h +65 -0
- esphome/components/improv_base/__init__.py +45 -0
- esphome/components/improv_base/improv_base.cpp +51 -0
- esphome/components/improv_base/improv_base.h +23 -0
- esphome/components/improv_serial/__init__.py +45 -0
- esphome/components/improv_serial/improv_serial_component.cpp +315 -0
- esphome/components/improv_serial/improv_serial_component.h +104 -0
- esphome/components/ina219/__init__.py +0 -0
- esphome/components/ina219/ina219.cpp +202 -0
- esphome/components/ina219/ina219.h +40 -0
- esphome/components/ina219/sensor.py +96 -0
- esphome/components/ina226/__init__.py +1 -0
- esphome/components/ina226/ina226.cpp +167 -0
- esphome/components/ina226/ina226.h +78 -0
- esphome/components/ina226/sensor.py +147 -0
- esphome/components/ina260/__init__.py +0 -0
- esphome/components/ina260/ina260.cpp +126 -0
- esphome/components/ina260/ina260.h +37 -0
- esphome/components/ina260/sensor.py +71 -0
- esphome/components/ina2xx_base/__init__.py +257 -0
- esphome/components/ina2xx_base/ina2xx_base.cpp +611 -0
- esphome/components/ina2xx_base/ina2xx_base.h +255 -0
- esphome/components/ina2xx_i2c/__init__.py +0 -0
- esphome/components/ina2xx_i2c/ina2xx_i2c.cpp +39 -0
- esphome/components/ina2xx_i2c/ina2xx_i2c.h +21 -0
- esphome/components/ina2xx_i2c/sensor.py +34 -0
- esphome/components/ina2xx_spi/__init__.py +0 -0
- esphome/components/ina2xx_spi/ina2xx_spi.cpp +38 -0
- esphome/components/ina2xx_spi/ina2xx_spi.h +22 -0
- esphome/components/ina2xx_spi/sensor.py +33 -0
- esphome/components/ina3221/__init__.py +0 -0
- esphome/components/ina3221/ina3221.cpp +133 -0
- esphome/components/ina3221/ina3221.h +40 -0
- esphome/components/ina3221/sensor.py +99 -0
- esphome/components/inkbird_ibsth1_mini/__init__.py +0 -0
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.cpp +110 -0
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +35 -0
- esphome/components/inkbird_ibsth1_mini/sensor.py +83 -0
- esphome/components/inkplate/__init__.py +1 -0
- esphome/components/inkplate/const.py +105 -0
- esphome/components/inkplate/display.py +246 -0
- esphome/components/inkplate/inkplate.cpp +805 -0
- esphome/components/inkplate/inkplate.h +214 -0
- esphome/components/inkplate6/__init__.py +0 -0
- esphome/components/inkplate6/display.py +5 -0
- esphome/components/integration/__init__.py +1 -0
- esphome/components/integration/integration_sensor.cpp +51 -0
- esphome/components/integration/integration_sensor.h +85 -0
- esphome/components/integration/sensor.py +115 -0
- esphome/components/internal_temperature/__init__.py +1 -0
- esphome/components/internal_temperature/internal_temperature.cpp +109 -0
- esphome/components/internal_temperature/internal_temperature.h +18 -0
- esphome/components/internal_temperature/sensor.py +34 -0
- esphome/components/interval/__init__.py +32 -0
- esphome/components/interval/interval.h +28 -0
- esphome/components/jsn_sr04t/__init__.py +1 -0
- esphome/components/jsn_sr04t/jsn_sr04t.cpp +64 -0
- esphome/components/jsn_sr04t/jsn_sr04t.h +34 -0
- esphome/components/jsn_sr04t/sensor.py +57 -0
- esphome/components/json/__init__.py +17 -0
- esphome/components/json/json_util.cpp +75 -0
- esphome/components/json/json_util.h +86 -0
- esphome/components/kalman_combinator/__init__.py +0 -0
- esphome/components/kalman_combinator/sensor.py +6 -0
- esphome/components/kamstrup_kmp/__init__.py +0 -0
- esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +301 -0
- esphome/components/kamstrup_kmp/kamstrup_kmp.h +131 -0
- esphome/components/kamstrup_kmp/sensor.py +132 -0
- esphome/components/key_collector/__init__.py +131 -0
- esphome/components/key_collector/key_collector.cpp +107 -0
- esphome/components/key_collector/key_collector.h +63 -0
- esphome/components/key_provider/__init__.py +6 -0
- esphome/components/key_provider/key_provider.cpp +13 -0
- esphome/components/key_provider/key_provider.h +21 -0
- esphome/components/kmeteriso/__init__.py +0 -0
- esphome/components/kmeteriso/kmeteriso.cpp +80 -0
- esphome/components/kmeteriso/kmeteriso.h +34 -0
- esphome/components/kmeteriso/sensor.py +55 -0
- esphome/components/kuntze/__init__.py +0 -0
- esphome/components/kuntze/kuntze.cpp +94 -0
- esphome/components/kuntze/kuntze.h +42 -0
- esphome/components/kuntze/sensor.py +123 -0
- esphome/components/lc709203f/__init__.py +1 -0
- esphome/components/lc709203f/lc709203f.cpp +284 -0
- esphome/components/lc709203f/lc709203f.h +54 -0
- esphome/components/lc709203f/sensor.py +93 -0
- esphome/components/lcd_base/__init__.py +59 -0
- esphome/components/lcd_base/lcd_display.cpp +177 -0
- esphome/components/lcd_base/lcd_display.h +66 -0
- esphome/components/lcd_gpio/__init__.py +0 -0
- esphome/components/lcd_gpio/display.py +62 -0
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +67 -0
- esphome/components/lcd_gpio/gpio_lcd_display.h +55 -0
- esphome/components/lcd_menu/__init__.py +69 -0
- esphome/components/lcd_menu/lcd_menu.cpp +76 -0
- esphome/components/lcd_menu/lcd_menu.h +45 -0
- esphome/components/lcd_pcf8574/__init__.py +0 -0
- esphome/components/lcd_pcf8574/display.py +32 -0
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +60 -0
- esphome/components/lcd_pcf8574/pcf8574_display.h +36 -0
- esphome/components/ld2410/__init__.py +107 -0
- esphome/components/ld2410/automation.h +20 -0
- esphome/components/ld2410/binary_sensor.py +60 -0
- esphome/components/ld2410/button/__init__.py +58 -0
- esphome/components/ld2410/button/factory_reset_button.cpp +7 -0
- esphome/components/ld2410/button/factory_reset_button.h +16 -0
- esphome/components/ld2410/button/query_button.cpp +7 -0
- esphome/components/ld2410/button/query_button.h +16 -0
- esphome/components/ld2410/button/restart_button.cpp +7 -0
- esphome/components/ld2410/button/restart_button.h +16 -0
- esphome/components/ld2410/ld2410.cpp +784 -0
- esphome/components/ld2410/ld2410.h +135 -0
- esphome/components/ld2410/number/__init__.py +129 -0
- esphome/components/ld2410/number/gate_threshold_number.cpp +12 -0
- esphome/components/ld2410/number/gate_threshold_number.h +17 -0
- esphome/components/ld2410/number/light_threshold_number.cpp +10 -0
- esphome/components/ld2410/number/light_threshold_number.h +16 -0
- esphome/components/ld2410/number/max_distance_timeout_number.cpp +10 -0
- esphome/components/ld2410/number/max_distance_timeout_number.h +16 -0
- esphome/components/ld2410/select/__init__.py +82 -0
- esphome/components/ld2410/select/baud_rate_select.cpp +10 -0
- esphome/components/ld2410/select/baud_rate_select.h +16 -0
- esphome/components/ld2410/select/distance_resolution_select.cpp +10 -0
- esphome/components/ld2410/select/distance_resolution_select.h +16 -0
- esphome/components/ld2410/select/light_out_control_select.cpp +10 -0
- esphome/components/ld2410/select/light_out_control_select.h +16 -0
- esphome/components/ld2410/sensor.py +183 -0
- esphome/components/ld2410/switch/__init__.py +45 -0
- esphome/components/ld2410/switch/bluetooth_switch.cpp +10 -0
- esphome/components/ld2410/switch/bluetooth_switch.h +16 -0
- esphome/components/ld2410/switch/engineering_mode_switch.cpp +10 -0
- esphome/components/ld2410/switch/engineering_mode_switch.h +16 -0
- esphome/components/ld2410/text_sensor.py +34 -0
- esphome/components/ld2412/__init__.py +46 -0
- esphome/components/ld2412/binary_sensor.py +70 -0
- esphome/components/ld2412/button/__init__.py +74 -0
- esphome/components/ld2412/button/factory_reset_button.cpp +7 -0
- esphome/components/ld2412/button/factory_reset_button.h +16 -0
- esphome/components/ld2412/button/query_button.cpp +7 -0
- esphome/components/ld2412/button/query_button.h +16 -0
- esphome/components/ld2412/button/restart_button.cpp +7 -0
- esphome/components/ld2412/button/restart_button.h +16 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +9 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.h +16 -0
- esphome/components/ld2412/ld2412.cpp +857 -0
- esphome/components/ld2412/ld2412.h +139 -0
- esphome/components/ld2412/number/__init__.py +126 -0
- esphome/components/ld2412/number/gate_threshold_number.cpp +12 -0
- esphome/components/ld2412/number/gate_threshold_number.h +17 -0
- esphome/components/ld2412/number/light_threshold_number.cpp +10 -0
- esphome/components/ld2412/number/light_threshold_number.h +16 -0
- esphome/components/ld2412/number/max_distance_timeout_number.cpp +10 -0
- esphome/components/ld2412/number/max_distance_timeout_number.h +16 -0
- esphome/components/ld2412/select/__init__.py +82 -0
- esphome/components/ld2412/select/baud_rate_select.cpp +10 -0
- esphome/components/ld2412/select/baud_rate_select.h +16 -0
- esphome/components/ld2412/select/distance_resolution_select.cpp +10 -0
- esphome/components/ld2412/select/distance_resolution_select.h +16 -0
- esphome/components/ld2412/select/light_out_control_select.cpp +10 -0
- esphome/components/ld2412/select/light_out_control_select.h +16 -0
- esphome/components/ld2412/sensor.py +184 -0
- esphome/components/ld2412/switch/__init__.py +45 -0
- esphome/components/ld2412/switch/bluetooth_switch.cpp +10 -0
- esphome/components/ld2412/switch/bluetooth_switch.h +16 -0
- esphome/components/ld2412/switch/engineering_mode_switch.cpp +10 -0
- esphome/components/ld2412/switch/engineering_mode_switch.h +16 -0
- esphome/components/ld2412/text_sensor.py +34 -0
- esphome/components/ld2420/__init__.py +39 -0
- esphome/components/ld2420/binary_sensor/__init__.py +33 -0
- esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.cpp +14 -0
- esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.h +23 -0
- esphome/components/ld2420/button/__init__.py +70 -0
- esphome/components/ld2420/button/reconfig_buttons.cpp +14 -0
- esphome/components/ld2420/button/reconfig_buttons.h +40 -0
- esphome/components/ld2420/ld2420.cpp +900 -0
- esphome/components/ld2420/ld2420.h +195 -0
- esphome/components/ld2420/number/__init__.py +184 -0
- esphome/components/ld2420/number/gate_config_number.cpp +71 -0
- esphome/components/ld2420/number/gate_config_number.h +76 -0
- esphome/components/ld2420/select/__init__.py +34 -0
- esphome/components/ld2420/select/operating_mode_select.cpp +14 -0
- esphome/components/ld2420/select/operating_mode_select.h +16 -0
- esphome/components/ld2420/sensor/__init__.py +40 -0
- esphome/components/ld2420/sensor/ld2420_sensor.cpp +14 -0
- esphome/components/ld2420/sensor/ld2420_sensor.h +32 -0
- esphome/components/ld2420/text_sensor/__init__.py +34 -0
- esphome/components/ld2420/text_sensor/ld2420_text_sensor.cpp +14 -0
- esphome/components/ld2420/text_sensor/ld2420_text_sensor.h +22 -0
- esphome/components/ld2450/__init__.py +47 -0
- esphome/components/ld2450/binary_sensor.py +50 -0
- esphome/components/ld2450/button/__init__.py +45 -0
- esphome/components/ld2450/button/factory_reset_button.cpp +7 -0
- esphome/components/ld2450/button/factory_reset_button.h +16 -0
- esphome/components/ld2450/button/restart_button.cpp +7 -0
- esphome/components/ld2450/button/restart_button.h +16 -0
- esphome/components/ld2450/ld2450.cpp +941 -0
- esphome/components/ld2450/ld2450.h +195 -0
- esphome/components/ld2450/number/__init__.py +121 -0
- esphome/components/ld2450/number/presence_timeout_number.cpp +10 -0
- esphome/components/ld2450/number/presence_timeout_number.h +16 -0
- esphome/components/ld2450/number/zone_coordinate_number.cpp +12 -0
- esphome/components/ld2450/number/zone_coordinate_number.h +17 -0
- esphome/components/ld2450/select/__init__.py +56 -0
- esphome/components/ld2450/select/baud_rate_select.cpp +10 -0
- esphome/components/ld2450/select/baud_rate_select.h +16 -0
- esphome/components/ld2450/select/zone_type_select.cpp +10 -0
- esphome/components/ld2450/select/zone_type_select.h +16 -0
- esphome/components/ld2450/sensor.py +270 -0
- esphome/components/ld2450/switch/__init__.py +45 -0
- esphome/components/ld2450/switch/bluetooth_switch.cpp +10 -0
- esphome/components/ld2450/switch/bluetooth_switch.h +16 -0
- esphome/components/ld2450/switch/multi_target_switch.cpp +10 -0
- esphome/components/ld2450/switch/multi_target_switch.h +16 -0
- esphome/components/ld2450/text_sensor.py +63 -0
- esphome/components/ld24xx/__init__.py +1 -0
- esphome/components/ld24xx/ld24xx.h +85 -0
- esphome/components/ledc/__init__.py +1 -0
- esphome/components/ledc/ledc_output.cpp +209 -0
- esphome/components/ledc/ledc_output.h +62 -0
- esphome/components/ledc/output.py +84 -0
- esphome/components/libretiny/__init__.py +349 -0
- esphome/components/libretiny/const.py +95 -0
- esphome/components/libretiny/core.cpp +40 -0
- esphome/components/libretiny/core.h +11 -0
- esphome/components/libretiny/generate_components.py +330 -0
- esphome/components/libretiny/gpio.py +207 -0
- esphome/components/libretiny/gpio_arduino.cpp +105 -0
- esphome/components/libretiny/gpio_arduino.h +37 -0
- esphome/components/libretiny/helpers.cpp +39 -0
- esphome/components/libretiny/lt_component.cpp +31 -0
- esphome/components/libretiny/lt_component.h +36 -0
- esphome/components/libretiny/preferences.cpp +196 -0
- esphome/components/libretiny/preferences.h +13 -0
- esphome/components/libretiny/text_sensor.py +31 -0
- esphome/components/libretiny_pwm/__init__.py +1 -0
- esphome/components/libretiny_pwm/libretiny_pwm.cpp +53 -0
- esphome/components/libretiny_pwm/libretiny_pwm.h +55 -0
- esphome/components/libretiny_pwm/output.py +45 -0
- esphome/components/light/__init__.py +288 -0
- esphome/components/light/addressable_light.cpp +114 -0
- esphome/components/light/addressable_light.h +118 -0
- esphome/components/light/addressable_light_effect.h +373 -0
- esphome/components/light/addressable_light_wrapper.h +125 -0
- esphome/components/light/automation.cpp +13 -0
- esphome/components/light/automation.h +226 -0
- esphome/components/light/automation.py +281 -0
- esphome/components/light/base_light_effects.h +237 -0
- esphome/components/light/color_mode.h +212 -0
- esphome/components/light/effects.py +577 -0
- esphome/components/light/esp_color_correction.cpp +25 -0
- esphome/components/light/esp_color_correction.h +75 -0
- esphome/components/light/esp_color_view.h +108 -0
- esphome/components/light/esp_hsv_color.cpp +72 -0
- esphome/components/light/esp_hsv_color.h +34 -0
- esphome/components/light/esp_range_view.cpp +94 -0
- esphome/components/light/esp_range_view.h +78 -0
- esphome/components/light/light_call.cpp +652 -0
- esphome/components/light/light_call.h +260 -0
- esphome/components/light/light_color_values.h +312 -0
- esphome/components/light/light_effect.cpp +34 -0
- esphome/components/light/light_effect.h +57 -0
- esphome/components/light/light_json_schema.cpp +174 -0
- esphome/components/light/light_json_schema.h +26 -0
- esphome/components/light/light_output.cpp +10 -0
- esphome/components/light/light_output.h +31 -0
- esphome/components/light/light_state.cpp +343 -0
- esphome/components/light/light_state.h +333 -0
- esphome/components/light/light_traits.h +47 -0
- esphome/components/light/light_transformer.h +61 -0
- esphome/components/light/transformers.h +120 -0
- esphome/components/light/types.py +87 -0
- esphome/components/lightwaverf/LwRx.cpp +427 -0
- esphome/components/lightwaverf/LwRx.h +142 -0
- esphome/components/lightwaverf/LwTx.cpp +208 -0
- esphome/components/lightwaverf/LwTx.h +94 -0
- esphome/components/lightwaverf/__init__.py +81 -0
- esphome/components/lightwaverf/lightwaverf.cpp +65 -0
- esphome/components/lightwaverf/lightwaverf.h +70 -0
- esphome/components/lilygo_t5_47/__init__.py +3 -0
- esphome/components/lilygo_t5_47/touchscreen/__init__.py +38 -0
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +104 -0
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.h +31 -0
- esphome/components/lm75b/__init__.py +0 -0
- esphome/components/lm75b/lm75b.cpp +39 -0
- esphome/components/lm75b/lm75b.h +19 -0
- esphome/components/lm75b/sensor.py +34 -0
- esphome/components/ln882x/__init__.py +52 -0
- esphome/components/ln882x/boards.py +285 -0
- esphome/components/lock/__init__.py +155 -0
- esphome/components/lock/automation.h +66 -0
- esphome/components/lock/lock.cpp +109 -0
- esphome/components/lock/lock.h +182 -0
- esphome/components/logger/__init__.py +534 -0
- esphome/components/logger/logger.cpp +299 -0
- esphome/components/logger/logger.h +565 -0
- esphome/components/logger/logger_esp32.cpp +167 -0
- esphome/components/logger/logger_esp8266.cpp +54 -0
- esphome/components/logger/logger_host.cpp +22 -0
- esphome/components/logger/logger_libretiny.cpp +70 -0
- esphome/components/logger/logger_rp2040.cpp +48 -0
- esphome/components/logger/logger_zephyr.cpp +96 -0
- esphome/components/logger/select/__init__.py +37 -0
- esphome/components/logger/select/logger_level_select.cpp +19 -0
- esphome/components/logger/select/logger_level_select.h +25 -0
- esphome/components/logger/task_log_buffer.cpp +136 -0
- esphome/components/logger/task_log_buffer.h +67 -0
- 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/__init__.py +0 -0
- esphome/components/ltr390/ltr390.cpp +206 -0
- esphome/components/ltr390/ltr390.h +89 -0
- esphome/components/ltr390/sensor.py +141 -0
- esphome/components/ltr501/__init__.py +1 -0
- esphome/components/ltr501/ltr501.cpp +547 -0
- esphome/components/ltr501/ltr501.h +183 -0
- esphome/components/ltr501/ltr_definitions_501.h +260 -0
- esphome/components/ltr501/sensor.py +274 -0
- esphome/components/ltr_als_ps/__init__.py +1 -0
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +526 -0
- esphome/components/ltr_als_ps/ltr_als_ps.h +183 -0
- esphome/components/ltr_als_ps/ltr_definitions.h +275 -0
- esphome/components/ltr_als_ps/sensor.py +271 -0
- esphome/components/lvgl/__init__.py +454 -0
- esphome/components/lvgl/automation.py +416 -0
- esphome/components/lvgl/binary_sensor/__init__.py +37 -0
- esphome/components/lvgl/defines.py +596 -0
- esphome/components/lvgl/encoders.py +81 -0
- esphome/components/lvgl/gradient.py +61 -0
- esphome/components/lvgl/helpers.py +76 -0
- esphome/components/lvgl/keypads.py +77 -0
- esphome/components/lvgl/layout.py +389 -0
- esphome/components/lvgl/light/__init__.py +31 -0
- esphome/components/lvgl/light/lvgl_light.h +48 -0
- esphome/components/lvgl/lv_validation.py +538 -0
- esphome/components/lvgl/lvcode.py +360 -0
- esphome/components/lvgl/lvgl_esphome.cpp +616 -0
- esphome/components/lvgl/lvgl_esphome.h +412 -0
- esphome/components/lvgl/lvgl_hal.h +21 -0
- esphome/components/lvgl/lvgl_proxy.h +17 -0
- esphome/components/lvgl/number/__init__.py +66 -0
- esphome/components/lvgl/number/lvgl_number.h +52 -0
- esphome/components/lvgl/schemas.py +489 -0
- esphome/components/lvgl/select/__init__.py +30 -0
- esphome/components/lvgl/select/lvgl_select.h +75 -0
- esphome/components/lvgl/sensor/__init__.py +41 -0
- esphome/components/lvgl/styles.py +97 -0
- esphome/components/lvgl/switch/__init__.py +58 -0
- esphome/components/lvgl/switch/lvgl_switch.h +25 -0
- esphome/components/lvgl/text/__init__.py +50 -0
- esphome/components/lvgl/text/lvgl_text.h +36 -0
- esphome/components/lvgl/text_sensor/__init__.py +43 -0
- esphome/components/lvgl/touchscreens.py +44 -0
- esphome/components/lvgl/trigger.py +111 -0
- esphome/components/lvgl/types.py +245 -0
- esphome/components/lvgl/widgets/__init__.py +470 -0
- esphome/components/lvgl/widgets/animimg.py +112 -0
- esphome/components/lvgl/widgets/arc.py +114 -0
- esphome/components/lvgl/widgets/button.py +52 -0
- esphome/components/lvgl/widgets/buttonmatrix.py +279 -0
- esphome/components/lvgl/widgets/canvas.py +422 -0
- esphome/components/lvgl/widgets/checkbox.py +31 -0
- esphome/components/lvgl/widgets/container.py +39 -0
- esphome/components/lvgl/widgets/dropdown.py +93 -0
- esphome/components/lvgl/widgets/img.py +86 -0
- esphome/components/lvgl/widgets/keyboard.py +56 -0
- esphome/components/lvgl/widgets/label.py +41 -0
- esphome/components/lvgl/widgets/led.py +29 -0
- esphome/components/lvgl/widgets/line.py +50 -0
- esphome/components/lvgl/widgets/lv_bar.py +76 -0
- esphome/components/lvgl/widgets/meter.py +324 -0
- esphome/components/lvgl/widgets/msgbox.py +148 -0
- esphome/components/lvgl/widgets/obj.py +19 -0
- esphome/components/lvgl/widgets/page.py +193 -0
- esphome/components/lvgl/widgets/qrcode.py +51 -0
- esphome/components/lvgl/widgets/roller.py +84 -0
- esphome/components/lvgl/widgets/slider.py +63 -0
- esphome/components/lvgl/widgets/spinbox.py +176 -0
- esphome/components/lvgl/widgets/spinner.py +43 -0
- esphome/components/lvgl/widgets/switch.py +20 -0
- esphome/components/lvgl/widgets/tabview.py +121 -0
- esphome/components/lvgl/widgets/textarea.py +65 -0
- esphome/components/lvgl/widgets/tileview.py +131 -0
- esphome/components/m5stack_8angle/__init__.py +32 -0
- esphome/components/m5stack_8angle/binary_sensor/__init__.py +29 -0
- esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.cpp +17 -0
- esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.h +19 -0
- esphome/components/m5stack_8angle/light/__init__.py +29 -0
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +45 -0
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.h +37 -0
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +73 -0
- esphome/components/m5stack_8angle/m5stack_8angle.h +34 -0
- esphome/components/m5stack_8angle/sensor/__init__.py +64 -0
- esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.cpp +24 -0
- esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.h +27 -0
- esphome/components/mapping/__init__.py +142 -0
- esphome/components/mapping/mapping.h +69 -0
- esphome/components/matrix_keypad/__init__.py +88 -0
- esphome/components/matrix_keypad/binary_sensor/__init__.py +50 -0
- esphome/components/matrix_keypad/binary_sensor/matrix_keypad_binary_sensor.h +51 -0
- esphome/components/matrix_keypad/matrix_keypad.cpp +116 -0
- esphome/components/matrix_keypad/matrix_keypad.h +53 -0
- esphome/components/max17043/__init__.py +1 -0
- esphome/components/max17043/automation.h +20 -0
- esphome/components/max17043/max17043.cpp +96 -0
- esphome/components/max17043/max17043.h +29 -0
- esphome/components/max17043/sensor.py +77 -0
- esphome/components/max31855/__init__.py +0 -0
- esphome/components/max31855/max31855.cpp +106 -0
- esphome/components/max31855/max31855.h +31 -0
- esphome/components/max31855/sensor.py +44 -0
- esphome/components/max31856/__init__.py +0 -0
- esphome/components/max31856/max31856.cpp +203 -0
- esphome/components/max31856/max31856.h +103 -0
- esphome/components/max31856/sensor.py +66 -0
- esphome/components/max31865/__init__.py +0 -0
- esphome/components/max31865/max31865.cpp +233 -0
- esphome/components/max31865/max31865.h +58 -0
- esphome/components/max31865/sensor.py +62 -0
- esphome/components/max44009/__init__.py +0 -0
- esphome/components/max44009/max44009.cpp +143 -0
- esphome/components/max44009/max44009.h +37 -0
- esphome/components/max44009/sensor.py +53 -0
- esphome/components/max6675/__init__.py +0 -0
- esphome/components/max6675/max6675.cpp +49 -0
- esphome/components/max6675/max6675.h +26 -0
- esphome/components/max6675/sensor.py +31 -0
- esphome/components/max6956/__init__.py +142 -0
- esphome/components/max6956/automation.h +40 -0
- esphome/components/max6956/max6956.cpp +171 -0
- esphome/components/max6956/max6956.h +96 -0
- esphome/components/max6956/output/__init__.py +29 -0
- esphome/components/max6956/output/max6956_led_output.cpp +26 -0
- esphome/components/max6956/output/max6956_led_output.h +28 -0
- esphome/components/max7219/__init__.py +0 -0
- esphome/components/max7219/display.py +43 -0
- esphome/components/max7219/max7219.cpp +244 -0
- esphome/components/max7219/max7219.h +65 -0
- esphome/components/max7219digit/__init__.py +0 -0
- esphome/components/max7219digit/automation.h +52 -0
- esphome/components/max7219digit/display.py +193 -0
- esphome/components/max7219digit/max7219digit.cpp +353 -0
- esphome/components/max7219digit/max7219digit.h +124 -0
- esphome/components/max7219digit/max7219font.h +270 -0
- esphome/components/max9611/__init__.py +1 -0
- esphome/components/max9611/max9611.cpp +95 -0
- esphome/components/max9611/max9611.h +61 -0
- esphome/components/max9611/sensor.py +92 -0
- esphome/components/mcp23008/__init__.py +28 -0
- esphome/components/mcp23008/mcp23008.cpp +42 -0
- esphome/components/mcp23008/mcp23008.h +24 -0
- esphome/components/mcp23016/__init__.py +73 -0
- esphome/components/mcp23016/mcp23016.cpp +109 -0
- esphome/components/mcp23016/mcp23016.h +80 -0
- esphome/components/mcp23017/__init__.py +28 -0
- esphome/components/mcp23017/mcp23017.cpp +43 -0
- esphome/components/mcp23017/mcp23017.h +24 -0
- esphome/components/mcp23s08/__init__.py +32 -0
- esphome/components/mcp23s08/mcp23s08.cpp +58 -0
- esphome/components/mcp23s08/mcp23s08.h +30 -0
- esphome/components/mcp23s17/__init__.py +32 -0
- esphome/components/mcp23s17/mcp23s17.cpp +68 -0
- esphome/components/mcp23s17/mcp23s17.h +29 -0
- esphome/components/mcp23x08_base/__init__.py +10 -0
- esphome/components/mcp23x08_base/mcp23x08_base.cpp +86 -0
- esphome/components/mcp23x08_base/mcp23x08_base.h +44 -0
- esphome/components/mcp23x17_base/__init__.py +10 -0
- esphome/components/mcp23x17_base/mcp23x17_base.cpp +102 -0
- esphome/components/mcp23x17_base/mcp23x17_base.h +57 -0
- esphome/components/mcp23xxx_base/__init__.py +92 -0
- esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +27 -0
- esphome/components/mcp23xxx_base/mcp23xxx_base.h +58 -0
- esphome/components/mcp2515/__init__.py +0 -0
- esphome/components/mcp2515/canbus.py +50 -0
- esphome/components/mcp2515/mcp2515.cpp +710 -0
- esphome/components/mcp2515/mcp2515.h +112 -0
- esphome/components/mcp2515/mcp2515_defs.h +375 -0
- esphome/components/mcp3008/__init__.py +25 -0
- esphome/components/mcp3008/mcp3008.cpp +40 -0
- esphome/components/mcp3008/mcp3008.h +22 -0
- esphome/components/mcp3008/sensor/__init__.py +53 -0
- esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +29 -0
- esphome/components/mcp3008/sensor/mcp3008_sensor.h +31 -0
- esphome/components/mcp3204/__init__.py +26 -0
- esphome/components/mcp3204/mcp3204.cpp +37 -0
- esphome/components/mcp3204/mcp3204.h +28 -0
- esphome/components/mcp3204/sensor/__init__.py +39 -0
- esphome/components/mcp3204/sensor/mcp3204_sensor.cpp +22 -0
- esphome/components/mcp3204/sensor/mcp3204_sensor.h +31 -0
- esphome/components/mcp3221/__init__.py +1 -0
- esphome/components/mcp3221/mcp3221_sensor.cpp +31 -0
- esphome/components/mcp3221/mcp3221_sensor.h +28 -0
- esphome/components/mcp3221/sensor.py +49 -0
- esphome/components/mcp4461/__init__.py +42 -0
- esphome/components/mcp4461/mcp4461.cpp +631 -0
- esphome/components/mcp4461/mcp4461.h +172 -0
- esphome/components/mcp4461/output/__init__.py +61 -0
- esphome/components/mcp4461/output/mcp4461_output.cpp +73 -0
- esphome/components/mcp4461/output/mcp4461_output.h +49 -0
- esphome/components/mcp4725/__init__.py +0 -0
- esphome/components/mcp4725/mcp4725.cpp +34 -0
- esphome/components/mcp4725/mcp4725.h +23 -0
- esphome/components/mcp4725/output.py +26 -0
- esphome/components/mcp4728/__init__.py +30 -0
- esphome/components/mcp4728/mcp4728.cpp +113 -0
- esphome/components/mcp4728/mcp4728.h +67 -0
- esphome/components/mcp4728/output/__init__.py +63 -0
- esphome/components/mcp4728/output/mcp4728_output.cpp +17 -0
- esphome/components/mcp4728/output/mcp4728_output.h +32 -0
- esphome/components/mcp47a1/__init__.py +0 -0
- esphome/components/mcp47a1/mcp47a1.cpp +21 -0
- esphome/components/mcp47a1/mcp47a1.h +17 -0
- esphome/components/mcp47a1/output.py +27 -0
- esphome/components/mcp9600/__init__.py +0 -0
- esphome/components/mcp9600/mcp9600.cpp +113 -0
- esphome/components/mcp9600/mcp9600.h +49 -0
- esphome/components/mcp9600/sensor.py +81 -0
- esphome/components/mcp9808/__init__.py +0 -0
- esphome/components/mcp9808/mcp9808.cpp +79 -0
- esphome/components/mcp9808/mcp9808.h +20 -0
- esphome/components/mcp9808/sensor.py +34 -0
- esphome/components/md5/__init__.py +7 -0
- esphome/components/md5/md5.cpp +44 -0
- esphome/components/md5/md5.h +55 -0
- esphome/components/mdns/__init__.py +240 -0
- esphome/components/mdns/mdns_component.cpp +194 -0
- esphome/components/mdns/mdns_component.h +118 -0
- esphome/components/mdns/mdns_esp32.cpp +54 -0
- esphome/components/mdns/mdns_esp8266.cpp +50 -0
- esphome/components/mdns/mdns_host.cpp +28 -0
- esphome/components/mdns/mdns_libretiny.cpp +44 -0
- esphome/components/mdns/mdns_rp2040.cpp +49 -0
- esphome/components/media_player/__init__.py +305 -0
- esphome/components/media_player/automation.h +109 -0
- esphome/components/media_player/media_player.cpp +160 -0
- esphome/components/media_player/media_player.h +164 -0
- esphome/components/mhz19/__init__.py +0 -0
- esphome/components/mhz19/mhz19.cpp +119 -0
- esphome/components/mhz19/mhz19.h +70 -0
- esphome/components/mhz19/sensor.py +100 -0
- esphome/components/micro_wake_word/__init__.py +567 -0
- esphome/components/micro_wake_word/automation.h +54 -0
- esphome/components/micro_wake_word/micro_wake_word.cpp +473 -0
- esphome/components/micro_wake_word/micro_wake_word.h +129 -0
- esphome/components/micro_wake_word/preprocessor_settings.h +37 -0
- esphome/components/micro_wake_word/streaming_model.cpp +316 -0
- esphome/components/micro_wake_word/streaming_model.h +156 -0
- esphome/components/micronova/__init__.py +81 -0
- esphome/components/micronova/button/__init__.py +42 -0
- esphome/components/micronova/button/micronova_button.cpp +10 -0
- esphome/components/micronova/button/micronova_button.h +24 -0
- esphome/components/micronova/micronova.cpp +156 -0
- esphome/components/micronova/micronova.h +101 -0
- esphome/components/micronova/number/__init__.py +80 -0
- esphome/components/micronova/number/micronova_number.cpp +29 -0
- esphome/components/micronova/number/micronova_number.h +28 -0
- esphome/components/micronova/sensor/__init__.py +148 -0
- esphome/components/micronova/sensor/micronova_sensor.cpp +23 -0
- esphome/components/micronova/sensor/micronova_sensor.h +33 -0
- esphome/components/micronova/switch/__init__.py +54 -0
- esphome/components/micronova/switch/micronova_switch.cpp +38 -0
- esphome/components/micronova/switch/micronova_switch.h +33 -0
- esphome/components/micronova/text_sensor/__init__.py +41 -0
- esphome/components/micronova/text_sensor/micronova_text_sensor.cpp +14 -0
- esphome/components/micronova/text_sensor/micronova_text_sensor.h +33 -0
- esphome/components/microphone/__init__.py +219 -0
- esphome/components/microphone/automation.h +44 -0
- esphome/components/microphone/microphone.cpp +19 -0
- esphome/components/microphone/microphone.h +45 -0
- esphome/components/microphone/microphone_source.cpp +95 -0
- esphome/components/microphone/microphone_source.h +80 -0
- esphome/components/mics_4514/__init__.py +0 -0
- esphome/components/mics_4514/mics_4514.cpp +130 -0
- esphome/components/mics_4514/mics_4514.h +34 -0
- esphome/components/mics_4514/sensor.py +67 -0
- esphome/components/midea/__init__.py +0 -0
- esphome/components/midea/ac_adapter.cpp +179 -0
- esphome/components/midea/ac_adapter.h +51 -0
- esphome/components/midea/ac_automations.h +70 -0
- esphome/components/midea/air_conditioner.cpp +179 -0
- esphome/components/midea/air_conditioner.h +69 -0
- esphome/components/midea/appliance_base.h +102 -0
- esphome/components/midea/climate.py +293 -0
- esphome/components/midea/ir_transmitter.h +91 -0
- esphome/components/midea_ac/__init__.py +0 -0
- esphome/components/midea_ac/climate.py +3 -0
- esphome/components/midea_ir/__init__.py +0 -0
- esphome/components/midea_ir/climate.py +22 -0
- esphome/components/midea_ir/midea_data.h +92 -0
- esphome/components/midea_ir/midea_ir.cpp +202 -0
- esphome/components/midea_ir/midea_ir.h +47 -0
- esphome/components/mipi/__init__.py +492 -0
- esphome/components/mipi_dsi/__init__.py +5 -0
- esphome/components/mipi_dsi/display.py +233 -0
- esphome/components/mipi_dsi/mipi_dsi.cpp +385 -0
- esphome/components/mipi_dsi/mipi_dsi.h +120 -0
- esphome/components/mipi_dsi/models/__init__.py +0 -0
- esphome/components/mipi_dsi/models/guition.py +104 -0
- esphome/components/mipi_dsi/models/m5stack.py +57 -0
- esphome/components/mipi_dsi/models/waveshare.py +96 -0
- esphome/components/mipi_rgb/__init__.py +2 -0
- esphome/components/mipi_rgb/display.py +320 -0
- esphome/components/mipi_rgb/mipi_rgb.cpp +382 -0
- esphome/components/mipi_rgb/mipi_rgb.h +127 -0
- esphome/components/mipi_rgb/models/guition.py +25 -0
- esphome/components/mipi_rgb/models/lilygo.py +226 -0
- esphome/components/mipi_rgb/models/rpi.py +9 -0
- esphome/components/mipi_rgb/models/st7701s.py +215 -0
- esphome/components/mipi_rgb/models/waveshare.py +146 -0
- esphome/components/mipi_spi/__init__.py +6 -0
- esphome/components/mipi_spi/display.py +448 -0
- esphome/components/mipi_spi/mipi_spi.cpp +6 -0
- esphome/components/mipi_spi/mipi_spi.h +625 -0
- esphome/components/mipi_spi/models/__init__.py +0 -0
- esphome/components/mipi_spi/models/adafruit.py +30 -0
- esphome/components/mipi_spi/models/amoled.py +110 -0
- esphome/components/mipi_spi/models/cyd.py +10 -0
- esphome/components/mipi_spi/models/ili.py +762 -0
- esphome/components/mipi_spi/models/jc.py +592 -0
- esphome/components/mipi_spi/models/lanbon.py +15 -0
- esphome/components/mipi_spi/models/lilygo.py +60 -0
- esphome/components/mipi_spi/models/waveshare.py +164 -0
- esphome/components/mitsubishi/__init__.py +0 -0
- esphome/components/mitsubishi/climate.py +68 -0
- esphome/components/mitsubishi/mitsubishi.cpp +398 -0
- esphome/components/mitsubishi/mitsubishi.h +83 -0
- esphome/components/mixer/__init__.py +0 -0
- esphome/components/mixer/speaker/__init__.py +171 -0
- esphome/components/mixer/speaker/automation.h +19 -0
- esphome/components/mixer/speaker/mixer_speaker.cpp +624 -0
- esphome/components/mixer/speaker/mixer_speaker.h +207 -0
- esphome/components/mlx90393/__init__.py +1 -0
- esphome/components/mlx90393/sensor.py +162 -0
- esphome/components/mlx90393/sensor_mlx90393.cpp +276 -0
- esphome/components/mlx90393/sensor_mlx90393.h +81 -0
- esphome/components/mlx90614/__init__.py +0 -0
- esphome/components/mlx90614/mlx90614.cpp +107 -0
- esphome/components/mlx90614/mlx90614.h +33 -0
- esphome/components/mlx90614/sensor.py +63 -0
- esphome/components/mmc5603/__init__.py +1 -0
- esphome/components/mmc5603/mmc5603.cpp +161 -0
- esphome/components/mmc5603/mmc5603.h +43 -0
- esphome/components/mmc5603/sensor.py +90 -0
- esphome/components/mmc5983/__init__.py +1 -0
- esphome/components/mmc5983/mmc5983.cpp +139 -0
- esphome/components/mmc5983/mmc5983.h +28 -0
- esphome/components/mmc5983/sensor.py +55 -0
- esphome/components/modbus/__init__.py +100 -0
- esphome/components/modbus/modbus.cpp +284 -0
- esphome/components/modbus/modbus.h +89 -0
- esphome/components/modbus/modbus_definitions.h +86 -0
- esphome/components/modbus_controller/__init__.py +398 -0
- esphome/components/modbus_controller/automation.h +35 -0
- esphome/components/modbus_controller/binary_sensor/__init__.py +60 -0
- esphome/components/modbus_controller/binary_sensor/modbus_binarysensor.cpp +38 -0
- esphome/components/modbus_controller/binary_sensor/modbus_binarysensor.h +44 -0
- esphome/components/modbus_controller/const.py +24 -0
- esphome/components/modbus_controller/modbus_controller.cpp +830 -0
- esphome/components/modbus_controller/modbus_controller.h +599 -0
- esphome/components/modbus_controller/number/__init__.py +125 -0
- esphome/components/modbus_controller/number/modbus_number.cpp +86 -0
- esphome/components/modbus_controller/number/modbus_number.h +50 -0
- esphome/components/modbus_controller/output/__init__.py +105 -0
- esphome/components/modbus_controller/output/modbus_output.cpp +115 -0
- esphome/components/modbus_controller/output/modbus_output.h +76 -0
- esphome/components/modbus_controller/select/__init__.py +143 -0
- esphome/components/modbus_controller/select/modbus_select.cpp +90 -0
- esphome/components/modbus_controller/select/modbus_select.h +53 -0
- esphome/components/modbus_controller/sensor/__init__.py +68 -0
- esphome/components/modbus_controller/sensor/modbus_sensor.cpp +31 -0
- esphome/components/modbus_controller/sensor/modbus_sensor.h +37 -0
- esphome/components/modbus_controller/switch/__init__.py +81 -0
- esphome/components/modbus_controller/switch/modbus_switch.cpp +108 -0
- esphome/components/modbus_controller/switch/modbus_switch.h +53 -0
- esphome/components/modbus_controller/text_sensor/__init__.py +84 -0
- esphome/components/modbus_controller/text_sensor/modbus_textsensor.cpp +52 -0
- esphome/components/modbus_controller/text_sensor/modbus_textsensor.h +43 -0
- esphome/components/monochromatic/__init__.py +0 -0
- esphome/components/monochromatic/light.py +24 -0
- esphome/components/monochromatic/monochromatic_light_output.h +29 -0
- esphome/components/mopeka_ble/__init__.py +30 -0
- esphome/components/mopeka_ble/mopeka_ble.cpp +91 -0
- esphome/components/mopeka_ble/mopeka_ble.h +27 -0
- esphome/components/mopeka_pro_check/__init__.py +1 -0
- esphome/components/mopeka_pro_check/mopeka_pro_check.cpp +159 -0
- esphome/components/mopeka_pro_check/mopeka_pro_check.h +71 -0
- esphome/components/mopeka_pro_check/sensor.py +174 -0
- esphome/components/mopeka_std_check/__init__.py +1 -0
- esphome/components/mopeka_std_check/mopeka_std_check.cpp +227 -0
- esphome/components/mopeka_std_check/mopeka_std_check.h +80 -0
- esphome/components/mopeka_std_check/sensor.py +138 -0
- esphome/components/mpl3115a2/__init__.py +0 -0
- esphome/components/mpl3115a2/mpl3115a2.cpp +98 -0
- esphome/components/mpl3115a2/mpl3115a2.h +106 -0
- esphome/components/mpl3115a2/sensor.py +75 -0
- esphome/components/mpr121/__init__.py +128 -0
- esphome/components/mpr121/binary_sensor/__init__.py +38 -0
- esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.cpp +20 -0
- esphome/components/mpr121/binary_sensor/mpr121_binary_sensor.h +26 -0
- esphome/components/mpr121/mpr121.cpp +163 -0
- esphome/components/mpr121/mpr121.h +129 -0
- esphome/components/mpu6050/__init__.py +0 -0
- esphome/components/mpu6050/mpu6050.cpp +146 -0
- esphome/components/mpu6050/mpu6050.h +39 -0
- esphome/components/mpu6050/sensor.py +84 -0
- esphome/components/mpu6886/__init__.py +1 -0
- esphome/components/mpu6886/mpu6886.cpp +152 -0
- esphome/components/mpu6886/mpu6886.h +39 -0
- esphome/components/mpu6886/sensor.py +85 -0
- esphome/components/mqtt/__init__.py +627 -0
- esphome/components/mqtt/custom_mqtt_device.cpp +35 -0
- esphome/components/mqtt/custom_mqtt_device.h +220 -0
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +130 -0
- esphome/components/mqtt/mqtt_alarm_control_panel.h +39 -0
- esphome/components/mqtt/mqtt_backend.h +72 -0
- esphome/components/mqtt/mqtt_backend_esp32.cpp +284 -0
- esphome/components/mqtt/mqtt_backend_esp32.h +280 -0
- esphome/components/mqtt/mqtt_backend_esp8266.h +74 -0
- esphome/components/mqtt/mqtt_backend_libretiny.h +74 -0
- esphome/components/mqtt/mqtt_binary_sensor.cpp +64 -0
- esphome/components/mqtt/mqtt_binary_sensor.h +43 -0
- esphome/components/mqtt/mqtt_button.cpp +50 -0
- esphome/components/mqtt/mqtt_button.h +40 -0
- esphome/components/mqtt/mqtt_client.cpp +753 -0
- esphome/components/mqtt/mqtt_client.h +468 -0
- esphome/components/mqtt/mqtt_climate.cpp +467 -0
- esphome/components/mqtt/mqtt_climate.h +56 -0
- esphome/components/mqtt/mqtt_component.cpp +304 -0
- esphome/components/mqtt/mqtt_component.h +211 -0
- esphome/components/mqtt/mqtt_const.h +547 -0
- esphome/components/mqtt/mqtt_cover.cpp +126 -0
- esphome/components/mqtt/mqtt_cover.h +43 -0
- esphome/components/mqtt/mqtt_date.cpp +69 -0
- esphome/components/mqtt/mqtt_date.h +45 -0
- esphome/components/mqtt/mqtt_datetime.cpp +85 -0
- esphome/components/mqtt/mqtt_datetime.h +45 -0
- esphome/components/mqtt/mqtt_event.cpp +61 -0
- esphome/components/mqtt/mqtt_event.h +39 -0
- esphome/components/mqtt/mqtt_fan.cpp +189 -0
- esphome/components/mqtt/mqtt_fan.h +54 -0
- esphome/components/mqtt/mqtt_light.cpp +100 -0
- esphome/components/mqtt/mqtt_light.h +44 -0
- esphome/components/mqtt/mqtt_lock.cpp +65 -0
- esphome/components/mqtt/mqtt_lock.h +41 -0
- esphome/components/mqtt/mqtt_number.cpp +87 -0
- esphome/components/mqtt/mqtt_number.h +46 -0
- esphome/components/mqtt/mqtt_select.cpp +61 -0
- esphome/components/mqtt/mqtt_select.h +46 -0
- esphome/components/mqtt/mqtt_sensor.cpp +93 -0
- esphome/components/mqtt/mqtt_sensor.h +58 -0
- esphome/components/mqtt/mqtt_switch.cpp +64 -0
- esphome/components/mqtt/mqtt_switch.h +41 -0
- esphome/components/mqtt/mqtt_text.cpp +64 -0
- esphome/components/mqtt/mqtt_text.h +46 -0
- esphome/components/mqtt/mqtt_text_sensor.cpp +50 -0
- esphome/components/mqtt/mqtt_text_sensor.h +39 -0
- esphome/components/mqtt/mqtt_time.cpp +69 -0
- esphome/components/mqtt/mqtt_time.h +45 -0
- esphome/components/mqtt/mqtt_update.cpp +63 -0
- esphome/components/mqtt/mqtt_update.h +41 -0
- esphome/components/mqtt/mqtt_valve.cpp +96 -0
- esphome/components/mqtt/mqtt_valve.h +41 -0
- esphome/components/mqtt_subscribe/__init__.py +3 -0
- esphome/components/mqtt_subscribe/sensor/__init__.py +38 -0
- esphome/components/mqtt_subscribe/sensor/mqtt_subscribe_sensor.cpp +38 -0
- esphome/components/mqtt_subscribe/sensor/mqtt_subscribe_sensor.h +33 -0
- esphome/components/mqtt_subscribe/text_sensor/__init__.py +36 -0
- esphome/components/mqtt_subscribe/text_sensor/mqtt_subscribe_text_sensor.cpp +28 -0
- esphome/components/mqtt_subscribe/text_sensor/mqtt_subscribe_text_sensor.h +32 -0
- esphome/components/ms5611/__init__.py +0 -0
- esphome/components/ms5611/ms5611.cpp +130 -0
- esphome/components/ms5611/ms5611.h +31 -0
- esphome/components/ms5611/sensor.py +58 -0
- esphome/components/ms8607/__init__.py +1 -0
- esphome/components/ms8607/ms8607.cpp +443 -0
- esphome/components/ms8607/ms8607.h +108 -0
- esphome/components/ms8607/sensor.py +83 -0
- esphome/components/msa3xx/__init__.py +189 -0
- esphome/components/msa3xx/binary_sensor.py +40 -0
- esphome/components/msa3xx/msa3xx.cpp +419 -0
- esphome/components/msa3xx/msa3xx.h +311 -0
- esphome/components/msa3xx/sensor.py +42 -0
- esphome/components/msa3xx/text_sensor.py +38 -0
- esphome/components/my9231/__init__.py +41 -0
- esphome/components/my9231/my9231.cpp +127 -0
- esphome/components/my9231/my9231.h +64 -0
- esphome/components/my9231/output.py +28 -0
- esphome/components/nau7802/__init__.py +0 -0
- esphome/components/nau7802/nau7802.cpp +320 -0
- esphome/components/nau7802/nau7802.h +119 -0
- esphome/components/nau7802/sensor.py +134 -0
- esphome/components/neopixelbus/__init__.py +0 -0
- esphome/components/neopixelbus/_methods.py +423 -0
- esphome/components/neopixelbus/const.py +42 -0
- esphome/components/neopixelbus/light.py +232 -0
- esphome/components/neopixelbus/neopixelbus_light.h +146 -0
- esphome/components/network/__init__.py +227 -0
- esphome/components/network/ip_address.h +153 -0
- esphome/components/network/util.cpp +114 -0
- esphome/components/network/util.h +20 -0
- esphome/components/nextion/__init__.py +26 -0
- esphome/components/nextion/automation.h +139 -0
- esphome/components/nextion/base_component.py +130 -0
- esphome/components/nextion/binary_sensor/__init__.py +87 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +68 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.h +42 -0
- esphome/components/nextion/display.py +224 -0
- esphome/components/nextion/nextion.cpp +1299 -0
- esphome/components/nextion/nextion.h +1499 -0
- esphome/components/nextion/nextion_base.h +65 -0
- esphome/components/nextion/nextion_commands.cpp +353 -0
- esphome/components/nextion/nextion_component.cpp +114 -0
- esphome/components/nextion/nextion_component.h +84 -0
- esphome/components/nextion/nextion_component_base.h +106 -0
- esphome/components/nextion/nextion_upload.cpp +39 -0
- esphome/components/nextion/nextion_upload_arduino.cpp +360 -0
- esphome/components/nextion/nextion_upload_idf.cpp +340 -0
- esphome/components/nextion/sensor/__init__.py +127 -0
- esphome/components/nextion/sensor/nextion_sensor.cpp +116 -0
- esphome/components/nextion/sensor/nextion_sensor.h +49 -0
- esphome/components/nextion/switch/__init__.py +69 -0
- esphome/components/nextion/switch/nextion_switch.cpp +52 -0
- esphome/components/nextion/switch/nextion_switch.h +34 -0
- esphome/components/nextion/text_sensor/__init__.py +65 -0
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +49 -0
- esphome/components/nextion/text_sensor/nextion_textsensor.h +32 -0
- esphome/components/nfc/__init__.py +13 -0
- esphome/components/nfc/automation.cpp +9 -0
- esphome/components/nfc/automation.h +17 -0
- esphome/components/nfc/binary_sensor/__init__.py +72 -0
- esphome/components/nfc/binary_sensor/nfc_binary_sensor.cpp +114 -0
- esphome/components/nfc/binary_sensor/nfc_binary_sensor.h +38 -0
- esphome/components/nfc/nci_core.h +144 -0
- esphome/components/nfc/nci_message.cpp +166 -0
- esphome/components/nfc/nci_message.h +50 -0
- esphome/components/nfc/ndef_message.cpp +110 -0
- esphome/components/nfc/ndef_message.h +42 -0
- esphome/components/nfc/ndef_record.cpp +65 -0
- esphome/components/nfc/ndef_record.h +57 -0
- esphome/components/nfc/ndef_record_text.cpp +40 -0
- esphome/components/nfc/ndef_record_text.h +43 -0
- esphome/components/nfc/ndef_record_uri.cpp +48 -0
- esphome/components/nfc/ndef_record_uri.h +78 -0
- esphome/components/nfc/nfc.cpp +89 -0
- esphome/components/nfc/nfc.h +84 -0
- esphome/components/nfc/nfc_helpers.cpp +47 -0
- esphome/components/nfc/nfc_helpers.h +17 -0
- esphome/components/nfc/nfc_tag.cpp +9 -0
- esphome/components/nfc/nfc_tag.h +57 -0
- esphome/components/noblex/__init__.py +1 -0
- esphome/components/noblex/climate.py +13 -0
- esphome/components/noblex/noblex.cpp +309 -0
- esphome/components/noblex/noblex.h +47 -0
- esphome/components/npi19/__init__.py +0 -0
- esphome/components/npi19/npi19.cpp +107 -0
- esphome/components/npi19/npi19.h +30 -0
- esphome/components/npi19/sensor.py +52 -0
- esphome/components/nrf52/__init__.py +320 -0
- esphome/components/nrf52/ble_logger.py +60 -0
- esphome/components/nrf52/boards.py +42 -0
- esphome/components/nrf52/const.py +19 -0
- esphome/components/nrf52/dfu.cpp +51 -0
- esphome/components/nrf52/dfu.h +24 -0
- esphome/components/nrf52/gpio.py +82 -0
- esphome/components/nrf52/uicr.cpp +121 -0
- esphome/components/ntc/__init__.py +0 -0
- esphome/components/ntc/ntc.cpp +31 -0
- esphome/components/ntc/ntc.h +29 -0
- esphome/components/ntc/sensor.py +144 -0
- esphome/components/number/__init__.py +434 -0
- esphome/components/number/automation.cpp +54 -0
- esphome/components/number/automation.h +93 -0
- esphome/components/number/number.cpp +45 -0
- esphome/components/number/number.h +55 -0
- esphome/components/number/number_call.cpp +127 -0
- esphome/components/number/number_call.h +46 -0
- esphome/components/number/number_traits.cpp +8 -0
- esphome/components/number/number_traits.h +37 -0
- esphome/components/one_wire/__init__.py +42 -0
- esphome/components/one_wire/one_wire.cpp +48 -0
- esphome/components/one_wire/one_wire.h +47 -0
- esphome/components/one_wire/one_wire_bus.cpp +92 -0
- esphome/components/one_wire/one_wire_bus.h +67 -0
- esphome/components/online_image/__init__.py +240 -0
- esphome/components/online_image/bmp_image.cpp +139 -0
- esphome/components/online_image/bmp_image.h +42 -0
- esphome/components/online_image/image_decoder.cpp +73 -0
- esphome/components/online_image/image_decoder.h +121 -0
- esphome/components/online_image/jpeg_image.cpp +94 -0
- esphome/components/online_image/jpeg_image.h +34 -0
- esphome/components/online_image/online_image.cpp +369 -0
- esphome/components/online_image/online_image.h +245 -0
- esphome/components/online_image/png_image.cpp +105 -0
- esphome/components/online_image/png_image.h +40 -0
- esphome/components/opentherm/__init__.py +149 -0
- esphome/components/opentherm/automation.h +25 -0
- esphome/components/opentherm/binary_sensor/__init__.py +31 -0
- esphome/components/opentherm/const.py +12 -0
- esphome/components/opentherm/generate.py +175 -0
- esphome/components/opentherm/hub.cpp +423 -0
- esphome/components/opentherm/hub.h +179 -0
- esphome/components/opentherm/input.h +18 -0
- esphome/components/opentherm/input.py +52 -0
- esphome/components/opentherm/number/__init__.py +66 -0
- esphome/components/opentherm/number/opentherm_number.cpp +42 -0
- esphome/components/opentherm/number/opentherm_number.h +31 -0
- esphome/components/opentherm/opentherm.cpp +601 -0
- esphome/components/opentherm/opentherm.h +399 -0
- esphome/components/opentherm/opentherm_macros.h +162 -0
- esphome/components/opentherm/output/__init__.py +48 -0
- esphome/components/opentherm/output/opentherm_output.cpp +18 -0
- esphome/components/opentherm/output/opentherm_output.h +33 -0
- esphome/components/opentherm/schema.py +891 -0
- esphome/components/opentherm/sensor/__init__.py +50 -0
- esphome/components/opentherm/switch/__init__.py +42 -0
- esphome/components/opentherm/switch/opentherm_switch.cpp +28 -0
- esphome/components/opentherm/switch/opentherm_switch.h +20 -0
- esphome/components/opentherm/validate.py +36 -0
- esphome/components/openthread/__init__.py +192 -0
- esphome/components/openthread/const.py +12 -0
- esphome/components/openthread/openthread.cpp +281 -0
- esphome/components/openthread/openthread.h +96 -0
- esphome/components/openthread/openthread_esp.cpp +214 -0
- esphome/components/openthread_info/__init__.py +0 -0
- esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
- esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
- esphome/components/openthread_info/text_sensor.py +105 -0
- 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 +31 -0
- esphome/components/ota/__init__.py +139 -0
- esphome/components/ota/automation.h +78 -0
- esphome/components/ota/ota_backend.cpp +20 -0
- esphome/components/ota/ota_backend.h +123 -0
- esphome/components/ota/ota_backend_arduino_esp8266.cpp +89 -0
- esphome/components/ota/ota_backend_arduino_esp8266.h +33 -0
- esphome/components/ota/ota_backend_arduino_libretiny.cpp +72 -0
- esphome/components/ota/ota_backend_arduino_libretiny.h +26 -0
- esphome/components/ota/ota_backend_arduino_rp2040.cpp +82 -0
- esphome/components/ota/ota_backend_arduino_rp2040.h +29 -0
- esphome/components/ota/ota_backend_esp_idf.cpp +110 -0
- esphome/components/ota/ota_backend_esp_idf.h +32 -0
- esphome/components/output/__init__.py +147 -0
- esphome/components/output/automation.cpp +10 -0
- esphome/components/output/automation.h +68 -0
- esphome/components/output/binary_output.h +73 -0
- esphome/components/output/button/__init__.py +30 -0
- esphome/components/output/button/output_button.cpp +21 -0
- esphome/components/output/button/output_button.h +25 -0
- esphome/components/output/float_output.cpp +46 -0
- esphome/components/output/float_output.h +89 -0
- esphome/components/output/lock/__init__.py +26 -0
- esphome/components/output/lock/output_lock.cpp +22 -0
- esphome/components/output/lock/output_lock.h +24 -0
- esphome/components/output/switch/__init__.py +29 -0
- esphome/components/output/switch/output_switch.cpp +29 -0
- esphome/components/output/switch/output_switch.h +25 -0
- esphome/components/packages/__init__.py +337 -0
- esphome/components/packet_transport/__init__.py +199 -0
- esphome/components/packet_transport/binary_sensor.py +76 -0
- esphome/components/packet_transport/packet_transport.cpp +571 -0
- esphome/components/packet_transport/packet_transport.h +160 -0
- esphome/components/packet_transport/sensor.py +19 -0
- esphome/components/partition/__init__.py +0 -0
- esphome/components/partition/light.py +121 -0
- esphome/components/partition/light_partition.cpp +10 -0
- esphome/components/partition/light_partition.h +97 -0
- esphome/components/pca6416a/__init__.py +79 -0
- esphome/components/pca6416a/pca6416a.cpp +190 -0
- esphome/components/pca6416a/pca6416a.h +72 -0
- esphome/components/pca9554/__init__.py +87 -0
- esphome/components/pca9554/pca9554.cpp +139 -0
- esphome/components/pca9554/pca9554.h +79 -0
- esphome/components/pca9685/__init__.py +62 -0
- esphome/components/pca9685/output.py +27 -0
- esphome/components/pca9685/pca9685_output.cpp +168 -0
- esphome/components/pca9685/pca9685_output.h +80 -0
- esphome/components/pcd8544/__init__.py +0 -0
- esphome/components/pcd8544/display.py +60 -0
- esphome/components/pcd8544/pcd_8544.cpp +126 -0
- esphome/components/pcd8544/pcd_8544.h +78 -0
- esphome/components/pcf85063/__init__.py +0 -0
- esphome/components/pcf85063/pcf85063.cpp +108 -0
- esphome/components/pcf85063/pcf85063.h +96 -0
- esphome/components/pcf85063/time.py +59 -0
- esphome/components/pcf8563/__init__.py +0 -0
- esphome/components/pcf8563/pcf8563.cpp +108 -0
- esphome/components/pcf8563/pcf8563.h +124 -0
- esphome/components/pcf8563/time.py +62 -0
- esphome/components/pcf8574/__init__.py +76 -0
- esphome/components/pcf8574/pcf8574.cpp +114 -0
- esphome/components/pcf8574/pcf8574.h +74 -0
- esphome/components/pi4ioe5v6408/__init__.py +84 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +170 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
- esphome/components/pid/__init__.py +1 -0
- esphome/components/pid/climate.py +192 -0
- esphome/components/pid/pid_autotuner.cpp +361 -0
- esphome/components/pid/pid_autotuner.h +115 -0
- esphome/components/pid/pid_climate.cpp +188 -0
- esphome/components/pid/pid_climate.h +160 -0
- esphome/components/pid/pid_controller.cpp +129 -0
- esphome/components/pid/pid_controller.h +71 -0
- esphome/components/pid/pid_simulator.h +77 -0
- esphome/components/pid/sensor/__init__.py +49 -0
- esphome/components/pid/sensor/pid_climate_sensor.cpp +59 -0
- esphome/components/pid/sensor/pid_climate_sensor.h +37 -0
- esphome/components/pipsolar/__init__.py +32 -0
- esphome/components/pipsolar/binary_sensor/__init__.py +141 -0
- esphome/components/pipsolar/output/__init__.py +107 -0
- esphome/components/pipsolar/output/pipsolar_output.cpp +22 -0
- esphome/components/pipsolar/output/pipsolar_output.h +42 -0
- esphome/components/pipsolar/pipsolar.cpp +786 -0
- esphome/components/pipsolar/pipsolar.h +250 -0
- esphome/components/pipsolar/sensor/__init__.py +324 -0
- esphome/components/pipsolar/switch/__init__.py +51 -0
- esphome/components/pipsolar/switch/pipsolar_switch.cpp +24 -0
- esphome/components/pipsolar/switch/pipsolar_switch.h +25 -0
- esphome/components/pipsolar/text_sensor/__init__.py +41 -0
- esphome/components/pm1006/__init__.py +0 -0
- esphome/components/pm1006/pm1006.cpp +99 -0
- esphome/components/pm1006/pm1006.h +39 -0
- esphome/components/pm1006/sensor.py +67 -0
- esphome/components/pm2005/__init__.py +1 -0
- esphome/components/pm2005/pm2005.cpp +121 -0
- esphome/components/pm2005/pm2005.h +46 -0
- esphome/components/pm2005/sensor.py +86 -0
- esphome/components/pmsa003i/__init__.py +0 -0
- esphome/components/pmsa003i/pmsa003i.cpp +135 -0
- esphome/components/pmsa003i/pmsa003i.h +67 -0
- esphome/components/pmsa003i/sensor.py +127 -0
- esphome/components/pmsx003/__init__.py +0 -0
- esphome/components/pmsx003/pmsx003.cpp +318 -0
- esphome/components/pmsx003/pmsx003.h +121 -0
- esphome/components/pmsx003/sensor.py +281 -0
- esphome/components/pmwcs3/__init__.py +1 -0
- esphome/components/pmwcs3/pmwcs3.cpp +112 -0
- esphome/components/pmwcs3/pmwcs3.h +69 -0
- esphome/components/pmwcs3/sensor.py +139 -0
- esphome/components/pn532/__init__.py +96 -0
- esphome/components/pn532/binary_sensor.py +48 -0
- esphome/components/pn532/pn532.cpp +463 -0
- esphome/components/pn532/pn532.h +150 -0
- esphome/components/pn532/pn532_mifare_classic.cpp +262 -0
- esphome/components/pn532/pn532_mifare_ultralight.cpp +192 -0
- esphome/components/pn532_i2c/__init__.py +26 -0
- esphome/components/pn532_i2c/pn532_i2c.cpp +129 -0
- esphome/components/pn532_i2c/pn532_i2c.h +25 -0
- esphome/components/pn532_spi/__init__.py +26 -0
- esphome/components/pn532_spi/pn532_spi.cpp +136 -0
- esphome/components/pn532_spi/pn532_spi.h +28 -0
- esphome/components/pn7150/__init__.py +215 -0
- esphome/components/pn7150/automation.h +82 -0
- esphome/components/pn7150/pn7150.cpp +1143 -0
- esphome/components/pn7150/pn7150.h +295 -0
- esphome/components/pn7150/pn7150_mifare_classic.cpp +322 -0
- esphome/components/pn7150/pn7150_mifare_ultralight.cpp +186 -0
- esphome/components/pn7150_i2c/__init__.py +25 -0
- esphome/components/pn7150_i2c/pn7150_i2c.cpp +49 -0
- esphome/components/pn7150_i2c/pn7150_i2c.h +22 -0
- esphome/components/pn7160/__init__.py +227 -0
- esphome/components/pn7160/automation.h +82 -0
- esphome/components/pn7160/pn7160.cpp +1167 -0
- esphome/components/pn7160/pn7160.h +314 -0
- esphome/components/pn7160/pn7160_mifare_classic.cpp +322 -0
- esphome/components/pn7160/pn7160_mifare_ultralight.cpp +186 -0
- esphome/components/pn7160_i2c/__init__.py +25 -0
- esphome/components/pn7160_i2c/pn7160_i2c.cpp +49 -0
- esphome/components/pn7160_i2c/pn7160_i2c.h +22 -0
- esphome/components/pn7160_spi/__init__.py +26 -0
- esphome/components/pn7160_spi/pn7160_spi.cpp +54 -0
- esphome/components/pn7160_spi/pn7160_spi.h +30 -0
- esphome/components/power_supply/__init__.py +42 -0
- esphome/components/power_supply/power_supply.cpp +58 -0
- esphome/components/power_supply/power_supply.h +67 -0
- esphome/components/preferences/__init__.py +22 -0
- esphome/components/preferences/syncer.h +32 -0
- esphome/components/prometheus/__init__.py +52 -0
- esphome/components/prometheus/prometheus_handler.cpp +1093 -0
- esphome/components/prometheus/prometheus_handler.h +221 -0
- esphome/components/psram/__init__.py +210 -0
- esphome/components/psram/psram.cpp +31 -0
- esphome/components/psram/psram.h +17 -0
- esphome/components/pulse_counter/__init__.py +0 -0
- esphome/components/pulse_counter/automation.h +24 -0
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +201 -0
- esphome/components/pulse_counter/pulse_counter_sensor.h +90 -0
- esphome/components/pulse_counter/sensor.py +159 -0
- esphome/components/pulse_meter/__init__.py +0 -0
- esphome/components/pulse_meter/automation.h +24 -0
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +189 -0
- esphome/components/pulse_meter/pulse_meter_sensor.h +83 -0
- esphome/components/pulse_meter/sensor.py +114 -0
- esphome/components/pulse_width/__init__.py +0 -0
- esphome/components/pulse_width/pulse_width.cpp +31 -0
- esphome/components/pulse_width/pulse_width.h +43 -0
- esphome/components/pulse_width/sensor.py +35 -0
- esphome/components/pvvx_mithermometer/__init__.py +0 -0
- esphome/components/pvvx_mithermometer/display/__init__.py +55 -0
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +189 -0
- esphome/components/pvvx_mithermometer/display/pvvx_display.h +136 -0
- esphome/components/pvvx_mithermometer/pvvx_mithermometer.cpp +141 -0
- esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +50 -0
- esphome/components/pvvx_mithermometer/sensor.py +100 -0
- esphome/components/pylontech/__init__.py +47 -0
- esphome/components/pylontech/pylontech.cpp +103 -0
- esphome/components/pylontech/pylontech.h +53 -0
- esphome/components/pylontech/sensor/__init__.py +92 -0
- esphome/components/pylontech/sensor/pylontech_sensor.cpp +62 -0
- esphome/components/pylontech/sensor/pylontech_sensor.h +32 -0
- esphome/components/pylontech/text_sensor/__init__.py +36 -0
- esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +42 -0
- esphome/components/pylontech/text_sensor/pylontech_text_sensor.h +26 -0
- esphome/components/pzem004t/__init__.py +0 -0
- esphome/components/pzem004t/pzem004t.cpp +127 -0
- esphome/components/pzem004t/pzem004t.h +46 -0
- esphome/components/pzem004t/sensor.py +82 -0
- esphome/components/pzemac/__init__.py +0 -0
- esphome/components/pzemac/pzemac.cpp +87 -0
- esphome/components/pzemac/pzemac.h +53 -0
- esphome/components/pzemac/sensor.py +125 -0
- esphome/components/pzemdc/__init__.py +0 -0
- esphome/components/pzemdc/pzemdc.cpp +75 -0
- esphome/components/pzemdc/pzemdc.h +46 -0
- esphome/components/pzemdc/sensor.py +101 -0
- esphome/components/qmc5883l/__init__.py +0 -0
- esphome/components/qmc5883l/qmc5883l.cpp +189 -0
- esphome/components/qmc5883l/qmc5883l.h +66 -0
- esphome/components/qmc5883l/sensor.py +164 -0
- esphome/components/qmp6988/__init__.py +1 -0
- esphome/components/qmp6988/qmp6988.cpp +350 -0
- esphome/components/qmp6988/qmp6988.h +110 -0
- esphome/components/qmp6988/sensor.py +101 -0
- esphome/components/qr_code/__init__.py +44 -0
- esphome/components/qr_code/qr_code.cpp +69 -0
- esphome/components/qr_code/qr_code.h +36 -0
- esphome/components/qspi_amoled/display.py +3 -0
- esphome/components/qspi_dbi/__init__.py +3 -0
- esphome/components/qspi_dbi/display.py +212 -0
- esphome/components/qspi_dbi/models.py +309 -0
- esphome/components/qspi_dbi/qspi_dbi.cpp +221 -0
- esphome/components/qspi_dbi/qspi_dbi.h +173 -0
- esphome/components/qwiic_pir/__init__.py +0 -0
- esphome/components/qwiic_pir/binary_sensor.py +63 -0
- esphome/components/qwiic_pir/qwiic_pir.cpp +133 -0
- esphome/components/qwiic_pir/qwiic_pir.h +69 -0
- esphome/components/radon_eye_ble/__init__.py +23 -0
- esphome/components/radon_eye_ble/radon_eye_listener.cpp +32 -0
- esphome/components/radon_eye_ble/radon_eye_listener.h +19 -0
- esphome/components/radon_eye_rd200/__init__.py +1 -0
- esphome/components/radon_eye_rd200/radon_eye_rd200.cpp +179 -0
- esphome/components/radon_eye_rd200/radon_eye_rd200.h +59 -0
- esphome/components/radon_eye_rd200/sensor.py +54 -0
- esphome/components/rc522/__init__.py +56 -0
- esphome/components/rc522/binary_sensor.py +48 -0
- esphome/components/rc522/rc522.cpp +483 -0
- esphome/components/rc522/rc522.h +279 -0
- esphome/components/rc522_i2c/__init__.py +26 -0
- esphome/components/rc522_i2c/rc522_i2c.cpp +70 -0
- esphome/components/rc522_i2c/rc522_i2c.h +42 -0
- esphome/components/rc522_spi/__init__.py +30 -0
- esphome/components/rc522_spi/binary_sensor.py +9 -0
- esphome/components/rc522_spi/rc522_spi.cpp +139 -0
- esphome/components/rc522_spi/rc522_spi.h +54 -0
- esphome/components/rdm6300/__init__.py +41 -0
- esphome/components/rdm6300/binary_sensor.py +28 -0
- esphome/components/rdm6300/rdm6300.cpp +69 -0
- esphome/components/rdm6300/rdm6300.h +56 -0
- esphome/components/remote_base/__init__.py +2199 -0
- esphome/components/remote_base/abbwelcome_protocol.cpp +123 -0
- esphome/components/remote_base/abbwelcome_protocol.h +256 -0
- esphome/components/remote_base/aeha_protocol.cpp +102 -0
- esphome/components/remote_base/aeha_protocol.h +46 -0
- esphome/components/remote_base/beo4_protocol.cpp +153 -0
- esphome/components/remote_base/beo4_protocol.h +43 -0
- esphome/components/remote_base/byronsx_protocol.cpp +139 -0
- esphome/components/remote_base/byronsx_protocol.h +46 -0
- esphome/components/remote_base/canalsat_protocol.cpp +108 -0
- esphome/components/remote_base/canalsat_protocol.h +78 -0
- esphome/components/remote_base/coolix_protocol.cpp +113 -0
- esphome/components/remote_base/coolix_protocol.h +41 -0
- esphome/components/remote_base/dish_protocol.cpp +94 -0
- esphome/components/remote_base/dish_protocol.h +38 -0
- esphome/components/remote_base/dooya_protocol.cpp +120 -0
- esphome/components/remote_base/dooya_protocol.h +49 -0
- esphome/components/remote_base/drayton_protocol.cpp +240 -0
- esphome/components/remote_base/drayton_protocol.h +46 -0
- esphome/components/remote_base/dyson_protocol.cpp +71 -0
- esphome/components/remote_base/dyson_protocol.h +46 -0
- esphome/components/remote_base/gobox_protocol.cpp +131 -0
- esphome/components/remote_base/gobox_protocol.h +54 -0
- esphome/components/remote_base/haier_protocol.cpp +84 -0
- esphome/components/remote_base/haier_protocol.h +39 -0
- esphome/components/remote_base/jvc_protocol.cpp +52 -0
- esphome/components/remote_base/jvc_protocol.h +37 -0
- esphome/components/remote_base/keeloq_protocol.cpp +194 -0
- esphome/components/remote_base/keeloq_protocol.h +53 -0
- esphome/components/remote_base/lg_protocol.cpp +58 -0
- esphome/components/remote_base/lg_protocol.h +41 -0
- esphome/components/remote_base/magiquest_protocol.cpp +83 -0
- esphome/components/remote_base/magiquest_protocol.h +52 -0
- esphome/components/remote_base/midea_protocol.cpp +76 -0
- esphome/components/remote_base/midea_protocol.h +83 -0
- esphome/components/remote_base/mirage_protocol.cpp +84 -0
- esphome/components/remote_base/mirage_protocol.h +39 -0
- esphome/components/remote_base/nec_protocol.cpp +102 -0
- esphome/components/remote_base/nec_protocol.h +41 -0
- esphome/components/remote_base/nexa_protocol.cpp +240 -0
- esphome/components/remote_base/nexa_protocol.h +54 -0
- esphome/components/remote_base/panasonic_protocol.cpp +74 -0
- esphome/components/remote_base/panasonic_protocol.h +41 -0
- esphome/components/remote_base/pioneer_protocol.cpp +156 -0
- esphome/components/remote_base/pioneer_protocol.h +38 -0
- esphome/components/remote_base/pronto_protocol.cpp +244 -0
- esphome/components/remote_base/pronto_protocol.h +55 -0
- esphome/components/remote_base/raw_protocol.cpp +47 -0
- esphome/components/remote_base/raw_protocol.h +86 -0
- esphome/components/remote_base/rc5_protocol.cpp +90 -0
- esphome/components/remote_base/rc5_protocol.h +39 -0
- esphome/components/remote_base/rc6_protocol.cpp +181 -0
- esphome/components/remote_base/rc6_protocol.h +46 -0
- esphome/components/remote_base/rc_switch_protocol.cpp +271 -0
- esphome/components/remote_base/rc_switch_protocol.h +221 -0
- esphome/components/remote_base/remote_base.cpp +171 -0
- esphome/components/remote_base/remote_base.h +308 -0
- esphome/components/remote_base/roomba_protocol.cpp +56 -0
- esphome/components/remote_base/roomba_protocol.h +35 -0
- esphome/components/remote_base/samsung36_protocol.cpp +103 -0
- esphome/components/remote_base/samsung36_protocol.h +41 -0
- esphome/components/remote_base/samsung_protocol.cpp +65 -0
- esphome/components/remote_base/samsung_protocol.h +39 -0
- esphome/components/remote_base/sony_protocol.cpp +69 -0
- esphome/components/remote_base/sony_protocol.h +41 -0
- esphome/components/remote_base/symphony_protocol.cpp +120 -0
- esphome/components/remote_base/symphony_protocol.h +44 -0
- esphome/components/remote_base/toshiba_ac_protocol.cpp +115 -0
- esphome/components/remote_base/toshiba_ac_protocol.h +39 -0
- esphome/components/remote_base/toto_protocol.cpp +100 -0
- esphome/components/remote_base/toto_protocol.h +45 -0
- esphome/components/remote_receiver/__init__.py +220 -0
- esphome/components/remote_receiver/binary_sensor.py +10 -0
- esphome/components/remote_receiver/remote_receiver.cpp +142 -0
- esphome/components/remote_receiver/remote_receiver.h +106 -0
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +252 -0
- esphome/components/remote_transmitter/__init__.py +162 -0
- esphome/components/remote_transmitter/automation.h +18 -0
- esphome/components/remote_transmitter/remote_transmitter.cpp +114 -0
- esphome/components/remote_transmitter/remote_transmitter.h +104 -0
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +364 -0
- esphome/components/resampler/__init__.py +0 -0
- esphome/components/resampler/speaker/__init__.py +102 -0
- esphome/components/resampler/speaker/resampler_speaker.cpp +320 -0
- esphome/components/resampler/speaker/resampler_speaker.h +109 -0
- esphome/components/resistance/__init__.py +0 -0
- esphome/components/resistance/resistance_sensor.cpp +47 -0
- esphome/components/resistance/resistance_sensor.h +37 -0
- esphome/components/resistance/sensor.py +52 -0
- esphome/components/restart/__init__.py +1 -0
- esphome/components/restart/button/__init__.py +25 -0
- esphome/components/restart/button/restart_button.cpp +20 -0
- esphome/components/restart/button/restart_button.h +18 -0
- esphome/components/restart/switch/__init__.py +19 -0
- esphome/components/restart/switch/restart_switch.cpp +25 -0
- esphome/components/restart/switch/restart_switch.h +18 -0
- esphome/components/rf_bridge/__init__.py +238 -0
- esphome/components/rf_bridge/rf_bridge.cpp +236 -0
- esphome/components/rf_bridge/rf_bridge.h +196 -0
- esphome/components/rgb/__init__.py +0 -0
- esphome/components/rgb/light.py +28 -0
- esphome/components/rgb/rgb_light_output.h +36 -0
- esphome/components/rgbct/__init__.py +0 -0
- esphome/components/rgbct/light.py +59 -0
- esphome/components/rgbct/rgbct_light_output.h +59 -0
- esphome/components/rgbw/__init__.py +0 -0
- esphome/components/rgbw/light.py +40 -0
- esphome/components/rgbw/rgbw_light_output.h +44 -0
- esphome/components/rgbww/__init__.py +0 -0
- esphome/components/rgbww/light.py +69 -0
- esphome/components/rgbww/rgbww_light_output.h +55 -0
- esphome/components/rotary_encoder/__init__.py +0 -0
- esphome/components/rotary_encoder/rotary_encoder.cpp +247 -0
- esphome/components/rotary_encoder/rotary_encoder.h +138 -0
- esphome/components/rotary_encoder/sensor.py +148 -0
- esphome/components/rp2040/__init__.py +255 -0
- esphome/components/rp2040/boards.py +28 -0
- esphome/components/rp2040/build_pio.py.script +47 -0
- esphome/components/rp2040/const.py +7 -0
- esphome/components/rp2040/core.cpp +40 -0
- esphome/components/rp2040/core.h +14 -0
- esphome/components/rp2040/gpio.cpp +120 -0
- esphome/components/rp2040/gpio.h +39 -0
- esphome/components/rp2040/gpio.py +102 -0
- esphome/components/rp2040/helpers.cpp +59 -0
- esphome/components/rp2040/post_build.py.script +23 -0
- esphome/components/rp2040/preferences.cpp +160 -0
- esphome/components/rp2040/preferences.h +14 -0
- esphome/components/rp2040_pio/__init__.py +39 -0
- esphome/components/rp2040_pio_led_strip/__init__.py +1 -0
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +216 -0
- esphome/components/rp2040_pio_led_strip/led_strip.h +133 -0
- esphome/components/rp2040_pio_led_strip/light.py +280 -0
- esphome/components/rp2040_pwm/__init__.py +0 -0
- esphome/components/rp2040_pwm/output.py +51 -0
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +64 -0
- esphome/components/rp2040_pwm/rp2040_pwm.h +59 -0
- esphome/components/rpi_dpi_rgb/__init__.py +1 -0
- esphome/components/rpi_dpi_rgb/display.py +198 -0
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +159 -0
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.h +97 -0
- esphome/components/rtl87xx/__init__.py +61 -0
- esphome/components/rtl87xx/boards.py +1404 -0
- esphome/components/rtttl/__init__.py +156 -0
- esphome/components/rtttl/rtttl.cpp +412 -0
- esphome/components/rtttl/rtttl.h +149 -0
- esphome/components/runtime_stats/__init__.py +34 -0
- esphome/components/runtime_stats/runtime_stats.cpp +89 -0
- esphome/components/runtime_stats/runtime_stats.h +126 -0
- esphome/components/ruuvi_ble/__init__.py +22 -0
- esphome/components/ruuvi_ble/ruuvi_ble.cpp +144 -0
- esphome/components/ruuvi_ble/ruuvi_ble.h +37 -0
- esphome/components/ruuvitag/__init__.py +0 -0
- esphome/components/ruuvitag/ruuvitag.cpp +29 -0
- esphome/components/ruuvitag/ruuvitag.h +83 -0
- esphome/components/ruuvitag/sensor.py +163 -0
- esphome/components/rx8130/__init__.py +0 -0
- esphome/components/rx8130/rx8130.cpp +128 -0
- esphome/components/rx8130/rx8130.h +35 -0
- esphome/components/rx8130/time.py +56 -0
- esphome/components/safe_mode/__init__.py +74 -0
- esphome/components/safe_mode/automation.h +17 -0
- esphome/components/safe_mode/button/__init__.py +34 -0
- esphome/components/safe_mode/button/safe_mode_button.cpp +27 -0
- esphome/components/safe_mode/button/safe_mode_button.h +21 -0
- esphome/components/safe_mode/safe_mode.cpp +136 -0
- esphome/components/safe_mode/safe_mode.h +53 -0
- esphome/components/safe_mode/switch/__init__.py +29 -0
- esphome/components/safe_mode/switch/safe_mode_switch.cpp +32 -0
- esphome/components/safe_mode/switch/safe_mode_switch.h +21 -0
- esphome/components/scd30/__init__.py +0 -0
- esphome/components/scd30/automation.h +23 -0
- esphome/components/scd30/scd30.cpp +234 -0
- esphome/components/scd30/scd30.h +52 -0
- esphome/components/scd30/sensor.py +139 -0
- esphome/components/scd4x/__init__.py +0 -0
- esphome/components/scd4x/automation.h +28 -0
- esphome/components/scd4x/scd4x.cpp +327 -0
- esphome/components/scd4x/scd4x.h +63 -0
- esphome/components/scd4x/sensor.py +166 -0
- esphome/components/script/__init__.py +239 -0
- esphome/components/script/script.cpp +20 -0
- esphome/components/script/script.h +342 -0
- esphome/components/sdl/__init__.py +1 -0
- esphome/components/sdl/binary_sensor.py +285 -0
- esphome/components/sdl/display.py +114 -0
- esphome/components/sdl/sdl_esphome.cpp +130 -0
- esphome/components/sdl/sdl_esphome.h +72 -0
- esphome/components/sdl/touchscreen/__init__.py +22 -0
- esphome/components/sdl/touchscreen/sdl_touchscreen.h +26 -0
- esphome/components/sdm_meter/__init__.py +0 -0
- esphome/components/sdm_meter/sdm_meter.cpp +114 -0
- esphome/components/sdm_meter/sdm_meter.h +83 -0
- esphome/components/sdm_meter/sdm_meter_registers.h +114 -0
- esphome/components/sdm_meter/sensor.py +176 -0
- esphome/components/sdp3x/__init__.py +0 -0
- esphome/components/sdp3x/sdp3x.cpp +120 -0
- esphome/components/sdp3x/sdp3x.h +30 -0
- esphome/components/sdp3x/sensor.py +52 -0
- esphome/components/sds011/__init__.py +0 -0
- esphome/components/sds011/sds011.cpp +190 -0
- esphome/components/sds011/sds011.h +52 -0
- esphome/components/sds011/sensor.py +81 -0
- esphome/components/seeed_mr24hpc1/__init__.py +51 -0
- esphome/components/seeed_mr24hpc1/binary_sensor.py +20 -0
- esphome/components/seeed_mr24hpc1/button/__init__.py +43 -0
- esphome/components/seeed_mr24hpc1/button/custom_mode_end_button.cpp +9 -0
- esphome/components/seeed_mr24hpc1/button/custom_mode_end_button.h +18 -0
- esphome/components/seeed_mr24hpc1/button/restart_button.cpp +9 -0
- esphome/components/seeed_mr24hpc1/button/restart_button.h +18 -0
- esphome/components/seeed_mr24hpc1/number/__init__.py +130 -0
- esphome/components/seeed_mr24hpc1/number/custom_mode_number.cpp +12 -0
- esphome/components/seeed_mr24hpc1/number/custom_mode_number.h +18 -0
- esphome/components/seeed_mr24hpc1/number/custom_unman_time_number.cpp +9 -0
- esphome/components/seeed_mr24hpc1/number/custom_unman_time_number.h +18 -0
- esphome/components/seeed_mr24hpc1/number/existence_threshold_number.cpp +9 -0
- esphome/components/seeed_mr24hpc1/number/existence_threshold_number.h +18 -0
- esphome/components/seeed_mr24hpc1/number/motion_threshold_number.cpp +9 -0
- esphome/components/seeed_mr24hpc1/number/motion_threshold_number.h +18 -0
- esphome/components/seeed_mr24hpc1/number/motion_trigger_time_number.cpp +9 -0
- esphome/components/seeed_mr24hpc1/number/motion_trigger_time_number.h +18 -0
- esphome/components/seeed_mr24hpc1/number/motiontorest_time_number.cpp +9 -0
- esphome/components/seeed_mr24hpc1/number/motiontorest_time_number.h +18 -0
- esphome/components/seeed_mr24hpc1/number/sensitivity_number.cpp +9 -0
- esphome/components/seeed_mr24hpc1/number/sensitivity_number.h +18 -0
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +889 -0
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.h +217 -0
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1_constants.h +173 -0
- esphome/components/seeed_mr24hpc1/select/__init__.py +102 -0
- esphome/components/seeed_mr24hpc1/select/existence_boundary_select.cpp +12 -0
- esphome/components/seeed_mr24hpc1/select/existence_boundary_select.h +18 -0
- esphome/components/seeed_mr24hpc1/select/motion_boundary_select.cpp +12 -0
- esphome/components/seeed_mr24hpc1/select/motion_boundary_select.h +18 -0
- esphome/components/seeed_mr24hpc1/select/scene_mode_select.cpp +12 -0
- esphome/components/seeed_mr24hpc1/select/scene_mode_select.h +18 -0
- esphome/components/seeed_mr24hpc1/select/unman_time_select.cpp +12 -0
- esphome/components/seeed_mr24hpc1/select/unman_time_select.h +18 -0
- esphome/components/seeed_mr24hpc1/sensor.py +83 -0
- esphome/components/seeed_mr24hpc1/switch/__init__.py +30 -0
- esphome/components/seeed_mr24hpc1/switch/underlyFuc_switch.cpp +12 -0
- esphome/components/seeed_mr24hpc1/switch/underlyFuc_switch.h +18 -0
- esphome/components/seeed_mr24hpc1/text_sensor.py +75 -0
- esphome/components/seeed_mr60bha2/__init__.py +41 -0
- esphome/components/seeed_mr60bha2/binary_sensor.py +23 -0
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +198 -0
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.h +50 -0
- esphome/components/seeed_mr60bha2/sensor.py +65 -0
- esphome/components/seeed_mr60fda2/__init__.py +41 -0
- esphome/components/seeed_mr60fda2/binary_sensor.py +33 -0
- esphome/components/seeed_mr60fda2/button/__init__.py +45 -0
- esphome/components/seeed_mr60fda2/button/get_radar_parameters_button.cpp +9 -0
- esphome/components/seeed_mr60fda2/button/get_radar_parameters_button.h +18 -0
- esphome/components/seeed_mr60fda2/button/reset_radar_button.cpp +9 -0
- esphome/components/seeed_mr60fda2/button/reset_radar_button.h +18 -0
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +366 -0
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.h +101 -0
- esphome/components/seeed_mr60fda2/select/__init__.py +58 -0
- esphome/components/seeed_mr60fda2/select/height_threshold_select.cpp +12 -0
- esphome/components/seeed_mr60fda2/select/height_threshold_select.h +18 -0
- esphome/components/seeed_mr60fda2/select/install_height_select.cpp +12 -0
- esphome/components/seeed_mr60fda2/select/install_height_select.h +18 -0
- esphome/components/seeed_mr60fda2/select/sensitivity_select.cpp +12 -0
- esphome/components/seeed_mr60fda2/select/sensitivity_select.h +18 -0
- esphome/components/selec_meter/__init__.py +0 -0
- esphome/components/selec_meter/selec_meter.cpp +111 -0
- esphome/components/selec_meter/selec_meter.h +47 -0
- esphome/components/selec_meter/selec_meter_registers.h +32 -0
- esphome/components/selec_meter/sensor.py +165 -0
- esphome/components/select/__init__.py +241 -0
- esphome/components/select/automation.h +65 -0
- esphome/components/select/select.cpp +86 -0
- esphome/components/select/select.h +117 -0
- esphome/components/select/select_call.cpp +123 -0
- esphome/components/select/select_call.h +49 -0
- esphome/components/select/select_traits.cpp +16 -0
- esphome/components/select/select_traits.h +18 -0
- esphome/components/sen0321/__init__.py +1 -0
- esphome/components/sen0321/sen0321.cpp +35 -0
- esphome/components/sen0321/sen0321.h +35 -0
- esphome/components/sen0321/sensor.py +34 -0
- esphome/components/sen21231/__init__.py +0 -0
- esphome/components/sen21231/sen21231.cpp +32 -0
- esphome/components/sen21231/sen21231.h +77 -0
- esphome/components/sen21231/sensor.py +24 -0
- esphome/components/sen5x/__init__.py +0 -0
- esphome/components/sen5x/automation.h +21 -0
- esphome/components/sen5x/sen5x.cpp +447 -0
- esphome/components/sen5x/sen5x.h +139 -0
- esphome/components/sen5x/sensor.py +273 -0
- esphome/components/senseair/__init__.py +0 -0
- esphome/components/senseair/senseair.cpp +154 -0
- esphome/components/senseair/senseair.h +92 -0
- esphome/components/senseair/sensor.py +93 -0
- esphome/components/sensirion_common/__init__.py +8 -0
- esphome/components/sensirion_common/i2c_sensirion.cpp +101 -0
- esphome/components/sensirion_common/i2c_sensirion.h +142 -0
- esphome/components/sensor/__init__.py +1199 -0
- esphome/components/sensor/automation.cpp +10 -0
- esphome/components/sensor/automation.h +111 -0
- esphome/components/sensor/filter.cpp +578 -0
- esphome/components/sensor/filter.h +636 -0
- esphome/components/sensor/sensor.cpp +144 -0
- esphome/components/sensor/sensor.h +147 -0
- esphome/components/servo/__init__.py +85 -0
- esphome/components/servo/servo.cpp +110 -0
- esphome/components/servo/servo.h +77 -0
- esphome/components/sfa30/__init__.py +1 -0
- esphome/components/sfa30/sensor.py +77 -0
- esphome/components/sfa30/sfa30.cpp +95 -0
- esphome/components/sfa30/sfa30.h +33 -0
- esphome/components/sgp30/__init__.py +0 -0
- esphome/components/sgp30/sensor.py +116 -0
- esphome/components/sgp30/sgp30.cpp +304 -0
- esphome/components/sgp30/sgp30.h +71 -0
- esphome/components/sgp40/__init__.py +0 -0
- esphome/components/sgp40/sensor.py +8 -0
- esphome/components/sgp4x/__init__.py +0 -0
- esphome/components/sgp4x/sensor.py +145 -0
- esphome/components/sgp4x/sgp4x.cpp +296 -0
- esphome/components/sgp4x/sgp4x.h +143 -0
- esphome/components/sha256/__init__.py +22 -0
- esphome/components/sha256/sha256.cpp +116 -0
- esphome/components/sha256/sha256.h +60 -0
- esphome/components/shelly_dimmer/__init__.py +1 -0
- esphome/components/shelly_dimmer/dev_table.h +159 -0
- esphome/components/shelly_dimmer/light.py +221 -0
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +529 -0
- esphome/components/shelly_dimmer/shelly_dimmer.h +123 -0
- esphome/components/shelly_dimmer/stm32flash.cpp +1065 -0
- esphome/components/shelly_dimmer/stm32flash.h +131 -0
- esphome/components/sht3xd/__init__.py +0 -0
- esphome/components/sht3xd/sensor.py +64 -0
- esphome/components/sht3xd/sht3xd.cpp +105 -0
- esphome/components/sht3xd/sht3xd.h +39 -0
- esphome/components/sht4x/__init__.py +0 -0
- esphome/components/sht4x/sensor.py +103 -0
- esphome/components/sht4x/sht4x.cpp +126 -0
- esphome/components/sht4x/sht4x.h +48 -0
- esphome/components/shtcx/__init__.py +0 -0
- esphome/components/shtcx/sensor.py +59 -0
- esphome/components/shtcx/shtcx.cpp +121 -0
- esphome/components/shtcx/shtcx.h +34 -0
- esphome/components/shutdown/__init__.py +1 -0
- esphome/components/shutdown/button/__init__.py +17 -0
- esphome/components/shutdown/button/shutdown_button.cpp +33 -0
- esphome/components/shutdown/button/shutdown_button.h +18 -0
- esphome/components/shutdown/switch/__init__.py +19 -0
- esphome/components/shutdown/switch/shutdown_switch.cpp +38 -0
- esphome/components/shutdown/switch/shutdown_switch.h +18 -0
- esphome/components/sigma_delta_output/__init__.py +1 -0
- esphome/components/sigma_delta_output/output.py +61 -0
- esphome/components/sigma_delta_output/sigma_delta_output.cpp +57 -0
- esphome/components/sigma_delta_output/sigma_delta_output.h +47 -0
- esphome/components/sim800l/__init__.py +203 -0
- esphome/components/sim800l/binary_sensor.py +26 -0
- esphome/components/sim800l/sensor.py +34 -0
- esphome/components/sim800l/sim800l.cpp +493 -0
- esphome/components/sim800l/sim800l.h +223 -0
- esphome/components/slow_pwm/__init__.py +0 -0
- esphome/components/slow_pwm/output.py +71 -0
- esphome/components/slow_pwm/slow_pwm_output.cpp +80 -0
- esphome/components/slow_pwm/slow_pwm_output.h +61 -0
- esphome/components/sm10bit_base/__init__.py +40 -0
- esphome/components/sm10bit_base/sm10bit_base.cpp +131 -0
- esphome/components/sm10bit_base/sm10bit_base.h +63 -0
- esphome/components/sm16716/__init__.py +38 -0
- esphome/components/sm16716/output.py +28 -0
- esphome/components/sm16716/sm16716.cpp +51 -0
- esphome/components/sm16716/sm16716.h +72 -0
- esphome/components/sm2135/__init__.py +67 -0
- esphome/components/sm2135/output.py +29 -0
- esphome/components/sm2135/sm2135.cpp +151 -0
- esphome/components/sm2135/sm2135.h +90 -0
- esphome/components/sm2235/__init__.py +22 -0
- esphome/components/sm2235/output.py +29 -0
- esphome/components/sm2235/sm2235.cpp +28 -0
- esphome/components/sm2235/sm2235.h +19 -0
- esphome/components/sm2335/__init__.py +22 -0
- esphome/components/sm2335/output.py +29 -0
- esphome/components/sm2335/sm2335.cpp +28 -0
- esphome/components/sm2335/sm2335.h +19 -0
- esphome/components/sm300d2/__init__.py +0 -0
- esphome/components/sm300d2/sensor.py +117 -0
- esphome/components/sm300d2/sm300d2.cpp +108 -0
- esphome/components/sm300d2/sm300d2.h +36 -0
- esphome/components/sml/__init__.py +68 -0
- esphome/components/sml/automation.h +19 -0
- esphome/components/sml/constants.h +27 -0
- esphome/components/sml/sensor/__init__.py +30 -0
- esphome/components/sml/sensor/sml_sensor.cpp +41 -0
- esphome/components/sml/sensor/sml_sensor.h +16 -0
- esphome/components/sml/sml.cpp +148 -0
- esphome/components/sml/sml.h +48 -0
- esphome/components/sml/sml_parser.cpp +153 -0
- esphome/components/sml/sml_parser.h +84 -0
- esphome/components/sml/text_sensor/__init__.py +41 -0
- esphome/components/sml/text_sensor/sml_text_sensor.cpp +54 -0
- esphome/components/sml/text_sensor/sml_text_sensor.h +21 -0
- esphome/components/smt100/__init__.py +1 -0
- esphome/components/smt100/sensor.py +97 -0
- esphome/components/smt100/smt100.cpp +84 -0
- esphome/components/smt100/smt100.h +43 -0
- esphome/components/sn74hc165/__init__.py +95 -0
- esphome/components/sn74hc165/sn74hc165.cpp +70 -0
- esphome/components/sn74hc165/sn74hc165.h +64 -0
- esphome/components/sn74hc595/__init__.py +121 -0
- esphome/components/sn74hc595/sn74hc595.cpp +99 -0
- esphome/components/sn74hc595/sn74hc595.h +97 -0
- esphome/components/sntp/__init__.py +0 -0
- esphome/components/sntp/sntp_component.cpp +106 -0
- esphome/components/sntp/sntp_component.h +46 -0
- esphome/components/sntp/time.py +126 -0
- esphome/components/socket/__init__.py +113 -0
- esphome/components/socket/bsd_sockets_impl.cpp +188 -0
- esphome/components/socket/headers.h +185 -0
- esphome/components/socket/lwip_raw_tcp_impl.cpp +717 -0
- esphome/components/socket/lwip_sockets_impl.cpp +163 -0
- esphome/components/socket/socket.cpp +118 -0
- esphome/components/socket/socket.h +96 -0
- esphome/components/sonoff_d1/__init__.py +1 -0
- esphome/components/sonoff_d1/light.py +39 -0
- esphome/components/sonoff_d1/sonoff_d1.cpp +312 -0
- esphome/components/sonoff_d1/sonoff_d1.h +85 -0
- esphome/components/sound_level/__init__.py +0 -0
- esphome/components/sound_level/sensor.py +97 -0
- esphome/components/sound_level/sound_level.cpp +196 -0
- esphome/components/sound_level/sound_level.h +73 -0
- esphome/components/speaker/__init__.py +147 -0
- esphome/components/speaker/automation.h +88 -0
- esphome/components/speaker/media_player/__init__.py +452 -0
- esphome/components/speaker/media_player/audio_pipeline.cpp +577 -0
- esphome/components/speaker/media_player/audio_pipeline.h +160 -0
- esphome/components/speaker/media_player/automation.h +26 -0
- esphome/components/speaker/media_player/speaker_media_player.cpp +555 -0
- esphome/components/speaker/media_player/speaker_media_player.h +151 -0
- esphome/components/speaker/speaker.h +127 -0
- esphome/components/speed/__init__.py +3 -0
- esphome/components/speed/fan/__init__.py +52 -0
- esphome/components/speed/fan/speed_fan.cpp +48 -0
- esphome/components/speed/fan/speed_fan.h +35 -0
- esphome/components/spi/__init__.py +459 -0
- esphome/components/spi/spi.cpp +123 -0
- esphome/components/spi/spi.h +513 -0
- esphome/components/spi/spi_arduino.cpp +106 -0
- esphome/components/spi/spi_esp_idf.cpp +271 -0
- esphome/components/spi_device/__init__.py +36 -0
- esphome/components/spi_device/spi_device.cpp +27 -0
- esphome/components/spi_device/spi_device.h +22 -0
- esphome/components/spi_led_strip/__init__.py +2 -0
- esphome/components/spi_led_strip/light.py +23 -0
- esphome/components/spi_led_strip/spi_led_strip.cpp +67 -0
- esphome/components/spi_led_strip/spi_led_strip.h +40 -0
- esphome/components/split_buffer/__init__.py +5 -0
- esphome/components/split_buffer/split_buffer.cpp +144 -0
- esphome/components/split_buffer/split_buffer.h +46 -0
- esphome/components/sprinkler/__init__.py +835 -0
- esphome/components/sprinkler/automation.h +185 -0
- esphome/components/sprinkler/sprinkler.cpp +1741 -0
- esphome/components/sprinkler/sprinkler.h +611 -0
- esphome/components/sps30/__init__.py +0 -0
- esphome/components/sps30/automation.h +26 -0
- esphome/components/sps30/sensor.py +194 -0
- esphome/components/sps30/sps30.cpp +293 -0
- esphome/components/sps30/sps30.h +71 -0
- esphome/components/ssd1306_base/__init__.py +103 -0
- esphome/components/ssd1306_base/ssd1306_base.cpp +382 -0
- esphome/components/ssd1306_base/ssd1306_base.h +88 -0
- esphome/components/ssd1306_i2c/__init__.py +0 -0
- esphome/components/ssd1306_i2c/display.py +29 -0
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +80 -0
- esphome/components/ssd1306_i2c/ssd1306_i2c.h +23 -0
- esphome/components/ssd1306_spi/__init__.py +0 -0
- esphome/components/ssd1306_spi/display.py +38 -0
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +67 -0
- esphome/components/ssd1306_spi/ssd1306_spi.h +29 -0
- esphome/components/ssd1322_base/__init__.py +50 -0
- esphome/components/ssd1322_base/ssd1322_base.cpp +204 -0
- esphome/components/ssd1322_base/ssd1322_base.h +55 -0
- esphome/components/ssd1322_spi/__init__.py +0 -0
- esphome/components/ssd1322_spi/display.py +38 -0
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +70 -0
- esphome/components/ssd1322_spi/ssd1322_spi.h +30 -0
- esphome/components/ssd1325_base/__init__.py +54 -0
- esphome/components/ssd1325_base/ssd1325_base.cpp +245 -0
- esphome/components/ssd1325_base/ssd1325_base.h +60 -0
- esphome/components/ssd1325_spi/__init__.py +0 -0
- esphome/components/ssd1325_spi/display.py +38 -0
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +58 -0
- esphome/components/ssd1325_spi/ssd1325_spi.h +29 -0
- esphome/components/ssd1327_base/__init__.py +41 -0
- esphome/components/ssd1327_base/ssd1327_base.cpp +180 -0
- esphome/components/ssd1327_base/ssd1327_base.h +54 -0
- esphome/components/ssd1327_i2c/__init__.py +0 -0
- esphome/components/ssd1327_i2c/display.py +29 -0
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +43 -0
- esphome/components/ssd1327_i2c/ssd1327_i2c.h +23 -0
- esphome/components/ssd1327_spi/__init__.py +0 -0
- esphome/components/ssd1327_spi/display.py +38 -0
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +57 -0
- esphome/components/ssd1327_spi/ssd1327_spi.h +29 -0
- esphome/components/ssd1331_base/__init__.py +32 -0
- esphome/components/ssd1331_base/ssd1331_base.cpp +154 -0
- esphome/components/ssd1331_base/ssd1331_base.h +47 -0
- esphome/components/ssd1331_spi/__init__.py +0 -0
- esphome/components/ssd1331_spi/display.py +38 -0
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +56 -0
- esphome/components/ssd1331_spi/ssd1331_spi.h +29 -0
- esphome/components/ssd1351_base/__init__.py +42 -0
- esphome/components/ssd1351_base/ssd1351_base.cpp +196 -0
- esphome/components/ssd1351_base/ssd1351_base.h +56 -0
- esphome/components/ssd1351_spi/__init__.py +0 -0
- esphome/components/ssd1351_spi/display.py +38 -0
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +70 -0
- esphome/components/ssd1351_spi/ssd1351_spi.h +30 -0
- esphome/components/st7567_base/__init__.py +55 -0
- esphome/components/st7567_base/st7567_base.cpp +152 -0
- esphome/components/st7567_base/st7567_base.h +100 -0
- esphome/components/st7567_i2c/__init__.py +1 -0
- esphome/components/st7567_i2c/display.py +29 -0
- esphome/components/st7567_i2c/st7567_i2c.cpp +62 -0
- esphome/components/st7567_i2c/st7567_i2c.h +23 -0
- esphome/components/st7567_spi/__init__.py +1 -0
- esphome/components/st7567_spi/display.py +38 -0
- esphome/components/st7567_spi/st7567_spi.cpp +65 -0
- esphome/components/st7567_spi/st7567_spi.h +29 -0
- esphome/components/st7701s/__init__.py +1 -0
- esphome/components/st7701s/display.py +251 -0
- esphome/components/st7701s/init_sequences.py +363 -0
- esphome/components/st7701s/st7701s.cpp +193 -0
- esphome/components/st7701s/st7701s.h +118 -0
- esphome/components/st7735/__init__.py +3 -0
- esphome/components/st7735/display.py +105 -0
- esphome/components/st7735/st7735.cpp +489 -0
- esphome/components/st7735/st7735.h +90 -0
- esphome/components/st7789v/__init__.py +3 -0
- esphome/components/st7789v/display.py +209 -0
- esphome/components/st7789v/st7789v.cpp +312 -0
- esphome/components/st7789v/st7789v.h +172 -0
- esphome/components/st7920/__init__.py +0 -0
- esphome/components/st7920/display.py +41 -0
- esphome/components/st7920/st7920.cpp +146 -0
- esphome/components/st7920/st7920.h +51 -0
- esphome/components/statsd/__init__.py +65 -0
- esphome/components/statsd/statsd.cpp +162 -0
- esphome/components/statsd/statsd.h +87 -0
- esphome/components/status/__init__.py +0 -0
- esphome/components/status/binary_sensor.py +22 -0
- esphome/components/status/status_binary_sensor.cpp +37 -0
- esphome/components/status/status_binary_sensor.h +20 -0
- esphome/components/status_led/__init__.py +25 -0
- esphome/components/status_led/light/__init__.py +36 -0
- esphome/components/status_led/light/status_led_light.cpp +75 -0
- esphome/components/status_led/light/status_led_light.h +44 -0
- esphome/components/status_led/status_led.cpp +34 -0
- esphome/components/status_led/status_led.h +26 -0
- esphome/components/stepper/__init__.py +183 -0
- esphome/components/stepper/stepper.cpp +51 -0
- esphome/components/stepper/stepper.h +112 -0
- esphome/components/sts3x/__init__.py +0 -0
- esphome/components/sts3x/sensor.py +35 -0
- esphome/components/sts3x/sts3x.cpp +70 -0
- esphome/components/sts3x/sts3x.h +22 -0
- esphome/components/stts22h/__init__.py +1 -0
- esphome/components/stts22h/sensor.py +33 -0
- esphome/components/stts22h/stts22h.cpp +101 -0
- esphome/components/stts22h/stts22h.h +21 -0
- esphome/components/substitutions/__init__.py +239 -0
- esphome/components/substitutions/jinja.py +255 -0
- esphome/components/sun/__init__.py +180 -0
- esphome/components/sun/sensor/__init__.py +40 -0
- esphome/components/sun/sensor/sun_sensor.cpp +12 -0
- esphome/components/sun/sensor/sun_sensor.h +41 -0
- esphome/components/sun/sun.cpp +321 -0
- esphome/components/sun/sun.h +133 -0
- esphome/components/sun/text_sensor/__init__.py +59 -0
- esphome/components/sun/text_sensor/sun_text_sensor.cpp +12 -0
- esphome/components/sun/text_sensor/sun_text_sensor.h +44 -0
- esphome/components/sun_gtil2/__init__.py +26 -0
- esphome/components/sun_gtil2/sensor.py +88 -0
- esphome/components/sun_gtil2/sun_gtil2.cpp +135 -0
- esphome/components/sun_gtil2/sun_gtil2.h +58 -0
- esphome/components/sun_gtil2/text_sensor.py +32 -0
- esphome/components/switch/__init__.py +230 -0
- esphome/components/switch/automation.cpp +10 -0
- esphome/components/switch/automation.h +108 -0
- esphome/components/switch/binary_sensor/__init__.py +31 -0
- esphome/components/switch/binary_sensor/switch_binary_sensor.cpp +17 -0
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +21 -0
- esphome/components/switch/switch.cpp +115 -0
- esphome/components/switch/switch.h +150 -0
- esphome/components/sx126x/__init__.py +336 -0
- esphome/components/sx126x/automation.h +68 -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 +538 -0
- esphome/components/sx126x/sx126x.h +148 -0
- esphome/components/sx126x/sx126x_reg.h +165 -0
- esphome/components/sx127x/__init__.py +329 -0
- esphome/components/sx127x/automation.h +68 -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 +496 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/sx1509/__init__.py +154 -0
- esphome/components/sx1509/binary_sensor/__init__.py +26 -0
- esphome/components/sx1509/binary_sensor/sx1509_binary_keypad_sensor.h +19 -0
- esphome/components/sx1509/output/__init__.py +29 -0
- esphome/components/sx1509/output/sx1509_float_output.cpp +31 -0
- esphome/components/sx1509/output/sx1509_float_output.h +27 -0
- esphome/components/sx1509/sx1509.cpp +317 -0
- esphome/components/sx1509/sx1509.h +101 -0
- esphome/components/sx1509/sx1509_gpio_pin.cpp +22 -0
- esphome/components/sx1509/sx1509_gpio_pin.h +33 -0
- esphome/components/sx1509/sx1509_registers.h +110 -0
- esphome/components/syslog/__init__.py +41 -0
- esphome/components/syslog/esphome_syslog.cpp +50 -0
- esphome/components/syslog/esphome_syslog.h +29 -0
- esphome/components/t6615/__init__.py +0 -0
- esphome/components/t6615/sensor.py +46 -0
- esphome/components/t6615/t6615.cpp +97 -0
- esphome/components/t6615/t6615.h +44 -0
- esphome/components/tc74/__init__.py +1 -0
- esphome/components/tc74/sensor.py +32 -0
- esphome/components/tc74/tc74.cpp +67 -0
- esphome/components/tc74/tc74.h +28 -0
- esphome/components/tca9548a/__init__.py +43 -0
- esphome/components/tca9548a/tca9548a.cpp +48 -0
- esphome/components/tca9548a/tca9548a.h +39 -0
- esphome/components/tca9555/__init__.py +72 -0
- esphome/components/tca9555/tca9555.cpp +144 -0
- esphome/components/tca9555/tca9555.h +66 -0
- esphome/components/tcl112/__init__.py +0 -0
- esphome/components/tcl112/climate.py +14 -0
- esphome/components/tcl112/tcl112.cpp +244 -0
- esphome/components/tcl112/tcl112.h +28 -0
- esphome/components/tcs34725/__init__.py +0 -0
- esphome/components/tcs34725/sensor.py +132 -0
- esphome/components/tcs34725/tcs34725.cpp +353 -0
- esphome/components/tcs34725/tcs34725.h +90 -0
- esphome/components/tee501/__init__.py +0 -0
- esphome/components/tee501/sensor.py +36 -0
- esphome/components/tee501/tee501.cpp +66 -0
- esphome/components/tee501/tee501.h +23 -0
- esphome/components/teleinfo/__init__.py +40 -0
- esphome/components/teleinfo/sensor/__init__.py +22 -0
- esphome/components/teleinfo/sensor/teleinfo_sensor.cpp +14 -0
- esphome/components/teleinfo/sensor/teleinfo_sensor.h +16 -0
- esphome/components/teleinfo/teleinfo.cpp +209 -0
- esphome/components/teleinfo/teleinfo.h +54 -0
- esphome/components/teleinfo/text_sensor/__init__.py +21 -0
- esphome/components/teleinfo/text_sensor/teleinfo_text_sensor.cpp +11 -0
- esphome/components/teleinfo/text_sensor/teleinfo_text_sensor.h +13 -0
- esphome/components/tem3200/__init__.py +0 -0
- esphome/components/tem3200/sensor.py +54 -0
- esphome/components/tem3200/tem3200.cpp +148 -0
- esphome/components/tem3200/tem3200.h +30 -0
- esphome/components/template/__init__.py +3 -0
- esphome/components/template/alarm_control_panel/__init__.py +163 -0
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +288 -0
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +171 -0
- esphome/components/template/binary_sensor/__init__.py +68 -0
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +25 -0
- esphome/components/template/binary_sensor/template_binary_sensor.h +23 -0
- esphome/components/template/button/__init__.py +11 -0
- esphome/components/template/button/template_button.h +13 -0
- esphome/components/template/cover/__init__.py +146 -0
- esphome/components/template/cover/template_cover.cpp +135 -0
- esphome/components/template/cover/template_cover.h +65 -0
- esphome/components/template/datetime/__init__.py +150 -0
- esphome/components/template/datetime/template_date.cpp +108 -0
- esphome/components/template/datetime/template_date.h +45 -0
- esphome/components/template/datetime/template_datetime.cpp +147 -0
- esphome/components/template/datetime/template_datetime.h +45 -0
- esphome/components/template/datetime/template_time.cpp +108 -0
- esphome/components/template/datetime/template_time.h +45 -0
- esphome/components/template/event/__init__.py +21 -0
- esphome/components/template/event/template_event.h +10 -0
- esphome/components/template/fan/__init__.py +41 -0
- esphome/components/template/fan/template_fan.cpp +36 -0
- esphome/components/template/fan/template_fan.h +29 -0
- esphome/components/template/lock/__init__.py +99 -0
- esphome/components/template/lock/automation.h +16 -0
- esphome/components/template/lock/template_lock.cpp +58 -0
- esphome/components/template/lock/template_lock.h +38 -0
- esphome/components/template/number/__init__.py +94 -0
- esphome/components/template/number/template_number.cpp +53 -0
- esphome/components/template/number/template_number.h +36 -0
- esphome/components/template/output/__init__.py +48 -0
- esphome/components/template/output/template_output.h +29 -0
- esphome/components/template/select/__init__.py +92 -0
- esphome/components/template/select/template_select.cpp +65 -0
- esphome/components/template/select/template_select.h +36 -0
- esphome/components/template/sensor/__init__.py +53 -0
- esphome/components/template/sensor/template_sensor.cpp +26 -0
- esphome/components/template/sensor/template_sensor.h +23 -0
- esphome/components/template/switch/__init__.py +93 -0
- esphome/components/template/switch/template_switch.cpp +59 -0
- esphome/components/template/switch/template_switch.h +39 -0
- esphome/components/template/text/__init__.py +94 -0
- esphome/components/template/text/template_text.cpp +53 -0
- esphome/components/template/text/template_text.h +86 -0
- esphome/components/template/text_sensor/__init__.py +52 -0
- esphome/components/template/text_sensor/template_text_sensor.cpp +22 -0
- esphome/components/template/text_sensor/template_text_sensor.h +24 -0
- esphome/components/template/valve/__init__.py +130 -0
- esphome/components/template/valve/automation.h +22 -0
- esphome/components/template/valve/template_valve.cpp +129 -0
- esphome/components/template/valve/template_valve.h +59 -0
- esphome/components/text/__init__.py +173 -0
- esphome/components/text/automation.h +33 -0
- esphome/components/text/text.cpp +31 -0
- esphome/components/text/text.h +51 -0
- esphome/components/text/text_call.cpp +56 -0
- esphome/components/text/text_call.h +25 -0
- esphome/components/text/text_traits.h +41 -0
- esphome/components/text_sensor/__init__.py +260 -0
- esphome/components/text_sensor/automation.h +50 -0
- esphome/components/text_sensor/filter.cpp +104 -0
- esphome/components/text_sensor/filter.h +161 -0
- esphome/components/text_sensor/text_sensor.cpp +105 -0
- esphome/components/text_sensor/text_sensor.h +76 -0
- esphome/components/thermopro_ble/__init__.py +0 -0
- esphome/components/thermopro_ble/sensor.py +97 -0
- esphome/components/thermopro_ble/thermopro_ble.cpp +204 -0
- esphome/components/thermopro_ble/thermopro_ble.h +49 -0
- esphome/components/thermostat/__init__.py +0 -0
- esphome/components/thermostat/climate.py +1044 -0
- esphome/components/thermostat/thermostat_climate.cpp +1657 -0
- esphome/components/thermostat/thermostat_climate.h +558 -0
- esphome/components/time/__init__.py +362 -0
- esphome/components/time/automation.cpp +96 -0
- esphome/components/time/automation.h +52 -0
- esphome/components/time/real_time_clock.cpp +82 -0
- esphome/components/time/real_time_clock.h +79 -0
- esphome/components/time_based/__init__.py +0 -0
- esphome/components/time_based/cover.py +58 -0
- esphome/components/time_based/time_based_cover.cpp +186 -0
- esphome/components/time_based/time_based_cover.h +55 -0
- esphome/components/tinyusb/__init__.py +61 -0
- esphome/components/tinyusb/tinyusb_component.cpp +44 -0
- esphome/components/tinyusb/tinyusb_component.h +72 -0
- esphome/components/tlc59208f/__init__.py +26 -0
- esphome/components/tlc59208f/output.py +27 -0
- esphome/components/tlc59208f/tlc59208f_output.cpp +157 -0
- esphome/components/tlc59208f/tlc59208f_output.h +69 -0
- esphome/components/tlc5947/__init__.py +49 -0
- esphome/components/tlc5947/output/__init__.py +28 -0
- esphome/components/tlc5947/output/tlc5947_output.cpp +12 -0
- esphome/components/tlc5947/output/tlc5947_output.h +22 -0
- esphome/components/tlc5947/tlc5947.cpp +71 -0
- esphome/components/tlc5947/tlc5947.h +46 -0
- esphome/components/tlc5971/__init__.py +34 -0
- esphome/components/tlc5971/output/__init__.py +28 -0
- esphome/components/tlc5971/output/tlc5971_output.cpp +12 -0
- esphome/components/tlc5971/output/tlc5971_output.h +22 -0
- esphome/components/tlc5971/tlc5971.cpp +102 -0
- esphome/components/tlc5971/tlc5971.h +43 -0
- esphome/components/tm1621/__init__.py +1 -0
- esphome/components/tm1621/display.py +46 -0
- esphome/components/tm1621/tm1621.cpp +281 -0
- esphome/components/tm1621/tm1621.h +75 -0
- esphome/components/tm1637/__init__.py +0 -0
- esphome/components/tm1637/binary_sensor.py +25 -0
- esphome/components/tm1637/display.py +52 -0
- esphome/components/tm1637/tm1637.cpp +382 -0
- esphome/components/tm1637/tm1637.h +103 -0
- esphome/components/tm1638/__init__.py +0 -0
- esphome/components/tm1638/binary_sensor/__init__.py +22 -0
- esphome/components/tm1638/binary_sensor/tm1638_key.cpp +13 -0
- esphome/components/tm1638/binary_sensor/tm1638_key.h +19 -0
- esphome/components/tm1638/display.py +54 -0
- esphome/components/tm1638/output/__init__.py +26 -0
- esphome/components/tm1638/output/tm1638_output_led.cpp +17 -0
- esphome/components/tm1638/output/tm1638_output_led.h +25 -0
- esphome/components/tm1638/sevenseg.h +107 -0
- esphome/components/tm1638/switch/__init__.py +28 -0
- esphome/components/tm1638/switch/tm1638_switch_led.cpp +20 -0
- esphome/components/tm1638/switch/tm1638_switch_led.h +23 -0
- esphome/components/tm1638/tm1638.cpp +286 -0
- esphome/components/tm1638/tm1638.h +79 -0
- esphome/components/tm1651/__init__.py +136 -0
- esphome/components/tm1651/tm1651.cpp +260 -0
- esphome/components/tm1651/tm1651.h +101 -0
- esphome/components/tmp102/__init__.py +9 -0
- esphome/components/tmp102/sensor.py +44 -0
- esphome/components/tmp102/tmp102.cpp +52 -0
- esphome/components/tmp102/tmp102.h +19 -0
- esphome/components/tmp1075/__init__.py +1 -0
- esphome/components/tmp1075/sensor.py +92 -0
- esphome/components/tmp1075/tmp1075.cpp +128 -0
- esphome/components/tmp1075/tmp1075.h +89 -0
- esphome/components/tmp117/__init__.py +0 -0
- esphome/components/tmp117/sensor.py +80 -0
- esphome/components/tmp117/tmp117.cpp +74 -0
- esphome/components/tmp117/tmp117.h +27 -0
- esphome/components/tof10120/__init__.py +0 -0
- esphome/components/tof10120/sensor.py +34 -0
- esphome/components/tof10120/tof10120_sensor.cpp +60 -0
- esphome/components/tof10120/tof10120_sensor.h +18 -0
- esphome/components/tormatic/__init__.py +1 -0
- esphome/components/tormatic/cover.py +42 -0
- esphome/components/tormatic/tormatic_cover.cpp +357 -0
- esphome/components/tormatic/tormatic_cover.h +59 -0
- esphome/components/tormatic/tormatic_protocol.h +211 -0
- esphome/components/toshiba/__init__.py +0 -0
- esphome/components/toshiba/climate.py +29 -0
- esphome/components/toshiba/toshiba.cpp +1368 -0
- esphome/components/toshiba/toshiba.h +86 -0
- esphome/components/total_daily_energy/__init__.py +0 -0
- esphome/components/total_daily_energy/sensor.py +92 -0
- esphome/components/total_daily_energy/total_daily_energy.cpp +75 -0
- esphome/components/total_daily_energy/total_daily_energy.h +45 -0
- esphome/components/touchscreen/__init__.py +158 -0
- esphome/components/touchscreen/binary_sensor/__init__.py +86 -0
- esphome/components/touchscreen/binary_sensor/touchscreen_binary_sensor.cpp +34 -0
- esphome/components/touchscreen/binary_sensor/touchscreen_binary_sensor.h +48 -0
- esphome/components/touchscreen/touchscreen.cpp +166 -0
- esphome/components/touchscreen/touchscreen.h +119 -0
- esphome/components/tsl2561/__init__.py +0 -0
- esphome/components/tsl2561/sensor.py +69 -0
- esphome/components/tsl2561/tsl2561.cpp +165 -0
- esphome/components/tsl2561/tsl2561.h +87 -0
- esphome/components/tsl2591/__init__.py +1 -0
- esphome/components/tsl2591/sensor.py +172 -0
- esphome/components/tsl2591/tsl2591.cpp +479 -0
- esphome/components/tsl2591/tsl2591.h +276 -0
- esphome/components/tt21100/__init__.py +5 -0
- esphome/components/tt21100/binary_sensor/__init__.py +31 -0
- esphome/components/tt21100/binary_sensor/tt21100_button.cpp +27 -0
- esphome/components/tt21100/binary_sensor/tt21100_button.h +28 -0
- esphome/components/tt21100/touchscreen/__init__.py +40 -0
- esphome/components/tt21100/touchscreen/tt21100.cpp +143 -0
- esphome/components/tt21100/touchscreen/tt21100.h +43 -0
- esphome/components/ttp229_bsf/__init__.py +30 -0
- esphome/components/ttp229_bsf/binary_sensor.py +24 -0
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +22 -0
- esphome/components/ttp229_bsf/ttp229_bsf.h +55 -0
- esphome/components/ttp229_lsf/__init__.py +31 -0
- esphome/components/ttp229_lsf/binary_sensor.py +24 -0
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +44 -0
- esphome/components/ttp229_lsf/ttp229_lsf.h +37 -0
- esphome/components/tuya/__init__.py +131 -0
- esphome/components/tuya/automation.cpp +67 -0
- esphome/components/tuya/automation.h +55 -0
- esphome/components/tuya/binary_sensor/__init__.py +34 -0
- esphome/components/tuya/binary_sensor/tuya_binary_sensor.cpp +22 -0
- esphome/components/tuya/binary_sensor/tuya_binary_sensor.h +24 -0
- esphome/components/tuya/climate/__init__.py +273 -0
- esphome/components/tuya/climate/tuya_climate.cpp +495 -0
- esphome/components/tuya/climate/tuya_climate.h +129 -0
- esphome/components/tuya/cover/__init__.py +75 -0
- esphome/components/tuya/cover/tuya_cover.cpp +140 -0
- esphome/components/tuya/cover/tuya_cover.h +50 -0
- esphome/components/tuya/fan/__init__.py +47 -0
- esphome/components/tuya/fan/tuya_fan.cpp +107 -0
- esphome/components/tuya/fan/tuya_fan.h +36 -0
- esphome/components/tuya/light/__init__.py +123 -0
- esphome/components/tuya/light/tuya_light.cpp +226 -0
- esphome/components/tuya/light/tuya_light.h +71 -0
- esphome/components/tuya/number/__init__.py +98 -0
- esphome/components/tuya/number/tuya_number.cpp +95 -0
- esphome/components/tuya/number/tuya_number.h +38 -0
- esphome/components/tuya/select/__init__.py +61 -0
- esphome/components/tuya/select/tuya_select.cpp +51 -0
- esphome/components/tuya/select/tuya_select.h +36 -0
- esphome/components/tuya/sensor/__init__.py +33 -0
- esphome/components/tuya/sensor/tuya_sensor.cpp +34 -0
- esphome/components/tuya/sensor/tuya_sensor.h +24 -0
- esphome/components/tuya/switch/__init__.py +32 -0
- esphome/components/tuya/switch/tuya_switch.cpp +28 -0
- esphome/components/tuya/switch/tuya_switch.h +26 -0
- esphome/components/tuya/text_sensor/__init__.py +33 -0
- esphome/components/tuya/text_sensor/tuya_text_sensor.cpp +41 -0
- esphome/components/tuya/text_sensor/tuya_text_sensor.h +24 -0
- esphome/components/tuya/tuya.cpp +739 -0
- esphome/components/tuya/tuya.h +166 -0
- esphome/components/tx20/__init__.py +0 -0
- esphome/components/tx20/sensor.py +54 -0
- esphome/components/tx20/tx20.cpp +196 -0
- esphome/components/tx20/tx20.h +52 -0
- esphome/components/uart/__init__.py +546 -0
- esphome/components/uart/automation.h +43 -0
- esphome/components/uart/button/__init__.py +36 -0
- esphome/components/uart/button/uart_button.cpp +15 -0
- esphome/components/uart/button/uart_button.h +23 -0
- esphome/components/uart/packet_transport/__init__.py +20 -0
- esphome/components/uart/packet_transport/uart_transport.cpp +87 -0
- esphome/components/uart/packet_transport/uart_transport.h +39 -0
- esphome/components/uart/switch/__init__.py +59 -0
- esphome/components/uart/switch/uart_switch.cpp +60 -0
- esphome/components/uart/switch/uart_switch.h +35 -0
- esphome/components/uart/uart.cpp +45 -0
- esphome/components/uart/uart.h +76 -0
- esphome/components/uart/uart_component.cpp +30 -0
- esphome/components/uart/uart_component.h +201 -0
- esphome/components/uart/uart_component_esp8266.cpp +334 -0
- esphome/components/uart/uart_component_esp8266.h +91 -0
- esphome/components/uart/uart_component_esp_idf.cpp +409 -0
- esphome/components/uart/uart_component_esp_idf.h +66 -0
- esphome/components/uart/uart_component_host.cpp +299 -0
- esphome/components/uart/uart_component_host.h +35 -0
- esphome/components/uart/uart_component_libretiny.cpp +190 -0
- esphome/components/uart/uart_component_libretiny.h +40 -0
- esphome/components/uart/uart_component_rp2040.cpp +196 -0
- esphome/components/uart/uart_component_rp2040.h +43 -0
- esphome/components/uart/uart_debugger.cpp +200 -0
- esphome/components/uart/uart_debugger.h +99 -0
- esphome/components/udp/__init__.py +165 -0
- esphome/components/udp/automation.h +45 -0
- esphome/components/udp/binary_sensor.py +5 -0
- esphome/components/udp/packet_transport/__init__.py +29 -0
- esphome/components/udp/packet_transport/udp_transport.cpp +36 -0
- esphome/components/udp/packet_transport/udp_transport.h +28 -0
- esphome/components/udp/sensor.py +5 -0
- esphome/components/udp/udp_component.cpp +164 -0
- esphome/components/udp/udp_component.h +59 -0
- esphome/components/ufire_ec/__init__.py +1 -0
- esphome/components/ufire_ec/sensor.py +125 -0
- esphome/components/ufire_ec/ufire_ec.cpp +118 -0
- esphome/components/ufire_ec/ufire_ec.h +87 -0
- esphome/components/ufire_ise/__init__.py +1 -0
- esphome/components/ufire_ise/sensor.py +126 -0
- esphome/components/ufire_ise/ufire_ise.cpp +151 -0
- esphome/components/ufire_ise/ufire_ise.h +95 -0
- esphome/components/uln2003/__init__.py +0 -0
- esphome/components/uln2003/stepper.py +56 -0
- esphome/components/uln2003/uln2003.cpp +92 -0
- esphome/components/uln2003/uln2003.h +44 -0
- esphome/components/ultrasonic/__init__.py +1 -0
- esphome/components/ultrasonic/sensor.py +53 -0
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +64 -0
- esphome/components/ultrasonic/ultrasonic_sensor.h +46 -0
- esphome/components/update/__init__.py +160 -0
- esphome/components/update/automation.h +23 -0
- esphome/components/update/update_entity.cpp +42 -0
- esphome/components/update/update_entity.h +58 -0
- esphome/components/uponor_smatrix/__init__.py +81 -0
- esphome/components/uponor_smatrix/climate/__init__.py +28 -0
- esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +101 -0
- esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.h +28 -0
- esphome/components/uponor_smatrix/sensor/__init__.py +80 -0
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +44 -0
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.h +24 -0
- esphome/components/uponor_smatrix/uponor_smatrix.cpp +217 -0
- esphome/components/uponor_smatrix/uponor_smatrix.h +127 -0
- esphome/components/uptime/__init__.py +0 -0
- esphome/components/uptime/sensor/__init__.py +61 -0
- esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +37 -0
- esphome/components/uptime/sensor/uptime_seconds_sensor.h +21 -0
- esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +39 -0
- esphome/components/uptime/sensor/uptime_timestamp_sensor.h +30 -0
- esphome/components/uptime/text_sensor/__init__.py +59 -0
- esphome/components/uptime/text_sensor/uptime_text_sensor.cpp +68 -0
- esphome/components/uptime/text_sensor/uptime_text_sensor.h +44 -0
- esphome/components/usb_cdc_acm/__init__.py +76 -0
- esphome/components/usb_cdc_acm/usb_cdc_acm.cpp +495 -0
- esphome/components/usb_cdc_acm/usb_cdc_acm.h +135 -0
- esphome/components/usb_host/__init__.py +83 -0
- esphome/components/usb_host/usb_host.h +191 -0
- esphome/components/usb_host/usb_host_client.cpp +534 -0
- esphome/components/usb_host/usb_host_component.cpp +34 -0
- esphome/components/usb_uart/__init__.py +138 -0
- esphome/components/usb_uart/ch34x.cpp +81 -0
- esphome/components/usb_uart/cp210x.cpp +126 -0
- esphome/components/usb_uart/usb_uart.cpp +395 -0
- esphome/components/usb_uart/usb_uart.h +176 -0
- esphome/components/valve/__init__.py +233 -0
- esphome/components/valve/automation.h +111 -0
- esphome/components/valve/valve.cpp +185 -0
- esphome/components/valve/valve.h +153 -0
- esphome/components/valve/valve_traits.h +27 -0
- esphome/components/vbus/__init__.py +33 -0
- esphome/components/vbus/binary_sensor/__init__.py +349 -0
- esphome/components/vbus/binary_sensor/vbus_binary_sensor.cpp +165 -0
- esphome/components/vbus/binary_sensor/vbus_binary_sensor.h +136 -0
- esphome/components/vbus/sensor/__init__.py +691 -0
- esphome/components/vbus/sensor/vbus_sensor.cpp +250 -0
- esphome/components/vbus/sensor/vbus_sensor.h +182 -0
- esphome/components/vbus/vbus.cpp +125 -0
- esphome/components/vbus/vbus.h +51 -0
- esphome/components/veml3235/__init__.py +0 -0
- esphome/components/veml3235/sensor.py +84 -0
- esphome/components/veml3235/veml3235.cpp +229 -0
- esphome/components/veml3235/veml3235.h +108 -0
- esphome/components/veml7700/__init__.py +1 -0
- esphome/components/veml7700/sensor.py +190 -0
- esphome/components/veml7700/veml7700.cpp +438 -0
- esphome/components/veml7700/veml7700.h +200 -0
- esphome/components/version/__init__.py +1 -0
- esphome/components/version/text_sensor.py +29 -0
- esphome/components/version/version_text_sensor.cpp +24 -0
- esphome/components/version/version_text_sensor.h +21 -0
- esphome/components/vl53l0x/LICENSE.txt +80 -0
- esphome/components/vl53l0x/__init__.py +0 -0
- esphome/components/vl53l0x/sensor.py +87 -0
- esphome/components/vl53l0x/vl53l0x_sensor.cpp +534 -0
- esphome/components/vl53l0x/vl53l0x_sensor.h +75 -0
- esphome/components/voice_assistant/__init__.py +435 -0
- esphome/components/voice_assistant/voice_assistant.cpp +999 -0
- esphome/components/voice_assistant/voice_assistant.h +363 -0
- esphome/components/voltage_sampler/__init__.py +4 -0
- esphome/components/voltage_sampler/voltage_sampler.h +16 -0
- esphome/components/wake_on_lan/__init__.py +1 -0
- esphome/components/wake_on_lan/button.py +37 -0
- esphome/components/wake_on_lan/wake_on_lan.cpp +89 -0
- esphome/components/wake_on_lan/wake_on_lan.h +36 -0
- esphome/components/watchdog/__init__.py +1 -0
- esphome/components/watchdog/watchdog.cpp +71 -0
- esphome/components/watchdog/watchdog.h +24 -0
- esphome/components/waveshare_epaper/__init__.py +1 -0
- esphome/components/waveshare_epaper/display.py +261 -0
- esphome/components/waveshare_epaper/waveshare_213v3.cpp +192 -0
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +4754 -0
- esphome/components/waveshare_epaper/waveshare_epaper.h +1103 -0
- esphome/components/web_server/__init__.py +348 -0
- esphome/components/web_server/list_entities.cpp +155 -0
- esphome/components/web_server/list_entities.h +101 -0
- esphome/components/web_server/ota/__init__.py +89 -0
- esphome/components/web_server/ota/ota_web_server.cpp +246 -0
- esphome/components/web_server/ota/ota_web_server.h +26 -0
- esphome/components/web_server/server_index_v2.h +651 -0
- esphome/components/web_server/server_index_v3.h +4055 -0
- esphome/components/web_server/web_server.cpp +2088 -0
- esphome/components/web_server/web_server.h +604 -0
- esphome/components/web_server/web_server_v1.cpp +219 -0
- esphome/components/web_server_base/__init__.py +49 -0
- esphome/components/web_server_base/web_server_base.cpp +35 -0
- esphome/components/web_server_base/web_server_base.h +142 -0
- esphome/components/web_server_idf/__init__.py +14 -0
- 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 +125 -0
- esphome/components/web_server_idf/utils.h +27 -0
- esphome/components/web_server_idf/web_server_idf.cpp +895 -0
- esphome/components/web_server_idf/web_server_idf.h +353 -0
- esphome/components/weikai/__init__.py +110 -0
- esphome/components/weikai/weikai.cpp +565 -0
- esphome/components/weikai/weikai.h +445 -0
- esphome/components/weikai/wk_reg_def.h +304 -0
- esphome/components/weikai_i2c/__init__.py +1 -0
- esphome/components/weikai_i2c/weikai_i2c.cpp +181 -0
- esphome/components/weikai_i2c/weikai_i2c.h +61 -0
- esphome/components/weikai_spi/__init__.py +1 -0
- esphome/components/weikai_spi/weikai_spi.cpp +194 -0
- esphome/components/weikai_spi/weikai_spi.h +54 -0
- esphome/components/whirlpool/__init__.py +0 -0
- esphome/components/whirlpool/climate.py +27 -0
- esphome/components/whirlpool/whirlpool.cpp +296 -0
- esphome/components/whirlpool/whirlpool.h +65 -0
- esphome/components/whynter/__init__.py +1 -0
- esphome/components/whynter/climate.py +21 -0
- esphome/components/whynter/whynter.cpp +181 -0
- esphome/components/whynter/whynter.h +53 -0
- esphome/components/wiegand/__init__.py +77 -0
- esphome/components/wiegand/wiegand.cpp +127 -0
- esphome/components/wiegand/wiegand.h +54 -0
- esphome/components/wifi/__init__.py +711 -0
- esphome/components/wifi/automation.h +116 -0
- esphome/components/wifi/wifi_component.cpp +1830 -0
- esphome/components/wifi/wifi_component.h +666 -0
- esphome/components/wifi/wifi_component_esp8266.cpp +920 -0
- esphome/components/wifi/wifi_component_esp_idf.cpp +1124 -0
- esphome/components/wifi/wifi_component_libretiny.cpp +551 -0
- esphome/components/wifi/wifi_component_pico_w.cpp +301 -0
- esphome/components/wifi/wpa2_eap.py +152 -0
- esphome/components/wifi_info/__init__.py +0 -0
- esphome/components/wifi_info/text_sensor.py +109 -0
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +172 -0
- esphome/components/wifi_info/wifi_info_text_sensor.h +89 -0
- esphome/components/wifi_signal/__init__.py +0 -0
- esphome/components/wifi_signal/sensor.py +30 -0
- esphome/components/wifi_signal/wifi_signal_sensor.cpp +12 -0
- esphome/components/wifi_signal/wifi_signal_sensor.h +31 -0
- esphome/components/wireguard/__init__.py +175 -0
- esphome/components/wireguard/binary_sensor.py +35 -0
- esphome/components/wireguard/sensor.py +26 -0
- esphome/components/wireguard/text_sensor.py +23 -0
- esphome/components/wireguard/wireguard.cpp +300 -0
- esphome/components/wireguard/wireguard.h +174 -0
- esphome/components/wk2132_i2c/__init__.py +30 -0
- esphome/components/wk2132_i2c/wk2132_i2c.cpp +4 -0
- esphome/components/wk2132_spi/__init__.py +30 -0
- esphome/components/wk2168_i2c/__init__.py +59 -0
- esphome/components/wk2168_spi/__init__.py +57 -0
- esphome/components/wk2204_i2c/__init__.py +30 -0
- esphome/components/wk2204_spi/__init__.py +30 -0
- esphome/components/wk2212_i2c/__init__.py +59 -0
- esphome/components/wk2212_spi/__init__.py +57 -0
- esphome/components/wl_134/__init__.py +0 -0
- esphome/components/wl_134/text_sensor.py +28 -0
- esphome/components/wl_134/wl_134.cpp +113 -0
- esphome/components/wl_134/wl_134.h +63 -0
- esphome/components/wled/__init__.py +30 -0
- esphome/components/wled/wled_light_effect.cpp +287 -0
- esphome/components/wled/wled_light_effect.h +47 -0
- esphome/components/wts01/__init__.py +0 -0
- esphome/components/wts01/sensor.py +41 -0
- esphome/components/wts01/wts01.cpp +91 -0
- esphome/components/wts01/wts01.h +27 -0
- esphome/components/x9c/__init__.py +0 -0
- esphome/components/x9c/output.py +55 -0
- esphome/components/x9c/x9c.cpp +77 -0
- esphome/components/x9c/x9c.h +34 -0
- esphome/components/xgzp68xx/__init__.py +1 -0
- esphome/components/xgzp68xx/sensor.py +81 -0
- esphome/components/xgzp68xx/xgzp68xx.cpp +122 -0
- esphome/components/xgzp68xx/xgzp68xx.h +47 -0
- esphome/components/xiaomi_ble/__init__.py +22 -0
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +410 -0
- esphome/components/xiaomi_ble/xiaomi_ble.h +84 -0
- esphome/components/xiaomi_cgd1/__init__.py +0 -0
- esphome/components/xiaomi_cgd1/sensor.py +76 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +75 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +35 -0
- esphome/components/xiaomi_cgdk2/__init__.py +0 -0
- esphome/components/xiaomi_cgdk2/sensor.py +76 -0
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +75 -0
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +35 -0
- esphome/components/xiaomi_cgg1/__init__.py +0 -0
- esphome/components/xiaomi_cgg1/sensor.py +77 -0
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +75 -0
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +36 -0
- esphome/components/xiaomi_cgpr1/__init__.py +0 -0
- esphome/components/xiaomi_cgpr1/binary_sensor.py +77 -0
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.cpp +75 -0
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +39 -0
- esphome/components/xiaomi_gcls002/__init__.py +0 -0
- esphome/components/xiaomi_gcls002/sensor.py +84 -0
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.cpp +62 -0
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +36 -0
- esphome/components/xiaomi_hhccjcy01/__init__.py +0 -0
- esphome/components/xiaomi_hhccjcy01/sensor.py +97 -0
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.cpp +65 -0
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +38 -0
- esphome/components/xiaomi_hhccjcy10/__init__.py +1 -0
- esphome/components/xiaomi_hhccjcy10/sensor.py +96 -0
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +68 -0
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +37 -0
- esphome/components/xiaomi_hhccpot002/__init__.py +0 -0
- esphome/components/xiaomi_hhccpot002/sensor.py +60 -0
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.cpp +56 -0
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +32 -0
- esphome/components/xiaomi_jqjcy01ym/__init__.py +0 -0
- esphome/components/xiaomi_jqjcy01ym/sensor.py +85 -0
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.cpp +62 -0
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +36 -0
- esphome/components/xiaomi_lywsd02/__init__.py +0 -0
- esphome/components/xiaomi_lywsd02/sensor.py +73 -0
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.cpp +59 -0
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +34 -0
- esphome/components/xiaomi_lywsd02mmc/__init__.py +0 -0
- esphome/components/xiaomi_lywsd02mmc/sensor.py +77 -0
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +75 -0
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +36 -0
- esphome/components/xiaomi_lywsd03mmc/__init__.py +0 -0
- esphome/components/xiaomi_lywsd03mmc/sensor.py +78 -0
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +79 -0
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +35 -0
- esphome/components/xiaomi_lywsdcgq/__init__.py +0 -0
- esphome/components/xiaomi_lywsdcgq/sensor.py +73 -0
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.cpp +59 -0
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +34 -0
- esphome/components/xiaomi_mhoc303/__init__.py +1 -0
- esphome/components/xiaomi_mhoc303/sensor.py +73 -0
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.cpp +59 -0
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +34 -0
- esphome/components/xiaomi_mhoc401/__init__.py +0 -0
- esphome/components/xiaomi_mhoc401/sensor.py +77 -0
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +79 -0
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +35 -0
- esphome/components/xiaomi_miscale/__init__.py +0 -0
- esphome/components/xiaomi_miscale/sensor.py +62 -0
- esphome/components/xiaomi_miscale/xiaomi_miscale.cpp +169 -0
- esphome/components/xiaomi_miscale/xiaomi_miscale.h +46 -0
- esphome/components/xiaomi_miscale2/__init__.py +0 -0
- esphome/components/xiaomi_miscale2/sensor.py +5 -0
- esphome/components/xiaomi_mjyd02yla/__init__.py +0 -0
- esphome/components/xiaomi_mjyd02yla/binary_sensor.py +89 -0
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.cpp +78 -0
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +41 -0
- esphome/components/xiaomi_mue4094rt/__init__.py +0 -0
- esphome/components/xiaomi_mue4094rt/binary_sensor.py +40 -0
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.cpp +55 -0
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +32 -0
- esphome/components/xiaomi_rtcgq02lm/__init__.py +35 -0
- esphome/components/xiaomi_rtcgq02lm/binary_sensor.py +63 -0
- esphome/components/xiaomi_rtcgq02lm/sensor.py +37 -0
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.cpp +91 -0
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +60 -0
- esphome/components/xiaomi_wx08zm/__init__.py +0 -0
- esphome/components/xiaomi_wx08zm/binary_sensor.py +63 -0
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.cpp +60 -0
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +35 -0
- 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/xl9535/__init__.py +79 -0
- esphome/components/xl9535/xl9535.cpp +120 -0
- esphome/components/xl9535/xl9535.h +56 -0
- esphome/components/xpt2046/__init__.py +5 -0
- esphome/components/xpt2046/touchscreen/__init__.py +43 -0
- esphome/components/xpt2046/touchscreen/xpt2046.cpp +113 -0
- esphome/components/xpt2046/touchscreen/xpt2046.h +41 -0
- esphome/components/xxtea/__init__.py +3 -0
- esphome/components/xxtea/xxtea.cpp +46 -0
- esphome/components/xxtea/xxtea.h +26 -0
- esphome/components/yashima/__init__.py +0 -0
- esphome/components/yashima/climate.py +39 -0
- esphome/components/yashima/yashima.cpp +199 -0
- esphome/components/yashima/yashima.h +40 -0
- esphome/components/zephyr/__init__.py +263 -0
- esphome/components/zephyr/const.py +16 -0
- esphome/components/zephyr/core.cpp +98 -0
- esphome/components/zephyr/gpio.cpp +123 -0
- esphome/components/zephyr/gpio.h +38 -0
- esphome/components/zephyr/pre_build.py.script +4 -0
- esphome/components/zephyr/preferences.cpp +156 -0
- esphome/components/zephyr/preferences.h +13 -0
- esphome/components/zephyr_ble_server/__init__.py +34 -0
- esphome/components/zephyr_ble_server/ble_server.cpp +100 -0
- esphome/components/zephyr_ble_server/ble_server.h +19 -0
- esphome/components/zhlt01/__init__.py +0 -0
- esphome/components/zhlt01/climate.py +14 -0
- esphome/components/zhlt01/zhlt01.cpp +238 -0
- esphome/components/zhlt01/zhlt01.h +167 -0
- esphome/components/zio_ultrasonic/__init__.py +0 -0
- esphome/components/zio_ultrasonic/sensor.py +31 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.cpp +31 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.h +20 -0
- esphome/components/zwave_proxy/__init__.py +46 -0
- esphome/components/zwave_proxy/zwave_proxy.cpp +346 -0
- esphome/components/zwave_proxy/zwave_proxy.h +91 -0
- esphome/components/zyaura/__init__.py +0 -0
- esphome/components/zyaura/sensor.py +71 -0
- esphome/components/zyaura/zyaura.cpp +125 -0
- esphome/components/zyaura/zyaura.h +85 -0
- esphome/config.py +1356 -0
- esphome/config_helpers.py +155 -0
- esphome/config_validation.py +2220 -0
- esphome/const.py +1378 -0
- esphome/core/__init__.py +974 -0
- esphome/core/application.cpp +714 -0
- esphome/core/application.h +646 -0
- esphome/core/area.h +19 -0
- esphome/core/automation.h +367 -0
- esphome/core/base_automation.h +554 -0
- esphome/core/color.cpp +23 -0
- esphome/core/color.h +188 -0
- esphome/core/component.cpp +506 -0
- esphome/core/component.h +530 -0
- esphome/core/component_iterator.cpp +197 -0
- esphome/core/component_iterator.h +192 -0
- esphome/core/config.py +639 -0
- esphome/core/controller.h +134 -0
- esphome/core/controller_registry.cpp +114 -0
- esphome/core/controller_registry.h +245 -0
- esphome/core/datatypes.h +61 -0
- esphome/core/defines.h +337 -0
- esphome/core/device.h +20 -0
- esphome/core/doxygen.h +13 -0
- esphome/core/entity_base.cpp +109 -0
- esphome/core/entity_base.h +253 -0
- esphome/core/entity_helpers.py +272 -0
- esphome/core/event_pool.h +81 -0
- esphome/core/finite_set_mask.h +171 -0
- esphome/core/gpio.h +106 -0
- esphome/core/hal.h +53 -0
- esphome/core/hash_base.h +56 -0
- esphome/core/helpers.cpp +711 -0
- esphome/core/helpers.h +1253 -0
- esphome/core/lock_free_queue.h +146 -0
- esphome/core/log.cpp +62 -0
- esphome/core/log.h +204 -0
- esphome/core/log_const_en.h +4 -0
- esphome/core/macros.h +12 -0
- esphome/core/optional.h +220 -0
- esphome/core/preferences.h +70 -0
- esphome/core/progmem.h +16 -0
- esphome/core/ring_buffer.cpp +131 -0
- esphome/core/ring_buffer.h +99 -0
- esphome/core/scheduler.cpp +822 -0
- esphome/core/scheduler.h +508 -0
- esphome/core/string_ref.h +147 -0
- esphome/core/template_lambda.h +51 -0
- esphome/core/time.cpp +224 -0
- esphome/core/time.h +126 -0
- esphome/core/util.cpp +37 -0
- esphome/core/util.h +15 -0
- esphome/core/version.h +12 -0
- esphome/coroutine.py +348 -0
- esphome/cpp_generator.py +1041 -0
- esphome/cpp_helpers.py +126 -0
- esphome/cpp_types.py +46 -0
- esphome/dashboard/__init__.py +0 -0
- esphome/dashboard/const.py +29 -0
- esphome/dashboard/core.py +190 -0
- esphome/dashboard/dashboard.py +152 -0
- esphome/dashboard/dns.py +58 -0
- esphome/dashboard/entries.py +458 -0
- esphome/dashboard/models.py +76 -0
- esphome/dashboard/settings.py +98 -0
- esphome/dashboard/status/__init__.py +0 -0
- esphome/dashboard/status/mdns.py +170 -0
- esphome/dashboard/status/mqtt.py +78 -0
- esphome/dashboard/status/ping.py +151 -0
- esphome/dashboard/util/__init__.py +0 -0
- esphome/dashboard/util/itertools.py +22 -0
- esphome/dashboard/util/password.py +11 -0
- esphome/dashboard/util/subprocess.py +31 -0
- esphome/dashboard/util/text.py +9 -0
- esphome/dashboard/web_server.py +1620 -0
- esphome/enum.py +20 -0
- esphome/espota2.py +445 -0
- esphome/external_files.py +106 -0
- esphome/final_validate.py +58 -0
- esphome/git.py +283 -0
- esphome/helpers.py +559 -0
- esphome/loader.py +233 -0
- esphome/log.py +93 -0
- esphome/mqtt.py +305 -0
- esphome/pins.py +340 -0
- esphome/platformio_api.py +422 -0
- esphome/resolver.py +67 -0
- esphome/schema_extractors.py +92 -0
- esphome/storage_json.py +303 -0
- esphome/types.py +58 -0
- esphome/util.py +380 -0
- esphome/voluptuous_schema.py +234 -0
- esphome/vscode.py +146 -0
- esphome/wizard.py +559 -0
- esphome/writer.py +412 -0
- esphome/yaml_util.py +635 -0
- esphome/zeroconf.py +202 -0
- esphome-2025.12.0b2.dist-info/METADATA +86 -0
- esphome-2025.12.0b2.dist-info/RECORD +3896 -0
- esphome-2025.12.0b2.dist-info/WHEEL +5 -0
- esphome-2025.12.0b2.dist-info/entry_points.txt +2 -0
- esphome-2025.12.0b2.dist-info/licenses/LICENSE +709 -0
- esphome-2025.12.0b2.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,1830 @@
|
|
|
1
|
+
#include "wifi_component.h"
|
|
2
|
+
#ifdef USE_WIFI
|
|
3
|
+
#include <cassert>
|
|
4
|
+
#include <cinttypes>
|
|
5
|
+
|
|
6
|
+
#ifdef USE_ESP32
|
|
7
|
+
#if (ESP_IDF_VERSION_MAJOR >= 5 && ESP_IDF_VERSION_MINOR >= 1)
|
|
8
|
+
#include <esp_eap_client.h>
|
|
9
|
+
#else
|
|
10
|
+
#include <esp_wpa2.h>
|
|
11
|
+
#endif
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
#if defined(USE_ESP32)
|
|
15
|
+
#include <esp_wifi.h>
|
|
16
|
+
#endif
|
|
17
|
+
#ifdef USE_ESP8266
|
|
18
|
+
#include <user_interface.h>
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
#include <algorithm>
|
|
22
|
+
#include <utility>
|
|
23
|
+
#include "lwip/dns.h"
|
|
24
|
+
#include "lwip/err.h"
|
|
25
|
+
|
|
26
|
+
#include "esphome/core/application.h"
|
|
27
|
+
#include "esphome/core/hal.h"
|
|
28
|
+
#include "esphome/core/helpers.h"
|
|
29
|
+
#include "esphome/core/log.h"
|
|
30
|
+
#include "esphome/core/util.h"
|
|
31
|
+
|
|
32
|
+
#ifdef USE_CAPTIVE_PORTAL
|
|
33
|
+
#include "esphome/components/captive_portal/captive_portal.h"
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
#ifdef USE_IMPROV
|
|
37
|
+
#include "esphome/components/esp32_improv/esp32_improv_component.h"
|
|
38
|
+
#endif
|
|
39
|
+
|
|
40
|
+
namespace esphome::wifi {
|
|
41
|
+
|
|
42
|
+
static const char *const TAG = "wifi";
|
|
43
|
+
|
|
44
|
+
/// WiFi Retry Logic - Priority-Based BSSID Selection
|
|
45
|
+
///
|
|
46
|
+
/// The WiFi component uses a state machine with priority degradation to handle connection failures
|
|
47
|
+
/// and automatically cycle through different BSSIDs in mesh networks or multiple configured networks.
|
|
48
|
+
///
|
|
49
|
+
/// Connection Flow:
|
|
50
|
+
/// ┌──────────────────────────────────────────────────────────────────────┐
|
|
51
|
+
/// │ Fast Connect Path (Optional) │
|
|
52
|
+
/// ├──────────────────────────────────────────────────────────────────────┤
|
|
53
|
+
/// │ Entered if: configuration has 'fast_connect: true' │
|
|
54
|
+
/// │ Optimization to skip scanning when possible: │
|
|
55
|
+
/// │ │
|
|
56
|
+
/// │ 1. INITIAL_CONNECT → Try one of: │
|
|
57
|
+
/// │ a) Saved BSSID+channel (from previous boot) │
|
|
58
|
+
/// │ b) First configured non-hidden network (any BSSID) │
|
|
59
|
+
/// │ ↓ │
|
|
60
|
+
/// │ [FAILED] → Check if more configured networks available │
|
|
61
|
+
/// │ ↓ │
|
|
62
|
+
/// │ 2. FAST_CONNECT_CYCLING_APS → Try remaining configured networks │
|
|
63
|
+
/// │ (1 attempt each, any BSSID) │
|
|
64
|
+
/// │ ↓ │
|
|
65
|
+
/// │ [All Failed] → Fall through to explicit hidden or scanning │
|
|
66
|
+
/// │ │
|
|
67
|
+
/// │ Note: Fast connect data saved from previous successful connection │
|
|
68
|
+
/// └──────────────────────────────────────────────────────────────────────┘
|
|
69
|
+
/// ↓
|
|
70
|
+
/// ┌──────────────────────────────────────────────────────────────────────┐
|
|
71
|
+
/// │ Explicit Hidden Networks Path (Optional) │
|
|
72
|
+
/// ├──────────────────────────────────────────────────────────────────────┤
|
|
73
|
+
/// │ Entered if: first configured network has 'hidden: true' │
|
|
74
|
+
/// │ │
|
|
75
|
+
/// │ 1. EXPLICIT_HIDDEN → Try consecutive hidden networks (1 attempt) │
|
|
76
|
+
/// │ Stop when visible network reached │
|
|
77
|
+
/// │ ↓ │
|
|
78
|
+
/// │ Example: Hidden1, Hidden2, Visible1, Hidden3, Visible2 │
|
|
79
|
+
/// │ Try: Hidden1, Hidden2 (stop at Visible1) │
|
|
80
|
+
/// │ ↓ │
|
|
81
|
+
/// │ [All Failed] → Fall back to scan-based connection │
|
|
82
|
+
/// │ │
|
|
83
|
+
/// │ Note: Fast connect saves BSSID after first successful connection, │
|
|
84
|
+
/// │ so subsequent boots use fast path instead of hidden mode │
|
|
85
|
+
/// └──────────────────────────────────────────────────────────────────────┘
|
|
86
|
+
/// ↓
|
|
87
|
+
/// ┌──────────────────────────────────────────────────────────────────────┐
|
|
88
|
+
/// │ Scan-Based Connection Path │
|
|
89
|
+
/// ├──────────────────────────────────────────────────────────────────────┤
|
|
90
|
+
/// │ │
|
|
91
|
+
/// │ 1. SCAN → Sort by priority (highest first), then RSSI │
|
|
92
|
+
/// │ ┌─────────────────────────────────────────────────┐ │
|
|
93
|
+
/// │ │ scan_result_[0] = Best BSSID (highest priority) │ │
|
|
94
|
+
/// │ │ scan_result_[1] = Second best │ │
|
|
95
|
+
/// │ │ scan_result_[2] = Third best │ │
|
|
96
|
+
/// │ └─────────────────────────────────────────────────┘ │
|
|
97
|
+
/// │ ↓ │
|
|
98
|
+
/// │ 2. SCAN_CONNECTING → Try scan_result_[0] (2 attempts) │
|
|
99
|
+
/// │ (Visible1, Visible2 from example above) │
|
|
100
|
+
/// │ ↓ │
|
|
101
|
+
/// │ 3. FAILED → Decrease priority: 0.0 → -1.0 → -2.0 │
|
|
102
|
+
/// │ (stored in persistent sta_priorities_) │
|
|
103
|
+
/// │ ↓ │
|
|
104
|
+
/// │ 4. Check for hidden networks: │
|
|
105
|
+
/// │ - If found → RETRY_HIDDEN (try SSIDs not in scan, 1 attempt) │
|
|
106
|
+
/// │ Skip hidden networks before first visible one │
|
|
107
|
+
/// │ (Skip Hidden1/Hidden2, try Hidden3 from example) │
|
|
108
|
+
/// │ - If none → Skip RETRY_HIDDEN, go to step 5 │
|
|
109
|
+
/// │ ↓ │
|
|
110
|
+
/// │ 5. FAILED → RESTARTING_ADAPTER (skipped if AP/improv active) │
|
|
111
|
+
/// │ ↓ │
|
|
112
|
+
/// │ 6. Loop back to start: │
|
|
113
|
+
/// │ - If first network is hidden → EXPLICIT_HIDDEN (retry cycle) │
|
|
114
|
+
/// │ - Otherwise → SCAN_CONNECTING (rescan) │
|
|
115
|
+
/// │ ↓ │
|
|
116
|
+
/// │ 7. RESCAN → Apply stored priorities, sort again │
|
|
117
|
+
/// │ ┌─────────────────────────────────────────────────┐ │
|
|
118
|
+
/// │ │ scan_result_[0] = BSSID B (priority 0.0) ← NEW │ │
|
|
119
|
+
/// │ │ scan_result_[1] = BSSID C (priority 0.0) │ │
|
|
120
|
+
/// │ │ scan_result_[2] = BSSID A (priority -2.0) ← OLD │ │
|
|
121
|
+
/// │ └─────────────────────────────────────────────────┘ │
|
|
122
|
+
/// │ ↓ │
|
|
123
|
+
/// │ 8. SCAN_CONNECTING → Try scan_result_[0] (next best) │
|
|
124
|
+
/// │ │
|
|
125
|
+
/// │ Key: Priority system cycles through BSSIDs ACROSS scan cycles │
|
|
126
|
+
/// │ Full retry cycle: EXPLICIT_HIDDEN → SCAN → RETRY_HIDDEN │
|
|
127
|
+
/// │ Always try best available BSSID (scan_result_[0]) │
|
|
128
|
+
/// └──────────────────────────────────────────────────────────────────────┘
|
|
129
|
+
///
|
|
130
|
+
/// Retry Phases:
|
|
131
|
+
/// - INITIAL_CONNECT: Try saved BSSID+channel (fast_connect), or fall back to normal flow
|
|
132
|
+
/// - FAST_CONNECT_CYCLING_APS: Cycle through remaining configured networks (1 attempt each, fast_connect only)
|
|
133
|
+
/// - EXPLICIT_HIDDEN: Try consecutive networks marked hidden:true before scanning (1 attempt per SSID)
|
|
134
|
+
/// - SCAN_CONNECTING: Connect using scan results (2 attempts per BSSID)
|
|
135
|
+
/// - RETRY_HIDDEN: Try networks not found in scan (1 attempt per SSID, skipped if none found)
|
|
136
|
+
/// - RESTARTING_ADAPTER: Restart WiFi adapter to clear stuck state
|
|
137
|
+
///
|
|
138
|
+
/// Hidden Network Handling:
|
|
139
|
+
/// - Networks marked 'hidden: true' before first non-hidden → Tried in EXPLICIT_HIDDEN phase
|
|
140
|
+
/// - Networks marked 'hidden: true' after first non-hidden → Tried in RETRY_HIDDEN phase
|
|
141
|
+
/// - After successful connection, fast_connect saves BSSID → subsequent boots use fast path
|
|
142
|
+
/// - Networks not in scan results → Tried in RETRY_HIDDEN phase
|
|
143
|
+
/// - Networks visible in scan + not marked hidden → Skipped in RETRY_HIDDEN phase
|
|
144
|
+
/// - Networks marked 'hidden: true' always use hidden mode, even if broadcasting SSID
|
|
145
|
+
|
|
146
|
+
static const LogString *retry_phase_to_log_string(WiFiRetryPhase phase) {
|
|
147
|
+
switch (phase) {
|
|
148
|
+
case WiFiRetryPhase::INITIAL_CONNECT:
|
|
149
|
+
return LOG_STR("INITIAL_CONNECT");
|
|
150
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
151
|
+
case WiFiRetryPhase::FAST_CONNECT_CYCLING_APS:
|
|
152
|
+
return LOG_STR("FAST_CONNECT_CYCLING");
|
|
153
|
+
#endif
|
|
154
|
+
case WiFiRetryPhase::EXPLICIT_HIDDEN:
|
|
155
|
+
return LOG_STR("EXPLICIT_HIDDEN");
|
|
156
|
+
case WiFiRetryPhase::SCAN_CONNECTING:
|
|
157
|
+
return LOG_STR("SCAN_CONNECTING");
|
|
158
|
+
case WiFiRetryPhase::RETRY_HIDDEN:
|
|
159
|
+
return LOG_STR("RETRY_HIDDEN");
|
|
160
|
+
case WiFiRetryPhase::RESTARTING_ADAPTER:
|
|
161
|
+
return LOG_STR("RESTARTING");
|
|
162
|
+
default:
|
|
163
|
+
return LOG_STR("UNKNOWN");
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
bool WiFiComponent::went_through_explicit_hidden_phase_() const {
|
|
168
|
+
// If first configured network is marked hidden, we went through EXPLICIT_HIDDEN phase
|
|
169
|
+
// This means those networks were already tried and should be skipped in RETRY_HIDDEN
|
|
170
|
+
return !this->sta_.empty() && this->sta_[0].get_hidden();
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
int8_t WiFiComponent::find_first_non_hidden_index_() const {
|
|
174
|
+
// Find the first network that is NOT marked hidden:true
|
|
175
|
+
// This is where EXPLICIT_HIDDEN phase would have stopped
|
|
176
|
+
for (size_t i = 0; i < this->sta_.size(); i++) {
|
|
177
|
+
if (!this->sta_[i].get_hidden()) {
|
|
178
|
+
return static_cast<int8_t>(i);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return -1; // All networks are hidden
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// 2 attempts per BSSID in SCAN_CONNECTING phase
|
|
185
|
+
// Rationale: This is the ONLY phase where we decrease BSSID priority, so we must be very sure.
|
|
186
|
+
// Auth failures are common immediately after scan due to WiFi stack state transitions.
|
|
187
|
+
// Trying twice filters out false positives and prevents unnecessarily marking a good BSSID as bad.
|
|
188
|
+
// After 2 genuine failures, priority degradation ensures we skip this BSSID on subsequent scans.
|
|
189
|
+
static constexpr uint8_t WIFI_RETRY_COUNT_PER_BSSID = 2;
|
|
190
|
+
|
|
191
|
+
// 1 attempt per SSID in RETRY_HIDDEN phase
|
|
192
|
+
// Rationale: Try hidden mode once, then rescan to get next best BSSID via priority system
|
|
193
|
+
static constexpr uint8_t WIFI_RETRY_COUNT_PER_SSID = 1;
|
|
194
|
+
|
|
195
|
+
// 1 attempt per AP in fast_connect mode (INITIAL_CONNECT and FAST_CONNECT_CYCLING_APS)
|
|
196
|
+
// Rationale: Fast connect prioritizes speed - try each AP once to find a working one quickly
|
|
197
|
+
static constexpr uint8_t WIFI_RETRY_COUNT_PER_AP = 1;
|
|
198
|
+
|
|
199
|
+
/// Cooldown duration in milliseconds after adapter restart or repeated failures
|
|
200
|
+
/// Allows WiFi hardware to stabilize before next connection attempt
|
|
201
|
+
static constexpr uint32_t WIFI_COOLDOWN_DURATION_MS = 500;
|
|
202
|
+
|
|
203
|
+
/// Cooldown duration when fallback AP is active and captive portal may be running
|
|
204
|
+
/// Longer interval gives users time to configure WiFi without constant connection attempts
|
|
205
|
+
/// While connecting, WiFi can't beacon the AP properly, so needs longer cooldown
|
|
206
|
+
static constexpr uint32_t WIFI_COOLDOWN_WITH_AP_ACTIVE_MS = 30000;
|
|
207
|
+
|
|
208
|
+
static constexpr uint8_t get_max_retries_for_phase(WiFiRetryPhase phase) {
|
|
209
|
+
switch (phase) {
|
|
210
|
+
case WiFiRetryPhase::INITIAL_CONNECT:
|
|
211
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
212
|
+
case WiFiRetryPhase::FAST_CONNECT_CYCLING_APS:
|
|
213
|
+
#endif
|
|
214
|
+
// INITIAL_CONNECT and FAST_CONNECT_CYCLING_APS both use 1 attempt per AP (fast_connect mode)
|
|
215
|
+
return WIFI_RETRY_COUNT_PER_AP;
|
|
216
|
+
case WiFiRetryPhase::EXPLICIT_HIDDEN:
|
|
217
|
+
// Explicitly hidden network: 1 attempt (user marked as hidden, try once then scan)
|
|
218
|
+
return WIFI_RETRY_COUNT_PER_SSID;
|
|
219
|
+
case WiFiRetryPhase::SCAN_CONNECTING:
|
|
220
|
+
// Scan-based phase: 2 attempts per BSSID (handles transient auth failures after scan)
|
|
221
|
+
return WIFI_RETRY_COUNT_PER_BSSID;
|
|
222
|
+
case WiFiRetryPhase::RETRY_HIDDEN:
|
|
223
|
+
// Hidden network mode: 1 attempt per SSID
|
|
224
|
+
return WIFI_RETRY_COUNT_PER_SSID;
|
|
225
|
+
default:
|
|
226
|
+
return WIFI_RETRY_COUNT_PER_BSSID;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
static void apply_scan_result_to_params(WiFiAP ¶ms, const WiFiScanResult &scan) {
|
|
231
|
+
params.set_hidden(false);
|
|
232
|
+
params.set_ssid(scan.get_ssid());
|
|
233
|
+
params.set_bssid(scan.get_bssid());
|
|
234
|
+
params.set_channel(scan.get_channel());
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
bool WiFiComponent::needs_scan_results_() const {
|
|
238
|
+
// Only SCAN_CONNECTING phase needs scan results
|
|
239
|
+
if (this->retry_phase_ != WiFiRetryPhase::SCAN_CONNECTING) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
// Need scan if we have no results or no matching networks
|
|
243
|
+
return this->scan_result_.empty() || !this->scan_result_[0].get_matches();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
bool WiFiComponent::ssid_was_seen_in_scan_(const std::string &ssid) const {
|
|
247
|
+
// Check if this SSID is configured as hidden
|
|
248
|
+
// If explicitly marked hidden, we should always try hidden mode regardless of scan results
|
|
249
|
+
for (const auto &conf : this->sta_) {
|
|
250
|
+
if (conf.get_ssid() == ssid && conf.get_hidden()) {
|
|
251
|
+
return false; // Treat as not seen - force hidden mode attempt
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Otherwise, check if we saw it in scan results
|
|
256
|
+
for (const auto &scan : this->scan_result_) {
|
|
257
|
+
if (scan.get_ssid() == ssid) {
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
int8_t WiFiComponent::find_next_hidden_sta_(int8_t start_index) {
|
|
265
|
+
// Find next SSID that wasn't in scan results (might be hidden)
|
|
266
|
+
bool include_explicit_hidden = !this->went_through_explicit_hidden_phase_();
|
|
267
|
+
// Start searching from start_index + 1
|
|
268
|
+
for (size_t i = start_index + 1; i < this->sta_.size(); i++) {
|
|
269
|
+
const auto &sta = this->sta_[i];
|
|
270
|
+
|
|
271
|
+
// Skip networks that were already tried in EXPLICIT_HIDDEN phase
|
|
272
|
+
// Those are: networks marked hidden:true that appear before the first non-hidden network
|
|
273
|
+
// If all networks are hidden (first_non_hidden_idx == -1), skip all of them
|
|
274
|
+
if (!include_explicit_hidden && sta.get_hidden()) {
|
|
275
|
+
int8_t first_non_hidden_idx = this->find_first_non_hidden_index_();
|
|
276
|
+
if (first_non_hidden_idx < 0 || static_cast<int8_t>(i) < first_non_hidden_idx) {
|
|
277
|
+
ESP_LOGD(TAG, "Skipping " LOG_SECRET("'%s'") " (explicit hidden, already tried)", sta.get_ssid().c_str());
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// If we didn't scan this cycle, treat all networks as potentially hidden
|
|
283
|
+
// Otherwise, only retry networks that weren't seen in the scan
|
|
284
|
+
if (!this->did_scan_this_cycle_ || !this->ssid_was_seen_in_scan_(sta.get_ssid())) {
|
|
285
|
+
ESP_LOGD(TAG, "Hidden candidate " LOG_SECRET("'%s'") " at index %d", sta.get_ssid().c_str(), static_cast<int>(i));
|
|
286
|
+
return static_cast<int8_t>(i);
|
|
287
|
+
}
|
|
288
|
+
ESP_LOGD(TAG, "Skipping hidden retry for visible network " LOG_SECRET("'%s'"), sta.get_ssid().c_str());
|
|
289
|
+
}
|
|
290
|
+
// No hidden SSIDs found
|
|
291
|
+
return -1;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
void WiFiComponent::start_initial_connection_() {
|
|
295
|
+
// If first network (highest priority) is explicitly marked hidden, try it first before scanning
|
|
296
|
+
// This respects user's priority order when they explicitly configure hidden networks
|
|
297
|
+
if (!this->sta_.empty() && this->sta_[0].get_hidden()) {
|
|
298
|
+
ESP_LOGI(TAG, "Starting with explicit hidden network (highest priority)");
|
|
299
|
+
this->selected_sta_index_ = 0;
|
|
300
|
+
this->retry_phase_ = WiFiRetryPhase::EXPLICIT_HIDDEN;
|
|
301
|
+
WiFiAP params = this->build_params_for_current_phase_();
|
|
302
|
+
this->start_connecting(params);
|
|
303
|
+
} else {
|
|
304
|
+
ESP_LOGI(TAG, "Starting scan");
|
|
305
|
+
this->start_scanning();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
#if defined(USE_ESP32) && defined(USE_WIFI_WPA2_EAP) && ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
|
|
310
|
+
static const char *eap_phase2_to_str(esp_eap_ttls_phase2_types type) {
|
|
311
|
+
switch (type) {
|
|
312
|
+
case ESP_EAP_TTLS_PHASE2_PAP:
|
|
313
|
+
return "pap";
|
|
314
|
+
case ESP_EAP_TTLS_PHASE2_CHAP:
|
|
315
|
+
return "chap";
|
|
316
|
+
case ESP_EAP_TTLS_PHASE2_MSCHAP:
|
|
317
|
+
return "mschap";
|
|
318
|
+
case ESP_EAP_TTLS_PHASE2_MSCHAPV2:
|
|
319
|
+
return "mschapv2";
|
|
320
|
+
case ESP_EAP_TTLS_PHASE2_EAP:
|
|
321
|
+
return "eap";
|
|
322
|
+
default:
|
|
323
|
+
return "unknown";
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
#endif
|
|
327
|
+
|
|
328
|
+
float WiFiComponent::get_setup_priority() const { return setup_priority::WIFI; }
|
|
329
|
+
|
|
330
|
+
void WiFiComponent::setup() {
|
|
331
|
+
this->wifi_pre_setup_();
|
|
332
|
+
|
|
333
|
+
#if defined(USE_ESP32) && defined(USE_WIFI_RUNTIME_POWER_SAVE)
|
|
334
|
+
// Create semaphore for high-performance mode requests
|
|
335
|
+
// Start at 0, increment on request, decrement on release
|
|
336
|
+
this->high_performance_semaphore_ = xSemaphoreCreateCounting(UINT32_MAX, 0);
|
|
337
|
+
if (this->high_performance_semaphore_ == nullptr) {
|
|
338
|
+
ESP_LOGE(TAG, "Failed semaphore");
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Store the configured power save mode as baseline
|
|
342
|
+
this->configured_power_save_ = this->power_save_;
|
|
343
|
+
#endif
|
|
344
|
+
|
|
345
|
+
if (this->enable_on_boot_) {
|
|
346
|
+
this->start();
|
|
347
|
+
} else {
|
|
348
|
+
#ifdef USE_ESP32
|
|
349
|
+
esp_netif_init();
|
|
350
|
+
#endif
|
|
351
|
+
this->state_ = WIFI_COMPONENT_STATE_DISABLED;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
void WiFiComponent::start() {
|
|
356
|
+
char mac_s[18];
|
|
357
|
+
ESP_LOGCONFIG(TAG,
|
|
358
|
+
"Starting\n"
|
|
359
|
+
" Local MAC: %s",
|
|
360
|
+
get_mac_address_pretty_into_buffer(mac_s));
|
|
361
|
+
this->last_connected_ = millis();
|
|
362
|
+
|
|
363
|
+
uint32_t hash = this->has_sta() ? fnv1_hash(App.get_compilation_time_ref().c_str()) : 88491487UL;
|
|
364
|
+
|
|
365
|
+
this->pref_ = global_preferences->make_preference<wifi::SavedWifiSettings>(hash, true);
|
|
366
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
367
|
+
this->fast_connect_pref_ = global_preferences->make_preference<wifi::SavedWifiFastConnectSettings>(hash + 1, false);
|
|
368
|
+
#endif
|
|
369
|
+
|
|
370
|
+
SavedWifiSettings save{};
|
|
371
|
+
if (this->pref_.load(&save)) {
|
|
372
|
+
ESP_LOGD(TAG, "Loaded settings: %s", save.ssid);
|
|
373
|
+
|
|
374
|
+
WiFiAP sta{};
|
|
375
|
+
sta.set_ssid(save.ssid);
|
|
376
|
+
sta.set_password(save.password);
|
|
377
|
+
this->set_sta(sta);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
if (this->has_sta()) {
|
|
381
|
+
this->wifi_sta_pre_setup_();
|
|
382
|
+
if (this->output_power_.has_value() && !this->wifi_apply_output_power_(*this->output_power_)) {
|
|
383
|
+
ESP_LOGV(TAG, "Setting Output Power Option failed");
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
#if defined(USE_ESP32) && defined(USE_WIFI_RUNTIME_POWER_SAVE)
|
|
387
|
+
// Synchronize power_save_ with semaphore state before applying
|
|
388
|
+
if (this->high_performance_semaphore_ != nullptr) {
|
|
389
|
+
UBaseType_t semaphore_count = uxSemaphoreGetCount(this->high_performance_semaphore_);
|
|
390
|
+
if (semaphore_count > 0) {
|
|
391
|
+
this->power_save_ = WIFI_POWER_SAVE_NONE;
|
|
392
|
+
this->is_high_performance_mode_ = true;
|
|
393
|
+
} else {
|
|
394
|
+
this->power_save_ = this->configured_power_save_;
|
|
395
|
+
this->is_high_performance_mode_ = false;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
#endif
|
|
399
|
+
if (!this->wifi_apply_power_save_()) {
|
|
400
|
+
ESP_LOGV(TAG, "Setting Power Save Option failed");
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
this->transition_to_phase_(WiFiRetryPhase::INITIAL_CONNECT);
|
|
404
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
405
|
+
WiFiAP params;
|
|
406
|
+
bool loaded_fast_connect = this->load_fast_connect_settings_(params);
|
|
407
|
+
// Fast connect optimization: only use when we have saved BSSID+channel data
|
|
408
|
+
// Without saved data, try first configured network or use normal flow
|
|
409
|
+
if (loaded_fast_connect) {
|
|
410
|
+
ESP_LOGI(TAG, "Starting fast_connect (saved) " LOG_SECRET("'%s'"), params.get_ssid().c_str());
|
|
411
|
+
this->start_connecting(params);
|
|
412
|
+
} else if (!this->sta_.empty() && !this->sta_[0].get_hidden()) {
|
|
413
|
+
// No saved data, but have configured networks - try first non-hidden network
|
|
414
|
+
ESP_LOGI(TAG, "Starting fast_connect (config) " LOG_SECRET("'%s'"), this->sta_[0].get_ssid().c_str());
|
|
415
|
+
this->selected_sta_index_ = 0;
|
|
416
|
+
params = this->build_params_for_current_phase_();
|
|
417
|
+
this->start_connecting(params);
|
|
418
|
+
} else {
|
|
419
|
+
// No saved data and (no networks OR first is hidden) - use normal flow
|
|
420
|
+
this->start_initial_connection_();
|
|
421
|
+
}
|
|
422
|
+
#else
|
|
423
|
+
// Without fast_connect: go straight to scanning (or hidden mode if all networks are hidden)
|
|
424
|
+
this->start_initial_connection_();
|
|
425
|
+
#endif
|
|
426
|
+
#ifdef USE_WIFI_AP
|
|
427
|
+
} else if (this->has_ap()) {
|
|
428
|
+
this->setup_ap_config_();
|
|
429
|
+
if (this->output_power_.has_value() && !this->wifi_apply_output_power_(*this->output_power_)) {
|
|
430
|
+
ESP_LOGV(TAG, "Setting Output Power Option failed");
|
|
431
|
+
}
|
|
432
|
+
#ifdef USE_CAPTIVE_PORTAL
|
|
433
|
+
if (captive_portal::global_captive_portal != nullptr) {
|
|
434
|
+
this->wifi_sta_pre_setup_();
|
|
435
|
+
this->start_scanning();
|
|
436
|
+
captive_portal::global_captive_portal->start();
|
|
437
|
+
}
|
|
438
|
+
#endif
|
|
439
|
+
#endif // USE_WIFI_AP
|
|
440
|
+
}
|
|
441
|
+
#ifdef USE_IMPROV
|
|
442
|
+
if (!this->has_sta() && esp32_improv::global_improv_component != nullptr) {
|
|
443
|
+
if (this->wifi_mode_(true, {}))
|
|
444
|
+
esp32_improv::global_improv_component->start();
|
|
445
|
+
}
|
|
446
|
+
#endif
|
|
447
|
+
this->wifi_apply_hostname_();
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
void WiFiComponent::restart_adapter() {
|
|
451
|
+
ESP_LOGW(TAG, "Restarting adapter");
|
|
452
|
+
this->wifi_mode_(false, {});
|
|
453
|
+
this->error_from_callback_ = false;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
void WiFiComponent::loop() {
|
|
457
|
+
this->wifi_loop_();
|
|
458
|
+
const uint32_t now = App.get_loop_component_start_time();
|
|
459
|
+
|
|
460
|
+
if (this->has_sta()) {
|
|
461
|
+
if (this->is_connected() != this->handled_connected_state_) {
|
|
462
|
+
if (this->handled_connected_state_) {
|
|
463
|
+
this->disconnect_trigger_->trigger();
|
|
464
|
+
} else {
|
|
465
|
+
this->connect_trigger_->trigger();
|
|
466
|
+
}
|
|
467
|
+
this->handled_connected_state_ = this->is_connected();
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
switch (this->state_) {
|
|
471
|
+
case WIFI_COMPONENT_STATE_COOLDOWN: {
|
|
472
|
+
this->status_set_warning(LOG_STR("waiting to reconnect"));
|
|
473
|
+
// Skip cooldown if new credentials were provided while connecting
|
|
474
|
+
if (this->skip_cooldown_next_cycle_) {
|
|
475
|
+
this->skip_cooldown_next_cycle_ = false;
|
|
476
|
+
this->check_connecting_finished();
|
|
477
|
+
break;
|
|
478
|
+
}
|
|
479
|
+
// Use longer cooldown when captive portal/improv is active to avoid disrupting user config
|
|
480
|
+
bool portal_active = this->is_captive_portal_active_() || this->is_esp32_improv_active_();
|
|
481
|
+
uint32_t cooldown_duration = portal_active ? WIFI_COOLDOWN_WITH_AP_ACTIVE_MS : WIFI_COOLDOWN_DURATION_MS;
|
|
482
|
+
if (now - this->action_started_ > cooldown_duration) {
|
|
483
|
+
// After cooldown we either restarted the adapter because of
|
|
484
|
+
// a failure, or something tried to connect over and over
|
|
485
|
+
// so we entered cooldown. In both cases we call
|
|
486
|
+
// check_connecting_finished to continue the state machine.
|
|
487
|
+
this->check_connecting_finished();
|
|
488
|
+
}
|
|
489
|
+
break;
|
|
490
|
+
}
|
|
491
|
+
case WIFI_COMPONENT_STATE_STA_SCANNING: {
|
|
492
|
+
this->status_set_warning(LOG_STR("scanning for networks"));
|
|
493
|
+
this->check_scanning_finished();
|
|
494
|
+
break;
|
|
495
|
+
}
|
|
496
|
+
case WIFI_COMPONENT_STATE_STA_CONNECTING: {
|
|
497
|
+
this->status_set_warning(LOG_STR("associating to network"));
|
|
498
|
+
this->check_connecting_finished();
|
|
499
|
+
break;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
case WIFI_COMPONENT_STATE_STA_CONNECTED: {
|
|
503
|
+
if (!this->is_connected()) {
|
|
504
|
+
ESP_LOGW(TAG, "Connection lost; reconnecting");
|
|
505
|
+
this->state_ = WIFI_COMPONENT_STATE_STA_CONNECTING;
|
|
506
|
+
// Clear error flag before reconnecting so first attempt is not seen as immediate failure
|
|
507
|
+
this->error_from_callback_ = false;
|
|
508
|
+
this->retry_connect();
|
|
509
|
+
} else {
|
|
510
|
+
this->status_clear_warning();
|
|
511
|
+
this->last_connected_ = now;
|
|
512
|
+
}
|
|
513
|
+
break;
|
|
514
|
+
}
|
|
515
|
+
case WIFI_COMPONENT_STATE_OFF:
|
|
516
|
+
case WIFI_COMPONENT_STATE_AP:
|
|
517
|
+
break;
|
|
518
|
+
case WIFI_COMPONENT_STATE_DISABLED:
|
|
519
|
+
return;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
#ifdef USE_WIFI_AP
|
|
523
|
+
if (this->has_ap() && !this->ap_setup_) {
|
|
524
|
+
if (this->ap_timeout_ != 0 && (now - this->last_connected_ > this->ap_timeout_)) {
|
|
525
|
+
ESP_LOGI(TAG, "Starting fallback AP");
|
|
526
|
+
this->setup_ap_config_();
|
|
527
|
+
#ifdef USE_CAPTIVE_PORTAL
|
|
528
|
+
if (captive_portal::global_captive_portal != nullptr)
|
|
529
|
+
captive_portal::global_captive_portal->start();
|
|
530
|
+
#endif
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
#endif // USE_WIFI_AP
|
|
534
|
+
|
|
535
|
+
#ifdef USE_IMPROV
|
|
536
|
+
if (esp32_improv::global_improv_component != nullptr && !esp32_improv::global_improv_component->is_active() &&
|
|
537
|
+
!esp32_improv::global_improv_component->should_start()) {
|
|
538
|
+
if (now - this->last_connected_ > esp32_improv::global_improv_component->get_wifi_timeout()) {
|
|
539
|
+
if (this->wifi_mode_(true, {}))
|
|
540
|
+
esp32_improv::global_improv_component->start();
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
#endif
|
|
545
|
+
|
|
546
|
+
if (!this->has_ap() && this->reboot_timeout_ != 0) {
|
|
547
|
+
if (now - this->last_connected_ > this->reboot_timeout_) {
|
|
548
|
+
ESP_LOGE(TAG, "Can't connect; rebooting");
|
|
549
|
+
App.reboot();
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
#if defined(USE_ESP32) && defined(USE_WIFI_RUNTIME_POWER_SAVE)
|
|
555
|
+
// Check if power save mode needs to be updated based on high-performance requests
|
|
556
|
+
if (this->high_performance_semaphore_ != nullptr) {
|
|
557
|
+
// Semaphore count directly represents active requests (starts at 0, increments on request)
|
|
558
|
+
UBaseType_t semaphore_count = uxSemaphoreGetCount(this->high_performance_semaphore_);
|
|
559
|
+
|
|
560
|
+
if (semaphore_count > 0 && !this->is_high_performance_mode_) {
|
|
561
|
+
// Transition to high-performance mode (no power save)
|
|
562
|
+
ESP_LOGV(TAG, "Switching to high-performance mode (%" PRIu32 " active %s)", (uint32_t) semaphore_count,
|
|
563
|
+
semaphore_count == 1 ? "request" : "requests");
|
|
564
|
+
this->power_save_ = WIFI_POWER_SAVE_NONE;
|
|
565
|
+
if (this->wifi_apply_power_save_()) {
|
|
566
|
+
this->is_high_performance_mode_ = true;
|
|
567
|
+
}
|
|
568
|
+
} else if (semaphore_count == 0 && this->is_high_performance_mode_) {
|
|
569
|
+
// Restore to configured power save mode
|
|
570
|
+
ESP_LOGV(TAG, "Restoring power save mode to configured setting");
|
|
571
|
+
this->power_save_ = this->configured_power_save_;
|
|
572
|
+
if (this->wifi_apply_power_save_()) {
|
|
573
|
+
this->is_high_performance_mode_ = false;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
#endif
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
WiFiComponent::WiFiComponent() { global_wifi_component = this; }
|
|
581
|
+
|
|
582
|
+
bool WiFiComponent::has_ap() const { return this->has_ap_; }
|
|
583
|
+
bool WiFiComponent::is_ap_active() const { return this->ap_started_; }
|
|
584
|
+
bool WiFiComponent::has_sta() const { return !this->sta_.empty(); }
|
|
585
|
+
#ifdef USE_WIFI_11KV_SUPPORT
|
|
586
|
+
void WiFiComponent::set_btm(bool btm) { this->btm_ = btm; }
|
|
587
|
+
void WiFiComponent::set_rrm(bool rrm) { this->rrm_ = rrm; }
|
|
588
|
+
#endif
|
|
589
|
+
network::IPAddresses WiFiComponent::get_ip_addresses() {
|
|
590
|
+
if (this->has_sta())
|
|
591
|
+
return this->wifi_sta_ip_addresses();
|
|
592
|
+
|
|
593
|
+
#ifdef USE_WIFI_AP
|
|
594
|
+
if (this->has_ap())
|
|
595
|
+
return {this->wifi_soft_ap_ip()};
|
|
596
|
+
#endif // USE_WIFI_AP
|
|
597
|
+
|
|
598
|
+
return {};
|
|
599
|
+
}
|
|
600
|
+
network::IPAddress WiFiComponent::get_dns_address(int num) {
|
|
601
|
+
if (this->has_sta())
|
|
602
|
+
return this->wifi_dns_ip_(num);
|
|
603
|
+
return {};
|
|
604
|
+
}
|
|
605
|
+
// set_use_address() is guaranteed to be called during component setup by Python code generation,
|
|
606
|
+
// so use_address_ will always be valid when get_use_address() is called - no fallback needed.
|
|
607
|
+
const char *WiFiComponent::get_use_address() const { return this->use_address_; }
|
|
608
|
+
void WiFiComponent::set_use_address(const char *use_address) { this->use_address_ = use_address; }
|
|
609
|
+
|
|
610
|
+
#ifdef USE_WIFI_AP
|
|
611
|
+
void WiFiComponent::setup_ap_config_() {
|
|
612
|
+
this->wifi_mode_({}, true);
|
|
613
|
+
|
|
614
|
+
if (this->ap_setup_)
|
|
615
|
+
return;
|
|
616
|
+
|
|
617
|
+
if (this->ap_.get_ssid().empty()) {
|
|
618
|
+
std::string name = App.get_name();
|
|
619
|
+
if (name.length() > 32) {
|
|
620
|
+
if (App.is_name_add_mac_suffix_enabled()) {
|
|
621
|
+
// Keep first 25 chars and last 7 chars (MAC suffix), remove middle
|
|
622
|
+
name.erase(25, name.length() - 32);
|
|
623
|
+
} else {
|
|
624
|
+
name.resize(32);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
this->ap_.set_ssid(name);
|
|
628
|
+
}
|
|
629
|
+
this->ap_setup_ = this->wifi_start_ap_(this->ap_);
|
|
630
|
+
|
|
631
|
+
auto ip_address = this->wifi_soft_ap_ip().str();
|
|
632
|
+
ESP_LOGCONFIG(TAG,
|
|
633
|
+
"Setting up AP:\n"
|
|
634
|
+
" AP SSID: '%s'\n"
|
|
635
|
+
" AP Password: '%s'\n"
|
|
636
|
+
" IP Address: %s",
|
|
637
|
+
this->ap_.get_ssid().c_str(), this->ap_.get_password().c_str(), ip_address.c_str());
|
|
638
|
+
|
|
639
|
+
#ifdef USE_WIFI_MANUAL_IP
|
|
640
|
+
auto manual_ip = this->ap_.get_manual_ip();
|
|
641
|
+
if (manual_ip.has_value()) {
|
|
642
|
+
ESP_LOGCONFIG(TAG,
|
|
643
|
+
" AP Static IP: '%s'\n"
|
|
644
|
+
" AP Gateway: '%s'\n"
|
|
645
|
+
" AP Subnet: '%s'",
|
|
646
|
+
manual_ip->static_ip.str().c_str(), manual_ip->gateway.str().c_str(),
|
|
647
|
+
manual_ip->subnet.str().c_str());
|
|
648
|
+
}
|
|
649
|
+
#endif
|
|
650
|
+
|
|
651
|
+
if (!this->has_sta()) {
|
|
652
|
+
this->state_ = WIFI_COMPONENT_STATE_AP;
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
void WiFiComponent::set_ap(const WiFiAP &ap) {
|
|
657
|
+
this->ap_ = ap;
|
|
658
|
+
this->has_ap_ = true;
|
|
659
|
+
}
|
|
660
|
+
#endif // USE_WIFI_AP
|
|
661
|
+
|
|
662
|
+
float WiFiComponent::get_loop_priority() const {
|
|
663
|
+
return 10.0f; // before other loop components
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
void WiFiComponent::init_sta(size_t count) { this->sta_.init(count); }
|
|
667
|
+
void WiFiComponent::add_sta(const WiFiAP &ap) { this->sta_.push_back(ap); }
|
|
668
|
+
void WiFiComponent::set_sta(const WiFiAP &ap) {
|
|
669
|
+
this->clear_sta();
|
|
670
|
+
this->init_sta(1);
|
|
671
|
+
this->add_sta(ap);
|
|
672
|
+
this->selected_sta_index_ = 0;
|
|
673
|
+
// When new credentials are set (e.g., from improv), skip cooldown to retry immediately
|
|
674
|
+
this->skip_cooldown_next_cycle_ = true;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
WiFiAP WiFiComponent::build_params_for_current_phase_() {
|
|
678
|
+
const WiFiAP *config = this->get_selected_sta_();
|
|
679
|
+
if (config == nullptr) {
|
|
680
|
+
ESP_LOGE(TAG, "No valid network config (selected_sta_index_=%d, sta_.size()=%zu)",
|
|
681
|
+
static_cast<int>(this->selected_sta_index_), this->sta_.size());
|
|
682
|
+
// Return empty params - caller should handle this gracefully
|
|
683
|
+
return WiFiAP();
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
WiFiAP params = *config;
|
|
687
|
+
|
|
688
|
+
switch (this->retry_phase_) {
|
|
689
|
+
case WiFiRetryPhase::INITIAL_CONNECT:
|
|
690
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
691
|
+
case WiFiRetryPhase::FAST_CONNECT_CYCLING_APS:
|
|
692
|
+
#endif
|
|
693
|
+
// Fast connect phases: use config-only (no scan results)
|
|
694
|
+
// BSSID/channel from config if user specified them, otherwise empty
|
|
695
|
+
break;
|
|
696
|
+
|
|
697
|
+
case WiFiRetryPhase::EXPLICIT_HIDDEN:
|
|
698
|
+
case WiFiRetryPhase::RETRY_HIDDEN:
|
|
699
|
+
// Hidden network mode: clear BSSID/channel to trigger probe request
|
|
700
|
+
// (both explicit hidden and retry hidden use same behavior)
|
|
701
|
+
params.set_bssid(optional<bssid_t>{});
|
|
702
|
+
params.set_channel(optional<uint8_t>{});
|
|
703
|
+
break;
|
|
704
|
+
|
|
705
|
+
case WiFiRetryPhase::SCAN_CONNECTING:
|
|
706
|
+
// Scan-based phase: always use best scan result (index 0 - highest priority after sorting)
|
|
707
|
+
if (!this->scan_result_.empty()) {
|
|
708
|
+
apply_scan_result_to_params(params, this->scan_result_[0]);
|
|
709
|
+
}
|
|
710
|
+
break;
|
|
711
|
+
|
|
712
|
+
case WiFiRetryPhase::RESTARTING_ADAPTER:
|
|
713
|
+
// Should not be building params during restart
|
|
714
|
+
break;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
return params;
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
WiFiAP WiFiComponent::get_sta() const {
|
|
721
|
+
const WiFiAP *config = this->get_selected_sta_();
|
|
722
|
+
return config ? *config : WiFiAP{};
|
|
723
|
+
}
|
|
724
|
+
void WiFiComponent::save_wifi_sta(const std::string &ssid, const std::string &password) {
|
|
725
|
+
SavedWifiSettings save{}; // zero-initialized - all bytes set to \0, guaranteeing null termination
|
|
726
|
+
strncpy(save.ssid, ssid.c_str(), sizeof(save.ssid) - 1); // max 32 chars, byte 32 remains \0
|
|
727
|
+
strncpy(save.password, password.c_str(), sizeof(save.password) - 1); // max 64 chars, byte 64 remains \0
|
|
728
|
+
this->pref_.save(&save);
|
|
729
|
+
// ensure it's written immediately
|
|
730
|
+
global_preferences->sync();
|
|
731
|
+
|
|
732
|
+
WiFiAP sta{};
|
|
733
|
+
sta.set_ssid(ssid);
|
|
734
|
+
sta.set_password(password);
|
|
735
|
+
this->set_sta(sta);
|
|
736
|
+
|
|
737
|
+
// Trigger connection attempt (exits cooldown if needed, no-op if already connecting/connected)
|
|
738
|
+
this->connect_soon_();
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
void WiFiComponent::connect_soon_() {
|
|
742
|
+
// Only trigger retry if we're in cooldown - if already connecting/connected, do nothing
|
|
743
|
+
if (this->state_ == WIFI_COMPONENT_STATE_COOLDOWN) {
|
|
744
|
+
ESP_LOGD(TAG, "Exiting cooldown early due to new WiFi credentials");
|
|
745
|
+
this->retry_connect();
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
void WiFiComponent::start_connecting(const WiFiAP &ap) {
|
|
750
|
+
// Log connection attempt at INFO level with priority
|
|
751
|
+
char bssid_s[18];
|
|
752
|
+
int8_t priority = 0;
|
|
753
|
+
|
|
754
|
+
if (ap.get_bssid().has_value()) {
|
|
755
|
+
format_mac_addr_upper(ap.get_bssid().value().data(), bssid_s);
|
|
756
|
+
priority = this->get_sta_priority(ap.get_bssid().value());
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
ESP_LOGI(TAG,
|
|
760
|
+
"Connecting to " LOG_SECRET("'%s'") " " LOG_SECRET("(%s)") " (priority %d, attempt %u/%u in phase %s)...",
|
|
761
|
+
ap.get_ssid().c_str(), ap.get_bssid().has_value() ? bssid_s : LOG_STR_LITERAL("any"), priority,
|
|
762
|
+
this->num_retried_ + 1, get_max_retries_for_phase(this->retry_phase_),
|
|
763
|
+
LOG_STR_ARG(retry_phase_to_log_string(this->retry_phase_)));
|
|
764
|
+
|
|
765
|
+
#ifdef ESPHOME_LOG_HAS_VERBOSE
|
|
766
|
+
ESP_LOGV(TAG, "Connection Params:");
|
|
767
|
+
ESP_LOGV(TAG, " SSID: '%s'", ap.get_ssid().c_str());
|
|
768
|
+
if (ap.get_bssid().has_value()) {
|
|
769
|
+
ESP_LOGV(TAG, " BSSID: %s", bssid_s);
|
|
770
|
+
} else {
|
|
771
|
+
ESP_LOGV(TAG, " BSSID: Not Set");
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
#ifdef USE_WIFI_WPA2_EAP
|
|
775
|
+
if (ap.get_eap().has_value()) {
|
|
776
|
+
ESP_LOGV(TAG, " WPA2 Enterprise authentication configured:");
|
|
777
|
+
EAPAuth eap_config = ap.get_eap().value();
|
|
778
|
+
ESP_LOGV(TAG, " Identity: " LOG_SECRET("'%s'"), eap_config.identity.c_str());
|
|
779
|
+
ESP_LOGV(TAG, " Username: " LOG_SECRET("'%s'"), eap_config.username.c_str());
|
|
780
|
+
ESP_LOGV(TAG, " Password: " LOG_SECRET("'%s'"), eap_config.password.c_str());
|
|
781
|
+
#if defined(USE_ESP32) && defined(USE_WIFI_WPA2_EAP) && ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
|
|
782
|
+
ESP_LOGV(TAG, " TTLS Phase 2: " LOG_SECRET("'%s'"), eap_phase2_to_str(eap_config.ttls_phase_2));
|
|
783
|
+
#endif
|
|
784
|
+
bool ca_cert_present = eap_config.ca_cert != nullptr && strlen(eap_config.ca_cert);
|
|
785
|
+
bool client_cert_present = eap_config.client_cert != nullptr && strlen(eap_config.client_cert);
|
|
786
|
+
bool client_key_present = eap_config.client_key != nullptr && strlen(eap_config.client_key);
|
|
787
|
+
ESP_LOGV(TAG, " CA Cert: %s", ca_cert_present ? "present" : "not present");
|
|
788
|
+
ESP_LOGV(TAG, " Client Cert: %s", client_cert_present ? "present" : "not present");
|
|
789
|
+
ESP_LOGV(TAG, " Client Key: %s", client_key_present ? "present" : "not present");
|
|
790
|
+
} else {
|
|
791
|
+
#endif
|
|
792
|
+
ESP_LOGV(TAG, " Password: " LOG_SECRET("'%s'"), ap.get_password().c_str());
|
|
793
|
+
#ifdef USE_WIFI_WPA2_EAP
|
|
794
|
+
}
|
|
795
|
+
#endif
|
|
796
|
+
if (ap.get_channel().has_value()) {
|
|
797
|
+
ESP_LOGV(TAG, " Channel: %u", *ap.get_channel());
|
|
798
|
+
} else {
|
|
799
|
+
ESP_LOGV(TAG, " Channel not set");
|
|
800
|
+
}
|
|
801
|
+
#ifdef USE_WIFI_MANUAL_IP
|
|
802
|
+
if (ap.get_manual_ip().has_value()) {
|
|
803
|
+
ManualIP m = *ap.get_manual_ip();
|
|
804
|
+
ESP_LOGV(TAG, " Manual IP: Static IP=%s Gateway=%s Subnet=%s DNS1=%s DNS2=%s", m.static_ip.str().c_str(),
|
|
805
|
+
m.gateway.str().c_str(), m.subnet.str().c_str(), m.dns1.str().c_str(), m.dns2.str().c_str());
|
|
806
|
+
} else
|
|
807
|
+
#endif
|
|
808
|
+
{
|
|
809
|
+
ESP_LOGV(TAG, " Using DHCP IP");
|
|
810
|
+
}
|
|
811
|
+
ESP_LOGV(TAG, " Hidden: %s", YESNO(ap.get_hidden()));
|
|
812
|
+
#endif
|
|
813
|
+
|
|
814
|
+
if (!this->wifi_sta_connect_(ap)) {
|
|
815
|
+
ESP_LOGE(TAG, "wifi_sta_connect_ failed");
|
|
816
|
+
// Enter cooldown to allow WiFi hardware to stabilize
|
|
817
|
+
// (immediate failure suggests hardware not ready, different from connection timeout)
|
|
818
|
+
this->state_ = WIFI_COMPONENT_STATE_COOLDOWN;
|
|
819
|
+
} else {
|
|
820
|
+
this->state_ = WIFI_COMPONENT_STATE_STA_CONNECTING;
|
|
821
|
+
}
|
|
822
|
+
this->action_started_ = millis();
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
const LogString *get_signal_bars(int8_t rssi) {
|
|
826
|
+
// Check for disconnected sentinel value first
|
|
827
|
+
if (rssi == WIFI_RSSI_DISCONNECTED) {
|
|
828
|
+
// MULTIPLICATION SIGN
|
|
829
|
+
// Unicode: U+00D7, UTF-8: C3 97
|
|
830
|
+
return LOG_STR("\033[0;31m" // red
|
|
831
|
+
"\xc3\x97\xc3\x97\xc3\x97\xc3\x97"
|
|
832
|
+
"\033[0m");
|
|
833
|
+
}
|
|
834
|
+
// LOWER ONE QUARTER BLOCK
|
|
835
|
+
// Unicode: U+2582, UTF-8: E2 96 82
|
|
836
|
+
// LOWER HALF BLOCK
|
|
837
|
+
// Unicode: U+2584, UTF-8: E2 96 84
|
|
838
|
+
// LOWER THREE QUARTERS BLOCK
|
|
839
|
+
// Unicode: U+2586, UTF-8: E2 96 86
|
|
840
|
+
// FULL BLOCK
|
|
841
|
+
// Unicode: U+2588, UTF-8: E2 96 88
|
|
842
|
+
if (rssi >= -50) {
|
|
843
|
+
return LOG_STR("\033[0;32m" // green
|
|
844
|
+
"\xe2\x96\x82"
|
|
845
|
+
"\xe2\x96\x84"
|
|
846
|
+
"\xe2\x96\x86"
|
|
847
|
+
"\xe2\x96\x88"
|
|
848
|
+
"\033[0m");
|
|
849
|
+
} else if (rssi >= -65) {
|
|
850
|
+
return LOG_STR("\033[0;33m" // yellow
|
|
851
|
+
"\xe2\x96\x82"
|
|
852
|
+
"\xe2\x96\x84"
|
|
853
|
+
"\xe2\x96\x86"
|
|
854
|
+
"\033[0;37m"
|
|
855
|
+
"\xe2\x96\x88"
|
|
856
|
+
"\033[0m");
|
|
857
|
+
} else if (rssi >= -85) {
|
|
858
|
+
return LOG_STR("\033[0;33m" // yellow
|
|
859
|
+
"\xe2\x96\x82"
|
|
860
|
+
"\xe2\x96\x84"
|
|
861
|
+
"\033[0;37m"
|
|
862
|
+
"\xe2\x96\x86"
|
|
863
|
+
"\xe2\x96\x88"
|
|
864
|
+
"\033[0m");
|
|
865
|
+
} else {
|
|
866
|
+
return LOG_STR("\033[0;31m" // red
|
|
867
|
+
"\xe2\x96\x82"
|
|
868
|
+
"\033[0;37m"
|
|
869
|
+
"\xe2\x96\x84"
|
|
870
|
+
"\xe2\x96\x86"
|
|
871
|
+
"\xe2\x96\x88"
|
|
872
|
+
"\033[0m");
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
void WiFiComponent::print_connect_params_() {
|
|
877
|
+
bssid_t bssid = wifi_bssid();
|
|
878
|
+
char bssid_s[18];
|
|
879
|
+
format_mac_addr_upper(bssid.data(), bssid_s);
|
|
880
|
+
|
|
881
|
+
char mac_s[18];
|
|
882
|
+
ESP_LOGCONFIG(TAG, " Local MAC: %s", get_mac_address_pretty_into_buffer(mac_s));
|
|
883
|
+
if (this->is_disabled()) {
|
|
884
|
+
ESP_LOGCONFIG(TAG, " Disabled");
|
|
885
|
+
return;
|
|
886
|
+
}
|
|
887
|
+
for (auto &ip : wifi_sta_ip_addresses()) {
|
|
888
|
+
if (ip.is_set()) {
|
|
889
|
+
ESP_LOGCONFIG(TAG, " IP Address: %s", ip.str().c_str());
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
int8_t rssi = wifi_rssi();
|
|
893
|
+
ESP_LOGCONFIG(TAG,
|
|
894
|
+
" SSID: " LOG_SECRET("'%s'") "\n"
|
|
895
|
+
" BSSID: " LOG_SECRET("%s") "\n"
|
|
896
|
+
" Hostname: '%s'\n"
|
|
897
|
+
" Signal strength: %d dB %s\n"
|
|
898
|
+
" Channel: %" PRId32 "\n"
|
|
899
|
+
" Subnet: %s\n"
|
|
900
|
+
" Gateway: %s\n"
|
|
901
|
+
" DNS1: %s\n"
|
|
902
|
+
" DNS2: %s",
|
|
903
|
+
wifi_ssid().c_str(), bssid_s, App.get_name().c_str(), rssi, LOG_STR_ARG(get_signal_bars(rssi)),
|
|
904
|
+
get_wifi_channel(), wifi_subnet_mask_().str().c_str(), wifi_gateway_ip_().str().c_str(),
|
|
905
|
+
wifi_dns_ip_(0).str().c_str(), wifi_dns_ip_(1).str().c_str());
|
|
906
|
+
#ifdef ESPHOME_LOG_HAS_VERBOSE
|
|
907
|
+
if (const WiFiAP *config = this->get_selected_sta_(); config && config->get_bssid().has_value()) {
|
|
908
|
+
ESP_LOGV(TAG, " Priority: %d", this->get_sta_priority(*config->get_bssid()));
|
|
909
|
+
}
|
|
910
|
+
#endif
|
|
911
|
+
#ifdef USE_WIFI_11KV_SUPPORT
|
|
912
|
+
ESP_LOGCONFIG(TAG,
|
|
913
|
+
" BTM: %s\n"
|
|
914
|
+
" RRM: %s",
|
|
915
|
+
this->btm_ ? "enabled" : "disabled", this->rrm_ ? "enabled" : "disabled");
|
|
916
|
+
#endif
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
void WiFiComponent::enable() {
|
|
920
|
+
if (this->state_ != WIFI_COMPONENT_STATE_DISABLED)
|
|
921
|
+
return;
|
|
922
|
+
|
|
923
|
+
ESP_LOGD(TAG, "Enabling");
|
|
924
|
+
this->error_from_callback_ = false;
|
|
925
|
+
this->state_ = WIFI_COMPONENT_STATE_OFF;
|
|
926
|
+
this->start();
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
void WiFiComponent::disable() {
|
|
930
|
+
if (this->state_ == WIFI_COMPONENT_STATE_DISABLED)
|
|
931
|
+
return;
|
|
932
|
+
|
|
933
|
+
ESP_LOGD(TAG, "Disabling");
|
|
934
|
+
this->state_ = WIFI_COMPONENT_STATE_DISABLED;
|
|
935
|
+
this->wifi_disconnect_();
|
|
936
|
+
this->wifi_mode_(false, false);
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
bool WiFiComponent::is_disabled() { return this->state_ == WIFI_COMPONENT_STATE_DISABLED; }
|
|
940
|
+
|
|
941
|
+
void WiFiComponent::start_scanning() {
|
|
942
|
+
this->action_started_ = millis();
|
|
943
|
+
ESP_LOGD(TAG, "Starting scan");
|
|
944
|
+
this->wifi_scan_start_(this->passive_scan_);
|
|
945
|
+
this->state_ = WIFI_COMPONENT_STATE_STA_SCANNING;
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
/// Comparator for WiFi scan result sorting - determines which network should be tried first
|
|
949
|
+
/// Returns true if 'a' should be placed before 'b' in the sorted order (a is "better" than b)
|
|
950
|
+
///
|
|
951
|
+
/// Sorting logic (in priority order):
|
|
952
|
+
/// 1. Matching networks always ranked before non-matching networks
|
|
953
|
+
/// 2. For matching networks: Priority first (CRITICAL - tracks failure history)
|
|
954
|
+
/// 3. RSSI as tiebreaker for equal priority or non-matching networks
|
|
955
|
+
///
|
|
956
|
+
/// WHY PRIORITY MUST BE CHECKED FIRST:
|
|
957
|
+
/// The priority field tracks connection failure history via priority degradation:
|
|
958
|
+
/// - Initial priority: 0.0 (from config or default)
|
|
959
|
+
/// - Each connection failure: priority -= 1.0 (becomes -1.0, -2.0, -3.0, etc.)
|
|
960
|
+
/// - Failed BSSIDs sorted lower → naturally try different BSSID on next scan
|
|
961
|
+
///
|
|
962
|
+
/// This enables automatic BSSID cycling for various real-world failure scenarios:
|
|
963
|
+
/// - Crashed/hung AP (visible but not responding)
|
|
964
|
+
/// - Misconfigured mesh node (accepts auth but no DHCP/routing)
|
|
965
|
+
/// - Capacity limits (AP refuses new clients)
|
|
966
|
+
/// - Rogue AP (same SSID, wrong password or malicious)
|
|
967
|
+
/// - Intermittent hardware issues (flaky radio, overheating)
|
|
968
|
+
///
|
|
969
|
+
/// Example mesh network: 3 APs with same SSID "home", all at priority 0.0 initially
|
|
970
|
+
/// - Try strongest BSSID A (sorted by RSSI) → fails → priority A becomes -1.0
|
|
971
|
+
/// - Next scan: BSSID B and C (priority 0.0) sorted BEFORE A (priority -1.0)
|
|
972
|
+
/// - Try next strongest BSSID B → succeeds or fails and gets deprioritized
|
|
973
|
+
/// - System naturally cycles through all BSSIDs via priority degradation
|
|
974
|
+
/// - Eventually finds working AP or tries all options before restarting adapter
|
|
975
|
+
///
|
|
976
|
+
/// If we checked RSSI first (Bug in PR #9963):
|
|
977
|
+
/// - Same failed BSSID would keep being selected if it has strongest signal
|
|
978
|
+
/// - Device stuck connecting to crashed AP with -30dBm while working AP at -50dBm ignored
|
|
979
|
+
/// - Priority degradation would be useless
|
|
980
|
+
/// - Mesh networks would never recover from single AP failure
|
|
981
|
+
[[nodiscard]] inline static bool wifi_scan_result_is_better(const WiFiScanResult &a, const WiFiScanResult &b) {
|
|
982
|
+
// Matching networks always come before non-matching
|
|
983
|
+
if (a.get_matches() && !b.get_matches())
|
|
984
|
+
return true;
|
|
985
|
+
if (!a.get_matches() && b.get_matches())
|
|
986
|
+
return false;
|
|
987
|
+
|
|
988
|
+
// Both matching: check priority first (tracks connection failures via priority degradation)
|
|
989
|
+
// Priority is decreased when a BSSID fails to connect, so lower priority = previously failed
|
|
990
|
+
if (a.get_matches() && b.get_matches() && a.get_priority() != b.get_priority()) {
|
|
991
|
+
return a.get_priority() > b.get_priority();
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
// Use RSSI as tiebreaker (for equal-priority matching networks or all non-matching networks)
|
|
995
|
+
return a.get_rssi() > b.get_rssi();
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
// Helper function for insertion sort of WiFi scan results
|
|
999
|
+
// Using insertion sort instead of std::stable_sort saves flash memory
|
|
1000
|
+
// by avoiding template instantiations (std::rotate, std::stable_sort, lambdas)
|
|
1001
|
+
// IMPORTANT: This sort is stable (preserves relative order of equal elements)
|
|
1002
|
+
template<typename VectorType> static void insertion_sort_scan_results(VectorType &results) {
|
|
1003
|
+
const size_t size = results.size();
|
|
1004
|
+
for (size_t i = 1; i < size; i++) {
|
|
1005
|
+
// Make a copy to avoid issues with move semantics during comparison
|
|
1006
|
+
WiFiScanResult key = results[i];
|
|
1007
|
+
int32_t j = i - 1;
|
|
1008
|
+
|
|
1009
|
+
// Move elements that are worse than key to the right
|
|
1010
|
+
// For stability, we only move if key is strictly better than results[j]
|
|
1011
|
+
while (j >= 0 && wifi_scan_result_is_better(key, results[j])) {
|
|
1012
|
+
results[j + 1] = results[j];
|
|
1013
|
+
j--;
|
|
1014
|
+
}
|
|
1015
|
+
results[j + 1] = key;
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
// Helper function to log scan results - marked noinline to prevent re-inlining into loop
|
|
1020
|
+
__attribute__((noinline)) static void log_scan_result(const WiFiScanResult &res) {
|
|
1021
|
+
char bssid_s[18];
|
|
1022
|
+
auto bssid = res.get_bssid();
|
|
1023
|
+
format_mac_addr_upper(bssid.data(), bssid_s);
|
|
1024
|
+
|
|
1025
|
+
if (res.get_matches()) {
|
|
1026
|
+
ESP_LOGI(TAG, "- '%s' %s" LOG_SECRET("(%s) ") "%s", res.get_ssid().c_str(),
|
|
1027
|
+
res.get_is_hidden() ? LOG_STR_LITERAL("(HIDDEN) ") : LOG_STR_LITERAL(""), bssid_s,
|
|
1028
|
+
LOG_STR_ARG(get_signal_bars(res.get_rssi())));
|
|
1029
|
+
ESP_LOGD(TAG, " Channel: %2u, RSSI: %3d dB, Priority: %4d", res.get_channel(), res.get_rssi(), res.get_priority());
|
|
1030
|
+
} else {
|
|
1031
|
+
ESP_LOGD(TAG, "- " LOG_SECRET("'%s'") " " LOG_SECRET("(%s) ") "%s", res.get_ssid().c_str(), bssid_s,
|
|
1032
|
+
LOG_STR_ARG(get_signal_bars(res.get_rssi())));
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
void WiFiComponent::check_scanning_finished() {
|
|
1037
|
+
if (!this->scan_done_) {
|
|
1038
|
+
if (millis() - this->action_started_ > 30000) {
|
|
1039
|
+
ESP_LOGE(TAG, "Scan timeout");
|
|
1040
|
+
this->retry_connect();
|
|
1041
|
+
}
|
|
1042
|
+
return;
|
|
1043
|
+
}
|
|
1044
|
+
this->scan_done_ = false;
|
|
1045
|
+
this->did_scan_this_cycle_ = true;
|
|
1046
|
+
|
|
1047
|
+
if (this->scan_result_.empty()) {
|
|
1048
|
+
ESP_LOGW(TAG, "No networks found");
|
|
1049
|
+
this->retry_connect();
|
|
1050
|
+
return;
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
ESP_LOGD(TAG, "Found networks:");
|
|
1054
|
+
for (auto &res : this->scan_result_) {
|
|
1055
|
+
for (auto &ap : this->sta_) {
|
|
1056
|
+
if (res.matches(ap)) {
|
|
1057
|
+
res.set_matches(true);
|
|
1058
|
+
// Cache priority lookup - do single search instead of 2 separate searches
|
|
1059
|
+
const bssid_t &bssid = res.get_bssid();
|
|
1060
|
+
if (!this->has_sta_priority(bssid)) {
|
|
1061
|
+
this->set_sta_priority(bssid, ap.get_priority());
|
|
1062
|
+
}
|
|
1063
|
+
res.set_priority(this->get_sta_priority(bssid));
|
|
1064
|
+
break;
|
|
1065
|
+
}
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
// Sort scan results using insertion sort for better memory efficiency
|
|
1070
|
+
insertion_sort_scan_results(this->scan_result_);
|
|
1071
|
+
|
|
1072
|
+
for (auto &res : this->scan_result_) {
|
|
1073
|
+
log_scan_result(res);
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
// SYNCHRONIZATION POINT: Establish link between scan_result_[0] and selected_sta_index_
|
|
1077
|
+
// After sorting, scan_result_[0] contains the best network. Now find which sta_[i] config
|
|
1078
|
+
// matches that network and record it in selected_sta_index_. This keeps the two indices
|
|
1079
|
+
// synchronized so build_params_for_current_phase_() can safely use both to build connection parameters.
|
|
1080
|
+
const WiFiScanResult &scan_res = this->scan_result_[0];
|
|
1081
|
+
bool found_match = false;
|
|
1082
|
+
if (scan_res.get_matches()) {
|
|
1083
|
+
for (size_t i = 0; i < this->sta_.size(); i++) {
|
|
1084
|
+
if (scan_res.matches(this->sta_[i])) {
|
|
1085
|
+
// Safe cast: sta_.size() limited to MAX_WIFI_NETWORKS (127) in __init__.py validation
|
|
1086
|
+
// No overflow check needed - YAML validation prevents >127 networks
|
|
1087
|
+
this->selected_sta_index_ = static_cast<int8_t>(i); // Links scan_result_[0] with sta_[i]
|
|
1088
|
+
found_match = true;
|
|
1089
|
+
break;
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
if (!found_match) {
|
|
1095
|
+
ESP_LOGW(TAG, "No matching network found");
|
|
1096
|
+
// No scan results matched our configured networks - transition directly to hidden mode
|
|
1097
|
+
// Don't call retry_connect() since we never attempted a connection (no BSSID to penalize)
|
|
1098
|
+
this->transition_to_phase_(WiFiRetryPhase::RETRY_HIDDEN);
|
|
1099
|
+
// If no hidden networks to try, skip connection attempt (will be handled on next loop)
|
|
1100
|
+
if (this->selected_sta_index_ == -1) {
|
|
1101
|
+
return;
|
|
1102
|
+
}
|
|
1103
|
+
// Now start connection attempt in hidden mode
|
|
1104
|
+
} else if (this->transition_to_phase_(WiFiRetryPhase::SCAN_CONNECTING)) {
|
|
1105
|
+
return; // scan started, wait for next loop iteration
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
yield();
|
|
1109
|
+
|
|
1110
|
+
WiFiAP params = this->build_params_for_current_phase_();
|
|
1111
|
+
// Ensure we're in SCAN_CONNECTING phase when connecting with scan results
|
|
1112
|
+
// (needed when scan was started directly without transition_to_phase_, e.g., initial scan)
|
|
1113
|
+
this->start_connecting(params);
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
void WiFiComponent::dump_config() {
|
|
1117
|
+
ESP_LOGCONFIG(TAG,
|
|
1118
|
+
"WiFi:\n"
|
|
1119
|
+
" Connected: %s",
|
|
1120
|
+
YESNO(this->is_connected()));
|
|
1121
|
+
this->print_connect_params_();
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
void WiFiComponent::check_connecting_finished() {
|
|
1125
|
+
auto status = this->wifi_sta_connect_status_();
|
|
1126
|
+
|
|
1127
|
+
if (status == WiFiSTAConnectStatus::CONNECTED) {
|
|
1128
|
+
if (wifi_ssid().empty()) {
|
|
1129
|
+
ESP_LOGW(TAG, "Connection incomplete");
|
|
1130
|
+
this->retry_connect();
|
|
1131
|
+
return;
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1134
|
+
ESP_LOGI(TAG, "Connected");
|
|
1135
|
+
// Warn if we had to retry with hidden network mode for a network that's not marked hidden
|
|
1136
|
+
// Only warn if we actually connected without scan data (SSID only), not if scan succeeded on retry
|
|
1137
|
+
if (const WiFiAP *config = this->get_selected_sta_(); this->retry_phase_ == WiFiRetryPhase::RETRY_HIDDEN &&
|
|
1138
|
+
config && !config->get_hidden() &&
|
|
1139
|
+
this->scan_result_.empty()) {
|
|
1140
|
+
ESP_LOGW(TAG, LOG_SECRET("'%s'") " should be marked hidden", config->get_ssid().c_str());
|
|
1141
|
+
}
|
|
1142
|
+
// Reset to initial phase on successful connection (don't log transition, just reset state)
|
|
1143
|
+
this->retry_phase_ = WiFiRetryPhase::INITIAL_CONNECT;
|
|
1144
|
+
this->num_retried_ = 0;
|
|
1145
|
+
// Ensure next connection attempt does not inherit error state
|
|
1146
|
+
// so when WiFi disconnects later we start fresh and don't see
|
|
1147
|
+
// the first connection as a failure.
|
|
1148
|
+
this->error_from_callback_ = false;
|
|
1149
|
+
|
|
1150
|
+
this->print_connect_params_();
|
|
1151
|
+
|
|
1152
|
+
if (this->has_ap()) {
|
|
1153
|
+
#ifdef USE_CAPTIVE_PORTAL
|
|
1154
|
+
if (this->is_captive_portal_active_()) {
|
|
1155
|
+
captive_portal::global_captive_portal->end();
|
|
1156
|
+
}
|
|
1157
|
+
#endif
|
|
1158
|
+
ESP_LOGD(TAG, "Disabling AP");
|
|
1159
|
+
this->wifi_mode_({}, false);
|
|
1160
|
+
}
|
|
1161
|
+
#ifdef USE_IMPROV
|
|
1162
|
+
if (this->is_esp32_improv_active_()) {
|
|
1163
|
+
esp32_improv::global_improv_component->stop();
|
|
1164
|
+
}
|
|
1165
|
+
#endif
|
|
1166
|
+
|
|
1167
|
+
this->state_ = WIFI_COMPONENT_STATE_STA_CONNECTED;
|
|
1168
|
+
this->num_retried_ = 0;
|
|
1169
|
+
|
|
1170
|
+
// Clear priority tracking if all priorities are at minimum
|
|
1171
|
+
this->clear_priorities_if_all_min_();
|
|
1172
|
+
|
|
1173
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
1174
|
+
this->save_fast_connect_settings_();
|
|
1175
|
+
#endif
|
|
1176
|
+
|
|
1177
|
+
// Free scan results memory unless a component needs them
|
|
1178
|
+
if (!this->keep_scan_results_) {
|
|
1179
|
+
this->scan_result_.clear();
|
|
1180
|
+
this->scan_result_.shrink_to_fit();
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
return;
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
uint32_t now = millis();
|
|
1187
|
+
if (now - this->action_started_ > 30000) {
|
|
1188
|
+
ESP_LOGW(TAG, "Connection timeout");
|
|
1189
|
+
this->retry_connect();
|
|
1190
|
+
return;
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
if (this->error_from_callback_) {
|
|
1194
|
+
ESP_LOGW(TAG, "Connecting to network failed (callback)");
|
|
1195
|
+
this->retry_connect();
|
|
1196
|
+
return;
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
if (status == WiFiSTAConnectStatus::CONNECTING) {
|
|
1200
|
+
return;
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
if (status == WiFiSTAConnectStatus::ERROR_NETWORK_NOT_FOUND) {
|
|
1204
|
+
ESP_LOGW(TAG, "Network no longer found");
|
|
1205
|
+
this->retry_connect();
|
|
1206
|
+
return;
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
if (status == WiFiSTAConnectStatus::ERROR_CONNECT_FAILED) {
|
|
1210
|
+
ESP_LOGW(TAG, "Connecting to network failed");
|
|
1211
|
+
this->retry_connect();
|
|
1212
|
+
return;
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
ESP_LOGW(TAG, "Unknown connection status %d", (int) status);
|
|
1216
|
+
this->retry_connect();
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
/// Determine the next retry phase based on current state and failure conditions
|
|
1220
|
+
/// This function examines the current retry phase, number of retries, and failure reasons
|
|
1221
|
+
/// to decide what phase to move to next. It does not modify any state - it only returns
|
|
1222
|
+
/// the recommended next phase.
|
|
1223
|
+
///
|
|
1224
|
+
/// @return The next WiFiRetryPhase to transition to (may be same as current phase if should retry)
|
|
1225
|
+
WiFiRetryPhase WiFiComponent::determine_next_phase_() {
|
|
1226
|
+
switch (this->retry_phase_) {
|
|
1227
|
+
case WiFiRetryPhase::INITIAL_CONNECT:
|
|
1228
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
1229
|
+
case WiFiRetryPhase::FAST_CONNECT_CYCLING_APS:
|
|
1230
|
+
// INITIAL_CONNECT and FAST_CONNECT_CYCLING_APS: no retries, try next AP or fall back to scan
|
|
1231
|
+
if (this->selected_sta_index_ < static_cast<int8_t>(this->sta_.size()) - 1) {
|
|
1232
|
+
return WiFiRetryPhase::FAST_CONNECT_CYCLING_APS; // Move to next AP
|
|
1233
|
+
}
|
|
1234
|
+
#endif
|
|
1235
|
+
// Check if we should try explicit hidden networks before scanning
|
|
1236
|
+
// This handles reconnection after connection loss where first network is hidden
|
|
1237
|
+
if (!this->sta_.empty() && this->sta_[0].get_hidden()) {
|
|
1238
|
+
return WiFiRetryPhase::EXPLICIT_HIDDEN;
|
|
1239
|
+
}
|
|
1240
|
+
// No more APs to try, fall back to scan
|
|
1241
|
+
return WiFiRetryPhase::SCAN_CONNECTING;
|
|
1242
|
+
|
|
1243
|
+
case WiFiRetryPhase::EXPLICIT_HIDDEN: {
|
|
1244
|
+
// Try all explicitly hidden networks before scanning
|
|
1245
|
+
if (this->num_retried_ + 1 < WIFI_RETRY_COUNT_PER_SSID) {
|
|
1246
|
+
return WiFiRetryPhase::EXPLICIT_HIDDEN; // Keep retrying same SSID
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
// Exhausted retries on current SSID - check for more explicitly hidden networks
|
|
1250
|
+
// Stop when we reach a visible network (proceed to scanning)
|
|
1251
|
+
size_t next_index = this->selected_sta_index_ + 1;
|
|
1252
|
+
if (next_index < this->sta_.size() && this->sta_[next_index].get_hidden()) {
|
|
1253
|
+
// Found another explicitly hidden network
|
|
1254
|
+
return WiFiRetryPhase::EXPLICIT_HIDDEN;
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
// No more consecutive explicitly hidden networks
|
|
1258
|
+
// If ALL networks are hidden, skip scanning and go directly to restart
|
|
1259
|
+
if (this->find_first_non_hidden_index_() < 0) {
|
|
1260
|
+
return WiFiRetryPhase::RESTARTING_ADAPTER;
|
|
1261
|
+
}
|
|
1262
|
+
// Otherwise proceed to scanning for non-hidden networks
|
|
1263
|
+
return WiFiRetryPhase::SCAN_CONNECTING;
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
case WiFiRetryPhase::SCAN_CONNECTING:
|
|
1267
|
+
// If scan found no networks or no matching networks, skip to hidden network mode
|
|
1268
|
+
if (this->scan_result_.empty() || !this->scan_result_[0].get_matches()) {
|
|
1269
|
+
return WiFiRetryPhase::RETRY_HIDDEN;
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
if (this->num_retried_ + 1 < WIFI_RETRY_COUNT_PER_BSSID) {
|
|
1273
|
+
return WiFiRetryPhase::SCAN_CONNECTING; // Keep retrying same BSSID
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
// Exhausted retries on current BSSID (scan_result_[0])
|
|
1277
|
+
// Its priority has been decreased, so on next scan it will be sorted lower
|
|
1278
|
+
// and we'll try the next best BSSID.
|
|
1279
|
+
// Check if there are any potentially hidden networks to try
|
|
1280
|
+
if (this->find_next_hidden_sta_(-1) >= 0) {
|
|
1281
|
+
return WiFiRetryPhase::RETRY_HIDDEN; // Found hidden networks to try
|
|
1282
|
+
}
|
|
1283
|
+
// No hidden networks - always go through RESTARTING_ADAPTER phase
|
|
1284
|
+
// This ensures num_retried_ gets reset and a fresh scan is triggered
|
|
1285
|
+
// The actual adapter restart will be skipped if captive portal/improv is active
|
|
1286
|
+
return WiFiRetryPhase::RESTARTING_ADAPTER;
|
|
1287
|
+
|
|
1288
|
+
case WiFiRetryPhase::RETRY_HIDDEN:
|
|
1289
|
+
// If no hidden SSIDs to try (selected_sta_index_ == -1), skip directly to rescan
|
|
1290
|
+
if (this->selected_sta_index_ >= 0) {
|
|
1291
|
+
if (this->num_retried_ + 1 < WIFI_RETRY_COUNT_PER_SSID) {
|
|
1292
|
+
return WiFiRetryPhase::RETRY_HIDDEN; // Keep retrying same SSID
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
// Exhausted retries on current SSID - check if there are more potentially hidden SSIDs to try
|
|
1296
|
+
if (this->selected_sta_index_ < static_cast<int8_t>(this->sta_.size()) - 1) {
|
|
1297
|
+
// Check if find_next_hidden_sta_() would actually find another hidden SSID
|
|
1298
|
+
// as it might have been seen in the scan results and we want to skip those
|
|
1299
|
+
// otherwise we will get stuck in RETRY_HIDDEN phase
|
|
1300
|
+
if (this->find_next_hidden_sta_(this->selected_sta_index_) != -1) {
|
|
1301
|
+
// More hidden SSIDs available - stay in RETRY_HIDDEN, advance will happen in retry_connect()
|
|
1302
|
+
return WiFiRetryPhase::RETRY_HIDDEN;
|
|
1303
|
+
}
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
// Exhausted all potentially hidden SSIDs - always go through RESTARTING_ADAPTER
|
|
1307
|
+
// This ensures num_retried_ gets reset and a fresh scan is triggered
|
|
1308
|
+
// The actual adapter restart will be skipped if captive portal/improv is active
|
|
1309
|
+
return WiFiRetryPhase::RESTARTING_ADAPTER;
|
|
1310
|
+
|
|
1311
|
+
case WiFiRetryPhase::RESTARTING_ADAPTER:
|
|
1312
|
+
// After restart, go back to explicit hidden if we went through it initially
|
|
1313
|
+
if (this->went_through_explicit_hidden_phase_()) {
|
|
1314
|
+
return WiFiRetryPhase::EXPLICIT_HIDDEN;
|
|
1315
|
+
}
|
|
1316
|
+
// Skip scanning when captive portal/improv is active to avoid disrupting AP
|
|
1317
|
+
// Even passive scans can cause brief AP disconnections on ESP32
|
|
1318
|
+
if (this->is_captive_portal_active_() || this->is_esp32_improv_active_()) {
|
|
1319
|
+
return WiFiRetryPhase::RETRY_HIDDEN;
|
|
1320
|
+
}
|
|
1321
|
+
return WiFiRetryPhase::SCAN_CONNECTING;
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
// Should never reach here
|
|
1325
|
+
return WiFiRetryPhase::SCAN_CONNECTING;
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
/// Transition from current retry phase to a new phase with logging and phase-specific setup
|
|
1329
|
+
/// This function handles the actual state change, including:
|
|
1330
|
+
/// - Logging the phase transition
|
|
1331
|
+
/// - Resetting the retry counter
|
|
1332
|
+
/// - Performing phase-specific initialization (e.g., advancing AP index, starting scans)
|
|
1333
|
+
///
|
|
1334
|
+
/// @param new_phase The phase we're transitioning TO
|
|
1335
|
+
/// @return true if connection attempt should be skipped (scan started or no networks to try)
|
|
1336
|
+
/// false if caller can proceed with connection attempt
|
|
1337
|
+
bool WiFiComponent::transition_to_phase_(WiFiRetryPhase new_phase) {
|
|
1338
|
+
WiFiRetryPhase old_phase = this->retry_phase_;
|
|
1339
|
+
|
|
1340
|
+
// No-op if staying in same phase
|
|
1341
|
+
if (old_phase == new_phase) {
|
|
1342
|
+
return false;
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
ESP_LOGD(TAG, "Retry phase: %s → %s", LOG_STR_ARG(retry_phase_to_log_string(old_phase)),
|
|
1346
|
+
LOG_STR_ARG(retry_phase_to_log_string(new_phase)));
|
|
1347
|
+
|
|
1348
|
+
this->retry_phase_ = new_phase;
|
|
1349
|
+
this->num_retried_ = 0; // Reset retry counter on phase change
|
|
1350
|
+
|
|
1351
|
+
// Phase-specific setup
|
|
1352
|
+
switch (new_phase) {
|
|
1353
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
1354
|
+
case WiFiRetryPhase::FAST_CONNECT_CYCLING_APS:
|
|
1355
|
+
// Move to next configured AP - clear old scan data so new AP is tried with config only
|
|
1356
|
+
this->selected_sta_index_++;
|
|
1357
|
+
this->scan_result_.clear();
|
|
1358
|
+
break;
|
|
1359
|
+
#endif
|
|
1360
|
+
|
|
1361
|
+
case WiFiRetryPhase::EXPLICIT_HIDDEN:
|
|
1362
|
+
// Starting explicit hidden phase - reset to first network
|
|
1363
|
+
this->selected_sta_index_ = 0;
|
|
1364
|
+
break;
|
|
1365
|
+
|
|
1366
|
+
case WiFiRetryPhase::SCAN_CONNECTING:
|
|
1367
|
+
// Transitioning to scan-based connection
|
|
1368
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
1369
|
+
if (old_phase == WiFiRetryPhase::FAST_CONNECT_CYCLING_APS) {
|
|
1370
|
+
ESP_LOGI(TAG, "Fast connect exhausted, falling back to scan");
|
|
1371
|
+
}
|
|
1372
|
+
#endif
|
|
1373
|
+
// Trigger scan if we don't have scan results OR if transitioning from phases that need fresh scan
|
|
1374
|
+
if (this->scan_result_.empty() || old_phase == WiFiRetryPhase::EXPLICIT_HIDDEN ||
|
|
1375
|
+
old_phase == WiFiRetryPhase::RETRY_HIDDEN || old_phase == WiFiRetryPhase::RESTARTING_ADAPTER) {
|
|
1376
|
+
this->selected_sta_index_ = -1; // Will be set after scan completes
|
|
1377
|
+
this->start_scanning();
|
|
1378
|
+
return true; // Started scan, wait for completion
|
|
1379
|
+
}
|
|
1380
|
+
// Already have scan results - selected_sta_index_ should already be synchronized
|
|
1381
|
+
// (set in check_scanning_finished() when scan completed)
|
|
1382
|
+
// No need to reset it here
|
|
1383
|
+
break;
|
|
1384
|
+
|
|
1385
|
+
case WiFiRetryPhase::RETRY_HIDDEN:
|
|
1386
|
+
// Starting hidden mode - find first SSID that wasn't in scan results
|
|
1387
|
+
if (old_phase == WiFiRetryPhase::SCAN_CONNECTING) {
|
|
1388
|
+
// Keep scan results so we can skip SSIDs that were visible in the scan
|
|
1389
|
+
// Don't clear scan_result_ - we need it to know which SSIDs are NOT hidden
|
|
1390
|
+
|
|
1391
|
+
// If first network is marked hidden, we went through EXPLICIT_HIDDEN phase
|
|
1392
|
+
// In that case, skip networks marked hidden:true (already tried)
|
|
1393
|
+
// Otherwise, include them (they haven't been tried yet)
|
|
1394
|
+
this->selected_sta_index_ = this->find_next_hidden_sta_(-1);
|
|
1395
|
+
|
|
1396
|
+
if (this->selected_sta_index_ == -1) {
|
|
1397
|
+
ESP_LOGD(TAG, "All SSIDs visible or already tried, skipping hidden mode");
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
break;
|
|
1401
|
+
|
|
1402
|
+
case WiFiRetryPhase::RESTARTING_ADAPTER:
|
|
1403
|
+
// Skip actual adapter restart if captive portal/improv is active
|
|
1404
|
+
// This allows state machine to reset num_retried_ and trigger fresh scan
|
|
1405
|
+
// without disrupting the captive portal/improv connection
|
|
1406
|
+
if (!this->is_captive_portal_active_() && !this->is_esp32_improv_active_()) {
|
|
1407
|
+
this->restart_adapter();
|
|
1408
|
+
}
|
|
1409
|
+
// Clear scan flag - we're starting a new retry cycle
|
|
1410
|
+
this->did_scan_this_cycle_ = false;
|
|
1411
|
+
// Always enter cooldown after restart (or skip-restart) to allow stabilization
|
|
1412
|
+
// Use extended cooldown when AP is active to avoid constant scanning that blocks DNS
|
|
1413
|
+
this->state_ = WIFI_COMPONENT_STATE_COOLDOWN;
|
|
1414
|
+
this->action_started_ = millis();
|
|
1415
|
+
// Return true to indicate we should wait (go to COOLDOWN) instead of immediately connecting
|
|
1416
|
+
return true;
|
|
1417
|
+
|
|
1418
|
+
default:
|
|
1419
|
+
break;
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1422
|
+
return false; // Did not start scan, can proceed with connection
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
/// Clear BSSID priority tracking if all priorities are at minimum (saves memory)
|
|
1426
|
+
/// At minimum priority, all BSSIDs are equally bad, so priority tracking is useless
|
|
1427
|
+
/// Called after successful connection or after failed connection attempts
|
|
1428
|
+
void WiFiComponent::clear_priorities_if_all_min_() {
|
|
1429
|
+
if (this->sta_priorities_.empty()) {
|
|
1430
|
+
return;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
int8_t first_priority = this->sta_priorities_[0].priority;
|
|
1434
|
+
|
|
1435
|
+
// Only clear if all priorities have been decremented to the minimum value
|
|
1436
|
+
// At this point, all BSSIDs have been equally penalized and priority info is useless
|
|
1437
|
+
if (first_priority != std::numeric_limits<int8_t>::min()) {
|
|
1438
|
+
return;
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
for (const auto &pri : this->sta_priorities_) {
|
|
1442
|
+
if (pri.priority != first_priority) {
|
|
1443
|
+
return; // Not all same, nothing to do
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
|
|
1447
|
+
// All priorities are at minimum - clear the vector to save memory and reset
|
|
1448
|
+
ESP_LOGD(TAG, "Clearing BSSID priorities (all at minimum)");
|
|
1449
|
+
this->sta_priorities_.clear();
|
|
1450
|
+
this->sta_priorities_.shrink_to_fit();
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
/// Log failed connection attempt and decrease BSSID priority to avoid repeated failures
|
|
1454
|
+
/// This function identifies which BSSID was attempted (from scan results or config),
|
|
1455
|
+
/// decreases its priority by 1.0 to discourage future attempts, and logs the change.
|
|
1456
|
+
///
|
|
1457
|
+
/// The priority degradation system ensures that failed BSSIDs are automatically sorted
|
|
1458
|
+
/// lower in subsequent scans, naturally cycling through different APs without explicit
|
|
1459
|
+
/// BSSID tracking within a scan cycle.
|
|
1460
|
+
///
|
|
1461
|
+
/// Priority sources:
|
|
1462
|
+
/// - SCAN_CONNECTING phase: Uses BSSID from scan_result_[0] (best match after sorting)
|
|
1463
|
+
/// - Other phases: Uses BSSID from config if explicitly specified by user or fast_connect
|
|
1464
|
+
///
|
|
1465
|
+
/// If no BSSID is available (SSID-only connection), priority adjustment is skipped.
|
|
1466
|
+
///
|
|
1467
|
+
/// IMPORTANT: Priority is only decreased on the LAST attempt for a BSSID in SCAN_CONNECTING phase.
|
|
1468
|
+
/// This prevents false positives from transient WiFi stack state issues after scanning.
|
|
1469
|
+
/// Single failures don't necessarily mean the AP is bad - two genuine failures provide
|
|
1470
|
+
/// higher confidence before degrading priority and skipping the BSSID in future scans.
|
|
1471
|
+
void WiFiComponent::log_and_adjust_priority_for_failed_connect_() {
|
|
1472
|
+
// Determine which BSSID we tried to connect to
|
|
1473
|
+
optional<bssid_t> failed_bssid;
|
|
1474
|
+
|
|
1475
|
+
if (this->retry_phase_ == WiFiRetryPhase::SCAN_CONNECTING && !this->scan_result_.empty()) {
|
|
1476
|
+
// Scan-based phase: always use best result (index 0)
|
|
1477
|
+
failed_bssid = this->scan_result_[0].get_bssid();
|
|
1478
|
+
} else if (const WiFiAP *config = this->get_selected_sta_(); config && config->get_bssid()) {
|
|
1479
|
+
// Config has specific BSSID (fast_connect or user-specified)
|
|
1480
|
+
failed_bssid = *config->get_bssid();
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
if (!failed_bssid.has_value()) {
|
|
1484
|
+
return; // No BSSID to penalize
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
// Get SSID for logging
|
|
1488
|
+
std::string ssid;
|
|
1489
|
+
if (this->retry_phase_ == WiFiRetryPhase::SCAN_CONNECTING && !this->scan_result_.empty()) {
|
|
1490
|
+
ssid = this->scan_result_[0].get_ssid();
|
|
1491
|
+
} else if (const WiFiAP *config = this->get_selected_sta_()) {
|
|
1492
|
+
ssid = config->get_ssid();
|
|
1493
|
+
}
|
|
1494
|
+
|
|
1495
|
+
// Only decrease priority on the last attempt for this phase
|
|
1496
|
+
// This prevents false positives from transient WiFi stack issues
|
|
1497
|
+
uint8_t max_retries = get_max_retries_for_phase(this->retry_phase_);
|
|
1498
|
+
bool is_last_attempt = (this->num_retried_ + 1 >= max_retries);
|
|
1499
|
+
|
|
1500
|
+
// Decrease priority only on last attempt to avoid false positives from transient failures
|
|
1501
|
+
int8_t old_priority = this->get_sta_priority(failed_bssid.value());
|
|
1502
|
+
int8_t new_priority = old_priority;
|
|
1503
|
+
|
|
1504
|
+
if (is_last_attempt) {
|
|
1505
|
+
// Decrease priority, but clamp to int8_t::min to prevent overflow
|
|
1506
|
+
new_priority =
|
|
1507
|
+
(old_priority > std::numeric_limits<int8_t>::min()) ? (old_priority - 1) : std::numeric_limits<int8_t>::min();
|
|
1508
|
+
this->set_sta_priority(failed_bssid.value(), new_priority);
|
|
1509
|
+
}
|
|
1510
|
+
char bssid_s[18];
|
|
1511
|
+
format_mac_addr_upper(failed_bssid.value().data(), bssid_s);
|
|
1512
|
+
ESP_LOGD(TAG, "Failed " LOG_SECRET("'%s'") " " LOG_SECRET("(%s)") ", priority %d → %d", ssid.c_str(), bssid_s,
|
|
1513
|
+
old_priority, new_priority);
|
|
1514
|
+
|
|
1515
|
+
// After adjusting priority, check if all priorities are now at minimum
|
|
1516
|
+
// If so, clear the vector to save memory and reset for fresh start
|
|
1517
|
+
this->clear_priorities_if_all_min_();
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
/// Handle target advancement or retry counter increment when staying in the same phase
|
|
1521
|
+
/// This function is called when a connection attempt fails and determine_next_phase_() indicates
|
|
1522
|
+
/// we should stay in the current phase. It decides whether to:
|
|
1523
|
+
/// - Advance to the next target (AP in fast_connect, SSID in hidden mode)
|
|
1524
|
+
/// - Or increment the retry counter to try the same target again
|
|
1525
|
+
///
|
|
1526
|
+
/// Phase-specific behavior:
|
|
1527
|
+
/// - FAST_CONNECT_CYCLING_APS: Always advance to next AP (no retries per AP)
|
|
1528
|
+
/// - RETRY_HIDDEN: Advance to next SSID after exhausting retries on current SSID
|
|
1529
|
+
/// - Other phases: Increment retry counter (will retry same target)
|
|
1530
|
+
void WiFiComponent::advance_to_next_target_or_increment_retry_() {
|
|
1531
|
+
WiFiRetryPhase current_phase = this->retry_phase_;
|
|
1532
|
+
|
|
1533
|
+
// Check if we need to advance to next AP/SSID within the same phase
|
|
1534
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
1535
|
+
if (current_phase == WiFiRetryPhase::FAST_CONNECT_CYCLING_APS) {
|
|
1536
|
+
// Fast connect: always advance to next AP (no retries per AP)
|
|
1537
|
+
this->selected_sta_index_++;
|
|
1538
|
+
this->num_retried_ = 0;
|
|
1539
|
+
ESP_LOGD(TAG, "Next AP in %s", LOG_STR_ARG(retry_phase_to_log_string(this->retry_phase_)));
|
|
1540
|
+
return;
|
|
1541
|
+
}
|
|
1542
|
+
#endif
|
|
1543
|
+
|
|
1544
|
+
if (current_phase == WiFiRetryPhase::EXPLICIT_HIDDEN && this->num_retried_ + 1 >= WIFI_RETRY_COUNT_PER_SSID) {
|
|
1545
|
+
// Explicit hidden: exhausted retries on current SSID, find next explicitly hidden network
|
|
1546
|
+
// Stop when we reach a visible network (proceed to scanning)
|
|
1547
|
+
size_t next_index = this->selected_sta_index_ + 1;
|
|
1548
|
+
if (next_index < this->sta_.size() && this->sta_[next_index].get_hidden()) {
|
|
1549
|
+
this->selected_sta_index_ = static_cast<int8_t>(next_index);
|
|
1550
|
+
this->num_retried_ = 0;
|
|
1551
|
+
ESP_LOGD(TAG, "Next explicit hidden network at index %d", static_cast<int>(next_index));
|
|
1552
|
+
return;
|
|
1553
|
+
}
|
|
1554
|
+
// No more consecutive explicit hidden networks found - fall through to trigger phase change
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1557
|
+
if (current_phase == WiFiRetryPhase::RETRY_HIDDEN && this->num_retried_ + 1 >= WIFI_RETRY_COUNT_PER_SSID) {
|
|
1558
|
+
// Hidden mode: exhausted retries on current SSID, find next potentially hidden SSID
|
|
1559
|
+
// If first network is marked hidden, we went through EXPLICIT_HIDDEN phase
|
|
1560
|
+
// In that case, skip networks marked hidden:true (already tried)
|
|
1561
|
+
// Otherwise, include them (they haven't been tried yet)
|
|
1562
|
+
int8_t next_index = this->find_next_hidden_sta_(this->selected_sta_index_);
|
|
1563
|
+
if (next_index != -1) {
|
|
1564
|
+
// Found another potentially hidden SSID
|
|
1565
|
+
this->selected_sta_index_ = next_index;
|
|
1566
|
+
this->num_retried_ = 0;
|
|
1567
|
+
return;
|
|
1568
|
+
}
|
|
1569
|
+
// No more potentially hidden SSIDs - set selected_sta_index_ to -1 to trigger phase change
|
|
1570
|
+
// This ensures determine_next_phase_() will skip the RETRY_HIDDEN logic and transition out
|
|
1571
|
+
this->selected_sta_index_ = -1;
|
|
1572
|
+
// Return early - phase change will happen on next wifi_loop() iteration
|
|
1573
|
+
return;
|
|
1574
|
+
}
|
|
1575
|
+
|
|
1576
|
+
// Don't increment retry counter if we're in a scan phase with no valid targets
|
|
1577
|
+
if (this->needs_scan_results_()) {
|
|
1578
|
+
return;
|
|
1579
|
+
}
|
|
1580
|
+
|
|
1581
|
+
// Increment retry counter to try the same target again
|
|
1582
|
+
this->num_retried_++;
|
|
1583
|
+
ESP_LOGD(TAG, "Retry attempt %u/%u in phase %s", this->num_retried_ + 1,
|
|
1584
|
+
get_max_retries_for_phase(this->retry_phase_), LOG_STR_ARG(retry_phase_to_log_string(this->retry_phase_)));
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1587
|
+
void WiFiComponent::retry_connect() {
|
|
1588
|
+
this->log_and_adjust_priority_for_failed_connect_();
|
|
1589
|
+
|
|
1590
|
+
// Determine next retry phase based on current state
|
|
1591
|
+
WiFiRetryPhase current_phase = this->retry_phase_;
|
|
1592
|
+
WiFiRetryPhase next_phase = this->determine_next_phase_();
|
|
1593
|
+
|
|
1594
|
+
// Handle phase transitions (transition_to_phase_ handles same-phase no-op internally)
|
|
1595
|
+
if (this->transition_to_phase_(next_phase)) {
|
|
1596
|
+
return; // Scan started or adapter restarted (which sets its own state)
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1599
|
+
if (next_phase == current_phase) {
|
|
1600
|
+
this->advance_to_next_target_or_increment_retry_();
|
|
1601
|
+
}
|
|
1602
|
+
|
|
1603
|
+
this->error_from_callback_ = false;
|
|
1604
|
+
|
|
1605
|
+
yield();
|
|
1606
|
+
// Check if we have a valid target before building params
|
|
1607
|
+
// After exhausting all networks in a phase, selected_sta_index_ may be -1
|
|
1608
|
+
// In that case, skip connection and let next wifi_loop() handle phase transition
|
|
1609
|
+
if (this->selected_sta_index_ >= 0) {
|
|
1610
|
+
WiFiAP params = this->build_params_for_current_phase_();
|
|
1611
|
+
this->start_connecting(params);
|
|
1612
|
+
}
|
|
1613
|
+
}
|
|
1614
|
+
|
|
1615
|
+
#ifdef USE_RP2040
|
|
1616
|
+
// RP2040's mDNS library (LEAmDNS) relies on LwipIntf::stateUpCB() to restart
|
|
1617
|
+
// mDNS when the network interface reconnects. However, this callback is disabled
|
|
1618
|
+
// in the arduino-pico framework. As a workaround, we block component setup until
|
|
1619
|
+
// WiFi is connected, ensuring mDNS.begin() is called with an active connection.
|
|
1620
|
+
|
|
1621
|
+
bool WiFiComponent::can_proceed() {
|
|
1622
|
+
if (!this->has_sta() || this->state_ == WIFI_COMPONENT_STATE_DISABLED || this->ap_setup_) {
|
|
1623
|
+
return true;
|
|
1624
|
+
}
|
|
1625
|
+
return this->is_connected();
|
|
1626
|
+
}
|
|
1627
|
+
#endif
|
|
1628
|
+
|
|
1629
|
+
void WiFiComponent::set_reboot_timeout(uint32_t reboot_timeout) { this->reboot_timeout_ = reboot_timeout; }
|
|
1630
|
+
bool WiFiComponent::is_connected() {
|
|
1631
|
+
return this->state_ == WIFI_COMPONENT_STATE_STA_CONNECTED &&
|
|
1632
|
+
this->wifi_sta_connect_status_() == WiFiSTAConnectStatus::CONNECTED && !this->error_from_callback_;
|
|
1633
|
+
}
|
|
1634
|
+
void WiFiComponent::set_power_save_mode(WiFiPowerSaveMode power_save) {
|
|
1635
|
+
this->power_save_ = power_save;
|
|
1636
|
+
#if defined(USE_ESP32) && defined(USE_WIFI_RUNTIME_POWER_SAVE)
|
|
1637
|
+
this->configured_power_save_ = power_save;
|
|
1638
|
+
#endif
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
void WiFiComponent::set_passive_scan(bool passive) { this->passive_scan_ = passive; }
|
|
1642
|
+
|
|
1643
|
+
bool WiFiComponent::is_captive_portal_active_() {
|
|
1644
|
+
#ifdef USE_CAPTIVE_PORTAL
|
|
1645
|
+
return captive_portal::global_captive_portal != nullptr && captive_portal::global_captive_portal->is_active();
|
|
1646
|
+
#else
|
|
1647
|
+
return false;
|
|
1648
|
+
#endif
|
|
1649
|
+
}
|
|
1650
|
+
bool WiFiComponent::is_esp32_improv_active_() {
|
|
1651
|
+
#ifdef USE_IMPROV
|
|
1652
|
+
return esp32_improv::global_improv_component != nullptr && esp32_improv::global_improv_component->is_active();
|
|
1653
|
+
#else
|
|
1654
|
+
return false;
|
|
1655
|
+
#endif
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
#if defined(USE_ESP32) && defined(USE_WIFI_RUNTIME_POWER_SAVE)
|
|
1659
|
+
bool WiFiComponent::request_high_performance() {
|
|
1660
|
+
// Already configured for high performance - request satisfied
|
|
1661
|
+
if (this->configured_power_save_ == WIFI_POWER_SAVE_NONE) {
|
|
1662
|
+
return true;
|
|
1663
|
+
}
|
|
1664
|
+
|
|
1665
|
+
// Semaphore initialization failed
|
|
1666
|
+
if (this->high_performance_semaphore_ == nullptr) {
|
|
1667
|
+
return false;
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1670
|
+
// Give the semaphore (non-blocking). This increments the count.
|
|
1671
|
+
return xSemaphoreGive(this->high_performance_semaphore_) == pdTRUE;
|
|
1672
|
+
}
|
|
1673
|
+
|
|
1674
|
+
bool WiFiComponent::release_high_performance() {
|
|
1675
|
+
// Already configured for high performance - nothing to release
|
|
1676
|
+
if (this->configured_power_save_ == WIFI_POWER_SAVE_NONE) {
|
|
1677
|
+
return true;
|
|
1678
|
+
}
|
|
1679
|
+
|
|
1680
|
+
// Semaphore initialization failed
|
|
1681
|
+
if (this->high_performance_semaphore_ == nullptr) {
|
|
1682
|
+
return false;
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
// Take the semaphore (non-blocking). This decrements the count.
|
|
1686
|
+
return xSemaphoreTake(this->high_performance_semaphore_, 0) == pdTRUE;
|
|
1687
|
+
}
|
|
1688
|
+
#endif // USE_ESP32 && USE_WIFI_RUNTIME_POWER_SAVE
|
|
1689
|
+
|
|
1690
|
+
#ifdef USE_WIFI_FAST_CONNECT
|
|
1691
|
+
bool WiFiComponent::load_fast_connect_settings_(WiFiAP ¶ms) {
|
|
1692
|
+
SavedWifiFastConnectSettings fast_connect_save{};
|
|
1693
|
+
|
|
1694
|
+
if (this->fast_connect_pref_.load(&fast_connect_save)) {
|
|
1695
|
+
// Validate saved AP index
|
|
1696
|
+
if (fast_connect_save.ap_index < 0 || static_cast<size_t>(fast_connect_save.ap_index) >= this->sta_.size()) {
|
|
1697
|
+
ESP_LOGW(TAG, "AP index out of bounds");
|
|
1698
|
+
return false;
|
|
1699
|
+
}
|
|
1700
|
+
|
|
1701
|
+
// Set selected index for future operations (save, retry, etc)
|
|
1702
|
+
this->selected_sta_index_ = fast_connect_save.ap_index;
|
|
1703
|
+
|
|
1704
|
+
// Copy entire config, then override with fast connect data
|
|
1705
|
+
params = this->sta_[fast_connect_save.ap_index];
|
|
1706
|
+
|
|
1707
|
+
// Override with saved BSSID/channel from fast connect (SSID/password/etc already copied from config)
|
|
1708
|
+
bssid_t bssid{};
|
|
1709
|
+
std::copy(fast_connect_save.bssid, fast_connect_save.bssid + 6, bssid.begin());
|
|
1710
|
+
params.set_bssid(bssid);
|
|
1711
|
+
params.set_channel(fast_connect_save.channel);
|
|
1712
|
+
// Fast connect uses specific BSSID+channel, not hidden network probe (even if config has hidden: true)
|
|
1713
|
+
params.set_hidden(false);
|
|
1714
|
+
|
|
1715
|
+
ESP_LOGD(TAG, "Loaded fast_connect settings");
|
|
1716
|
+
return true;
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1719
|
+
return false;
|
|
1720
|
+
}
|
|
1721
|
+
|
|
1722
|
+
void WiFiComponent::save_fast_connect_settings_() {
|
|
1723
|
+
bssid_t bssid = wifi_bssid();
|
|
1724
|
+
uint8_t channel = get_wifi_channel();
|
|
1725
|
+
// selected_sta_index_ is always valid here (called only after successful connection)
|
|
1726
|
+
// Fallback to 0 is defensive programming for robustness
|
|
1727
|
+
int8_t ap_index = this->selected_sta_index_ >= 0 ? this->selected_sta_index_ : 0;
|
|
1728
|
+
|
|
1729
|
+
// Skip save if settings haven't changed (compare with previously saved settings to reduce flash wear)
|
|
1730
|
+
SavedWifiFastConnectSettings previous_save{};
|
|
1731
|
+
if (this->fast_connect_pref_.load(&previous_save) && memcmp(previous_save.bssid, bssid.data(), 6) == 0 &&
|
|
1732
|
+
previous_save.channel == channel && previous_save.ap_index == ap_index) {
|
|
1733
|
+
return; // No change, nothing to save
|
|
1734
|
+
}
|
|
1735
|
+
|
|
1736
|
+
SavedWifiFastConnectSettings fast_connect_save{};
|
|
1737
|
+
memcpy(fast_connect_save.bssid, bssid.data(), 6);
|
|
1738
|
+
fast_connect_save.channel = channel;
|
|
1739
|
+
fast_connect_save.ap_index = ap_index;
|
|
1740
|
+
|
|
1741
|
+
this->fast_connect_pref_.save(&fast_connect_save);
|
|
1742
|
+
|
|
1743
|
+
ESP_LOGD(TAG, "Saved fast_connect settings");
|
|
1744
|
+
}
|
|
1745
|
+
#endif
|
|
1746
|
+
|
|
1747
|
+
void WiFiAP::set_ssid(const std::string &ssid) { this->ssid_ = ssid; }
|
|
1748
|
+
void WiFiAP::set_bssid(bssid_t bssid) { this->bssid_ = bssid; }
|
|
1749
|
+
void WiFiAP::set_bssid(optional<bssid_t> bssid) { this->bssid_ = bssid; }
|
|
1750
|
+
void WiFiAP::set_password(const std::string &password) { this->password_ = password; }
|
|
1751
|
+
#ifdef USE_WIFI_WPA2_EAP
|
|
1752
|
+
void WiFiAP::set_eap(optional<EAPAuth> eap_auth) { this->eap_ = std::move(eap_auth); }
|
|
1753
|
+
#endif
|
|
1754
|
+
void WiFiAP::set_channel(optional<uint8_t> channel) { this->channel_ = channel; }
|
|
1755
|
+
#ifdef USE_WIFI_MANUAL_IP
|
|
1756
|
+
void WiFiAP::set_manual_ip(optional<ManualIP> manual_ip) { this->manual_ip_ = manual_ip; }
|
|
1757
|
+
#endif
|
|
1758
|
+
void WiFiAP::set_hidden(bool hidden) { this->hidden_ = hidden; }
|
|
1759
|
+
const std::string &WiFiAP::get_ssid() const { return this->ssid_; }
|
|
1760
|
+
const optional<bssid_t> &WiFiAP::get_bssid() const { return this->bssid_; }
|
|
1761
|
+
const std::string &WiFiAP::get_password() const { return this->password_; }
|
|
1762
|
+
#ifdef USE_WIFI_WPA2_EAP
|
|
1763
|
+
const optional<EAPAuth> &WiFiAP::get_eap() const { return this->eap_; }
|
|
1764
|
+
#endif
|
|
1765
|
+
const optional<uint8_t> &WiFiAP::get_channel() const { return this->channel_; }
|
|
1766
|
+
#ifdef USE_WIFI_MANUAL_IP
|
|
1767
|
+
const optional<ManualIP> &WiFiAP::get_manual_ip() const { return this->manual_ip_; }
|
|
1768
|
+
#endif
|
|
1769
|
+
bool WiFiAP::get_hidden() const { return this->hidden_; }
|
|
1770
|
+
|
|
1771
|
+
WiFiScanResult::WiFiScanResult(const bssid_t &bssid, std::string ssid, uint8_t channel, int8_t rssi, bool with_auth,
|
|
1772
|
+
bool is_hidden)
|
|
1773
|
+
: bssid_(bssid),
|
|
1774
|
+
channel_(channel),
|
|
1775
|
+
rssi_(rssi),
|
|
1776
|
+
ssid_(std::move(ssid)),
|
|
1777
|
+
with_auth_(with_auth),
|
|
1778
|
+
is_hidden_(is_hidden) {}
|
|
1779
|
+
bool WiFiScanResult::matches(const WiFiAP &config) const {
|
|
1780
|
+
if (config.get_hidden()) {
|
|
1781
|
+
// User configured a hidden network, only match actually hidden networks
|
|
1782
|
+
// don't match SSID
|
|
1783
|
+
if (!this->is_hidden_)
|
|
1784
|
+
return false;
|
|
1785
|
+
} else if (!config.get_ssid().empty()) {
|
|
1786
|
+
// check if SSID matches
|
|
1787
|
+
if (config.get_ssid() != this->ssid_)
|
|
1788
|
+
return false;
|
|
1789
|
+
} else {
|
|
1790
|
+
// network is configured without SSID - match other settings
|
|
1791
|
+
}
|
|
1792
|
+
// If BSSID configured, only match for correct BSSIDs
|
|
1793
|
+
if (config.get_bssid().has_value() && *config.get_bssid() != this->bssid_)
|
|
1794
|
+
return false;
|
|
1795
|
+
|
|
1796
|
+
#ifdef USE_WIFI_WPA2_EAP
|
|
1797
|
+
// BSSID requires auth but no PSK or EAP credentials given
|
|
1798
|
+
if (this->with_auth_ && (config.get_password().empty() && !config.get_eap().has_value()))
|
|
1799
|
+
return false;
|
|
1800
|
+
|
|
1801
|
+
// BSSID does not require auth, but PSK or EAP credentials given
|
|
1802
|
+
if (!this->with_auth_ && (!config.get_password().empty() || config.get_eap().has_value()))
|
|
1803
|
+
return false;
|
|
1804
|
+
#else
|
|
1805
|
+
// If PSK given, only match for networks with auth (and vice versa)
|
|
1806
|
+
if (config.get_password().empty() == this->with_auth_)
|
|
1807
|
+
return false;
|
|
1808
|
+
#endif
|
|
1809
|
+
|
|
1810
|
+
// If channel configured, only match networks on that channel.
|
|
1811
|
+
if (config.get_channel().has_value() && *config.get_channel() != this->channel_) {
|
|
1812
|
+
return false;
|
|
1813
|
+
}
|
|
1814
|
+
return true;
|
|
1815
|
+
}
|
|
1816
|
+
bool WiFiScanResult::get_matches() const { return this->matches_; }
|
|
1817
|
+
void WiFiScanResult::set_matches(bool matches) { this->matches_ = matches; }
|
|
1818
|
+
const bssid_t &WiFiScanResult::get_bssid() const { return this->bssid_; }
|
|
1819
|
+
const std::string &WiFiScanResult::get_ssid() const { return this->ssid_; }
|
|
1820
|
+
uint8_t WiFiScanResult::get_channel() const { return this->channel_; }
|
|
1821
|
+
int8_t WiFiScanResult::get_rssi() const { return this->rssi_; }
|
|
1822
|
+
bool WiFiScanResult::get_with_auth() const { return this->with_auth_; }
|
|
1823
|
+
bool WiFiScanResult::get_is_hidden() const { return this->is_hidden_; }
|
|
1824
|
+
|
|
1825
|
+
bool WiFiScanResult::operator==(const WiFiScanResult &rhs) const { return this->bssid_ == rhs.bssid_; }
|
|
1826
|
+
|
|
1827
|
+
WiFiComponent *global_wifi_component; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
|
1828
|
+
|
|
1829
|
+
} // namespace esphome::wifi
|
|
1830
|
+
#endif
|