esphome 2025.5.2__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 -1
- esphome/components/debug/debug_component.h +1 -1
- esphome/components/debug/debug_esp32.cpp +4 -2
- esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
- esphome/components/demo/__init__.py +206 -0
- esphome/components/demo/demo_alarm_control_panel.h +65 -0
- esphome/components/demo/demo_button.h +15 -0
- esphome/components/demo/demo_date.h +34 -0
- esphome/components/demo/demo_datetime.h +40 -0
- esphome/components/demo/demo_lock.h +17 -0
- esphome/components/demo/demo_select.h +15 -0
- esphome/components/demo/demo_text.h +18 -0
- esphome/components/demo/demo_time.h +34 -0
- esphome/components/demo/demo_valve.h +54 -0
- esphome/components/dfrobot_sen0395/commands.cpp +3 -3
- esphome/components/dht/dht.cpp +29 -50
- esphome/components/dht12/dht12.cpp +2 -2
- esphome/components/display/display.h +5 -3
- esphome/components/dps310/dps310.cpp +7 -5
- esphome/components/ds1307/ds1307.cpp +2 -2
- esphome/components/dsmr/dsmr.cpp +5 -3
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
- esphome/components/duty_time/duty_time_sensor.cpp +5 -3
- esphome/components/ee895/ee895.cpp +3 -3
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
- esphome/components/emc2101/emc2101.cpp +11 -9
- esphome/components/ens160_base/ens160_base.cpp +2 -2
- esphome/components/ens210/ens210.cpp +2 -2
- esphome/components/es7210/es7210.cpp +6 -4
- esphome/components/es7243e/es7243e.cpp +1 -1
- esphome/components/es8156/es8156.cpp +1 -1
- esphome/components/es8311/es8311.cpp +8 -6
- esphome/components/es8388/__init__.py +0 -0
- esphome/components/es8388/audio_dac.py +26 -0
- esphome/components/es8388/es8388.cpp +289 -0
- esphome/components/es8388/es8388.h +81 -0
- esphome/components/es8388/es8388_const.h +83 -0
- esphome/components/es8388/select/__init__.py +47 -0
- esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
- esphome/components/es8388/select/adc_input_mic_select.h +15 -0
- esphome/components/es8388/select/dac_output_select.cpp +12 -0
- esphome/components/es8388/select/dac_output_select.h +15 -0
- esphome/components/esp32/__init__.py +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/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 +1 -1
- 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_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/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/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.2.dist-info → esphome-2025.6.0b1.dist-info}/METADATA +12 -11
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/RECORD +715 -662
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/WHEEL +1 -1
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.5.2.dist-info → esphome-2025.6.0b1.dist-info}/top_level.txt +0 -0
@@ -72,22 +72,22 @@ void BMP581Component::dump_config() {
|
|
72
72
|
case NONE:
|
73
73
|
break;
|
74
74
|
case ERROR_COMMUNICATION_FAILED:
|
75
|
-
ESP_LOGE(TAG,
|
75
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
76
76
|
break;
|
77
77
|
case ERROR_WRONG_CHIP_ID:
|
78
|
-
ESP_LOGE(TAG, "
|
78
|
+
ESP_LOGE(TAG, "Unknown chip ID");
|
79
79
|
break;
|
80
80
|
case ERROR_SENSOR_RESET:
|
81
|
-
ESP_LOGE(TAG, "
|
81
|
+
ESP_LOGE(TAG, "Reset failed");
|
82
82
|
break;
|
83
83
|
case ERROR_SENSOR_STATUS:
|
84
|
-
ESP_LOGE(TAG, "
|
84
|
+
ESP_LOGE(TAG, "Get status failed");
|
85
85
|
break;
|
86
86
|
case ERROR_PRIME_IIR_FAILED:
|
87
|
-
ESP_LOGE(TAG, "
|
87
|
+
ESP_LOGE(TAG, "IIR Filter failed to prime with initial measurement");
|
88
88
|
break;
|
89
89
|
default:
|
90
|
-
ESP_LOGE(TAG, "
|
90
|
+
ESP_LOGE(TAG, "Error %d", (int) this->error_code_);
|
91
91
|
break;
|
92
92
|
}
|
93
93
|
|
@@ -98,14 +98,20 @@ void BMP581Component::dump_config() {
|
|
98
98
|
|
99
99
|
if (this->temperature_sensor_) {
|
100
100
|
LOG_SENSOR(" ", "Temperature", this->temperature_sensor_);
|
101
|
-
ESP_LOGCONFIG(TAG,
|
102
|
-
|
101
|
+
ESP_LOGCONFIG(TAG,
|
102
|
+
" IIR Filter: %s\n"
|
103
|
+
" Oversampling: %s",
|
104
|
+
LOG_STR_ARG(iir_filter_to_str(this->iir_temperature_level_)),
|
105
|
+
LOG_STR_ARG(oversampling_to_str(this->temperature_oversampling_)));
|
103
106
|
}
|
104
107
|
|
105
108
|
if (this->pressure_sensor_) {
|
106
109
|
LOG_SENSOR(" ", "Pressure", this->pressure_sensor_);
|
107
|
-
ESP_LOGCONFIG(TAG,
|
108
|
-
|
110
|
+
ESP_LOGCONFIG(TAG,
|
111
|
+
" IIR Filter: %s\n"
|
112
|
+
" Oversampling: %s",
|
113
|
+
LOG_STR_ARG(iir_filter_to_str(this->iir_pressure_level_)),
|
114
|
+
LOG_STR_ARG(oversampling_to_str(this->pressure_oversampling_)));
|
109
115
|
}
|
110
116
|
}
|
111
117
|
|
@@ -122,7 +128,7 @@ void BMP581Component::setup() {
|
|
122
128
|
*/
|
123
129
|
|
124
130
|
this->error_code_ = NONE;
|
125
|
-
ESP_LOGCONFIG(TAG, "
|
131
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
126
132
|
|
127
133
|
////////////////////
|
128
134
|
// 1) Soft reboot //
|
@@ -130,7 +136,7 @@ void BMP581Component::setup() {
|
|
130
136
|
|
131
137
|
// Power-On-Reboot bit is asserted if sensor successfully reset
|
132
138
|
if (!this->reset_()) {
|
133
|
-
ESP_LOGE(TAG, "
|
139
|
+
ESP_LOGE(TAG, "Reset failed");
|
134
140
|
|
135
141
|
this->error_code_ = ERROR_SENSOR_RESET;
|
136
142
|
this->mark_failed();
|
@@ -146,7 +152,7 @@ void BMP581Component::setup() {
|
|
146
152
|
|
147
153
|
// read chip id from sensor
|
148
154
|
if (!this->read_byte(BMP581_CHIP_ID, &chip_id)) {
|
149
|
-
ESP_LOGE(TAG, "
|
155
|
+
ESP_LOGE(TAG, "Read chip ID failed");
|
150
156
|
|
151
157
|
this->error_code_ = ERROR_COMMUNICATION_FAILED;
|
152
158
|
this->mark_failed();
|
@@ -156,7 +162,7 @@ void BMP581Component::setup() {
|
|
156
162
|
|
157
163
|
// verify id
|
158
164
|
if (chip_id != BMP581_ASIC_ID) {
|
159
|
-
ESP_LOGE(TAG, "Unknown chip ID
|
165
|
+
ESP_LOGE(TAG, "Unknown chip ID");
|
160
166
|
|
161
167
|
this->error_code_ = ERROR_WRONG_CHIP_ID;
|
162
168
|
this->mark_failed();
|
@@ -179,7 +185,7 @@ void BMP581Component::setup() {
|
|
179
185
|
|
180
186
|
// verify status_nvm_rdy bit (it is asserted if boot was successful)
|
181
187
|
if (!(this->status_.bit.status_nvm_rdy)) {
|
182
|
-
ESP_LOGE(TAG, "NVM not ready
|
188
|
+
ESP_LOGE(TAG, "NVM not ready");
|
183
189
|
|
184
190
|
this->error_code_ = ERROR_SENSOR_STATUS;
|
185
191
|
this->mark_failed();
|
@@ -189,7 +195,7 @@ void BMP581Component::setup() {
|
|
189
195
|
|
190
196
|
// verify status_nvm_err bit (it is asserted if an error is detected)
|
191
197
|
if (this->status_.bit.status_nvm_err) {
|
192
|
-
ESP_LOGE(TAG, "NVM error detected
|
198
|
+
ESP_LOGE(TAG, "NVM error detected");
|
193
199
|
|
194
200
|
this->error_code_ = ERROR_SENSOR_STATUS;
|
195
201
|
this->mark_failed();
|
@@ -254,7 +260,7 @@ void BMP581Component::setup() {
|
|
254
260
|
}
|
255
261
|
|
256
262
|
if (!this->prime_iir_filter_()) {
|
257
|
-
ESP_LOGE(TAG, "Failed to prime the IIR filter with an
|
263
|
+
ESP_LOGE(TAG, "Failed to prime the IIR filter with an initial measurement");
|
258
264
|
|
259
265
|
this->error_code_ = ERROR_PRIME_IIR_FAILED;
|
260
266
|
this->mark_failed();
|
@@ -286,10 +292,10 @@ void BMP581Component::update() {
|
|
286
292
|
// 1) Request a measurement //
|
287
293
|
//////////////////////////////
|
288
294
|
|
289
|
-
ESP_LOGVV(TAG, "Requesting
|
295
|
+
ESP_LOGVV(TAG, "Requesting measurement");
|
290
296
|
|
291
297
|
if (!this->start_measurement_()) {
|
292
|
-
ESP_LOGW(TAG, "
|
298
|
+
ESP_LOGW(TAG, "Requesting forced measurement failed");
|
293
299
|
this->status_set_warning();
|
294
300
|
|
295
301
|
return;
|
@@ -299,7 +305,7 @@ void BMP581Component::update() {
|
|
299
305
|
// 2) Wait for measurement to finish (based on oversampling rates) //
|
300
306
|
//////////////////////////////////////////////////////////////////////
|
301
307
|
|
302
|
-
ESP_LOGVV(TAG, "Measurement
|
308
|
+
ESP_LOGVV(TAG, "Measurement should take %d ms", this->conversion_time_);
|
303
309
|
|
304
310
|
this->set_timeout("measurement", this->conversion_time_, [this]() {
|
305
311
|
float temperature = 0.0;
|
@@ -311,14 +317,14 @@ void BMP581Component::update() {
|
|
311
317
|
|
312
318
|
if (this->pressure_sensor_) {
|
313
319
|
if (!this->read_temperature_and_pressure_(temperature, pressure)) {
|
314
|
-
ESP_LOGW(TAG, "Failed to read temperature and pressure
|
320
|
+
ESP_LOGW(TAG, "Failed to read temperature and pressure; skipping update");
|
315
321
|
this->status_set_warning();
|
316
322
|
|
317
323
|
return;
|
318
324
|
}
|
319
325
|
} else {
|
320
326
|
if (!this->read_temperature_(temperature)) {
|
321
|
-
ESP_LOGW(TAG, "Failed to read temperature
|
327
|
+
ESP_LOGW(TAG, "Failed to read temperature; skipping update");
|
322
328
|
this->status_set_warning();
|
323
329
|
|
324
330
|
return;
|
@@ -349,7 +355,7 @@ bool BMP581Component::check_data_readiness_() {
|
|
349
355
|
// - returns data readiness state
|
350
356
|
|
351
357
|
if (this->odr_config_.bit.pwr_mode == STANDBY_MODE) {
|
352
|
-
ESP_LOGD(TAG, "Data
|
358
|
+
ESP_LOGD(TAG, "Data not ready, sensor is in standby mode");
|
353
359
|
return false;
|
354
360
|
}
|
355
361
|
|
@@ -443,7 +449,7 @@ bool BMP581Component::read_temperature_(float &temperature) {
|
|
443
449
|
// - the measured temperature (in degrees Celsius)
|
444
450
|
|
445
451
|
if (!this->check_data_readiness_()) {
|
446
|
-
ESP_LOGW(TAG, "Data
|
452
|
+
ESP_LOGW(TAG, "Data not ready, skipping this update");
|
447
453
|
this->status_set_warning();
|
448
454
|
|
449
455
|
return false;
|
@@ -451,7 +457,7 @@ bool BMP581Component::read_temperature_(float &temperature) {
|
|
451
457
|
|
452
458
|
uint8_t data[3];
|
453
459
|
if (!this->read_bytes(BMP581_MEASUREMENT_DATA, &data[0], 3)) {
|
454
|
-
ESP_LOGW(TAG, "Failed to read
|
460
|
+
ESP_LOGW(TAG, "Failed to read measurement");
|
455
461
|
this->status_set_warning();
|
456
462
|
|
457
463
|
return false;
|
@@ -472,7 +478,7 @@ bool BMP581Component::read_temperature_and_pressure_(float &temperature, float &
|
|
472
478
|
// - the measured pressure (in Pa)
|
473
479
|
|
474
480
|
if (!this->check_data_readiness_()) {
|
475
|
-
ESP_LOGW(TAG, "Data
|
481
|
+
ESP_LOGW(TAG, "Data not ready, skipping this update");
|
476
482
|
this->status_set_warning();
|
477
483
|
|
478
484
|
return false;
|
@@ -480,7 +486,7 @@ bool BMP581Component::read_temperature_and_pressure_(float &temperature, float &
|
|
480
486
|
|
481
487
|
uint8_t data[6];
|
482
488
|
if (!this->read_bytes(BMP581_MEASUREMENT_DATA, &data[0], 6)) {
|
483
|
-
ESP_LOGW(TAG, "Failed to read
|
489
|
+
ESP_LOGW(TAG, "Failed to read measurement");
|
484
490
|
this->status_set_warning();
|
485
491
|
|
486
492
|
return false;
|
@@ -15,7 +15,7 @@ static const uint8_t BP1658CJ_ADDR_START_5CH = 0x30;
|
|
15
15
|
static const uint8_t BP1658CJ_DELAY = 2;
|
16
16
|
|
17
17
|
void BP1658CJ::setup() {
|
18
|
-
ESP_LOGCONFIG(TAG, "
|
18
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
19
19
|
this->data_pin_->setup();
|
20
20
|
this->data_pin_->digital_write(false);
|
21
21
|
this->clock_pin_->setup();
|
@@ -26,8 +26,10 @@ void BP1658CJ::dump_config() {
|
|
26
26
|
ESP_LOGCONFIG(TAG, "BP1658CJ:");
|
27
27
|
LOG_PIN(" Data Pin: ", this->data_pin_);
|
28
28
|
LOG_PIN(" Clock Pin: ", this->clock_pin_);
|
29
|
-
ESP_LOGCONFIG(TAG,
|
30
|
-
|
29
|
+
ESP_LOGCONFIG(TAG,
|
30
|
+
" Color Channels Max Power: %u\n"
|
31
|
+
" White Channels Max Power: %u",
|
32
|
+
this->max_power_color_channels_, this->max_power_white_channels_);
|
31
33
|
}
|
32
34
|
|
33
35
|
void BP1658CJ::loop() {
|
@@ -20,7 +20,7 @@ static const uint8_t BP5758D_ALL_DATA_CHANNEL_ENABLEMENT = 0b00011111;
|
|
20
20
|
static const uint8_t BP5758D_DELAY = 2;
|
21
21
|
|
22
22
|
void BP5758D::setup() {
|
23
|
-
ESP_LOGCONFIG(TAG, "
|
23
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
24
24
|
this->data_pin_->setup();
|
25
25
|
this->data_pin_->digital_write(false);
|
26
26
|
delayMicroseconds(BP5758D_DELAY);
|
@@ -108,6 +108,7 @@ async def register_button(var, config):
|
|
108
108
|
if not CORE.has_id(config[CONF_ID]):
|
109
109
|
var = cg.Pvariable(config[CONF_ID], var)
|
110
110
|
cg.add(cg.App.register_button(var))
|
111
|
+
CORE.register_platform_component("button", var)
|
111
112
|
await setup_button_core_(var, config)
|
112
113
|
|
113
114
|
|
@@ -7,7 +7,7 @@ namespace canbus {
|
|
7
7
|
static const char *const TAG = "canbus";
|
8
8
|
|
9
9
|
void Canbus::setup() {
|
10
|
-
ESP_LOGCONFIG(TAG, "
|
10
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
11
11
|
if (!this->setup_internal()) {
|
12
12
|
ESP_LOGE(TAG, "setup error!");
|
13
13
|
this->mark_failed();
|
@@ -8,7 +8,7 @@ namespace cap1188 {
|
|
8
8
|
static const char *const TAG = "cap1188";
|
9
9
|
|
10
10
|
void CAP1188Component::setup() {
|
11
|
-
ESP_LOGCONFIG(TAG, "
|
11
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
12
12
|
|
13
13
|
// Reset device using the reset pin
|
14
14
|
if (this->reset_pin_ != nullptr) {
|
@@ -52,9 +52,11 @@ void CAP1188Component::dump_config() {
|
|
52
52
|
ESP_LOGCONFIG(TAG, "CAP1188:");
|
53
53
|
LOG_I2C_DEVICE(this);
|
54
54
|
LOG_PIN(" Reset Pin: ", this->reset_pin_);
|
55
|
-
ESP_LOGCONFIG(TAG,
|
56
|
-
|
57
|
-
|
55
|
+
ESP_LOGCONFIG(TAG,
|
56
|
+
" Product ID: 0x%x\n"
|
57
|
+
" Manufacture ID: 0x%x\n"
|
58
|
+
" Revision ID: 0x%x",
|
59
|
+
this->cap1188_product_id_, this->cap1188_manufacture_id_, this->cap1188_revision_);
|
58
60
|
|
59
61
|
switch (this->error_code_) {
|
60
62
|
case COMMUNICATION_FAILED:
|
@@ -29,7 +29,7 @@ void CaptivePortal::handle_config(AsyncWebServerRequest *request) {
|
|
29
29
|
void CaptivePortal::handle_wifisave(AsyncWebServerRequest *request) {
|
30
30
|
std::string ssid = request->arg("ssid").c_str();
|
31
31
|
std::string psk = request->arg("psk").c_str();
|
32
|
-
ESP_LOGI(TAG, "
|
32
|
+
ESP_LOGI(TAG, "Requested WiFi Settings Change:");
|
33
33
|
ESP_LOGI(TAG, " SSID='%s'", ssid.c_str());
|
34
34
|
ESP_LOGI(TAG, " Password=" LOG_SECRET("'%s'"), psk.c_str());
|
35
35
|
wifi::global_wifi_component->save_wifi_sta(ssid, psk);
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#include "ccs811.h"
|
2
|
-
#include "esphome/core/log.h"
|
3
2
|
#include "esphome/core/hal.h"
|
3
|
+
#include "esphome/core/helpers.h"
|
4
|
+
#include "esphome/core/log.h"
|
4
5
|
|
5
6
|
namespace esphome {
|
6
7
|
namespace ccs811 {
|
@@ -163,7 +164,7 @@ void CCS811Component::dump_config() {
|
|
163
164
|
if (this->is_failed()) {
|
164
165
|
switch (this->error_code_) {
|
165
166
|
case COMMUNICATION_FAILED:
|
166
|
-
ESP_LOGW(TAG,
|
167
|
+
ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
|
167
168
|
break;
|
168
169
|
case INVALID_ID:
|
169
170
|
ESP_LOGW(TAG, "Sensor reported an invalid ID. Is this a CCS811?");
|
@@ -10,7 +10,7 @@ static const char *const TAG = "cd74hc4067";
|
|
10
10
|
float CD74HC4067Component::get_setup_priority() const { return setup_priority::DATA; }
|
11
11
|
|
12
12
|
void CD74HC4067Component::setup() {
|
13
|
-
ESP_LOGCONFIG(TAG, "
|
13
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
14
14
|
|
15
15
|
this->pin_s0_->setup();
|
16
16
|
this->pin_s1_->setup();
|
@@ -14,7 +14,7 @@ static const uint8_t CH422G_REG_OUT_UPPER = 0x23; // write reg for output bit
|
|
14
14
|
static const char *const TAG = "ch422g";
|
15
15
|
|
16
16
|
void CH422GComponent::setup() {
|
17
|
-
ESP_LOGCONFIG(TAG, "
|
17
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
18
18
|
// set outputs before mode
|
19
19
|
this->write_outputs_();
|
20
20
|
// Set mode and check for errors
|
@@ -37,7 +37,7 @@ void CH422GComponent::dump_config() {
|
|
37
37
|
ESP_LOGCONFIG(TAG, "CH422G:");
|
38
38
|
LOG_I2C_DEVICE(this)
|
39
39
|
if (this->is_failed()) {
|
40
|
-
ESP_LOGE(TAG,
|
40
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
41
41
|
}
|
42
42
|
}
|
43
43
|
|
@@ -4,7 +4,7 @@ namespace esphome {
|
|
4
4
|
namespace chsc6x {
|
5
5
|
|
6
6
|
void CHSC6XTouchscreen::setup() {
|
7
|
-
ESP_LOGCONFIG(TAG, "
|
7
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
8
8
|
if (this->interrupt_pin_ != nullptr) {
|
9
9
|
this->interrupt_pin_->setup();
|
10
10
|
this->attach_interrupt_(this->interrupt_pin_, gpio::INTERRUPT_FALLING_EDGE);
|
@@ -38,9 +38,11 @@ void CHSC6XTouchscreen::dump_config() {
|
|
38
38
|
ESP_LOGCONFIG(TAG, "CHSC6X Touchscreen:");
|
39
39
|
LOG_I2C_DEVICE(this);
|
40
40
|
LOG_PIN(" Interrupt Pin: ", this->interrupt_pin_);
|
41
|
-
ESP_LOGCONFIG(TAG,
|
42
|
-
|
43
|
-
|
41
|
+
ESP_LOGCONFIG(TAG,
|
42
|
+
" Touch timeout: %d\n"
|
43
|
+
" x_raw_max_: %d\n"
|
44
|
+
" y_raw_max_: %d",
|
45
|
+
this->touch_timeout_, this->x_raw_max_, this->y_raw_max_);
|
44
46
|
}
|
45
47
|
|
46
48
|
} // namespace chsc6x
|
@@ -443,6 +443,7 @@ async def register_climate(var, config):
|
|
443
443
|
if not CORE.has_id(config[CONF_ID]):
|
444
444
|
var = cg.Pvariable(config[CONF_ID], var)
|
445
445
|
cg.add(cg.App.register_climate(var))
|
446
|
+
CORE.register_platform_component("climate", var)
|
446
447
|
await setup_climate_core_(var, config)
|
447
448
|
|
448
449
|
|
@@ -569,17 +569,22 @@ bool Climate::set_custom_preset_(const std::string &preset) {
|
|
569
569
|
void Climate::dump_traits_(const char *tag) {
|
570
570
|
auto traits = this->get_traits();
|
571
571
|
ESP_LOGCONFIG(tag, "ClimateTraits:");
|
572
|
-
ESP_LOGCONFIG(tag,
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
572
|
+
ESP_LOGCONFIG(tag,
|
573
|
+
" [x] Visual settings:\n"
|
574
|
+
" - Min temperature: %.1f\n"
|
575
|
+
" - Max temperature: %.1f\n"
|
576
|
+
" - Temperature step:\n"
|
577
|
+
" Target: %.1f",
|
578
|
+
traits.get_visual_min_temperature(), traits.get_visual_max_temperature(),
|
579
|
+
traits.get_visual_target_temperature_step());
|
577
580
|
if (traits.get_supports_current_temperature()) {
|
578
581
|
ESP_LOGCONFIG(tag, " Current: %.1f", traits.get_visual_current_temperature_step());
|
579
582
|
}
|
580
583
|
if (traits.get_supports_target_humidity() || traits.get_supports_current_humidity()) {
|
581
|
-
ESP_LOGCONFIG(tag,
|
582
|
-
|
584
|
+
ESP_LOGCONFIG(tag,
|
585
|
+
" - Min humidity: %.0f\n"
|
586
|
+
" - Max humidity: %.0f",
|
587
|
+
traits.get_visual_min_humidity(), traits.get_visual_max_humidity());
|
583
588
|
}
|
584
589
|
if (traits.get_supports_two_point_target_temperature()) {
|
585
590
|
ESP_LOGCONFIG(tag, " [x] Supports two-point target temperature");
|
@@ -3,8 +3,8 @@
|
|
3
3
|
#include "esphome/core/component.h"
|
4
4
|
#include "esphome/core/entity_base.h"
|
5
5
|
#include "esphome/core/helpers.h"
|
6
|
-
#include "esphome/core/preferences.h"
|
7
6
|
#include "esphome/core/log.h"
|
7
|
+
#include "esphome/core/preferences.h"
|
8
8
|
#include "climate_mode.h"
|
9
9
|
#include "climate_traits.h"
|
10
10
|
|
@@ -75,10 +75,13 @@ void ClimateIR::control(const climate::ClimateCall &call) {
|
|
75
75
|
}
|
76
76
|
void ClimateIR::dump_config() {
|
77
77
|
LOG_CLIMATE("", "IR Climate", this);
|
78
|
-
ESP_LOGCONFIG(TAG,
|
79
|
-
|
80
|
-
|
81
|
-
|
78
|
+
ESP_LOGCONFIG(TAG,
|
79
|
+
" Min. Temperature: %.1f°C\n"
|
80
|
+
" Max. Temperature: %.1f°C\n"
|
81
|
+
" Supports HEAT: %s\n"
|
82
|
+
" Supports COOL: %s",
|
83
|
+
this->minimum_temperature_, this->maximum_temperature_, YESNO(this->supports_heat_),
|
84
|
+
YESNO(this->supports_cool_));
|
82
85
|
}
|
83
86
|
|
84
87
|
} // namespace climate_ir
|
@@ -0,0 +1 @@
|
|
1
|
+
"""CM1106 component for ESPHome."""
|
@@ -0,0 +1,112 @@
|
|
1
|
+
#include "cm1106.h"
|
2
|
+
#include "esphome/core/log.h"
|
3
|
+
|
4
|
+
#include <cinttypes>
|
5
|
+
|
6
|
+
namespace esphome {
|
7
|
+
namespace cm1106 {
|
8
|
+
|
9
|
+
static const char *const TAG = "cm1106";
|
10
|
+
static const uint8_t C_M1106_CMD_GET_CO2[4] = {0x11, 0x01, 0x01, 0xED};
|
11
|
+
static const uint8_t C_M1106_CMD_SET_CO2_CALIB[6] = {0x11, 0x03, 0x03, 0x00, 0x00, 0x00};
|
12
|
+
static const uint8_t C_M1106_CMD_SET_CO2_CALIB_RESPONSE[4] = {0x16, 0x01, 0x03, 0xE6};
|
13
|
+
|
14
|
+
uint8_t cm1106_checksum(const uint8_t *response, size_t len) {
|
15
|
+
uint8_t crc = 0;
|
16
|
+
for (int i = 0; i < len - 1; i++) {
|
17
|
+
crc -= response[i];
|
18
|
+
}
|
19
|
+
return crc;
|
20
|
+
}
|
21
|
+
|
22
|
+
void CM1106Component::setup() {
|
23
|
+
ESP_LOGCONFIG(TAG, "Running setup");
|
24
|
+
uint8_t response[8] = {0};
|
25
|
+
if (!this->cm1106_write_command_(C_M1106_CMD_GET_CO2, sizeof(C_M1106_CMD_GET_CO2), response, sizeof(response))) {
|
26
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
27
|
+
this->mark_failed();
|
28
|
+
return;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
void CM1106Component::update() {
|
33
|
+
uint8_t response[8] = {0};
|
34
|
+
if (!this->cm1106_write_command_(C_M1106_CMD_GET_CO2, sizeof(C_M1106_CMD_GET_CO2), response, sizeof(response))) {
|
35
|
+
ESP_LOGW(TAG, "Reading data from CM1106 failed!");
|
36
|
+
this->status_set_warning();
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
|
40
|
+
if (response[0] != 0x16 || response[1] != 0x05 || response[2] != 0x01) {
|
41
|
+
ESP_LOGW(TAG, "Got wrong UART response from CM1106: %02X %02X %02X %02X", response[0], response[1], response[2],
|
42
|
+
response[3]);
|
43
|
+
this->status_set_warning();
|
44
|
+
return;
|
45
|
+
}
|
46
|
+
|
47
|
+
uint8_t checksum = cm1106_checksum(response, sizeof(response));
|
48
|
+
if (response[7] != checksum) {
|
49
|
+
ESP_LOGW(TAG, "CM1106 Checksum doesn't match: 0x%02X!=0x%02X", response[7], checksum);
|
50
|
+
this->status_set_warning();
|
51
|
+
return;
|
52
|
+
}
|
53
|
+
|
54
|
+
this->status_clear_warning();
|
55
|
+
|
56
|
+
uint16_t ppm = response[3] << 8 | response[4];
|
57
|
+
ESP_LOGD(TAG, "CM1106 Received CO₂=%uppm DF3=%02X DF4=%02X", ppm, response[5], response[6]);
|
58
|
+
if (this->co2_sensor_ != nullptr)
|
59
|
+
this->co2_sensor_->publish_state(ppm);
|
60
|
+
}
|
61
|
+
|
62
|
+
void CM1106Component::calibrate_zero(uint16_t ppm) {
|
63
|
+
uint8_t cmd[6];
|
64
|
+
memcpy(cmd, C_M1106_CMD_SET_CO2_CALIB, sizeof(cmd));
|
65
|
+
cmd[3] = ppm >> 8;
|
66
|
+
cmd[4] = ppm & 0xFF;
|
67
|
+
uint8_t response[4] = {0};
|
68
|
+
|
69
|
+
if (!this->cm1106_write_command_(cmd, sizeof(cmd), response, sizeof(response))) {
|
70
|
+
ESP_LOGW(TAG, "Reading data from CM1106 failed!");
|
71
|
+
this->status_set_warning();
|
72
|
+
return;
|
73
|
+
}
|
74
|
+
|
75
|
+
// check if correct response received
|
76
|
+
if (memcmp(response, C_M1106_CMD_SET_CO2_CALIB_RESPONSE, sizeof(response)) != 0) {
|
77
|
+
ESP_LOGW(TAG, "Got wrong UART response from CM1106: %02X %02X %02X %02X", response[0], response[1], response[2],
|
78
|
+
response[3]);
|
79
|
+
this->status_set_warning();
|
80
|
+
return;
|
81
|
+
}
|
82
|
+
|
83
|
+
this->status_clear_warning();
|
84
|
+
ESP_LOGD(TAG, "CM1106 Successfully calibrated sensor to %uppm", ppm);
|
85
|
+
}
|
86
|
+
|
87
|
+
bool CM1106Component::cm1106_write_command_(const uint8_t *command, size_t command_len, uint8_t *response,
|
88
|
+
size_t response_len) {
|
89
|
+
// Empty RX Buffer
|
90
|
+
while (this->available())
|
91
|
+
this->read();
|
92
|
+
this->write_array(command, command_len - 1);
|
93
|
+
this->write_byte(cm1106_checksum(command, command_len));
|
94
|
+
this->flush();
|
95
|
+
|
96
|
+
if (response == nullptr)
|
97
|
+
return true;
|
98
|
+
|
99
|
+
return this->read_array(response, response_len);
|
100
|
+
}
|
101
|
+
|
102
|
+
void CM1106Component::dump_config() {
|
103
|
+
ESP_LOGCONFIG(TAG, "CM1106:");
|
104
|
+
LOG_SENSOR(" ", "CO2", this->co2_sensor_);
|
105
|
+
this->check_uart_settings(9600);
|
106
|
+
if (this->is_failed()) {
|
107
|
+
ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
} // namespace cm1106
|
112
|
+
} // namespace esphome
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include "esphome/core/component.h"
|
4
|
+
#include "esphome/core/automation.h"
|
5
|
+
#include "esphome/components/sensor/sensor.h"
|
6
|
+
#include "esphome/components/uart/uart.h"
|
7
|
+
|
8
|
+
namespace esphome {
|
9
|
+
namespace cm1106 {
|
10
|
+
|
11
|
+
class CM1106Component : public PollingComponent, public uart::UARTDevice {
|
12
|
+
public:
|
13
|
+
float get_setup_priority() const override { return esphome::setup_priority::DATA; }
|
14
|
+
|
15
|
+
void setup() override;
|
16
|
+
void update() override;
|
17
|
+
void dump_config() override;
|
18
|
+
|
19
|
+
void calibrate_zero(uint16_t ppm);
|
20
|
+
|
21
|
+
void set_co2_sensor(sensor::Sensor *co2_sensor) { this->co2_sensor_ = co2_sensor; }
|
22
|
+
|
23
|
+
protected:
|
24
|
+
sensor::Sensor *co2_sensor_{nullptr};
|
25
|
+
|
26
|
+
bool cm1106_write_command_(const uint8_t *command, size_t command_len, uint8_t *response, size_t response_len);
|
27
|
+
};
|
28
|
+
|
29
|
+
template<typename... Ts> class CM1106CalibrateZeroAction : public Action<Ts...> {
|
30
|
+
public:
|
31
|
+
CM1106CalibrateZeroAction(CM1106Component *cm1106) : cm1106_(cm1106) {}
|
32
|
+
|
33
|
+
void play(Ts... x) override { this->cm1106_->calibrate_zero(400); }
|
34
|
+
|
35
|
+
protected:
|
36
|
+
CM1106Component *cm1106_;
|
37
|
+
};
|
38
|
+
|
39
|
+
} // namespace cm1106
|
40
|
+
} // namespace esphome
|
@@ -0,0 +1,72 @@
|
|
1
|
+
"""CM1106 Sensor component for ESPHome."""
|
2
|
+
|
3
|
+
import esphome.codegen as cg
|
4
|
+
import esphome.config_validation as cv
|
5
|
+
from esphome import automation
|
6
|
+
from esphome.automation import maybe_simple_id
|
7
|
+
from esphome.components import sensor, uart
|
8
|
+
from esphome.const import (
|
9
|
+
CONF_CO2,
|
10
|
+
CONF_ID,
|
11
|
+
DEVICE_CLASS_CARBON_DIOXIDE,
|
12
|
+
ICON_MOLECULE_CO2,
|
13
|
+
STATE_CLASS_MEASUREMENT,
|
14
|
+
UNIT_PARTS_PER_MILLION,
|
15
|
+
)
|
16
|
+
|
17
|
+
DEPENDENCIES = ["uart"]
|
18
|
+
CODEOWNERS = ["@andrewjswan"]
|
19
|
+
|
20
|
+
cm1106_ns = cg.esphome_ns.namespace("cm1106")
|
21
|
+
CM1106Component = cm1106_ns.class_(
|
22
|
+
"CM1106Component", cg.PollingComponent, uart.UARTDevice
|
23
|
+
)
|
24
|
+
CM1106CalibrateZeroAction = cm1106_ns.class_(
|
25
|
+
"CM1106CalibrateZeroAction",
|
26
|
+
automation.Action,
|
27
|
+
)
|
28
|
+
|
29
|
+
CONFIG_SCHEMA = (
|
30
|
+
cv.Schema(
|
31
|
+
{
|
32
|
+
cv.GenerateID(): cv.declare_id(CM1106Component),
|
33
|
+
cv.Optional(CONF_CO2): sensor.sensor_schema(
|
34
|
+
unit_of_measurement=UNIT_PARTS_PER_MILLION,
|
35
|
+
icon=ICON_MOLECULE_CO2,
|
36
|
+
accuracy_decimals=0,
|
37
|
+
device_class=DEVICE_CLASS_CARBON_DIOXIDE,
|
38
|
+
state_class=STATE_CLASS_MEASUREMENT,
|
39
|
+
),
|
40
|
+
},
|
41
|
+
)
|
42
|
+
.extend(cv.polling_component_schema("60s"))
|
43
|
+
.extend(uart.UART_DEVICE_SCHEMA)
|
44
|
+
)
|
45
|
+
|
46
|
+
|
47
|
+
async def to_code(config) -> None:
|
48
|
+
"""Code generation entry point."""
|
49
|
+
var = cg.new_Pvariable(config[CONF_ID])
|
50
|
+
await cg.register_component(var, config)
|
51
|
+
await uart.register_uart_device(var, config)
|
52
|
+
if co2_config := config.get(CONF_CO2):
|
53
|
+
sens = await sensor.new_sensor(co2_config)
|
54
|
+
cg.add(var.set_co2_sensor(sens))
|
55
|
+
|
56
|
+
|
57
|
+
CALIBRATION_ACTION_SCHEMA = maybe_simple_id(
|
58
|
+
{
|
59
|
+
cv.GenerateID(): cv.use_id(CM1106Component),
|
60
|
+
},
|
61
|
+
)
|
62
|
+
|
63
|
+
|
64
|
+
@automation.register_action(
|
65
|
+
"cm1106.calibrate_zero",
|
66
|
+
CM1106CalibrateZeroAction,
|
67
|
+
CALIBRATION_ACTION_SCHEMA,
|
68
|
+
)
|
69
|
+
async def cm1106_calibration_to_code(config, action_id, template_arg, args) -> None:
|
70
|
+
"""Service code generation entry point."""
|
71
|
+
paren = await cg.get_variable(config[CONF_ID])
|
72
|
+
return cg.new_Pvariable(action_id, template_arg, paren)
|