esphome 2025.5.1__py3-none-any.whl → 2025.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +20 -14
- esphome/components/a4988/a4988.cpp +1 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
- esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
- esphome/components/adc/adc_sensor_esp32.cpp +5 -3
- esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
- esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
- esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
- esphome/components/adc128s102/adc128s102.cpp +1 -1
- esphome/components/ade7880/ade7880.cpp +28 -17
- esphome/components/ade7953_base/ade7953_base.cpp +12 -9
- esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
- esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
- esphome/components/ads1115/ads1115.cpp +3 -5
- esphome/components/ads1118/ads1118.cpp +2 -1
- esphome/components/ags10/ags10.cpp +3 -2
- esphome/components/aht10/aht10.cpp +27 -29
- esphome/components/aic3204/aic3204.cpp +2 -2
- esphome/components/alarm_control_panel/__init__.py +1 -0
- esphome/components/am2315c/am2315c.cpp +2 -2
- esphome/components/am2320/am2320.cpp +2 -2
- esphome/components/am43/am43_base.h +1 -1
- esphome/components/am43/cover/am43_cover.cpp +4 -2
- esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
- esphome/components/apds9306/apds9306.cpp +8 -5
- esphome/components/apds9960/apds9960.cpp +2 -2
- esphome/components/api/__init__.py +5 -0
- esphome/components/api/api_connection.cpp +753 -379
- esphome/components/api/api_connection.h +341 -283
- esphome/components/api/api_frame_helper.cpp +349 -344
- esphome/components/api/api_frame_helper.h +121 -94
- esphome/components/api/api_pb2.cpp +5 -0
- esphome/components/api/api_pb2.h +703 -227
- esphome/components/api/api_pb2_service.cpp +12 -688
- esphome/components/api/api_pb2_service.h +53 -207
- esphome/components/api/api_server.cpp +71 -29
- esphome/components/api/api_server.h +9 -0
- esphome/components/api/client.py +5 -4
- esphome/components/api/homeassistant_service.h +1 -1
- esphome/components/api/list_entities.cpp +1 -1
- esphome/components/api/proto.cpp +1 -0
- esphome/components/api/proto.h +5 -4
- esphome/components/api/subscribe_state.cpp +8 -16
- esphome/components/as3935/as3935.cpp +3 -3
- esphome/components/as5600/as5600.cpp +9 -7
- esphome/components/as7341/as7341.cpp +7 -5
- esphome/components/at581x/at581x.cpp +13 -10
- esphome/components/atm90e26/atm90e26.cpp +2 -2
- esphome/components/atm90e32/atm90e32.cpp +3 -3
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
- esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
- esphome/components/bedjet/bedjet_hub.cpp +6 -4
- esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
- esphome/components/bh1750/bh1750.cpp +2 -2
- esphome/components/binary_sensor/__init__.py +1 -0
- esphome/components/binary_sensor/automation.cpp +1 -2
- esphome/components/bl0906/bl0906.cpp +1 -1
- esphome/components/bl0942/bl0942.cpp +11 -8
- esphome/components/bl0942/sensor.py +1 -1
- esphome/components/ble_client/__init__.py +5 -1
- esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
- esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
- esphome/components/bluetooth_proxy/__init__.py +5 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
- esphome/components/bme280_base/bme280_base.cpp +5 -6
- esphome/components/bme680/bme680.cpp +3 -3
- esphome/components/bme680/sensor.py +2 -2
- esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
- esphome/components/bme680_bsec/sensor.py +7 -3
- esphome/components/bme68x_bsec2/__init__.py +6 -5
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
- esphome/components/bme68x_bsec2/sensor.py +4 -4
- esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
- esphome/components/bmi160/bmi160.cpp +11 -11
- esphome/components/bmp085/bmp085.cpp +2 -2
- esphome/components/bmp280_base/bmp280_base.cpp +3 -3
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
- esphome/components/bmp581/bmp581.cpp +33 -27
- esphome/components/bp1658cj/bp1658cj.cpp +5 -3
- esphome/components/bp5758d/bp5758d.cpp +1 -1
- esphome/components/button/__init__.py +1 -0
- esphome/components/canbus/canbus.cpp +1 -1
- esphome/components/cap1188/cap1188.cpp +6 -4
- esphome/components/captive_portal/captive_portal.cpp +1 -1
- esphome/components/ccs811/ccs811.cpp +3 -2
- esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
- esphome/components/ch422g/ch422g.cpp +2 -2
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
- esphome/components/climate/__init__.py +1 -0
- esphome/components/climate/climate.cpp +12 -7
- esphome/components/climate/climate.h +1 -1
- esphome/components/climate_ir/climate_ir.cpp +7 -4
- esphome/components/cm1106/__init__.py +1 -0
- esphome/components/cm1106/cm1106.cpp +112 -0
- esphome/components/cm1106/cm1106.h +40 -0
- esphome/components/cm1106/sensor.py +72 -0
- esphome/components/const/__init__.py +1 -0
- esphome/components/cover/__init__.py +1 -0
- esphome/components/cs5460a/cs5460a.cpp +16 -11
- esphome/components/cse7761/cse7761.cpp +2 -2
- esphome/components/cse7766/cse7766.cpp +0 -5
- esphome/components/cse7766/cse7766.h +5 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
- esphome/components/current_based/current_based_cover.cpp +4 -2
- esphome/components/dac7678/dac7678_output.cpp +4 -4
- esphome/components/dallas_temp/dallas_temp.cpp +2 -3
- esphome/components/daly_bms/daly_bms.cpp +2 -1
- esphome/components/dashboard_import/__init__.py +1 -2
- esphome/components/datetime/__init__.py +3 -1
- esphome/components/datetime/date_entity.cpp +5 -5
- esphome/components/datetime/datetime_base.h +0 -5
- esphome/components/datetime/datetime_entity.cpp +8 -8
- esphome/components/datetime/time_entity.cpp +4 -4
- esphome/components/debug/debug_component.cpp +1 -5
- esphome/components/debug/debug_component.h +1 -1
- esphome/components/debug/debug_esp32.cpp +4 -2
- esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
- esphome/components/demo/__init__.py +206 -0
- esphome/components/demo/demo_alarm_control_panel.h +65 -0
- esphome/components/demo/demo_button.h +15 -0
- esphome/components/demo/demo_date.h +34 -0
- esphome/components/demo/demo_datetime.h +40 -0
- esphome/components/demo/demo_lock.h +17 -0
- esphome/components/demo/demo_select.h +15 -0
- esphome/components/demo/demo_text.h +18 -0
- esphome/components/demo/demo_time.h +34 -0
- esphome/components/demo/demo_valve.h +54 -0
- esphome/components/dfrobot_sen0395/commands.cpp +3 -3
- esphome/components/dht/dht.cpp +29 -50
- esphome/components/dht12/dht12.cpp +2 -2
- esphome/components/display/display.h +5 -3
- esphome/components/dps310/dps310.cpp +7 -5
- esphome/components/ds1307/ds1307.cpp +2 -2
- esphome/components/dsmr/dsmr.cpp +5 -3
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
- esphome/components/duty_time/duty_time_sensor.cpp +5 -3
- esphome/components/ee895/ee895.cpp +3 -3
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
- esphome/components/emc2101/emc2101.cpp +11 -9
- esphome/components/ens160_base/ens160_base.cpp +2 -2
- esphome/components/ens210/ens210.cpp +2 -2
- esphome/components/es7210/es7210.cpp +6 -4
- esphome/components/es7243e/es7243e.cpp +1 -1
- esphome/components/es8156/es8156.cpp +1 -1
- esphome/components/es8311/es8311.cpp +8 -6
- esphome/components/es8388/__init__.py +0 -0
- esphome/components/es8388/audio_dac.py +26 -0
- esphome/components/es8388/es8388.cpp +289 -0
- esphome/components/es8388/es8388.h +81 -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 +118 -23
- esphome/components/esp32/boards.py +208 -125
- esphome/components/esp32/const.py +6 -0
- esphome/components/esp32/gpio.py +14 -1
- esphome/components/esp32/gpio_esp32_c5.py +45 -0
- esphome/components/esp32/gpio_esp32_p4.py +43 -0
- esphome/components/esp32/preferences.cpp +7 -7
- esphome/components/esp32_ble/__init__.py +115 -0
- esphome/components/esp32_ble/ble.cpp +101 -54
- esphome/components/esp32_ble/ble.h +24 -5
- esphome/components/esp32_ble/ble_event.h +172 -32
- esphome/components/esp32_ble/ble_scan_result.h +24 -0
- esphome/components/esp32_ble/ble_uuid.h +1 -1
- esphome/components/esp32_ble/queue.h +53 -27
- esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
- esphome/components/esp32_ble_server/__init__.py +4 -1
- esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
- esphome/components/esp32_ble_server/ble_server.h +0 -1
- esphome/components/esp32_ble_tracker/__init__.py +7 -2
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
- esphome/components/esp32_camera/esp32_camera.cpp +35 -27
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
- esphome/components/esp32_dac/esp32_dac.cpp +2 -2
- esphome/components/esp32_improv/__init__.py +5 -1
- esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
- esphome/components/esp32_rmt_led_strip/light.py +5 -1
- esphome/components/esp32_touch/esp32_touch.cpp +12 -8
- esphome/components/esp8266/gpio.cpp +10 -1
- esphome/components/esp8266/preferences.cpp +6 -6
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
- esphome/components/esp_ldo/__init__.py +91 -0
- esphome/components/esp_ldo/esp_ldo.cpp +43 -0
- esphome/components/esp_ldo/esp_ldo.h +43 -0
- esphome/components/esphome/ota/ota_esphome.cpp +15 -8
- esphome/components/ethernet/ethernet_component.cpp +38 -26
- esphome/components/ethernet/ethernet_component.h +1 -1
- esphome/components/event/__init__.py +1 -0
- esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
- esphome/components/ezo/ezo.cpp +1 -1
- esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
- esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
- esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
- esphome/components/fan/__init__.py +1 -0
- esphome/components/fan/fan.cpp +30 -19
- esphome/components/fastled_base/fastled_light.cpp +7 -5
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
- esphome/components/fs3000/fs3000.cpp +1 -1
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
- esphome/components/ft63x6/ft63x6.cpp +5 -3
- esphome/components/gcja5/gcja5.cpp +0 -12
- esphome/components/gcja5/gcja5.h +8 -3
- esphome/components/gdk101/gdk101.cpp +2 -2
- esphome/components/globals/globals_component.h +13 -10
- esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
- esphome/components/gp8403/gp8403.cpp +4 -2
- esphome/components/gp8403/output/gp8403_output.cpp +4 -2
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
- esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
- esphome/components/gpio/switch/gpio_switch.cpp +1 -1
- esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
- esphome/components/growatt_solar/growatt_solar.cpp +6 -3
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
- esphome/components/haier/haier_base.cpp +2 -2
- esphome/components/haier/hon_climate.cpp +13 -6
- esphome/components/havells_solar/havells_solar.cpp +5 -2
- esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
- esphome/components/hdc1080/hdc1080.cpp +2 -2
- esphome/components/he60r/he60r.cpp +4 -2
- esphome/components/hlw8012/hlw8012.cpp +6 -4
- esphome/components/hm3301/hm3301.cpp +2 -2
- esphome/components/hmc5883l/hmc5883l.cpp +2 -2
- esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
- esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
- esphome/components/honeywellabp/honeywellabp.cpp +4 -2
- esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
- esphome/components/hte501/hte501.cpp +3 -2
- esphome/components/http_request/__init__.py +2 -2
- esphome/components/http_request/http_request.cpp +7 -5
- esphome/components/http_request/http_request_idf.cpp +4 -2
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/htu21d/htu21d.cpp +2 -2
- esphome/components/htu31d/htu31d.cpp +2 -2
- esphome/components/hx711/hx711.cpp +2 -2
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
- esphome/components/hyt271/hyt271.cpp +2 -2
- esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
- esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
- esphome/components/i2s_audio/__init__.py +2 -0
- esphome/components/i2s_audio/i2s_audio.cpp +3 -4
- esphome/components/i2s_audio/i2s_audio.h +1 -1
- esphome/components/i2s_audio/media_player/__init__.py +1 -1
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +85 -77
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +6 -0
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
- esphome/components/iaqcore/iaqcore.cpp +3 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
- esphome/components/ili9xxx/ili9xxx_display.h +1 -1
- esphome/components/image/image.cpp +1 -0
- esphome/components/ina219/ina219.cpp +2 -2
- esphome/components/ina226/ina226.cpp +8 -5
- esphome/components/ina260/ina260.cpp +1 -1
- esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
- esphome/components/ina3221/ina3221.cpp +2 -2
- esphome/components/inkplate6/display.py +12 -2
- esphome/components/inkplate6/inkplate.cpp +13 -9
- esphome/components/inkplate6/inkplate.h +7 -6
- esphome/components/integration/integration_sensor.cpp +1 -1
- esphome/components/internal_temperature/internal_temperature.cpp +4 -4
- esphome/components/json/json_util.cpp +4 -5
- esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
- esphome/components/key_collector/key_collector.cpp +4 -2
- esphome/components/kmeteriso/kmeteriso.cpp +4 -4
- esphome/components/kuntze/kuntze.cpp +4 -2
- esphome/components/lc709203f/__init__.py +1 -0
- esphome/components/lc709203f/lc709203f.cpp +299 -0
- esphome/components/lc709203f/lc709203f.h +55 -0
- esphome/components/lc709203f/sensor.py +93 -0
- esphome/components/lcd_base/lcd_display.cpp +2 -2
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
- esphome/components/lcd_menu/lcd_menu.cpp +6 -4
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
- esphome/components/ld2410/ld2410.cpp +6 -7
- esphome/components/ld2420/ld2420.cpp +9 -7
- esphome/components/ld2450/ld2450.cpp +6 -4
- esphome/components/ld2450/sensor.py +2 -2
- esphome/components/ledc/ledc_output.cpp +32 -28
- esphome/components/libretiny/const.py +1 -1
- esphome/components/libretiny/preferences.cpp +6 -7
- esphome/components/light/__init__.py +2 -1
- esphome/components/light/esp_hsv_color.h +1 -1
- esphome/components/light/light_state.cpp +9 -5
- esphome/components/light/light_state.h +15 -15
- esphome/components/light/light_transformer.h +1 -1
- esphome/components/lightwaverf/LwTx.cpp +1 -1
- esphome/components/lightwaverf/lightwaverf.cpp +1 -1
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
- esphome/components/lock/__init__.py +1 -0
- esphome/components/lock/lock.h +1 -1
- esphome/components/logger/__init__.py +6 -0
- esphome/components/logger/logger.cpp +11 -20
- esphome/components/logger/logger.h +5 -6
- esphome/components/logger/logger_esp32.cpp +5 -5
- esphome/components/ltr390/ltr390.cpp +8 -5
- esphome/components/ltr501/ltr501.cpp +19 -14
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
- esphome/components/lvgl/__init__.py +2 -2
- esphome/components/lvgl/automation.py +5 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/lv_validation.py +1 -3
- esphome/components/lvgl/lvcode.py +7 -8
- esphome/components/lvgl/lvgl_esphome.cpp +26 -10
- esphome/components/lvgl/schemas.py +22 -23
- esphome/components/lvgl/trigger.py +8 -3
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/canvas.py +9 -3
- esphome/components/lvgl/widgets/line.py +2 -1
- esphome/components/lvgl/widgets/tabview.py +7 -0
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
- esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
- esphome/components/max17043/max17043.cpp +2 -2
- esphome/components/max31855/max31855.cpp +2 -1
- esphome/components/max31856/max31856.cpp +9 -11
- esphome/components/max31865/max31865.cpp +6 -4
- esphome/components/max44009/max44009.cpp +2 -2
- esphome/components/max6675/max6675.cpp +1 -1
- esphome/components/max6956/max6956.cpp +5 -3
- esphome/components/max7219/max7219.cpp +8 -6
- esphome/components/max7219digit/automation.h +52 -0
- esphome/components/max7219digit/display.py +93 -1
- esphome/components/max7219digit/max7219digit.cpp +16 -13
- esphome/components/max9611/max9611.cpp +9 -6
- esphome/components/mcp23008/mcp23008.cpp +1 -1
- esphome/components/mcp23016/mcp23016.cpp +1 -1
- esphome/components/mcp23017/mcp23017.cpp +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +1 -1
- esphome/components/mcp3008/mcp3008.cpp +1 -1
- esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
- esphome/components/mcp3204/mcp3204.cpp +1 -1
- esphome/components/mcp4461/mcp4461.cpp +2 -2
- esphome/components/mcp4725/mcp4725.cpp +2 -2
- esphome/components/mcp4728/mcp4728.cpp +2 -2
- esphome/components/mcp9600/mcp9600.cpp +1 -1
- esphome/components/mcp9808/mcp9808.cpp +4 -4
- esphome/components/mdns/mdns_component.cpp +8 -2
- esphome/components/mdns/mdns_component.h +3 -1
- esphome/components/mdns/mdns_esp32.cpp +2 -2
- esphome/components/media_player/__init__.py +1 -0
- esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
- esphome/components/micro_wake_word/streaming_model.cpp +10 -6
- esphome/components/micronova/micronova.h +2 -2
- esphome/components/mics_4514/mics_4514.cpp +2 -2
- esphome/components/midea/air_conditioner.cpp +7 -5
- esphome/components/midea_ir/midea_ir.cpp +1 -1
- esphome/components/mipi_spi/mipi_spi.cpp +24 -15
- esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
- esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
- esphome/components/mlx90614/mlx90614.cpp +4 -3
- esphome/components/mmc5603/mmc5603.cpp +2 -2
- esphome/components/mmc5983/mmc5983.cpp +1 -1
- esphome/components/modbus/modbus.cpp +7 -5
- esphome/components/modbus_controller/modbus_controller.cpp +6 -4
- esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
- esphome/components/modbus_controller/switch/__init__.py +6 -2
- esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
- esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
- esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
- esphome/components/mpr121/mpr121.cpp +2 -2
- esphome/components/mpu6050/mpu6050.cpp +6 -6
- esphome/components/mpu6886/mpu6886.cpp +6 -6
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
- esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +31 -24
- esphome/components/mqtt/mqtt_component.cpp +3 -3
- esphome/components/mqtt/mqtt_cover.cpp +8 -4
- esphome/components/mqtt/mqtt_fan.cpp +12 -6
- esphome/components/mqtt/mqtt_valve.cpp +4 -2
- esphome/components/ms5611/ms5611.cpp +2 -2
- esphome/components/ms8607/ms8607.cpp +2 -2
- esphome/components/msa3xx/msa3xx.cpp +16 -12
- esphome/components/my9231/my9231.cpp +7 -5
- esphome/components/nau7802/nau7802.cpp +6 -4
- esphome/components/neopixelbus/neopixelbus_light.h +2 -2
- esphome/components/network/ip_address.h +1 -1
- esphome/components/network/util.cpp +13 -0
- esphome/components/nextion/base_component.py +2 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
- esphome/components/nextion/display.py +34 -22
- esphome/components/nextion/nextion.cpp +182 -143
- esphome/components/nextion/nextion.h +36 -0
- esphome/components/nextion/nextion_commands.cpp +3 -3
- esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
- esphome/components/nextion/nextion_upload_idf.cpp +79 -80
- esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
- esphome/components/nextion/switch/nextion_switch.cpp +2 -2
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
- esphome/components/nfc/nci_message.h +1 -1
- esphome/components/nfc/ndef_record.h +1 -1
- esphome/components/nfc/ndef_record_text.h +1 -1
- esphome/components/nfc/ndef_record_uri.h +1 -1
- esphome/components/nfc/nfc.h +1 -1
- esphome/components/nfc/nfc_tag.h +1 -1
- esphome/components/noblex/noblex.cpp +1 -1
- esphome/components/npi19/npi19.cpp +5 -7
- esphome/components/number/__init__.py +11 -0
- esphome/components/number/number.cpp +1 -1
- esphome/components/number/number.h +0 -4
- esphome/components/online_image/__init__.py +13 -1
- esphome/components/online_image/online_image.cpp +26 -4
- esphome/components/online_image/online_image.h +21 -4
- esphome/components/opentherm/generate.py +3 -3
- esphome/components/opentherm/hub.cpp +11 -7
- esphome/components/opentherm/number/number.cpp +5 -3
- esphome/components/opentherm/opentherm.h +1 -1
- esphome/components/opentherm/schema.py +13 -13
- esphome/components/opentherm/validate.py +1 -1
- esphome/components/openthread/__init__.py +146 -0
- esphome/components/openthread/const.py +10 -0
- esphome/components/openthread/openthread.cpp +206 -0
- esphome/components/openthread/openthread.h +68 -0
- esphome/components/openthread/openthread_esp.cpp +164 -0
- esphome/components/openthread/tlv.py +58 -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/output/float_output.cpp +1 -1
- esphome/components/output/switch/output_switch.cpp +1 -1
- esphome/components/packet_transport/packet_transport.cpp +6 -4
- esphome/components/pca6416a/pca6416a.cpp +2 -2
- esphome/components/pca9554/pca9554.cpp +6 -4
- esphome/components/pca9685/pca9685_output.cpp +12 -8
- esphome/components/pcd8544/pcd_8544.cpp +1 -1
- esphome/components/pcf85063/pcf85063.cpp +2 -2
- esphome/components/pcf8563/pcf8563.cpp +2 -2
- esphome/components/pcf8574/pcf8574.cpp +2 -2
- esphome/components/pid/pid_climate.cpp +8 -5
- esphome/components/pid/pid_climate.h +1 -1
- esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
- esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
- esphome/components/pipsolar/pipsolar.cpp +3 -3
- esphome/components/pm1006/pm1006.cpp +3 -7
- esphome/components/pm1006/pm1006.h +4 -1
- esphome/components/pm2005/pm2005.cpp +12 -13
- esphome/components/pm2005/sensor.py +1 -1
- esphome/components/pmsa003i/pmsa003i.cpp +2 -2
- esphome/components/pmsx003/pmsx003.cpp +0 -4
- esphome/components/pmsx003/pmsx003.h +5 -2
- esphome/components/pmwcs3/pmwcs3.cpp +9 -13
- esphome/components/pmwcs3/pmwcs3.h +0 -1
- esphome/components/pn532/pn532.cpp +7 -7
- esphome/components/pn532/pn532.h +1 -1
- esphome/components/pn532_spi/pn532_spi.cpp +1 -1
- esphome/components/pn7150/pn7150.cpp +4 -4
- esphome/components/pn7160/pn7160.cpp +4 -4
- esphome/components/power_supply/power_supply.cpp +6 -4
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/prometheus/__init__.py +0 -1
- esphome/components/psram/__init__.py +59 -35
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
- esphome/components/pylontech/pylontech.cpp +2 -2
- esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
- esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
- esphome/components/pzemac/pzemac.cpp +4 -2
- esphome/components/pzemdc/pzemdc.cpp +4 -2
- esphome/components/qmc5883l/qmc5883l.cpp +2 -2
- esphome/components/qmp6988/qmp6988.cpp +2 -2
- esphome/components/qmp6988/qmp6988.h +1 -1
- esphome/components/qr_code/qr_code.cpp +5 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
- esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
- esphome/components/rc522/rc522.cpp +5 -5
- esphome/components/rdm6300/rdm6300.cpp +1 -0
- esphome/components/remote_receiver/__init__.py +10 -2
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
- esphome/components/remote_transmitter/__init__.py +10 -2
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
- esphome/components/resistance/resistance_sensor.cpp +6 -3
- esphome/components/restart/button/restart_button.cpp +1 -1
- esphome/components/restart/switch/restart_switch.cpp +1 -1
- esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
- esphome/components/rp2040/__init__.py +7 -0
- esphome/components/rp2040/core.cpp +8 -1
- esphome/components/rp2040/gpio.cpp +26 -9
- esphome/components/rp2040/preferences.cpp +3 -3
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
- esphome/components/rp2040_pio_led_strip/light.py +1 -1
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
- esphome/components/rtttl/rtttl.cpp +11 -9
- esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
- esphome/components/safe_mode/safe_mode.cpp +9 -8
- esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
- esphome/components/scd30/scd30.cpp +11 -8
- esphome/components/scd4x/scd4x.cpp +12 -8
- esphome/components/sdl/display.py +40 -0
- esphome/components/sdl/sdl_esphome.cpp +2 -2
- esphome/components/sdl/sdl_esphome.h +8 -0
- esphome/components/sdm_meter/sdm_meter.cpp +5 -2
- esphome/components/sdp3x/sdp3x.cpp +11 -11
- esphome/components/sds011/sds011.cpp +5 -6
- esphome/components/sds011/sds011.h +4 -1
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
- esphome/components/selec_meter/selec_meter.cpp +5 -2
- esphome/components/select/__init__.py +1 -0
- esphome/components/select/select.cpp +1 -1
- esphome/components/select/select.h +0 -4
- esphome/components/sen0321/sen0321.cpp +2 -2
- esphome/components/sen21231/sen21231.cpp +1 -1
- esphome/components/sen5x/sen5x.cpp +10 -7
- esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
- esphome/components/sensirion_common/i2c_sensirion.h +1 -0
- esphome/components/sensor/__init__.py +11 -1
- esphome/components/sensor/filter.h +1 -1
- esphome/components/sensor/sensor.cpp +8 -4
- esphome/components/sensor/sensor.h +12 -11
- esphome/components/servo/servo.cpp +12 -9
- esphome/components/servo/servo.h +1 -1
- esphome/components/sfa30/sfa30.cpp +1 -1
- esphome/components/sgp30/sgp30.cpp +10 -8
- esphome/components/sgp4x/sgp4x.cpp +49 -61
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
- esphome/components/sht3xd/sht3xd.cpp +1 -1
- esphome/components/sht4x/sht4x.cpp +2 -2
- esphome/components/shtcx/shtcx.cpp +13 -16
- esphome/components/shutdown/button/shutdown_button.cpp +1 -1
- esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
- esphome/components/sim800l/sim800l.cpp +2 -2
- esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
- esphome/components/sm16716/sm16716.cpp +1 -1
- esphome/components/sm2135/sm2135.cpp +1 -1
- esphome/components/sm2235/sm2235.cpp +5 -3
- esphome/components/sm2335/sm2335.cpp +5 -3
- esphome/components/sml/sml.cpp +1 -1
- esphome/components/sn74hc165/sn74hc165.cpp +1 -2
- esphome/components/sn74hc595/sn74hc595.cpp +1 -2
- esphome/components/sntp/sntp_component.cpp +1 -1
- esphome/components/socket/__init__.py +2 -0
- esphome/components/socket/bsd_sockets_impl.cpp +51 -7
- esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
- esphome/components/socket/lwip_sockets_impl.cpp +51 -7
- esphome/components/socket/socket.cpp +31 -0
- esphome/components/socket/socket.h +27 -1
- esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
- esphome/components/sonoff_d1/sonoff_d1.h +2 -2
- esphome/components/sound_level/sound_level.cpp +4 -2
- esphome/components/speaker/media_player/__init__.py +3 -0
- esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
- esphome/components/speaker/media_player/speaker_media_player.h +6 -0
- esphome/components/spi/__init__.py +10 -2
- esphome/components/spi/spi.cpp +4 -4
- esphome/components/spi/spi_arduino.cpp +22 -9
- esphome/components/spi_device/spi_device.cpp +1 -2
- esphome/components/sprinkler/sprinkler.cpp +9 -6
- esphome/components/sps30/sps30.cpp +16 -15
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
- esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
- esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
- esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
- esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
- esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
- esphome/components/st7567_base/st7567_base.cpp +3 -3
- esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
- esphome/components/st7567_spi/st7567_spi.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +4 -2
- esphome/components/st7735/st7735.cpp +3 -3
- esphome/components/st7789v/st7789v.cpp +10 -7
- esphome/components/st7920/st7920.cpp +6 -4
- esphome/components/statsd/statsd.cpp +9 -5
- esphome/components/status_led/light/status_led_light.cpp +3 -3
- esphome/components/status_led/light/status_led_light.h +1 -1
- esphome/components/status_led/status_led.cpp +1 -1
- esphome/components/stepper/stepper.h +5 -3
- esphome/components/sts3x/sts3x.cpp +2 -2
- esphome/components/switch/__init__.py +1 -0
- esphome/components/switch/switch.cpp +18 -12
- esphome/components/switch/switch.h +14 -8
- esphome/components/sx1509/__init__.py +53 -20
- esphome/components/sx1509/sx1509.cpp +29 -5
- esphome/components/sx1509/sx1509.h +9 -1
- esphome/components/t6615/t6615.cpp +1 -0
- esphome/components/tc74/tc74.cpp +1 -1
- esphome/components/tca9548a/tca9548a.cpp +1 -1
- esphome/components/tca9555/tca9555.cpp +2 -2
- esphome/components/tcs34725/tcs34725.cpp +4 -4
- esphome/components/tee501/tee501.cpp +3 -2
- esphome/components/tem3200/tem3200.cpp +5 -6
- esphome/components/template/alarm_control_panel/__init__.py +6 -0
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
- esphome/components/template/cover/template_cover.cpp +1 -1
- esphome/components/template/select/template_select.cpp +6 -4
- esphome/components/template/text/template_text.cpp +2 -3
- esphome/components/template/valve/template_valve.cpp +5 -3
- esphome/components/text/__init__.py +10 -11
- esphome/components/text/text.cpp +1 -1
- esphome/components/text/text.h +0 -4
- esphome/components/text_sensor/__init__.py +1 -0
- esphome/components/text_sensor/text_sensor.cpp +8 -4
- esphome/components/text_sensor/text_sensor.h +6 -6
- esphome/components/thermostat/thermostat_climate.cpp +67 -43
- esphome/components/time/__init__.py +1 -2
- esphome/components/time_based/time_based_cover.cpp +4 -2
- esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
- esphome/components/tm1621/tm1621.cpp +3 -3
- esphome/components/tm1637/tm1637.cpp +9 -7
- esphome/components/tm1638/tm1638.cpp +7 -5
- esphome/components/tm1651/tm1651.cpp +2 -2
- esphome/components/tmp102/tmp102.cpp +1 -3
- esphome/components/tmp102/tmp102.h +0 -3
- esphome/components/tmp1075/tmp1075.cpp +12 -9
- esphome/components/tmp117/tmp117.cpp +2 -2
- esphome/components/tof10120/tof10120_sensor.cpp +2 -2
- esphome/components/tormatic/tormatic_cover.cpp +4 -2
- esphome/components/tsl2561/tsl2561.cpp +7 -5
- esphome/components/tsl2591/tsl2591.cpp +25 -27
- esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
- esphome/components/tuya/select/tuya_select.cpp +5 -3
- esphome/components/tx20/tx20.cpp +3 -3
- esphome/components/uart/__init__.py +4 -5
- esphome/components/uart/button/uart_button.cpp +1 -1
- esphome/components/uart/switch/uart_switch.cpp +2 -2
- esphome/components/uart/uart.cpp +2 -2
- esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
- esphome/components/uart/uart_component_esp8266.cpp +9 -7
- esphome/components/uart/uart_component_esp_idf.cpp +9 -7
- esphome/components/uart/uart_component_host.cpp +11 -8
- esphome/components/uart/uart_component_libretiny.cpp +8 -6
- esphome/components/uart/uart_component_rp2040.cpp +8 -6
- esphome/components/udp/udp_component.cpp +9 -5
- esphome/components/ufire_ec/ufire_ec.cpp +5 -3
- esphome/components/ufire_ise/ufire_ise.cpp +1 -1
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
- esphome/components/update/__init__.py +1 -0
- esphome/components/update/update_entity.cpp +1 -1
- esphome/components/update/update_entity.h +0 -3
- esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
- esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
- esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
- esphome/components/usb_host/__init__.py +64 -0
- esphome/components/usb_host/usb_host.h +116 -0
- esphome/components/usb_host/usb_host_client.cpp +394 -0
- esphome/components/usb_host/usb_host_component.cpp +35 -0
- esphome/components/usb_uart/__init__.py +134 -0
- esphome/components/usb_uart/ch34x.cpp +80 -0
- esphome/components/usb_uart/cp210x.cpp +126 -0
- esphome/components/usb_uart/usb_uart.cpp +328 -0
- esphome/components/usb_uart/usb_uart.h +151 -0
- esphome/components/valve/__init__.py +1 -0
- esphome/components/veml3235/veml3235.cpp +13 -9
- esphome/components/veml7700/veml7700.cpp +10 -6
- esphome/components/voice_assistant/voice_assistant.cpp +7 -7
- esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
- esphome/components/web_server/server_index_v2.h +632 -630
- esphome/components/web_server/server_index_v3.h +411 -409
- esphome/components/web_server/web_server.cpp +5 -3
- esphome/components/web_server_base/web_server_base.cpp +1 -1
- esphome/components/web_server_idf/__init__.py +0 -2
- esphome/components/web_server_idf/utils.cpp +1 -1
- esphome/components/web_server_idf/web_server_idf.cpp +7 -3
- esphome/components/web_server_idf/web_server_idf.h +7 -0
- esphome/components/weikai/__init__.py +2 -0
- esphome/components/weikai/weikai.cpp +24 -22
- esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
- esphome/components/weikai_spi/weikai_spi.cpp +11 -6
- esphome/components/wiegand/wiegand.cpp +1 -1
- esphome/components/wifi/wifi_component.cpp +50 -37
- esphome/components/wifi/wifi_component.h +7 -4
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
- esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
- esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
- esphome/components/wireguard/wireguard.cpp +21 -21
- esphome/components/wl_134/text_sensor.py +1 -2
- esphome/components/wled/wled_light_effect.cpp +1 -1
- esphome/components/x9c/x9c.cpp +5 -3
- esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
- esphome/components/xl9535/xl9535.cpp +2 -2
- esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
- esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
- esphome/config.py +3 -2
- esphome/config_validation.py +46 -17
- esphome/const.py +10 -1
- esphome/core/__init__.py +37 -18
- esphome/core/application.cpp +197 -8
- esphome/core/application.h +116 -6
- esphome/core/component.cpp +36 -15
- esphome/core/component.h +43 -13
- esphome/core/config.py +12 -0
- esphome/core/defines.h +10 -2
- esphome/core/entity_base.cpp +4 -16
- esphome/core/entity_base.h +27 -13
- esphome/core/hal.h +5 -0
- esphome/core/helpers.cpp +1 -1
- esphome/core/helpers.h +5 -5
- esphome/core/log.h +2 -0
- esphome/core/log_const_en.h +4 -0
- esphome/core/scheduler.cpp +2 -2
- esphome/coroutine.py +3 -4
- esphome/cpp_generator.py +32 -32
- esphome/dashboard/core.py +2 -2
- esphome/dashboard/web_server.py +2 -2
- esphome/git.py +4 -4
- esphome/helpers.py +5 -6
- esphome/loader.py +8 -7
- esphome/log.py +7 -1
- esphome/platformio_api.py +2 -3
- esphome/storage_json.py +13 -5
- esphome/types.py +12 -13
- esphome/util.py +1 -2
- esphome/wizard.py +0 -16
- esphome/writer.py +5 -3
- esphome/yaml_util.py +6 -1
- esphome/zeroconf.py +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/RECORD +753 -699
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
#include "esphome/core/component.h"
|
4
4
|
#include "esphome/core/entity_base.h"
|
5
|
-
#include "esphome/core/preferences.h"
|
6
5
|
#include "esphome/core/helpers.h"
|
6
|
+
#include "esphome/core/preferences.h"
|
7
7
|
|
8
8
|
namespace esphome {
|
9
9
|
namespace switch_ {
|
@@ -21,7 +21,7 @@ const int RESTORE_MODE_PERSISTENT_MASK = 0x02;
|
|
21
21
|
const int RESTORE_MODE_INVERTED_MASK = 0x04;
|
22
22
|
const int RESTORE_MODE_DISABLED_MASK = 0x08;
|
23
23
|
|
24
|
-
enum SwitchRestoreMode {
|
24
|
+
enum SwitchRestoreMode : uint8_t {
|
25
25
|
SWITCH_ALWAYS_OFF = !RESTORE_MODE_ON_MASK,
|
26
26
|
SWITCH_ALWAYS_ON = RESTORE_MODE_ON_MASK,
|
27
27
|
SWITCH_RESTORE_DEFAULT_OFF = RESTORE_MODE_PERSISTENT_MASK,
|
@@ -49,12 +49,12 @@ class Switch : public EntityBase, public EntityBase_DeviceClass {
|
|
49
49
|
*/
|
50
50
|
void publish_state(bool state);
|
51
51
|
|
52
|
-
/// The current reported state of the binary sensor.
|
53
|
-
bool state;
|
54
|
-
|
55
52
|
/// Indicates whether or not state is to be retrieved from flash and how
|
56
53
|
SwitchRestoreMode restore_mode{SWITCH_RESTORE_DEFAULT_OFF};
|
57
54
|
|
55
|
+
/// The current reported state of the binary sensor.
|
56
|
+
bool state;
|
57
|
+
|
58
58
|
/** Turn this switch on. This is called by the front-end.
|
59
59
|
*
|
60
60
|
* For implementing switches, please override write_state.
|
@@ -123,10 +123,16 @@ class Switch : public EntityBase, public EntityBase_DeviceClass {
|
|
123
123
|
*/
|
124
124
|
virtual void write_state(bool state) = 0;
|
125
125
|
|
126
|
-
|
127
|
-
bool inverted_{false};
|
128
|
-
Deduplicator<bool> publish_dedup_;
|
126
|
+
// Pointer first (4 bytes)
|
129
127
|
ESPPreferenceObject rtc_;
|
128
|
+
|
129
|
+
// CallbackManager (12 bytes on 32-bit - contains vector)
|
130
|
+
CallbackManager<void(bool)> state_callback_{};
|
131
|
+
|
132
|
+
// Small types grouped together
|
133
|
+
Deduplicator<bool> publish_dedup_; // 2 bytes (bool has_value_ + bool last_value_)
|
134
|
+
bool inverted_{false}; // 1 byte
|
135
|
+
// Total: 3 bytes, 1 byte padding
|
130
136
|
};
|
131
137
|
|
132
138
|
#define LOG_SWITCH(prefix, type, obj) log_switch((TAG), (prefix), LOG_STR_LITERAL(type), (obj))
|
@@ -1,6 +1,6 @@
|
|
1
|
-
from esphome import pins
|
1
|
+
from esphome import automation, pins
|
2
2
|
import esphome.codegen as cg
|
3
|
-
from esphome.components import i2c
|
3
|
+
from esphome.components import i2c, key_provider
|
4
4
|
import esphome.config_validation as cv
|
5
5
|
from esphome.const import (
|
6
6
|
CONF_ID,
|
@@ -8,13 +8,16 @@ from esphome.const import (
|
|
8
8
|
CONF_INVERTED,
|
9
9
|
CONF_MODE,
|
10
10
|
CONF_NUMBER,
|
11
|
+
CONF_ON_KEY,
|
11
12
|
CONF_OPEN_DRAIN,
|
12
13
|
CONF_OUTPUT,
|
13
14
|
CONF_PULLDOWN,
|
14
15
|
CONF_PULLUP,
|
16
|
+
CONF_TRIGGER_ID,
|
15
17
|
)
|
16
18
|
|
17
19
|
CONF_KEYPAD = "keypad"
|
20
|
+
CONF_KEYS = "keys"
|
18
21
|
CONF_KEY_ROWS = "key_rows"
|
19
22
|
CONF_KEY_COLUMNS = "key_columns"
|
20
23
|
CONF_SLEEP_TIME = "sleep_time"
|
@@ -22,22 +25,47 @@ CONF_SCAN_TIME = "scan_time"
|
|
22
25
|
CONF_DEBOUNCE_TIME = "debounce_time"
|
23
26
|
CONF_SX1509_ID = "sx1509_id"
|
24
27
|
|
28
|
+
AUTO_LOAD = ["key_provider"]
|
25
29
|
DEPENDENCIES = ["i2c"]
|
26
30
|
MULTI_CONF = True
|
27
31
|
|
28
32
|
sx1509_ns = cg.esphome_ns.namespace("sx1509")
|
29
33
|
|
30
|
-
SX1509Component = sx1509_ns.class_(
|
34
|
+
SX1509Component = sx1509_ns.class_(
|
35
|
+
"SX1509Component", cg.Component, i2c.I2CDevice, key_provider.KeyProvider
|
36
|
+
)
|
31
37
|
SX1509GPIOPin = sx1509_ns.class_("SX1509GPIOPin", cg.GPIOPin)
|
38
|
+
SX1509KeyTrigger = sx1509_ns.class_(
|
39
|
+
"SX1509KeyTrigger", automation.Trigger.template(cg.uint8)
|
40
|
+
)
|
32
41
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
42
|
+
|
43
|
+
def check_keys(config):
|
44
|
+
if CONF_KEYS in config:
|
45
|
+
if len(config[CONF_KEYS]) != config[CONF_KEY_ROWS] * config[CONF_KEY_COLUMNS]:
|
46
|
+
raise cv.Invalid(
|
47
|
+
"The number of key codes must equal the number of rows * columns"
|
48
|
+
)
|
49
|
+
return config
|
50
|
+
|
51
|
+
|
52
|
+
KEYPAD_SCHEMA = cv.All(
|
53
|
+
cv.Schema(
|
54
|
+
{
|
55
|
+
cv.Required(CONF_KEY_ROWS): cv.int_range(min=2, max=8),
|
56
|
+
cv.Required(CONF_KEY_COLUMNS): cv.int_range(min=1, max=8),
|
57
|
+
cv.Optional(CONF_SLEEP_TIME): cv.int_range(min=128, max=8192),
|
58
|
+
cv.Optional(CONF_SCAN_TIME): cv.int_range(min=1, max=128),
|
59
|
+
cv.Optional(CONF_DEBOUNCE_TIME): cv.int_range(min=1, max=64),
|
60
|
+
cv.Optional(CONF_KEYS): cv.string,
|
61
|
+
cv.Optional(CONF_ON_KEY): automation.validate_automation(
|
62
|
+
{
|
63
|
+
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(SX1509KeyTrigger),
|
64
|
+
}
|
65
|
+
),
|
66
|
+
}
|
67
|
+
),
|
68
|
+
check_keys,
|
41
69
|
)
|
42
70
|
|
43
71
|
CONFIG_SCHEMA = (
|
@@ -56,17 +84,22 @@ async def to_code(config):
|
|
56
84
|
var = cg.new_Pvariable(config[CONF_ID])
|
57
85
|
await cg.register_component(var, config)
|
58
86
|
await i2c.register_i2c_device(var, config)
|
59
|
-
if
|
60
|
-
|
61
|
-
cg.add(var.set_rows_cols(keypad[CONF_KEY_ROWS], keypad[CONF_KEY_COLUMNS]))
|
87
|
+
if conf := config.get(CONF_KEYPAD):
|
88
|
+
cg.add(var.set_rows_cols(conf[CONF_KEY_ROWS], conf[CONF_KEY_COLUMNS]))
|
62
89
|
if (
|
63
|
-
CONF_SLEEP_TIME in
|
64
|
-
and CONF_SCAN_TIME in
|
65
|
-
and CONF_DEBOUNCE_TIME in
|
90
|
+
CONF_SLEEP_TIME in conf
|
91
|
+
and CONF_SCAN_TIME in conf
|
92
|
+
and CONF_DEBOUNCE_TIME in conf
|
66
93
|
):
|
67
|
-
cg.add(var.set_sleep_time(
|
68
|
-
cg.add(var.set_scan_time(
|
69
|
-
cg.add(var.set_debounce_time(
|
94
|
+
cg.add(var.set_sleep_time(conf[CONF_SLEEP_TIME]))
|
95
|
+
cg.add(var.set_scan_time(conf[CONF_SCAN_TIME]))
|
96
|
+
cg.add(var.set_debounce_time(conf[CONF_DEBOUNCE_TIME]))
|
97
|
+
if keys := conf.get(CONF_KEYS):
|
98
|
+
cg.add(var.set_keys(keys))
|
99
|
+
for tconf in conf.get(CONF_ON_KEY, []):
|
100
|
+
trigger = cg.new_Pvariable(tconf[CONF_TRIGGER_ID])
|
101
|
+
cg.add(var.register_key_trigger(trigger))
|
102
|
+
await automation.build_automation(trigger, [(cg.uint8, "x")], tconf)
|
70
103
|
|
71
104
|
|
72
105
|
def validate_mode(value):
|
@@ -8,9 +8,9 @@ namespace sx1509 {
|
|
8
8
|
static const char *const TAG = "sx1509";
|
9
9
|
|
10
10
|
void SX1509Component::setup() {
|
11
|
-
ESP_LOGCONFIG(TAG, "
|
11
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
12
12
|
|
13
|
-
ESP_LOGV(TAG, " Resetting devices
|
13
|
+
ESP_LOGV(TAG, " Resetting devices");
|
14
14
|
if (!this->write_byte(REG_RESET, 0x12)) {
|
15
15
|
this->mark_failed();
|
16
16
|
return;
|
@@ -48,6 +48,30 @@ void SX1509Component::loop() {
|
|
48
48
|
uint16_t key_data = this->read_key_data();
|
49
49
|
for (auto *binary_sensor : this->keypad_binary_sensors_)
|
50
50
|
binary_sensor->process(key_data);
|
51
|
+
if (this->keys_.empty())
|
52
|
+
return;
|
53
|
+
if (key_data == 0) {
|
54
|
+
this->last_key_ = 0;
|
55
|
+
return;
|
56
|
+
}
|
57
|
+
int row, col;
|
58
|
+
for (row = 0; row < 7; row++) {
|
59
|
+
if (key_data & (1 << row))
|
60
|
+
break;
|
61
|
+
}
|
62
|
+
for (col = 8; col < 15; col++) {
|
63
|
+
if (key_data & (1 << col))
|
64
|
+
break;
|
65
|
+
}
|
66
|
+
col -= 8;
|
67
|
+
uint8_t key = this->keys_[row * this->cols_ + col];
|
68
|
+
if (key == this->last_key_)
|
69
|
+
return;
|
70
|
+
this->last_key_ = key;
|
71
|
+
ESP_LOGV(TAG, "row %d, col %d, key '%c'", row, col, key);
|
72
|
+
for (auto &trigger : this->key_triggers_)
|
73
|
+
trigger->trigger(key);
|
74
|
+
this->send_key_(key);
|
51
75
|
}
|
52
76
|
}
|
53
77
|
|
@@ -230,9 +254,9 @@ void SX1509Component::setup_keypad_() {
|
|
230
254
|
scan_time_bits &= 0b111; // Scan time is bits 2:0
|
231
255
|
temp_byte = sleep_time_ | scan_time_bits;
|
232
256
|
this->write_byte(REG_KEY_CONFIG_1, temp_byte);
|
233
|
-
|
234
|
-
|
235
|
-
this->write_byte(REG_KEY_CONFIG_2,
|
257
|
+
temp_byte = ((this->rows_ - 1) & 0b111) << 3; // 0 = off, 0b001 = 2 rows, 0b111 = 8 rows, etc.
|
258
|
+
temp_byte |= (this->cols_ - 1) & 0b111; // 0b000 = 1 column, ob111 = 8 columns, etc.
|
259
|
+
this->write_byte(REG_KEY_CONFIG_2, temp_byte);
|
236
260
|
}
|
237
261
|
|
238
262
|
uint16_t SX1509Component::read_key_data() {
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
3
|
#include "esphome/components/i2c/i2c.h"
|
4
|
+
#include "esphome/components/key_provider/key_provider.h"
|
4
5
|
#include "esphome/core/component.h"
|
5
6
|
#include "esphome/core/hal.h"
|
6
7
|
#include "sx1509_gpio_pin.h"
|
@@ -27,7 +28,9 @@ class SX1509Processor {
|
|
27
28
|
virtual void process(uint16_t data){};
|
28
29
|
};
|
29
30
|
|
30
|
-
class
|
31
|
+
class SX1509KeyTrigger : public Trigger<uint8_t> {};
|
32
|
+
|
33
|
+
class SX1509Component : public Component, public i2c::I2CDevice, public key_provider::KeyProvider {
|
31
34
|
public:
|
32
35
|
SX1509Component() = default;
|
33
36
|
|
@@ -47,12 +50,14 @@ class SX1509Component : public Component, public i2c::I2CDevice {
|
|
47
50
|
this->cols_ = cols;
|
48
51
|
this->has_keypad_ = true;
|
49
52
|
};
|
53
|
+
void set_keys(std::string keys) { this->keys_ = std::move(keys); };
|
50
54
|
void set_sleep_time(uint16_t sleep_time) { this->sleep_time_ = sleep_time; };
|
51
55
|
void set_scan_time(uint8_t scan_time) { this->scan_time_ = scan_time; };
|
52
56
|
void set_debounce_time(uint8_t debounce_time = 1) { this->debounce_time_ = debounce_time; };
|
53
57
|
void register_keypad_binary_sensor(SX1509Processor *binary_sensor) {
|
54
58
|
this->keypad_binary_sensors_.push_back(binary_sensor);
|
55
59
|
}
|
60
|
+
void register_key_trigger(SX1509KeyTrigger *trig) { this->key_triggers_.push_back(trig); };
|
56
61
|
void setup_led_driver(uint8_t pin);
|
57
62
|
|
58
63
|
protected:
|
@@ -65,10 +70,13 @@ class SX1509Component : public Component, public i2c::I2CDevice {
|
|
65
70
|
bool has_keypad_ = false;
|
66
71
|
uint8_t rows_ = 0;
|
67
72
|
uint8_t cols_ = 0;
|
73
|
+
std::string keys_;
|
68
74
|
uint16_t sleep_time_ = 128;
|
69
75
|
uint8_t scan_time_ = 1;
|
70
76
|
uint8_t debounce_time_ = 1;
|
77
|
+
uint8_t last_key_ = 0;
|
71
78
|
std::vector<SX1509Processor *> keypad_binary_sensors_;
|
79
|
+
std::vector<SX1509KeyTrigger *> key_triggers_;
|
72
80
|
|
73
81
|
uint32_t last_loop_timestamp_ = 0;
|
74
82
|
const uint32_t min_loop_period_ = 15; // ms
|
esphome/components/tc74/tc74.cpp
CHANGED
@@ -15,7 +15,7 @@ static const uint8_t TC74_DATA_READY_MASK = 0x40;
|
|
15
15
|
// It is possible the "Data Ready" bit will not be set if the TC74 has not been powered on for at least 250ms, so it not
|
16
16
|
// being set does not constitute a failure.
|
17
17
|
void TC74Component::setup() {
|
18
|
-
ESP_LOGCONFIG(TAG, "
|
18
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
19
19
|
uint8_t config_reg;
|
20
20
|
if (this->read_register(TC74_REGISTER_CONFIGURATION, &config_reg, 1) != i2c::ERROR_OK) {
|
21
21
|
this->mark_failed();
|
@@ -24,7 +24,7 @@ i2c::ErrorCode TCA9548AChannel::writev(uint8_t address, i2c::WriteBuffer *buffer
|
|
24
24
|
}
|
25
25
|
|
26
26
|
void TCA9548AComponent::setup() {
|
27
|
-
ESP_LOGCONFIG(TAG, "
|
27
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
28
28
|
uint8_t status = 0;
|
29
29
|
if (this->read(&status, 1) != i2c::ERROR_OK) {
|
30
30
|
ESP_LOGE(TAG, "TCA9548A failed");
|
@@ -16,7 +16,7 @@ namespace tca9555 {
|
|
16
16
|
static const char *const TAG = "tca9555";
|
17
17
|
|
18
18
|
void TCA9555Component::setup() {
|
19
|
-
ESP_LOGCONFIG(TAG, "
|
19
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
20
20
|
if (!this->read_gpio_modes_()) {
|
21
21
|
this->mark_failed();
|
22
22
|
return;
|
@@ -30,7 +30,7 @@ void TCA9555Component::dump_config() {
|
|
30
30
|
ESP_LOGCONFIG(TAG, "TCA9555:");
|
31
31
|
LOG_I2C_DEVICE(this)
|
32
32
|
if (this->is_failed()) {
|
33
|
-
ESP_LOGE(TAG,
|
33
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
34
34
|
}
|
35
35
|
}
|
36
36
|
void TCA9555Component::pin_mode(uint8_t pin, gpio::Flags flags) {
|
@@ -1,8 +1,8 @@
|
|
1
1
|
#include "tcs34725.h"
|
2
|
-
#include "esphome/core/log.h"
|
3
2
|
#include "esphome/core/hal.h"
|
4
|
-
#include <algorithm>
|
5
3
|
#include "esphome/core/helpers.h"
|
4
|
+
#include "esphome/core/log.h"
|
5
|
+
#include <algorithm>
|
6
6
|
|
7
7
|
namespace esphome {
|
8
8
|
namespace tcs34725 {
|
@@ -18,7 +18,7 @@ static const uint8_t TCS34725_REGISTER_ENABLE = TCS34725_COMMAND_BIT | 0x00;
|
|
18
18
|
static const uint8_t TCS34725_REGISTER_CRGBDATAL = TCS34725_COMMAND_BIT | 0x14;
|
19
19
|
|
20
20
|
void TCS34725Component::setup() {
|
21
|
-
ESP_LOGCONFIG(TAG, "
|
21
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
22
22
|
uint8_t id;
|
23
23
|
if (this->read_register(TCS34725_REGISTER_ID, &id, 1) != i2c::ERROR_OK) {
|
24
24
|
this->mark_failed();
|
@@ -46,7 +46,7 @@ void TCS34725Component::dump_config() {
|
|
46
46
|
ESP_LOGCONFIG(TAG, "TCS34725:");
|
47
47
|
LOG_I2C_DEVICE(this);
|
48
48
|
if (this->is_failed()) {
|
49
|
-
ESP_LOGE(TAG,
|
49
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
50
50
|
}
|
51
51
|
LOG_UPDATE_INTERVAL(this);
|
52
52
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
#include "tee501.h"
|
2
|
+
#include "esphome/core/helpers.h"
|
2
3
|
#include "esphome/core/log.h"
|
3
4
|
|
4
5
|
namespace esphome {
|
@@ -7,7 +8,7 @@ namespace tee501 {
|
|
7
8
|
static const char *const TAG = "tee501";
|
8
9
|
|
9
10
|
void TEE501Component::setup() {
|
10
|
-
ESP_LOGCONFIG(TAG, "
|
11
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
11
12
|
uint8_t address[] = {0x70, 0x29};
|
12
13
|
this->write(address, 2, false);
|
13
14
|
uint8_t identification[9];
|
@@ -25,7 +26,7 @@ void TEE501Component::dump_config() {
|
|
25
26
|
LOG_I2C_DEVICE(this);
|
26
27
|
switch (this->error_code_) {
|
27
28
|
case COMMUNICATION_FAILED:
|
28
|
-
ESP_LOGE(TAG,
|
29
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
29
30
|
break;
|
30
31
|
case CRC_CHECK_FAILED:
|
31
32
|
ESP_LOGE(TAG, "The crc check failed");
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#include "tem3200.h"
|
2
|
-
#include "esphome/core/log.h"
|
3
|
-
#include "esphome/core/helpers.h"
|
4
2
|
#include "esphome/core/hal.h"
|
3
|
+
#include "esphome/core/helpers.h"
|
4
|
+
#include "esphome/core/log.h"
|
5
5
|
|
6
6
|
namespace esphome {
|
7
7
|
namespace tem3200 {
|
@@ -16,7 +16,7 @@ enum ErrorCode {
|
|
16
16
|
};
|
17
17
|
|
18
18
|
void TEM3200Component::setup() {
|
19
|
-
ESP_LOGCONFIG(TAG, "
|
19
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
20
20
|
|
21
21
|
uint8_t status(NONE);
|
22
22
|
uint16_t raw_temperature(0);
|
@@ -24,7 +24,7 @@ void TEM3200Component::setup() {
|
|
24
24
|
|
25
25
|
i2c::ErrorCode err = this->read_(status, raw_temperature, raw_pressure);
|
26
26
|
if (err != i2c::ERROR_OK) {
|
27
|
-
ESP_LOGCONFIG(TAG,
|
27
|
+
ESP_LOGCONFIG(TAG, ESP_LOG_MSG_COMM_FAIL);
|
28
28
|
this->mark_failed();
|
29
29
|
return;
|
30
30
|
}
|
@@ -43,7 +43,6 @@ void TEM3200Component::setup() {
|
|
43
43
|
this->status_set_warning();
|
44
44
|
break;
|
45
45
|
}
|
46
|
-
ESP_LOGCONFIG(TAG, " Success...");
|
47
46
|
}
|
48
47
|
|
49
48
|
void TEM3200Component::dump_config() {
|
@@ -115,7 +114,7 @@ void TEM3200Component::update() {
|
|
115
114
|
i2c::ErrorCode err = this->read_(status, raw_temperature, raw_pressure);
|
116
115
|
|
117
116
|
if (err != i2c::ERROR_OK) {
|
118
|
-
ESP_LOGW(TAG,
|
117
|
+
ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
|
119
118
|
this->status_set_warning();
|
120
119
|
return;
|
121
120
|
}
|
@@ -10,6 +10,7 @@ CODEOWNERS = ["@grahambrown11", "@hwstar"]
|
|
10
10
|
CONF_CODES = "codes"
|
11
11
|
CONF_BYPASS_ARMED_HOME = "bypass_armed_home"
|
12
12
|
CONF_BYPASS_ARMED_NIGHT = "bypass_armed_night"
|
13
|
+
CONF_BYPASS_AUTO = "bypass_auto"
|
13
14
|
CONF_CHIME = "chime"
|
14
15
|
CONF_TRIGGER_MODE = "trigger_mode"
|
15
16
|
CONF_REQUIRES_CODE_TO_ARM = "requires_code_to_arm"
|
@@ -23,6 +24,7 @@ CONF_TRIGGER_TIME = "trigger_time"
|
|
23
24
|
FLAG_NORMAL = "normal"
|
24
25
|
FLAG_BYPASS_ARMED_HOME = "bypass_armed_home"
|
25
26
|
FLAG_BYPASS_ARMED_NIGHT = "bypass_armed_night"
|
27
|
+
FLAG_BYPASS_AUTO = "bypass_auto"
|
26
28
|
FLAG_CHIME = "chime"
|
27
29
|
|
28
30
|
BinarySensorFlags = {
|
@@ -30,6 +32,7 @@ BinarySensorFlags = {
|
|
30
32
|
FLAG_BYPASS_ARMED_HOME: 1 << 1,
|
31
33
|
FLAG_BYPASS_ARMED_NIGHT: 1 << 2,
|
32
34
|
FLAG_CHIME: 1 << 3,
|
35
|
+
FLAG_BYPASS_AUTO: 1 << 4,
|
33
36
|
}
|
34
37
|
|
35
38
|
|
@@ -68,6 +71,7 @@ TEMPLATE_ALARM_CONTROL_PANEL_BINARY_SENSOR_SCHEMA = cv.maybe_simple_value(
|
|
68
71
|
cv.Required(CONF_INPUT): cv.use_id(binary_sensor.BinarySensor),
|
69
72
|
cv.Optional(CONF_BYPASS_ARMED_HOME, default=False): cv.boolean,
|
70
73
|
cv.Optional(CONF_BYPASS_ARMED_NIGHT, default=False): cv.boolean,
|
74
|
+
cv.Optional(CONF_BYPASS_AUTO, default=False): cv.boolean,
|
71
75
|
cv.Optional(CONF_CHIME, default=False): cv.boolean,
|
72
76
|
cv.Optional(CONF_TRIGGER_MODE, default="DELAYED"): cv.enum(
|
73
77
|
ALARM_SENSOR_TYPES, upper=True, space="_"
|
@@ -143,6 +147,8 @@ async def to_code(config):
|
|
143
147
|
if sensor[CONF_BYPASS_ARMED_NIGHT]:
|
144
148
|
flags |= BinarySensorFlags[FLAG_BYPASS_ARMED_NIGHT]
|
145
149
|
supports_arm_night = True
|
150
|
+
if sensor[CONF_BYPASS_AUTO]:
|
151
|
+
flags |= BinarySensorFlags[FLAG_BYPASS_AUTO]
|
146
152
|
if sensor[CONF_CHIME]:
|
147
153
|
flags |= BinarySensorFlags[FLAG_CHIME]
|
148
154
|
cg.add(var.add_sensor(bs, flags, sensor[CONF_TRIGGER_MODE]))
|
@@ -29,8 +29,10 @@ void TemplateAlarmControlPanel::add_sensor(binary_sensor::BinarySensor *sensor,
|
|
29
29
|
|
30
30
|
void TemplateAlarmControlPanel::dump_config() {
|
31
31
|
ESP_LOGCONFIG(TAG, "TemplateAlarmControlPanel:");
|
32
|
-
ESP_LOGCONFIG(TAG,
|
33
|
-
|
32
|
+
ESP_LOGCONFIG(TAG,
|
33
|
+
" Current State: %s\n"
|
34
|
+
" Number of Codes: %u",
|
35
|
+
LOG_STR_ARG(alarm_control_panel_state_to_string(this->current_state_)), this->codes_.size());
|
34
36
|
if (!this->codes_.empty())
|
35
37
|
ESP_LOGCONFIG(TAG, " Requires Code To Arm: %s", YESNO(this->requires_code_to_arm_));
|
36
38
|
ESP_LOGCONFIG(TAG, " Arming Away Time: %" PRIu32 "s", (this->arming_away_time_ / 1000));
|
@@ -38,18 +40,25 @@ void TemplateAlarmControlPanel::dump_config() {
|
|
38
40
|
ESP_LOGCONFIG(TAG, " Arming Home Time: %" PRIu32 "s", (this->arming_home_time_ / 1000));
|
39
41
|
if (this->arming_night_time_ != 0)
|
40
42
|
ESP_LOGCONFIG(TAG, " Arming Night Time: %" PRIu32 "s", (this->arming_night_time_ / 1000));
|
41
|
-
ESP_LOGCONFIG(TAG,
|
42
|
-
|
43
|
-
|
43
|
+
ESP_LOGCONFIG(TAG,
|
44
|
+
" Pending Time: %" PRIu32 "s\n"
|
45
|
+
" Trigger Time: %" PRIu32 "s\n"
|
46
|
+
" Supported Features: %" PRIu32,
|
47
|
+
(this->pending_time_ / 1000), (this->trigger_time_ / 1000), this->get_supported_features());
|
44
48
|
#ifdef USE_BINARY_SENSOR
|
45
49
|
for (auto sensor_info : this->sensor_map_) {
|
46
50
|
ESP_LOGCONFIG(TAG, " Binary Sensor:");
|
47
|
-
ESP_LOGCONFIG(TAG,
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
51
|
+
ESP_LOGCONFIG(TAG,
|
52
|
+
" Name: %s\n"
|
53
|
+
" Armed home bypass: %s\n"
|
54
|
+
" Armed night bypass: %s\n"
|
55
|
+
" Auto bypass: %s\n"
|
56
|
+
" Chime mode: %s",
|
57
|
+
sensor_info.first->get_name().c_str(),
|
58
|
+
TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_ARMED_HOME),
|
59
|
+
TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_ARMED_NIGHT),
|
60
|
+
TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_AUTO),
|
61
|
+
TRUEFALSE(sensor_info.second.flags & BINARY_SENSOR_MODE_CHIME));
|
53
62
|
const char *sensor_type;
|
54
63
|
switch (sensor_info.second.type) {
|
55
64
|
case ALARM_SENSOR_TYPE_INSTANT:
|
@@ -71,7 +80,7 @@ void TemplateAlarmControlPanel::dump_config() {
|
|
71
80
|
}
|
72
81
|
|
73
82
|
void TemplateAlarmControlPanel::setup() {
|
74
|
-
ESP_LOGCONFIG(TAG, "
|
83
|
+
ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
|
75
84
|
switch (this->restore_mode_) {
|
76
85
|
case ALARM_CONTROL_PANEL_ALWAYS_DISARMED:
|
77
86
|
this->current_state_ = ACP_STATE_DISARMED;
|
@@ -101,6 +110,7 @@ void TemplateAlarmControlPanel::loop() {
|
|
101
110
|
delay = this->arming_night_time_;
|
102
111
|
}
|
103
112
|
if ((millis() - this->last_update_) > delay) {
|
113
|
+
this->bypass_before_arming();
|
104
114
|
this->publish_state(this->desired_state_);
|
105
115
|
}
|
106
116
|
return;
|
@@ -137,6 +147,11 @@ void TemplateAlarmControlPanel::loop() {
|
|
137
147
|
}
|
138
148
|
// Check for triggered sensors
|
139
149
|
if (sensor_info.first->state) { // Sensor triggered?
|
150
|
+
// Skip if auto bypassed
|
151
|
+
if (std::count(this->bypassed_sensor_indicies_.begin(), this->bypassed_sensor_indicies_.end(),
|
152
|
+
sensor_info.second.store_index) == 1) {
|
153
|
+
continue;
|
154
|
+
}
|
140
155
|
// Skip if bypass armed home
|
141
156
|
if (this->current_state_ == ACP_STATE_ARMED_HOME &&
|
142
157
|
(sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_ARMED_HOME)) {
|
@@ -236,10 +251,23 @@ void TemplateAlarmControlPanel::arm_(optional<std::string> code, alarm_control_p
|
|
236
251
|
if (delay > 0) {
|
237
252
|
this->publish_state(ACP_STATE_ARMING);
|
238
253
|
} else {
|
254
|
+
this->bypass_before_arming();
|
239
255
|
this->publish_state(state);
|
240
256
|
}
|
241
257
|
}
|
242
258
|
|
259
|
+
void TemplateAlarmControlPanel::bypass_before_arming() {
|
260
|
+
#ifdef USE_BINARY_SENSOR
|
261
|
+
for (auto sensor_info : this->sensor_map_) {
|
262
|
+
// Check for sensors left on and set to bypass automatically and remove them from monitoring
|
263
|
+
if ((sensor_info.second.flags & BINARY_SENSOR_MODE_BYPASS_AUTO) && (sensor_info.first->state)) {
|
264
|
+
ESP_LOGW(TAG, "'%s' is left on and will be automatically bypassed", sensor_info.first->get_name().c_str());
|
265
|
+
this->bypassed_sensor_indicies_.push_back(sensor_info.second.store_index);
|
266
|
+
}
|
267
|
+
}
|
268
|
+
#endif
|
269
|
+
}
|
270
|
+
|
243
271
|
void TemplateAlarmControlPanel::control(const AlarmControlPanelCall &call) {
|
244
272
|
if (call.get_state()) {
|
245
273
|
if (call.get_state() == ACP_STATE_ARMED_AWAY) {
|
@@ -255,6 +283,9 @@ void TemplateAlarmControlPanel::control(const AlarmControlPanelCall &call) {
|
|
255
283
|
}
|
256
284
|
this->desired_state_ = ACP_STATE_DISARMED;
|
257
285
|
this->publish_state(ACP_STATE_DISARMED);
|
286
|
+
#ifdef USE_BINARY_SENSOR
|
287
|
+
this->bypassed_sensor_indicies_.clear();
|
288
|
+
#endif
|
258
289
|
} else if (call.get_state() == ACP_STATE_TRIGGERED) {
|
259
290
|
this->publish_state(ACP_STATE_TRIGGERED);
|
260
291
|
} else if (call.get_state() == ACP_STATE_PENDING) {
|
@@ -22,6 +22,7 @@ enum BinarySensorFlags : uint16_t {
|
|
22
22
|
BINARY_SENSOR_MODE_BYPASS_ARMED_HOME = 1 << 1,
|
23
23
|
BINARY_SENSOR_MODE_BYPASS_ARMED_NIGHT = 1 << 2,
|
24
24
|
BINARY_SENSOR_MODE_CHIME = 1 << 3,
|
25
|
+
BINARY_SENSOR_MODE_BYPASS_AUTO = 1 << 4,
|
25
26
|
};
|
26
27
|
|
27
28
|
enum AlarmSensorType : uint16_t {
|
@@ -59,6 +60,7 @@ class TemplateAlarmControlPanel : public alarm_control_panel::AlarmControlPanel,
|
|
59
60
|
bool get_requires_code_to_arm() const override { return this->requires_code_to_arm_; }
|
60
61
|
bool get_all_sensors_ready() { return this->sensors_ready_; };
|
61
62
|
void set_restore_mode(TemplateAlarmControlPanelRestoreMode restore_mode) { this->restore_mode_ = restore_mode; }
|
63
|
+
void bypass_before_arming();
|
62
64
|
|
63
65
|
#ifdef USE_BINARY_SENSOR
|
64
66
|
/** Add a binary_sensor to the alarm_panel.
|
@@ -121,7 +123,8 @@ class TemplateAlarmControlPanel : public alarm_control_panel::AlarmControlPanel,
|
|
121
123
|
#ifdef USE_BINARY_SENSOR
|
122
124
|
// This maps a binary sensor to its type and attribute bits
|
123
125
|
std::map<binary_sensor::BinarySensor *, SensorInfo> sensor_map_;
|
124
|
-
|
126
|
+
// a list of automatically bypassed sensors
|
127
|
+
std::vector<uint8_t> bypassed_sensor_indicies_;
|
125
128
|
#endif
|
126
129
|
TemplateAlarmControlPanelRestoreMode restore_mode_{};
|
127
130
|
|
@@ -16,7 +16,7 @@ TemplateCover::TemplateCover()
|
|
16
16
|
position_trigger_(new Trigger<float>()),
|
17
17
|
tilt_trigger_(new Trigger<float>()) {}
|
18
18
|
void TemplateCover::setup() {
|
19
|
-
ESP_LOGCONFIG(TAG, "
|
19
|
+
ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
|
20
20
|
switch (this->restore_mode_) {
|
21
21
|
case COVER_NO_RESTORE:
|
22
22
|
break;
|
@@ -11,7 +11,7 @@ void TemplateSelect::setup() {
|
|
11
11
|
return;
|
12
12
|
|
13
13
|
std::string value;
|
14
|
-
ESP_LOGD(TAG, "Setting up
|
14
|
+
ESP_LOGD(TAG, "Setting up");
|
15
15
|
if (!this->restore_value_) {
|
16
16
|
value = this->initial_option_;
|
17
17
|
ESP_LOGD(TAG, "State from initial: %s", value.c_str());
|
@@ -66,9 +66,11 @@ void TemplateSelect::dump_config() {
|
|
66
66
|
LOG_UPDATE_INTERVAL(this);
|
67
67
|
if (this->f_.has_value())
|
68
68
|
return;
|
69
|
-
ESP_LOGCONFIG(TAG,
|
70
|
-
|
71
|
-
|
69
|
+
ESP_LOGCONFIG(TAG,
|
70
|
+
" Optimistic: %s\n"
|
71
|
+
" Initial Option: %s\n"
|
72
|
+
" Restore Value: %s",
|
73
|
+
YESNO(this->optimistic_), this->initial_option_.c_str(), YESNO(this->restore_value_));
|
72
74
|
}
|
73
75
|
|
74
76
|
} // namespace template_
|
@@ -12,9 +12,8 @@ void TemplateText::setup() {
|
|
12
12
|
return;
|
13
13
|
}
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
value = this->initial_value_;
|
15
|
+
ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
|
16
|
+
std::string value = this->initial_value_;
|
18
17
|
if (!this->pref_) {
|
19
18
|
ESP_LOGD(TAG, "State from initial: %s", value.c_str());
|
20
19
|
} else {
|
@@ -16,7 +16,7 @@ TemplateValve::TemplateValve()
|
|
16
16
|
position_trigger_(new Trigger<float>()) {}
|
17
17
|
|
18
18
|
void TemplateValve::setup() {
|
19
|
-
ESP_LOGCONFIG(TAG, "
|
19
|
+
ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
|
20
20
|
switch (this->restore_mode_) {
|
21
21
|
case VALVE_NO_RESTORE:
|
22
22
|
break;
|
@@ -66,8 +66,10 @@ Trigger<> *TemplateValve::get_toggle_trigger() const { return this->toggle_trigg
|
|
66
66
|
|
67
67
|
void TemplateValve::dump_config() {
|
68
68
|
LOG_VALVE("", "Template Valve", this);
|
69
|
-
ESP_LOGCONFIG(TAG,
|
70
|
-
|
69
|
+
ESP_LOGCONFIG(TAG,
|
70
|
+
" Has position: %s\n"
|
71
|
+
" Optimistic: %s",
|
72
|
+
YESNO(this->has_position_), YESNO(this->optimistic_));
|
71
73
|
}
|
72
74
|
|
73
75
|
void TemplateValve::control(const ValveCall &call) {
|