esphome 2025.7.5__py3-none-any.whl → 2025.8.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 +189 -82
- esphome/automation.py +2 -4
- esphome/build_gen/__init__.py +0 -0
- esphome/build_gen/platformio.py +102 -0
- esphome/components/a4988/a4988.cpp +0 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
- esphome/components/absolute_humidity/sensor.py +2 -2
- esphome/components/adc/__init__.py +123 -85
- esphome/components/adc/adc_sensor.h +98 -35
- esphome/components/adc/adc_sensor_common.cpp +10 -4
- esphome/components/adc/adc_sensor_esp32.cpp +291 -123
- esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
- esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
- esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
- esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
- esphome/components/adc/sensor.py +61 -27
- esphome/components/adc128s102/adc128s102.cpp +1 -4
- esphome/components/ade7880/sensor.py +75 -49
- esphome/components/ads1115/ads1115.cpp +0 -1
- esphome/components/ads1118/ads1118.cpp +0 -1
- esphome/components/ags10/ags10.cpp +0 -4
- esphome/components/aht10/aht10.cpp +0 -4
- esphome/components/aic3204/aic3204.cpp +0 -2
- esphome/components/airthings_wave_plus/__init__.py +1 -1
- esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
- esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
- esphome/components/airthings_wave_plus/sensor.py +55 -28
- esphome/components/alarm_control_panel/__init__.py +4 -9
- esphome/components/am2315c/am2315c.cpp +0 -2
- esphome/components/am2320/am2320.cpp +0 -1
- esphome/components/animation/__init__.py +14 -11
- esphome/components/apds9306/apds9306.cpp +0 -4
- esphome/components/apds9960/apds9960.cpp +0 -1
- esphome/components/api/__init__.py +29 -4
- esphome/components/api/api_connection.cpp +378 -401
- esphome/components/api/api_connection.h +102 -52
- esphome/components/api/api_frame_helper.cpp +69 -896
- esphome/components/api/api_frame_helper.h +31 -126
- esphome/components/api/api_frame_helper_noise.cpp +583 -0
- esphome/components/api/api_frame_helper_noise.h +68 -0
- esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
- esphome/components/api/api_frame_helper_plaintext.h +53 -0
- esphome/components/api/api_noise_context.h +2 -4
- esphome/components/api/api_pb2.cpp +1601 -1808
- esphome/components/api/api_pb2.h +367 -323
- esphome/components/api/api_pb2_dump.cpp +1137 -3466
- esphome/components/api/api_pb2_includes.h +34 -0
- esphome/components/api/api_pb2_service.cpp +94 -105
- esphome/components/api/api_pb2_service.h +27 -16
- esphome/components/api/api_server.cpp +18 -17
- esphome/components/api/api_server.h +8 -5
- esphome/components/api/client.py +16 -8
- esphome/components/api/custom_api_device.h +68 -14
- esphome/components/api/homeassistant_service.h +24 -19
- esphome/components/api/list_entities.cpp +3 -5
- esphome/components/api/list_entities.h +2 -4
- esphome/components/api/proto.cpp +3 -5
- esphome/components/api/proto.h +239 -274
- esphome/components/api/subscribe_state.cpp +2 -4
- esphome/components/api/subscribe_state.h +2 -4
- esphome/components/api/user_services.cpp +2 -4
- esphome/components/api/user_services.h +8 -8
- esphome/components/as3935/as3935.cpp +0 -2
- esphome/components/as3935_spi/as3935_spi.cpp +0 -2
- esphome/components/as5600/__init__.py +1 -1
- esphome/components/as5600/as5600.cpp +0 -2
- esphome/components/as5600/sensor/__init__.py +0 -1
- esphome/components/as7341/as7341.cpp +0 -1
- esphome/components/async_tcp/__init__.py +1 -1
- esphome/components/at581x/at581x.cpp +1 -1
- esphome/components/atm90e26/atm90e26.cpp +0 -1
- esphome/components/atm90e32/atm90e32.cpp +488 -118
- esphome/components/atm90e32/atm90e32.h +44 -5
- esphome/components/audio/audio.h +2 -2
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
- esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
- esphome/components/bh1750/bh1750.cpp +0 -1
- esphome/components/binary_sensor/__init__.py +14 -12
- esphome/components/ble_client/__init__.py +4 -7
- esphome/components/bluetooth_proxy/__init__.py +40 -3
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +387 -82
- esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
- esphome/components/bme280_base/bme280_base.cpp +15 -16
- esphome/components/bme680/bme680.cpp +2 -3
- esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
- esphome/components/bmi160/bmi160.cpp +0 -1
- esphome/components/bmp085/bmp085.cpp +0 -1
- esphome/components/bmp280_base/bmp280_base.cpp +13 -14
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
- esphome/components/bmp581/bmp581.cpp +0 -2
- esphome/components/bp1658cj/bp1658cj.cpp +0 -1
- esphome/components/bp5758d/bp5758d.cpp +0 -1
- esphome/components/button/__init__.py +0 -1
- esphome/components/canbus/__init__.py +2 -3
- esphome/components/canbus/canbus.cpp +0 -1
- esphome/components/cap1188/cap1188.cpp +0 -2
- esphome/components/captive_portal/__init__.py +1 -1
- esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
- esphome/components/ch422g/ch422g.cpp +0 -1
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
- esphome/components/climate/__init__.py +0 -1
- esphome/components/climate/climate_traits.h +24 -0
- esphome/components/cm1106/cm1106.cpp +0 -1
- esphome/components/const/__init__.py +6 -0
- esphome/components/cover/__init__.py +0 -1
- esphome/components/cover/cover.cpp +9 -13
- esphome/components/cs5460a/cs5460a.cpp +0 -2
- esphome/components/cse7761/cse7761.cpp +0 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
- esphome/components/dac7678/dac7678_output.cpp +0 -2
- esphome/components/dallas_temp/dallas_temp.cpp +0 -1
- esphome/components/datetime/__init__.py +0 -2
- esphome/components/debug/__init__.py +15 -1
- esphome/components/debug/debug_zephyr.cpp +281 -0
- esphome/components/debug/sensor.py +2 -1
- esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
- esphome/components/dfrobot_sen0395/__init__.py +1 -2
- esphome/components/dht/dht.cpp +0 -1
- esphome/components/dht12/dht12.cpp +0 -1
- esphome/components/display/__init__.py +16 -3
- esphome/components/display_menu_base/__init__.py +1 -1
- esphome/components/dps310/dps310.cpp +0 -2
- esphome/components/ds1307/ds1307.cpp +0 -1
- esphome/components/ds2484/ds2484.cpp +0 -1
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
- esphome/components/ee895/ee895.cpp +0 -1
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
- esphome/components/emc2101/emc2101.cpp +0 -2
- esphome/components/ens160_base/ens160_base.cpp +0 -2
- esphome/components/ens210/ens210.cpp +0 -1
- esphome/components/es7210/es7210.cpp +0 -2
- esphome/components/es7243e/es7243e.cpp +0 -2
- esphome/components/es8156/es8156.cpp +0 -2
- esphome/components/es8311/es8311.cpp +0 -2
- esphome/components/es8388/es8388.cpp +0 -2
- esphome/components/esp32/__init__.py +199 -58
- esphome/components/esp32/boards.py +17 -0
- esphome/components/esp32/gpio.cpp +0 -1
- esphome/components/esp32/gpio.py +1 -2
- esphome/components/esp32/gpio_esp32_h2.py +2 -7
- esphome/components/esp32/gpio_esp32_p4.py +2 -7
- esphome/components/esp32/post_build.py.script +112 -61
- esphome/components/esp32_ble/__init__.py +40 -2
- esphome/components/esp32_ble/ble.cpp +12 -8
- esphome/components/esp32_ble/ble.h +18 -18
- esphome/components/esp32_ble/ble_advertising.cpp +5 -5
- esphome/components/esp32_ble/ble_advertising.h +7 -5
- esphome/components/esp32_ble/ble_event.h +2 -4
- esphome/components/esp32_ble/ble_scan_result.h +2 -4
- esphome/components/esp32_ble/ble_uuid.cpp +5 -5
- esphome/components/esp32_ble/ble_uuid.h +6 -5
- esphome/components/esp32_ble_beacon/__init__.py +4 -0
- esphome/components/esp32_ble_client/__init__.py +1 -1
- esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
- esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
- esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
- esphome/components/esp32_ble_client/ble_client_base.h +17 -6
- esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
- esphome/components/esp32_ble_client/ble_service.cpp +4 -4
- esphome/components/esp32_ble_client/ble_service.h +6 -4
- esphome/components/esp32_ble_server/__init__.py +15 -12
- esphome/components/esp32_ble_tracker/__init__.py +79 -11
- esphome/components/esp32_ble_tracker/automation.h +4 -4
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
- esphome/components/esp32_camera/__init__.py +13 -1
- esphome/components/esp32_camera/esp32_camera.cpp +7 -2
- esphome/components/esp32_camera/esp32_camera.h +1 -0
- esphome/components/esp32_dac/esp32_dac.cpp +3 -19
- esphome/components/esp32_dac/esp32_dac.h +4 -8
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
- esphome/components/esp32_rmt_led_strip/light.py +1 -1
- esphome/components/esp32_touch/__init__.py +2 -3
- esphome/components/esp32_touch/esp32_touch.h +9 -6
- esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
- esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
- esphome/components/esp8266/__init__.py +3 -1
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
- esphome/components/esphome/ota/__init__.py +1 -2
- esphome/components/esphome/ota/ota_esphome.cpp +150 -77
- esphome/components/esphome/ota/ota_esphome.h +8 -1
- esphome/components/espnow/__init__.py +309 -0
- esphome/components/espnow/automation.h +175 -0
- esphome/components/espnow/espnow_component.cpp +468 -0
- esphome/components/espnow/espnow_component.h +183 -0
- esphome/components/espnow/espnow_err.h +19 -0
- esphome/components/espnow/espnow_packet.h +166 -0
- esphome/components/ethernet/__init__.py +7 -1
- esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
- esphome/components/ethernet/ethernet_component.cpp +0 -1
- esphome/components/ethernet/ethernet_component.h +4 -0
- esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
- esphome/components/event/__init__.py +0 -1
- esphome/components/factory_reset/__init__.py +92 -0
- esphome/components/factory_reset/factory_reset.cpp +76 -0
- esphome/components/factory_reset/factory_reset.h +43 -0
- esphome/components/fan/__init__.py +0 -1
- esphome/components/fan/fan_traits.h +16 -0
- esphome/components/fastled_base/fastled_light.cpp +0 -1
- esphome/components/fastled_spi/light.py +1 -3
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
- esphome/components/fs3000/fs3000.cpp +0 -2
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
- esphome/components/ft63x6/ft63x6.cpp +0 -1
- esphome/components/gdk101/gdk101.cpp +0 -1
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
- esphome/components/gl_r01_i2c/sensor.py +1 -1
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
- esphome/components/gpio/switch/gpio_switch.cpp +0 -2
- esphome/components/gpio_expander/cached_gpio.h +24 -15
- esphome/components/gps/__init__.py +6 -2
- esphome/components/gps/gps.cpp +50 -49
- esphome/components/gps/gps.h +4 -8
- esphome/components/gps/time/gps_time.cpp +3 -9
- esphome/components/gps/time/gps_time.h +4 -7
- esphome/components/graph/__init__.py +1 -1
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
- esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
- esphome/components/haier/climate.py +5 -10
- esphome/components/haier/haier_base.cpp +0 -1
- esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
- esphome/components/hdc1080/hdc1080.cpp +0 -2
- esphome/components/heatpumpir/climate.py +2 -2
- esphome/components/hlw8012/hlw8012.cpp +0 -1
- esphome/components/hm3301/hm3301.cpp +0 -1
- esphome/components/hmc5883l/hmc5883l.cpp +0 -1
- esphome/components/homeassistant/__init__.py +1 -0
- esphome/components/homeassistant/number/__init__.py +1 -0
- esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
- esphome/components/homeassistant/switch/__init__.py +1 -0
- esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
- esphome/components/honeywellabp/honeywellabp.cpp +1 -4
- esphome/components/host/__init__.py +2 -0
- esphome/components/hte501/hte501.cpp +0 -1
- esphome/components/http_request/__init__.py +2 -3
- esphome/components/http_request/http_request_idf.cpp +2 -2
- esphome/components/htu21d/htu21d.cpp +0 -2
- esphome/components/htu31d/htu31d.cpp +0 -2
- esphome/components/hx711/hx711.cpp +0 -1
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
- esphome/components/hydreon_rgxx/sensor.py +4 -5
- esphome/components/i2c/i2c_bus.h +1 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
- esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
- esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
- esphome/components/i2s_audio/__init__.py +6 -5
- esphome/components/i2s_audio/i2s_audio.cpp +0 -2
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
- esphome/components/i2s_audio/microphone/__init__.py +4 -6
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +0 -1
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -2
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
- esphome/components/ili9xxx/display.py +4 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
- esphome/components/image/__init__.py +123 -92
- esphome/components/improv_serial/__init__.py +7 -8
- esphome/components/ina219/ina219.cpp +0 -1
- esphome/components/ina226/ina226.cpp +0 -2
- esphome/components/ina260/ina260.cpp +0 -2
- esphome/components/ina2xx_base/__init__.py +2 -5
- esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
- esphome/components/ina3221/ina3221.cpp +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +0 -2
- esphome/components/interval/interval.h +5 -9
- esphome/components/json/__init__.py +1 -1
- esphome/components/kmeteriso/kmeteriso.cpp +0 -2
- esphome/components/lc709203f/lc709203f.cpp +0 -2
- esphome/components/lcd_gpio/display.py +1 -3
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
- esphome/components/ld2410/__init__.py +4 -6
- esphome/components/ld2410/binary_sensor.py +4 -0
- esphome/components/ld2410/ld2410.cpp +56 -100
- esphome/components/ld2410/ld2410.h +17 -15
- esphome/components/ld2410/sensor.py +24 -10
- esphome/components/ld2412/__init__.py +46 -0
- esphome/components/ld2412/binary_sensor.py +70 -0
- esphome/components/ld2412/button/__init__.py +74 -0
- esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2412/button/factory_reset_button.h +18 -0
- esphome/components/ld2412/button/query_button.cpp +9 -0
- esphome/components/ld2412/button/query_button.h +18 -0
- esphome/components/ld2412/button/restart_button.cpp +9 -0
- esphome/components/ld2412/button/restart_button.h +18 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
- esphome/components/ld2412/ld2412.cpp +861 -0
- esphome/components/ld2412/ld2412.h +141 -0
- esphome/components/ld2412/number/__init__.py +126 -0
- esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
- esphome/components/ld2412/number/gate_threshold_number.h +19 -0
- esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
- esphome/components/ld2412/number/light_threshold_number.h +18 -0
- esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
- esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
- esphome/components/ld2412/select/__init__.py +82 -0
- esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
- esphome/components/ld2412/select/baud_rate_select.h +18 -0
- esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
- esphome/components/ld2412/select/distance_resolution_select.h +18 -0
- esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
- esphome/components/ld2412/select/light_out_control_select.h +18 -0
- esphome/components/ld2412/sensor.py +124 -0
- esphome/components/ld2412/switch/__init__.py +45 -0
- esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
- esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
- esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
- esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
- esphome/components/ld2412/text_sensor.py +34 -0
- esphome/components/ld2420/ld2420.cpp +0 -1
- esphome/components/ld2450/__init__.py +3 -4
- esphome/components/ld2450/binary_sensor.py +3 -0
- esphome/components/ld2450/ld2450.cpp +77 -165
- esphome/components/ld2450/ld2450.h +26 -54
- esphome/components/ld2450/sensor.py +120 -6
- esphome/components/ld2450/text_sensor.py +5 -4
- esphome/components/ld24xx/__init__.py +1 -0
- esphome/components/ld24xx/ld24xx.h +65 -0
- esphome/components/ledc/ledc_output.cpp +0 -1
- esphome/components/libretiny/__init__.py +2 -0
- esphome/components/light/__init__.py +0 -1
- esphome/components/light/effects.py +70 -45
- esphome/components/light/light_call.cpp +101 -66
- esphome/components/light/light_color_values.h +16 -11
- esphome/components/light/light_json_schema.cpp +46 -44
- esphome/components/light/light_state.cpp +8 -11
- esphome/components/light/light_traits.h +17 -0
- esphome/components/lightwaverf/lightwaverf.cpp +0 -2
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
- esphome/components/lock/__init__.py +0 -1
- esphome/components/logger/__init__.py +31 -9
- esphome/components/logger/logger.cpp +12 -7
- esphome/components/logger/logger.h +25 -14
- esphome/components/logger/logger_esp32.cpp +2 -7
- esphome/components/logger/logger_esp8266.cpp +2 -4
- esphome/components/logger/logger_host.cpp +2 -4
- esphome/components/logger/logger_libretiny.cpp +2 -4
- esphome/components/logger/logger_rp2040.cpp +2 -4
- esphome/components/logger/logger_zephyr.cpp +86 -0
- esphome/components/logger/select/logger_level_select.cpp +2 -4
- esphome/components/logger/select/logger_level_select.h +2 -4
- esphome/components/logger/task_log_buffer.cpp +2 -4
- esphome/components/logger/task_log_buffer.h +2 -4
- esphome/components/lps22/sensor.py +5 -5
- esphome/components/ltr390/ltr390.cpp +0 -2
- esphome/components/ltr501/ltr501.cpp +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
- esphome/components/lvgl/__init__.py +14 -13
- esphome/components/lvgl/automation.py +2 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/helpers.py +1 -1
- esphome/components/lvgl/lv_validation.py +7 -4
- esphome/components/lvgl/lvgl_esphome.cpp +2 -3
- esphome/components/lvgl/styles.py +2 -2
- esphome/components/lvgl/types.py +1 -1
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/arc.py +14 -11
- esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
- esphome/components/lvgl/widgets/qrcode.py +7 -7
- esphome/components/lvgl/widgets/spinner.py +6 -6
- esphome/components/lvgl/widgets/switch.py +2 -2
- esphome/components/lvgl/widgets/tabview.py +3 -3
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
- esphome/components/matrix_keypad/__init__.py +4 -3
- esphome/components/max17043/max17043.cpp +0 -2
- esphome/components/max31855/max31855.cpp +1 -4
- esphome/components/max31856/max31856.cpp +0 -4
- esphome/components/max31865/max31865.cpp +0 -1
- esphome/components/max44009/max44009.cpp +0 -1
- esphome/components/max6675/max6675.cpp +1 -4
- esphome/components/max6956/max6956.cpp +0 -1
- esphome/components/max7219/max7219.cpp +0 -1
- esphome/components/max7219digit/display.py +1 -1
- esphome/components/max7219digit/max7219digit.cpp +0 -1
- esphome/components/max9611/max9611.cpp +0 -1
- esphome/components/mcp23008/__init__.py +1 -1
- esphome/components/mcp23008/mcp23008.cpp +0 -1
- esphome/components/mcp23016/mcp23016.cpp +0 -1
- esphome/components/mcp23017/__init__.py +1 -1
- esphome/components/mcp23017/mcp23017.cpp +0 -1
- esphome/components/mcp23s08/__init__.py +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +0 -1
- esphome/components/mcp23s17/__init__.py +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +0 -1
- esphome/components/mcp23x08_base/__init__.py +2 -0
- esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
- esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
- esphome/components/mcp23x17_base/__init__.py +2 -0
- esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
- esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
- esphome/components/mcp23xxx_base/__init__.py +11 -5
- esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
- esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
- esphome/components/mcp3008/mcp3008.cpp +1 -4
- esphome/components/mcp3204/mcp3204.cpp +1 -4
- esphome/components/mcp4461/mcp4461.cpp +0 -1
- esphome/components/mcp4725/mcp4725.cpp +0 -1
- esphome/components/mcp4728/mcp4728.cpp +0 -1
- esphome/components/mcp9600/mcp9600.cpp +0 -2
- esphome/components/mcp9808/mcp9808.cpp +0 -2
- esphome/components/mdns/__init__.py +3 -0
- esphome/components/mdns/mdns_component.cpp +2 -0
- esphome/components/mdns/mdns_component.h +4 -0
- esphome/components/media_player/__init__.py +40 -0
- esphome/components/media_player/automation.h +16 -0
- esphome/components/media_player/media_player.cpp +13 -0
- esphome/components/media_player/media_player.h +50 -3
- esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
- esphome/components/mics_4514/mics_4514.cpp +1 -6
- esphome/components/midea/ir_transmitter.h +4 -4
- esphome/components/mipi/__init__.py +416 -0
- esphome/components/mipi_dsi/__init__.py +5 -0
- esphome/components/mipi_dsi/display.py +233 -0
- esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
- esphome/components/mipi_dsi/mipi_dsi.h +123 -0
- esphome/components/mipi_dsi/models/__init__.py +0 -0
- esphome/components/mipi_dsi/models/guition.py +38 -0
- esphome/components/mipi_dsi/models/m5stack.py +57 -0
- esphome/components/mipi_dsi/models/waveshare.py +105 -0
- esphome/components/mipi_rgb/models/lilygo.py +0 -0
- esphome/components/mipi_spi/__init__.py +0 -9
- esphome/components/mipi_spi/display.py +220 -256
- esphome/components/mipi_spi/mipi_spi.cpp +1 -485
- esphome/components/mipi_spi/mipi_spi.h +556 -108
- esphome/components/mipi_spi/models/__init__.py +0 -65
- esphome/components/mipi_spi/models/adafruit.py +30 -0
- esphome/components/mipi_spi/models/amoled.py +41 -5
- esphome/components/mipi_spi/models/ili.py +5 -5
- esphome/components/mipi_spi/models/jc.py +1 -3
- esphome/components/mipi_spi/models/lilygo.py +1 -1
- esphome/components/mipi_spi/models/waveshare.py +16 -1
- esphome/components/mixer/speaker/__init__.py +4 -5
- esphome/components/mlx90393/sensor.py +7 -5
- esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
- esphome/components/mlx90614/mlx90614.cpp +0 -1
- esphome/components/mmc5603/mmc5603.cpp +0 -1
- esphome/components/mmc5983/mmc5983.cpp +0 -2
- esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
- esphome/components/mpr121/__init__.py +7 -6
- esphome/components/mpr121/mpr121.cpp +0 -1
- esphome/components/mpu6050/mpu6050.cpp +0 -1
- esphome/components/mpu6886/mpu6886.cpp +0 -1
- esphome/components/mqtt/__init__.py +1 -2
- esphome/components/mqtt/mqtt_button.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +0 -1
- esphome/components/mqtt/mqtt_component.cpp +8 -14
- esphome/components/mqtt/mqtt_component.h +0 -7
- esphome/components/mqtt/mqtt_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_sensor.h +0 -1
- esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_text_sensor.h +0 -1
- esphome/components/ms5611/ms5611.cpp +0 -1
- esphome/components/ms8607/ms8607.cpp +0 -1
- esphome/components/msa3xx/msa3xx.cpp +0 -2
- esphome/components/my9231/my9231.cpp +0 -2
- esphome/components/nau7802/nau7802.cpp +0 -1
- esphome/components/neopixelbus/light.py +3 -0
- esphome/components/network/util.cpp +29 -0
- esphome/components/nextion/nextion.cpp +0 -1
- esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
- esphome/components/npi19/npi19.cpp +0 -2
- esphome/components/nrf52/__init__.py +223 -0
- esphome/components/nrf52/boards.py +34 -0
- esphome/components/nrf52/const.py +18 -0
- esphome/components/nrf52/gpio.py +79 -0
- esphome/components/number/__init__.py +2 -1
- esphome/components/one_wire/__init__.py +1 -2
- esphome/components/one_wire/one_wire.cpp +0 -2
- esphome/components/one_wire/one_wire.h +0 -2
- esphome/components/opentherm/hub.cpp +0 -1
- esphome/components/opentherm/number/__init__.py +2 -2
- esphome/components/openthread/__init__.py +2 -3
- esphome/components/openthread/openthread.cpp +30 -13
- esphome/components/openthread/openthread.h +3 -0
- esphome/components/openthread/openthread_esp.cpp +3 -1
- esphome/components/opt3001/sensor.py +2 -6
- esphome/components/output/__init__.py +38 -0
- esphome/components/output/automation.h +24 -0
- esphome/components/output/switch/output_switch.cpp +0 -2
- esphome/components/packages/__init__.py +1 -2
- esphome/components/packet_transport/__init__.py +4 -3
- esphome/components/pca6416a/pca6416a.cpp +0 -1
- esphome/components/pca9554/pca9554.cpp +0 -1
- esphome/components/pca9685/pca9685_output.cpp +0 -2
- esphome/components/pcf85063/pcf85063.cpp +0 -1
- esphome/components/pcf8563/pcf8563.cpp +0 -1
- esphome/components/pcf8574/pcf8574.cpp +0 -1
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
- esphome/components/pipsolar/sensor/__init__.py +1 -1
- esphome/components/pm2005/pm2005.cpp +0 -1
- esphome/components/pmsa003i/pmsa003i.cpp +0 -2
- esphome/components/pmwcs3/sensor.py +1 -2
- esphome/components/pn532/pn532.cpp +0 -2
- esphome/components/pn532_spi/pn532_spi.cpp +0 -2
- esphome/components/power_supply/power_supply.cpp +7 -10
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/psram/__init__.py +6 -1
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
- esphome/components/pulse_counter/sensor.py +9 -6
- esphome/components/pylontech/pylontech.cpp +0 -1
- esphome/components/qmc5883l/qmc5883l.cpp +0 -1
- esphome/components/qmp6988/qmp6988.cpp +0 -2
- esphome/components/qspi_dbi/display.py +2 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
- esphome/components/qwiic_pir/binary_sensor.py +2 -3
- esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
- esphome/components/rc522/rc522.cpp +9 -31
- esphome/components/rc522_spi/rc522_spi.cpp +0 -1
- esphome/components/remote_base/__init__.py +5 -6
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
- esphome/components/remote_transmitter/__init__.py +26 -0
- esphome/components/remote_transmitter/automation.h +18 -0
- esphome/components/remote_transmitter/remote_transmitter.h +2 -1
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
- esphome/components/resampler/speaker/__init__.py +4 -5
- esphome/components/rf_bridge/__init__.py +4 -8
- esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
- esphome/components/rp2040/__init__.py +3 -1
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
- esphome/components/rp2040_pio_led_strip/light.py +1 -2
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
- esphome/components/rpi_dpi_rgb/display.py +13 -15
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
- esphome/components/runtime_stats/__init__.py +34 -0
- esphome/components/runtime_stats/runtime_stats.cpp +102 -0
- esphome/components/runtime_stats/runtime_stats.h +132 -0
- esphome/components/scd30/scd30.cpp +0 -2
- esphome/components/scd30/sensor.py +1 -2
- esphome/components/scd4x/scd4x.cpp +0 -1
- esphome/components/scd4x/sensor.py +1 -3
- esphome/components/sdl/display.py +3 -1
- esphome/components/sdl/sdl_esphome.cpp +0 -2
- esphome/components/sdp3x/sdp3x.cpp +0 -2
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
- esphome/components/select/__init__.py +2 -3
- esphome/components/select/select_traits.cpp +1 -1
- esphome/components/select/select_traits.h +1 -1
- esphome/components/sen0321/sen0321.cpp +0 -1
- esphome/components/sen5x/sen5x.cpp +0 -2
- esphome/components/sensor/__init__.py +36 -4
- esphome/components/sensor/filter.cpp +49 -10
- esphome/components/sensor/filter.h +22 -7
- esphome/components/sensor/sensor.cpp +0 -1
- esphome/components/sensor/sensor.h +0 -9
- esphome/components/sfa30/sfa30.cpp +0 -4
- esphome/components/sgp30/sgp30.cpp +0 -2
- esphome/components/sgp4x/sensor.py +1 -1
- esphome/components/sgp4x/sgp4x.cpp +0 -2
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
- esphome/components/sht3xd/sht3xd.cpp +0 -2
- esphome/components/sht4x/sht4x.cpp +0 -2
- esphome/components/shtcx/shtcx.cpp +0 -1
- esphome/components/sim800l/__init__.py +2 -4
- esphome/components/sm16716/sm16716.cpp +0 -1
- esphome/components/sm2135/sm2135.cpp +0 -1
- esphome/components/sm2235/sm2235.cpp +0 -1
- esphome/components/sm2335/sm2335.cpp +0 -1
- esphome/components/sn74hc165/sn74hc165.cpp +0 -1
- esphome/components/sn74hc595/sn74hc595.cpp +0 -1
- esphome/components/sntp/sntp_component.cpp +0 -1
- esphome/components/sound_level/sensor.py +1 -1
- esphome/components/speaker/media_player/__init__.py +21 -33
- esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
- esphome/components/spi/__init__.py +29 -13
- esphome/components/spi/spi.cpp +0 -2
- esphome/components/spi_device/spi_device.cpp +1 -4
- esphome/components/sprinkler/__init__.py +4 -4
- esphome/components/sps30/sps30.cpp +0 -1
- esphome/components/ssd1306_base/__init__.py +11 -11
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
- esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
- esphome/components/st7567_spi/st7567_spi.cpp +0 -1
- esphome/components/st7701s/display.py +10 -14
- esphome/components/st7701s/st7701s.cpp +0 -3
- esphome/components/st7735/st7735.cpp +0 -1
- esphome/components/st7789v/st7789v.cpp +0 -1
- esphome/components/st7920/st7920.cpp +0 -1
- esphome/components/status_led/light/status_led_light.cpp +0 -2
- esphome/components/status_led/status_led.cpp +0 -1
- esphome/components/stepper/__init__.py +2 -4
- esphome/components/sts3x/sts3x.cpp +0 -1
- esphome/components/substitutions/__init__.py +10 -16
- esphome/components/substitutions/jinja.py +24 -1
- esphome/components/sun/__init__.py +2 -3
- esphome/components/switch/__init__.py +31 -1
- esphome/components/switch/automation.h +24 -0
- esphome/components/switch/switch.cpp +8 -0
- esphome/components/switch/switch.h +8 -0
- esphome/components/sx126x/sx126x.cpp +0 -2
- esphome/components/sx127x/sx127x.cpp +0 -2
- esphome/components/sx1509/__init__.py +7 -5
- esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
- esphome/components/sx1509/sx1509.cpp +0 -2
- esphome/components/syslog/esphome_syslog.cpp +1 -1
- esphome/components/tc74/tc74.cpp +0 -1
- esphome/components/tca9548a/tca9548a.cpp +0 -1
- esphome/components/tca9555/tca9555.cpp +0 -1
- esphome/components/tcs34725/tcs34725.cpp +0 -1
- esphome/components/tee501/tee501.cpp +0 -1
- esphome/components/tem3200/tem3200.cpp +0 -2
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
- esphome/components/template/cover/template_cover.cpp +0 -1
- esphome/components/template/select/template_select.cpp +0 -1
- esphome/components/template/text/template_text.cpp +0 -2
- esphome/components/template/valve/template_valve.cpp +0 -1
- esphome/components/text/__init__.py +0 -1
- esphome/components/text/text_traits.h +2 -0
- esphome/components/text_sensor/__init__.py +2 -1
- esphome/components/text_sensor/text_sensor.cpp +0 -2
- esphome/components/text_sensor/text_sensor.h +0 -8
- esphome/components/thermostat/climate.py +4 -4
- esphome/components/time/__init__.py +7 -4
- esphome/components/time/real_time_clock.cpp +16 -3
- esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
- esphome/components/tlc5947/tlc5947.cpp +0 -2
- esphome/components/tlc5971/tlc5971.cpp +0 -2
- esphome/components/tm1621/tm1621.cpp +0 -2
- esphome/components/tm1637/tm1637.cpp +0 -2
- esphome/components/tm1638/tm1638.cpp +0 -2
- esphome/components/tm1651/__init__.py +45 -48
- esphome/components/tm1651/tm1651.cpp +213 -47
- esphome/components/tm1651/tm1651.h +37 -32
- esphome/components/tmp117/tmp117.cpp +0 -2
- esphome/components/tsl2561/tsl2561.cpp +0 -1
- esphome/components/tsl2591/tsl2591.cpp +0 -1
- esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
- esphome/components/tuya/climate/__init__.py +9 -10
- esphome/components/tuya/number/__init__.py +8 -6
- esphome/components/tx20/tx20.cpp +0 -1
- esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
- esphome/components/uart/uart_component_esp8266.cpp +0 -1
- esphome/components/uart/uart_component_esp_idf.cpp +0 -2
- esphome/components/uart/uart_component_libretiny.cpp +0 -2
- esphome/components/uart/uart_component_rp2040.cpp +0 -2
- esphome/components/udp/__init__.py +1 -1
- esphome/components/ufire_ec/sensor.py +1 -2
- esphome/components/ufire_ec/ufire_ec.cpp +0 -2
- esphome/components/ufire_ise/sensor.py +1 -2
- esphome/components/ufire_ise/ufire_ise.cpp +0 -2
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
- esphome/components/update/__init__.py +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
- esphome/components/usb_host/usb_host_client.cpp +0 -1
- esphome/components/usb_host/usb_host_component.cpp +0 -1
- esphome/components/valve/__init__.py +0 -1
- esphome/components/veml3235/veml3235.cpp +0 -3
- esphome/components/veml7700/veml7700.cpp +0 -2
- esphome/components/version/version_text_sensor.cpp +0 -1
- esphome/components/version/version_text_sensor.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
- esphome/components/voice_assistant/voice_assistant.cpp +9 -8
- esphome/components/web_server/__init__.py +13 -0
- esphome/components/web_server/web_server.cpp +187 -352
- esphome/components/web_server/web_server.h +61 -1
- esphome/components/web_server_base/__init__.py +1 -1
- esphome/components/web_server_base/web_server_base.cpp +2 -0
- esphome/components/web_server_base/web_server_base.h +6 -0
- esphome/components/web_server_idf/web_server_idf.cpp +10 -8
- esphome/components/web_server_idf/web_server_idf.h +2 -0
- esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
- esphome/components/weikai_spi/weikai_spi.cpp +1 -1
- esphome/components/wifi/__init__.py +8 -43
- esphome/components/wifi/wifi_component.cpp +100 -36
- esphome/components/wifi/wifi_component.h +5 -1
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
- esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
- esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
- esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
- esphome/components/wireguard/wireguard.cpp +0 -2
- esphome/components/x9c/x9c.cpp +0 -2
- esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
- esphome/components/xl9535/xl9535.cpp +0 -2
- esphome/components/zephyr/__init__.py +252 -0
- esphome/components/zephyr/const.py +16 -0
- esphome/components/zephyr/core.cpp +90 -0
- esphome/components/zephyr/gpio.cpp +120 -0
- esphome/components/zephyr/gpio.h +38 -0
- esphome/components/zephyr/pre_build.py.script +4 -0
- esphome/components/zephyr/preferences.cpp +156 -0
- esphome/components/zephyr/preferences.h +13 -0
- esphome/config.py +38 -16
- esphome/config_helpers.py +1 -2
- esphome/config_validation.py +12 -16
- esphome/const.py +26 -1
- esphome/core/__init__.py +88 -51
- esphome/core/application.cpp +75 -21
- esphome/core/application.h +106 -171
- esphome/core/color.h +10 -0
- esphome/core/component.cpp +41 -25
- esphome/core/component.h +9 -6
- esphome/core/component_iterator.cpp +61 -261
- esphome/core/component_iterator.h +15 -0
- esphome/core/config.py +26 -11
- esphome/core/defines.h +40 -2
- esphome/core/entity_base.h +18 -0
- esphome/core/entity_helpers.py +45 -10
- esphome/core/helpers.cpp +8 -15
- esphome/core/helpers.h +60 -6
- esphome/core/lock_free_queue.h +1 -1
- esphome/core/scheduler.cpp +277 -74
- esphome/core/scheduler.h +89 -27
- esphome/cpp_generator.py +2 -6
- esphome/cpp_helpers.py +1 -1
- esphome/dashboard/dashboard.py +2 -3
- esphome/dashboard/dns.py +2 -8
- esphome/dashboard/web_server.py +34 -19
- esphome/espota2.py +1 -4
- esphome/git.py +3 -1
- esphome/helpers.py +23 -4
- esphome/log.py +3 -1
- esphome/mqtt.py +3 -5
- esphome/platformio_api.py +7 -4
- esphome/types.py +12 -0
- esphome/util.py +20 -8
- esphome/voluptuous_schema.py +4 -3
- esphome/vscode.py +1 -2
- esphome/wizard.py +1 -4
- esphome/writer.py +5 -107
- esphome/yaml_util.py +7 -5
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/METADATA +13 -14
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/RECORD +751 -671
- esphome/components/mipi_spi/models/commands.py +0 -82
- /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/WHEEL +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/entry_points.txt +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
|
|
2
|
+
#include "adc_sensor.h"
|
|
3
|
+
#ifdef USE_ZEPHYR
|
|
4
|
+
#include "esphome/core/log.h"
|
|
5
|
+
|
|
6
|
+
#include "hal/nrf_saadc.h"
|
|
7
|
+
|
|
8
|
+
namespace esphome {
|
|
9
|
+
namespace adc {
|
|
10
|
+
|
|
11
|
+
static const char *const TAG = "adc.zephyr";
|
|
12
|
+
|
|
13
|
+
void ADCSensor::setup() {
|
|
14
|
+
if (!adc_is_ready_dt(this->channel_)) {
|
|
15
|
+
ESP_LOGE(TAG, "ADC controller device %s not ready", this->channel_->dev->name);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
auto err = adc_channel_setup_dt(this->channel_);
|
|
20
|
+
if (err < 0) {
|
|
21
|
+
ESP_LOGE(TAG, "Could not setup channel %s (%d)", this->channel_->dev->name, err);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
|
|
27
|
+
static const LogString *gain_to_str(enum adc_gain gain) {
|
|
28
|
+
switch (gain) {
|
|
29
|
+
case ADC_GAIN_1_6:
|
|
30
|
+
return LOG_STR("1/6");
|
|
31
|
+
case ADC_GAIN_1_5:
|
|
32
|
+
return LOG_STR("1/5");
|
|
33
|
+
case ADC_GAIN_1_4:
|
|
34
|
+
return LOG_STR("1/4");
|
|
35
|
+
case ADC_GAIN_1_3:
|
|
36
|
+
return LOG_STR("1/3");
|
|
37
|
+
case ADC_GAIN_2_5:
|
|
38
|
+
return LOG_STR("2/5");
|
|
39
|
+
case ADC_GAIN_1_2:
|
|
40
|
+
return LOG_STR("1/2");
|
|
41
|
+
case ADC_GAIN_2_3:
|
|
42
|
+
return LOG_STR("2/3");
|
|
43
|
+
case ADC_GAIN_4_5:
|
|
44
|
+
return LOG_STR("4/5");
|
|
45
|
+
case ADC_GAIN_1:
|
|
46
|
+
return LOG_STR("1");
|
|
47
|
+
case ADC_GAIN_2:
|
|
48
|
+
return LOG_STR("2");
|
|
49
|
+
case ADC_GAIN_3:
|
|
50
|
+
return LOG_STR("3");
|
|
51
|
+
case ADC_GAIN_4:
|
|
52
|
+
return LOG_STR("4");
|
|
53
|
+
case ADC_GAIN_6:
|
|
54
|
+
return LOG_STR("6");
|
|
55
|
+
case ADC_GAIN_8:
|
|
56
|
+
return LOG_STR("8");
|
|
57
|
+
case ADC_GAIN_12:
|
|
58
|
+
return LOG_STR("12");
|
|
59
|
+
case ADC_GAIN_16:
|
|
60
|
+
return LOG_STR("16");
|
|
61
|
+
case ADC_GAIN_24:
|
|
62
|
+
return LOG_STR("24");
|
|
63
|
+
case ADC_GAIN_32:
|
|
64
|
+
return LOG_STR("32");
|
|
65
|
+
case ADC_GAIN_64:
|
|
66
|
+
return LOG_STR("64");
|
|
67
|
+
case ADC_GAIN_128:
|
|
68
|
+
return LOG_STR("128");
|
|
69
|
+
}
|
|
70
|
+
return LOG_STR("undefined gain");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
static const LogString *reference_to_str(enum adc_reference reference) {
|
|
74
|
+
switch (reference) {
|
|
75
|
+
case ADC_REF_VDD_1:
|
|
76
|
+
return LOG_STR("VDD");
|
|
77
|
+
case ADC_REF_VDD_1_2:
|
|
78
|
+
return LOG_STR("VDD/2");
|
|
79
|
+
case ADC_REF_VDD_1_3:
|
|
80
|
+
return LOG_STR("VDD/3");
|
|
81
|
+
case ADC_REF_VDD_1_4:
|
|
82
|
+
return LOG_STR("VDD/4");
|
|
83
|
+
case ADC_REF_INTERNAL:
|
|
84
|
+
return LOG_STR("INTERNAL");
|
|
85
|
+
case ADC_REF_EXTERNAL0:
|
|
86
|
+
return LOG_STR("External, input 0");
|
|
87
|
+
case ADC_REF_EXTERNAL1:
|
|
88
|
+
return LOG_STR("External, input 1");
|
|
89
|
+
}
|
|
90
|
+
return LOG_STR("undefined reference");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
static const LogString *input_to_str(uint8_t input) {
|
|
94
|
+
switch (input) {
|
|
95
|
+
case NRF_SAADC_INPUT_AIN0:
|
|
96
|
+
return LOG_STR("AIN0");
|
|
97
|
+
case NRF_SAADC_INPUT_AIN1:
|
|
98
|
+
return LOG_STR("AIN1");
|
|
99
|
+
case NRF_SAADC_INPUT_AIN2:
|
|
100
|
+
return LOG_STR("AIN2");
|
|
101
|
+
case NRF_SAADC_INPUT_AIN3:
|
|
102
|
+
return LOG_STR("AIN3");
|
|
103
|
+
case NRF_SAADC_INPUT_AIN4:
|
|
104
|
+
return LOG_STR("AIN4");
|
|
105
|
+
case NRF_SAADC_INPUT_AIN5:
|
|
106
|
+
return LOG_STR("AIN5");
|
|
107
|
+
case NRF_SAADC_INPUT_AIN6:
|
|
108
|
+
return LOG_STR("AIN6");
|
|
109
|
+
case NRF_SAADC_INPUT_AIN7:
|
|
110
|
+
return LOG_STR("AIN7");
|
|
111
|
+
case NRF_SAADC_INPUT_VDD:
|
|
112
|
+
return LOG_STR("VDD");
|
|
113
|
+
case NRF_SAADC_INPUT_VDDHDIV5:
|
|
114
|
+
return LOG_STR("VDDHDIV5");
|
|
115
|
+
}
|
|
116
|
+
return LOG_STR("undefined input");
|
|
117
|
+
}
|
|
118
|
+
#endif // ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
|
|
119
|
+
|
|
120
|
+
void ADCSensor::dump_config() {
|
|
121
|
+
LOG_SENSOR("", "ADC Sensor", this);
|
|
122
|
+
LOG_PIN(" Pin: ", this->pin_);
|
|
123
|
+
#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
|
|
124
|
+
ESP_LOGV(TAG,
|
|
125
|
+
" Name: %s\n"
|
|
126
|
+
" Channel: %d\n"
|
|
127
|
+
" vref_mv: %d\n"
|
|
128
|
+
" Resolution %d\n"
|
|
129
|
+
" Oversampling %d",
|
|
130
|
+
this->channel_->dev->name, this->channel_->channel_id, this->channel_->vref_mv, this->channel_->resolution,
|
|
131
|
+
this->channel_->oversampling);
|
|
132
|
+
|
|
133
|
+
ESP_LOGV(TAG,
|
|
134
|
+
" Gain: %s\n"
|
|
135
|
+
" reference: %s\n"
|
|
136
|
+
" acquisition_time: %d\n"
|
|
137
|
+
" differential %s",
|
|
138
|
+
LOG_STR_ARG(gain_to_str(this->channel_->channel_cfg.gain)),
|
|
139
|
+
LOG_STR_ARG(reference_to_str(this->channel_->channel_cfg.reference)),
|
|
140
|
+
this->channel_->channel_cfg.acquisition_time, YESNO(this->channel_->channel_cfg.differential));
|
|
141
|
+
if (this->channel_->channel_cfg.differential) {
|
|
142
|
+
ESP_LOGV(TAG,
|
|
143
|
+
" Positive: %s\n"
|
|
144
|
+
" Negative: %s",
|
|
145
|
+
LOG_STR_ARG(input_to_str(this->channel_->channel_cfg.input_positive)),
|
|
146
|
+
LOG_STR_ARG(input_to_str(this->channel_->channel_cfg.input_negative)));
|
|
147
|
+
} else {
|
|
148
|
+
ESP_LOGV(TAG, " Positive: %s", LOG_STR_ARG(input_to_str(this->channel_->channel_cfg.input_positive)));
|
|
149
|
+
}
|
|
150
|
+
#endif
|
|
151
|
+
|
|
152
|
+
LOG_UPDATE_INTERVAL(this);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
float ADCSensor::sample() {
|
|
156
|
+
auto aggr = Aggregator<int32_t>(this->sampling_mode_);
|
|
157
|
+
int err;
|
|
158
|
+
for (uint8_t sample = 0; sample < this->sample_count_; sample++) {
|
|
159
|
+
int16_t buf = 0;
|
|
160
|
+
struct adc_sequence sequence = {
|
|
161
|
+
.buffer = &buf,
|
|
162
|
+
/* buffer size in bytes, not number of samples */
|
|
163
|
+
.buffer_size = sizeof(buf),
|
|
164
|
+
};
|
|
165
|
+
int32_t val_raw;
|
|
166
|
+
|
|
167
|
+
err = adc_sequence_init_dt(this->channel_, &sequence);
|
|
168
|
+
if (err < 0) {
|
|
169
|
+
ESP_LOGE(TAG, "Could sequence init %s (%d)", this->channel_->dev->name, err);
|
|
170
|
+
return 0.0;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
err = adc_read(this->channel_->dev, &sequence);
|
|
174
|
+
if (err < 0) {
|
|
175
|
+
ESP_LOGE(TAG, "Could not read %s (%d)", this->channel_->dev->name, err);
|
|
176
|
+
return 0.0;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
val_raw = (int32_t) buf;
|
|
180
|
+
if (!this->channel_->channel_cfg.differential) {
|
|
181
|
+
// https://github.com/adafruit/Adafruit_nRF52_Arduino/blob/0ed4d9ffc674ae407be7cacf5696a02f5e789861/cores/nRF5/wiring_analog_nRF52.c#L222
|
|
182
|
+
if (val_raw < 0) {
|
|
183
|
+
val_raw = 0;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
aggr.add_sample(val_raw);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
int32_t val_mv = aggr.aggregate();
|
|
190
|
+
|
|
191
|
+
if (this->output_raw_) {
|
|
192
|
+
return val_mv;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
err = adc_raw_to_millivolts_dt(this->channel_, &val_mv);
|
|
196
|
+
/* conversion to mV may not be supported, skip if not */
|
|
197
|
+
if (err < 0) {
|
|
198
|
+
ESP_LOGE(TAG, "Value in mV not available %s (%d)", this->channel_->dev->name, err);
|
|
199
|
+
return 0.0;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return val_mv / 1000.0f;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
} // namespace adc
|
|
206
|
+
} // namespace esphome
|
|
207
|
+
#endif
|
esphome/components/adc/sensor.py
CHANGED
|
@@ -3,6 +3,12 @@ import logging
|
|
|
3
3
|
import esphome.codegen as cg
|
|
4
4
|
from esphome.components import sensor, voltage_sampler
|
|
5
5
|
from esphome.components.esp32 import get_esp32_variant
|
|
6
|
+
from esphome.components.nrf52.const import AIN_TO_GPIO, EXTRA_ADC
|
|
7
|
+
from esphome.components.zephyr import (
|
|
8
|
+
zephyr_add_overlay,
|
|
9
|
+
zephyr_add_prj_conf,
|
|
10
|
+
zephyr_add_user,
|
|
11
|
+
)
|
|
6
12
|
import esphome.config_validation as cv
|
|
7
13
|
from esphome.const import (
|
|
8
14
|
CONF_ATTENUATION,
|
|
@@ -10,13 +16,12 @@ from esphome.const import (
|
|
|
10
16
|
CONF_NUMBER,
|
|
11
17
|
CONF_PIN,
|
|
12
18
|
CONF_RAW,
|
|
13
|
-
CONF_WIFI,
|
|
14
19
|
DEVICE_CLASS_VOLTAGE,
|
|
20
|
+
PLATFORM_NRF52,
|
|
15
21
|
STATE_CLASS_MEASUREMENT,
|
|
16
22
|
UNIT_VOLT,
|
|
17
23
|
)
|
|
18
24
|
from esphome.core import CORE
|
|
19
|
-
import esphome.final_validate as fv
|
|
20
25
|
|
|
21
26
|
from . import (
|
|
22
27
|
ATTENUATION_MODES,
|
|
@@ -24,6 +29,7 @@ from . import (
|
|
|
24
29
|
ESP32_VARIANT_ADC2_PIN_TO_CHANNEL,
|
|
25
30
|
SAMPLING_MODES,
|
|
26
31
|
adc_ns,
|
|
32
|
+
adc_unit_t,
|
|
27
33
|
validate_adc_pin,
|
|
28
34
|
)
|
|
29
35
|
|
|
@@ -57,25 +63,14 @@ def validate_config(config):
|
|
|
57
63
|
return config
|
|
58
64
|
|
|
59
65
|
|
|
60
|
-
def final_validate_config(config):
|
|
61
|
-
if CORE.is_esp32:
|
|
62
|
-
variant = get_esp32_variant()
|
|
63
|
-
if (
|
|
64
|
-
CONF_WIFI in fv.full_config.get()
|
|
65
|
-
and config[CONF_PIN][CONF_NUMBER]
|
|
66
|
-
in ESP32_VARIANT_ADC2_PIN_TO_CHANNEL[variant]
|
|
67
|
-
):
|
|
68
|
-
raise cv.Invalid(
|
|
69
|
-
f"{variant} doesn't support ADC on this pin when Wi-Fi is configured"
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
return config
|
|
73
|
-
|
|
74
|
-
|
|
75
66
|
ADCSensor = adc_ns.class_(
|
|
76
67
|
"ADCSensor", sensor.Sensor, cg.PollingComponent, voltage_sampler.VoltageSampler
|
|
77
68
|
)
|
|
78
69
|
|
|
70
|
+
CONF_NRF_SAADC = "nrf_saadc"
|
|
71
|
+
|
|
72
|
+
adc_dt_spec = cg.global_ns.class_("adc_dt_spec")
|
|
73
|
+
|
|
79
74
|
CONFIG_SCHEMA = cv.All(
|
|
80
75
|
sensor.sensor_schema(
|
|
81
76
|
ADCSensor,
|
|
@@ -91,6 +86,7 @@ CONFIG_SCHEMA = cv.All(
|
|
|
91
86
|
cv.SplitDefault(CONF_ATTENUATION, esp32="0db"): cv.All(
|
|
92
87
|
cv.only_on_esp32, _attenuation
|
|
93
88
|
),
|
|
89
|
+
cv.OnlyWith(CONF_NRF_SAADC, PLATFORM_NRF52): cv.declare_id(adc_dt_spec),
|
|
94
90
|
cv.Optional(CONF_SAMPLES, default=1): cv.int_range(min=1, max=255),
|
|
95
91
|
cv.Optional(CONF_SAMPLING_MODE, default="avg"): _sampling_mode,
|
|
96
92
|
}
|
|
@@ -99,7 +95,7 @@ CONFIG_SCHEMA = cv.All(
|
|
|
99
95
|
validate_config,
|
|
100
96
|
)
|
|
101
97
|
|
|
102
|
-
|
|
98
|
+
CONF_ADC_CHANNEL_ID = "adc_channel_id"
|
|
103
99
|
|
|
104
100
|
|
|
105
101
|
async def to_code(config):
|
|
@@ -111,7 +107,7 @@ async def to_code(config):
|
|
|
111
107
|
cg.add_define("USE_ADC_SENSOR_VCC")
|
|
112
108
|
elif config[CONF_PIN] == "TEMPERATURE":
|
|
113
109
|
cg.add(var.set_is_temperature())
|
|
114
|
-
|
|
110
|
+
elif not CORE.is_nrf52 or config[CONF_PIN][CONF_NUMBER] not in EXTRA_ADC:
|
|
115
111
|
pin = await cg.gpio_pin_expression(config[CONF_PIN])
|
|
116
112
|
cg.add(var.set_pin(pin))
|
|
117
113
|
|
|
@@ -119,13 +115,13 @@ async def to_code(config):
|
|
|
119
115
|
cg.add(var.set_sample_count(config[CONF_SAMPLES]))
|
|
120
116
|
cg.add(var.set_sampling_mode(config[CONF_SAMPLING_MODE]))
|
|
121
117
|
|
|
122
|
-
if attenuation := config.get(CONF_ATTENUATION):
|
|
123
|
-
if attenuation == "auto":
|
|
124
|
-
cg.add(var.set_autorange(cg.global_ns.true))
|
|
125
|
-
else:
|
|
126
|
-
cg.add(var.set_attenuation(attenuation))
|
|
127
|
-
|
|
128
118
|
if CORE.is_esp32:
|
|
119
|
+
if attenuation := config.get(CONF_ATTENUATION):
|
|
120
|
+
if attenuation == "auto":
|
|
121
|
+
cg.add(var.set_autorange(cg.global_ns.true))
|
|
122
|
+
else:
|
|
123
|
+
cg.add(var.set_attenuation(attenuation))
|
|
124
|
+
|
|
129
125
|
variant = get_esp32_variant()
|
|
130
126
|
pin_num = config[CONF_PIN][CONF_NUMBER]
|
|
131
127
|
if (
|
|
@@ -133,10 +129,48 @@ async def to_code(config):
|
|
|
133
129
|
and pin_num in ESP32_VARIANT_ADC1_PIN_TO_CHANNEL[variant]
|
|
134
130
|
):
|
|
135
131
|
chan = ESP32_VARIANT_ADC1_PIN_TO_CHANNEL[variant][pin_num]
|
|
136
|
-
cg.add(var.
|
|
132
|
+
cg.add(var.set_channel(adc_unit_t.ADC_UNIT_1, chan))
|
|
137
133
|
elif (
|
|
138
134
|
variant in ESP32_VARIANT_ADC2_PIN_TO_CHANNEL
|
|
139
135
|
and pin_num in ESP32_VARIANT_ADC2_PIN_TO_CHANNEL[variant]
|
|
140
136
|
):
|
|
141
137
|
chan = ESP32_VARIANT_ADC2_PIN_TO_CHANNEL[variant][pin_num]
|
|
142
|
-
cg.add(var.
|
|
138
|
+
cg.add(var.set_channel(adc_unit_t.ADC_UNIT_2, chan))
|
|
139
|
+
|
|
140
|
+
elif CORE.is_nrf52:
|
|
141
|
+
CORE.data.setdefault(CONF_ADC_CHANNEL_ID, 0)
|
|
142
|
+
channel_id = CORE.data[CONF_ADC_CHANNEL_ID]
|
|
143
|
+
CORE.data[CONF_ADC_CHANNEL_ID] = channel_id + 1
|
|
144
|
+
zephyr_add_prj_conf("ADC", True)
|
|
145
|
+
nrf_saadc = config[CONF_NRF_SAADC]
|
|
146
|
+
rhs = cg.RawExpression(
|
|
147
|
+
f"ADC_DT_SPEC_GET_BY_IDX(DT_PATH(zephyr_user), {channel_id})"
|
|
148
|
+
)
|
|
149
|
+
adc = cg.new_Pvariable(nrf_saadc, rhs)
|
|
150
|
+
cg.add(var.set_adc_channel(adc))
|
|
151
|
+
gain = "ADC_GAIN_1_6"
|
|
152
|
+
pin_number = config[CONF_PIN][CONF_NUMBER]
|
|
153
|
+
if pin_number == "VDDHDIV5":
|
|
154
|
+
gain = "ADC_GAIN_1_2"
|
|
155
|
+
if isinstance(pin_number, int):
|
|
156
|
+
GPIO_TO_AIN = {v: k for k, v in AIN_TO_GPIO.items()}
|
|
157
|
+
pin_number = GPIO_TO_AIN[pin_number]
|
|
158
|
+
zephyr_add_user("io-channels", f"<&adc {channel_id}>")
|
|
159
|
+
zephyr_add_overlay(
|
|
160
|
+
f"""
|
|
161
|
+
&adc {{
|
|
162
|
+
#address-cells = <1>;
|
|
163
|
+
#size-cells = <0>;
|
|
164
|
+
|
|
165
|
+
channel@{channel_id} {{
|
|
166
|
+
reg = <{channel_id}>;
|
|
167
|
+
zephyr,gain = "{gain}";
|
|
168
|
+
zephyr,reference = "ADC_REF_INTERNAL";
|
|
169
|
+
zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
|
|
170
|
+
zephyr,input-positive = <NRF_SAADC_{pin_number}>;
|
|
171
|
+
zephyr,resolution = <14>;
|
|
172
|
+
zephyr,oversampling = <8>;
|
|
173
|
+
}};
|
|
174
|
+
}};
|
|
175
|
+
"""
|
|
176
|
+
)
|
|
@@ -8,10 +8,7 @@ static const char *const TAG = "adc128s102";
|
|
|
8
8
|
|
|
9
9
|
float ADC128S102::get_setup_priority() const { return setup_priority::HARDWARE; }
|
|
10
10
|
|
|
11
|
-
void ADC128S102::setup() {
|
|
12
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
13
|
-
this->spi_setup();
|
|
14
|
-
}
|
|
11
|
+
void ADC128S102::setup() { this->spi_setup(); }
|
|
15
12
|
|
|
16
13
|
void ADC128S102::dump_config() {
|
|
17
14
|
ESP_LOGCONFIG(TAG, "ADC128S102:");
|
|
@@ -36,6 +36,7 @@ from esphome.const import (
|
|
|
36
36
|
UNIT_WATT,
|
|
37
37
|
UNIT_WATT_HOURS,
|
|
38
38
|
)
|
|
39
|
+
from esphome.types import ConfigType
|
|
39
40
|
|
|
40
41
|
DEPENDENCIES = ["i2c"]
|
|
41
42
|
|
|
@@ -51,6 +52,20 @@ CONF_POWER_GAIN = "power_gain"
|
|
|
51
52
|
|
|
52
53
|
CONF_NEUTRAL = "neutral"
|
|
53
54
|
|
|
55
|
+
# Tuple of power channel phases
|
|
56
|
+
POWER_PHASES = (CONF_PHASE_A, CONF_PHASE_B, CONF_PHASE_C)
|
|
57
|
+
|
|
58
|
+
# Tuple of sensor types that can be configured for power channels
|
|
59
|
+
POWER_SENSOR_TYPES = (
|
|
60
|
+
CONF_CURRENT,
|
|
61
|
+
CONF_VOLTAGE,
|
|
62
|
+
CONF_ACTIVE_POWER,
|
|
63
|
+
CONF_APPARENT_POWER,
|
|
64
|
+
CONF_POWER_FACTOR,
|
|
65
|
+
CONF_FORWARD_ACTIVE_ENERGY,
|
|
66
|
+
CONF_REVERSE_ACTIVE_ENERGY,
|
|
67
|
+
)
|
|
68
|
+
|
|
54
69
|
NEUTRAL_CHANNEL_SCHEMA = cv.Schema(
|
|
55
70
|
{
|
|
56
71
|
cv.GenerateID(): cv.declare_id(NeutralChannel),
|
|
@@ -150,7 +165,64 @@ POWER_CHANNEL_SCHEMA = cv.Schema(
|
|
|
150
165
|
}
|
|
151
166
|
)
|
|
152
167
|
|
|
153
|
-
|
|
168
|
+
|
|
169
|
+
def prefix_sensor_name(
|
|
170
|
+
sensor_conf: ConfigType,
|
|
171
|
+
channel_name: str,
|
|
172
|
+
channel_config: ConfigType,
|
|
173
|
+
sensor_type: str,
|
|
174
|
+
) -> None:
|
|
175
|
+
"""Helper to prefix sensor name with channel name.
|
|
176
|
+
|
|
177
|
+
Args:
|
|
178
|
+
sensor_conf: The sensor configuration (dict or string)
|
|
179
|
+
channel_name: The channel name to prefix with
|
|
180
|
+
channel_config: The channel configuration to update
|
|
181
|
+
sensor_type: The sensor type key in the channel config
|
|
182
|
+
"""
|
|
183
|
+
if isinstance(sensor_conf, dict) and CONF_NAME in sensor_conf:
|
|
184
|
+
sensor_name = sensor_conf[CONF_NAME]
|
|
185
|
+
if sensor_name and not sensor_name.startswith(channel_name):
|
|
186
|
+
sensor_conf[CONF_NAME] = f"{channel_name} {sensor_name}"
|
|
187
|
+
elif isinstance(sensor_conf, str):
|
|
188
|
+
# Simple value case - convert to dict with prefixed name
|
|
189
|
+
channel_config[sensor_type] = {CONF_NAME: f"{channel_name} {sensor_conf}"}
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
def process_channel_sensors(
|
|
193
|
+
config: ConfigType, channel_key: str, sensor_types: tuple
|
|
194
|
+
) -> None:
|
|
195
|
+
"""Process sensors for a channel and prefix their names.
|
|
196
|
+
|
|
197
|
+
Args:
|
|
198
|
+
config: The main configuration
|
|
199
|
+
channel_key: The channel key (e.g., CONF_PHASE_A, CONF_NEUTRAL)
|
|
200
|
+
sensor_types: Tuple of sensor types to process for this channel
|
|
201
|
+
"""
|
|
202
|
+
if not (channel_config := config.get(channel_key)) or not (
|
|
203
|
+
channel_name := channel_config.get(CONF_NAME)
|
|
204
|
+
):
|
|
205
|
+
return
|
|
206
|
+
|
|
207
|
+
for sensor_type in sensor_types:
|
|
208
|
+
if sensor_conf := channel_config.get(sensor_type):
|
|
209
|
+
prefix_sensor_name(sensor_conf, channel_name, channel_config, sensor_type)
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def preprocess_channels(config: ConfigType) -> ConfigType:
|
|
213
|
+
"""Preprocess channel configurations to add channel name prefix to sensor names."""
|
|
214
|
+
# Process power channels
|
|
215
|
+
for channel in POWER_PHASES:
|
|
216
|
+
process_channel_sensors(config, channel, POWER_SENSOR_TYPES)
|
|
217
|
+
|
|
218
|
+
# Process neutral channel
|
|
219
|
+
process_channel_sensors(config, CONF_NEUTRAL, (CONF_CURRENT,))
|
|
220
|
+
|
|
221
|
+
return config
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
CONFIG_SCHEMA = cv.All(
|
|
225
|
+
preprocess_channels,
|
|
154
226
|
cv.Schema(
|
|
155
227
|
{
|
|
156
228
|
cv.GenerateID(): cv.declare_id(ADE7880),
|
|
@@ -167,7 +239,7 @@ CONFIG_SCHEMA = (
|
|
|
167
239
|
}
|
|
168
240
|
)
|
|
169
241
|
.extend(cv.polling_component_schema("60s"))
|
|
170
|
-
.extend(i2c.i2c_device_schema(0x38))
|
|
242
|
+
.extend(i2c.i2c_device_schema(0x38)),
|
|
171
243
|
)
|
|
172
244
|
|
|
173
245
|
|
|
@@ -188,15 +260,7 @@ async def neutral_channel(config):
|
|
|
188
260
|
async def power_channel(config):
|
|
189
261
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
190
262
|
|
|
191
|
-
for sensor_type in
|
|
192
|
-
CONF_CURRENT,
|
|
193
|
-
CONF_VOLTAGE,
|
|
194
|
-
CONF_ACTIVE_POWER,
|
|
195
|
-
CONF_APPARENT_POWER,
|
|
196
|
-
CONF_POWER_FACTOR,
|
|
197
|
-
CONF_FORWARD_ACTIVE_ENERGY,
|
|
198
|
-
CONF_REVERSE_ACTIVE_ENERGY,
|
|
199
|
-
]:
|
|
263
|
+
for sensor_type in POWER_SENSOR_TYPES:
|
|
200
264
|
if conf := config.get(sensor_type):
|
|
201
265
|
sens = await sensor.new_sensor(conf)
|
|
202
266
|
cg.add(getattr(var, f"set_{sensor_type}")(sens))
|
|
@@ -216,44 +280,6 @@ async def power_channel(config):
|
|
|
216
280
|
return var
|
|
217
281
|
|
|
218
282
|
|
|
219
|
-
def final_validate(config):
|
|
220
|
-
for channel in [CONF_PHASE_A, CONF_PHASE_B, CONF_PHASE_C]:
|
|
221
|
-
if channel := config.get(channel):
|
|
222
|
-
channel_name = channel.get(CONF_NAME)
|
|
223
|
-
|
|
224
|
-
for sensor_type in [
|
|
225
|
-
CONF_CURRENT,
|
|
226
|
-
CONF_VOLTAGE,
|
|
227
|
-
CONF_ACTIVE_POWER,
|
|
228
|
-
CONF_APPARENT_POWER,
|
|
229
|
-
CONF_POWER_FACTOR,
|
|
230
|
-
CONF_FORWARD_ACTIVE_ENERGY,
|
|
231
|
-
CONF_REVERSE_ACTIVE_ENERGY,
|
|
232
|
-
]:
|
|
233
|
-
if conf := channel.get(sensor_type):
|
|
234
|
-
sensor_name = conf.get(CONF_NAME)
|
|
235
|
-
if (
|
|
236
|
-
sensor_name
|
|
237
|
-
and channel_name
|
|
238
|
-
and not sensor_name.startswith(channel_name)
|
|
239
|
-
):
|
|
240
|
-
conf[CONF_NAME] = f"{channel_name} {sensor_name}"
|
|
241
|
-
|
|
242
|
-
if channel := config.get(CONF_NEUTRAL):
|
|
243
|
-
channel_name = channel.get(CONF_NAME)
|
|
244
|
-
if conf := channel.get(CONF_CURRENT):
|
|
245
|
-
sensor_name = conf.get(CONF_NAME)
|
|
246
|
-
if (
|
|
247
|
-
sensor_name
|
|
248
|
-
and channel_name
|
|
249
|
-
and not sensor_name.startswith(channel_name)
|
|
250
|
-
):
|
|
251
|
-
conf[CONF_NAME] = f"{channel_name} {sensor_name}"
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
FINAL_VALIDATE_SCHEMA = final_validate
|
|
255
|
-
|
|
256
|
-
|
|
257
283
|
async def to_code(config):
|
|
258
284
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
259
285
|
await cg.register_component(var, config)
|
|
@@ -10,7 +10,6 @@ static const uint8_t ADS1115_REGISTER_CONVERSION = 0x00;
|
|
|
10
10
|
static const uint8_t ADS1115_REGISTER_CONFIG = 0x01;
|
|
11
11
|
|
|
12
12
|
void ADS1115Component::setup() {
|
|
13
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
14
13
|
uint16_t value;
|
|
15
14
|
if (!this->read_byte_16(ADS1115_REGISTER_CONVERSION, &value)) {
|
|
16
15
|
this->mark_failed();
|
|
@@ -24,8 +24,6 @@ static const uint16_t ZP_CURRENT = 0x0000;
|
|
|
24
24
|
static const uint16_t ZP_DEFAULT = 0xFFFF;
|
|
25
25
|
|
|
26
26
|
void AGS10Component::setup() {
|
|
27
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
28
|
-
|
|
29
27
|
auto version = this->read_version_();
|
|
30
28
|
if (version) {
|
|
31
29
|
ESP_LOGD(TAG, "AGS10 Sensor Version: 0x%02X", *version);
|
|
@@ -45,8 +43,6 @@ void AGS10Component::setup() {
|
|
|
45
43
|
} else {
|
|
46
44
|
ESP_LOGE(TAG, "AGS10 Sensor Resistance: unknown");
|
|
47
45
|
}
|
|
48
|
-
|
|
49
|
-
ESP_LOGD(TAG, "Sensor initialized");
|
|
50
46
|
}
|
|
51
47
|
|
|
52
48
|
void AGS10Component::update() {
|
|
@@ -38,8 +38,6 @@ static const uint8_t AHT10_STATUS_BUSY = 0x80;
|
|
|
38
38
|
static const float AHT10_DIVISOR = 1048576.0f; // 2^20, used for temperature and humidity calculations
|
|
39
39
|
|
|
40
40
|
void AHT10Component::setup() {
|
|
41
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
42
|
-
|
|
43
41
|
if (this->write(AHT10_SOFTRESET_CMD, sizeof(AHT10_SOFTRESET_CMD)) != i2c::ERROR_OK) {
|
|
44
42
|
ESP_LOGE(TAG, "Reset failed");
|
|
45
43
|
}
|
|
@@ -80,8 +78,6 @@ void AHT10Component::setup() {
|
|
|
80
78
|
this->mark_failed();
|
|
81
79
|
return;
|
|
82
80
|
}
|
|
83
|
-
|
|
84
|
-
ESP_LOGV(TAG, "Initialization complete");
|
|
85
81
|
}
|
|
86
82
|
|
|
87
83
|
void AHT10Component::restart_read_() {
|
|
@@ -17,8 +17,6 @@ static const char *const TAG = "aic3204";
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
void AIC3204::setup() {
|
|
20
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
21
|
-
|
|
22
20
|
// Set register page to 0
|
|
23
21
|
ERROR_CHECK(this->write_byte(AIC3204_PAGE_CTRL, 0x00), "Set page 0 failed");
|
|
24
22
|
// Initiate SW reset (PLL is powered off as part of reset)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
CODEOWNERS = ["@jeromelaban"]
|
|
1
|
+
CODEOWNERS = ["@jeromelaban", "@precurse"]
|
|
@@ -73,11 +73,29 @@ void AirthingsWavePlus::dump_config() {
|
|
|
73
73
|
LOG_SENSOR(" ", "Illuminance", this->illuminance_sensor_);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
AirthingsWavePlus::
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
void AirthingsWavePlus::setup() {
|
|
77
|
+
const char *service_uuid;
|
|
78
|
+
const char *characteristic_uuid;
|
|
79
|
+
const char *access_control_point_characteristic_uuid;
|
|
80
|
+
|
|
81
|
+
// Change UUIDs for Wave Radon Gen2
|
|
82
|
+
switch (this->wave_device_type_) {
|
|
83
|
+
case WaveDeviceType::WAVE_GEN2:
|
|
84
|
+
service_uuid = SERVICE_UUID_WAVE_RADON_GEN2;
|
|
85
|
+
characteristic_uuid = CHARACTERISTIC_UUID_WAVE_RADON_GEN2;
|
|
86
|
+
access_control_point_characteristic_uuid = ACCESS_CONTROL_POINT_CHARACTERISTIC_UUID_WAVE_RADON_GEN2;
|
|
87
|
+
break;
|
|
88
|
+
default:
|
|
89
|
+
// Wave Plus
|
|
90
|
+
service_uuid = SERVICE_UUID;
|
|
91
|
+
characteristic_uuid = CHARACTERISTIC_UUID;
|
|
92
|
+
access_control_point_characteristic_uuid = ACCESS_CONTROL_POINT_CHARACTERISTIC_UUID;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
this->service_uuid_ = espbt::ESPBTUUID::from_raw(service_uuid);
|
|
96
|
+
this->sensors_data_characteristic_uuid_ = espbt::ESPBTUUID::from_raw(characteristic_uuid);
|
|
79
97
|
this->access_control_point_characteristic_uuid_ =
|
|
80
|
-
espbt::ESPBTUUID::from_raw(
|
|
98
|
+
espbt::ESPBTUUID::from_raw(access_control_point_characteristic_uuid);
|
|
81
99
|
}
|
|
82
100
|
|
|
83
101
|
} // namespace airthings_wave_plus
|
|
@@ -9,13 +9,20 @@ namespace airthings_wave_plus {
|
|
|
9
9
|
|
|
10
10
|
namespace espbt = esphome::esp32_ble_tracker;
|
|
11
11
|
|
|
12
|
+
enum WaveDeviceType : uint8_t { WAVE_PLUS = 0, WAVE_GEN2 = 1 };
|
|
13
|
+
|
|
12
14
|
static const char *const SERVICE_UUID = "b42e1c08-ade7-11e4-89d3-123b93f75cba";
|
|
13
15
|
static const char *const CHARACTERISTIC_UUID = "b42e2a68-ade7-11e4-89d3-123b93f75cba";
|
|
14
16
|
static const char *const ACCESS_CONTROL_POINT_CHARACTERISTIC_UUID = "b42e2d06-ade7-11e4-89d3-123b93f75cba";
|
|
15
17
|
|
|
18
|
+
static const char *const SERVICE_UUID_WAVE_RADON_GEN2 = "b42e4a8e-ade7-11e4-89d3-123b93f75cba";
|
|
19
|
+
static const char *const CHARACTERISTIC_UUID_WAVE_RADON_GEN2 = "b42e4dcc-ade7-11e4-89d3-123b93f75cba";
|
|
20
|
+
static const char *const ACCESS_CONTROL_POINT_CHARACTERISTIC_UUID_WAVE_RADON_GEN2 =
|
|
21
|
+
"b42e50d8-ade7-11e4-89d3-123b93f75cba";
|
|
22
|
+
|
|
16
23
|
class AirthingsWavePlus : public airthings_wave_base::AirthingsWaveBase {
|
|
17
24
|
public:
|
|
18
|
-
|
|
25
|
+
void setup() override;
|
|
19
26
|
|
|
20
27
|
void dump_config() override;
|
|
21
28
|
|
|
@@ -23,12 +30,14 @@ class AirthingsWavePlus : public airthings_wave_base::AirthingsWaveBase {
|
|
|
23
30
|
void set_radon_long_term(sensor::Sensor *radon_long_term) { radon_long_term_sensor_ = radon_long_term; }
|
|
24
31
|
void set_co2(sensor::Sensor *co2) { co2_sensor_ = co2; }
|
|
25
32
|
void set_illuminance(sensor::Sensor *illuminance) { illuminance_sensor_ = illuminance; }
|
|
33
|
+
void set_device_type(WaveDeviceType wave_device_type) { wave_device_type_ = wave_device_type; }
|
|
26
34
|
|
|
27
35
|
protected:
|
|
28
36
|
bool is_valid_radon_value_(uint16_t radon);
|
|
29
37
|
bool is_valid_co2_value_(uint16_t co2);
|
|
30
38
|
|
|
31
39
|
void read_sensors(uint8_t *raw_value, uint16_t value_len) override;
|
|
40
|
+
WaveDeviceType wave_device_type_{WaveDeviceType::WAVE_PLUS};
|
|
32
41
|
|
|
33
42
|
sensor::Sensor *radon_sensor_{nullptr};
|
|
34
43
|
sensor::Sensor *radon_long_term_sensor_{nullptr};
|