esphome 2025.7.4__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 +112 -56
- 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/font/__init__.py +9 -1
- 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 +46 -19
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -3
- 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/lvgl/widgets/tileview.py +15 -7
- 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.4.dist-info → esphome-2025.8.0.dist-info}/METADATA +13 -14
- {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/RECORD +757 -677
- 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.4.dist-info → esphome-2025.8.0.dist-info}/WHEEL +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.7.4.dist-info → esphome-2025.8.0.dist-info}/top_level.txt +0 -0
|
@@ -10,26 +10,28 @@ from esphome.const import (
|
|
|
10
10
|
CONF_LEVEL,
|
|
11
11
|
)
|
|
12
12
|
|
|
13
|
-
CODEOWNERS = ["@
|
|
13
|
+
CODEOWNERS = ["@mrtoy-me"]
|
|
14
|
+
|
|
15
|
+
CONF_LEVEL_PERCENT = "level_percent"
|
|
14
16
|
|
|
15
17
|
tm1651_ns = cg.esphome_ns.namespace("tm1651")
|
|
16
18
|
TM1651Brightness = tm1651_ns.enum("TM1651Brightness")
|
|
17
19
|
TM1651Display = tm1651_ns.class_("TM1651Display", cg.Component)
|
|
18
20
|
|
|
19
|
-
SetLevelPercentAction = tm1651_ns.class_("SetLevelPercentAction", automation.Action)
|
|
20
|
-
SetLevelAction = tm1651_ns.class_("SetLevelAction", automation.Action)
|
|
21
21
|
SetBrightnessAction = tm1651_ns.class_("SetBrightnessAction", automation.Action)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
SetLevelAction = tm1651_ns.class_("SetLevelAction", automation.Action)
|
|
23
|
+
SetLevelPercentAction = tm1651_ns.class_("SetLevelPercentAction", automation.Action)
|
|
24
|
+
TurnOnAction = tm1651_ns.class_("TurnOnAction", automation.Action)
|
|
25
|
+
TurnOffAction = tm1651_ns.class_("TurnOffAction", automation.Action)
|
|
26
26
|
|
|
27
27
|
TM1651_BRIGHTNESS_OPTIONS = {
|
|
28
|
-
1: TM1651Brightness.
|
|
29
|
-
2: TM1651Brightness.
|
|
30
|
-
3: TM1651Brightness.
|
|
28
|
+
1: TM1651Brightness.TM1651_DARKEST,
|
|
29
|
+
2: TM1651Brightness.TM1651_TYPICAL,
|
|
30
|
+
3: TM1651Brightness.TM1651_BRIGHTEST,
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
MULTI_CONF = True
|
|
34
|
+
|
|
33
35
|
CONFIG_SCHEMA = cv.All(
|
|
34
36
|
cv.Schema(
|
|
35
37
|
{
|
|
@@ -38,26 +40,21 @@ CONFIG_SCHEMA = cv.All(
|
|
|
38
40
|
cv.Required(CONF_DIO_PIN): pins.internal_gpio_output_pin_schema,
|
|
39
41
|
}
|
|
40
42
|
),
|
|
41
|
-
cv.only_with_arduino,
|
|
42
43
|
)
|
|
43
44
|
|
|
44
|
-
validate_level_percent = cv.All(cv.int_range(min=0, max=100))
|
|
45
|
-
validate_level = cv.All(cv.int_range(min=0, max=7))
|
|
46
|
-
validate_brightness = cv.enum(TM1651_BRIGHTNESS_OPTIONS, int=True)
|
|
47
|
-
|
|
48
45
|
|
|
49
46
|
async def to_code(config):
|
|
50
47
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
51
48
|
await cg.register_component(var, config)
|
|
52
|
-
|
|
53
49
|
clk_pin = await cg.gpio_pin_expression(config[CONF_CLK_PIN])
|
|
54
50
|
cg.add(var.set_clk_pin(clk_pin))
|
|
55
51
|
dio_pin = await cg.gpio_pin_expression(config[CONF_DIO_PIN])
|
|
56
52
|
cg.add(var.set_dio_pin(dio_pin))
|
|
57
53
|
|
|
58
|
-
# https://platformio.org/lib/show/6865/TM1651
|
|
59
|
-
cg.add_library("freekode/TM1651", "1.0.1")
|
|
60
54
|
|
|
55
|
+
validate_brightness = cv.enum(TM1651_BRIGHTNESS_OPTIONS, int=True)
|
|
56
|
+
validate_level = cv.All(cv.int_range(min=0, max=7))
|
|
57
|
+
validate_level_percent = cv.All(cv.int_range(min=0, max=100))
|
|
61
58
|
|
|
62
59
|
BINARY_OUTPUT_ACTION_SCHEMA = maybe_simple_id(
|
|
63
60
|
{
|
|
@@ -66,38 +63,22 @@ BINARY_OUTPUT_ACTION_SCHEMA = maybe_simple_id(
|
|
|
66
63
|
)
|
|
67
64
|
|
|
68
65
|
|
|
69
|
-
@automation.register_action("tm1651.turn_on", TurnOnAction, BINARY_OUTPUT_ACTION_SCHEMA)
|
|
70
|
-
async def output_turn_on_to_code(config, action_id, template_arg, args):
|
|
71
|
-
var = cg.new_Pvariable(action_id, template_arg)
|
|
72
|
-
await cg.register_parented(var, config[CONF_ID])
|
|
73
|
-
return var
|
|
74
|
-
|
|
75
|
-
|
|
76
66
|
@automation.register_action(
|
|
77
|
-
"tm1651.
|
|
78
|
-
|
|
79
|
-
async def output_turn_off_to_code(config, action_id, template_arg, args):
|
|
80
|
-
var = cg.new_Pvariable(action_id, template_arg)
|
|
81
|
-
await cg.register_parented(var, config[CONF_ID])
|
|
82
|
-
return var
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
@automation.register_action(
|
|
86
|
-
"tm1651.set_level_percent",
|
|
87
|
-
SetLevelPercentAction,
|
|
67
|
+
"tm1651.set_brightness",
|
|
68
|
+
SetBrightnessAction,
|
|
88
69
|
cv.maybe_simple_value(
|
|
89
70
|
{
|
|
90
71
|
cv.GenerateID(): cv.use_id(TM1651Display),
|
|
91
|
-
cv.Required(
|
|
72
|
+
cv.Required(CONF_BRIGHTNESS): cv.templatable(validate_brightness),
|
|
92
73
|
},
|
|
93
|
-
key=
|
|
74
|
+
key=CONF_BRIGHTNESS,
|
|
94
75
|
),
|
|
95
76
|
)
|
|
96
|
-
async def
|
|
77
|
+
async def tm1651_set_brightness_to_code(config, action_id, template_arg, args):
|
|
97
78
|
var = cg.new_Pvariable(action_id, template_arg)
|
|
98
79
|
await cg.register_parented(var, config[CONF_ID])
|
|
99
|
-
template_ = await cg.templatable(config[
|
|
100
|
-
cg.add(var.
|
|
80
|
+
template_ = await cg.templatable(config[CONF_BRIGHTNESS], args, cg.uint8)
|
|
81
|
+
cg.add(var.set_brightness(template_))
|
|
101
82
|
return var
|
|
102
83
|
|
|
103
84
|
|
|
@@ -121,19 +102,35 @@ async def tm1651_set_level_to_code(config, action_id, template_arg, args):
|
|
|
121
102
|
|
|
122
103
|
|
|
123
104
|
@automation.register_action(
|
|
124
|
-
"tm1651.
|
|
125
|
-
|
|
105
|
+
"tm1651.set_level_percent",
|
|
106
|
+
SetLevelPercentAction,
|
|
126
107
|
cv.maybe_simple_value(
|
|
127
108
|
{
|
|
128
109
|
cv.GenerateID(): cv.use_id(TM1651Display),
|
|
129
|
-
cv.Required(
|
|
110
|
+
cv.Required(CONF_LEVEL_PERCENT): cv.templatable(validate_level_percent),
|
|
130
111
|
},
|
|
131
|
-
key=
|
|
112
|
+
key=CONF_LEVEL_PERCENT,
|
|
132
113
|
),
|
|
133
114
|
)
|
|
134
|
-
async def
|
|
115
|
+
async def tm1651_set_level_percent_to_code(config, action_id, template_arg, args):
|
|
116
|
+
var = cg.new_Pvariable(action_id, template_arg)
|
|
117
|
+
await cg.register_parented(var, config[CONF_ID])
|
|
118
|
+
template_ = await cg.templatable(config[CONF_LEVEL_PERCENT], args, cg.uint8)
|
|
119
|
+
cg.add(var.set_level_percent(template_))
|
|
120
|
+
return var
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
@automation.register_action(
|
|
124
|
+
"tm1651.turn_off", TurnOffAction, BINARY_OUTPUT_ACTION_SCHEMA
|
|
125
|
+
)
|
|
126
|
+
async def output_turn_off_to_code(config, action_id, template_arg, args):
|
|
127
|
+
var = cg.new_Pvariable(action_id, template_arg)
|
|
128
|
+
await cg.register_parented(var, config[CONF_ID])
|
|
129
|
+
return var
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
@automation.register_action("tm1651.turn_on", TurnOnAction, BINARY_OUTPUT_ACTION_SCHEMA)
|
|
133
|
+
async def output_turn_on_to_code(config, action_id, template_arg, args):
|
|
135
134
|
var = cg.new_Pvariable(action_id, template_arg)
|
|
136
135
|
await cg.register_parented(var, config[CONF_ID])
|
|
137
|
-
template_ = await cg.templatable(config[CONF_BRIGHTNESS], args, cg.uint8)
|
|
138
|
-
cg.add(var.set_brightness(template_))
|
|
139
136
|
return var
|
|
@@ -1,7 +1,54 @@
|
|
|
1
|
-
|
|
1
|
+
// This Esphome TM1651 component for use with Mini Battery Displays (7 LED levels)
|
|
2
|
+
// and removes the Esphome dependency on the TM1651 Arduino library.
|
|
3
|
+
// It was largely based on the work of others as set out below.
|
|
4
|
+
// @mrtoy-me July 2025
|
|
5
|
+
// ==============================================================================================
|
|
6
|
+
// Original Arduino TM1651 library:
|
|
7
|
+
// Author:Fred.Chu
|
|
8
|
+
// Date:14 August, 2014
|
|
9
|
+
// Applicable Module: Battery Display v1.0
|
|
10
|
+
// This library is free software; you can redistribute it and/or
|
|
11
|
+
// modify it under the terms of the GNU Lesser General Public
|
|
12
|
+
// License as published by the Free Software Foundation; either
|
|
13
|
+
// version 2.1 of the License, or (at your option) any later version.
|
|
14
|
+
// This library is distributed in the hope that it will be useful,
|
|
15
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU
|
|
17
|
+
// Lesser General Public License for more details.
|
|
18
|
+
// Modified record:
|
|
19
|
+
// Author: Detlef Giessmann Germany
|
|
20
|
+
// Mail: mydiyp@web.de
|
|
21
|
+
// Demo for the new 7 LED Battery-Display 2017
|
|
22
|
+
// IDE: Arduino-1.6.5
|
|
23
|
+
// Type: OPEN-SMART CX10*4RY68 4Color
|
|
24
|
+
// Date: 01.05.2017
|
|
25
|
+
// ==============================================================================================
|
|
26
|
+
// Esphome component using arduino TM1651 library:
|
|
27
|
+
// MIT License
|
|
28
|
+
// Copyright (c) 2019 freekode
|
|
29
|
+
// ==============================================================================================
|
|
30
|
+
// Library and command-line (python) program to control mini battery displays on Raspberry Pi:
|
|
31
|
+
// MIT License
|
|
32
|
+
// Copyright (c) 2020 Koen Vervloese
|
|
33
|
+
// ==============================================================================================
|
|
34
|
+
// MIT License
|
|
35
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
36
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
37
|
+
// in the Software without restriction, including without limitation the rights
|
|
38
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
39
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
40
|
+
// furnished to do so, subject to the following conditions:
|
|
41
|
+
// The above copyright notice and this permission notice shall be included in all
|
|
42
|
+
// copies or substantial portions of the Software.
|
|
43
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
44
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
45
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
46
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
47
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
48
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
49
|
+
// SOFTWARE.
|
|
2
50
|
|
|
3
51
|
#include "tm1651.h"
|
|
4
|
-
#include "esphome/core/helpers.h"
|
|
5
52
|
#include "esphome/core/log.h"
|
|
6
53
|
|
|
7
54
|
namespace esphome {
|
|
@@ -9,86 +56,205 @@ namespace tm1651 {
|
|
|
9
56
|
|
|
10
57
|
static const char *const TAG = "tm1651.display";
|
|
11
58
|
|
|
12
|
-
static const
|
|
13
|
-
static const
|
|
59
|
+
static const bool LINE_HIGH = true;
|
|
60
|
+
static const bool LINE_LOW = false;
|
|
14
61
|
|
|
15
|
-
|
|
16
|
-
static const uint8_t
|
|
17
|
-
|
|
62
|
+
// TM1651 maximum frequency is 500 kHz (duty ratio 50%) = 2 microseconds / cycle
|
|
63
|
+
static const uint8_t CLOCK_CYCLE = 8;
|
|
64
|
+
|
|
65
|
+
static const uint8_t HALF_CLOCK_CYCLE = CLOCK_CYCLE / 2;
|
|
66
|
+
static const uint8_t QUARTER_CLOCK_CYCLE = CLOCK_CYCLE / 4;
|
|
67
|
+
|
|
68
|
+
static const uint8_t ADDR_FIXED = 0x44; // fixed address mode
|
|
69
|
+
static const uint8_t ADDR_START = 0xC0; // address of the display register
|
|
70
|
+
|
|
71
|
+
static const uint8_t DISPLAY_OFF = 0x80;
|
|
72
|
+
static const uint8_t DISPLAY_ON = 0x88;
|
|
73
|
+
|
|
74
|
+
static const uint8_t MAX_DISPLAY_LEVELS = 7;
|
|
75
|
+
|
|
76
|
+
static const uint8_t PERCENT100 = 100;
|
|
77
|
+
static const uint8_t PERCENT50 = 50;
|
|
78
|
+
|
|
79
|
+
static const uint8_t TM1651_BRIGHTNESS_DARKEST = 0;
|
|
80
|
+
static const uint8_t TM1651_BRIGHTNESS_TYPICAL = 2;
|
|
81
|
+
static const uint8_t TM1651_BRIGHTNESS_BRIGHTEST = 7;
|
|
82
|
+
|
|
83
|
+
static const uint8_t TM1651_LEVEL_TAB[] = {0b00000000, 0b00000001, 0b00000011, 0b00000111,
|
|
84
|
+
0b00001111, 0b00011111, 0b00111111, 0b01111111};
|
|
85
|
+
|
|
86
|
+
// public
|
|
18
87
|
|
|
19
88
|
void TM1651Display::setup() {
|
|
20
|
-
|
|
89
|
+
this->clk_pin_->setup();
|
|
90
|
+
this->clk_pin_->pin_mode(gpio::FLAG_OUTPUT);
|
|
91
|
+
|
|
92
|
+
this->dio_pin_->setup();
|
|
93
|
+
this->dio_pin_->pin_mode(gpio::FLAG_OUTPUT);
|
|
21
94
|
|
|
22
|
-
|
|
23
|
-
uint8_t dio = dio_pin_->get_pin();
|
|
95
|
+
this->brightness_ = TM1651_BRIGHTNESS_TYPICAL;
|
|
24
96
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
97
|
+
// clear display
|
|
98
|
+
this->display_level_();
|
|
99
|
+
this->update_brightness_(DISPLAY_ON);
|
|
28
100
|
}
|
|
29
101
|
|
|
30
102
|
void TM1651Display::dump_config() {
|
|
31
|
-
ESP_LOGCONFIG(TAG, "
|
|
103
|
+
ESP_LOGCONFIG(TAG, "Battery Display");
|
|
32
104
|
LOG_PIN(" CLK: ", clk_pin_);
|
|
33
105
|
LOG_PIN(" DIO: ", dio_pin_);
|
|
34
106
|
}
|
|
35
107
|
|
|
36
|
-
void TM1651Display::
|
|
37
|
-
this->
|
|
38
|
-
this->
|
|
108
|
+
void TM1651Display::set_brightness(uint8_t new_brightness) {
|
|
109
|
+
this->brightness_ = this->remap_brightness_(new_brightness);
|
|
110
|
+
if (this->display_on_) {
|
|
111
|
+
this->update_brightness_(DISPLAY_ON);
|
|
112
|
+
}
|
|
39
113
|
}
|
|
40
114
|
|
|
41
115
|
void TM1651Display::set_level(uint8_t new_level) {
|
|
116
|
+
if (new_level > MAX_DISPLAY_LEVELS)
|
|
117
|
+
new_level = MAX_DISPLAY_LEVELS;
|
|
42
118
|
this->level_ = new_level;
|
|
43
|
-
this->
|
|
119
|
+
if (this->display_on_) {
|
|
120
|
+
this->display_level_();
|
|
121
|
+
}
|
|
44
122
|
}
|
|
45
123
|
|
|
46
|
-
void TM1651Display::
|
|
47
|
-
this->
|
|
48
|
-
this->
|
|
124
|
+
void TM1651Display::set_level_percent(uint8_t percentage) {
|
|
125
|
+
this->level_ = this->calculate_level_(percentage);
|
|
126
|
+
if (this->display_on_) {
|
|
127
|
+
this->display_level_();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
void TM1651Display::turn_off() {
|
|
132
|
+
this->display_on_ = false;
|
|
133
|
+
this->update_brightness_(DISPLAY_OFF);
|
|
49
134
|
}
|
|
50
135
|
|
|
51
136
|
void TM1651Display::turn_on() {
|
|
52
|
-
this->
|
|
53
|
-
|
|
137
|
+
this->display_on_ = true;
|
|
138
|
+
// display level as it could have been changed when display turned off
|
|
139
|
+
this->display_level_();
|
|
140
|
+
this->update_brightness_(DISPLAY_ON);
|
|
54
141
|
}
|
|
55
142
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
143
|
+
// protected
|
|
144
|
+
|
|
145
|
+
uint8_t TM1651Display::calculate_level_(uint8_t percentage) {
|
|
146
|
+
if (percentage > PERCENT100)
|
|
147
|
+
percentage = PERCENT100;
|
|
148
|
+
// scale 0-100% to 0-7 display levels
|
|
149
|
+
// use integer arithmetic with rounding
|
|
150
|
+
uint16_t initial_scaling = (percentage * MAX_DISPLAY_LEVELS) + PERCENT50;
|
|
151
|
+
return (uint8_t) (initial_scaling / PERCENT100);
|
|
59
152
|
}
|
|
60
153
|
|
|
61
|
-
void TM1651Display::
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
154
|
+
void TM1651Display::display_level_() {
|
|
155
|
+
this->start_();
|
|
156
|
+
this->write_byte_(ADDR_FIXED);
|
|
157
|
+
this->stop_();
|
|
158
|
+
|
|
159
|
+
this->start_();
|
|
160
|
+
this->write_byte_(ADDR_START);
|
|
161
|
+
this->write_byte_(TM1651_LEVEL_TAB[this->level_]);
|
|
162
|
+
this->stop_();
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
uint8_t TM1651Display::remap_brightness_(uint8_t new_brightness) {
|
|
166
|
+
if (new_brightness <= 1)
|
|
167
|
+
return TM1651_BRIGHTNESS_DARKEST;
|
|
168
|
+
if (new_brightness == 2)
|
|
169
|
+
return TM1651_BRIGHTNESS_TYPICAL;
|
|
65
170
|
|
|
66
|
-
|
|
67
|
-
|
|
171
|
+
// new_brightness >= 3
|
|
172
|
+
return TM1651_BRIGHTNESS_BRIGHTEST;
|
|
68
173
|
}
|
|
69
174
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
175
|
+
void TM1651Display::update_brightness_(uint8_t on_off_control) {
|
|
176
|
+
this->start_();
|
|
177
|
+
this->write_byte_(on_off_control | this->brightness_);
|
|
178
|
+
this->stop_();
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// low level functions
|
|
182
|
+
|
|
183
|
+
bool TM1651Display::write_byte_(uint8_t data) {
|
|
184
|
+
// data bit written to DIO when CLK is low
|
|
185
|
+
for (uint8_t i = 0; i < 8; i++) {
|
|
186
|
+
this->half_cycle_clock_low_((bool) (data & 0x01));
|
|
187
|
+
this->half_cycle_clock_high_();
|
|
188
|
+
data >>= 1;
|
|
73
189
|
}
|
|
74
190
|
|
|
75
|
-
|
|
76
|
-
|
|
191
|
+
// start 9th cycle, setting DIO high and look for ack
|
|
192
|
+
this->half_cycle_clock_low_(LINE_HIGH);
|
|
193
|
+
return this->half_cycle_clock_high_ack_();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
void TM1651Display::half_cycle_clock_low_(bool data_bit) {
|
|
197
|
+
// first half cycle, clock low and write data bit
|
|
198
|
+
this->clk_pin_->digital_write(LINE_LOW);
|
|
199
|
+
delayMicroseconds(QUARTER_CLOCK_CYCLE);
|
|
200
|
+
|
|
201
|
+
this->dio_pin_->digital_write(data_bit);
|
|
202
|
+
delayMicroseconds(QUARTER_CLOCK_CYCLE);
|
|
77
203
|
}
|
|
78
204
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
205
|
+
void TM1651Display::half_cycle_clock_high_() {
|
|
206
|
+
// second half cycle, clock high
|
|
207
|
+
this->clk_pin_->digital_write(LINE_HIGH);
|
|
208
|
+
delayMicroseconds(HALF_CLOCK_CYCLE);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
bool TM1651Display::half_cycle_clock_high_ack_() {
|
|
212
|
+
// second half cycle, clock high and check for ack
|
|
213
|
+
this->clk_pin_->digital_write(LINE_HIGH);
|
|
214
|
+
delayMicroseconds(QUARTER_CLOCK_CYCLE);
|
|
215
|
+
|
|
216
|
+
this->dio_pin_->pin_mode(gpio::FLAG_INPUT);
|
|
217
|
+
// valid ack on DIO is low
|
|
218
|
+
bool ack = (!this->dio_pin_->digital_read());
|
|
219
|
+
|
|
220
|
+
this->dio_pin_->pin_mode(gpio::FLAG_OUTPUT);
|
|
221
|
+
|
|
222
|
+
// ack should be set DIO low by now
|
|
223
|
+
// if its not, set DIO low before the next cycle
|
|
224
|
+
if (!ack) {
|
|
225
|
+
this->dio_pin_->digital_write(LINE_LOW);
|
|
86
226
|
}
|
|
227
|
+
delayMicroseconds(QUARTER_CLOCK_CYCLE);
|
|
87
228
|
|
|
88
|
-
|
|
229
|
+
// begin next cycle
|
|
230
|
+
this->clk_pin_->digital_write(LINE_LOW);
|
|
231
|
+
|
|
232
|
+
return ack;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
void TM1651Display::start_() {
|
|
236
|
+
// start data transmission
|
|
237
|
+
this->delineate_transmission_(LINE_HIGH);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
void TM1651Display::stop_() {
|
|
241
|
+
// stop data transmission
|
|
242
|
+
this->delineate_transmission_(LINE_LOW);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
void TM1651Display::delineate_transmission_(bool dio_state) {
|
|
246
|
+
// delineate data transmission
|
|
247
|
+
// DIO changes its value while CLK is high
|
|
248
|
+
|
|
249
|
+
this->dio_pin_->digital_write(dio_state);
|
|
250
|
+
delayMicroseconds(HALF_CLOCK_CYCLE);
|
|
251
|
+
|
|
252
|
+
this->clk_pin_->digital_write(LINE_HIGH);
|
|
253
|
+
delayMicroseconds(QUARTER_CLOCK_CYCLE);
|
|
254
|
+
|
|
255
|
+
this->dio_pin_->digital_write(!dio_state);
|
|
256
|
+
delayMicroseconds(QUARTER_CLOCK_CYCLE);
|
|
89
257
|
}
|
|
90
258
|
|
|
91
259
|
} // namespace tm1651
|
|
92
260
|
} // namespace esphome
|
|
93
|
-
|
|
94
|
-
#endif // USE_ARDUINO
|
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
|
|
5
|
-
#include <memory>
|
|
6
|
-
|
|
3
|
+
#include "esphome/core/automation.h"
|
|
7
4
|
#include "esphome/core/component.h"
|
|
8
5
|
#include "esphome/core/hal.h"
|
|
9
|
-
#include "esphome/core/automation.h"
|
|
10
|
-
|
|
11
|
-
#include <TM1651.h>
|
|
12
6
|
|
|
13
7
|
namespace esphome {
|
|
14
8
|
namespace tm1651 {
|
|
15
9
|
|
|
16
10
|
enum TM1651Brightness : uint8_t {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
TM1651_DARKEST = 1,
|
|
12
|
+
TM1651_TYPICAL = 2,
|
|
13
|
+
TM1651_BRIGHTEST = 3,
|
|
20
14
|
};
|
|
21
15
|
|
|
22
16
|
class TM1651Display : public Component {
|
|
@@ -27,36 +21,49 @@ class TM1651Display : public Component {
|
|
|
27
21
|
void setup() override;
|
|
28
22
|
void dump_config() override;
|
|
29
23
|
|
|
30
|
-
void set_level_percent(uint8_t new_level);
|
|
31
|
-
void set_level(uint8_t new_level);
|
|
32
24
|
void set_brightness(uint8_t new_brightness);
|
|
33
25
|
void set_brightness(TM1651Brightness new_brightness) { this->set_brightness(static_cast<uint8_t>(new_brightness)); }
|
|
34
26
|
|
|
35
|
-
void
|
|
27
|
+
void set_level(uint8_t new_level);
|
|
28
|
+
void set_level_percent(uint8_t percentage);
|
|
29
|
+
|
|
36
30
|
void turn_off();
|
|
31
|
+
void turn_on();
|
|
37
32
|
|
|
38
33
|
protected:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
34
|
+
uint8_t calculate_level_(uint8_t percentage);
|
|
35
|
+
void display_level_();
|
|
36
|
+
|
|
37
|
+
uint8_t remap_brightness_(uint8_t new_brightness);
|
|
38
|
+
void update_brightness_(uint8_t on_off_control);
|
|
39
|
+
|
|
40
|
+
// low level functions
|
|
41
|
+
bool write_byte_(uint8_t data);
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
void half_cycle_clock_low_(bool data_bit);
|
|
44
|
+
void half_cycle_clock_high_();
|
|
45
|
+
bool half_cycle_clock_high_ack_();
|
|
46
46
|
|
|
47
|
-
void
|
|
47
|
+
void start_();
|
|
48
|
+
void stop_();
|
|
49
|
+
|
|
50
|
+
void delineate_transmission_(bool dio_state);
|
|
51
|
+
|
|
52
|
+
InternalGPIOPin *clk_pin_;
|
|
53
|
+
InternalGPIOPin *dio_pin_;
|
|
48
54
|
|
|
49
|
-
|
|
50
|
-
uint8_t
|
|
55
|
+
bool display_on_{true};
|
|
56
|
+
uint8_t brightness_{};
|
|
57
|
+
uint8_t level_{0};
|
|
51
58
|
};
|
|
52
59
|
|
|
53
|
-
template<typename... Ts> class
|
|
60
|
+
template<typename... Ts> class SetBrightnessAction : public Action<Ts...>, public Parented<TM1651Display> {
|
|
54
61
|
public:
|
|
55
|
-
TEMPLATABLE_VALUE(uint8_t,
|
|
62
|
+
TEMPLATABLE_VALUE(uint8_t, brightness)
|
|
56
63
|
|
|
57
64
|
void play(Ts... x) override {
|
|
58
|
-
auto
|
|
59
|
-
this->parent_->
|
|
65
|
+
auto brightness = this->brightness_.value(x...);
|
|
66
|
+
this->parent_->set_brightness(brightness);
|
|
60
67
|
}
|
|
61
68
|
};
|
|
62
69
|
|
|
@@ -70,13 +77,13 @@ template<typename... Ts> class SetLevelAction : public Action<Ts...>, public Par
|
|
|
70
77
|
}
|
|
71
78
|
};
|
|
72
79
|
|
|
73
|
-
template<typename... Ts> class
|
|
80
|
+
template<typename... Ts> class SetLevelPercentAction : public Action<Ts...>, public Parented<TM1651Display> {
|
|
74
81
|
public:
|
|
75
|
-
TEMPLATABLE_VALUE(uint8_t,
|
|
82
|
+
TEMPLATABLE_VALUE(uint8_t, level_percent)
|
|
76
83
|
|
|
77
84
|
void play(Ts... x) override {
|
|
78
|
-
auto
|
|
79
|
-
this->parent_->
|
|
85
|
+
auto level_percent = this->level_percent_.value(x...);
|
|
86
|
+
this->parent_->set_level_percent(level_percent);
|
|
80
87
|
}
|
|
81
88
|
};
|
|
82
89
|
|
|
@@ -92,5 +99,3 @@ template<typename... Ts> class TurnOffAction : public Action<Ts...>, public Pare
|
|
|
92
99
|
|
|
93
100
|
} // namespace tm1651
|
|
94
101
|
} // namespace esphome
|
|
95
|
-
|
|
96
|
-
#endif // USE_ARDUINO
|
|
@@ -15,7 +15,6 @@ static const uint8_t TSL2561_REGISTER_DATA_0 = 0x0C;
|
|
|
15
15
|
static const uint8_t TSL2561_REGISTER_DATA_1 = 0x0E;
|
|
16
16
|
|
|
17
17
|
void TSL2561Sensor::setup() {
|
|
18
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
19
18
|
uint8_t id;
|
|
20
19
|
if (!this->tsl2561_read_byte(TSL2561_REGISTER_ID, &id)) {
|
|
21
20
|
this->mark_failed();
|
|
@@ -43,7 +43,6 @@ void TSL2591Component::disable_if_power_saving_() {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
void TSL2591Component::setup() {
|
|
46
|
-
ESP_LOGCONFIG(TAG, "Running setup for address 0x%02X", this->address_);
|
|
47
46
|
switch (this->component_gain_) {
|
|
48
47
|
case TSL2591_CGAIN_LOW:
|
|
49
48
|
this->gain_ = TSL2591_GAIN_LOW;
|
|
@@ -47,8 +47,6 @@ struct TT21100TouchReport {
|
|
|
47
47
|
float TT21100Touchscreen::get_setup_priority() const { return setup_priority::HARDWARE - 1.0f; }
|
|
48
48
|
|
|
49
49
|
void TT21100Touchscreen::setup() {
|
|
50
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
51
|
-
|
|
52
50
|
// Register interrupt pin
|
|
53
51
|
if (this->interrupt_pin_ != nullptr) {
|
|
54
52
|
this->interrupt_pin_->pin_mode(gpio::FLAG_INPUT | gpio::FLAG_PULLUP);
|
|
@@ -46,16 +46,15 @@ TuyaClimate = tuya_ns.class_("TuyaClimate", climate.Climate, cg.Component)
|
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
def validate_temperature_multipliers(value):
|
|
49
|
-
if CONF_TEMPERATURE_MULTIPLIER in value
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
)
|
|
49
|
+
if CONF_TEMPERATURE_MULTIPLIER in value and (
|
|
50
|
+
CONF_CURRENT_TEMPERATURE_MULTIPLIER in value
|
|
51
|
+
or CONF_TARGET_TEMPERATURE_MULTIPLIER in value
|
|
52
|
+
):
|
|
53
|
+
raise cv.Invalid(
|
|
54
|
+
f"Cannot have {CONF_TEMPERATURE_MULTIPLIER} at the same time as "
|
|
55
|
+
f"{CONF_CURRENT_TEMPERATURE_MULTIPLIER} and "
|
|
56
|
+
f"{CONF_TARGET_TEMPERATURE_MULTIPLIER}"
|
|
57
|
+
)
|
|
59
58
|
if (
|
|
60
59
|
CONF_CURRENT_TEMPERATURE_MULTIPLIER in value
|
|
61
60
|
and CONF_TARGET_TEMPERATURE_MULTIPLIER not in value
|