esphome 2025.5.1__py3-none-any.whl → 2025.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +20 -14
- esphome/components/a4988/a4988.cpp +1 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
- esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
- esphome/components/adc/adc_sensor_esp32.cpp +5 -3
- esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
- esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
- esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
- esphome/components/adc128s102/adc128s102.cpp +1 -1
- esphome/components/ade7880/ade7880.cpp +28 -17
- esphome/components/ade7953_base/ade7953_base.cpp +12 -9
- esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
- esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
- esphome/components/ads1115/ads1115.cpp +3 -5
- esphome/components/ads1118/ads1118.cpp +2 -1
- esphome/components/ags10/ags10.cpp +3 -2
- esphome/components/aht10/aht10.cpp +27 -29
- esphome/components/aic3204/aic3204.cpp +2 -2
- esphome/components/alarm_control_panel/__init__.py +1 -0
- esphome/components/am2315c/am2315c.cpp +2 -2
- esphome/components/am2320/am2320.cpp +2 -2
- esphome/components/am43/am43_base.h +1 -1
- esphome/components/am43/cover/am43_cover.cpp +4 -2
- esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
- esphome/components/apds9306/apds9306.cpp +8 -5
- esphome/components/apds9960/apds9960.cpp +2 -2
- esphome/components/api/__init__.py +5 -0
- esphome/components/api/api_connection.cpp +753 -379
- esphome/components/api/api_connection.h +341 -283
- esphome/components/api/api_frame_helper.cpp +349 -344
- esphome/components/api/api_frame_helper.h +121 -94
- esphome/components/api/api_pb2.cpp +5 -0
- esphome/components/api/api_pb2.h +703 -227
- esphome/components/api/api_pb2_service.cpp +12 -688
- esphome/components/api/api_pb2_service.h +53 -207
- esphome/components/api/api_server.cpp +71 -29
- esphome/components/api/api_server.h +9 -0
- esphome/components/api/client.py +5 -4
- esphome/components/api/homeassistant_service.h +1 -1
- esphome/components/api/list_entities.cpp +1 -1
- esphome/components/api/proto.cpp +1 -0
- esphome/components/api/proto.h +5 -4
- esphome/components/api/subscribe_state.cpp +8 -16
- esphome/components/as3935/as3935.cpp +3 -3
- esphome/components/as5600/as5600.cpp +9 -7
- esphome/components/as7341/as7341.cpp +7 -5
- esphome/components/at581x/at581x.cpp +13 -10
- esphome/components/atm90e26/atm90e26.cpp +2 -2
- esphome/components/atm90e32/atm90e32.cpp +3 -3
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
- esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
- esphome/components/bedjet/bedjet_hub.cpp +6 -4
- esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
- esphome/components/bh1750/bh1750.cpp +2 -2
- esphome/components/binary_sensor/__init__.py +1 -0
- esphome/components/binary_sensor/automation.cpp +1 -2
- esphome/components/bl0906/bl0906.cpp +1 -1
- esphome/components/bl0942/bl0942.cpp +11 -8
- esphome/components/bl0942/sensor.py +1 -1
- esphome/components/ble_client/__init__.py +5 -1
- esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
- esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
- esphome/components/bluetooth_proxy/__init__.py +5 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
- esphome/components/bme280_base/bme280_base.cpp +5 -6
- esphome/components/bme680/bme680.cpp +3 -3
- esphome/components/bme680/sensor.py +2 -2
- esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
- esphome/components/bme680_bsec/sensor.py +7 -3
- esphome/components/bme68x_bsec2/__init__.py +6 -5
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
- esphome/components/bme68x_bsec2/sensor.py +4 -4
- esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
- esphome/components/bmi160/bmi160.cpp +11 -11
- esphome/components/bmp085/bmp085.cpp +2 -2
- esphome/components/bmp280_base/bmp280_base.cpp +3 -3
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
- esphome/components/bmp581/bmp581.cpp +33 -27
- esphome/components/bp1658cj/bp1658cj.cpp +5 -3
- esphome/components/bp5758d/bp5758d.cpp +1 -1
- esphome/components/button/__init__.py +1 -0
- esphome/components/canbus/canbus.cpp +1 -1
- esphome/components/cap1188/cap1188.cpp +6 -4
- esphome/components/captive_portal/captive_portal.cpp +1 -1
- esphome/components/ccs811/ccs811.cpp +3 -2
- esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
- esphome/components/ch422g/ch422g.cpp +2 -2
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
- esphome/components/climate/__init__.py +1 -0
- esphome/components/climate/climate.cpp +12 -7
- esphome/components/climate/climate.h +1 -1
- esphome/components/climate_ir/climate_ir.cpp +7 -4
- esphome/components/cm1106/__init__.py +1 -0
- esphome/components/cm1106/cm1106.cpp +112 -0
- esphome/components/cm1106/cm1106.h +40 -0
- esphome/components/cm1106/sensor.py +72 -0
- esphome/components/const/__init__.py +1 -0
- esphome/components/cover/__init__.py +1 -0
- esphome/components/cs5460a/cs5460a.cpp +16 -11
- esphome/components/cse7761/cse7761.cpp +2 -2
- esphome/components/cse7766/cse7766.cpp +0 -5
- esphome/components/cse7766/cse7766.h +5 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
- esphome/components/current_based/current_based_cover.cpp +4 -2
- esphome/components/dac7678/dac7678_output.cpp +4 -4
- esphome/components/dallas_temp/dallas_temp.cpp +2 -3
- esphome/components/daly_bms/daly_bms.cpp +2 -1
- esphome/components/dashboard_import/__init__.py +1 -2
- esphome/components/datetime/__init__.py +3 -1
- esphome/components/datetime/date_entity.cpp +5 -5
- esphome/components/datetime/datetime_base.h +0 -5
- esphome/components/datetime/datetime_entity.cpp +8 -8
- esphome/components/datetime/time_entity.cpp +4 -4
- esphome/components/debug/debug_component.cpp +1 -5
- esphome/components/debug/debug_component.h +1 -1
- esphome/components/debug/debug_esp32.cpp +4 -2
- esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
- esphome/components/demo/__init__.py +206 -0
- esphome/components/demo/demo_alarm_control_panel.h +65 -0
- esphome/components/demo/demo_button.h +15 -0
- esphome/components/demo/demo_date.h +34 -0
- esphome/components/demo/demo_datetime.h +40 -0
- esphome/components/demo/demo_lock.h +17 -0
- esphome/components/demo/demo_select.h +15 -0
- esphome/components/demo/demo_text.h +18 -0
- esphome/components/demo/demo_time.h +34 -0
- esphome/components/demo/demo_valve.h +54 -0
- esphome/components/dfrobot_sen0395/commands.cpp +3 -3
- esphome/components/dht/dht.cpp +29 -50
- esphome/components/dht12/dht12.cpp +2 -2
- esphome/components/display/display.h +5 -3
- esphome/components/dps310/dps310.cpp +7 -5
- esphome/components/ds1307/ds1307.cpp +2 -2
- esphome/components/dsmr/dsmr.cpp +5 -3
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
- esphome/components/duty_time/duty_time_sensor.cpp +5 -3
- esphome/components/ee895/ee895.cpp +3 -3
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
- esphome/components/emc2101/emc2101.cpp +11 -9
- esphome/components/ens160_base/ens160_base.cpp +2 -2
- esphome/components/ens210/ens210.cpp +2 -2
- esphome/components/es7210/es7210.cpp +6 -4
- esphome/components/es7243e/es7243e.cpp +1 -1
- esphome/components/es8156/es8156.cpp +1 -1
- esphome/components/es8311/es8311.cpp +8 -6
- esphome/components/es8388/__init__.py +0 -0
- esphome/components/es8388/audio_dac.py +26 -0
- esphome/components/es8388/es8388.cpp +289 -0
- esphome/components/es8388/es8388.h +81 -0
- esphome/components/es8388/es8388_const.h +83 -0
- esphome/components/es8388/select/__init__.py +47 -0
- esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
- esphome/components/es8388/select/adc_input_mic_select.h +15 -0
- esphome/components/es8388/select/dac_output_select.cpp +12 -0
- esphome/components/es8388/select/dac_output_select.h +15 -0
- esphome/components/esp32/__init__.py +118 -23
- esphome/components/esp32/boards.py +208 -125
- esphome/components/esp32/const.py +6 -0
- esphome/components/esp32/gpio.py +14 -1
- esphome/components/esp32/gpio_esp32_c5.py +45 -0
- esphome/components/esp32/gpio_esp32_p4.py +43 -0
- esphome/components/esp32/preferences.cpp +7 -7
- esphome/components/esp32_ble/__init__.py +115 -0
- esphome/components/esp32_ble/ble.cpp +101 -54
- esphome/components/esp32_ble/ble.h +24 -5
- esphome/components/esp32_ble/ble_event.h +172 -32
- esphome/components/esp32_ble/ble_scan_result.h +24 -0
- esphome/components/esp32_ble/ble_uuid.h +1 -1
- esphome/components/esp32_ble/queue.h +53 -27
- esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
- esphome/components/esp32_ble_server/__init__.py +4 -1
- esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
- esphome/components/esp32_ble_server/ble_server.h +0 -1
- esphome/components/esp32_ble_tracker/__init__.py +7 -2
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
- esphome/components/esp32_camera/esp32_camera.cpp +35 -27
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
- esphome/components/esp32_dac/esp32_dac.cpp +2 -2
- esphome/components/esp32_improv/__init__.py +5 -1
- esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
- esphome/components/esp32_rmt_led_strip/light.py +5 -1
- esphome/components/esp32_touch/esp32_touch.cpp +12 -8
- esphome/components/esp8266/gpio.cpp +10 -1
- esphome/components/esp8266/preferences.cpp +6 -6
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
- esphome/components/esp_ldo/__init__.py +91 -0
- esphome/components/esp_ldo/esp_ldo.cpp +43 -0
- esphome/components/esp_ldo/esp_ldo.h +43 -0
- esphome/components/esphome/ota/ota_esphome.cpp +15 -8
- esphome/components/ethernet/ethernet_component.cpp +38 -26
- esphome/components/ethernet/ethernet_component.h +1 -1
- esphome/components/event/__init__.py +1 -0
- esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
- esphome/components/ezo/ezo.cpp +1 -1
- esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
- esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
- esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
- esphome/components/fan/__init__.py +1 -0
- esphome/components/fan/fan.cpp +30 -19
- esphome/components/fastled_base/fastled_light.cpp +7 -5
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
- esphome/components/fs3000/fs3000.cpp +1 -1
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
- esphome/components/ft63x6/ft63x6.cpp +5 -3
- esphome/components/gcja5/gcja5.cpp +0 -12
- esphome/components/gcja5/gcja5.h +8 -3
- esphome/components/gdk101/gdk101.cpp +2 -2
- esphome/components/globals/globals_component.h +13 -10
- esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
- esphome/components/gp8403/gp8403.cpp +4 -2
- esphome/components/gp8403/output/gp8403_output.cpp +4 -2
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
- esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
- esphome/components/gpio/switch/gpio_switch.cpp +1 -1
- esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
- esphome/components/growatt_solar/growatt_solar.cpp +6 -3
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
- esphome/components/haier/haier_base.cpp +2 -2
- esphome/components/haier/hon_climate.cpp +13 -6
- esphome/components/havells_solar/havells_solar.cpp +5 -2
- esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
- esphome/components/hdc1080/hdc1080.cpp +2 -2
- esphome/components/he60r/he60r.cpp +4 -2
- esphome/components/hlw8012/hlw8012.cpp +6 -4
- esphome/components/hm3301/hm3301.cpp +2 -2
- esphome/components/hmc5883l/hmc5883l.cpp +2 -2
- esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
- esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
- esphome/components/honeywellabp/honeywellabp.cpp +4 -2
- esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
- esphome/components/hte501/hte501.cpp +3 -2
- esphome/components/http_request/__init__.py +2 -2
- esphome/components/http_request/http_request.cpp +7 -5
- esphome/components/http_request/http_request_idf.cpp +4 -2
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/htu21d/htu21d.cpp +2 -2
- esphome/components/htu31d/htu31d.cpp +2 -2
- esphome/components/hx711/hx711.cpp +2 -2
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
- esphome/components/hyt271/hyt271.cpp +2 -2
- esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
- esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
- esphome/components/i2s_audio/__init__.py +2 -0
- esphome/components/i2s_audio/i2s_audio.cpp +3 -4
- esphome/components/i2s_audio/i2s_audio.h +1 -1
- esphome/components/i2s_audio/media_player/__init__.py +1 -1
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +85 -77
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +6 -0
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
- esphome/components/iaqcore/iaqcore.cpp +3 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
- esphome/components/ili9xxx/ili9xxx_display.h +1 -1
- esphome/components/image/image.cpp +1 -0
- esphome/components/ina219/ina219.cpp +2 -2
- esphome/components/ina226/ina226.cpp +8 -5
- esphome/components/ina260/ina260.cpp +1 -1
- esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
- esphome/components/ina3221/ina3221.cpp +2 -2
- esphome/components/inkplate6/display.py +12 -2
- esphome/components/inkplate6/inkplate.cpp +13 -9
- esphome/components/inkplate6/inkplate.h +7 -6
- esphome/components/integration/integration_sensor.cpp +1 -1
- esphome/components/internal_temperature/internal_temperature.cpp +4 -4
- esphome/components/json/json_util.cpp +4 -5
- esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
- esphome/components/key_collector/key_collector.cpp +4 -2
- esphome/components/kmeteriso/kmeteriso.cpp +4 -4
- esphome/components/kuntze/kuntze.cpp +4 -2
- esphome/components/lc709203f/__init__.py +1 -0
- esphome/components/lc709203f/lc709203f.cpp +299 -0
- esphome/components/lc709203f/lc709203f.h +55 -0
- esphome/components/lc709203f/sensor.py +93 -0
- esphome/components/lcd_base/lcd_display.cpp +2 -2
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
- esphome/components/lcd_menu/lcd_menu.cpp +6 -4
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
- esphome/components/ld2410/ld2410.cpp +6 -7
- esphome/components/ld2420/ld2420.cpp +9 -7
- esphome/components/ld2450/ld2450.cpp +6 -4
- esphome/components/ld2450/sensor.py +2 -2
- esphome/components/ledc/ledc_output.cpp +32 -28
- esphome/components/libretiny/const.py +1 -1
- esphome/components/libretiny/preferences.cpp +6 -7
- esphome/components/light/__init__.py +2 -1
- esphome/components/light/esp_hsv_color.h +1 -1
- esphome/components/light/light_state.cpp +9 -5
- esphome/components/light/light_state.h +15 -15
- esphome/components/light/light_transformer.h +1 -1
- esphome/components/lightwaverf/LwTx.cpp +1 -1
- esphome/components/lightwaverf/lightwaverf.cpp +1 -1
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
- esphome/components/lock/__init__.py +1 -0
- esphome/components/lock/lock.h +1 -1
- esphome/components/logger/__init__.py +6 -0
- esphome/components/logger/logger.cpp +11 -20
- esphome/components/logger/logger.h +5 -6
- esphome/components/logger/logger_esp32.cpp +5 -5
- esphome/components/ltr390/ltr390.cpp +8 -5
- esphome/components/ltr501/ltr501.cpp +19 -14
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
- esphome/components/lvgl/__init__.py +2 -2
- esphome/components/lvgl/automation.py +5 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/lv_validation.py +1 -3
- esphome/components/lvgl/lvcode.py +7 -8
- esphome/components/lvgl/lvgl_esphome.cpp +26 -10
- esphome/components/lvgl/schemas.py +22 -23
- esphome/components/lvgl/trigger.py +8 -3
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/canvas.py +9 -3
- esphome/components/lvgl/widgets/line.py +2 -1
- esphome/components/lvgl/widgets/tabview.py +7 -0
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
- esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
- esphome/components/max17043/max17043.cpp +2 -2
- esphome/components/max31855/max31855.cpp +2 -1
- esphome/components/max31856/max31856.cpp +9 -11
- esphome/components/max31865/max31865.cpp +6 -4
- esphome/components/max44009/max44009.cpp +2 -2
- esphome/components/max6675/max6675.cpp +1 -1
- esphome/components/max6956/max6956.cpp +5 -3
- esphome/components/max7219/max7219.cpp +8 -6
- esphome/components/max7219digit/automation.h +52 -0
- esphome/components/max7219digit/display.py +93 -1
- esphome/components/max7219digit/max7219digit.cpp +16 -13
- esphome/components/max9611/max9611.cpp +9 -6
- esphome/components/mcp23008/mcp23008.cpp +1 -1
- esphome/components/mcp23016/mcp23016.cpp +1 -1
- esphome/components/mcp23017/mcp23017.cpp +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +1 -1
- esphome/components/mcp3008/mcp3008.cpp +1 -1
- esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
- esphome/components/mcp3204/mcp3204.cpp +1 -1
- esphome/components/mcp4461/mcp4461.cpp +2 -2
- esphome/components/mcp4725/mcp4725.cpp +2 -2
- esphome/components/mcp4728/mcp4728.cpp +2 -2
- esphome/components/mcp9600/mcp9600.cpp +1 -1
- esphome/components/mcp9808/mcp9808.cpp +4 -4
- esphome/components/mdns/mdns_component.cpp +8 -2
- esphome/components/mdns/mdns_component.h +3 -1
- esphome/components/mdns/mdns_esp32.cpp +2 -2
- esphome/components/media_player/__init__.py +1 -0
- esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
- esphome/components/micro_wake_word/streaming_model.cpp +10 -6
- esphome/components/micronova/micronova.h +2 -2
- esphome/components/mics_4514/mics_4514.cpp +2 -2
- esphome/components/midea/air_conditioner.cpp +7 -5
- esphome/components/midea_ir/midea_ir.cpp +1 -1
- esphome/components/mipi_spi/mipi_spi.cpp +24 -15
- esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
- esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
- esphome/components/mlx90614/mlx90614.cpp +4 -3
- esphome/components/mmc5603/mmc5603.cpp +2 -2
- esphome/components/mmc5983/mmc5983.cpp +1 -1
- esphome/components/modbus/modbus.cpp +7 -5
- esphome/components/modbus_controller/modbus_controller.cpp +6 -4
- esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
- esphome/components/modbus_controller/switch/__init__.py +6 -2
- esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
- esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
- esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
- esphome/components/mpr121/mpr121.cpp +2 -2
- esphome/components/mpu6050/mpu6050.cpp +6 -6
- esphome/components/mpu6886/mpu6886.cpp +6 -6
- esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
- esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +31 -24
- esphome/components/mqtt/mqtt_component.cpp +3 -3
- esphome/components/mqtt/mqtt_cover.cpp +8 -4
- esphome/components/mqtt/mqtt_fan.cpp +12 -6
- esphome/components/mqtt/mqtt_valve.cpp +4 -2
- esphome/components/ms5611/ms5611.cpp +2 -2
- esphome/components/ms8607/ms8607.cpp +2 -2
- esphome/components/msa3xx/msa3xx.cpp +16 -12
- esphome/components/my9231/my9231.cpp +7 -5
- esphome/components/nau7802/nau7802.cpp +6 -4
- esphome/components/neopixelbus/neopixelbus_light.h +2 -2
- esphome/components/network/ip_address.h +1 -1
- esphome/components/network/util.cpp +13 -0
- esphome/components/nextion/base_component.py +2 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
- esphome/components/nextion/display.py +34 -22
- esphome/components/nextion/nextion.cpp +182 -143
- esphome/components/nextion/nextion.h +36 -0
- esphome/components/nextion/nextion_commands.cpp +3 -3
- esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
- esphome/components/nextion/nextion_upload_idf.cpp +79 -80
- esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
- esphome/components/nextion/switch/nextion_switch.cpp +2 -2
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
- esphome/components/nfc/nci_message.h +1 -1
- esphome/components/nfc/ndef_record.h +1 -1
- esphome/components/nfc/ndef_record_text.h +1 -1
- esphome/components/nfc/ndef_record_uri.h +1 -1
- esphome/components/nfc/nfc.h +1 -1
- esphome/components/nfc/nfc_tag.h +1 -1
- esphome/components/noblex/noblex.cpp +1 -1
- esphome/components/npi19/npi19.cpp +5 -7
- esphome/components/number/__init__.py +11 -0
- esphome/components/number/number.cpp +1 -1
- esphome/components/number/number.h +0 -4
- esphome/components/online_image/__init__.py +13 -1
- esphome/components/online_image/online_image.cpp +26 -4
- esphome/components/online_image/online_image.h +21 -4
- esphome/components/opentherm/generate.py +3 -3
- esphome/components/opentherm/hub.cpp +11 -7
- esphome/components/opentherm/number/number.cpp +5 -3
- esphome/components/opentherm/opentherm.h +1 -1
- esphome/components/opentherm/schema.py +13 -13
- esphome/components/opentherm/validate.py +1 -1
- esphome/components/openthread/__init__.py +146 -0
- esphome/components/openthread/const.py +10 -0
- esphome/components/openthread/openthread.cpp +206 -0
- esphome/components/openthread/openthread.h +68 -0
- esphome/components/openthread/openthread_esp.cpp +164 -0
- esphome/components/openthread/tlv.py +58 -0
- esphome/components/openthread_info/__init__.py +0 -0
- esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
- esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
- esphome/components/openthread_info/text_sensor.py +105 -0
- esphome/components/output/float_output.cpp +1 -1
- esphome/components/output/switch/output_switch.cpp +1 -1
- esphome/components/packet_transport/packet_transport.cpp +6 -4
- esphome/components/pca6416a/pca6416a.cpp +2 -2
- esphome/components/pca9554/pca9554.cpp +6 -4
- esphome/components/pca9685/pca9685_output.cpp +12 -8
- esphome/components/pcd8544/pcd_8544.cpp +1 -1
- esphome/components/pcf85063/pcf85063.cpp +2 -2
- esphome/components/pcf8563/pcf8563.cpp +2 -2
- esphome/components/pcf8574/pcf8574.cpp +2 -2
- esphome/components/pid/pid_climate.cpp +8 -5
- esphome/components/pid/pid_climate.h +1 -1
- esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
- esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
- esphome/components/pipsolar/pipsolar.cpp +3 -3
- esphome/components/pm1006/pm1006.cpp +3 -7
- esphome/components/pm1006/pm1006.h +4 -1
- esphome/components/pm2005/pm2005.cpp +12 -13
- esphome/components/pm2005/sensor.py +1 -1
- esphome/components/pmsa003i/pmsa003i.cpp +2 -2
- esphome/components/pmsx003/pmsx003.cpp +0 -4
- esphome/components/pmsx003/pmsx003.h +5 -2
- esphome/components/pmwcs3/pmwcs3.cpp +9 -13
- esphome/components/pmwcs3/pmwcs3.h +0 -1
- esphome/components/pn532/pn532.cpp +7 -7
- esphome/components/pn532/pn532.h +1 -1
- esphome/components/pn532_spi/pn532_spi.cpp +1 -1
- esphome/components/pn7150/pn7150.cpp +4 -4
- esphome/components/pn7160/pn7160.cpp +4 -4
- esphome/components/power_supply/power_supply.cpp +6 -4
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/prometheus/__init__.py +0 -1
- esphome/components/psram/__init__.py +59 -35
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
- esphome/components/pylontech/pylontech.cpp +2 -2
- esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
- esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
- esphome/components/pzemac/pzemac.cpp +4 -2
- esphome/components/pzemdc/pzemdc.cpp +4 -2
- esphome/components/qmc5883l/qmc5883l.cpp +2 -2
- esphome/components/qmp6988/qmp6988.cpp +2 -2
- esphome/components/qmp6988/qmp6988.h +1 -1
- esphome/components/qr_code/qr_code.cpp +5 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
- esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
- esphome/components/rc522/rc522.cpp +5 -5
- esphome/components/rdm6300/rdm6300.cpp +1 -0
- esphome/components/remote_receiver/__init__.py +10 -2
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
- esphome/components/remote_transmitter/__init__.py +10 -2
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
- esphome/components/resistance/resistance_sensor.cpp +6 -3
- esphome/components/restart/button/restart_button.cpp +1 -1
- esphome/components/restart/switch/restart_switch.cpp +1 -1
- esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
- esphome/components/rp2040/__init__.py +7 -0
- esphome/components/rp2040/core.cpp +8 -1
- esphome/components/rp2040/gpio.cpp +26 -9
- esphome/components/rp2040/preferences.cpp +3 -3
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
- esphome/components/rp2040_pio_led_strip/light.py +1 -1
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
- esphome/components/rtttl/rtttl.cpp +11 -9
- esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
- esphome/components/safe_mode/safe_mode.cpp +9 -8
- esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
- esphome/components/scd30/scd30.cpp +11 -8
- esphome/components/scd4x/scd4x.cpp +12 -8
- esphome/components/sdl/display.py +40 -0
- esphome/components/sdl/sdl_esphome.cpp +2 -2
- esphome/components/sdl/sdl_esphome.h +8 -0
- esphome/components/sdm_meter/sdm_meter.cpp +5 -2
- esphome/components/sdp3x/sdp3x.cpp +11 -11
- esphome/components/sds011/sds011.cpp +5 -6
- esphome/components/sds011/sds011.h +4 -1
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
- esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
- esphome/components/selec_meter/selec_meter.cpp +5 -2
- esphome/components/select/__init__.py +1 -0
- esphome/components/select/select.cpp +1 -1
- esphome/components/select/select.h +0 -4
- esphome/components/sen0321/sen0321.cpp +2 -2
- esphome/components/sen21231/sen21231.cpp +1 -1
- esphome/components/sen5x/sen5x.cpp +10 -7
- esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
- esphome/components/sensirion_common/i2c_sensirion.h +1 -0
- esphome/components/sensor/__init__.py +11 -1
- esphome/components/sensor/filter.h +1 -1
- esphome/components/sensor/sensor.cpp +8 -4
- esphome/components/sensor/sensor.h +12 -11
- esphome/components/servo/servo.cpp +12 -9
- esphome/components/servo/servo.h +1 -1
- esphome/components/sfa30/sfa30.cpp +1 -1
- esphome/components/sgp30/sgp30.cpp +10 -8
- esphome/components/sgp4x/sgp4x.cpp +49 -61
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
- esphome/components/sht3xd/sht3xd.cpp +1 -1
- esphome/components/sht4x/sht4x.cpp +2 -2
- esphome/components/shtcx/shtcx.cpp +13 -16
- esphome/components/shutdown/button/shutdown_button.cpp +1 -1
- esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
- esphome/components/sim800l/sim800l.cpp +2 -2
- esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
- esphome/components/sm16716/sm16716.cpp +1 -1
- esphome/components/sm2135/sm2135.cpp +1 -1
- esphome/components/sm2235/sm2235.cpp +5 -3
- esphome/components/sm2335/sm2335.cpp +5 -3
- esphome/components/sml/sml.cpp +1 -1
- esphome/components/sn74hc165/sn74hc165.cpp +1 -2
- esphome/components/sn74hc595/sn74hc595.cpp +1 -2
- esphome/components/sntp/sntp_component.cpp +1 -1
- esphome/components/socket/__init__.py +2 -0
- esphome/components/socket/bsd_sockets_impl.cpp +51 -7
- esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
- esphome/components/socket/lwip_sockets_impl.cpp +51 -7
- esphome/components/socket/socket.cpp +31 -0
- esphome/components/socket/socket.h +27 -1
- esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
- esphome/components/sonoff_d1/sonoff_d1.h +2 -2
- esphome/components/sound_level/sound_level.cpp +4 -2
- esphome/components/speaker/media_player/__init__.py +3 -0
- esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
- esphome/components/speaker/media_player/speaker_media_player.h +6 -0
- esphome/components/spi/__init__.py +10 -2
- esphome/components/spi/spi.cpp +4 -4
- esphome/components/spi/spi_arduino.cpp +22 -9
- esphome/components/spi_device/spi_device.cpp +1 -2
- esphome/components/sprinkler/sprinkler.cpp +9 -6
- esphome/components/sps30/sps30.cpp +16 -15
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
- esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
- esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
- esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
- esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
- esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
- esphome/components/st7567_base/st7567_base.cpp +3 -3
- esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
- esphome/components/st7567_spi/st7567_spi.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +4 -2
- esphome/components/st7735/st7735.cpp +3 -3
- esphome/components/st7789v/st7789v.cpp +10 -7
- esphome/components/st7920/st7920.cpp +6 -4
- esphome/components/statsd/statsd.cpp +9 -5
- esphome/components/status_led/light/status_led_light.cpp +3 -3
- esphome/components/status_led/light/status_led_light.h +1 -1
- esphome/components/status_led/status_led.cpp +1 -1
- esphome/components/stepper/stepper.h +5 -3
- esphome/components/sts3x/sts3x.cpp +2 -2
- esphome/components/switch/__init__.py +1 -0
- esphome/components/switch/switch.cpp +18 -12
- esphome/components/switch/switch.h +14 -8
- esphome/components/sx1509/__init__.py +53 -20
- esphome/components/sx1509/sx1509.cpp +29 -5
- esphome/components/sx1509/sx1509.h +9 -1
- esphome/components/t6615/t6615.cpp +1 -0
- esphome/components/tc74/tc74.cpp +1 -1
- esphome/components/tca9548a/tca9548a.cpp +1 -1
- esphome/components/tca9555/tca9555.cpp +2 -2
- esphome/components/tcs34725/tcs34725.cpp +4 -4
- esphome/components/tee501/tee501.cpp +3 -2
- esphome/components/tem3200/tem3200.cpp +5 -6
- esphome/components/template/alarm_control_panel/__init__.py +6 -0
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
- esphome/components/template/cover/template_cover.cpp +1 -1
- esphome/components/template/select/template_select.cpp +6 -4
- esphome/components/template/text/template_text.cpp +2 -3
- esphome/components/template/valve/template_valve.cpp +5 -3
- esphome/components/text/__init__.py +10 -11
- esphome/components/text/text.cpp +1 -1
- esphome/components/text/text.h +0 -4
- esphome/components/text_sensor/__init__.py +1 -0
- esphome/components/text_sensor/text_sensor.cpp +8 -4
- esphome/components/text_sensor/text_sensor.h +6 -6
- esphome/components/thermostat/thermostat_climate.cpp +67 -43
- esphome/components/time/__init__.py +1 -2
- esphome/components/time_based/time_based_cover.cpp +4 -2
- esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
- esphome/components/tm1621/tm1621.cpp +3 -3
- esphome/components/tm1637/tm1637.cpp +9 -7
- esphome/components/tm1638/tm1638.cpp +7 -5
- esphome/components/tm1651/tm1651.cpp +2 -2
- esphome/components/tmp102/tmp102.cpp +1 -3
- esphome/components/tmp102/tmp102.h +0 -3
- esphome/components/tmp1075/tmp1075.cpp +12 -9
- esphome/components/tmp117/tmp117.cpp +2 -2
- esphome/components/tof10120/tof10120_sensor.cpp +2 -2
- esphome/components/tormatic/tormatic_cover.cpp +4 -2
- esphome/components/tsl2561/tsl2561.cpp +7 -5
- esphome/components/tsl2591/tsl2591.cpp +25 -27
- esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
- esphome/components/tuya/select/tuya_select.cpp +5 -3
- esphome/components/tx20/tx20.cpp +3 -3
- esphome/components/uart/__init__.py +4 -5
- esphome/components/uart/button/uart_button.cpp +1 -1
- esphome/components/uart/switch/uart_switch.cpp +2 -2
- esphome/components/uart/uart.cpp +2 -2
- esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
- esphome/components/uart/uart_component_esp8266.cpp +9 -7
- esphome/components/uart/uart_component_esp_idf.cpp +9 -7
- esphome/components/uart/uart_component_host.cpp +11 -8
- esphome/components/uart/uart_component_libretiny.cpp +8 -6
- esphome/components/uart/uart_component_rp2040.cpp +8 -6
- esphome/components/udp/udp_component.cpp +9 -5
- esphome/components/ufire_ec/ufire_ec.cpp +5 -3
- esphome/components/ufire_ise/ufire_ise.cpp +1 -1
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
- esphome/components/update/__init__.py +1 -0
- esphome/components/update/update_entity.cpp +1 -1
- esphome/components/update/update_entity.h +0 -3
- esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
- esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
- esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
- esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
- esphome/components/usb_host/__init__.py +64 -0
- esphome/components/usb_host/usb_host.h +116 -0
- esphome/components/usb_host/usb_host_client.cpp +394 -0
- esphome/components/usb_host/usb_host_component.cpp +35 -0
- esphome/components/usb_uart/__init__.py +134 -0
- esphome/components/usb_uart/ch34x.cpp +80 -0
- esphome/components/usb_uart/cp210x.cpp +126 -0
- esphome/components/usb_uart/usb_uart.cpp +328 -0
- esphome/components/usb_uart/usb_uart.h +151 -0
- esphome/components/valve/__init__.py +1 -0
- esphome/components/veml3235/veml3235.cpp +13 -9
- esphome/components/veml7700/veml7700.cpp +10 -6
- esphome/components/voice_assistant/voice_assistant.cpp +7 -7
- esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
- esphome/components/web_server/server_index_v2.h +632 -630
- esphome/components/web_server/server_index_v3.h +411 -409
- esphome/components/web_server/web_server.cpp +5 -3
- esphome/components/web_server_base/web_server_base.cpp +1 -1
- esphome/components/web_server_idf/__init__.py +0 -2
- esphome/components/web_server_idf/utils.cpp +1 -1
- esphome/components/web_server_idf/web_server_idf.cpp +7 -3
- esphome/components/web_server_idf/web_server_idf.h +7 -0
- esphome/components/weikai/__init__.py +2 -0
- esphome/components/weikai/weikai.cpp +24 -22
- esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
- esphome/components/weikai_spi/weikai_spi.cpp +11 -6
- esphome/components/wiegand/wiegand.cpp +1 -1
- esphome/components/wifi/wifi_component.cpp +50 -37
- esphome/components/wifi/wifi_component.h +7 -4
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
- esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
- esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
- esphome/components/wireguard/wireguard.cpp +21 -21
- esphome/components/wl_134/text_sensor.py +1 -2
- esphome/components/wled/wled_light_effect.cpp +1 -1
- esphome/components/x9c/x9c.cpp +5 -3
- esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
- esphome/components/xl9535/xl9535.cpp +2 -2
- esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
- esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
- esphome/config.py +3 -2
- esphome/config_validation.py +46 -17
- esphome/const.py +10 -1
- esphome/core/__init__.py +37 -18
- esphome/core/application.cpp +197 -8
- esphome/core/application.h +116 -6
- esphome/core/component.cpp +36 -15
- esphome/core/component.h +43 -13
- esphome/core/config.py +12 -0
- esphome/core/defines.h +10 -2
- esphome/core/entity_base.cpp +4 -16
- esphome/core/entity_base.h +27 -13
- esphome/core/hal.h +5 -0
- esphome/core/helpers.cpp +1 -1
- esphome/core/helpers.h +5 -5
- esphome/core/log.h +2 -0
- esphome/core/log_const_en.h +4 -0
- esphome/core/scheduler.cpp +2 -2
- esphome/coroutine.py +3 -4
- esphome/cpp_generator.py +32 -32
- esphome/dashboard/core.py +2 -2
- esphome/dashboard/web_server.py +2 -2
- esphome/git.py +4 -4
- esphome/helpers.py +5 -6
- esphome/loader.py +8 -7
- esphome/log.py +7 -1
- esphome/platformio_api.py +2 -3
- esphome/storage_json.py +13 -5
- esphome/types.py +12 -13
- esphome/util.py +1 -2
- esphome/wizard.py +0 -16
- esphome/writer.py +5 -3
- esphome/yaml_util.py +6 -1
- esphome/zeroconf.py +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/RECORD +753 -699
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
#include "ina2xx_base.h"
|
2
|
-
#include "esphome/core/log.h"
|
3
2
|
#include "esphome/core/hal.h"
|
4
3
|
#include "esphome/core/helpers.h"
|
4
|
+
#include "esphome/core/log.h"
|
5
5
|
#include <cinttypes>
|
6
6
|
#include <cmath>
|
7
7
|
|
@@ -50,7 +50,7 @@ static bool check_model_and_device_match(INAModel model, uint16_t dev_id) {
|
|
50
50
|
}
|
51
51
|
|
52
52
|
void INA2XX::setup() {
|
53
|
-
ESP_LOGCONFIG(TAG, "
|
53
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
54
54
|
|
55
55
|
if (!this->reset_config_()) {
|
56
56
|
ESP_LOGE(TAG, "Reset failed, check connection");
|
@@ -203,15 +203,19 @@ void INA2XX::dump_config() {
|
|
203
203
|
this->dev_id_);
|
204
204
|
}
|
205
205
|
if (this->is_failed()) {
|
206
|
-
ESP_LOGE(TAG,
|
206
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
207
207
|
}
|
208
208
|
LOG_UPDATE_INTERVAL(this);
|
209
|
-
ESP_LOGCONFIG(TAG,
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
209
|
+
ESP_LOGCONFIG(TAG,
|
210
|
+
" Shunt resistance = %f Ohm\n"
|
211
|
+
" Max current = %f A\n"
|
212
|
+
" Shunt temp coeff = %d ppm/°C\n"
|
213
|
+
" ADCRANGE = %d (%s)\n"
|
214
|
+
" CURRENT_LSB = %f\n"
|
215
|
+
" SHUNT_CAL = %d",
|
216
|
+
this->shunt_resistance_ohm_, this->max_current_a_, this->shunt_tempco_ppm_c_,
|
217
|
+
(uint8_t) this->adc_range_, this->adc_range_ ? "±40.96 mV" : "±163.84 mV", this->current_lsb_,
|
218
|
+
this->shunt_cal_);
|
215
219
|
|
216
220
|
ESP_LOGCONFIG(TAG, " ADC Samples = %d; ADC times: Bus = %d μs, Shunt = %d μs, Temp = %d μs",
|
217
221
|
ADC_SAMPLES[0b111 & (uint8_t) this->adc_avg_samples_],
|
@@ -22,7 +22,7 @@ static const uint8_t INA3221_REGISTER_CHANNEL3_BUS_VOLTAGE = 0x06;
|
|
22
22
|
// A0 = SCL -> 0x43
|
23
23
|
|
24
24
|
void INA3221Component::setup() {
|
25
|
-
ESP_LOGCONFIG(TAG, "
|
25
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
26
26
|
// Config Register
|
27
27
|
// 0bx000000000000000 << 15 RESET Bit (1 -> trigger reset)
|
28
28
|
if (!this->write_byte_16(INA3221_REGISTER_CONFIG, 0x8000)) {
|
@@ -60,7 +60,7 @@ void INA3221Component::dump_config() {
|
|
60
60
|
ESP_LOGCONFIG(TAG, "INA3221:");
|
61
61
|
LOG_I2C_DEVICE(this);
|
62
62
|
if (this->is_failed()) {
|
63
|
-
ESP_LOGE(TAG,
|
63
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
64
64
|
}
|
65
65
|
LOG_UPDATE_INTERVAL(this);
|
66
66
|
|
@@ -6,9 +6,12 @@ from esphome.const import (
|
|
6
6
|
CONF_FULL_UPDATE_EVERY,
|
7
7
|
CONF_ID,
|
8
8
|
CONF_LAMBDA,
|
9
|
+
CONF_MIRROR_X,
|
10
|
+
CONF_MIRROR_Y,
|
9
11
|
CONF_MODEL,
|
10
12
|
CONF_OE_PIN,
|
11
13
|
CONF_PAGES,
|
14
|
+
CONF_TRANSFORM,
|
12
15
|
CONF_WAKEUP_PIN,
|
13
16
|
)
|
14
17
|
|
@@ -36,7 +39,6 @@ CONF_SPH_PIN = "sph_pin"
|
|
36
39
|
CONF_SPV_PIN = "spv_pin"
|
37
40
|
CONF_VCOM_PIN = "vcom_pin"
|
38
41
|
|
39
|
-
|
40
42
|
inkplate6_ns = cg.esphome_ns.namespace("inkplate6")
|
41
43
|
Inkplate6 = inkplate6_ns.class_(
|
42
44
|
"Inkplate6",
|
@@ -62,6 +64,12 @@ CONFIG_SCHEMA = cv.All(
|
|
62
64
|
{
|
63
65
|
cv.GenerateID(): cv.declare_id(Inkplate6),
|
64
66
|
cv.Optional(CONF_GREYSCALE, default=False): cv.boolean,
|
67
|
+
cv.Optional(CONF_TRANSFORM): cv.Schema(
|
68
|
+
{
|
69
|
+
cv.Optional(CONF_MIRROR_X, default=False): cv.boolean,
|
70
|
+
cv.Optional(CONF_MIRROR_Y, default=False): cv.boolean,
|
71
|
+
}
|
72
|
+
),
|
65
73
|
cv.Optional(CONF_PARTIAL_UPDATING, default=True): cv.boolean,
|
66
74
|
cv.Optional(CONF_FULL_UPDATE_EVERY, default=10): cv.uint32_t,
|
67
75
|
cv.Optional(CONF_MODEL, default="inkplate_6"): cv.enum(
|
@@ -109,7 +117,6 @@ CONFIG_SCHEMA = cv.All(
|
|
109
117
|
.extend(cv.polling_component_schema("5s"))
|
110
118
|
.extend(i2c.i2c_device_schema(0x48)),
|
111
119
|
cv.has_at_most_one_key(CONF_PAGES, CONF_LAMBDA),
|
112
|
-
cv.only_with_arduino,
|
113
120
|
)
|
114
121
|
|
115
122
|
|
@@ -126,6 +133,9 @@ async def to_code(config):
|
|
126
133
|
cg.add(var.set_writer(lambda_))
|
127
134
|
|
128
135
|
cg.add(var.set_greyscale(config[CONF_GREYSCALE]))
|
136
|
+
if transform := config.get(CONF_TRANSFORM):
|
137
|
+
cg.add(var.set_mirror_x(transform[CONF_MIRROR_X]))
|
138
|
+
cg.add(var.set_mirror_y(transform[CONF_MIRROR_Y]))
|
129
139
|
cg.add(var.set_partial_updating(config[CONF_PARTIAL_UPDATING]))
|
130
140
|
cg.add(var.set_full_update_every(config[CONF_FULL_UPDATE_EVERY]))
|
131
141
|
|
@@ -1,11 +1,9 @@
|
|
1
1
|
#include "inkplate.h"
|
2
|
-
#include "esphome/core/log.h"
|
3
2
|
#include "esphome/core/application.h"
|
4
3
|
#include "esphome/core/helpers.h"
|
4
|
+
#include "esphome/core/log.h"
|
5
5
|
|
6
|
-
#
|
7
|
-
|
8
|
-
#include <esp32-hal-gpio.h>
|
6
|
+
#include <hal/gpio_hal.h>
|
9
7
|
|
10
8
|
namespace esphome {
|
11
9
|
namespace inkplate6 {
|
@@ -156,6 +154,12 @@ void HOT Inkplate6::draw_absolute_pixel_internal(int x, int y, Color color) {
|
|
156
154
|
if (x >= this->get_width_internal() || y >= this->get_height_internal() || x < 0 || y < 0)
|
157
155
|
return;
|
158
156
|
|
157
|
+
if (this->mirror_y_)
|
158
|
+
y = this->get_height_internal() - y - 1;
|
159
|
+
|
160
|
+
if (this->mirror_x_)
|
161
|
+
x = this->get_width_internal() - x - 1;
|
162
|
+
|
159
163
|
if (this->greyscale_) {
|
160
164
|
int x1 = x / 2;
|
161
165
|
int x_sub = x % 2;
|
@@ -180,9 +184,11 @@ void HOT Inkplate6::draw_absolute_pixel_internal(int x, int y, Color color) {
|
|
180
184
|
|
181
185
|
void Inkplate6::dump_config() {
|
182
186
|
LOG_DISPLAY("", "Inkplate", this);
|
183
|
-
ESP_LOGCONFIG(TAG,
|
184
|
-
|
185
|
-
|
187
|
+
ESP_LOGCONFIG(TAG,
|
188
|
+
" Greyscale: %s\n"
|
189
|
+
" Partial Updating: %s\n"
|
190
|
+
" Full Update Every: %d",
|
191
|
+
YESNO(this->greyscale_), YESNO(this->partial_updating_), this->full_update_every_);
|
186
192
|
// Log pins
|
187
193
|
LOG_PIN(" CKV Pin: ", this->ckv_pin_);
|
188
194
|
LOG_PIN(" CL Pin: ", this->cl_pin_);
|
@@ -715,5 +721,3 @@ void Inkplate6::pins_as_outputs_() {
|
|
715
721
|
|
716
722
|
} // namespace inkplate6
|
717
723
|
} // namespace esphome
|
718
|
-
|
719
|
-
#endif // USE_ESP32_FRAMEWORK_ARDUINO
|
@@ -1,11 +1,9 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
|
+
#include "esphome/components/display/display_buffer.h"
|
4
|
+
#include "esphome/components/i2c/i2c.h"
|
3
5
|
#include "esphome/core/component.h"
|
4
6
|
#include "esphome/core/hal.h"
|
5
|
-
#include "esphome/components/i2c/i2c.h"
|
6
|
-
#include "esphome/components/display/display_buffer.h"
|
7
|
-
|
8
|
-
#ifdef USE_ESP32_FRAMEWORK_ARDUINO
|
9
7
|
|
10
8
|
namespace esphome {
|
11
9
|
namespace inkplate6 {
|
@@ -92,6 +90,9 @@ class Inkplate6 : public display::DisplayBuffer, public i2c::I2CDevice {
|
|
92
90
|
if (this->is_ready())
|
93
91
|
this->initialize_();
|
94
92
|
}
|
93
|
+
void set_mirror_y(bool mirror_y) { this->mirror_y_ = mirror_y; }
|
94
|
+
void set_mirror_x(bool mirror_x) { this->mirror_x_ = mirror_x; }
|
95
|
+
|
95
96
|
void set_partial_updating(bool partial_updating) { this->partial_updating_ = partial_updating; }
|
96
97
|
void set_full_update_every(uint32_t full_update_every) { this->full_update_every_ = full_update_every; }
|
97
98
|
|
@@ -221,6 +222,8 @@ class Inkplate6 : public display::DisplayBuffer, public i2c::I2CDevice {
|
|
221
222
|
|
222
223
|
bool block_partial_{true};
|
223
224
|
bool greyscale_;
|
225
|
+
bool mirror_y_{false};
|
226
|
+
bool mirror_x_{false};
|
224
227
|
bool partial_updating_;
|
225
228
|
|
226
229
|
InkplateModel model_;
|
@@ -249,5 +252,3 @@ class Inkplate6 : public display::DisplayBuffer, public i2c::I2CDevice {
|
|
249
252
|
|
250
253
|
} // namespace inkplate6
|
251
254
|
} // namespace esphome
|
252
|
-
|
253
|
-
#endif // USE_ESP32_FRAMEWORK_ARDUINO
|
@@ -66,7 +66,7 @@ void InternalTemperatureSensor::update() {
|
|
66
66
|
esp_err_t result = temperature_sensor_get_celsius(tsensNew, &temperature);
|
67
67
|
success = (result == ESP_OK);
|
68
68
|
if (!success) {
|
69
|
-
ESP_LOGE(TAG, "
|
69
|
+
ESP_LOGE(TAG, "Reading failed (%d)", result);
|
70
70
|
}
|
71
71
|
#endif // ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 0, 0)
|
72
72
|
#endif // USE_ESP32_VARIANT
|
@@ -103,20 +103,20 @@ void InternalTemperatureSensor::setup() {
|
|
103
103
|
(defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32S2) || \
|
104
104
|
defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32H2) || defined(USE_ESP32_VARIANT_ESP32C2) || \
|
105
105
|
defined(USE_ESP32_VARIANT_ESP32P4))
|
106
|
-
ESP_LOGCONFIG(TAG, "
|
106
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
107
107
|
|
108
108
|
temperature_sensor_config_t tsens_config = TEMPERATURE_SENSOR_CONFIG_DEFAULT(-10, 80);
|
109
109
|
|
110
110
|
esp_err_t result = temperature_sensor_install(&tsens_config, &tsensNew);
|
111
111
|
if (result != ESP_OK) {
|
112
|
-
ESP_LOGE(TAG, "
|
112
|
+
ESP_LOGE(TAG, "Install failed (%d)", result);
|
113
113
|
this->mark_failed();
|
114
114
|
return;
|
115
115
|
}
|
116
116
|
|
117
117
|
result = temperature_sensor_enable(tsensNew);
|
118
118
|
if (result != ESP_OK) {
|
119
|
-
ESP_LOGE(TAG, "
|
119
|
+
ESP_LOGE(TAG, "Enabling failed (%d)", result);
|
120
120
|
this->mark_failed();
|
121
121
|
return;
|
122
122
|
}
|
@@ -20,8 +20,7 @@ std::string build_json(const json_build_t &f) {
|
|
20
20
|
ESP_LOGV(TAG, "Attempting to allocate %zu bytes for JSON serialization", request_size);
|
21
21
|
DynamicJsonDocument json_document(request_size);
|
22
22
|
if (json_document.capacity() == 0) {
|
23
|
-
ESP_LOGE(TAG,
|
24
|
-
"Could not allocate memory for JSON document! Requested %zu bytes, largest free heap block: %zu bytes",
|
23
|
+
ESP_LOGE(TAG, "Could not allocate memory for document! Requested %zu bytes, largest free heap block: %zu bytes",
|
25
24
|
request_size, free_heap);
|
26
25
|
return "{}";
|
27
26
|
}
|
@@ -29,7 +28,7 @@ std::string build_json(const json_build_t &f) {
|
|
29
28
|
f(root);
|
30
29
|
if (json_document.overflowed()) {
|
31
30
|
if (request_size == free_heap) {
|
32
|
-
ESP_LOGE(TAG, "Could not allocate memory for
|
31
|
+
ESP_LOGE(TAG, "Could not allocate memory for document! Overflowed largest free heap block: %zu bytes",
|
33
32
|
free_heap);
|
34
33
|
return "{}";
|
35
34
|
}
|
@@ -54,7 +53,7 @@ bool parse_json(const std::string &data, const json_parse_t &f) {
|
|
54
53
|
while (true) {
|
55
54
|
DynamicJsonDocument json_document(request_size);
|
56
55
|
if (json_document.capacity() == 0) {
|
57
|
-
ESP_LOGE(TAG, "Could not allocate memory for
|
56
|
+
ESP_LOGE(TAG, "Could not allocate memory for document! Requested %zu bytes, free heap: %zu", request_size,
|
58
57
|
free_heap);
|
59
58
|
return false;
|
60
59
|
}
|
@@ -74,7 +73,7 @@ bool parse_json(const std::string &data, const json_parse_t &f) {
|
|
74
73
|
request_size *= 2;
|
75
74
|
continue;
|
76
75
|
} else {
|
77
|
-
ESP_LOGE(TAG, "
|
76
|
+
ESP_LOGE(TAG, "Parse error: %s", err.c_str());
|
78
77
|
return false;
|
79
78
|
}
|
80
79
|
};
|
@@ -10,7 +10,7 @@ static const char *const TAG = "kamstrup_kmp";
|
|
10
10
|
void KamstrupKMPComponent::dump_config() {
|
11
11
|
ESP_LOGCONFIG(TAG, "kamstrup_kmp:");
|
12
12
|
if (this->is_failed()) {
|
13
|
-
ESP_LOGE(TAG,
|
13
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
14
14
|
}
|
15
15
|
LOG_UPDATE_INTERVAL(this);
|
16
16
|
|
@@ -32,8 +32,10 @@ void KeyCollector::dump_config() {
|
|
32
32
|
if (!this->start_keys_.empty())
|
33
33
|
ESP_LOGCONFIG(TAG, " start keys '%s'", this->start_keys_.c_str());
|
34
34
|
if (!this->end_keys_.empty()) {
|
35
|
-
ESP_LOGCONFIG(TAG,
|
36
|
-
|
35
|
+
ESP_LOGCONFIG(TAG,
|
36
|
+
" end keys '%s'\n"
|
37
|
+
" end key is required: %s",
|
38
|
+
this->end_keys_.c_str(), ONOFF(this->end_key_required_));
|
37
39
|
}
|
38
40
|
if (!this->allowed_keys_.empty())
|
39
41
|
ESP_LOGCONFIG(TAG, " allowed keys '%s'", this->allowed_keys_.c_str());
|
@@ -1,5 +1,6 @@
|
|
1
1
|
#include "kmeteriso.h"
|
2
2
|
#include "esphome/core/hal.h"
|
3
|
+
#include "esphome/core/helpers.h"
|
3
4
|
#include "esphome/core/log.h"
|
4
5
|
|
5
6
|
namespace esphome {
|
@@ -13,14 +14,13 @@ static const uint8_t KMETER_INTERNAL_TEMP_VAL_REG = 0x10;
|
|
13
14
|
static const uint8_t KMETER_FIRMWARE_VERSION_REG = 0xFE;
|
14
15
|
|
15
16
|
void KMeterISOComponent::setup() {
|
16
|
-
ESP_LOGCONFIG(TAG, "
|
17
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
17
18
|
this->error_code_ = NONE;
|
18
19
|
|
19
20
|
// Mark as not failed before initializing. Some devices will turn off sensors to save on batteries
|
20
21
|
// and when they come back on, the COMPONENT_STATE_FAILED bit must be unset on the component.
|
21
|
-
if (
|
22
|
-
this->
|
23
|
-
this->component_state_ |= COMPONENT_STATE_CONSTRUCTION;
|
22
|
+
if (this->is_failed()) {
|
23
|
+
this->reset_to_construction_state();
|
24
24
|
}
|
25
25
|
|
26
26
|
auto err = this->bus_->writev(this->address_, nullptr, 0);
|
@@ -77,8 +77,10 @@ void Kuntze::loop() {
|
|
77
77
|
void Kuntze::update() { this->state_ = 1; }
|
78
78
|
|
79
79
|
void Kuntze::dump_config() {
|
80
|
-
ESP_LOGCONFIG(TAG,
|
81
|
-
|
80
|
+
ESP_LOGCONFIG(TAG,
|
81
|
+
"Kuntze:\n"
|
82
|
+
" Address: 0x%02X",
|
83
|
+
this->address_);
|
82
84
|
LOG_SENSOR("", "pH", this->ph_sensor_);
|
83
85
|
LOG_SENSOR("", "temperature", this->temperature_sensor_);
|
84
86
|
LOG_SENSOR("", "DIS1", this->dis1_sensor_);
|
@@ -0,0 +1 @@
|
|
1
|
+
CODEOWNERS = ["@ilikecake"]
|
@@ -0,0 +1,299 @@
|
|
1
|
+
#include "esphome/core/log.h"
|
2
|
+
#include "lc709203f.h"
|
3
|
+
|
4
|
+
namespace esphome {
|
5
|
+
namespace lc709203f {
|
6
|
+
|
7
|
+
static const char *const TAG = "lc709203f.sensor";
|
8
|
+
|
9
|
+
// Device I2C address. This address is fixed.
|
10
|
+
static const uint8_t LC709203F_I2C_ADDR_DEFAULT = 0x0B;
|
11
|
+
|
12
|
+
// Device registers
|
13
|
+
static const uint8_t LC709203F_BEFORE_RSOC = 0x04;
|
14
|
+
static const uint8_t LC709203F_THERMISTOR_B = 0x06;
|
15
|
+
static const uint8_t LC709203F_INITIAL_RSOC = 0x07;
|
16
|
+
static const uint8_t LC709203F_CELL_TEMPERATURE = 0x08;
|
17
|
+
static const uint8_t LC709203F_CELL_VOLTAGE = 0x09;
|
18
|
+
static const uint8_t LC709203F_CURRENT_DIRECTION = 0x0A;
|
19
|
+
static const uint8_t LC709203F_APA = 0x0B;
|
20
|
+
static const uint8_t LC709203F_APT = 0x0C;
|
21
|
+
static const uint8_t LC709203F_RSOC = 0x0D;
|
22
|
+
static const uint8_t LC709203F_ITE = 0x0F;
|
23
|
+
static const uint8_t LC709203F_IC_VERSION = 0x11;
|
24
|
+
static const uint8_t LC709203F_CHANGE_OF_THE_PARAMETER = 0x12;
|
25
|
+
static const uint8_t LC709203F_ALARM_LOW_RSOC = 0x13;
|
26
|
+
static const uint8_t LC709203F_ALARM_LOW_CELL_VOLTAGE = 0x14;
|
27
|
+
static const uint8_t LC709203F_IC_POWER_MODE = 0x15;
|
28
|
+
static const uint8_t LC709203F_STATUS_BIT = 0x16;
|
29
|
+
static const uint8_t LC709203F_NUMBER_OF_THE_PARAMETER = 0x1A;
|
30
|
+
|
31
|
+
static const uint8_t LC709203F_POWER_MODE_ON = 0x0001;
|
32
|
+
static const uint8_t LC709203F_POWER_MODE_SLEEP = 0x0002;
|
33
|
+
|
34
|
+
// The number of times to retry an I2C transaction before giving up. In my experience,
|
35
|
+
// 10 is a good number here that will take care of most bus issues that require retry.
|
36
|
+
static const uint8_t LC709203F_I2C_RETRY_COUNT = 10;
|
37
|
+
|
38
|
+
void Lc709203f::setup() {
|
39
|
+
// Note: The setup implements a small state machine. This is because we want to have
|
40
|
+
// delays before and after sending the RSOC command. The full init process should be:
|
41
|
+
// INIT->RSOC->TEMP_SETUP->NORMAL
|
42
|
+
// The setup() function will only perform the first part of the initialization process.
|
43
|
+
// Assuming no errors, the whole process should occur during the setup() function and
|
44
|
+
// the first two calls to update(). After that, the part should remain in normal mode
|
45
|
+
// until a device reset.
|
46
|
+
//
|
47
|
+
// This device can be picky about I2C communication and can error out occasionally. The
|
48
|
+
// get/set register functions impelment retry logic to retry the I2C transactions. The
|
49
|
+
// initialization code checks the return code from those functions. If they don't return
|
50
|
+
// NO_ERROR (0x00), that part of the initialization aborts and will be retried on the next
|
51
|
+
// call to update().
|
52
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
53
|
+
|
54
|
+
// Set power mode to on. Note that, unlike some other similar devices, in sleep mode the IC
|
55
|
+
// does not record power usage. If there is significant power consumption during sleep mode,
|
56
|
+
// the pack RSOC will likely no longer be correct. Because of that, I do not implement
|
57
|
+
// sleep mode on this device.
|
58
|
+
|
59
|
+
// Initialize device registers. If any of these fail, retry during the update() function.
|
60
|
+
if (this->set_register_(LC709203F_IC_POWER_MODE, LC709203F_POWER_MODE_ON) != i2c::NO_ERROR) {
|
61
|
+
return;
|
62
|
+
}
|
63
|
+
|
64
|
+
if (this->set_register_(LC709203F_APA, this->apa_) != i2c::NO_ERROR) {
|
65
|
+
return;
|
66
|
+
}
|
67
|
+
|
68
|
+
if (this->set_register_(LC709203F_CHANGE_OF_THE_PARAMETER, this->pack_voltage_) != i2c::NO_ERROR) {
|
69
|
+
return;
|
70
|
+
}
|
71
|
+
|
72
|
+
this->state_ = STATE_RSOC;
|
73
|
+
// Note: Initialization continues in the update() function.
|
74
|
+
}
|
75
|
+
|
76
|
+
void Lc709203f::update() {
|
77
|
+
uint16_t buffer;
|
78
|
+
|
79
|
+
if (this->state_ == STATE_NORMAL) {
|
80
|
+
// Note: If we fail to read from the data registers, we do not report any sensor reading.
|
81
|
+
if (this->voltage_sensor_ != nullptr) {
|
82
|
+
if (this->get_register_(LC709203F_CELL_VOLTAGE, &buffer) == i2c::NO_ERROR) {
|
83
|
+
// Raw units are mV
|
84
|
+
this->voltage_sensor_->publish_state(static_cast<float>(buffer) / 1000.0f);
|
85
|
+
this->status_clear_warning();
|
86
|
+
}
|
87
|
+
}
|
88
|
+
if (this->battery_remaining_sensor_ != nullptr) {
|
89
|
+
if (this->get_register_(LC709203F_ITE, &buffer) == i2c::NO_ERROR) {
|
90
|
+
// Raw units are .1%
|
91
|
+
this->battery_remaining_sensor_->publish_state(static_cast<float>(buffer) / 10.0f);
|
92
|
+
this->status_clear_warning();
|
93
|
+
}
|
94
|
+
}
|
95
|
+
if (this->temperature_sensor_ != nullptr) {
|
96
|
+
// I can't test this with a real thermistor because I don't have a device with
|
97
|
+
// an attached thermistor. I have turned on the sensor and made sure that it
|
98
|
+
// sets up the registers properly.
|
99
|
+
if (this->get_register_(LC709203F_CELL_TEMPERATURE, &buffer) == i2c::NO_ERROR) {
|
100
|
+
// Raw units are .1 K
|
101
|
+
this->temperature_sensor_->publish_state((static_cast<float>(buffer) / 10.0f) - 273.15f);
|
102
|
+
this->status_clear_warning();
|
103
|
+
}
|
104
|
+
}
|
105
|
+
} else if (this->state_ == STATE_INIT) {
|
106
|
+
// Retry initializing the device registers. We should only get here if the init sequence
|
107
|
+
// failed during the setup() function. This would likely occur because of a repeated failures
|
108
|
+
// on the I2C bus. If any of these fail, retry the next time the update() function is called.
|
109
|
+
if (this->set_register_(LC709203F_IC_POWER_MODE, LC709203F_POWER_MODE_ON) != i2c::NO_ERROR) {
|
110
|
+
return;
|
111
|
+
}
|
112
|
+
|
113
|
+
if (this->set_register_(LC709203F_APA, this->apa_) != i2c::NO_ERROR) {
|
114
|
+
return;
|
115
|
+
}
|
116
|
+
|
117
|
+
if (this->set_register_(LC709203F_CHANGE_OF_THE_PARAMETER, this->pack_voltage_) != i2c::NO_ERROR) {
|
118
|
+
return;
|
119
|
+
}
|
120
|
+
|
121
|
+
this->state_ = STATE_RSOC;
|
122
|
+
|
123
|
+
} else if (this->state_ == STATE_RSOC) {
|
124
|
+
// We implement a delay here to send the initial RSOC command.
|
125
|
+
// This should run once on the first update() after initialization.
|
126
|
+
if (this->set_register_(LC709203F_INITIAL_RSOC, 0xAA55) == i2c::NO_ERROR) {
|
127
|
+
this->state_ = STATE_TEMP_SETUP;
|
128
|
+
}
|
129
|
+
} else if (this->state_ == STATE_TEMP_SETUP) {
|
130
|
+
// This should run once on the second update() after initialization.
|
131
|
+
if (this->temperature_sensor_ != nullptr) {
|
132
|
+
// This assumes that a thermistor is attached to the device as shown in the datahseet.
|
133
|
+
if (this->set_register_(LC709203F_STATUS_BIT, 0x0001) == i2c::NO_ERROR) {
|
134
|
+
if (this->set_register_(LC709203F_THERMISTOR_B, this->b_constant_) == i2c::NO_ERROR) {
|
135
|
+
this->state_ = STATE_NORMAL;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
} else if (this->set_register_(LC709203F_STATUS_BIT, 0x0000) == i2c::NO_ERROR) {
|
139
|
+
// The device expects to get updates to the temperature in this mode.
|
140
|
+
// I am not doing that now. The temperature register defaults to 25C.
|
141
|
+
// In theory, we could have another temperature sensor and have ESPHome
|
142
|
+
// send updated temperature to the device occasionally, but I have no idea
|
143
|
+
// how to make that happen.
|
144
|
+
this->state_ = STATE_NORMAL;
|
145
|
+
}
|
146
|
+
}
|
147
|
+
}
|
148
|
+
|
149
|
+
void Lc709203f::dump_config() {
|
150
|
+
ESP_LOGCONFIG(TAG, "LC709203F:");
|
151
|
+
LOG_I2C_DEVICE(this);
|
152
|
+
|
153
|
+
LOG_UPDATE_INTERVAL(this);
|
154
|
+
ESP_LOGCONFIG(TAG,
|
155
|
+
" Pack Size: %d mAH\n"
|
156
|
+
" Pack APA: 0x%02X",
|
157
|
+
this->pack_size_, this->apa_);
|
158
|
+
|
159
|
+
// This is only true if the pack_voltage_ is either 0x0000 or 0x0001. The config validator
|
160
|
+
// should have already verified this.
|
161
|
+
ESP_LOGCONFIG(TAG, " Pack Rated Voltage: 3.%sV", this->pack_voltage_ == 0x0000 ? "8" : "7");
|
162
|
+
|
163
|
+
LOG_SENSOR(" ", "Voltage", this->voltage_sensor_);
|
164
|
+
LOG_SENSOR(" ", "Battery Remaining", this->battery_remaining_sensor_);
|
165
|
+
|
166
|
+
if (this->temperature_sensor_ != nullptr) {
|
167
|
+
LOG_SENSOR(" ", "Temperature", this->temperature_sensor_);
|
168
|
+
ESP_LOGCONFIG(TAG, " B_Constant: %d", this->b_constant_);
|
169
|
+
} else {
|
170
|
+
ESP_LOGCONFIG(TAG, " No Temperature Sensor");
|
171
|
+
}
|
172
|
+
}
|
173
|
+
|
174
|
+
uint8_t Lc709203f::get_register_(uint8_t register_to_read, uint16_t *register_value) {
|
175
|
+
i2c::ErrorCode return_code;
|
176
|
+
uint8_t read_buffer[6];
|
177
|
+
|
178
|
+
read_buffer[0] = (this->address_) << 1;
|
179
|
+
read_buffer[1] = register_to_read;
|
180
|
+
read_buffer[2] = ((this->address_) << 1) | 0x01;
|
181
|
+
|
182
|
+
for (uint8_t i = 0; i <= LC709203F_I2C_RETRY_COUNT; i++) {
|
183
|
+
// Note: the read_register() function does not send a stop between the write and
|
184
|
+
// the read portions of the I2C transation when you set the last variable to 'false'
|
185
|
+
// as we do below. Some of the other I2C read functions such as the generic read()
|
186
|
+
// function will send a stop between the read and the write portion of the I2C
|
187
|
+
// transaction. This is bad in this case and will result in reading nothing but 0xFFFF
|
188
|
+
// from the registers.
|
189
|
+
return_code = this->read_register(register_to_read, &read_buffer[3], 3, false);
|
190
|
+
if (return_code != i2c::NO_ERROR) {
|
191
|
+
// Error on the i2c bus
|
192
|
+
this->status_set_warning(
|
193
|
+
str_sprintf("Error code %d when reading from register 0x%02X", return_code, register_to_read).c_str());
|
194
|
+
} else if (this->crc8_(read_buffer, 5) != read_buffer[5]) {
|
195
|
+
// I2C indicated OK, but the CRC of the data does not matcth.
|
196
|
+
this->status_set_warning(str_sprintf("CRC error reading from register 0x%02X", register_to_read).c_str());
|
197
|
+
} else {
|
198
|
+
*register_value = ((uint16_t) read_buffer[4] << 8) | (uint16_t) read_buffer[3];
|
199
|
+
return i2c::NO_ERROR;
|
200
|
+
}
|
201
|
+
}
|
202
|
+
|
203
|
+
// If we get here, we tried LC709203F_I2C_RETRY_COUNT times to read the register and
|
204
|
+
// failed each time. Set the register value to 0 and return the I2C error code or 0xFF
|
205
|
+
// to indicate a CRC failure. It will be up to the higher level code what to do when
|
206
|
+
// this happens.
|
207
|
+
*register_value = 0x0000;
|
208
|
+
if (return_code != i2c::NO_ERROR) {
|
209
|
+
return return_code;
|
210
|
+
} else {
|
211
|
+
return 0xFF;
|
212
|
+
}
|
213
|
+
}
|
214
|
+
|
215
|
+
uint8_t Lc709203f::set_register_(uint8_t register_to_set, uint16_t value_to_set) {
|
216
|
+
i2c::ErrorCode return_code;
|
217
|
+
uint8_t write_buffer[5];
|
218
|
+
|
219
|
+
// Note: We don't actually send byte[0] of the buffer. We include it because it is
|
220
|
+
// part of the CRC calculation.
|
221
|
+
write_buffer[0] = (this->address_) << 1;
|
222
|
+
write_buffer[1] = register_to_set;
|
223
|
+
write_buffer[2] = value_to_set & 0xFF; // Low byte
|
224
|
+
write_buffer[3] = (value_to_set >> 8) & 0xFF; // High byte
|
225
|
+
write_buffer[4] = this->crc8_(write_buffer, 4);
|
226
|
+
|
227
|
+
for (uint8_t i = 0; i <= LC709203F_I2C_RETRY_COUNT; i++) {
|
228
|
+
// Note: we don't write the first byte of the write buffer to the device.
|
229
|
+
// This is done automatically by the write() function.
|
230
|
+
return_code = this->write(&write_buffer[1], 4, true);
|
231
|
+
if (return_code == i2c::NO_ERROR) {
|
232
|
+
return return_code;
|
233
|
+
} else {
|
234
|
+
this->status_set_warning(
|
235
|
+
str_sprintf("Error code %d when writing to register 0x%02X", return_code, register_to_set).c_str());
|
236
|
+
}
|
237
|
+
}
|
238
|
+
|
239
|
+
// If we get here, we tried to send the data LC709203F_I2C_RETRY_COUNT times and failed.
|
240
|
+
// We return the I2C error code, it is up to the higher level code what to do about it.
|
241
|
+
return return_code;
|
242
|
+
}
|
243
|
+
|
244
|
+
uint8_t Lc709203f::crc8_(uint8_t *byte_buffer, uint8_t length_of_crc) {
|
245
|
+
uint8_t crc = 0x00;
|
246
|
+
const uint8_t polynomial(0x07);
|
247
|
+
|
248
|
+
for (uint8_t j = length_of_crc; j; --j) {
|
249
|
+
crc ^= *byte_buffer++;
|
250
|
+
|
251
|
+
for (uint8_t i = 8; i; --i) {
|
252
|
+
crc = (crc & 0x80) ? (crc << 1) ^ polynomial : (crc << 1);
|
253
|
+
}
|
254
|
+
}
|
255
|
+
return crc;
|
256
|
+
}
|
257
|
+
|
258
|
+
void Lc709203f::set_pack_size(uint16_t pack_size) {
|
259
|
+
static const uint16_t PACK_SIZE_ARRAY[6] = {100, 200, 500, 1000, 2000, 3000};
|
260
|
+
static const uint16_t APA_ARRAY[6] = {0x08, 0x0B, 0x10, 0x19, 0x2D, 0x36};
|
261
|
+
float slope;
|
262
|
+
float intercept;
|
263
|
+
|
264
|
+
this->pack_size_ = pack_size; // Pack size in mAH
|
265
|
+
|
266
|
+
// The size is used to calculate the 'Adjustment Pack Application' number.
|
267
|
+
// Here we assume a type 01 or type 03 battery and do a linear curve fit to find the APA.
|
268
|
+
for (uint8_t i = 0; i < 6; i++) {
|
269
|
+
if (PACK_SIZE_ARRAY[i] == pack_size) {
|
270
|
+
// If the pack size is exactly one of the values in the array.
|
271
|
+
this->apa_ = APA_ARRAY[i];
|
272
|
+
return;
|
273
|
+
} else if ((i > 0) && (PACK_SIZE_ARRAY[i] > pack_size) && (PACK_SIZE_ARRAY[i - 1] < pack_size)) {
|
274
|
+
// If the pack size is between the current array element and the previous. Do a linear
|
275
|
+
// Curve fit to determine the APA value.
|
276
|
+
|
277
|
+
// Type casting is required here to avoid interger division
|
278
|
+
slope = static_cast<float>(APA_ARRAY[i] - APA_ARRAY[i - 1]) /
|
279
|
+
static_cast<float>(PACK_SIZE_ARRAY[i] - PACK_SIZE_ARRAY[i - 1]);
|
280
|
+
|
281
|
+
// Type casting might not be needed here.
|
282
|
+
intercept = static_cast<float>(APA_ARRAY[i]) - slope * static_cast<float>(PACK_SIZE_ARRAY[i]);
|
283
|
+
|
284
|
+
this->apa_ = static_cast<uint8_t>(slope * pack_size + intercept);
|
285
|
+
return;
|
286
|
+
}
|
287
|
+
}
|
288
|
+
// We should never get here. If we do, it means we never set the pack APA. This should
|
289
|
+
// not be possible because of the config validation. However, if it does happen, the
|
290
|
+
// consequence is that the RSOC values will likley not be as accurate. However, it should
|
291
|
+
// not cause an error or crash, so I am not doing any additional checking here.
|
292
|
+
}
|
293
|
+
|
294
|
+
void Lc709203f::set_thermistor_b_constant(uint16_t b_constant) { this->b_constant_ = b_constant; }
|
295
|
+
|
296
|
+
void Lc709203f::set_pack_voltage(LC709203FBatteryVoltage pack_voltage) { this->pack_voltage_ = pack_voltage; }
|
297
|
+
|
298
|
+
} // namespace lc709203f
|
299
|
+
} // namespace esphome
|