esphome 2025.5.1__py3-none-any.whl → 2025.6.0b1__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 +712 -358
- esphome/components/api/api_connection.h +343 -284
- esphome/components/api/api_frame_helper.cpp +349 -344
- esphome/components/api/api_frame_helper.h +121 -94
- esphome/components/api/api_pb2.cpp +2 -0
- esphome/components/api/api_pb2.h +637 -1
- 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 -2
- 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 +4 -3
- 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 +16 -14
- esphome/components/bme280_base/bme280_base.cpp +3 -3
- 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/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 +88 -20
- 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 +11 -9
- esphome/components/esp32_ble/ble_uuid.h +1 -1
- 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 +6 -2
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +12 -9
- 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 +4 -2
- 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 +54 -64
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -0
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
- 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 +2 -1
- 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_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 +9 -5
- esphome/components/logger/logger.h +4 -4
- 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 +2 -2
- 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 +2 -3
- 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 +58 -61
- esphome/components/nextion/nextion_upload_idf.cpp +69 -72
- esphome/components/nextion/sensor/nextion_sensor.cpp +4 -4
- esphome/components/nextion/switch/nextion_switch.cpp +2 -2
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +2 -2
- 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/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/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/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.h +9 -5
- 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_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 +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 +1 -1
- 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 +38 -12
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +3 -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_sensor/__init__.py +1 -0
- 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/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/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/utils.cpp +1 -1
- esphome/components/web_server_idf/web_server_idf.cpp +1 -1
- esphome/components/weikai/__init__.py +2 -0
- esphome/components/weikai/weikai.cpp +23 -21
- 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 +188 -5
- esphome/core/application.h +110 -0
- esphome/core/component.h +13 -0
- esphome/core/config.py +12 -0
- esphome/core/defines.h +10 -2
- esphome/core/hal.h +5 -0
- esphome/core/helpers.cpp +1 -1
- esphome/core/helpers.h +4 -4
- 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/writer.py +5 -3
- esphome/yaml_util.py +6 -1
- esphome/zeroconf.py +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/METADATA +12 -11
- {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/RECORD +720 -667
- {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/WHEEL +1 -1
- {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/top_level.txt +0 -0
@@ -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,7 +14,7 @@ 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
|
@@ -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
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include "esphome/core/component.h"
|
4
|
+
#include "esphome/components/sensor/sensor.h"
|
5
|
+
#include "esphome/components/i2c/i2c.h"
|
6
|
+
|
7
|
+
namespace esphome {
|
8
|
+
namespace lc709203f {
|
9
|
+
|
10
|
+
enum LC709203FState {
|
11
|
+
STATE_INIT,
|
12
|
+
STATE_RSOC,
|
13
|
+
STATE_TEMP_SETUP,
|
14
|
+
STATE_NORMAL,
|
15
|
+
};
|
16
|
+
|
17
|
+
/// Enum listing allowable voltage settings for the LC709203F.
|
18
|
+
enum LC709203FBatteryVoltage {
|
19
|
+
LC709203F_BATTERY_VOLTAGE_3_8 = 0x0000,
|
20
|
+
LC709203F_BATTERY_VOLTAGE_3_7 = 0x0001,
|
21
|
+
};
|
22
|
+
|
23
|
+
class Lc709203f : public sensor::Sensor, public PollingComponent, public i2c::I2CDevice {
|
24
|
+
public:
|
25
|
+
void setup() override;
|
26
|
+
void update() override;
|
27
|
+
void dump_config() override;
|
28
|
+
|
29
|
+
void set_pack_size(uint16_t pack_size);
|
30
|
+
void set_thermistor_b_constant(uint16_t b_constant);
|
31
|
+
void set_pack_voltage(LC709203FBatteryVoltage pack_voltage);
|
32
|
+
void set_voltage_sensor(sensor::Sensor *voltage_sensor) { voltage_sensor_ = voltage_sensor; }
|
33
|
+
void set_battery_remaining_sensor(sensor::Sensor *battery_remaining_sensor) {
|
34
|
+
battery_remaining_sensor_ = battery_remaining_sensor;
|
35
|
+
}
|
36
|
+
void set_temperature_sensor(sensor::Sensor *temperature_sensor) { temperature_sensor_ = temperature_sensor; }
|
37
|
+
|
38
|
+
private:
|
39
|
+
uint8_t get_register_(uint8_t register_to_read, uint16_t *register_value);
|
40
|
+
uint8_t set_register_(uint8_t register_to_set, uint16_t value_to_set);
|
41
|
+
uint8_t crc8_(uint8_t *byte_buffer, uint8_t length_of_crc);
|
42
|
+
|
43
|
+
protected:
|
44
|
+
sensor::Sensor *voltage_sensor_{nullptr};
|
45
|
+
sensor::Sensor *battery_remaining_sensor_{nullptr};
|
46
|
+
sensor::Sensor *temperature_sensor_{nullptr};
|
47
|
+
uint16_t pack_size_;
|
48
|
+
uint16_t apa_;
|
49
|
+
uint16_t b_constant_;
|
50
|
+
LC709203FState state_ = STATE_INIT;
|
51
|
+
uint16_t pack_voltage_;
|
52
|
+
};
|
53
|
+
|
54
|
+
} // namespace lc709203f
|
55
|
+
} // namespace esphome
|
@@ -0,0 +1,93 @@
|
|
1
|
+
import esphome.codegen as cg
|
2
|
+
from esphome.components import i2c, sensor
|
3
|
+
import esphome.config_validation as cv
|
4
|
+
from esphome.const import (
|
5
|
+
CONF_BATTERY_LEVEL,
|
6
|
+
CONF_BATTERY_VOLTAGE,
|
7
|
+
CONF_ID,
|
8
|
+
CONF_SIZE,
|
9
|
+
CONF_TEMPERATURE,
|
10
|
+
CONF_VOLTAGE,
|
11
|
+
DEVICE_CLASS_BATTERY,
|
12
|
+
DEVICE_CLASS_TEMPERATURE,
|
13
|
+
DEVICE_CLASS_VOLTAGE,
|
14
|
+
ENTITY_CATEGORY_DIAGNOSTIC,
|
15
|
+
STATE_CLASS_MEASUREMENT,
|
16
|
+
UNIT_CELSIUS,
|
17
|
+
UNIT_PERCENT,
|
18
|
+
UNIT_VOLT,
|
19
|
+
)
|
20
|
+
|
21
|
+
DEPENDENCIES = ["i2c"]
|
22
|
+
|
23
|
+
lc709203f_ns = cg.esphome_ns.namespace("lc709203f")
|
24
|
+
|
25
|
+
CONF_B_CONSTANT = "b_constant"
|
26
|
+
|
27
|
+
LC709203FBatteryVoltage = lc709203f_ns.enum("LC709203FBatteryVoltage")
|
28
|
+
BATTERY_VOLTAGE_OPTIONS = {
|
29
|
+
"3.7": LC709203FBatteryVoltage.LC709203F_BATTERY_VOLTAGE_3_7,
|
30
|
+
"3.8": LC709203FBatteryVoltage.LC709203F_BATTERY_VOLTAGE_3_8,
|
31
|
+
}
|
32
|
+
|
33
|
+
lc709203f = lc709203f_ns.class_("Lc709203f", cg.PollingComponent, i2c.I2CDevice)
|
34
|
+
|
35
|
+
CONFIG_SCHEMA = (
|
36
|
+
cv.Schema(
|
37
|
+
{
|
38
|
+
cv.GenerateID(): cv.declare_id(lc709203f),
|
39
|
+
cv.Optional(CONF_SIZE, default="500"): cv.int_range(100, 3000),
|
40
|
+
cv.Optional(CONF_VOLTAGE, default="3.7"): cv.enum(
|
41
|
+
BATTERY_VOLTAGE_OPTIONS, upper=True
|
42
|
+
),
|
43
|
+
cv.Optional(CONF_BATTERY_VOLTAGE): sensor.sensor_schema(
|
44
|
+
unit_of_measurement=UNIT_VOLT,
|
45
|
+
accuracy_decimals=3,
|
46
|
+
device_class=DEVICE_CLASS_VOLTAGE,
|
47
|
+
state_class=STATE_CLASS_MEASUREMENT,
|
48
|
+
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
|
49
|
+
),
|
50
|
+
cv.Optional(CONF_BATTERY_LEVEL): sensor.sensor_schema(
|
51
|
+
unit_of_measurement=UNIT_PERCENT,
|
52
|
+
accuracy_decimals=3,
|
53
|
+
device_class=DEVICE_CLASS_BATTERY,
|
54
|
+
state_class=STATE_CLASS_MEASUREMENT,
|
55
|
+
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
|
56
|
+
),
|
57
|
+
cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(
|
58
|
+
unit_of_measurement=UNIT_CELSIUS,
|
59
|
+
accuracy_decimals=2,
|
60
|
+
device_class=DEVICE_CLASS_TEMPERATURE,
|
61
|
+
state_class=STATE_CLASS_MEASUREMENT,
|
62
|
+
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
|
63
|
+
).extend(
|
64
|
+
{
|
65
|
+
cv.Required(CONF_B_CONSTANT): cv.int_range(0, 0xFFFF),
|
66
|
+
}
|
67
|
+
),
|
68
|
+
}
|
69
|
+
)
|
70
|
+
.extend(cv.polling_component_schema("60s"))
|
71
|
+
.extend(i2c.i2c_device_schema(0x0B))
|
72
|
+
)
|
73
|
+
|
74
|
+
|
75
|
+
async def to_code(config):
|
76
|
+
var = cg.new_Pvariable(config[CONF_ID])
|
77
|
+
await cg.register_component(var, config)
|
78
|
+
await i2c.register_i2c_device(var, config)
|
79
|
+
cg.add(var.set_pack_size(config.get(CONF_SIZE)))
|
80
|
+
cg.add(var.set_pack_voltage(BATTERY_VOLTAGE_OPTIONS[config[CONF_VOLTAGE]]))
|
81
|
+
|
82
|
+
if voltage_config := config.get(CONF_BATTERY_VOLTAGE):
|
83
|
+
sens = await sensor.new_sensor(voltage_config)
|
84
|
+
cg.add(var.set_voltage_sensor(sens))
|
85
|
+
|
86
|
+
if level_config := config.get(CONF_BATTERY_LEVEL):
|
87
|
+
sens = await sensor.new_sensor(level_config)
|
88
|
+
cg.add(var.set_battery_remaining_sensor(sens))
|
89
|
+
|
90
|
+
if temp_config := config.get(CONF_TEMPERATURE):
|
91
|
+
sens = await sensor.new_sensor(temp_config)
|
92
|
+
cg.add(var.set_temperature_sensor(sens))
|
93
|
+
cg.add(var.set_thermistor_b_constant(temp_config[CONF_B_CONSTANT]))
|
@@ -7,7 +7,7 @@ namespace lcd_gpio {
|
|
7
7
|
static const char *const TAG = "lcd_gpio";
|
8
8
|
|
9
9
|
void GPIOLCDDisplay::setup() {
|
10
|
-
ESP_LOGCONFIG(TAG, "
|
10
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
11
11
|
this->rs_pin_->setup(); // OUTPUT
|
12
12
|
this->rs_pin_->digital_write(false);
|
13
13
|
if (this->rw_pin_ != nullptr) {
|
@@ -24,8 +24,10 @@ void GPIOLCDDisplay::setup() {
|
|
24
24
|
LCDDisplay::setup();
|
25
25
|
}
|
26
26
|
void GPIOLCDDisplay::dump_config() {
|
27
|
-
ESP_LOGCONFIG(TAG,
|
28
|
-
|
27
|
+
ESP_LOGCONFIG(TAG,
|
28
|
+
"GPIO LCD Display:\n"
|
29
|
+
" Columns: %u, Rows: %u",
|
30
|
+
this->columns_, this->rows_);
|
29
31
|
LOG_PIN(" RS Pin: ", this->rs_pin_);
|
30
32
|
LOG_PIN(" RW Pin: ", this->rw_pin_);
|
31
33
|
LOG_PIN(" Enable Pin: ", this->enable_pin_);
|
@@ -19,10 +19,12 @@ void LCDCharacterMenuComponent::setup() {
|
|
19
19
|
float LCDCharacterMenuComponent::get_setup_priority() const { return setup_priority::PROCESSOR - 1.0f; }
|
20
20
|
|
21
21
|
void LCDCharacterMenuComponent::dump_config() {
|
22
|
-
ESP_LOGCONFIG(TAG,
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
ESP_LOGCONFIG(TAG,
|
23
|
+
"LCD Menu\n"
|
24
|
+
" Columns: %u, Rows: %u\n"
|
25
|
+
" Mark characters: %02x, %02x, %02x, %02x",
|
26
|
+
this->columns_, this->rows_, this->mark_selected_, this->mark_editing_, this->mark_submenu_,
|
27
|
+
this->mark_back_);
|
26
28
|
if (this->is_failed()) {
|
27
29
|
ESP_LOGE(TAG, "The connected display failed, the menu is disabled!");
|
28
30
|
}
|
@@ -11,7 +11,7 @@ static const uint8_t LCD_DISPLAY_BACKLIGHT_ON = 0x08;
|
|
11
11
|
static const uint8_t LCD_DISPLAY_BACKLIGHT_OFF = 0x00;
|
12
12
|
|
13
13
|
void PCF8574LCDDisplay::setup() {
|
14
|
-
ESP_LOGCONFIG(TAG, "
|
14
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
15
15
|
this->backlight_value_ = LCD_DISPLAY_BACKLIGHT_ON;
|
16
16
|
if (!this->write_bytes(this->backlight_value_, nullptr, 0)) {
|
17
17
|
this->mark_failed();
|
@@ -21,12 +21,14 @@ void PCF8574LCDDisplay::setup() {
|
|
21
21
|
LCDDisplay::setup();
|
22
22
|
}
|
23
23
|
void PCF8574LCDDisplay::dump_config() {
|
24
|
-
ESP_LOGCONFIG(TAG,
|
25
|
-
|
24
|
+
ESP_LOGCONFIG(TAG,
|
25
|
+
"PCF8574 LCD Display:\n"
|
26
|
+
" Columns: %u, Rows: %u",
|
27
|
+
this->columns_, this->rows_);
|
26
28
|
LOG_I2C_DEVICE(this);
|
27
29
|
LOG_UPDATE_INTERVAL(this);
|
28
30
|
if (this->is_failed()) {
|
29
|
-
ESP_LOGE(TAG,
|
31
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
30
32
|
}
|
31
33
|
}
|
32
34
|
void PCF8574LCDDisplay::write_n_bits(uint8_t value, uint8_t n) {
|