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
|
@@ -32,14 +32,14 @@ bool WiFiComponent::wifi_mode_(optional<bool> sta, optional<bool> ap) {
|
|
|
32
32
|
return true;
|
|
33
33
|
|
|
34
34
|
if (enable_sta && !current_sta) {
|
|
35
|
-
ESP_LOGV(TAG, "Enabling STA
|
|
35
|
+
ESP_LOGV(TAG, "Enabling STA");
|
|
36
36
|
} else if (!enable_sta && current_sta) {
|
|
37
|
-
ESP_LOGV(TAG, "Disabling STA
|
|
37
|
+
ESP_LOGV(TAG, "Disabling STA");
|
|
38
38
|
}
|
|
39
39
|
if (enable_ap && !current_ap) {
|
|
40
|
-
ESP_LOGV(TAG, "Enabling AP
|
|
40
|
+
ESP_LOGV(TAG, "Enabling AP");
|
|
41
41
|
} else if (!enable_ap && current_ap) {
|
|
42
|
-
ESP_LOGV(TAG, "Disabling AP
|
|
42
|
+
ESP_LOGV(TAG, "Disabling AP");
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
uint8_t mode = 0;
|
|
@@ -124,7 +124,7 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) {
|
|
|
124
124
|
ap.get_channel().has_value() ? *ap.get_channel() : 0,
|
|
125
125
|
ap.get_bssid().has_value() ? ap.get_bssid()->data() : NULL);
|
|
126
126
|
if (status != WL_CONNECTED) {
|
|
127
|
-
ESP_LOGW(TAG, "esp_wifi_connect failed
|
|
127
|
+
ESP_LOGW(TAG, "esp_wifi_connect failed: %d", status);
|
|
128
128
|
return false;
|
|
129
129
|
}
|
|
130
130
|
|
|
@@ -256,23 +256,23 @@ using esphome_wifi_event_info_t = arduino_event_info_t;
|
|
|
256
256
|
void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_wifi_event_info_t info) {
|
|
257
257
|
switch (event) {
|
|
258
258
|
case ESPHOME_EVENT_ID_WIFI_READY: {
|
|
259
|
-
ESP_LOGV(TAG, "
|
|
259
|
+
ESP_LOGV(TAG, "Ready");
|
|
260
260
|
break;
|
|
261
261
|
}
|
|
262
262
|
case ESPHOME_EVENT_ID_WIFI_SCAN_DONE: {
|
|
263
263
|
auto it = info.wifi_scan_done;
|
|
264
|
-
ESP_LOGV(TAG, "
|
|
264
|
+
ESP_LOGV(TAG, "Scan done: status=%u number=%u scan_id=%u", it.status, it.number, it.scan_id);
|
|
265
265
|
|
|
266
266
|
this->wifi_scan_done_callback_();
|
|
267
267
|
break;
|
|
268
268
|
}
|
|
269
269
|
case ESPHOME_EVENT_ID_WIFI_STA_START: {
|
|
270
|
-
ESP_LOGV(TAG, "
|
|
270
|
+
ESP_LOGV(TAG, "STA start");
|
|
271
271
|
WiFi.setHostname(App.get_name().c_str());
|
|
272
272
|
break;
|
|
273
273
|
}
|
|
274
274
|
case ESPHOME_EVENT_ID_WIFI_STA_STOP: {
|
|
275
|
-
ESP_LOGV(TAG, "
|
|
275
|
+
ESP_LOGV(TAG, "STA stop");
|
|
276
276
|
break;
|
|
277
277
|
}
|
|
278
278
|
case ESPHOME_EVENT_ID_WIFI_STA_CONNECTED: {
|
|
@@ -280,8 +280,8 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
280
280
|
char buf[33];
|
|
281
281
|
memcpy(buf, it.ssid, it.ssid_len);
|
|
282
282
|
buf[it.ssid_len] = '\0';
|
|
283
|
-
ESP_LOGV(TAG, "
|
|
284
|
-
|
|
283
|
+
ESP_LOGV(TAG, "Connected ssid='%s' bssid=" LOG_SECRET("%s") " channel=%u, authmode=%s", buf,
|
|
284
|
+
format_mac_address_pretty(it.bssid).c_str(), it.channel, get_auth_mode_str(it.authmode));
|
|
285
285
|
|
|
286
286
|
break;
|
|
287
287
|
}
|
|
@@ -291,10 +291,10 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
291
291
|
memcpy(buf, it.ssid, it.ssid_len);
|
|
292
292
|
buf[it.ssid_len] = '\0';
|
|
293
293
|
if (it.reason == WIFI_REASON_NO_AP_FOUND) {
|
|
294
|
-
ESP_LOGW(TAG, "
|
|
294
|
+
ESP_LOGW(TAG, "Disconnected ssid='%s' reason='Probe Request Unsuccessful'", buf);
|
|
295
295
|
} else {
|
|
296
|
-
ESP_LOGW(TAG, "
|
|
297
|
-
|
|
296
|
+
ESP_LOGW(TAG, "Disconnected ssid='%s' bssid=" LOG_SECRET("%s") " reason='%s'", buf,
|
|
297
|
+
format_mac_address_pretty(it.bssid).c_str(), get_disconnect_reason_str(it.reason));
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
uint8_t reason = it.reason;
|
|
@@ -310,8 +310,7 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
310
310
|
}
|
|
311
311
|
case ESPHOME_EVENT_ID_WIFI_STA_AUTHMODE_CHANGE: {
|
|
312
312
|
auto it = info.wifi_sta_authmode_change;
|
|
313
|
-
ESP_LOGV(TAG, "
|
|
314
|
-
get_auth_mode_str(it.new_mode));
|
|
313
|
+
ESP_LOGV(TAG, "Authmode Change old=%s new=%s", get_auth_mode_str(it.old_mode), get_auth_mode_str(it.new_mode));
|
|
315
314
|
// Mitigate CVE-2020-12638
|
|
316
315
|
// https://lbsfilm.at/blog/wpa2-authenticationmode-downgrade-in-espressif-microprocessors
|
|
317
316
|
if (it.old_mode != WIFI_AUTH_OPEN && it.new_mode == WIFI_AUTH_OPEN) {
|
|
@@ -325,47 +324,47 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
|
|
|
325
324
|
}
|
|
326
325
|
case ESPHOME_EVENT_ID_WIFI_STA_GOT_IP: {
|
|
327
326
|
// auto it = info.got_ip.ip_info;
|
|
328
|
-
ESP_LOGV(TAG, "
|
|
327
|
+
ESP_LOGV(TAG, "static_ip=%s gateway=%s", format_ip4_addr(WiFi.localIP()).c_str(),
|
|
329
328
|
format_ip4_addr(WiFi.gatewayIP()).c_str());
|
|
330
329
|
s_sta_connecting = false;
|
|
331
330
|
break;
|
|
332
331
|
}
|
|
333
332
|
case ESPHOME_EVENT_ID_WIFI_STA_GOT_IP6: {
|
|
334
333
|
// auto it = info.got_ip.ip_info;
|
|
335
|
-
ESP_LOGV(TAG, "
|
|
334
|
+
ESP_LOGV(TAG, "Got IPv6");
|
|
336
335
|
break;
|
|
337
336
|
}
|
|
338
337
|
case ESPHOME_EVENT_ID_WIFI_STA_LOST_IP: {
|
|
339
|
-
ESP_LOGV(TAG, "
|
|
338
|
+
ESP_LOGV(TAG, "Lost IP");
|
|
340
339
|
break;
|
|
341
340
|
}
|
|
342
341
|
case ESPHOME_EVENT_ID_WIFI_AP_START: {
|
|
343
|
-
ESP_LOGV(TAG, "
|
|
342
|
+
ESP_LOGV(TAG, "AP start");
|
|
344
343
|
break;
|
|
345
344
|
}
|
|
346
345
|
case ESPHOME_EVENT_ID_WIFI_AP_STOP: {
|
|
347
|
-
ESP_LOGV(TAG, "
|
|
346
|
+
ESP_LOGV(TAG, "AP stop");
|
|
348
347
|
break;
|
|
349
348
|
}
|
|
350
349
|
case ESPHOME_EVENT_ID_WIFI_AP_STACONNECTED: {
|
|
351
350
|
auto it = info.wifi_sta_connected;
|
|
352
351
|
auto &mac = it.bssid;
|
|
353
|
-
ESP_LOGV(TAG, "
|
|
352
|
+
ESP_LOGV(TAG, "AP client connected MAC=%s", format_mac_address_pretty(mac).c_str());
|
|
354
353
|
break;
|
|
355
354
|
}
|
|
356
355
|
case ESPHOME_EVENT_ID_WIFI_AP_STADISCONNECTED: {
|
|
357
356
|
auto it = info.wifi_sta_disconnected;
|
|
358
357
|
auto &mac = it.bssid;
|
|
359
|
-
ESP_LOGV(TAG, "
|
|
358
|
+
ESP_LOGV(TAG, "AP client disconnected MAC=%s", format_mac_address_pretty(mac).c_str());
|
|
360
359
|
break;
|
|
361
360
|
}
|
|
362
361
|
case ESPHOME_EVENT_ID_WIFI_AP_STAIPASSIGNED: {
|
|
363
|
-
ESP_LOGV(TAG, "
|
|
362
|
+
ESP_LOGV(TAG, "AP client assigned IP");
|
|
364
363
|
break;
|
|
365
364
|
}
|
|
366
365
|
case ESPHOME_EVENT_ID_WIFI_AP_PROBEREQRECVED: {
|
|
367
366
|
auto it = info.wifi_ap_probereqrecved;
|
|
368
|
-
ESP_LOGVV(TAG, "
|
|
367
|
+
ESP_LOGVV(TAG, "AP receive Probe Request MAC=%s RSSI=%d", format_mac_address_pretty(it.mac).c_str(), it.rssi);
|
|
369
368
|
break;
|
|
370
369
|
}
|
|
371
370
|
default:
|
|
@@ -399,7 +398,7 @@ bool WiFiComponent::wifi_scan_start_(bool passive) {
|
|
|
399
398
|
// need to use WiFi because of WiFiScanClass allocations :(
|
|
400
399
|
int16_t err = WiFi.scanNetworks(true, true, passive, 200);
|
|
401
400
|
if (err != WIFI_SCAN_RUNNING) {
|
|
402
|
-
ESP_LOGV(TAG, "WiFi.scanNetworks failed
|
|
401
|
+
ESP_LOGV(TAG, "WiFi.scanNetworks failed: %d", err);
|
|
403
402
|
return false;
|
|
404
403
|
}
|
|
405
404
|
|
|
@@ -447,7 +446,7 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
|
447
446
|
return false;
|
|
448
447
|
|
|
449
448
|
if (!this->wifi_ap_ip_config_(ap.get_manual_ip())) {
|
|
450
|
-
ESP_LOGV(TAG, "wifi_ap_ip_config_ failed
|
|
449
|
+
ESP_LOGV(TAG, "wifi_ap_ip_config_ failed");
|
|
451
450
|
return false;
|
|
452
451
|
}
|
|
453
452
|
|
|
@@ -134,7 +134,7 @@ bool WiFiComponent::wifi_scan_start_(bool passive) {
|
|
|
134
134
|
scan_options.scan_type = passive ? 1 : 0;
|
|
135
135
|
int err = cyw43_wifi_scan(&cyw43_state, &scan_options, nullptr, &s_wifi_scan_result);
|
|
136
136
|
if (err) {
|
|
137
|
-
ESP_LOGV(TAG, "cyw43_wifi_scan failed
|
|
137
|
+
ESP_LOGV(TAG, "cyw43_wifi_scan failed");
|
|
138
138
|
}
|
|
139
139
|
return err == 0;
|
|
140
140
|
return true;
|
|
@@ -162,7 +162,7 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) {
|
|
|
162
162
|
if (!this->wifi_mode_({}, true))
|
|
163
163
|
return false;
|
|
164
164
|
if (!this->wifi_ap_ip_config_(ap.get_manual_ip())) {
|
|
165
|
-
ESP_LOGV(TAG, "wifi_ap_ip_config_ failed
|
|
165
|
+
ESP_LOGV(TAG, "wifi_ap_ip_config_ failed");
|
|
166
166
|
return false;
|
|
167
167
|
}
|
|
168
168
|
|
|
@@ -209,7 +209,7 @@ network::IPAddress WiFiComponent::wifi_dns_ip_(int num) {
|
|
|
209
209
|
void WiFiComponent::wifi_loop_() {
|
|
210
210
|
if (this->state_ == WIFI_COMPONENT_STATE_STA_SCANNING && !cyw43_wifi_scan_active(&cyw43_state)) {
|
|
211
211
|
this->scan_done_ = true;
|
|
212
|
-
ESP_LOGV(TAG, "Scan done
|
|
212
|
+
ESP_LOGV(TAG, "Scan done");
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
|
|
@@ -7,12 +7,12 @@ namespace wifi_info {
|
|
|
7
7
|
|
|
8
8
|
static const char *const TAG = "wifi_info";
|
|
9
9
|
|
|
10
|
-
void IPAddressWiFiInfo::dump_config() { LOG_TEXT_SENSOR("", "
|
|
11
|
-
void ScanResultsWiFiInfo::dump_config() { LOG_TEXT_SENSOR("", "
|
|
12
|
-
void SSIDWiFiInfo::dump_config() { LOG_TEXT_SENSOR("", "
|
|
13
|
-
void BSSIDWiFiInfo::dump_config() { LOG_TEXT_SENSOR("", "
|
|
14
|
-
void MacAddressWifiInfo::dump_config() { LOG_TEXT_SENSOR("", "
|
|
15
|
-
void DNSAddressWifiInfo::dump_config() { LOG_TEXT_SENSOR("", "
|
|
10
|
+
void IPAddressWiFiInfo::dump_config() { LOG_TEXT_SENSOR("", "IP Address", this); }
|
|
11
|
+
void ScanResultsWiFiInfo::dump_config() { LOG_TEXT_SENSOR("", "Scan Results", this); }
|
|
12
|
+
void SSIDWiFiInfo::dump_config() { LOG_TEXT_SENSOR("", "SSID", this); }
|
|
13
|
+
void BSSIDWiFiInfo::dump_config() { LOG_TEXT_SENSOR("", "BSSID", this); }
|
|
14
|
+
void MacAddressWifiInfo::dump_config() { LOG_TEXT_SENSOR("", "MAC Address", this); }
|
|
15
|
+
void DNSAddressWifiInfo::dump_config() { LOG_TEXT_SENSOR("", "DNS Address", this); }
|
|
16
16
|
|
|
17
17
|
} // namespace wifi_info
|
|
18
18
|
} // namespace esphome
|
|
@@ -6,14 +6,7 @@ import esphome.codegen as cg
|
|
|
6
6
|
from esphome.components import time
|
|
7
7
|
from esphome.components.esp32 import CORE, add_idf_sdkconfig_option
|
|
8
8
|
import esphome.config_validation as cv
|
|
9
|
-
from esphome.const import
|
|
10
|
-
CONF_ADDRESS,
|
|
11
|
-
CONF_ID,
|
|
12
|
-
CONF_REBOOT_TIMEOUT,
|
|
13
|
-
CONF_TIME_ID,
|
|
14
|
-
KEY_CORE,
|
|
15
|
-
KEY_FRAMEWORK_VERSION,
|
|
16
|
-
)
|
|
9
|
+
from esphome.const import CONF_ADDRESS, CONF_ID, CONF_REBOOT_TIMEOUT, CONF_TIME_ID
|
|
17
10
|
from esphome.core import TimePeriod
|
|
18
11
|
|
|
19
12
|
CONF_NETMASK = "netmask"
|
|
@@ -125,9 +118,7 @@ async def to_code(config):
|
|
|
125
118
|
|
|
126
119
|
# Workaround for crash on IDF 5+
|
|
127
120
|
# See https://github.com/trombik/esp_wireguard/issues/33#issuecomment-1568503651
|
|
128
|
-
if CORE.using_esp_idf
|
|
129
|
-
5, 0, 0
|
|
130
|
-
):
|
|
121
|
+
if CORE.using_esp_idf:
|
|
131
122
|
add_idf_sdkconfig_option("CONFIG_LWIP_PPP_SUPPORT", True)
|
|
132
123
|
|
|
133
124
|
# This flag is added here because the esp_wireguard library statically
|
|
@@ -91,6 +91,13 @@ bool parse_xiaomi_value(uint16_t value_type, const uint8_t *data, uint8_t value_
|
|
|
91
91
|
// MiaoMiaoce humidity, 1 byte, 8-bit unsigned integer, 1 %
|
|
92
92
|
else if ((value_type == 0x4C02) && (value_length == 1)) {
|
|
93
93
|
result.humidity = data[0];
|
|
94
|
+
}
|
|
95
|
+
// XMWSDJ04MMC humidity, 4 bytes, float, 0.1 °C
|
|
96
|
+
else if ((value_type == 0x4C08) && (value_length == 4)) {
|
|
97
|
+
const uint32_t int_number = encode_uint32(data[3], data[2], data[1], data[0]);
|
|
98
|
+
float humidity;
|
|
99
|
+
std::memcpy(&humidity, &int_number, sizeof(humidity));
|
|
100
|
+
result.humidity = humidity;
|
|
94
101
|
} else {
|
|
95
102
|
return false;
|
|
96
103
|
}
|
|
@@ -219,6 +226,11 @@ optional<XiaomiParseResult> parse_xiaomi_header(const esp32_ble_tracker::Service
|
|
|
219
226
|
} else if (device_uuid == 0x055b) { // small square body, segment LCD, encrypted
|
|
220
227
|
result.type = XiaomiParseResult::TYPE_LYWSD03MMC;
|
|
221
228
|
result.name = "LYWSD03MMC";
|
|
229
|
+
} else if (device_uuid == 0x1203) { // small square body, e-ink display, encrypted
|
|
230
|
+
result.type = XiaomiParseResult::TYPE_XMWSDJ04MMC;
|
|
231
|
+
result.name = "XMWSDJ04MMC";
|
|
232
|
+
if (raw.size() == 19)
|
|
233
|
+
result.raw_offset -= 6;
|
|
222
234
|
} else if (device_uuid == 0x07f6) { // Xiaomi-Yeelight BLE nightlight
|
|
223
235
|
result.type = XiaomiParseResult::TYPE_MJYD02YLA;
|
|
224
236
|
result.name = "MJYD02YLA";
|
|
@@ -308,7 +320,7 @@ bool decrypt_xiaomi_payload(std::vector<uint8_t> &raw, const uint8_t *bindkey, c
|
|
|
308
320
|
memcpy(mac_address + 4, mac_reverse + 1, 1);
|
|
309
321
|
memcpy(mac_address + 5, mac_reverse, 1);
|
|
310
322
|
ESP_LOGVV(TAG, "decrypt_xiaomi_payload(): authenticated decryption failed.");
|
|
311
|
-
ESP_LOGVV(TAG, " MAC address : %s",
|
|
323
|
+
ESP_LOGVV(TAG, " MAC address : %s", format_mac_address_pretty(mac_address).c_str());
|
|
312
324
|
ESP_LOGVV(TAG, " Packet : %s", format_hex_pretty(raw.data(), raw.size()).c_str());
|
|
313
325
|
ESP_LOGVV(TAG, " Key : %s", format_hex_pretty(vector.key, vector.keysize).c_str());
|
|
314
326
|
ESP_LOGVV(TAG, " Iv : %s", format_hex_pretty(vector.iv, vector.ivsize).c_str());
|
|
@@ -17,7 +17,6 @@ class XiaomiCGD1 : public Component, public esp32_ble_tracker::ESPBTDeviceListen
|
|
|
17
17
|
|
|
18
18
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
22
21
|
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
|
|
23
22
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
@@ -17,7 +17,6 @@ class XiaomiCGDK2 : public Component, public esp32_ble_tracker::ESPBTDeviceListe
|
|
|
17
17
|
|
|
18
18
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
22
21
|
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
|
|
23
22
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
@@ -18,7 +18,6 @@ class XiaomiCGG1 : public Component, public esp32_ble_tracker::ESPBTDeviceListen
|
|
|
18
18
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
19
19
|
|
|
20
20
|
void dump_config() override;
|
|
21
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
22
21
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
23
22
|
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
|
|
24
23
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
@@ -21,7 +21,6 @@ class XiaomiCGPR1 : public Component,
|
|
|
21
21
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
22
22
|
|
|
23
23
|
void dump_config() override;
|
|
24
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
25
24
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
26
25
|
void set_illuminance(sensor::Sensor *illuminance) { illuminance_ = illuminance; }
|
|
27
26
|
void set_idle_time(sensor::Sensor *idle_time) { idle_time_ = idle_time; }
|
|
@@ -17,7 +17,6 @@ class XiaomiGCLS002 : public Component, public esp32_ble_tracker::ESPBTDeviceLis
|
|
|
17
17
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
18
18
|
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
22
21
|
void set_moisture(sensor::Sensor *moisture) { moisture_ = moisture; }
|
|
23
22
|
void set_conductivity(sensor::Sensor *conductivity) { conductivity_ = conductivity; }
|
|
@@ -17,7 +17,6 @@ class XiaomiHHCCJCY01 : public Component, public esp32_ble_tracker::ESPBTDeviceL
|
|
|
17
17
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
18
18
|
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
22
21
|
void set_moisture(sensor::Sensor *moisture) { moisture_ = moisture; }
|
|
23
22
|
void set_conductivity(sensor::Sensor *conductivity) { conductivity_ = conductivity; }
|
|
@@ -16,7 +16,6 @@ class XiaomiHHCCJCY10 : public Component, public esp32_ble_tracker::ESPBTDeviceL
|
|
|
16
16
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
17
17
|
|
|
18
18
|
void dump_config() override;
|
|
19
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
20
19
|
void set_temperature(sensor::Sensor *temperature) { this->temperature_ = temperature; }
|
|
21
20
|
void set_moisture(sensor::Sensor *moisture) { this->moisture_ = moisture; }
|
|
22
21
|
void set_conductivity(sensor::Sensor *conductivity) { this->conductivity_ = conductivity; }
|
|
@@ -17,7 +17,6 @@ class XiaomiHHCCPOT002 : public Component, public esp32_ble_tracker::ESPBTDevice
|
|
|
17
17
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
18
18
|
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_moisture(sensor::Sensor *moisture) { moisture_ = moisture; }
|
|
22
21
|
void set_conductivity(sensor::Sensor *conductivity) { conductivity_ = conductivity; }
|
|
23
22
|
|
|
@@ -17,7 +17,6 @@ class XiaomiJQJCY01YM : public Component, public esp32_ble_tracker::ESPBTDeviceL
|
|
|
17
17
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
18
18
|
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
22
21
|
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
|
|
23
22
|
void set_formaldehyde(sensor::Sensor *formaldehyde) { formaldehyde_ = formaldehyde; }
|
|
@@ -17,7 +17,6 @@ class XiaomiLYWSD02 : public Component, public esp32_ble_tracker::ESPBTDeviceLis
|
|
|
17
17
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
18
18
|
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
22
21
|
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
|
|
23
22
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
@@ -18,7 +18,6 @@ class XiaomiLYWSD02MMC : public Component, public esp32_ble_tracker::ESPBTDevice
|
|
|
18
18
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
19
19
|
|
|
20
20
|
void dump_config() override;
|
|
21
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
22
21
|
void set_temperature(sensor::Sensor *temperature) { this->temperature_ = temperature; }
|
|
23
22
|
void set_humidity(sensor::Sensor *humidity) { this->humidity_ = humidity; }
|
|
24
23
|
void set_battery_level(sensor::Sensor *battery_level) { this->battery_level_ = battery_level; }
|
|
@@ -17,7 +17,6 @@ class XiaomiLYWSD03MMC : public Component, public esp32_ble_tracker::ESPBTDevice
|
|
|
17
17
|
|
|
18
18
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
22
21
|
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
|
|
23
22
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
@@ -17,7 +17,6 @@ class XiaomiLYWSDCGQ : public Component, public esp32_ble_tracker::ESPBTDeviceLi
|
|
|
17
17
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
18
18
|
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
22
21
|
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
|
|
23
22
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
@@ -17,7 +17,6 @@ class XiaomiMHOC303 : public Component, public esp32_ble_tracker::ESPBTDeviceLis
|
|
|
17
17
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
18
18
|
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
22
21
|
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
|
|
23
22
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
@@ -17,7 +17,6 @@ class XiaomiMHOC401 : public Component, public esp32_ble_tracker::ESPBTDeviceLis
|
|
|
17
17
|
|
|
18
18
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
19
19
|
void dump_config() override;
|
|
20
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
21
20
|
void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
|
|
22
21
|
void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
|
|
23
22
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
@@ -23,7 +23,6 @@ class XiaomiMiscale : public Component, public esp32_ble_tracker::ESPBTDeviceLis
|
|
|
23
23
|
|
|
24
24
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
25
25
|
void dump_config() override;
|
|
26
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
27
26
|
void set_weight(sensor::Sensor *weight) { weight_ = weight; }
|
|
28
27
|
void set_impedance(sensor::Sensor *impedance) { impedance_ = impedance; }
|
|
29
28
|
void set_clear_impedance(bool clear_impedance) { clear_impedance_ = clear_impedance; }
|
|
@@ -21,7 +21,6 @@ class XiaomiMJYD02YLA : public Component,
|
|
|
21
21
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
22
22
|
|
|
23
23
|
void dump_config() override;
|
|
24
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
25
24
|
void set_idle_time(sensor::Sensor *idle_time) { idle_time_ = idle_time; }
|
|
26
25
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
27
26
|
void set_illuminance(sensor::Sensor *illuminance) { illuminance_ = illuminance; }
|
|
@@ -19,7 +19,6 @@ class XiaomiMUE4094RT : public Component,
|
|
|
19
19
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
20
20
|
|
|
21
21
|
void dump_config() override;
|
|
22
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
23
22
|
void set_time(uint16_t timeout) { timeout_ = timeout; }
|
|
24
23
|
|
|
25
24
|
protected:
|
|
@@ -23,7 +23,6 @@ class XiaomiRTCGQ02LM : public Component, public esp32_ble_tracker::ESPBTDeviceL
|
|
|
23
23
|
|
|
24
24
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
25
25
|
void dump_config() override;
|
|
26
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
27
26
|
|
|
28
27
|
#ifdef USE_BINARY_SENSOR
|
|
29
28
|
void set_motion(binary_sensor::BinarySensor *motion) { this->motion_ = motion; }
|
|
@@ -20,7 +20,6 @@ class XiaomiWX08ZM : public Component,
|
|
|
20
20
|
bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
|
|
21
21
|
|
|
22
22
|
void dump_config() override;
|
|
23
|
-
float get_setup_priority() const override { return setup_priority::DATA; }
|
|
24
23
|
void set_tablet(sensor::Sensor *tablet) { tablet_ = tablet; }
|
|
25
24
|
void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
|
|
26
25
|
|
|
File without changes
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import esphome.codegen as cg
|
|
2
|
+
from esphome.components import esp32_ble_tracker, sensor
|
|
3
|
+
import esphome.config_validation as cv
|
|
4
|
+
from esphome.const import (
|
|
5
|
+
CONF_BATTERY_LEVEL,
|
|
6
|
+
CONF_BINDKEY,
|
|
7
|
+
CONF_HUMIDITY,
|
|
8
|
+
CONF_ID,
|
|
9
|
+
CONF_MAC_ADDRESS,
|
|
10
|
+
CONF_TEMPERATURE,
|
|
11
|
+
DEVICE_CLASS_BATTERY,
|
|
12
|
+
DEVICE_CLASS_HUMIDITY,
|
|
13
|
+
DEVICE_CLASS_TEMPERATURE,
|
|
14
|
+
ENTITY_CATEGORY_DIAGNOSTIC,
|
|
15
|
+
STATE_CLASS_MEASUREMENT,
|
|
16
|
+
UNIT_CELSIUS,
|
|
17
|
+
UNIT_PERCENT,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
AUTO_LOAD = ["xiaomi_ble"]
|
|
21
|
+
CODEOWNERS = ["@medusalix"]
|
|
22
|
+
DEPENDENCIES = ["esp32_ble_tracker"]
|
|
23
|
+
|
|
24
|
+
xiaomi_xmwsdj04mmc_ns = cg.esphome_ns.namespace("xiaomi_xmwsdj04mmc")
|
|
25
|
+
XiaomiXMWSDJ04MMC = xiaomi_xmwsdj04mmc_ns.class_(
|
|
26
|
+
"XiaomiXMWSDJ04MMC", esp32_ble_tracker.ESPBTDeviceListener, cg.Component
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
CONFIG_SCHEMA = (
|
|
30
|
+
cv.Schema(
|
|
31
|
+
{
|
|
32
|
+
cv.GenerateID(): cv.declare_id(XiaomiXMWSDJ04MMC),
|
|
33
|
+
cv.Required(CONF_BINDKEY): cv.bind_key,
|
|
34
|
+
cv.Required(CONF_MAC_ADDRESS): cv.mac_address,
|
|
35
|
+
cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(
|
|
36
|
+
unit_of_measurement=UNIT_CELSIUS,
|
|
37
|
+
accuracy_decimals=1,
|
|
38
|
+
device_class=DEVICE_CLASS_TEMPERATURE,
|
|
39
|
+
state_class=STATE_CLASS_MEASUREMENT,
|
|
40
|
+
),
|
|
41
|
+
cv.Optional(CONF_HUMIDITY): sensor.sensor_schema(
|
|
42
|
+
unit_of_measurement=UNIT_PERCENT,
|
|
43
|
+
accuracy_decimals=0,
|
|
44
|
+
device_class=DEVICE_CLASS_HUMIDITY,
|
|
45
|
+
state_class=STATE_CLASS_MEASUREMENT,
|
|
46
|
+
),
|
|
47
|
+
cv.Optional(CONF_BATTERY_LEVEL): sensor.sensor_schema(
|
|
48
|
+
unit_of_measurement=UNIT_PERCENT,
|
|
49
|
+
accuracy_decimals=0,
|
|
50
|
+
device_class=DEVICE_CLASS_BATTERY,
|
|
51
|
+
state_class=STATE_CLASS_MEASUREMENT,
|
|
52
|
+
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
|
|
53
|
+
),
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
.extend(esp32_ble_tracker.ESP_BLE_DEVICE_SCHEMA)
|
|
57
|
+
.extend(cv.COMPONENT_SCHEMA)
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
async def to_code(config):
|
|
62
|
+
var = cg.new_Pvariable(config[CONF_ID])
|
|
63
|
+
await cg.register_component(var, config)
|
|
64
|
+
await esp32_ble_tracker.register_ble_device(var, config)
|
|
65
|
+
|
|
66
|
+
cg.add(var.set_address(config[CONF_MAC_ADDRESS].as_hex))
|
|
67
|
+
cg.add(var.set_bindkey(config[CONF_BINDKEY]))
|
|
68
|
+
|
|
69
|
+
if temperature_config := config.get(CONF_TEMPERATURE):
|
|
70
|
+
sens = await sensor.new_sensor(temperature_config)
|
|
71
|
+
cg.add(var.set_temperature(sens))
|
|
72
|
+
if humidity_config := config.get(CONF_HUMIDITY):
|
|
73
|
+
sens = await sensor.new_sensor(humidity_config)
|
|
74
|
+
cg.add(var.set_humidity(sens))
|
|
75
|
+
if battery_level_config := config.get(CONF_BATTERY_LEVEL):
|
|
76
|
+
sens = await sensor.new_sensor(battery_level_config)
|
|
77
|
+
cg.add(var.set_battery_level(sens))
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#include "xiaomi_xmwsdj04mmc.h"
|
|
2
|
+
#include "esphome/core/log.h"
|
|
3
|
+
|
|
4
|
+
#ifdef USE_ESP32
|
|
5
|
+
|
|
6
|
+
namespace esphome {
|
|
7
|
+
namespace xiaomi_xmwsdj04mmc {
|
|
8
|
+
|
|
9
|
+
static const char *const TAG = "xiaomi_xmwsdj04mmc";
|
|
10
|
+
|
|
11
|
+
void XiaomiXMWSDJ04MMC::dump_config() {
|
|
12
|
+
ESP_LOGCONFIG(TAG, "Xiaomi XMWSDJ04MMC");
|
|
13
|
+
ESP_LOGCONFIG(TAG, " Bindkey: %s", format_hex_pretty(this->bindkey_, 16).c_str());
|
|
14
|
+
LOG_SENSOR(" ", "Temperature", this->temperature_);
|
|
15
|
+
LOG_SENSOR(" ", "Humidity", this->humidity_);
|
|
16
|
+
LOG_SENSOR(" ", "Battery Level", this->battery_level_);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
bool XiaomiXMWSDJ04MMC::parse_device(const esp32_ble_tracker::ESPBTDevice &device) {
|
|
20
|
+
if (device.address_uint64() != this->address_) {
|
|
21
|
+
ESP_LOGVV(TAG, "parse_device(): unknown MAC address.");
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
ESP_LOGVV(TAG, "parse_device(): MAC address %s found.", device.address_str().c_str());
|
|
25
|
+
|
|
26
|
+
bool success = false;
|
|
27
|
+
for (auto &service_data : device.get_service_datas()) {
|
|
28
|
+
auto res = xiaomi_ble::parse_xiaomi_header(service_data);
|
|
29
|
+
if (!res.has_value()) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (res->is_duplicate) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (res->has_encryption &&
|
|
36
|
+
(!(xiaomi_ble::decrypt_xiaomi_payload(const_cast<std::vector<uint8_t> &>(service_data.data), this->bindkey_,
|
|
37
|
+
this->address_)))) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (!(xiaomi_ble::parse_xiaomi_message(service_data.data, *res))) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (res->humidity.has_value() && this->humidity_ != nullptr) {
|
|
44
|
+
// see https://github.com/custom-components/sensor.mitemp_bt/issues/7#issuecomment-595948254
|
|
45
|
+
*res->humidity = trunc(*res->humidity);
|
|
46
|
+
}
|
|
47
|
+
if (!(xiaomi_ble::report_xiaomi_results(res, device.address_str()))) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (res->temperature.has_value() && this->temperature_ != nullptr)
|
|
51
|
+
this->temperature_->publish_state(*res->temperature);
|
|
52
|
+
if (res->humidity.has_value() && this->humidity_ != nullptr)
|
|
53
|
+
this->humidity_->publish_state(*res->humidity);
|
|
54
|
+
if (res->battery_level.has_value() && this->battery_level_ != nullptr)
|
|
55
|
+
this->battery_level_->publish_state(*res->battery_level);
|
|
56
|
+
success = true;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return success;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
void XiaomiXMWSDJ04MMC::set_bindkey(const std::string &bindkey) {
|
|
63
|
+
memset(this->bindkey_, 0, 16);
|
|
64
|
+
if (bindkey.size() != 32) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
char temp[3] = {0};
|
|
68
|
+
for (int i = 0; i < 16; i++) {
|
|
69
|
+
strncpy(temp, &(bindkey.c_str()[i * 2]), 2);
|
|
70
|
+
this->bindkey_[i] = std::strtoul(temp, nullptr, 16);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
} // namespace xiaomi_xmwsdj04mmc
|
|
75
|
+
} // namespace esphome
|
|
76
|
+
|
|
77
|
+
#endif
|