esphome 2025.7.5__py3-none-any.whl → 2025.8.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 +190 -83
- esphome/automation.py +2 -4
- esphome/build_gen/__init__.py +0 -0
- esphome/build_gen/platformio.py +102 -0
- esphome/components/a4988/a4988.cpp +0 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
- esphome/components/absolute_humidity/sensor.py +2 -2
- esphome/components/adc/__init__.py +123 -85
- esphome/components/adc/adc_sensor.h +98 -35
- esphome/components/adc/adc_sensor_common.cpp +10 -4
- esphome/components/adc/adc_sensor_esp32.cpp +291 -123
- esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
- esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
- esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
- esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
- esphome/components/adc/sensor.py +61 -27
- esphome/components/adc128s102/adc128s102.cpp +1 -4
- esphome/components/ade7880/sensor.py +75 -49
- esphome/components/ads1115/ads1115.cpp +0 -1
- esphome/components/ads1118/ads1118.cpp +0 -1
- esphome/components/ags10/ags10.cpp +0 -4
- esphome/components/aht10/aht10.cpp +0 -4
- esphome/components/aic3204/aic3204.cpp +0 -2
- esphome/components/airthings_wave_plus/__init__.py +1 -1
- esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
- esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
- esphome/components/airthings_wave_plus/sensor.py +55 -28
- esphome/components/alarm_control_panel/__init__.py +4 -9
- esphome/components/am2315c/am2315c.cpp +0 -2
- esphome/components/am2320/am2320.cpp +0 -1
- esphome/components/animation/__init__.py +14 -11
- esphome/components/apds9306/apds9306.cpp +0 -4
- esphome/components/apds9960/apds9960.cpp +0 -1
- esphome/components/api/__init__.py +29 -4
- esphome/components/api/api_connection.cpp +378 -401
- esphome/components/api/api_connection.h +102 -52
- esphome/components/api/api_frame_helper.cpp +69 -896
- esphome/components/api/api_frame_helper.h +31 -126
- esphome/components/api/api_frame_helper_noise.cpp +583 -0
- esphome/components/api/api_frame_helper_noise.h +68 -0
- esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
- esphome/components/api/api_frame_helper_plaintext.h +53 -0
- esphome/components/api/api_noise_context.h +2 -4
- esphome/components/api/api_pb2.cpp +1601 -1808
- esphome/components/api/api_pb2.h +367 -323
- esphome/components/api/api_pb2_dump.cpp +1137 -3466
- esphome/components/api/api_pb2_includes.h +34 -0
- esphome/components/api/api_pb2_service.cpp +94 -105
- esphome/components/api/api_pb2_service.h +27 -16
- esphome/components/api/api_server.cpp +18 -17
- esphome/components/api/api_server.h +8 -5
- esphome/components/api/client.py +16 -8
- esphome/components/api/custom_api_device.h +68 -14
- esphome/components/api/homeassistant_service.h +24 -19
- esphome/components/api/list_entities.cpp +3 -5
- esphome/components/api/list_entities.h +2 -4
- esphome/components/api/proto.cpp +3 -5
- esphome/components/api/proto.h +239 -274
- esphome/components/api/subscribe_state.cpp +2 -4
- esphome/components/api/subscribe_state.h +2 -4
- esphome/components/api/user_services.cpp +2 -4
- esphome/components/api/user_services.h +8 -8
- esphome/components/as3935/as3935.cpp +0 -2
- esphome/components/as3935_spi/as3935_spi.cpp +0 -2
- esphome/components/as5600/__init__.py +1 -1
- esphome/components/as5600/as5600.cpp +0 -2
- esphome/components/as5600/sensor/__init__.py +0 -1
- esphome/components/as7341/as7341.cpp +0 -1
- esphome/components/async_tcp/__init__.py +1 -1
- esphome/components/at581x/at581x.cpp +1 -1
- esphome/components/atm90e26/atm90e26.cpp +0 -1
- esphome/components/atm90e32/atm90e32.cpp +475 -116
- esphome/components/atm90e32/atm90e32.h +43 -5
- esphome/components/audio/audio.h +2 -2
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
- esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
- esphome/components/bh1750/bh1750.cpp +0 -1
- esphome/components/binary_sensor/__init__.py +14 -12
- esphome/components/ble_client/__init__.py +4 -7
- esphome/components/bluetooth_proxy/__init__.py +40 -3
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +392 -81
- esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
- esphome/components/bme280_base/bme280_base.cpp +15 -16
- esphome/components/bme680/bme680.cpp +2 -3
- esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
- esphome/components/bmi160/bmi160.cpp +0 -1
- esphome/components/bmp085/bmp085.cpp +0 -1
- esphome/components/bmp280_base/bmp280_base.cpp +13 -14
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
- esphome/components/bmp581/bmp581.cpp +0 -2
- esphome/components/bp1658cj/bp1658cj.cpp +0 -1
- esphome/components/bp5758d/bp5758d.cpp +0 -1
- esphome/components/button/__init__.py +0 -1
- esphome/components/canbus/__init__.py +2 -3
- esphome/components/canbus/canbus.cpp +0 -1
- esphome/components/cap1188/cap1188.cpp +0 -2
- esphome/components/captive_portal/__init__.py +1 -1
- esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
- esphome/components/ch422g/ch422g.cpp +0 -1
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
- esphome/components/climate/__init__.py +0 -1
- esphome/components/climate/climate_traits.h +24 -0
- esphome/components/cm1106/cm1106.cpp +0 -1
- esphome/components/const/__init__.py +6 -0
- esphome/components/cover/__init__.py +0 -1
- esphome/components/cover/cover.cpp +9 -13
- esphome/components/cs5460a/cs5460a.cpp +0 -2
- esphome/components/cse7761/cse7761.cpp +0 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
- esphome/components/dac7678/dac7678_output.cpp +0 -2
- esphome/components/dallas_temp/dallas_temp.cpp +0 -1
- esphome/components/datetime/__init__.py +0 -2
- esphome/components/debug/__init__.py +15 -1
- esphome/components/debug/debug_zephyr.cpp +281 -0
- esphome/components/debug/sensor.py +2 -1
- esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
- esphome/components/dfrobot_sen0395/__init__.py +1 -2
- esphome/components/dht/dht.cpp +0 -1
- esphome/components/dht12/dht12.cpp +0 -1
- esphome/components/display/__init__.py +16 -3
- esphome/components/display_menu_base/__init__.py +1 -1
- esphome/components/dps310/dps310.cpp +0 -2
- esphome/components/ds1307/ds1307.cpp +0 -1
- esphome/components/ds2484/ds2484.cpp +0 -1
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
- esphome/components/ee895/ee895.cpp +0 -1
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
- esphome/components/emc2101/emc2101.cpp +0 -2
- esphome/components/ens160_base/ens160_base.cpp +0 -2
- esphome/components/ens210/ens210.cpp +0 -1
- esphome/components/es7210/es7210.cpp +0 -2
- esphome/components/es7243e/es7243e.cpp +0 -2
- esphome/components/es8156/es8156.cpp +0 -2
- esphome/components/es8311/es8311.cpp +0 -2
- esphome/components/es8388/es8388.cpp +0 -2
- esphome/components/esp32/__init__.py +203 -60
- esphome/components/esp32/boards.py +17 -0
- esphome/components/esp32/gpio.cpp +0 -1
- esphome/components/esp32/gpio.py +1 -2
- esphome/components/esp32/gpio_esp32_h2.py +2 -7
- esphome/components/esp32/gpio_esp32_p4.py +2 -7
- esphome/components/esp32/post_build.py.script +112 -61
- esphome/components/esp32_ble/__init__.py +41 -2
- esphome/components/esp32_ble/ble.cpp +14 -10
- esphome/components/esp32_ble/ble.h +18 -18
- esphome/components/esp32_ble/ble_advertising.cpp +5 -5
- esphome/components/esp32_ble/ble_advertising.h +7 -5
- esphome/components/esp32_ble/ble_event.h +139 -73
- esphome/components/esp32_ble/ble_scan_result.h +2 -4
- esphome/components/esp32_ble/ble_uuid.cpp +5 -5
- esphome/components/esp32_ble/ble_uuid.h +6 -5
- esphome/components/esp32_ble_beacon/__init__.py +4 -0
- esphome/components/esp32_ble_client/__init__.py +1 -1
- esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
- esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
- esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
- esphome/components/esp32_ble_client/ble_client_base.h +17 -6
- esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
- esphome/components/esp32_ble_client/ble_service.cpp +4 -4
- esphome/components/esp32_ble_client/ble_service.h +6 -4
- esphome/components/esp32_ble_server/__init__.py +15 -12
- esphome/components/esp32_ble_tracker/__init__.py +79 -11
- esphome/components/esp32_ble_tracker/automation.h +4 -4
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
- esphome/components/esp32_camera/__init__.py +13 -1
- esphome/components/esp32_camera/esp32_camera.cpp +7 -2
- esphome/components/esp32_camera/esp32_camera.h +1 -0
- esphome/components/esp32_dac/esp32_dac.cpp +3 -19
- esphome/components/esp32_dac/esp32_dac.h +4 -8
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
- esphome/components/esp32_rmt_led_strip/light.py +1 -1
- esphome/components/esp32_touch/__init__.py +2 -3
- esphome/components/esp32_touch/esp32_touch.h +9 -6
- esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
- esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
- esphome/components/esp8266/__init__.py +3 -1
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
- esphome/components/esphome/ota/__init__.py +1 -2
- esphome/components/esphome/ota/ota_esphome.cpp +150 -77
- esphome/components/esphome/ota/ota_esphome.h +8 -1
- esphome/components/espnow/__init__.py +309 -0
- esphome/components/espnow/automation.h +175 -0
- esphome/components/espnow/espnow_component.cpp +468 -0
- esphome/components/espnow/espnow_component.h +183 -0
- esphome/components/espnow/espnow_err.h +19 -0
- esphome/components/espnow/espnow_packet.h +166 -0
- esphome/components/ethernet/__init__.py +7 -1
- esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
- esphome/components/ethernet/ethernet_component.cpp +0 -1
- esphome/components/ethernet/ethernet_component.h +4 -0
- esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
- esphome/components/event/__init__.py +0 -1
- esphome/components/factory_reset/__init__.py +92 -0
- esphome/components/factory_reset/factory_reset.cpp +76 -0
- esphome/components/factory_reset/factory_reset.h +43 -0
- esphome/components/fan/__init__.py +0 -1
- esphome/components/fan/fan_traits.h +16 -0
- esphome/components/fastled_base/fastled_light.cpp +0 -1
- esphome/components/fastled_spi/light.py +1 -3
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
- esphome/components/fs3000/fs3000.cpp +0 -2
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
- esphome/components/ft63x6/ft63x6.cpp +0 -1
- esphome/components/gdk101/gdk101.cpp +0 -1
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
- esphome/components/gl_r01_i2c/sensor.py +1 -1
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
- esphome/components/gpio/switch/gpio_switch.cpp +0 -2
- esphome/components/gpio_expander/cached_gpio.h +24 -15
- esphome/components/gps/__init__.py +6 -2
- esphome/components/gps/gps.cpp +50 -49
- esphome/components/gps/gps.h +4 -8
- esphome/components/gps/time/gps_time.cpp +3 -9
- esphome/components/gps/time/gps_time.h +4 -7
- esphome/components/graph/__init__.py +1 -1
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
- esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
- esphome/components/haier/climate.py +5 -10
- esphome/components/haier/haier_base.cpp +0 -1
- esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
- esphome/components/hdc1080/hdc1080.cpp +0 -2
- esphome/components/heatpumpir/climate.py +2 -2
- esphome/components/hlw8012/hlw8012.cpp +0 -1
- esphome/components/hm3301/hm3301.cpp +0 -1
- esphome/components/hmc5883l/hmc5883l.cpp +0 -1
- esphome/components/homeassistant/__init__.py +1 -0
- esphome/components/homeassistant/number/__init__.py +1 -0
- esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
- esphome/components/homeassistant/switch/__init__.py +1 -0
- esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
- esphome/components/honeywellabp/honeywellabp.cpp +1 -4
- esphome/components/host/__init__.py +2 -0
- esphome/components/hte501/hte501.cpp +0 -1
- esphome/components/http_request/__init__.py +2 -3
- esphome/components/http_request/http_request_idf.cpp +2 -2
- esphome/components/htu21d/htu21d.cpp +0 -2
- esphome/components/htu31d/htu31d.cpp +0 -2
- esphome/components/hx711/hx711.cpp +0 -1
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
- esphome/components/hydreon_rgxx/sensor.py +4 -5
- esphome/components/i2c/i2c_bus.h +1 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
- esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
- esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
- esphome/components/i2s_audio/__init__.py +6 -5
- esphome/components/i2s_audio/i2s_audio.cpp +0 -2
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
- esphome/components/i2s_audio/microphone/__init__.py +4 -6
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +0 -1
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -2
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
- esphome/components/ili9xxx/display.py +4 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
- esphome/components/image/__init__.py +123 -92
- esphome/components/improv_serial/__init__.py +7 -8
- esphome/components/ina219/ina219.cpp +0 -1
- esphome/components/ina226/ina226.cpp +0 -2
- esphome/components/ina260/ina260.cpp +0 -2
- esphome/components/ina2xx_base/__init__.py +2 -5
- esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
- esphome/components/ina3221/ina3221.cpp +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +0 -2
- esphome/components/interval/interval.h +5 -9
- esphome/components/json/__init__.py +1 -1
- esphome/components/kmeteriso/kmeteriso.cpp +0 -2
- esphome/components/lc709203f/lc709203f.cpp +0 -2
- esphome/components/lcd_gpio/display.py +1 -3
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
- esphome/components/ld2410/__init__.py +4 -6
- esphome/components/ld2410/binary_sensor.py +4 -0
- esphome/components/ld2410/ld2410.cpp +56 -100
- esphome/components/ld2410/ld2410.h +17 -15
- esphome/components/ld2410/sensor.py +24 -10
- esphome/components/ld2412/__init__.py +46 -0
- esphome/components/ld2412/binary_sensor.py +70 -0
- esphome/components/ld2412/button/__init__.py +74 -0
- esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2412/button/factory_reset_button.h +18 -0
- esphome/components/ld2412/button/query_button.cpp +9 -0
- esphome/components/ld2412/button/query_button.h +18 -0
- esphome/components/ld2412/button/restart_button.cpp +9 -0
- esphome/components/ld2412/button/restart_button.h +18 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
- esphome/components/ld2412/ld2412.cpp +861 -0
- esphome/components/ld2412/ld2412.h +141 -0
- esphome/components/ld2412/number/__init__.py +126 -0
- esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
- esphome/components/ld2412/number/gate_threshold_number.h +19 -0
- esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
- esphome/components/ld2412/number/light_threshold_number.h +18 -0
- esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
- esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
- esphome/components/ld2412/select/__init__.py +82 -0
- esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
- esphome/components/ld2412/select/baud_rate_select.h +18 -0
- esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
- esphome/components/ld2412/select/distance_resolution_select.h +18 -0
- esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
- esphome/components/ld2412/select/light_out_control_select.h +18 -0
- esphome/components/ld2412/sensor.py +124 -0
- esphome/components/ld2412/switch/__init__.py +45 -0
- esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
- esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
- esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
- esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
- esphome/components/ld2412/text_sensor.py +34 -0
- esphome/components/ld2420/ld2420.cpp +0 -1
- esphome/components/ld2450/__init__.py +3 -4
- esphome/components/ld2450/binary_sensor.py +3 -0
- esphome/components/ld2450/ld2450.cpp +77 -165
- esphome/components/ld2450/ld2450.h +26 -54
- esphome/components/ld2450/sensor.py +120 -6
- esphome/components/ld2450/text_sensor.py +5 -4
- esphome/components/ld24xx/__init__.py +1 -0
- esphome/components/ld24xx/ld24xx.h +65 -0
- esphome/components/ledc/ledc_output.cpp +0 -1
- esphome/components/libretiny/__init__.py +2 -0
- esphome/components/light/__init__.py +0 -1
- esphome/components/light/effects.py +70 -45
- esphome/components/light/light_call.cpp +101 -66
- esphome/components/light/light_color_values.h +16 -11
- esphome/components/light/light_json_schema.cpp +46 -44
- esphome/components/light/light_state.cpp +8 -11
- esphome/components/light/light_traits.h +17 -0
- esphome/components/lightwaverf/lightwaverf.cpp +0 -2
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
- esphome/components/lock/__init__.py +0 -1
- esphome/components/logger/__init__.py +31 -9
- esphome/components/logger/logger.cpp +12 -7
- esphome/components/logger/logger.h +25 -14
- esphome/components/logger/logger_esp32.cpp +2 -7
- esphome/components/logger/logger_esp8266.cpp +2 -4
- esphome/components/logger/logger_host.cpp +2 -4
- esphome/components/logger/logger_libretiny.cpp +2 -4
- esphome/components/logger/logger_rp2040.cpp +2 -4
- esphome/components/logger/logger_zephyr.cpp +86 -0
- esphome/components/logger/select/logger_level_select.cpp +2 -4
- esphome/components/logger/select/logger_level_select.h +2 -4
- esphome/components/logger/task_log_buffer.cpp +2 -4
- esphome/components/logger/task_log_buffer.h +2 -4
- esphome/components/lps22/sensor.py +5 -5
- esphome/components/ltr390/ltr390.cpp +0 -2
- esphome/components/ltr501/ltr501.cpp +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
- esphome/components/lvgl/__init__.py +14 -13
- esphome/components/lvgl/automation.py +2 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/helpers.py +1 -1
- esphome/components/lvgl/lv_validation.py +7 -4
- esphome/components/lvgl/lvgl_esphome.cpp +2 -3
- esphome/components/lvgl/styles.py +2 -2
- esphome/components/lvgl/types.py +1 -1
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/arc.py +14 -11
- esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
- esphome/components/lvgl/widgets/qrcode.py +7 -7
- esphome/components/lvgl/widgets/spinner.py +6 -6
- esphome/components/lvgl/widgets/switch.py +2 -2
- esphome/components/lvgl/widgets/tabview.py +3 -3
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
- esphome/components/matrix_keypad/__init__.py +4 -3
- esphome/components/max17043/max17043.cpp +0 -2
- esphome/components/max31855/max31855.cpp +1 -4
- esphome/components/max31856/max31856.cpp +0 -4
- esphome/components/max31865/max31865.cpp +0 -1
- esphome/components/max44009/max44009.cpp +0 -1
- esphome/components/max6675/max6675.cpp +1 -4
- esphome/components/max6956/max6956.cpp +0 -1
- esphome/components/max7219/max7219.cpp +0 -1
- esphome/components/max7219digit/display.py +1 -1
- esphome/components/max7219digit/max7219digit.cpp +0 -1
- esphome/components/max9611/max9611.cpp +0 -1
- esphome/components/mcp23008/__init__.py +1 -1
- esphome/components/mcp23008/mcp23008.cpp +0 -1
- esphome/components/mcp23016/mcp23016.cpp +0 -1
- esphome/components/mcp23017/__init__.py +1 -1
- esphome/components/mcp23017/mcp23017.cpp +0 -1
- esphome/components/mcp23s08/__init__.py +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +0 -1
- esphome/components/mcp23s17/__init__.py +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +0 -1
- esphome/components/mcp23x08_base/__init__.py +2 -0
- esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
- esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
- esphome/components/mcp23x17_base/__init__.py +2 -0
- esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
- esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
- esphome/components/mcp23xxx_base/__init__.py +11 -5
- esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
- esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
- esphome/components/mcp3008/mcp3008.cpp +1 -4
- esphome/components/mcp3204/mcp3204.cpp +1 -4
- esphome/components/mcp4461/mcp4461.cpp +0 -1
- esphome/components/mcp4725/mcp4725.cpp +0 -1
- esphome/components/mcp4728/mcp4728.cpp +0 -1
- esphome/components/mcp9600/mcp9600.cpp +0 -2
- esphome/components/mcp9808/mcp9808.cpp +0 -2
- esphome/components/mdns/__init__.py +3 -0
- esphome/components/mdns/mdns_component.cpp +2 -0
- esphome/components/mdns/mdns_component.h +4 -0
- esphome/components/media_player/__init__.py +40 -0
- esphome/components/media_player/automation.h +16 -0
- esphome/components/media_player/media_player.cpp +13 -0
- esphome/components/media_player/media_player.h +50 -3
- esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
- esphome/components/mics_4514/mics_4514.cpp +1 -6
- esphome/components/midea/ir_transmitter.h +4 -4
- esphome/components/mipi/__init__.py +416 -0
- esphome/components/mipi_dsi/__init__.py +5 -0
- esphome/components/mipi_dsi/display.py +233 -0
- esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
- esphome/components/mipi_dsi/mipi_dsi.h +123 -0
- esphome/components/mipi_dsi/models/__init__.py +0 -0
- esphome/components/mipi_dsi/models/guition.py +38 -0
- esphome/components/mipi_dsi/models/m5stack.py +57 -0
- esphome/components/mipi_dsi/models/waveshare.py +105 -0
- esphome/components/mipi_rgb/models/lilygo.py +0 -0
- esphome/components/mipi_spi/__init__.py +0 -9
- esphome/components/mipi_spi/display.py +220 -256
- esphome/components/mipi_spi/mipi_spi.cpp +1 -485
- esphome/components/mipi_spi/mipi_spi.h +556 -108
- esphome/components/mipi_spi/models/__init__.py +0 -65
- esphome/components/mipi_spi/models/adafruit.py +30 -0
- esphome/components/mipi_spi/models/amoled.py +41 -5
- esphome/components/mipi_spi/models/ili.py +5 -5
- esphome/components/mipi_spi/models/jc.py +1 -3
- esphome/components/mipi_spi/models/lilygo.py +1 -1
- esphome/components/mipi_spi/models/waveshare.py +16 -1
- esphome/components/mixer/speaker/__init__.py +4 -5
- esphome/components/mlx90393/sensor.py +7 -5
- esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
- esphome/components/mlx90614/mlx90614.cpp +0 -1
- esphome/components/mmc5603/mmc5603.cpp +0 -1
- esphome/components/mmc5983/mmc5983.cpp +0 -2
- esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
- esphome/components/mpr121/__init__.py +7 -6
- esphome/components/mpr121/mpr121.cpp +0 -1
- esphome/components/mpu6050/mpu6050.cpp +0 -1
- esphome/components/mpu6886/mpu6886.cpp +0 -1
- esphome/components/mqtt/__init__.py +1 -2
- esphome/components/mqtt/mqtt_button.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +0 -1
- esphome/components/mqtt/mqtt_component.cpp +8 -14
- esphome/components/mqtt/mqtt_component.h +0 -7
- esphome/components/mqtt/mqtt_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_sensor.h +0 -1
- esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_text_sensor.h +0 -1
- esphome/components/ms5611/ms5611.cpp +0 -1
- esphome/components/ms8607/ms8607.cpp +0 -1
- esphome/components/msa3xx/msa3xx.cpp +0 -2
- esphome/components/my9231/my9231.cpp +0 -2
- esphome/components/nau7802/nau7802.cpp +0 -1
- esphome/components/neopixelbus/light.py +3 -0
- esphome/components/network/util.cpp +29 -0
- esphome/components/nextion/nextion.cpp +2 -2
- esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
- esphome/components/npi19/npi19.cpp +0 -2
- esphome/components/nrf52/__init__.py +223 -0
- esphome/components/nrf52/boards.py +34 -0
- esphome/components/nrf52/const.py +18 -0
- esphome/components/nrf52/gpio.py +79 -0
- esphome/components/number/__init__.py +2 -1
- esphome/components/one_wire/__init__.py +1 -2
- esphome/components/one_wire/one_wire.cpp +0 -2
- esphome/components/one_wire/one_wire.h +0 -2
- esphome/components/opentherm/hub.cpp +0 -1
- esphome/components/opentherm/number/__init__.py +2 -2
- esphome/components/openthread/__init__.py +2 -3
- esphome/components/openthread/openthread.cpp +30 -13
- esphome/components/openthread/openthread.h +3 -0
- esphome/components/openthread/openthread_esp.cpp +3 -1
- esphome/components/opt3001/sensor.py +2 -6
- esphome/components/output/__init__.py +38 -0
- esphome/components/output/automation.h +24 -0
- esphome/components/output/switch/output_switch.cpp +0 -2
- esphome/components/packages/__init__.py +1 -2
- esphome/components/packet_transport/__init__.py +4 -3
- esphome/components/pca6416a/pca6416a.cpp +0 -1
- esphome/components/pca9554/pca9554.cpp +0 -1
- esphome/components/pca9685/pca9685_output.cpp +0 -2
- esphome/components/pcf85063/pcf85063.cpp +0 -1
- esphome/components/pcf8563/pcf8563.cpp +0 -1
- esphome/components/pcf8574/pcf8574.cpp +0 -1
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
- esphome/components/pipsolar/pipsolar.cpp +54 -42
- esphome/components/pipsolar/pipsolar.h +5 -4
- esphome/components/pipsolar/sensor/__init__.py +1 -1
- esphome/components/pm2005/pm2005.cpp +0 -1
- esphome/components/pmsa003i/pmsa003i.cpp +0 -2
- esphome/components/pmwcs3/sensor.py +1 -2
- esphome/components/pn532/pn532.cpp +0 -2
- esphome/components/pn532_spi/pn532_spi.cpp +0 -2
- esphome/components/power_supply/power_supply.cpp +7 -10
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/psram/__init__.py +6 -1
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
- esphome/components/pulse_counter/sensor.py +9 -6
- esphome/components/pylontech/pylontech.cpp +0 -1
- esphome/components/qmc5883l/qmc5883l.cpp +0 -1
- esphome/components/qmp6988/qmp6988.cpp +0 -2
- esphome/components/qspi_dbi/display.py +2 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
- esphome/components/qwiic_pir/binary_sensor.py +2 -3
- esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
- esphome/components/rc522/rc522.cpp +9 -31
- esphome/components/rc522_spi/rc522_spi.cpp +0 -1
- esphome/components/remote_base/__init__.py +5 -6
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
- esphome/components/remote_transmitter/__init__.py +26 -0
- esphome/components/remote_transmitter/automation.h +18 -0
- esphome/components/remote_transmitter/remote_transmitter.h +2 -1
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
- esphome/components/resampler/speaker/__init__.py +4 -5
- esphome/components/rf_bridge/__init__.py +4 -8
- esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
- esphome/components/rp2040/__init__.py +3 -1
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
- esphome/components/rp2040_pio_led_strip/light.py +1 -2
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
- esphome/components/rpi_dpi_rgb/display.py +13 -15
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
- esphome/components/runtime_stats/__init__.py +34 -0
- esphome/components/runtime_stats/runtime_stats.cpp +102 -0
- esphome/components/runtime_stats/runtime_stats.h +132 -0
- esphome/components/scd30/scd30.cpp +0 -2
- esphome/components/scd30/sensor.py +1 -2
- esphome/components/scd4x/scd4x.cpp +0 -1
- esphome/components/scd4x/sensor.py +1 -3
- esphome/components/sdl/display.py +3 -1
- esphome/components/sdl/sdl_esphome.cpp +0 -2
- esphome/components/sdp3x/sdp3x.cpp +0 -2
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
- esphome/components/select/__init__.py +2 -3
- esphome/components/select/select_traits.cpp +1 -1
- esphome/components/select/select_traits.h +1 -1
- esphome/components/sen0321/sen0321.cpp +0 -1
- esphome/components/sen5x/sen5x.cpp +0 -2
- esphome/components/senseair/senseair.cpp +7 -3
- esphome/components/senseair/senseair.h +11 -0
- esphome/components/sensor/__init__.py +36 -4
- esphome/components/sensor/filter.cpp +49 -10
- esphome/components/sensor/filter.h +22 -7
- esphome/components/sensor/sensor.cpp +0 -1
- esphome/components/sensor/sensor.h +0 -9
- esphome/components/sfa30/sfa30.cpp +0 -4
- esphome/components/sgp30/sgp30.cpp +0 -2
- esphome/components/sgp4x/sensor.py +1 -1
- esphome/components/sgp4x/sgp4x.cpp +0 -2
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
- esphome/components/sht3xd/sht3xd.cpp +0 -2
- esphome/components/sht4x/sht4x.cpp +0 -2
- esphome/components/shtcx/shtcx.cpp +0 -1
- esphome/components/sim800l/__init__.py +2 -4
- esphome/components/sm16716/sm16716.cpp +0 -1
- esphome/components/sm2135/sm2135.cpp +0 -1
- esphome/components/sm2235/sm2235.cpp +0 -1
- esphome/components/sm2335/sm2335.cpp +0 -1
- esphome/components/sn74hc165/sn74hc165.cpp +0 -1
- esphome/components/sn74hc595/sn74hc595.cpp +0 -1
- esphome/components/sntp/sntp_component.cpp +0 -1
- esphome/components/sound_level/sensor.py +1 -1
- esphome/components/speaker/media_player/__init__.py +21 -33
- esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
- esphome/components/spi/__init__.py +29 -13
- esphome/components/spi/spi.cpp +0 -2
- esphome/components/spi_device/spi_device.cpp +1 -4
- esphome/components/sprinkler/__init__.py +4 -4
- esphome/components/sps30/sps30.cpp +0 -1
- esphome/components/ssd1306_base/__init__.py +11 -11
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
- esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
- esphome/components/st7567_spi/st7567_spi.cpp +0 -1
- esphome/components/st7701s/display.py +10 -14
- esphome/components/st7701s/st7701s.cpp +0 -3
- esphome/components/st7735/st7735.cpp +0 -1
- esphome/components/st7789v/st7789v.cpp +0 -1
- esphome/components/st7920/st7920.cpp +0 -1
- esphome/components/status_led/light/status_led_light.cpp +0 -2
- esphome/components/status_led/status_led.cpp +0 -1
- esphome/components/stepper/__init__.py +2 -4
- esphome/components/sts3x/sts3x.cpp +0 -1
- esphome/components/substitutions/__init__.py +10 -16
- esphome/components/substitutions/jinja.py +24 -1
- esphome/components/sun/__init__.py +2 -3
- esphome/components/switch/__init__.py +31 -1
- esphome/components/switch/automation.h +24 -0
- esphome/components/switch/switch.cpp +8 -0
- esphome/components/switch/switch.h +8 -0
- esphome/components/sx126x/sx126x.cpp +0 -2
- esphome/components/sx127x/sx127x.cpp +0 -2
- esphome/components/sx1509/__init__.py +7 -5
- esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
- esphome/components/sx1509/sx1509.cpp +0 -2
- esphome/components/syslog/esphome_syslog.cpp +1 -1
- esphome/components/tc74/tc74.cpp +0 -1
- esphome/components/tca9548a/tca9548a.cpp +0 -1
- esphome/components/tca9555/tca9555.cpp +0 -1
- esphome/components/tcs34725/tcs34725.cpp +0 -1
- esphome/components/tee501/tee501.cpp +0 -1
- esphome/components/tem3200/tem3200.cpp +0 -2
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
- esphome/components/template/cover/template_cover.cpp +0 -1
- esphome/components/template/select/template_select.cpp +0 -1
- esphome/components/template/text/template_text.cpp +0 -2
- esphome/components/template/valve/template_valve.cpp +0 -1
- esphome/components/text/__init__.py +0 -1
- esphome/components/text/text_traits.h +2 -0
- esphome/components/text_sensor/__init__.py +2 -1
- esphome/components/text_sensor/text_sensor.cpp +0 -2
- esphome/components/text_sensor/text_sensor.h +0 -8
- esphome/components/thermostat/climate.py +4 -4
- esphome/components/time/__init__.py +7 -4
- esphome/components/time/real_time_clock.cpp +16 -3
- esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
- esphome/components/tlc5947/tlc5947.cpp +0 -2
- esphome/components/tlc5971/tlc5971.cpp +0 -2
- esphome/components/tm1621/tm1621.cpp +0 -2
- esphome/components/tm1637/tm1637.cpp +0 -2
- esphome/components/tm1638/tm1638.cpp +0 -2
- esphome/components/tm1651/__init__.py +45 -48
- esphome/components/tm1651/tm1651.cpp +213 -47
- esphome/components/tm1651/tm1651.h +37 -32
- esphome/components/tmp117/tmp117.cpp +0 -2
- esphome/components/tsl2561/tsl2561.cpp +0 -1
- esphome/components/tsl2591/tsl2591.cpp +0 -1
- esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
- esphome/components/tuya/climate/__init__.py +9 -10
- esphome/components/tuya/number/__init__.py +8 -6
- esphome/components/tx20/tx20.cpp +0 -1
- esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
- esphome/components/uart/uart_component_esp8266.cpp +0 -1
- esphome/components/uart/uart_component_esp_idf.cpp +0 -2
- esphome/components/uart/uart_component_libretiny.cpp +0 -2
- esphome/components/uart/uart_component_rp2040.cpp +0 -2
- esphome/components/udp/__init__.py +1 -1
- esphome/components/ufire_ec/sensor.py +1 -2
- esphome/components/ufire_ec/ufire_ec.cpp +0 -2
- esphome/components/ufire_ise/sensor.py +1 -2
- esphome/components/ufire_ise/ufire_ise.cpp +0 -2
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
- esphome/components/update/__init__.py +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
- esphome/components/usb_host/usb_host_client.cpp +0 -1
- esphome/components/usb_host/usb_host_component.cpp +0 -1
- esphome/components/valve/__init__.py +0 -1
- esphome/components/veml3235/veml3235.cpp +0 -3
- esphome/components/veml7700/veml7700.cpp +0 -2
- esphome/components/version/version_text_sensor.cpp +0 -1
- esphome/components/version/version_text_sensor.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
- esphome/components/voice_assistant/voice_assistant.cpp +9 -8
- esphome/components/web_server/__init__.py +13 -0
- esphome/components/web_server/web_server.cpp +188 -353
- esphome/components/web_server/web_server.h +61 -1
- esphome/components/web_server_base/__init__.py +1 -1
- esphome/components/web_server_base/web_server_base.cpp +2 -0
- esphome/components/web_server_base/web_server_base.h +6 -0
- esphome/components/web_server_idf/web_server_idf.cpp +10 -8
- esphome/components/web_server_idf/web_server_idf.h +2 -0
- esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
- esphome/components/weikai_spi/weikai_spi.cpp +1 -1
- esphome/components/wifi/__init__.py +17 -43
- esphome/components/wifi/wifi_component.cpp +100 -36
- esphome/components/wifi/wifi_component.h +5 -1
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
- esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
- esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
- esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
- esphome/components/wireguard/wireguard.cpp +0 -2
- esphome/components/x9c/x9c.cpp +0 -2
- esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
- esphome/components/xl9535/xl9535.cpp +0 -2
- esphome/components/zephyr/__init__.py +252 -0
- esphome/components/zephyr/const.py +16 -0
- esphome/components/zephyr/core.cpp +90 -0
- esphome/components/zephyr/gpio.cpp +120 -0
- esphome/components/zephyr/gpio.h +38 -0
- esphome/components/zephyr/pre_build.py.script +4 -0
- esphome/components/zephyr/preferences.cpp +156 -0
- esphome/components/zephyr/preferences.h +13 -0
- esphome/config.py +38 -16
- esphome/config_helpers.py +1 -2
- esphome/config_validation.py +12 -16
- esphome/const.py +26 -1
- esphome/core/__init__.py +92 -51
- esphome/core/application.cpp +75 -21
- esphome/core/application.h +106 -171
- esphome/core/color.h +10 -0
- esphome/core/component.cpp +41 -25
- esphome/core/component.h +9 -6
- esphome/core/component_iterator.cpp +61 -261
- esphome/core/component_iterator.h +15 -0
- esphome/core/config.py +26 -11
- esphome/core/defines.h +40 -2
- esphome/core/entity_base.h +18 -0
- esphome/core/entity_helpers.py +45 -10
- esphome/core/helpers.cpp +8 -15
- esphome/core/helpers.h +60 -6
- esphome/core/lock_free_queue.h +1 -1
- esphome/core/scheduler.cpp +311 -77
- esphome/core/scheduler.h +141 -28
- esphome/cpp_generator.py +2 -6
- esphome/cpp_helpers.py +1 -1
- esphome/dashboard/dashboard.py +2 -3
- esphome/dashboard/dns.py +2 -8
- esphome/dashboard/web_server.py +34 -19
- esphome/espota2.py +1 -4
- esphome/git.py +3 -1
- esphome/helpers.py +23 -4
- esphome/log.py +3 -1
- esphome/mqtt.py +3 -5
- esphome/platformio_api.py +7 -4
- esphome/types.py +12 -0
- esphome/util.py +20 -8
- esphome/voluptuous_schema.py +4 -3
- esphome/vscode.py +1 -2
- esphome/wizard.py +1 -4
- esphome/writer.py +16 -108
- esphome/yaml_util.py +7 -5
- {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/METADATA +13 -14
- {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/RECORD +755 -675
- esphome/components/mipi_spi/models/commands.py +0 -82
- /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/WHEEL +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/top_level.txt +0 -0
|
@@ -6,19 +6,21 @@ namespace mcp23x08_base {
|
|
|
6
6
|
|
|
7
7
|
static const char *const TAG = "mcp23x08_base";
|
|
8
8
|
|
|
9
|
-
bool MCP23X08Base::
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return
|
|
9
|
+
bool MCP23X08Base::digital_read_hw(uint8_t pin) {
|
|
10
|
+
if (!this->read_reg(mcp23x08_base::MCP23X08_GPIO, &this->input_mask_)) {
|
|
11
|
+
this->status_set_warning(ESP_LOG_MSG_COMM_FAIL);
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
void MCP23X08Base::
|
|
17
|
+
void MCP23X08Base::digital_write_hw(uint8_t pin, bool value) {
|
|
18
18
|
uint8_t reg_addr = mcp23x08_base::MCP23X08_OLAT;
|
|
19
19
|
this->update_reg(pin, value, reg_addr);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
bool MCP23X08Base::digital_read_cache(uint8_t pin) { return this->input_mask_ & (1 << pin); }
|
|
23
|
+
|
|
22
24
|
void MCP23X08Base::pin_mode(uint8_t pin, gpio::Flags flags) {
|
|
23
25
|
uint8_t iodir = mcp23x08_base::MCP23X08_IODIR;
|
|
24
26
|
uint8_t gppu = mcp23x08_base::MCP23X08_GPPU;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include "esphome/core/component.h"
|
|
4
3
|
#include "esphome/components/mcp23xxx_base/mcp23xxx_base.h"
|
|
4
|
+
#include "esphome/core/component.h"
|
|
5
5
|
#include "esphome/core/hal.h"
|
|
6
6
|
|
|
7
7
|
namespace esphome {
|
|
@@ -22,10 +22,12 @@ enum MCP23S08GPIORegisters {
|
|
|
22
22
|
MCP23X08_OLAT = 0x0A,
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
class MCP23X08Base : public mcp23xxx_base::MCP23XXXBase {
|
|
25
|
+
class MCP23X08Base : public mcp23xxx_base::MCP23XXXBase<8> {
|
|
26
26
|
public:
|
|
27
|
-
bool
|
|
28
|
-
void
|
|
27
|
+
bool digital_read_hw(uint8_t pin) override;
|
|
28
|
+
void digital_write_hw(uint8_t pin, bool value) override;
|
|
29
|
+
bool digital_read_cache(uint8_t pin) override;
|
|
30
|
+
|
|
29
31
|
void pin_mode(uint8_t pin, gpio::Flags flags) override;
|
|
30
32
|
void pin_interrupt_mode(uint8_t pin, mcp23xxx_base::MCP23XXXInterruptMode interrupt_mode) override;
|
|
31
33
|
|
|
@@ -33,6 +35,9 @@ class MCP23X08Base : public mcp23xxx_base::MCP23XXXBase {
|
|
|
33
35
|
void update_reg(uint8_t pin, bool pin_value, uint8_t reg_a) override;
|
|
34
36
|
|
|
35
37
|
uint8_t olat_{0x00};
|
|
38
|
+
|
|
39
|
+
/// State read in digital_read_hw
|
|
40
|
+
uint8_t input_mask_{0x00};
|
|
36
41
|
};
|
|
37
42
|
|
|
38
43
|
} // namespace mcp23x08_base
|
|
@@ -4,5 +4,7 @@ from esphome.components import mcp23xxx_base
|
|
|
4
4
|
AUTO_LOAD = ["mcp23xxx_base"]
|
|
5
5
|
CODEOWNERS = ["@jesserockz"]
|
|
6
6
|
|
|
7
|
+
NUM_PINS = 16
|
|
8
|
+
|
|
7
9
|
mcp23x17_base_ns = cg.esphome_ns.namespace("mcp23x17_base")
|
|
8
10
|
MCP23X17Base = mcp23x17_base_ns.class_("MCP23X17Base", mcp23xxx_base.MCP23XXXBase)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#include "mcp23x17_base.h"
|
|
2
|
+
#include "esphome/core/helpers.h"
|
|
2
3
|
#include "esphome/core/log.h"
|
|
3
4
|
|
|
4
5
|
namespace esphome {
|
|
@@ -6,19 +7,31 @@ namespace mcp23x17_base {
|
|
|
6
7
|
|
|
7
8
|
static const char *const TAG = "mcp23x17_base";
|
|
8
9
|
|
|
9
|
-
bool MCP23X17Base::
|
|
10
|
-
uint8_t
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
bool MCP23X17Base::digital_read_hw(uint8_t pin) {
|
|
11
|
+
uint8_t data;
|
|
12
|
+
if (pin < 8) {
|
|
13
|
+
if (!this->read_reg(mcp23x17_base::MCP23X17_GPIOA, &data)) {
|
|
14
|
+
this->status_set_warning(ESP_LOG_MSG_COMM_FAIL);
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
this->input_mask_ = encode_uint16(this->input_mask_ >> 8, data);
|
|
18
|
+
} else {
|
|
19
|
+
if (!this->read_reg(mcp23x17_base::MCP23X17_GPIOB, &data)) {
|
|
20
|
+
this->status_set_warning(ESP_LOG_MSG_COMM_FAIL);
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
this->input_mask_ = encode_uint16(data, this->input_mask_ & 0xFF);
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
15
26
|
}
|
|
16
27
|
|
|
17
|
-
void MCP23X17Base::
|
|
28
|
+
void MCP23X17Base::digital_write_hw(uint8_t pin, bool value) {
|
|
18
29
|
uint8_t reg_addr = pin < 8 ? mcp23x17_base::MCP23X17_OLATA : mcp23x17_base::MCP23X17_OLATB;
|
|
19
30
|
this->update_reg(pin, value, reg_addr);
|
|
20
31
|
}
|
|
21
32
|
|
|
33
|
+
bool MCP23X17Base::digital_read_cache(uint8_t pin) { return this->input_mask_ & (1 << pin); }
|
|
34
|
+
|
|
22
35
|
void MCP23X17Base::pin_mode(uint8_t pin, gpio::Flags flags) {
|
|
23
36
|
uint8_t iodir = pin < 8 ? mcp23x17_base::MCP23X17_IODIRA : mcp23x17_base::MCP23X17_IODIRB;
|
|
24
37
|
uint8_t gppu = pin < 8 ? mcp23x17_base::MCP23X17_GPPUA : mcp23x17_base::MCP23X17_GPPUB;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include "esphome/core/component.h"
|
|
4
3
|
#include "esphome/components/mcp23xxx_base/mcp23xxx_base.h"
|
|
4
|
+
#include "esphome/core/component.h"
|
|
5
5
|
#include "esphome/core/hal.h"
|
|
6
6
|
|
|
7
7
|
namespace esphome {
|
|
@@ -34,10 +34,12 @@ enum MCP23X17GPIORegisters {
|
|
|
34
34
|
MCP23X17_OLATB = 0x15,
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
class MCP23X17Base : public mcp23xxx_base::MCP23XXXBase {
|
|
37
|
+
class MCP23X17Base : public mcp23xxx_base::MCP23XXXBase<16> {
|
|
38
38
|
public:
|
|
39
|
-
bool
|
|
40
|
-
void
|
|
39
|
+
bool digital_read_hw(uint8_t pin) override;
|
|
40
|
+
void digital_write_hw(uint8_t pin, bool value) override;
|
|
41
|
+
bool digital_read_cache(uint8_t pin) override;
|
|
42
|
+
|
|
41
43
|
void pin_mode(uint8_t pin, gpio::Flags flags) override;
|
|
42
44
|
void pin_interrupt_mode(uint8_t pin, mcp23xxx_base::MCP23XXXInterruptMode interrupt_mode) override;
|
|
43
45
|
|
|
@@ -46,6 +48,9 @@ class MCP23X17Base : public mcp23xxx_base::MCP23XXXBase {
|
|
|
46
48
|
|
|
47
49
|
uint8_t olat_a_{0x00};
|
|
48
50
|
uint8_t olat_b_{0x00};
|
|
51
|
+
|
|
52
|
+
/// State read in digital_read_hw
|
|
53
|
+
uint16_t input_mask_{0x00};
|
|
49
54
|
};
|
|
50
55
|
|
|
51
56
|
} // namespace mcp23x17_base
|
|
@@ -12,8 +12,9 @@ from esphome.const import (
|
|
|
12
12
|
CONF_OUTPUT,
|
|
13
13
|
CONF_PULLUP,
|
|
14
14
|
)
|
|
15
|
-
from esphome.core import coroutine
|
|
15
|
+
from esphome.core import CORE, ID, coroutine
|
|
16
16
|
|
|
17
|
+
AUTO_LOAD = ["gpio_expander"]
|
|
17
18
|
CODEOWNERS = ["@jesserockz"]
|
|
18
19
|
|
|
19
20
|
mcp23xxx_base_ns = cg.esphome_ns.namespace("mcp23xxx_base")
|
|
@@ -36,9 +37,11 @@ MCP23XXX_CONFIG_SCHEMA = cv.Schema(
|
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
@coroutine
|
|
39
|
-
async def register_mcp23xxx(config):
|
|
40
|
-
|
|
40
|
+
async def register_mcp23xxx(config, num_pins):
|
|
41
|
+
id: ID = config[CONF_ID]
|
|
42
|
+
var = cg.new_Pvariable(id)
|
|
41
43
|
await cg.register_component(var, config)
|
|
44
|
+
CORE.data.setdefault(CONF_MCP23XXX, {})[id.id] = num_pins
|
|
42
45
|
cg.add(var.set_open_drain_ints(config[CONF_OPEN_DRAIN_INTERRUPT]))
|
|
43
46
|
return var
|
|
44
47
|
|
|
@@ -73,9 +76,12 @@ MCP23XXX_PIN_SCHEMA = pins.gpio_base_schema(
|
|
|
73
76
|
|
|
74
77
|
@pins.PIN_SCHEMA_REGISTRY.register(CONF_MCP23XXX, MCP23XXX_PIN_SCHEMA)
|
|
75
78
|
async def mcp23xxx_pin_to_code(config):
|
|
76
|
-
|
|
77
|
-
parent = await cg.get_variable(
|
|
79
|
+
parent_id: ID = config[CONF_MCP23XXX]
|
|
80
|
+
parent = await cg.get_variable(parent_id)
|
|
78
81
|
|
|
82
|
+
num_pins = cg.TemplateArguments(CORE.data[CONF_MCP23XXX][parent_id.id])
|
|
83
|
+
|
|
84
|
+
var = cg.new_Pvariable(config[CONF_ID], num_pins)
|
|
79
85
|
cg.add(var.set_parent(parent))
|
|
80
86
|
|
|
81
87
|
num = config[CONF_NUMBER]
|
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
#include "mcp23xxx_base.h"
|
|
2
|
+
#include "esphome/core/helpers.h"
|
|
2
3
|
#include "esphome/core/log.h"
|
|
3
4
|
|
|
4
5
|
namespace esphome {
|
|
5
6
|
namespace mcp23xxx_base {
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
void MCP23XXXGPIOPin::setup() {
|
|
10
|
-
pin_mode(flags_);
|
|
8
|
+
template<uint8_t N> void MCP23XXXGPIOPin<N>::setup() {
|
|
9
|
+
this->pin_mode(flags_);
|
|
11
10
|
this->parent_->pin_interrupt_mode(this->pin_, this->interrupt_mode_);
|
|
12
11
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
snprintf(buffer, sizeof(buffer), "%u via MCP23XXX", pin_);
|
|
20
|
-
return buffer;
|
|
12
|
+
template<uint8_t N> void MCP23XXXGPIOPin<N>::pin_mode(gpio::Flags flags) { this->parent_->pin_mode(this->pin_, flags); }
|
|
13
|
+
template<uint8_t N> bool MCP23XXXGPIOPin<N>::digital_read() {
|
|
14
|
+
return this->parent_->digital_read(this->pin_) != this->inverted_;
|
|
15
|
+
}
|
|
16
|
+
template<uint8_t N> void MCP23XXXGPIOPin<N>::digital_write(bool value) {
|
|
17
|
+
this->parent_->digital_write(this->pin_, value != this->inverted_);
|
|
21
18
|
}
|
|
19
|
+
template<uint8_t N> std::string MCP23XXXGPIOPin<N>::dump_summary() const {
|
|
20
|
+
return str_snprintf("%u via MCP23XXX", 15, pin_);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
template class MCP23XXXGPIOPin<8>;
|
|
24
|
+
template class MCP23XXXGPIOPin<16>;
|
|
22
25
|
|
|
23
26
|
} // namespace mcp23xxx_base
|
|
24
27
|
} // namespace esphome
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include "esphome/components/gpio_expander/cached_gpio.h"
|
|
3
4
|
#include "esphome/core/component.h"
|
|
4
5
|
#include "esphome/core/hal.h"
|
|
5
6
|
|
|
@@ -8,15 +9,15 @@ namespace mcp23xxx_base {
|
|
|
8
9
|
|
|
9
10
|
enum MCP23XXXInterruptMode : uint8_t { MCP23XXX_NO_INTERRUPT = 0, MCP23XXX_CHANGE, MCP23XXX_RISING, MCP23XXX_FALLING };
|
|
10
11
|
|
|
11
|
-
class MCP23XXXBase : public Component {
|
|
12
|
+
template<uint8_t N> class MCP23XXXBase : public Component, public gpio_expander::CachedGpioExpander<uint8_t, N> {
|
|
12
13
|
public:
|
|
13
|
-
virtual bool digital_read(uint8_t pin);
|
|
14
|
-
virtual void digital_write(uint8_t pin, bool value);
|
|
15
14
|
virtual void pin_mode(uint8_t pin, gpio::Flags flags);
|
|
16
15
|
virtual void pin_interrupt_mode(uint8_t pin, MCP23XXXInterruptMode interrupt_mode);
|
|
17
16
|
|
|
18
17
|
void set_open_drain_ints(const bool value) { this->open_drain_ints_ = value; }
|
|
19
|
-
float get_setup_priority() const override;
|
|
18
|
+
float get_setup_priority() const override { return setup_priority::IO; }
|
|
19
|
+
|
|
20
|
+
void loop() override { this->reset_pin_cache_(); }
|
|
20
21
|
|
|
21
22
|
protected:
|
|
22
23
|
// read a given register
|
|
@@ -29,7 +30,7 @@ class MCP23XXXBase : public Component {
|
|
|
29
30
|
bool open_drain_ints_;
|
|
30
31
|
};
|
|
31
32
|
|
|
32
|
-
class MCP23XXXGPIOPin : public GPIOPin {
|
|
33
|
+
template<uint8_t N> class MCP23XXXGPIOPin : public GPIOPin {
|
|
33
34
|
public:
|
|
34
35
|
void setup() override;
|
|
35
36
|
void pin_mode(gpio::Flags flags) override;
|
|
@@ -37,7 +38,7 @@ class MCP23XXXGPIOPin : public GPIOPin {
|
|
|
37
38
|
void digital_write(bool value) override;
|
|
38
39
|
std::string dump_summary() const override;
|
|
39
40
|
|
|
40
|
-
void set_parent(MCP23XXXBase *parent) { parent_ = parent; }
|
|
41
|
+
void set_parent(MCP23XXXBase<N> *parent) { parent_ = parent; }
|
|
41
42
|
void set_pin(uint8_t pin) { pin_ = pin; }
|
|
42
43
|
void set_inverted(bool inverted) { inverted_ = inverted; }
|
|
43
44
|
void set_flags(gpio::Flags flags) { flags_ = flags; }
|
|
@@ -46,7 +47,7 @@ class MCP23XXXGPIOPin : public GPIOPin {
|
|
|
46
47
|
gpio::Flags get_flags() const override { return this->flags_; }
|
|
47
48
|
|
|
48
49
|
protected:
|
|
49
|
-
MCP23XXXBase *parent_;
|
|
50
|
+
MCP23XXXBase<N> *parent_;
|
|
50
51
|
uint8_t pin_;
|
|
51
52
|
bool inverted_;
|
|
52
53
|
gpio::Flags flags_;
|
|
@@ -10,10 +10,7 @@ static const char *const TAG = "mcp3008";
|
|
|
10
10
|
|
|
11
11
|
float MCP3008::get_setup_priority() const { return setup_priority::HARDWARE; }
|
|
12
12
|
|
|
13
|
-
void MCP3008::setup() {
|
|
14
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
15
|
-
this->spi_setup();
|
|
16
|
-
}
|
|
13
|
+
void MCP3008::setup() { this->spi_setup(); }
|
|
17
14
|
|
|
18
15
|
void MCP3008::dump_config() {
|
|
19
16
|
ESP_LOGCONFIG(TAG, "MCP3008:");
|
|
@@ -8,10 +8,7 @@ static const char *const TAG = "mcp3204";
|
|
|
8
8
|
|
|
9
9
|
float MCP3204::get_setup_priority() const { return setup_priority::HARDWARE; }
|
|
10
10
|
|
|
11
|
-
void MCP3204::setup() {
|
|
12
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
13
|
-
this->spi_setup();
|
|
14
|
-
}
|
|
11
|
+
void MCP3204::setup() { this->spi_setup(); }
|
|
15
12
|
|
|
16
13
|
void MCP3204::dump_config() {
|
|
17
14
|
ESP_LOGCONFIG(TAG, "MCP3204:");
|
|
@@ -10,7 +10,6 @@ static const char *const TAG = "mcp4461";
|
|
|
10
10
|
constexpr uint8_t EEPROM_WRITE_TIMEOUT_MS = 10;
|
|
11
11
|
|
|
12
12
|
void Mcp4461Component::setup() {
|
|
13
|
-
ESP_LOGCONFIG(TAG, "Running setup for address 0x%02X", this->address_);
|
|
14
13
|
auto err = this->write(nullptr, 0);
|
|
15
14
|
if (err != i2c::ERROR_OK) {
|
|
16
15
|
this->error_code_ = MCP4461_STATUS_I2C_ERROR;
|
|
@@ -7,7 +7,6 @@ namespace mcp4725 {
|
|
|
7
7
|
static const char *const TAG = "mcp4725";
|
|
8
8
|
|
|
9
9
|
void MCP4725::setup() {
|
|
10
|
-
ESP_LOGCONFIG(TAG, "Running setup for address 0x%02X", this->address_);
|
|
11
10
|
auto err = this->write(nullptr, 0);
|
|
12
11
|
if (err != i2c::ERROR_OK) {
|
|
13
12
|
this->error_code_ = COMMUNICATION_FAILED;
|
|
@@ -9,7 +9,6 @@ namespace mcp4728 {
|
|
|
9
9
|
static const char *const TAG = "mcp4728";
|
|
10
10
|
|
|
11
11
|
void MCP4728Component::setup() {
|
|
12
|
-
ESP_LOGCONFIG(TAG, "Running setup for address 0x%02X", this->address_);
|
|
13
12
|
auto err = this->write(nullptr, 0);
|
|
14
13
|
if (err != i2c::ERROR_OK) {
|
|
15
14
|
this->mark_failed();
|
|
@@ -28,8 +28,6 @@ static const uint8_t MCP9600_REGISTER_ALERT4_LIMIT = 0x13;
|
|
|
28
28
|
static const uint8_t MCP9600_REGISTER_DEVICE_ID = 0x20;
|
|
29
29
|
|
|
30
30
|
void MCP9600Component::setup() {
|
|
31
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
32
|
-
|
|
33
31
|
uint16_t dev_id = 0;
|
|
34
32
|
this->read_byte_16(MCP9600_REGISTER_DEVICE_ID, &dev_id);
|
|
35
33
|
this->device_id_ = (uint8_t) (dev_id >> 8);
|
|
@@ -18,8 +18,6 @@ static const uint8_t MCP9808_AMBIENT_TEMP_NEGATIVE = 0x10;
|
|
|
18
18
|
static const char *const TAG = "mcp9808";
|
|
19
19
|
|
|
20
20
|
void MCP9808Sensor::setup() {
|
|
21
|
-
ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
|
|
22
|
-
|
|
23
21
|
uint16_t manu = 0;
|
|
24
22
|
if (!this->read_byte_16(MCP9808_REG_MANUF_ID, &manu) || manu != MCP9808_MANUF_ID) {
|
|
25
23
|
this->mark_failed();
|
|
@@ -93,6 +93,9 @@ async def to_code(config):
|
|
|
93
93
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
94
94
|
await cg.register_component(var, config)
|
|
95
95
|
|
|
96
|
+
if config[CONF_SERVICES]:
|
|
97
|
+
cg.add_define("USE_MDNS_EXTRA_SERVICES")
|
|
98
|
+
|
|
96
99
|
for service in config[CONF_SERVICES]:
|
|
97
100
|
txt = [
|
|
98
101
|
cg.StructInitializer(
|
|
@@ -104,7 +104,9 @@ void MDNSComponent::compile_records_() {
|
|
|
104
104
|
}
|
|
105
105
|
#endif
|
|
106
106
|
|
|
107
|
+
#ifdef USE_MDNS_EXTRA_SERVICES
|
|
107
108
|
this->services_.insert(this->services_.end(), this->services_extra_.begin(), this->services_extra_.end());
|
|
109
|
+
#endif
|
|
108
110
|
|
|
109
111
|
if (this->services_.empty()) {
|
|
110
112
|
// Publish "http" service if not using native API
|
|
@@ -35,14 +35,18 @@ class MDNSComponent : public Component {
|
|
|
35
35
|
#endif
|
|
36
36
|
float get_setup_priority() const override { return setup_priority::AFTER_CONNECTION; }
|
|
37
37
|
|
|
38
|
+
#ifdef USE_MDNS_EXTRA_SERVICES
|
|
38
39
|
void add_extra_service(MDNSService service) { services_extra_.push_back(std::move(service)); }
|
|
40
|
+
#endif
|
|
39
41
|
|
|
40
42
|
std::vector<MDNSService> get_services();
|
|
41
43
|
|
|
42
44
|
void on_shutdown() override;
|
|
43
45
|
|
|
44
46
|
protected:
|
|
47
|
+
#ifdef USE_MDNS_EXTRA_SERVICES
|
|
45
48
|
std::vector<MDNSService> services_extra_{};
|
|
49
|
+
#endif
|
|
46
50
|
std::vector<MDNSService> services_{};
|
|
47
51
|
std::string hostname_;
|
|
48
52
|
void compile_records_();
|
|
@@ -7,6 +7,8 @@ from esphome.const import (
|
|
|
7
7
|
CONF_ID,
|
|
8
8
|
CONF_ON_IDLE,
|
|
9
9
|
CONF_ON_STATE,
|
|
10
|
+
CONF_ON_TURN_OFF,
|
|
11
|
+
CONF_ON_TURN_ON,
|
|
10
12
|
CONF_TRIGGER_ID,
|
|
11
13
|
CONF_VOLUME,
|
|
12
14
|
)
|
|
@@ -58,6 +60,12 @@ VolumeDownAction = media_player_ns.class_(
|
|
|
58
60
|
VolumeSetAction = media_player_ns.class_(
|
|
59
61
|
"VolumeSetAction", automation.Action, cg.Parented.template(MediaPlayer)
|
|
60
62
|
)
|
|
63
|
+
TurnOnAction = media_player_ns.class_(
|
|
64
|
+
"TurnOnAction", automation.Action, cg.Parented.template(MediaPlayer)
|
|
65
|
+
)
|
|
66
|
+
TurnOffAction = media_player_ns.class_(
|
|
67
|
+
"TurnOffAction", automation.Action, cg.Parented.template(MediaPlayer)
|
|
68
|
+
)
|
|
61
69
|
|
|
62
70
|
CONF_ANNOUNCEMENT = "announcement"
|
|
63
71
|
CONF_ON_PLAY = "on_play"
|
|
@@ -72,12 +80,16 @@ PauseTrigger = media_player_ns.class_("PauseTrigger", automation.Trigger.templat
|
|
|
72
80
|
AnnoucementTrigger = media_player_ns.class_(
|
|
73
81
|
"AnnouncementTrigger", automation.Trigger.template()
|
|
74
82
|
)
|
|
83
|
+
OnTrigger = media_player_ns.class_("OnTrigger", automation.Trigger.template())
|
|
84
|
+
OffTrigger = media_player_ns.class_("OffTrigger", automation.Trigger.template())
|
|
75
85
|
IsIdleCondition = media_player_ns.class_("IsIdleCondition", automation.Condition)
|
|
76
86
|
IsPausedCondition = media_player_ns.class_("IsPausedCondition", automation.Condition)
|
|
77
87
|
IsPlayingCondition = media_player_ns.class_("IsPlayingCondition", automation.Condition)
|
|
78
88
|
IsAnnouncingCondition = media_player_ns.class_(
|
|
79
89
|
"IsAnnouncingCondition", automation.Condition
|
|
80
90
|
)
|
|
91
|
+
IsOnCondition = media_player_ns.class_("IsOnCondition", automation.Condition)
|
|
92
|
+
IsOffCondition = media_player_ns.class_("IsOffCondition", automation.Condition)
|
|
81
93
|
|
|
82
94
|
|
|
83
95
|
async def setup_media_player_core_(var, config):
|
|
@@ -97,6 +109,12 @@ async def setup_media_player_core_(var, config):
|
|
|
97
109
|
for conf in config.get(CONF_ON_ANNOUNCEMENT, []):
|
|
98
110
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
|
99
111
|
await automation.build_automation(trigger, [], conf)
|
|
112
|
+
for conf in config.get(CONF_ON_TURN_ON, []):
|
|
113
|
+
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
|
114
|
+
await automation.build_automation(trigger, [], conf)
|
|
115
|
+
for conf in config.get(CONF_ON_TURN_OFF, []):
|
|
116
|
+
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
|
117
|
+
await automation.build_automation(trigger, [], conf)
|
|
100
118
|
|
|
101
119
|
|
|
102
120
|
async def register_media_player(var, config):
|
|
@@ -140,6 +158,16 @@ _MEDIA_PLAYER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(
|
|
|
140
158
|
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(AnnoucementTrigger),
|
|
141
159
|
}
|
|
142
160
|
),
|
|
161
|
+
cv.Optional(CONF_ON_TURN_ON): automation.validate_automation(
|
|
162
|
+
{
|
|
163
|
+
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OnTrigger),
|
|
164
|
+
}
|
|
165
|
+
),
|
|
166
|
+
cv.Optional(CONF_ON_TURN_OFF): automation.validate_automation(
|
|
167
|
+
{
|
|
168
|
+
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(OffTrigger),
|
|
169
|
+
}
|
|
170
|
+
),
|
|
143
171
|
}
|
|
144
172
|
)
|
|
145
173
|
|
|
@@ -218,6 +246,12 @@ async def media_player_play_media_action(config, action_id, template_arg, args):
|
|
|
218
246
|
@automation.register_action(
|
|
219
247
|
"media_player.volume_down", VolumeDownAction, MEDIA_PLAYER_ACTION_SCHEMA
|
|
220
248
|
)
|
|
249
|
+
@automation.register_action(
|
|
250
|
+
"media_player.turn_on", TurnOnAction, MEDIA_PLAYER_ACTION_SCHEMA
|
|
251
|
+
)
|
|
252
|
+
@automation.register_action(
|
|
253
|
+
"media_player.turn_off", TurnOffAction, MEDIA_PLAYER_ACTION_SCHEMA
|
|
254
|
+
)
|
|
221
255
|
async def media_player_action(config, action_id, template_arg, args):
|
|
222
256
|
var = cg.new_Pvariable(action_id, template_arg)
|
|
223
257
|
await cg.register_parented(var, config[CONF_ID])
|
|
@@ -238,6 +272,12 @@ async def media_player_action(config, action_id, template_arg, args):
|
|
|
238
272
|
@automation.register_condition(
|
|
239
273
|
"media_player.is_announcing", IsAnnouncingCondition, MEDIA_PLAYER_CONDITION_SCHEMA
|
|
240
274
|
)
|
|
275
|
+
@automation.register_condition(
|
|
276
|
+
"media_player.is_on", IsOnCondition, MEDIA_PLAYER_CONDITION_SCHEMA
|
|
277
|
+
)
|
|
278
|
+
@automation.register_condition(
|
|
279
|
+
"media_player.is_off", IsOffCondition, MEDIA_PLAYER_CONDITION_SCHEMA
|
|
280
|
+
)
|
|
241
281
|
async def media_player_condition(config, action_id, template_arg, args):
|
|
242
282
|
var = cg.new_Pvariable(action_id, template_arg)
|
|
243
283
|
await cg.register_parented(var, config[CONF_ID])
|
|
@@ -28,6 +28,10 @@ template<typename... Ts>
|
|
|
28
28
|
using VolumeUpAction = MediaPlayerCommandAction<MediaPlayerCommand::MEDIA_PLAYER_COMMAND_VOLUME_UP, Ts...>;
|
|
29
29
|
template<typename... Ts>
|
|
30
30
|
using VolumeDownAction = MediaPlayerCommandAction<MediaPlayerCommand::MEDIA_PLAYER_COMMAND_VOLUME_DOWN, Ts...>;
|
|
31
|
+
template<typename... Ts>
|
|
32
|
+
using TurnOnAction = MediaPlayerCommandAction<MediaPlayerCommand::MEDIA_PLAYER_COMMAND_TURN_ON, Ts...>;
|
|
33
|
+
template<typename... Ts>
|
|
34
|
+
using TurnOffAction = MediaPlayerCommandAction<MediaPlayerCommand::MEDIA_PLAYER_COMMAND_TURN_OFF, Ts...>;
|
|
31
35
|
|
|
32
36
|
template<typename... Ts> class PlayMediaAction : public Action<Ts...>, public Parented<MediaPlayer> {
|
|
33
37
|
TEMPLATABLE_VALUE(std::string, media_url)
|
|
@@ -66,6 +70,8 @@ using IdleTrigger = MediaPlayerStateTrigger<MediaPlayerState::MEDIA_PLAYER_STATE
|
|
|
66
70
|
using PlayTrigger = MediaPlayerStateTrigger<MediaPlayerState::MEDIA_PLAYER_STATE_PLAYING>;
|
|
67
71
|
using PauseTrigger = MediaPlayerStateTrigger<MediaPlayerState::MEDIA_PLAYER_STATE_PAUSED>;
|
|
68
72
|
using AnnouncementTrigger = MediaPlayerStateTrigger<MediaPlayerState::MEDIA_PLAYER_STATE_ANNOUNCING>;
|
|
73
|
+
using OnTrigger = MediaPlayerStateTrigger<MediaPlayerState::MEDIA_PLAYER_STATE_ON>;
|
|
74
|
+
using OffTrigger = MediaPlayerStateTrigger<MediaPlayerState::MEDIA_PLAYER_STATE_OFF>;
|
|
69
75
|
|
|
70
76
|
template<typename... Ts> class IsIdleCondition : public Condition<Ts...>, public Parented<MediaPlayer> {
|
|
71
77
|
public:
|
|
@@ -87,5 +93,15 @@ template<typename... Ts> class IsAnnouncingCondition : public Condition<Ts...>,
|
|
|
87
93
|
bool check(Ts... x) override { return this->parent_->state == MediaPlayerState::MEDIA_PLAYER_STATE_ANNOUNCING; }
|
|
88
94
|
};
|
|
89
95
|
|
|
96
|
+
template<typename... Ts> class IsOnCondition : public Condition<Ts...>, public Parented<MediaPlayer> {
|
|
97
|
+
public:
|
|
98
|
+
bool check(Ts... x) override { return this->parent_->state == MediaPlayerState::MEDIA_PLAYER_STATE_ON; }
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
template<typename... Ts> class IsOffCondition : public Condition<Ts...>, public Parented<MediaPlayer> {
|
|
102
|
+
public:
|
|
103
|
+
bool check(Ts... x) override { return this->parent_->state == MediaPlayerState::MEDIA_PLAYER_STATE_OFF; }
|
|
104
|
+
};
|
|
105
|
+
|
|
90
106
|
} // namespace media_player
|
|
91
107
|
} // namespace esphome
|
|
@@ -9,6 +9,10 @@ static const char *const TAG = "media_player";
|
|
|
9
9
|
|
|
10
10
|
const char *media_player_state_to_string(MediaPlayerState state) {
|
|
11
11
|
switch (state) {
|
|
12
|
+
case MEDIA_PLAYER_STATE_ON:
|
|
13
|
+
return "ON";
|
|
14
|
+
case MEDIA_PLAYER_STATE_OFF:
|
|
15
|
+
return "OFF";
|
|
12
16
|
case MEDIA_PLAYER_STATE_IDLE:
|
|
13
17
|
return "IDLE";
|
|
14
18
|
case MEDIA_PLAYER_STATE_PLAYING:
|
|
@@ -18,6 +22,7 @@ const char *media_player_state_to_string(MediaPlayerState state) {
|
|
|
18
22
|
case MEDIA_PLAYER_STATE_ANNOUNCING:
|
|
19
23
|
return "ANNOUNCING";
|
|
20
24
|
case MEDIA_PLAYER_STATE_NONE:
|
|
25
|
+
return "NONE";
|
|
21
26
|
default:
|
|
22
27
|
return "UNKNOWN";
|
|
23
28
|
}
|
|
@@ -49,6 +54,10 @@ const char *media_player_command_to_string(MediaPlayerCommand command) {
|
|
|
49
54
|
return "REPEAT_OFF";
|
|
50
55
|
case MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST:
|
|
51
56
|
return "CLEAR_PLAYLIST";
|
|
57
|
+
case MEDIA_PLAYER_COMMAND_TURN_ON:
|
|
58
|
+
return "TURN_ON";
|
|
59
|
+
case MEDIA_PLAYER_COMMAND_TURN_OFF:
|
|
60
|
+
return "TURN_OFF";
|
|
52
61
|
default:
|
|
53
62
|
return "UNKNOWN";
|
|
54
63
|
}
|
|
@@ -110,6 +119,10 @@ MediaPlayerCall &MediaPlayerCall::set_command(const std::string &command) {
|
|
|
110
119
|
this->set_command(MEDIA_PLAYER_COMMAND_UNMUTE);
|
|
111
120
|
} else if (str_equals_case_insensitive(command, "TOGGLE")) {
|
|
112
121
|
this->set_command(MEDIA_PLAYER_COMMAND_TOGGLE);
|
|
122
|
+
} else if (str_equals_case_insensitive(command, "TURN_ON")) {
|
|
123
|
+
this->set_command(MEDIA_PLAYER_COMMAND_TURN_ON);
|
|
124
|
+
} else if (str_equals_case_insensitive(command, "TURN_OFF")) {
|
|
125
|
+
this->set_command(MEDIA_PLAYER_COMMAND_TURN_OFF);
|
|
113
126
|
} else {
|
|
114
127
|
ESP_LOGW(TAG, "'%s' - Unrecognized command %s", this->parent_->get_name().c_str(), command.c_str());
|
|
115
128
|
}
|
|
@@ -6,12 +6,40 @@
|
|
|
6
6
|
namespace esphome {
|
|
7
7
|
namespace media_player {
|
|
8
8
|
|
|
9
|
+
enum MediaPlayerEntityFeature : uint32_t {
|
|
10
|
+
PAUSE = 1 << 0,
|
|
11
|
+
SEEK = 1 << 1,
|
|
12
|
+
VOLUME_SET = 1 << 2,
|
|
13
|
+
VOLUME_MUTE = 1 << 3,
|
|
14
|
+
PREVIOUS_TRACK = 1 << 4,
|
|
15
|
+
NEXT_TRACK = 1 << 5,
|
|
16
|
+
|
|
17
|
+
TURN_ON = 1 << 7,
|
|
18
|
+
TURN_OFF = 1 << 8,
|
|
19
|
+
PLAY_MEDIA = 1 << 9,
|
|
20
|
+
VOLUME_STEP = 1 << 10,
|
|
21
|
+
SELECT_SOURCE = 1 << 11,
|
|
22
|
+
STOP = 1 << 12,
|
|
23
|
+
CLEAR_PLAYLIST = 1 << 13,
|
|
24
|
+
PLAY = 1 << 14,
|
|
25
|
+
SHUFFLE_SET = 1 << 15,
|
|
26
|
+
SELECT_SOUND_MODE = 1 << 16,
|
|
27
|
+
BROWSE_MEDIA = 1 << 17,
|
|
28
|
+
REPEAT_SET = 1 << 18,
|
|
29
|
+
GROUPING = 1 << 19,
|
|
30
|
+
MEDIA_ANNOUNCE = 1 << 20,
|
|
31
|
+
MEDIA_ENQUEUE = 1 << 21,
|
|
32
|
+
SEARCH_MEDIA = 1 << 22,
|
|
33
|
+
};
|
|
34
|
+
|
|
9
35
|
enum MediaPlayerState : uint8_t {
|
|
10
36
|
MEDIA_PLAYER_STATE_NONE = 0,
|
|
11
37
|
MEDIA_PLAYER_STATE_IDLE = 1,
|
|
12
38
|
MEDIA_PLAYER_STATE_PLAYING = 2,
|
|
13
39
|
MEDIA_PLAYER_STATE_PAUSED = 3,
|
|
14
|
-
MEDIA_PLAYER_STATE_ANNOUNCING = 4
|
|
40
|
+
MEDIA_PLAYER_STATE_ANNOUNCING = 4,
|
|
41
|
+
MEDIA_PLAYER_STATE_OFF = 5,
|
|
42
|
+
MEDIA_PLAYER_STATE_ON = 6,
|
|
15
43
|
};
|
|
16
44
|
const char *media_player_state_to_string(MediaPlayerState state);
|
|
17
45
|
|
|
@@ -28,6 +56,8 @@ enum MediaPlayerCommand : uint8_t {
|
|
|
28
56
|
MEDIA_PLAYER_COMMAND_REPEAT_ONE = 9,
|
|
29
57
|
MEDIA_PLAYER_COMMAND_REPEAT_OFF = 10,
|
|
30
58
|
MEDIA_PLAYER_COMMAND_CLEAR_PLAYLIST = 11,
|
|
59
|
+
MEDIA_PLAYER_COMMAND_TURN_ON = 12,
|
|
60
|
+
MEDIA_PLAYER_COMMAND_TURN_OFF = 13,
|
|
31
61
|
};
|
|
32
62
|
const char *media_player_command_to_string(MediaPlayerCommand command);
|
|
33
63
|
|
|
@@ -51,14 +81,31 @@ class MediaPlayerTraits {
|
|
|
51
81
|
MediaPlayerTraits() = default;
|
|
52
82
|
|
|
53
83
|
void set_supports_pause(bool supports_pause) { this->supports_pause_ = supports_pause; }
|
|
54
|
-
|
|
55
84
|
bool get_supports_pause() const { return this->supports_pause_; }
|
|
56
85
|
|
|
86
|
+
void set_supports_turn_off_on(bool supports_turn_off_on) { this->supports_turn_off_on_ = supports_turn_off_on; }
|
|
87
|
+
bool get_supports_turn_off_on() const { return this->supports_turn_off_on_; }
|
|
88
|
+
|
|
57
89
|
std::vector<MediaPlayerSupportedFormat> &get_supported_formats() { return this->supported_formats_; }
|
|
58
90
|
|
|
91
|
+
uint32_t get_feature_flags() const {
|
|
92
|
+
uint32_t flags = 0;
|
|
93
|
+
flags |= MediaPlayerEntityFeature::PLAY_MEDIA | MediaPlayerEntityFeature::BROWSE_MEDIA |
|
|
94
|
+
MediaPlayerEntityFeature::STOP | MediaPlayerEntityFeature::VOLUME_SET |
|
|
95
|
+
MediaPlayerEntityFeature::VOLUME_MUTE | MediaPlayerEntityFeature::MEDIA_ANNOUNCE;
|
|
96
|
+
if (this->get_supports_pause()) {
|
|
97
|
+
flags |= MediaPlayerEntityFeature::PAUSE | MediaPlayerEntityFeature::PLAY;
|
|
98
|
+
}
|
|
99
|
+
if (this->get_supports_turn_off_on()) {
|
|
100
|
+
flags |= MediaPlayerEntityFeature::TURN_OFF | MediaPlayerEntityFeature::TURN_ON;
|
|
101
|
+
}
|
|
102
|
+
return flags;
|
|
103
|
+
}
|
|
104
|
+
|
|
59
105
|
protected:
|
|
60
|
-
bool supports_pause_{false};
|
|
61
106
|
std::vector<MediaPlayerSupportedFormat> supported_formats_{};
|
|
107
|
+
bool supports_pause_{false};
|
|
108
|
+
bool supports_turn_off_on_{false};
|
|
62
109
|
};
|
|
63
110
|
|
|
64
111
|
class MediaPlayerCall {
|