esphome 2025.5.2__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 -1
- 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/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 +48 -30
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -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 +1 -2
- 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/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/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.2.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
- {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/RECORD +750 -696
- {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
- {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.5.2.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) {
|