esphome 2025.6.3__py3-none-any.whl → 2025.7.0b2__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 +1 -3
- esphome/codegen.py +2 -0
- esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
- esphome/components/adc/__init__.py +25 -1
- esphome/components/adc/adc_sensor.h +11 -11
- esphome/components/adc/adc_sensor_common.cpp +1 -1
- esphome/components/adc/adc_sensor_esp32.cpp +16 -8
- esphome/components/ade7880/ade7880.h +0 -2
- esphome/components/ads1115/ads1115.h +0 -1
- esphome/components/ads1118/ads1118.h +0 -1
- esphome/components/ags10/ags10.h +0 -2
- esphome/components/aic3204/aic3204.h +0 -1
- esphome/components/alarm_control_panel/__init__.py +5 -2
- esphome/components/alpha3/alpha3.h +0 -1
- esphome/components/am43/cover/am43_cover.h +0 -1
- esphome/components/am43/sensor/am43_sensor.h +0 -1
- esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
- esphome/components/anova/anova.cpp +5 -1
- esphome/components/anova/anova.h +0 -1
- esphome/components/apds9960/apds9960.cpp +1 -1
- esphome/components/api/__init__.py +57 -21
- esphome/components/api/api_connection.cpp +344 -539
- esphome/components/api/api_connection.h +224 -141
- esphome/components/api/api_frame_helper.cpp +91 -127
- esphome/components/api/api_frame_helper.h +64 -54
- esphome/components/api/api_pb2.cpp +1837 -9044
- esphome/components/api/api_pb2.h +532 -685
- esphome/components/api/api_pb2_dump.cpp +4432 -0
- esphome/components/api/api_pb2_service.cpp +184 -425
- esphome/components/api/api_pb2_service.h +13 -6
- esphome/components/api/api_server.cpp +131 -167
- esphome/components/api/api_server.h +38 -10
- esphome/components/api/client.py +8 -2
- esphome/components/api/custom_api_device.h +8 -0
- esphome/components/api/list_entities.cpp +37 -104
- esphome/components/api/list_entities.h +33 -23
- esphome/components/api/proto.h +532 -26
- esphome/components/api/subscribe_state.cpp +23 -29
- esphome/components/api/subscribe_state.h +26 -19
- esphome/components/api/user_services.h +2 -0
- esphome/components/as5600/as5600.h +0 -1
- esphome/components/async_tcp/__init__.py +14 -5
- esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
- esphome/components/atm90e32/atm90e32.cpp +2 -1
- esphome/components/audio/audio_decoder.cpp +1 -1
- esphome/components/audio/audio_transfer_buffer.cpp +2 -2
- esphome/components/b_parasite/b_parasite.h +0 -1
- esphome/components/bedjet/bedjet_hub.cpp +5 -1
- esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
- esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
- esphome/components/bh1750/bh1750.cpp +5 -5
- esphome/components/binary_sensor/__init__.py +82 -5
- esphome/components/binary_sensor/automation.h +19 -1
- esphome/components/binary_sensor/binary_sensor.cpp +12 -30
- esphome/components/binary_sensor/binary_sensor.h +11 -25
- esphome/components/binary_sensor/filter.cpp +29 -24
- esphome/components/binary_sensor/filter.h +20 -10
- esphome/components/ble_client/output/ble_binary_output.h +0 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
- esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
- esphome/components/ble_client/sensor/ble_sensor.h +0 -1
- esphome/components/ble_client/switch/ble_switch.h +0 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
- esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
- esphome/components/ble_presence/ble_presence_device.h +0 -1
- esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
- esphome/components/ble_scanner/ble_scanner.h +0 -1
- esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
- esphome/components/bme680/sensor.py +1 -1
- esphome/components/bmp581/bmp581.h +0 -2
- esphome/components/button/__init__.py +5 -2
- esphome/components/camera/__init__.py +1 -0
- esphome/components/camera/camera.cpp +22 -0
- esphome/components/camera/camera.h +80 -0
- esphome/components/canbus/__init__.py +1 -0
- esphome/components/cap1188/cap1188.h +0 -1
- esphome/components/captive_portal/__init__.py +12 -2
- esphome/components/captive_portal/captive_portal.cpp +12 -2
- esphome/components/captive_portal/captive_portal.h +5 -2
- esphome/components/ccs811/ccs811.h +0 -2
- esphome/components/climate/__init__.py +5 -2
- esphome/components/cm1106/sensor.py +2 -2
- esphome/components/const/__init__.py +2 -0
- esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
- esphome/components/copy/button/copy_button.h +0 -1
- esphome/components/copy/cover/copy_cover.h +0 -1
- esphome/components/copy/fan/copy_fan.h +0 -1
- esphome/components/copy/lock/copy_lock.h +0 -1
- esphome/components/copy/number/copy_number.h +0 -1
- esphome/components/copy/select/copy_select.h +0 -1
- esphome/components/copy/sensor/copy_sensor.h +0 -1
- esphome/components/copy/switch/copy_switch.h +0 -1
- esphome/components/copy/text/copy_text.h +0 -1
- esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
- esphome/components/cover/__init__.py +5 -2
- esphome/components/cs5460a/cs5460a.h +0 -1
- esphome/components/datetime/__init__.py +4 -2
- esphome/components/debug/__init__.py +20 -0
- esphome/components/debug/debug_esp32.cpp +2 -0
- esphome/components/deep_sleep/__init__.py +43 -9
- esphome/components/demo/__init__.py +2 -2
- esphome/components/display/display.cpp +4 -3
- esphome/components/display/display.h +0 -2
- esphome/components/display/display_buffer.cpp +1 -1
- esphome/components/ds2484/__init__.py +1 -0
- esphome/components/ds2484/ds2484.cpp +209 -0
- esphome/components/ds2484/ds2484.h +43 -0
- esphome/components/ds2484/one_wire.py +37 -0
- esphome/components/duty_time/duty_time_sensor.h +0 -1
- esphome/components/ens160_base/ens160_base.h +0 -1
- esphome/components/es7210/es7210.h +0 -1
- esphome/components/es7243e/es7243e.h +0 -1
- esphome/components/es8156/es8156.h +0 -1
- esphome/components/es8311/es8311.h +0 -1
- esphome/components/es8388/es8388.h +0 -1
- esphome/components/esp32/__init__.py +103 -135
- esphome/components/esp32/core.cpp +0 -4
- esphome/components/esp32/gpio.h +1 -1
- esphome/components/esp32/helpers.cpp +69 -0
- esphome/components/esp32_ble/ble.cpp +5 -6
- esphome/components/esp32_ble/ble.h +29 -14
- esphome/components/esp32_ble/ble_event.h +6 -6
- esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
- esphome/components/esp32_ble_client/ble_client_base.h +24 -9
- esphome/components/esp32_ble_tracker/__init__.py +2 -8
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
- esphome/components/esp32_camera/__init__.py +112 -98
- esphome/components/esp32_camera/esp32_camera.cpp +41 -31
- esphome/components/esp32_camera/esp32_camera.h +35 -30
- esphome/components/esp32_camera_web_server/__init__.py +2 -1
- esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
- esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
- esphome/components/esp32_hall/sensor.py +2 -21
- esphome/components/esp32_hosted/__init__.py +101 -0
- esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
- esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
- esphome/components/esp32_rmt/__init__.py +0 -58
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
- esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
- esphome/components/esp32_rmt_led_strip/light.py +14 -76
- esphome/components/esp32_touch/esp32_touch.h +174 -28
- esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
- esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
- esphome/components/esp8266/__init__.py +2 -0
- esphome/components/esp8266/gpio.cpp +10 -10
- esphome/components/esp8266/helpers.cpp +31 -0
- esphome/components/esphome/ota/__init__.py +1 -0
- esphome/components/esphome/ota/ota_esphome.cpp +24 -19
- esphome/components/ethernet/__init__.py +42 -23
- esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
- esphome/components/ethernet/ethernet_component.cpp +69 -29
- esphome/components/ethernet/ethernet_component.h +18 -10
- esphome/components/event/__init__.py +5 -2
- esphome/components/ezo/ezo.h +0 -1
- esphome/components/ezo_pmp/ezo_pmp.h +0 -1
- esphome/components/fan/__init__.py +5 -2
- esphome/components/feedback/feedback_cover.h +0 -1
- esphome/components/font/__init__.py +92 -82
- esphome/components/font/font.cpp +9 -2
- esphome/components/font/font.h +20 -5
- esphome/components/fs3000/fs3000.h +0 -1
- esphome/components/gcja5/gcja5.h +0 -1
- esphome/components/gl_r01_i2c/__init__.py +0 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
- esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
- esphome/components/gl_r01_i2c/sensor.py +36 -0
- esphome/components/gp8403/gp8403.h +0 -1
- esphome/components/gpio/binary_sensor/__init__.py +17 -0
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
- esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
- esphome/components/he60r/he60r.h +0 -1
- esphome/components/heatpumpir/climate.py +2 -1
- esphome/components/heatpumpir/heatpumpir.cpp +1 -0
- esphome/components/heatpumpir/heatpumpir.h +1 -0
- esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
- esphome/components/host/__init__.py +3 -1
- esphome/components/host/helpers.cpp +57 -0
- esphome/components/http_request/__init__.py +19 -1
- esphome/components/http_request/http_request.h +1 -1
- esphome/components/http_request/http_request_arduino.h +1 -0
- esphome/components/http_request/ota/ota_http_request.cpp +1 -1
- esphome/components/http_request/update/http_request_update.cpp +28 -9
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
- esphome/components/hydreon_rgxx/sensor.py +1 -1
- esphome/components/i2c/__init__.py +23 -11
- esphome/components/i2c/i2c_bus.h +8 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
- esphome/components/i2c/i2c_bus_arduino.h +6 -3
- esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
- esphome/components/i2c_device/i2c_device.h +0 -1
- esphome/components/i2s_audio/__init__.py +2 -10
- esphome/components/i2s_audio/i2s_audio.cpp +1 -5
- esphome/components/i2s_audio/media_player/__init__.py +2 -2
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
- esphome/components/iaqcore/iaqcore.h +0 -2
- esphome/components/image/__init__.py +123 -24
- esphome/components/improv_serial/improv_serial_component.cpp +0 -4
- esphome/components/ina219/ina219.cpp +7 -0
- esphome/components/ina219/ina219.h +1 -0
- esphome/components/ina260/ina260.h +0 -2
- esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
- esphome/components/inkplate6/display.py +15 -0
- esphome/components/inkplate6/inkplate.cpp +2 -2
- esphome/components/integration/integration_sensor.h +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +8 -27
- esphome/components/internal_temperature/sensor.py +0 -26
- esphome/components/interval/interval.h +0 -2
- esphome/components/ld2410/button/__init__.py +3 -3
- esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2410/ld2410.cpp +421 -268
- esphome/components/ld2410/ld2410.h +44 -146
- esphome/components/ld2410/number/__init__.py +2 -2
- esphome/components/ld2410/sensor.py +1 -1
- esphome/components/ld2410/switch/__init__.py +1 -1
- esphome/components/ld2420/ld2420.cpp +196 -100
- esphome/components/ld2420/ld2420.h +46 -118
- esphome/components/ld2420/number/__init__.py +2 -2
- esphome/components/ld2420/sensor/__init__.py +6 -2
- esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
- esphome/components/ld2450/button/__init__.py +3 -3
- esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
- esphome/components/ld2450/ld2450.cpp +384 -232
- esphome/components/ld2450/ld2450.h +60 -69
- esphome/components/ld2450/switch/__init__.py +1 -1
- esphome/components/ledc/ledc_output.cpp +1 -63
- esphome/components/libretiny/__init__.py +5 -3
- esphome/components/libretiny/const.py +5 -0
- esphome/components/libretiny/generate_components.py +1 -0
- esphome/components/libretiny/helpers.cpp +35 -0
- esphome/components/libretiny/lt_component.cpp +5 -3
- esphome/components/light/__init__.py +4 -2
- esphome/components/light/addressable_light.h +3 -3
- esphome/components/light/light_call.cpp +180 -243
- esphome/components/light/light_call.h +72 -20
- esphome/components/light/light_color_values.h +14 -14
- esphome/components/light/light_state.h +15 -13
- esphome/components/light/transformers.h +2 -2
- esphome/components/ln882x/__init__.py +52 -0
- esphome/components/ln882x/boards.py +285 -0
- esphome/components/lock/__init__.py +5 -2
- esphome/components/logger/__init__.py +40 -3
- esphome/components/logger/logger.cpp +47 -12
- esphome/components/logger/logger.h +80 -49
- esphome/components/logger/logger_esp32.cpp +3 -3
- esphome/components/lps22/__init__.py +0 -0
- esphome/components/lps22/lps22.cpp +75 -0
- esphome/components/lps22/lps22.h +27 -0
- esphome/components/lps22/sensor.py +58 -0
- esphome/components/ltr390/ltr390.h +0 -1
- esphome/components/ltr501/ltr501.h +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
- esphome/components/lvgl/__init__.py +1 -1
- esphome/components/lvgl/schemas.py +66 -6
- esphome/components/lvgl/styles.py +24 -16
- esphome/components/lvgl/widgets/__init__.py +12 -2
- esphome/components/lvgl/widgets/lv_bar.py +40 -19
- esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
- esphome/components/max9611/max9611.h +0 -1
- esphome/components/mcp23016/__init__.py +1 -1
- esphome/components/mcp23xxx_base/__init__.py +1 -1
- esphome/components/mcp4461/__init__.py +1 -1
- esphome/components/mcp4461/output/__init__.py +3 -2
- esphome/components/mcp9600/mcp9600.h +0 -2
- esphome/components/md5/md5.cpp +3 -3
- esphome/components/md5/md5.h +1 -6
- esphome/components/mdns/__init__.py +22 -11
- esphome/components/media_player/__init__.py +4 -3
- esphome/components/micro_wake_word/__init__.py +1 -5
- esphome/components/micro_wake_word/streaming_model.cpp +2 -2
- esphome/components/microphone/microphone.cpp +7 -9
- esphome/components/microphone/microphone.h +0 -2
- esphome/components/mipi_spi/display.py +1 -0
- esphome/components/mmc5603/mmc5603.cpp +1 -1
- esphome/components/modbus/modbus.cpp +33 -15
- esphome/components/modbus/modbus.h +9 -0
- esphome/components/modbus_controller/__init__.py +42 -10
- esphome/components/modbus_controller/modbus_controller.cpp +92 -11
- esphome/components/modbus_controller/modbus_controller.h +61 -7
- esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
- esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
- esphome/components/mpl3115a2/mpl3115a2.h +0 -2
- esphome/components/mqtt/__init__.py +16 -0
- esphome/components/mqtt/mqtt_backend.h +2 -1
- esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
- esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
- esphome/components/mqtt/mqtt_client.cpp +15 -9
- esphome/components/mqtt/mqtt_client.h +8 -3
- esphome/components/ms8607/ms8607.h +0 -1
- esphome/components/neopixelbus/light.py +4 -1
- esphome/components/neopixelbus/neopixelbus_light.h +1 -1
- esphome/components/network/__init__.py +4 -1
- esphome/components/network/ip_address.h +1 -0
- esphome/components/nextion/__init__.py +16 -0
- esphome/components/nextion/base_component.py +1 -0
- esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
- esphome/components/nextion/display.py +14 -4
- esphome/components/nextion/nextion.cpp +166 -101
- esphome/components/nextion/nextion.h +84 -53
- esphome/components/nextion/nextion_commands.cpp +11 -10
- esphome/components/nextion/nextion_component.cpp +28 -28
- esphome/components/nextion/nextion_component.h +53 -18
- esphome/components/nextion/nextion_component_base.h +3 -0
- esphome/components/nextion/nextion_upload.cpp +36 -0
- esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
- esphome/components/nextion/nextion_upload_idf.cpp +9 -33
- esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
- esphome/components/nextion/switch/nextion_switch.cpp +1 -1
- esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
- esphome/components/nfc/nfc.cpp +3 -22
- esphome/components/nfc/nfc.h +3 -3
- esphome/components/number/__init__.py +5 -2
- esphome/components/online_image/__init__.py +5 -0
- esphome/components/online_image/online_image.cpp +6 -2
- esphome/components/online_image/online_image.h +4 -1
- esphome/components/opentherm/opentherm.cpp +7 -12
- esphome/components/openthread/__init__.py +47 -40
- esphome/components/openthread/const.py +1 -0
- esphome/components/openthread/openthread_esp.cpp +27 -5
- esphome/components/opt3001/__init__.py +0 -0
- esphome/components/opt3001/opt3001.cpp +122 -0
- esphome/components/opt3001/opt3001.h +27 -0
- esphome/components/opt3001/sensor.py +35 -0
- esphome/components/ota/__init__.py +17 -0
- esphome/components/ota/ota_backend.h +27 -1
- esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
- esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
- esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
- esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
- esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
- esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
- esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
- esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
- esphome/components/ota/ota_backend_esp_idf.h +1 -0
- esphome/components/packages/__init__.py +5 -2
- esphome/components/packet_transport/binary_sensor.py +61 -4
- esphome/components/packet_transport/packet_transport.cpp +34 -1
- esphome/components/packet_transport/packet_transport.h +11 -5
- esphome/components/pcf8574/__init__.py +1 -1
- esphome/components/pi4ioe5v6408/__init__.py +84 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
- esphome/components/pmsa003i/pmsa003i.h +0 -1
- esphome/components/pmsx003/pmsx003.h +0 -1
- esphome/components/pn7150/pn7150.cpp +7 -7
- esphome/components/pn7150/pn7150.h +0 -1
- esphome/components/pn7160/pn7160.cpp +7 -7
- esphome/components/pn7160/pn7160.h +0 -1
- esphome/components/preferences/syncer.h +2 -0
- esphome/components/prometheus/prometheus_handler.h +1 -1
- esphome/components/psram/psram.cpp +0 -20
- esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
- esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
- esphome/components/pulse_width/pulse_width.h +0 -1
- esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
- esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
- esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
- esphome/components/qr_code/__init__.py +13 -10
- esphome/components/qwiic_pir/qwiic_pir.h +0 -1
- esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
- esphome/components/rc522/rc522.h +0 -1
- esphome/components/rdm6300/rdm6300.h +0 -2
- esphome/components/remote_base/__init__.py +7 -5
- esphome/components/remote_base/remote_base.cpp +24 -21
- esphome/components/remote_base/remote_base.h +3 -26
- esphome/components/remote_receiver/__init__.py +40 -46
- esphome/components/remote_receiver/remote_receiver.h +4 -18
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
- esphome/components/remote_transmitter/__init__.py +42 -43
- esphome/components/remote_transmitter/remote_transmitter.h +2 -14
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
- esphome/components/resistance/resistance_sensor.h +0 -1
- esphome/components/rp2040/__init__.py +2 -0
- esphome/components/rp2040/helpers.cpp +55 -0
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
- esphome/components/rtttl/__init__.py +4 -4
- esphome/components/rtttl/rtttl.cpp +10 -1
- esphome/components/ruuvitag/ruuvitag.h +0 -1
- esphome/components/safe_mode/safe_mode.cpp +2 -0
- esphome/components/safe_mode/safe_mode.h +4 -1
- esphome/components/scd30/scd30.h +0 -1
- esphome/components/scd30/sensor.py +2 -2
- esphome/components/scd4x/scd4x.cpp +61 -54
- esphome/components/scd4x/scd4x.h +17 -15
- esphome/components/scd4x/sensor.py +4 -4
- esphome/components/script/script.h +0 -2
- esphome/components/sdp3x/sensor.py +1 -1
- esphome/components/select/__init__.py +5 -2
- esphome/components/sen5x/sen5x.h +0 -1
- esphome/components/senseair/senseair.h +0 -1
- esphome/components/sensor/__init__.py +4 -2
- esphome/components/sensor/filter.cpp +1 -1
- esphome/components/sensor/sensor.cpp +12 -6
- esphome/components/sensor/sensor.h +13 -5
- esphome/components/servo/servo.h +0 -1
- esphome/components/sfa30/sfa30.h +0 -1
- esphome/components/sgp30/sgp30.h +0 -1
- esphome/components/sgp4x/sgp4x.h +0 -1
- esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
- esphome/components/sht4x/sht4x.h +0 -1
- esphome/components/sm300d2/sm300d2.h +0 -2
- esphome/components/smt100/sensor.py +8 -4
- esphome/components/smt100/smt100.cpp +5 -5
- esphome/components/smt100/smt100.h +3 -3
- esphome/components/sn74hc595/__init__.py +1 -1
- esphome/components/sn74hc595/sn74hc595.cpp +5 -4
- esphome/components/sntp/sntp_component.cpp +9 -3
- esphome/components/sntp/time.py +2 -0
- esphome/components/socket/__init__.py +17 -0
- esphome/components/spi/__init__.py +27 -6
- esphome/components/spi/spi.cpp +3 -2
- esphome/components/spi/spi.h +9 -3
- esphome/components/spi/spi_arduino.cpp +3 -5
- esphome/components/spi/spi_esp_idf.cpp +40 -21
- esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
- esphome/components/sps30/sps30.h +0 -1
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/st7701s/st7701s.cpp +0 -4
- esphome/components/status/status_binary_sensor.h +0 -2
- esphome/components/substitutions/__init__.py +76 -19
- esphome/components/substitutions/jinja.py +99 -0
- esphome/components/sun/sun.cpp +3 -4
- esphome/components/switch/__init__.py +5 -2
- esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
- esphome/components/sx126x/__init__.py +317 -0
- esphome/components/sx126x/automation.h +62 -0
- esphome/components/sx126x/packet_transport/__init__.py +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
- esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
- esphome/components/sx126x/sx126x.cpp +523 -0
- esphome/components/sx126x/sx126x.h +140 -0
- esphome/components/sx126x/sx126x_reg.h +163 -0
- esphome/components/sx127x/__init__.py +325 -0
- esphome/components/sx127x/automation.h +62 -0
- esphome/components/sx127x/packet_transport/__init__.py +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
- esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
- esphome/components/sx127x/sx127x.cpp +498 -0
- esphome/components/sx127x/sx127x.h +128 -0
- esphome/components/sx127x/sx127x_reg.h +295 -0
- esphome/components/syslog/esphome_syslog.cpp +5 -3
- esphome/components/syslog/esphome_syslog.h +1 -1
- esphome/components/tca9555/__init__.py +1 -1
- esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
- esphome/components/text/__init__.py +5 -2
- esphome/components/text_sensor/__init__.py +5 -2
- esphome/components/thermostat/thermostat_climate.cpp +34 -31
- esphome/components/thermostat/thermostat_climate.h +43 -39
- esphome/components/time/__init__.py +16 -2
- esphome/components/time/real_time_clock.cpp +4 -0
- esphome/components/time/real_time_clock.h +5 -1
- esphome/components/tlc5971/tlc5971.cpp +4 -1
- esphome/components/tmp1075/tmp1075.h +0 -2
- esphome/components/tof10120/tof10120_sensor.h +0 -1
- esphome/components/tormatic/tormatic_cover.h +0 -1
- esphome/components/total_daily_energy/total_daily_energy.h +0 -1
- esphome/components/tsl2591/tsl2591.cpp +1 -1
- esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
- esphome/components/tx20/tx20.cpp +2 -2
- esphome/components/uart/__init__.py +18 -0
- esphome/components/uart/uart_component_esp_idf.cpp +0 -4
- esphome/components/update/__init__.py +5 -2
- esphome/components/update/update_entity.h +8 -0
- esphome/components/usb_host/__init__.py +5 -2
- esphome/components/usb_host/usb_host_client.cpp +10 -10
- esphome/components/usb_uart/cp210x.cpp +1 -1
- esphome/components/usb_uart/usb_uart.cpp +41 -44
- esphome/components/usb_uart/usb_uart.h +4 -3
- esphome/components/valve/__init__.py +5 -2
- esphome/components/vbus/vbus.h +0 -1
- esphome/components/veml3235/veml3235.h +0 -1
- esphome/components/veml7700/veml7700.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
- esphome/components/voice_assistant/voice_assistant.cpp +4 -4
- esphome/components/watchdog/watchdog.cpp +0 -4
- esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
- esphome/components/web_server/__init__.py +34 -19
- esphome/components/web_server/ota/__init__.py +32 -0
- esphome/components/web_server/ota/ota_web_server.cpp +210 -0
- esphome/components/web_server/ota/ota_web_server.h +26 -0
- esphome/components/web_server/web_server.cpp +305 -427
- esphome/components/web_server/web_server.h +33 -23
- esphome/components/web_server/web_server_v1.cpp +4 -5
- esphome/components/web_server_base/__init__.py +5 -2
- esphome/components/web_server_base/web_server_base.cpp +2 -94
- esphome/components/web_server_base/web_server_base.h +5 -25
- esphome/components/web_server_idf/multipart.cpp +254 -0
- esphome/components/web_server_idf/multipart.h +86 -0
- esphome/components/web_server_idf/utils.cpp +32 -0
- esphome/components/web_server_idf/utils.h +10 -0
- esphome/components/web_server_idf/web_server_idf.cpp +162 -16
- esphome/components/web_server_idf/web_server_idf.h +11 -10
- esphome/components/wiegand/wiegand.cpp +2 -2
- esphome/components/wifi/__init__.py +18 -0
- esphome/components/wifi/wifi_component.cpp +17 -22
- esphome/components/wifi/wifi_component.h +27 -23
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
- esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
- esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
- esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
- esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
- esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
- esphome/components/wireguard/__init__.py +2 -11
- esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
- esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
- esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
- esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
- esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
- esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
- esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
- esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
- esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
- esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
- esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
- esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
- esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
- esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
- esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
- esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
- esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
- esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
- esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
- esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
- esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
- esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
- esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
- esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
- esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
- esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
- esphome/components/zyaura/zyaura.h +0 -1
- esphome/config.py +88 -22
- esphome/config_helpers.py +74 -1
- esphome/config_validation.py +12 -1
- esphome/const.py +65 -10
- esphome/core/__init__.py +18 -2
- esphome/core/application.cpp +163 -10
- esphome/core/application.h +145 -165
- esphome/core/area.h +19 -0
- esphome/core/automation.h +58 -9
- esphome/core/color.cpp +3 -5
- esphome/core/color.h +16 -16
- esphome/core/component.cpp +151 -18
- esphome/core/component.h +98 -4
- esphome/core/component_iterator.cpp +11 -9
- esphome/core/component_iterator.h +12 -10
- esphome/core/config.py +155 -6
- esphome/core/controller.cpp +4 -2
- esphome/core/controller.h +1 -1
- esphome/core/datatypes.h +2 -2
- esphome/core/defines.h +17 -2
- esphome/core/device.h +20 -0
- esphome/core/entity_base.cpp +20 -15
- esphome/core/entity_base.h +76 -0
- esphome/core/entity_helpers.py +168 -1
- esphome/core/event_pool.h +81 -0
- esphome/core/helpers.cpp +75 -230
- esphome/core/helpers.h +164 -104
- esphome/core/lock_free_queue.h +151 -0
- esphome/core/log.cpp +2 -2
- esphome/core/log.h +2 -0
- esphome/core/optional.h +5 -0
- esphome/core/ring_buffer.cpp +2 -2
- esphome/core/scheduler.cpp +275 -103
- esphome/core/scheduler.h +154 -17
- esphome/core/time.cpp +5 -5
- esphome/core/time.h +5 -5
- esphome/cpp_generator.py +17 -0
- esphome/cpp_helpers.py +0 -22
- esphome/cpp_types.py +3 -1
- esphome/dashboard/entries.py +1 -1
- esphome/dashboard/util/text.py +5 -21
- esphome/dashboard/web_server.py +9 -1
- esphome/helpers.py +47 -0
- esphome/loader.py +15 -1
- esphome/pins.py +14 -8
- esphome/wizard.py +17 -4
- esphome/writer.py +21 -3
- esphome/yaml_util.py +0 -2
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/METADATA +10 -9
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/RECORD +597 -538
- esphome/components/api/api_pb2_size.h +0 -361
- esphome/components/esp32_ble/ble_event_pool.h +0 -72
- esphome/components/esp32_ble/queue.h +0 -85
- esphome/components/esp32_hall/esp32_hall.cpp +0 -25
- esphome/components/esp32_hall/esp32_hall.h +0 -23
- esphome/components/esp32_touch/esp32_touch.cpp +0 -355
- esphome/components/ld2410/button/reset_button.cpp +0 -9
- esphome/components/ld2450/button/reset_button.cpp +0 -9
- esphome/components/openthread/tlv.py +0 -65
- /esphome/{dashboard/enum.py → enum.py} +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/WHEEL +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/top_level.txt +0 -0
|
@@ -16,7 +16,12 @@ from esphome.components.esp32.const import (
|
|
|
16
16
|
VARIANT_ESP32S3,
|
|
17
17
|
)
|
|
18
18
|
from esphome.components.libretiny import get_libretiny_component, get_libretiny_family
|
|
19
|
-
from esphome.components.libretiny.const import
|
|
19
|
+
from esphome.components.libretiny.const import (
|
|
20
|
+
COMPONENT_BK72XX,
|
|
21
|
+
COMPONENT_LN882X,
|
|
22
|
+
COMPONENT_RTL87XX,
|
|
23
|
+
)
|
|
24
|
+
from esphome.config_helpers import filter_source_files_from_platform
|
|
20
25
|
import esphome.config_validation as cv
|
|
21
26
|
from esphome.const import (
|
|
22
27
|
CONF_ARGS,
|
|
@@ -35,8 +40,10 @@ from esphome.const import (
|
|
|
35
40
|
PLATFORM_BK72XX,
|
|
36
41
|
PLATFORM_ESP32,
|
|
37
42
|
PLATFORM_ESP8266,
|
|
43
|
+
PLATFORM_LN882X,
|
|
38
44
|
PLATFORM_RP2040,
|
|
39
45
|
PLATFORM_RTL87XX,
|
|
46
|
+
PlatformFramework,
|
|
40
47
|
)
|
|
41
48
|
from esphome.core import CORE, Lambda, coroutine_with_priority
|
|
42
49
|
|
|
@@ -100,6 +107,7 @@ UART_SELECTION_ESP8266 = [UART0, UART0_SWAP, UART1]
|
|
|
100
107
|
|
|
101
108
|
UART_SELECTION_LIBRETINY = {
|
|
102
109
|
COMPONENT_BK72XX: [DEFAULT, UART1, UART2],
|
|
110
|
+
COMPONENT_LN882X: [DEFAULT, UART0, UART1, UART2],
|
|
103
111
|
COMPONENT_RTL87XX: [DEFAULT, UART0, UART1, UART2],
|
|
104
112
|
}
|
|
105
113
|
|
|
@@ -184,7 +192,9 @@ CONFIG_SCHEMA = cv.All(
|
|
|
184
192
|
{
|
|
185
193
|
cv.GenerateID(): cv.declare_id(Logger),
|
|
186
194
|
cv.Optional(CONF_BAUD_RATE, default=115200): cv.positive_int,
|
|
187
|
-
cv.Optional(CONF_TX_BUFFER_SIZE, default=512): cv.
|
|
195
|
+
cv.Optional(CONF_TX_BUFFER_SIZE, default=512): cv.All(
|
|
196
|
+
cv.validate_bytes, cv.int_range(min=160, max=65535)
|
|
197
|
+
),
|
|
188
198
|
cv.Optional(CONF_DEASSERT_RTS_DTR, default=False): cv.boolean,
|
|
189
199
|
cv.SplitDefault(
|
|
190
200
|
CONF_TASK_LOG_BUFFER_SIZE,
|
|
@@ -215,6 +225,7 @@ CONFIG_SCHEMA = cv.All(
|
|
|
215
225
|
esp32_p4_idf=USB_SERIAL_JTAG,
|
|
216
226
|
rp2040=USB_CDC,
|
|
217
227
|
bk72xx=DEFAULT,
|
|
228
|
+
ln882x=DEFAULT,
|
|
218
229
|
rtl87xx=DEFAULT,
|
|
219
230
|
): cv.All(
|
|
220
231
|
cv.only_on(
|
|
@@ -223,6 +234,7 @@ CONFIG_SCHEMA = cv.All(
|
|
|
223
234
|
PLATFORM_ESP32,
|
|
224
235
|
PLATFORM_RP2040,
|
|
225
236
|
PLATFORM_BK72XX,
|
|
237
|
+
PLATFORM_LN882X,
|
|
226
238
|
PLATFORM_RTL87XX,
|
|
227
239
|
]
|
|
228
240
|
),
|
|
@@ -324,7 +336,10 @@ async def to_code(config):
|
|
|
324
336
|
if CORE.using_arduino:
|
|
325
337
|
if config[CONF_HARDWARE_UART] == USB_CDC:
|
|
326
338
|
cg.add_build_flag("-DARDUINO_USB_CDC_ON_BOOT=1")
|
|
327
|
-
if CORE.is_esp32 and get_esp32_variant()
|
|
339
|
+
if CORE.is_esp32 and get_esp32_variant() in (
|
|
340
|
+
VARIANT_ESP32C3,
|
|
341
|
+
VARIANT_ESP32C6,
|
|
342
|
+
):
|
|
328
343
|
cg.add_build_flag("-DARDUINO_USB_MODE=1")
|
|
329
344
|
|
|
330
345
|
if CORE.using_esp_idf:
|
|
@@ -431,3 +446,25 @@ async def logger_set_level_to_code(config, action_id, template_arg, args):
|
|
|
431
446
|
|
|
432
447
|
lambda_ = await cg.process_lambda(Lambda(text), args, return_type=cg.void)
|
|
433
448
|
return cg.new_Pvariable(action_id, template_arg, lambda_)
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
FILTER_SOURCE_FILES = filter_source_files_from_platform(
|
|
452
|
+
{
|
|
453
|
+
"logger_esp32.cpp": {
|
|
454
|
+
PlatformFramework.ESP32_ARDUINO,
|
|
455
|
+
PlatformFramework.ESP32_IDF,
|
|
456
|
+
},
|
|
457
|
+
"logger_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
|
|
458
|
+
"logger_host.cpp": {PlatformFramework.HOST_NATIVE},
|
|
459
|
+
"logger_rp2040.cpp": {PlatformFramework.RP2040_ARDUINO},
|
|
460
|
+
"logger_libretiny.cpp": {
|
|
461
|
+
PlatformFramework.BK72XX_ARDUINO,
|
|
462
|
+
PlatformFramework.RTL87XX_ARDUINO,
|
|
463
|
+
PlatformFramework.LN882X_ARDUINO,
|
|
464
|
+
},
|
|
465
|
+
"task_log_buffer.cpp": {
|
|
466
|
+
PlatformFramework.ESP32_ARDUINO,
|
|
467
|
+
PlatformFramework.ESP32_IDF,
|
|
468
|
+
},
|
|
469
|
+
}
|
|
470
|
+
)
|
|
@@ -24,7 +24,7 @@ static const char *const TAG = "logger";
|
|
|
24
24
|
// - Messages are serialized through main loop for proper console output
|
|
25
25
|
// - Fallback to emergency console logging only if ring buffer is full
|
|
26
26
|
// - WITHOUT task log buffer: Only emergency console output, no callbacks
|
|
27
|
-
void HOT Logger::log_vprintf_(
|
|
27
|
+
void HOT Logger::log_vprintf_(uint8_t level, const char *tag, int line, const char *format, va_list args) { // NOLINT
|
|
28
28
|
if (level > this->level_for(tag))
|
|
29
29
|
return;
|
|
30
30
|
|
|
@@ -46,8 +46,13 @@ void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *
|
|
|
46
46
|
bool message_sent = false;
|
|
47
47
|
#ifdef USE_ESPHOME_TASK_LOG_BUFFER
|
|
48
48
|
// For non-main tasks, queue the message for callbacks - but only if we have any callbacks registered
|
|
49
|
-
message_sent =
|
|
50
|
-
|
|
49
|
+
message_sent =
|
|
50
|
+
this->log_buffer_->send_message_thread_safe(level, tag, static_cast<uint16_t>(line), current_task, format, args);
|
|
51
|
+
if (message_sent) {
|
|
52
|
+
// Enable logger loop to process the buffered message
|
|
53
|
+
// This is safe to call from any context including ISRs
|
|
54
|
+
this->enable_loop_soon_any_context();
|
|
55
|
+
}
|
|
51
56
|
#endif // USE_ESPHOME_TASK_LOG_BUFFER
|
|
52
57
|
|
|
53
58
|
// Emergency console logging for non-main tasks when ring buffer is full or disabled
|
|
@@ -58,7 +63,7 @@ void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *
|
|
|
58
63
|
// Maximum size for console log messages (includes null terminator)
|
|
59
64
|
static const size_t MAX_CONSOLE_LOG_MSG_SIZE = 144;
|
|
60
65
|
char console_buffer[MAX_CONSOLE_LOG_MSG_SIZE]; // MUST be stack allocated for thread safety
|
|
61
|
-
|
|
66
|
+
uint16_t buffer_at = 0; // Initialize buffer position
|
|
62
67
|
this->format_log_to_buffer_with_terminator_(level, tag, line, format, args, console_buffer, &buffer_at,
|
|
63
68
|
MAX_CONSOLE_LOG_MSG_SIZE);
|
|
64
69
|
this->write_msg_(console_buffer);
|
|
@@ -69,7 +74,7 @@ void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *
|
|
|
69
74
|
}
|
|
70
75
|
#else
|
|
71
76
|
// Implementation for all other platforms
|
|
72
|
-
void HOT Logger::log_vprintf_(
|
|
77
|
+
void HOT Logger::log_vprintf_(uint8_t level, const char *tag, int line, const char *format, va_list args) { // NOLINT
|
|
73
78
|
if (level > this->level_for(tag) || global_recursion_guard_)
|
|
74
79
|
return;
|
|
75
80
|
|
|
@@ -85,7 +90,26 @@ void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *
|
|
|
85
90
|
#ifdef USE_STORE_LOG_STR_IN_FLASH
|
|
86
91
|
// Implementation for ESP8266 with flash string support.
|
|
87
92
|
// Note: USE_STORE_LOG_STR_IN_FLASH is only defined for ESP8266.
|
|
88
|
-
|
|
93
|
+
//
|
|
94
|
+
// This function handles format strings stored in flash memory (PROGMEM) to save RAM.
|
|
95
|
+
// The buffer is used in a special way to avoid allocating extra memory:
|
|
96
|
+
//
|
|
97
|
+
// Memory layout during execution:
|
|
98
|
+
// Step 1: Copy format string from flash to buffer
|
|
99
|
+
// tx_buffer_: [format_string][null][.....................]
|
|
100
|
+
// tx_buffer_at_: ------------------^
|
|
101
|
+
// msg_start: saved here -----------^
|
|
102
|
+
//
|
|
103
|
+
// Step 2: format_log_to_buffer_with_terminator_ reads format string from beginning
|
|
104
|
+
// and writes formatted output starting at msg_start position
|
|
105
|
+
// tx_buffer_: [format_string][null][formatted_message][null]
|
|
106
|
+
// tx_buffer_at_: -------------------------------------^
|
|
107
|
+
//
|
|
108
|
+
// Step 3: Output the formatted message (starting at msg_start)
|
|
109
|
+
// write_msg_ and callbacks receive: this->tx_buffer_ + msg_start
|
|
110
|
+
// which points to: [formatted_message][null]
|
|
111
|
+
//
|
|
112
|
+
void Logger::log_vprintf_(uint8_t level, const char *tag, int line, const __FlashStringHelper *format,
|
|
89
113
|
va_list args) { // NOLINT
|
|
90
114
|
if (level > this->level_for(tag) || global_recursion_guard_)
|
|
91
115
|
return;
|
|
@@ -116,13 +140,15 @@ void Logger::log_vprintf_(int level, const char *tag, int line, const __FlashStr
|
|
|
116
140
|
if (this->baud_rate_ > 0) {
|
|
117
141
|
this->write_msg_(this->tx_buffer_ + msg_start);
|
|
118
142
|
}
|
|
119
|
-
|
|
143
|
+
size_t msg_length =
|
|
144
|
+
this->tx_buffer_at_ - msg_start; // Don't subtract 1 - tx_buffer_at_ is already at the null terminator position
|
|
145
|
+
this->log_callback_.call(level, tag, this->tx_buffer_ + msg_start, msg_length);
|
|
120
146
|
|
|
121
147
|
global_recursion_guard_ = false;
|
|
122
148
|
}
|
|
123
149
|
#endif // USE_STORE_LOG_STR_IN_FLASH
|
|
124
150
|
|
|
125
|
-
inline
|
|
151
|
+
inline uint8_t Logger::level_for(const char *tag) {
|
|
126
152
|
auto it = this->log_levels_.find(tag);
|
|
127
153
|
if (it != this->log_levels_.end())
|
|
128
154
|
return it->second;
|
|
@@ -139,6 +165,10 @@ Logger::Logger(uint32_t baud_rate, size_t tx_buffer_size) : baud_rate_(baud_rate
|
|
|
139
165
|
#ifdef USE_ESPHOME_TASK_LOG_BUFFER
|
|
140
166
|
void Logger::init_log_buffer(size_t total_buffer_size) {
|
|
141
167
|
this->log_buffer_ = esphome::make_unique<logger::TaskLogBuffer>(total_buffer_size);
|
|
168
|
+
|
|
169
|
+
// Start with loop disabled when using task buffer (unless using USB CDC)
|
|
170
|
+
// The loop will be enabled automatically when messages arrive
|
|
171
|
+
this->disable_loop_when_buffer_empty_();
|
|
142
172
|
}
|
|
143
173
|
#endif
|
|
144
174
|
|
|
@@ -176,7 +206,8 @@ void Logger::loop() {
|
|
|
176
206
|
this->tx_buffer_size_);
|
|
177
207
|
this->write_footer_to_buffer_(this->tx_buffer_, &this->tx_buffer_at_, this->tx_buffer_size_);
|
|
178
208
|
this->tx_buffer_[this->tx_buffer_at_] = '\0';
|
|
179
|
-
|
|
209
|
+
size_t msg_len = this->tx_buffer_at_; // We already know the length from tx_buffer_at_
|
|
210
|
+
this->log_callback_.call(message->level, message->tag, this->tx_buffer_, msg_len);
|
|
180
211
|
// At this point all the data we need from message has been transferred to the tx_buffer
|
|
181
212
|
// so we can release the message to allow other tasks to use it as soon as possible.
|
|
182
213
|
this->log_buffer_->release_message_main_loop(received_token);
|
|
@@ -189,19 +220,23 @@ void Logger::loop() {
|
|
|
189
220
|
this->write_msg_(this->tx_buffer_);
|
|
190
221
|
}
|
|
191
222
|
}
|
|
223
|
+
} else {
|
|
224
|
+
// No messages to process, disable loop if appropriate
|
|
225
|
+
// This reduces overhead when there's no async logging activity
|
|
226
|
+
this->disable_loop_when_buffer_empty_();
|
|
192
227
|
}
|
|
193
228
|
#endif
|
|
194
229
|
}
|
|
195
230
|
#endif
|
|
196
231
|
|
|
197
232
|
void Logger::set_baud_rate(uint32_t baud_rate) { this->baud_rate_ = baud_rate; }
|
|
198
|
-
void Logger::set_log_level(const std::string &tag,
|
|
233
|
+
void Logger::set_log_level(const std::string &tag, uint8_t log_level) { this->log_levels_[tag] = log_level; }
|
|
199
234
|
|
|
200
235
|
#if defined(USE_ESP32) || defined(USE_ESP8266) || defined(USE_RP2040) || defined(USE_LIBRETINY)
|
|
201
236
|
UARTSelection Logger::get_uart() const { return this->uart_; }
|
|
202
237
|
#endif
|
|
203
238
|
|
|
204
|
-
void Logger::add_on_log_callback(std::function<void(
|
|
239
|
+
void Logger::add_on_log_callback(std::function<void(uint8_t, const char *, const char *, size_t)> &&callback) {
|
|
205
240
|
this->log_callback_.add(std::move(callback));
|
|
206
241
|
}
|
|
207
242
|
float Logger::get_setup_priority() const { return setup_priority::BUS + 500.0f; }
|
|
@@ -230,7 +265,7 @@ void Logger::dump_config() {
|
|
|
230
265
|
}
|
|
231
266
|
}
|
|
232
267
|
|
|
233
|
-
void Logger::set_log_level(
|
|
268
|
+
void Logger::set_log_level(uint8_t level) {
|
|
234
269
|
if (level > ESPHOME_LOG_LEVEL) {
|
|
235
270
|
level = ESPHOME_LOG_LEVEL;
|
|
236
271
|
ESP_LOGW(TAG, "Cannot set log level higher than pre-compiled %s", LOG_LEVELS[ESPHOME_LOG_LEVEL]);
|
|
@@ -61,7 +61,7 @@ static const char *const LOG_LEVEL_LETTERS[] = {
|
|
|
61
61
|
*
|
|
62
62
|
* Advanced configuration (pin selection, etc) is not supported.
|
|
63
63
|
*/
|
|
64
|
-
enum UARTSelection {
|
|
64
|
+
enum UARTSelection : uint8_t {
|
|
65
65
|
#ifdef USE_LIBRETINY
|
|
66
66
|
UART_SELECTION_DEFAULT = 0,
|
|
67
67
|
UART_SELECTION_UART0,
|
|
@@ -129,10 +129,10 @@ class Logger : public Component {
|
|
|
129
129
|
#endif
|
|
130
130
|
|
|
131
131
|
/// Set the default log level for this logger.
|
|
132
|
-
void set_log_level(
|
|
132
|
+
void set_log_level(uint8_t level);
|
|
133
133
|
/// Set the log level of the specified tag.
|
|
134
|
-
void set_log_level(const std::string &tag,
|
|
135
|
-
|
|
134
|
+
void set_log_level(const std::string &tag, uint8_t log_level);
|
|
135
|
+
uint8_t get_log_level() { return this->current_level_; }
|
|
136
136
|
|
|
137
137
|
// ========== INTERNAL METHODS ==========
|
|
138
138
|
// (In most use cases you won't need these)
|
|
@@ -140,19 +140,20 @@ class Logger : public Component {
|
|
|
140
140
|
void pre_setup();
|
|
141
141
|
void dump_config() override;
|
|
142
142
|
|
|
143
|
-
inline
|
|
143
|
+
inline uint8_t level_for(const char *tag);
|
|
144
144
|
|
|
145
145
|
/// Register a callback that will be called for every log message sent
|
|
146
|
-
void add_on_log_callback(std::function<void(
|
|
146
|
+
void add_on_log_callback(std::function<void(uint8_t, const char *, const char *, size_t)> &&callback);
|
|
147
147
|
|
|
148
148
|
// add a listener for log level changes
|
|
149
|
-
void add_listener(std::function<void(
|
|
149
|
+
void add_listener(std::function<void(uint8_t)> &&callback) { this->level_callback_.add(std::move(callback)); }
|
|
150
150
|
|
|
151
151
|
float get_setup_priority() const override;
|
|
152
152
|
|
|
153
|
-
void log_vprintf_(
|
|
153
|
+
void log_vprintf_(uint8_t level, const char *tag, int line, const char *format, va_list args); // NOLINT
|
|
154
154
|
#ifdef USE_STORE_LOG_STR_IN_FLASH
|
|
155
|
-
void log_vprintf_(
|
|
155
|
+
void log_vprintf_(uint8_t level, const char *tag, int line, const __FlashStringHelper *format,
|
|
156
|
+
va_list args); // NOLINT
|
|
156
157
|
#endif
|
|
157
158
|
|
|
158
159
|
protected:
|
|
@@ -160,8 +161,9 @@ class Logger : public Component {
|
|
|
160
161
|
|
|
161
162
|
// Format a log message with printf-style arguments and write it to a buffer with header, footer, and null terminator
|
|
162
163
|
// It's the caller's responsibility to initialize buffer_at (typically to 0)
|
|
163
|
-
inline void HOT format_log_to_buffer_with_terminator_(
|
|
164
|
-
va_list args, char *buffer,
|
|
164
|
+
inline void HOT format_log_to_buffer_with_terminator_(uint8_t level, const char *tag, int line, const char *format,
|
|
165
|
+
va_list args, char *buffer, uint16_t *buffer_at,
|
|
166
|
+
uint16_t buffer_size) {
|
|
165
167
|
#if defined(USE_ESP32) || defined(USE_LIBRETINY)
|
|
166
168
|
this->write_header_to_buffer_(level, tag, line, this->get_thread_name_(), buffer, buffer_at, buffer_size);
|
|
167
169
|
#else
|
|
@@ -180,7 +182,7 @@ class Logger : public Component {
|
|
|
180
182
|
}
|
|
181
183
|
|
|
182
184
|
// Helper to format and send a log message to both console and callbacks
|
|
183
|
-
inline void HOT log_message_to_buffer_and_send_(
|
|
185
|
+
inline void HOT log_message_to_buffer_and_send_(uint8_t level, const char *tag, int line, const char *format,
|
|
184
186
|
va_list args) {
|
|
185
187
|
// Format to tx_buffer and prepare for output
|
|
186
188
|
this->tx_buffer_at_ = 0; // Initialize buffer position
|
|
@@ -190,15 +192,16 @@ class Logger : public Component {
|
|
|
190
192
|
if (this->baud_rate_ > 0) {
|
|
191
193
|
this->write_msg_(this->tx_buffer_); // If logging is enabled, write to console
|
|
192
194
|
}
|
|
193
|
-
this->log_callback_.call(level, tag, this->tx_buffer_);
|
|
195
|
+
this->log_callback_.call(level, tag, this->tx_buffer_, this->tx_buffer_at_);
|
|
194
196
|
}
|
|
195
197
|
|
|
196
198
|
// Write the body of the log message to the buffer
|
|
197
|
-
inline void write_body_to_buffer_(const char *value, size_t length, char *buffer,
|
|
199
|
+
inline void write_body_to_buffer_(const char *value, size_t length, char *buffer, uint16_t *buffer_at,
|
|
200
|
+
uint16_t buffer_size) {
|
|
198
201
|
// Calculate available space
|
|
199
|
-
|
|
200
|
-
if (available <= 0)
|
|
202
|
+
if (*buffer_at >= buffer_size)
|
|
201
203
|
return;
|
|
204
|
+
const uint16_t available = buffer_size - *buffer_at;
|
|
202
205
|
|
|
203
206
|
// Determine copy length (minimum of remaining capacity and string length)
|
|
204
207
|
const size_t copy_len = (length < static_cast<size_t>(available)) ? length : available;
|
|
@@ -211,7 +214,7 @@ class Logger : public Component {
|
|
|
211
214
|
}
|
|
212
215
|
|
|
213
216
|
// Format string to explicit buffer with varargs
|
|
214
|
-
inline void printf_to_buffer_(char *buffer,
|
|
217
|
+
inline void printf_to_buffer_(char *buffer, uint16_t *buffer_at, uint16_t buffer_size, const char *format, ...) {
|
|
215
218
|
va_list arg;
|
|
216
219
|
va_start(arg, format);
|
|
217
220
|
this->format_body_to_buffer_(buffer, buffer_at, buffer_size, format, arg);
|
|
@@ -222,41 +225,50 @@ class Logger : public Component {
|
|
|
222
225
|
const char *get_uart_selection_();
|
|
223
226
|
#endif
|
|
224
227
|
|
|
228
|
+
// Group 4-byte aligned members first
|
|
225
229
|
uint32_t baud_rate_;
|
|
226
230
|
char *tx_buffer_{nullptr};
|
|
227
|
-
int tx_buffer_at_{0};
|
|
228
|
-
int tx_buffer_size_{0};
|
|
229
|
-
#if defined(USE_ESP32) || defined(USE_ESP8266) || defined(USE_RP2040)
|
|
230
|
-
UARTSelection uart_{UART_SELECTION_UART0};
|
|
231
|
-
#endif
|
|
232
|
-
#ifdef USE_LIBRETINY
|
|
233
|
-
UARTSelection uart_{UART_SELECTION_DEFAULT};
|
|
234
|
-
#endif
|
|
235
231
|
#ifdef USE_ARDUINO
|
|
236
232
|
Stream *hw_serial_{nullptr};
|
|
237
233
|
#endif
|
|
234
|
+
#if defined(USE_ESP32) || defined(USE_LIBRETINY)
|
|
235
|
+
void *main_task_ = nullptr; // Only used for thread name identification
|
|
236
|
+
#endif
|
|
237
|
+
#ifdef USE_ESP32
|
|
238
|
+
// Task-specific recursion guards:
|
|
239
|
+
// - Main task uses a dedicated member variable for efficiency
|
|
240
|
+
// - Other tasks use pthread TLS with a dynamically created key via pthread_key_create
|
|
241
|
+
pthread_key_t log_recursion_key_; // 4 bytes
|
|
242
|
+
#endif
|
|
238
243
|
#ifdef USE_ESP_IDF
|
|
239
|
-
uart_port_t uart_num_;
|
|
244
|
+
uart_port_t uart_num_; // 4 bytes (enum defaults to int size)
|
|
240
245
|
#endif
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
246
|
+
|
|
247
|
+
// Large objects (internally aligned)
|
|
248
|
+
std::map<std::string, uint8_t> log_levels_{};
|
|
249
|
+
CallbackManager<void(uint8_t, const char *, const char *, size_t)> log_callback_{};
|
|
250
|
+
CallbackManager<void(uint8_t)> level_callback_{};
|
|
244
251
|
#ifdef USE_ESPHOME_TASK_LOG_BUFFER
|
|
245
252
|
std::unique_ptr<logger::TaskLogBuffer> log_buffer_; // Will be initialized with init_log_buffer
|
|
246
253
|
#endif
|
|
254
|
+
|
|
255
|
+
// Group smaller types together at the end
|
|
256
|
+
uint16_t tx_buffer_at_{0};
|
|
257
|
+
uint16_t tx_buffer_size_{0};
|
|
258
|
+
uint8_t current_level_{ESPHOME_LOG_LEVEL_VERY_VERBOSE};
|
|
259
|
+
#if defined(USE_ESP32) || defined(USE_ESP8266) || defined(USE_RP2040)
|
|
260
|
+
UARTSelection uart_{UART_SELECTION_UART0};
|
|
261
|
+
#endif
|
|
262
|
+
#ifdef USE_LIBRETINY
|
|
263
|
+
UARTSelection uart_{UART_SELECTION_DEFAULT};
|
|
264
|
+
#endif
|
|
247
265
|
#ifdef USE_ESP32
|
|
248
|
-
// Task-specific recursion guards:
|
|
249
|
-
// - Main task uses a dedicated member variable for efficiency
|
|
250
|
-
// - Other tasks use pthread TLS with a dynamically created key via pthread_key_create
|
|
251
266
|
bool main_task_recursion_guard_{false};
|
|
252
|
-
pthread_key_t log_recursion_key_;
|
|
253
267
|
#else
|
|
254
268
|
bool global_recursion_guard_{false}; // Simple global recursion guard for single-task platforms
|
|
255
269
|
#endif
|
|
256
|
-
CallbackManager<void(int)> level_callback_{};
|
|
257
270
|
|
|
258
271
|
#if defined(USE_ESP32) || defined(USE_LIBRETINY)
|
|
259
|
-
void *main_task_ = nullptr; // Only used for thread name identification
|
|
260
272
|
const char *HOT get_thread_name_() {
|
|
261
273
|
TaskHandle_t current_task = xTaskGetCurrentTaskHandle();
|
|
262
274
|
if (current_task == main_task_) {
|
|
@@ -297,11 +309,10 @@ class Logger : public Component {
|
|
|
297
309
|
}
|
|
298
310
|
#endif
|
|
299
311
|
|
|
300
|
-
inline void HOT write_header_to_buffer_(
|
|
301
|
-
|
|
312
|
+
inline void HOT write_header_to_buffer_(uint8_t level, const char *tag, int line, const char *thread_name,
|
|
313
|
+
char *buffer, uint16_t *buffer_at, uint16_t buffer_size) {
|
|
302
314
|
// Format header
|
|
303
|
-
|
|
304
|
-
level = 0;
|
|
315
|
+
// uint8_t level is already bounded 0-255, just ensure it's <= 7
|
|
305
316
|
if (level > 7)
|
|
306
317
|
level = 7;
|
|
307
318
|
|
|
@@ -320,12 +331,12 @@ class Logger : public Component {
|
|
|
320
331
|
this->printf_to_buffer_(buffer, buffer_at, buffer_size, "%s[%s][%s:%03u]: ", color, letter, tag, line);
|
|
321
332
|
}
|
|
322
333
|
|
|
323
|
-
inline void HOT format_body_to_buffer_(char *buffer,
|
|
334
|
+
inline void HOT format_body_to_buffer_(char *buffer, uint16_t *buffer_at, uint16_t buffer_size, const char *format,
|
|
324
335
|
va_list args) {
|
|
325
336
|
// Get remaining capacity in the buffer
|
|
326
|
-
|
|
327
|
-
if (remaining <= 0)
|
|
337
|
+
if (*buffer_at >= buffer_size)
|
|
328
338
|
return;
|
|
339
|
+
const uint16_t remaining = buffer_size - *buffer_at;
|
|
329
340
|
|
|
330
341
|
const int ret = vsnprintf(buffer + *buffer_at, remaining, format, args);
|
|
331
342
|
|
|
@@ -334,7 +345,7 @@ class Logger : public Component {
|
|
|
334
345
|
}
|
|
335
346
|
|
|
336
347
|
// Update buffer_at with the formatted length (handle truncation)
|
|
337
|
-
|
|
348
|
+
uint16_t formatted_len = (ret >= remaining) ? remaining : ret;
|
|
338
349
|
*buffer_at += formatted_len;
|
|
339
350
|
|
|
340
351
|
// Remove all trailing newlines right after formatting
|
|
@@ -343,18 +354,38 @@ class Logger : public Component {
|
|
|
343
354
|
}
|
|
344
355
|
}
|
|
345
356
|
|
|
346
|
-
inline void HOT write_footer_to_buffer_(char *buffer,
|
|
347
|
-
static
|
|
357
|
+
inline void HOT write_footer_to_buffer_(char *buffer, uint16_t *buffer_at, uint16_t buffer_size) {
|
|
358
|
+
static constexpr uint16_t RESET_COLOR_LEN = sizeof(ESPHOME_LOG_RESET_COLOR) - 1;
|
|
348
359
|
this->write_body_to_buffer_(ESPHOME_LOG_RESET_COLOR, RESET_COLOR_LEN, buffer, buffer_at, buffer_size);
|
|
349
360
|
}
|
|
361
|
+
|
|
362
|
+
#ifdef USE_ESP32
|
|
363
|
+
// Disable loop when task buffer is empty (with USB CDC check)
|
|
364
|
+
inline void disable_loop_when_buffer_empty_() {
|
|
365
|
+
// Thread safety note: This is safe even if another task calls enable_loop_soon_any_context()
|
|
366
|
+
// concurrently. If that happens between our check and disable_loop(), the enable request
|
|
367
|
+
// will be processed on the next main loop iteration since:
|
|
368
|
+
// - disable_loop() takes effect immediately
|
|
369
|
+
// - enable_loop_soon_any_context() sets a pending flag that's checked at loop start
|
|
370
|
+
#if defined(USE_LOGGER_USB_CDC) && defined(USE_ARDUINO)
|
|
371
|
+
// Only disable if not using USB CDC (which needs loop for connection detection)
|
|
372
|
+
if (this->uart_ != UART_SELECTION_USB_CDC) {
|
|
373
|
+
this->disable_loop();
|
|
374
|
+
}
|
|
375
|
+
#else
|
|
376
|
+
// No USB CDC support, always safe to disable
|
|
377
|
+
this->disable_loop();
|
|
378
|
+
#endif
|
|
379
|
+
}
|
|
380
|
+
#endif
|
|
350
381
|
};
|
|
351
382
|
extern Logger *global_logger; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
|
|
352
383
|
|
|
353
|
-
class LoggerMessageTrigger : public Trigger<
|
|
384
|
+
class LoggerMessageTrigger : public Trigger<uint8_t, const char *, const char *> {
|
|
354
385
|
public:
|
|
355
|
-
explicit LoggerMessageTrigger(Logger *parent,
|
|
386
|
+
explicit LoggerMessageTrigger(Logger *parent, uint8_t level) {
|
|
356
387
|
this->level_ = level;
|
|
357
|
-
parent->add_on_log_callback([this](
|
|
388
|
+
parent->add_on_log_callback([this](uint8_t level, const char *tag, const char *message, size_t message_len) {
|
|
358
389
|
if (level <= this->level_) {
|
|
359
390
|
this->trigger(level, tag, message);
|
|
360
391
|
}
|
|
@@ -362,7 +393,7 @@ class LoggerMessageTrigger : public Trigger<int, const char *, const char *> {
|
|
|
362
393
|
}
|
|
363
394
|
|
|
364
395
|
protected:
|
|
365
|
-
|
|
396
|
+
uint8_t level_;
|
|
366
397
|
};
|
|
367
398
|
|
|
368
399
|
} // namespace logger
|
|
@@ -83,9 +83,7 @@ void init_uart(uart_port_t uart_num, uint32_t baud_rate, int tx_buffer_size) {
|
|
|
83
83
|
uart_config.parity = UART_PARITY_DISABLE;
|
|
84
84
|
uart_config.stop_bits = UART_STOP_BITS_1;
|
|
85
85
|
uart_config.flow_ctrl = UART_HW_FLOWCTRL_DISABLE;
|
|
86
|
-
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
|
|
87
86
|
uart_config.source_clk = UART_SCLK_DEFAULT;
|
|
88
|
-
#endif
|
|
89
87
|
uart_param_config(uart_num, &uart_config);
|
|
90
88
|
const int uart_buffer_size = tx_buffer_size;
|
|
91
89
|
// Install UART driver using an event queue here
|
|
@@ -186,7 +184,9 @@ void HOT Logger::write_msg_(const char *msg) {
|
|
|
186
184
|
) {
|
|
187
185
|
puts(msg);
|
|
188
186
|
} else {
|
|
189
|
-
|
|
187
|
+
// Use tx_buffer_at_ if msg points to tx_buffer_, otherwise fall back to strlen
|
|
188
|
+
size_t len = (msg == this->tx_buffer_) ? this->tx_buffer_at_ : strlen(msg);
|
|
189
|
+
uart_write_bytes(this->uart_num_, msg, len);
|
|
190
190
|
uart_write_bytes(this->uart_num_, "\n", 1);
|
|
191
191
|
}
|
|
192
192
|
}
|
|
File without changes
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#include "lps22.h"
|
|
2
|
+
|
|
3
|
+
namespace esphome {
|
|
4
|
+
namespace lps22 {
|
|
5
|
+
|
|
6
|
+
static constexpr const char *const TAG = "lps22";
|
|
7
|
+
|
|
8
|
+
static constexpr uint8_t WHO_AM_I = 0x0F;
|
|
9
|
+
static constexpr uint8_t LPS22HB_ID = 0xB1;
|
|
10
|
+
static constexpr uint8_t LPS22HH_ID = 0xB3;
|
|
11
|
+
static constexpr uint8_t CTRL_REG2 = 0x11;
|
|
12
|
+
static constexpr uint8_t CTRL_REG2_ONE_SHOT_MASK = 0b1;
|
|
13
|
+
static constexpr uint8_t STATUS = 0x27;
|
|
14
|
+
static constexpr uint8_t STATUS_T_DA_MASK = 0b10;
|
|
15
|
+
static constexpr uint8_t STATUS_P_DA_MASK = 0b01;
|
|
16
|
+
static constexpr uint8_t TEMP_L = 0x2b;
|
|
17
|
+
static constexpr uint8_t PRES_OUT_XL = 0x28;
|
|
18
|
+
static constexpr uint8_t REF_P_XL = 0x28;
|
|
19
|
+
static constexpr uint8_t READ_ATTEMPTS = 10;
|
|
20
|
+
static constexpr uint8_t READ_INTERVAL = 5;
|
|
21
|
+
static constexpr float PRESSURE_SCALE = 1.0f / 4096.0f;
|
|
22
|
+
static constexpr float TEMPERATURE_SCALE = 0.01f;
|
|
23
|
+
|
|
24
|
+
void LPS22Component::setup() {
|
|
25
|
+
uint8_t value = 0x00;
|
|
26
|
+
this->read_register(WHO_AM_I, &value, 1);
|
|
27
|
+
if (value != LPS22HB_ID && value != LPS22HH_ID) {
|
|
28
|
+
ESP_LOGW(TAG, "device IDs as %02x, which isn't a known LPS22HB or LPS22HH ID", value);
|
|
29
|
+
this->mark_failed();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void LPS22Component::dump_config() {
|
|
34
|
+
ESP_LOGCONFIG(TAG, "LPS22:");
|
|
35
|
+
LOG_SENSOR(" ", "Temperature", this->temperature_sensor_);
|
|
36
|
+
LOG_SENSOR(" ", "Pressure", this->pressure_sensor_);
|
|
37
|
+
LOG_I2C_DEVICE(this);
|
|
38
|
+
LOG_UPDATE_INTERVAL(this);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void LPS22Component::update() {
|
|
42
|
+
uint8_t value = 0x00;
|
|
43
|
+
this->read_register(CTRL_REG2, &value, 1);
|
|
44
|
+
value |= CTRL_REG2_ONE_SHOT_MASK;
|
|
45
|
+
this->write_register(CTRL_REG2, &value, 1);
|
|
46
|
+
this->set_retry(READ_INTERVAL, READ_ATTEMPTS, [this](uint8_t _) { return this->try_read_(); });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
RetryResult LPS22Component::try_read_() {
|
|
50
|
+
uint8_t value = 0x00;
|
|
51
|
+
this->read_register(STATUS, &value, 1);
|
|
52
|
+
const uint8_t expected_status_mask = STATUS_T_DA_MASK | STATUS_P_DA_MASK;
|
|
53
|
+
if ((value & expected_status_mask) != expected_status_mask) {
|
|
54
|
+
ESP_LOGD(TAG, "STATUS not ready: %x", value);
|
|
55
|
+
return RetryResult::RETRY;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (this->temperature_sensor_ != nullptr) {
|
|
59
|
+
uint8_t t_buf[2]{0};
|
|
60
|
+
this->read_register(TEMP_L, t_buf, 2);
|
|
61
|
+
int16_t encoded = static_cast<int16_t>(encode_uint16(t_buf[1], t_buf[0]));
|
|
62
|
+
float temp = TEMPERATURE_SCALE * static_cast<float>(encoded);
|
|
63
|
+
this->temperature_sensor_->publish_state(temp);
|
|
64
|
+
}
|
|
65
|
+
if (this->pressure_sensor_ != nullptr) {
|
|
66
|
+
uint8_t p_buf[3]{0};
|
|
67
|
+
this->read_register(PRES_OUT_XL, p_buf, 3);
|
|
68
|
+
uint32_t p_lsb = encode_uint24(p_buf[2], p_buf[1], p_buf[0]);
|
|
69
|
+
this->pressure_sensor_->publish_state(PRESSURE_SCALE * static_cast<float>(p_lsb));
|
|
70
|
+
}
|
|
71
|
+
return RetryResult::DONE;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
} // namespace lps22
|
|
75
|
+
} // namespace esphome
|
|
@@ -0,0 +1,27 @@
|
|
|
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 lps22 {
|
|
9
|
+
|
|
10
|
+
class LPS22Component : public sensor::Sensor, public PollingComponent, public i2c::I2CDevice {
|
|
11
|
+
public:
|
|
12
|
+
void set_temperature_sensor(sensor::Sensor *temperature_sensor) { this->temperature_sensor_ = temperature_sensor; }
|
|
13
|
+
void set_pressure_sensor(sensor::Sensor *pressure_sensor) { this->pressure_sensor_ = pressure_sensor; }
|
|
14
|
+
|
|
15
|
+
void setup() override;
|
|
16
|
+
void update() override;
|
|
17
|
+
void dump_config() override;
|
|
18
|
+
|
|
19
|
+
protected:
|
|
20
|
+
sensor::Sensor *temperature_sensor_{nullptr};
|
|
21
|
+
sensor::Sensor *pressure_sensor_{nullptr};
|
|
22
|
+
|
|
23
|
+
RetryResult try_read_();
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
} // namespace lps22
|
|
27
|
+
} // namespace esphome
|