From a2fbedeac3bc6d7d2bb2cc32aa0cb59ce15005cf Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 20 Oct 2026 02:55:50 -1000 Subject: [PATCH] [components] Set optional plain values with cg.add_optional (a-m) (#21181) --- esphome/components/bedjet/__init__.py | 3 +-- .../components/beken_spi_led_strip/light.py | 3 +-- .../components/ble_presence/binary_sensor.py | 6 ++--- esphome/components/ble_rssi/sensor.py | 6 ++--- esphome/components/ccs811/sensor.py | 3 +-- esphome/components/current_based/cover.py | 3 +-- esphome/components/deep_sleep/__init__.py | 9 +++---- .../components/display_menu_base/__init__.py | 3 +-- esphome/components/ds248x/__init__.py | 21 ++++++---------- esphome/components/endstop/cover.py | 3 +-- esphome/components/epaper_spi/display.py | 3 +-- esphome/components/esp32/gpio.py | 3 +-- esphome/components/esp32_ble/__init__.py | 12 ++++------ .../components/esp32_ble_beacon/__init__.py | 3 +-- .../components/esp32_ble_server/__init__.py | 3 +-- esphome/components/esp32_can/canbus.py | 6 ++--- .../power_management.py | 6 ++--- .../components/esp32_rmt_led_strip/light.py | 6 ++--- esphome/components/esp32_touch/__init__.py | 21 ++++++---------- esphome/components/espectre/__init__.py | 6 ++--- esphome/components/ethernet/__init__.py | 15 ++++-------- .../exponential_moving_average/sensor.py | 3 +-- esphome/components/fastled_base/__init__.py | 3 +-- esphome/components/feedback/cover.py | 3 +-- esphome/components/graph/__init__.py | 21 ++++++---------- esphome/components/haier/climate.py | 18 +++++--------- esphome/components/hbridge/fan/__init__.py | 3 +-- esphome/components/homeassistant/__init__.py | 3 +-- esphome/components/hydreon_rgxx/sensor.py | 6 ++--- esphome/components/i2c/__init__.py | 12 ++++------ esphome/components/i2s_audio/__init__.py | 9 +++---- esphome/components/ir_rf_proxy/infrared.py | 3 +-- esphome/components/it8951/display.py | 9 +++---- esphome/components/key_collector/__init__.py | 24 +++++++------------ esphome/components/ledc/output.py | 6 ++--- esphome/components/matrix_keypad/__init__.py | 6 ++--- esphome/components/mhz19/sensor.py | 3 +-- esphome/components/mics_5524/sensor.py | 3 +-- esphome/components/midea/climate.py | 12 ++++------ esphome/components/mmc5603/sensor.py | 3 +-- .../components/modbus_controller/__init__.py | 3 +-- esphome/components/mopeka_std_check/sensor.py | 3 +-- .../motion/binary_sensor/__init__.py | 3 +-- .../mpr121/binary_sensor/__init__.py | 6 ++--- esphome/components/mqtt/__init__.py | 15 ++++-------- esphome/components/mt6701_i2c/__init__.py | 12 ++++------ tests/component_tests/motion/test_motion.py | 6 ++--- 47 files changed, 115 insertions(+), 227 deletions(-) diff --git a/esphome/components/bedjet/__init__.py b/esphome/components/bedjet/__init__.py index 2bcbf557649..4ff76dc5186 100644 --- a/esphome/components/bedjet/__init__.py +++ b/esphome/components/bedjet/__init__.py @@ -43,5 +43,4 @@ async def register_bedjet_child(var: MockObj, config: ConfigType) -> None: async def to_code(config: ConfigType) -> None: var = await ble_client.new_ble_node_component(config) await cg.add_variable(var.set_time_id, config.get(CONF_TIME_ID)) - if (receive_timeout := config.get(CONF_RECEIVE_TIMEOUT)) is not None: - cg.add(var.set_status_timeout(receive_timeout)) + cg.add_optional(var.set_status_timeout, config.get(CONF_RECEIVE_TIMEOUT)) diff --git a/esphome/components/beken_spi_led_strip/light.py b/esphome/components/beken_spi_led_strip/light.py index 5576f286f13..8f388f0c1f6 100644 --- a/esphome/components/beken_spi_led_strip/light.py +++ b/esphome/components/beken_spi_led_strip/light.py @@ -111,8 +111,7 @@ async def to_code(config: ConfigType) -> None: cg.add(var.set_num_leds(config[CONF_NUM_LEDS])) cg.add(var.set_pin(config[CONF_PIN])) - if CONF_MAX_REFRESH_RATE in config: - cg.add(var.set_max_refresh_rate(config[CONF_MAX_REFRESH_RATE])) + cg.add_optional(var.set_max_refresh_rate, config.get(CONF_MAX_REFRESH_RATE)) chipset = CHIPSETS[config[CONF_CHIPSET]] cg.add( diff --git a/esphome/components/ble_presence/binary_sensor.py b/esphome/components/ble_presence/binary_sensor.py index a43d3561f8e..e8105c3b222 100644 --- a/esphome/components/ble_presence/binary_sensor.py +++ b/esphome/components/ble_presence/binary_sensor.py @@ -83,8 +83,6 @@ async def to_code(config: ConfigType) -> None: ibeacon_uuid = ble_device_base.as_reversed_hex_array(ibeacon_uuid) cg.add(var.set_ibeacon_uuid(ibeacon_uuid)) - if (ibeacon_major := config.get(CONF_IBEACON_MAJOR)) is not None: - cg.add(var.set_ibeacon_major(ibeacon_major)) + cg.add_optional(var.set_ibeacon_major, config.get(CONF_IBEACON_MAJOR)) - if (ibeacon_minor := config.get(CONF_IBEACON_MINOR)) is not None: - cg.add(var.set_ibeacon_minor(ibeacon_minor)) + cg.add_optional(var.set_ibeacon_minor, config.get(CONF_IBEACON_MINOR)) diff --git a/esphome/components/ble_rssi/sensor.py b/esphome/components/ble_rssi/sensor.py index 6813505d587..2cef9daeed3 100644 --- a/esphome/components/ble_rssi/sensor.py +++ b/esphome/components/ble_rssi/sensor.py @@ -79,8 +79,6 @@ async def to_code(config: ConfigType) -> None: ibeacon_uuid = ble_device_base.as_reversed_hex_array(ibeacon_uuid) cg.add(var.set_ibeacon_uuid(ibeacon_uuid)) - if (ibeacon_major := config.get(CONF_IBEACON_MAJOR)) is not None: - cg.add(var.set_ibeacon_major(ibeacon_major)) + cg.add_optional(var.set_ibeacon_major, config.get(CONF_IBEACON_MAJOR)) - if (ibeacon_minor := config.get(CONF_IBEACON_MINOR)) is not None: - cg.add(var.set_ibeacon_minor(ibeacon_minor)) + cg.add_optional(var.set_ibeacon_minor, config.get(CONF_IBEACON_MINOR)) diff --git a/esphome/components/ccs811/sensor.py b/esphome/components/ccs811/sensor.py index 703ae619c5d..8b6e34c9da4 100644 --- a/esphome/components/ccs811/sensor.py +++ b/esphome/components/ccs811/sensor.py @@ -69,8 +69,7 @@ async def to_code(config: ConfigType) -> None: text_sensors = text_sensor.sub_text_sensors(config) await text_sensors(CONF_VERSION, var.set_version) - if (baseline := config.get(CONF_BASELINE)) is not None: - cg.add(var.set_baseline(baseline)) + cg.add_optional(var.set_baseline, config.get(CONF_BASELINE)) await cg.add_variable(var.set_temperature, config.get(CONF_TEMPERATURE)) await cg.add_variable(var.set_humidity, config.get(CONF_HUMIDITY)) diff --git a/esphome/components/current_based/cover.py b/esphome/components/current_based/cover.py index 4edcb98a1d9..58bd2c3a24f 100644 --- a/esphome/components/current_based/cover.py +++ b/esphome/components/current_based/cover.py @@ -117,8 +117,7 @@ async def to_code(config: ConfigType) -> None: ) cg.add(var.set_obstacle_rollback(config[CONF_OBSTACLE_ROLLBACK])) - if (max_duration := config.get(CONF_MAX_DURATION)) is not None: - cg.add(var.set_max_duration(max_duration)) + cg.add_optional(var.set_max_duration, config.get(CONF_MAX_DURATION)) cg.add(var.set_malfunction_detection(config[CONF_MALFUNCTION_DETECTION])) if malfunction_action := config.get(CONF_MALFUNCTION_ACTION): await automation.build_automation( diff --git a/esphome/components/deep_sleep/__init__.py b/esphome/components/deep_sleep/__init__.py index 69aa1120ba1..98ab35ac918 100644 --- a/esphome/components/deep_sleep/__init__.py +++ b/esphome/components/deep_sleep/__init__.py @@ -364,8 +364,7 @@ async def to_code(config: ConfigType) -> None: var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) - if CONF_SLEEP_DURATION in config: - cg.add(var.set_sleep_duration(config[CONF_SLEEP_DURATION])) + cg.add_optional(var.set_sleep_duration, config.get(CONF_SLEEP_DURATION)) if (wakeup_pins := config.get(CONF_WAKEUP_PIN)) is not None: if CORE.is_bk72xx: cg.add(var.init_wakeup_pins(len(wakeup_pins))) @@ -380,8 +379,7 @@ async def to_code(config: ConfigType) -> None: ) else: await cg.add_pin(var.set_wakeup_pin, wakeup_pins[0][CONF_PIN]) - if CONF_WAKEUP_PIN_MODE in config: - cg.add(var.set_wakeup_pin_mode(config[CONF_WAKEUP_PIN_MODE])) + cg.add_optional(var.set_wakeup_pin_mode, config.get(CONF_WAKEUP_PIN_MODE)) if CONF_RUN_DURATION in config: run_duration_config = config[CONF_RUN_DURATION] if not isinstance(run_duration_config, dict): @@ -427,8 +425,7 @@ async def to_code(config: ConfigType) -> None: await automation.build_automation(trigger, [(WakeupCause, "cause")], wake_conf) cg.add_define("USE_DEEP_SLEEP_ON_WAKE") - if CONF_TOUCH_WAKEUP in config: - cg.add(var.set_touch_wakeup(config[CONF_TOUCH_WAKEUP])) + cg.add_optional(var.set_touch_wakeup, config.get(CONF_TOUCH_WAKEUP)) if CORE.using_zephyr: # Devices are suspended when CPU is entering a low power state # https://github.com/nrfconnect/sdk-zephyr/blob/v3.7.99-ncs2-2/doc/services/pm/device.rst#system-managed-device-power-management diff --git a/esphome/components/display_menu_base/__init__.py b/esphome/components/display_menu_base/__init__.py index ba51bdccaae..4c6d91898d8 100644 --- a/esphome/components/display_menu_base/__init__.py +++ b/esphome/components/display_menu_base/__init__.py @@ -277,8 +277,7 @@ async def menu_item_to_code(menu, config, parent): if CONF_ITEMS in config: for c in config[CONF_ITEMS]: await menu_item_to_code(menu, c, item) - if CONF_IMMEDIATE_EDIT in config: - cg.add(item.set_immediate_edit(config[CONF_IMMEDIATE_EDIT])) + cg.add_optional(item.set_immediate_edit, config.get(CONF_IMMEDIATE_EDIT)) if config[CONF_TYPE] == CONF_SELECT: await cg.add_variable(item.set_select_variable, config[CONF_SELECT]) if config[CONF_TYPE] == CONF_NUMBER: diff --git a/esphome/components/ds248x/__init__.py b/esphome/components/ds248x/__init__.py index 623a7547d40..dfe7a7e94f2 100644 --- a/esphome/components/ds248x/__init__.py +++ b/esphome/components/ds248x/__init__.py @@ -91,20 +91,13 @@ async def to_code(config: ConfigType) -> None: cg.add(var.set_active_pullup(config[CONF_ACTIVE_PULLUP])) cg.add(var.set_channel_count(get_channel_count(config))) - if CONF_BUS_SLEEP in config: - cg.add(var.set_bus_sleep(config[CONF_BUS_SLEEP])) - if CONF_HUB_SLEEP in config: - cg.add(var.set_hub_sleep(config[CONF_HUB_SLEEP])) + cg.add_optional(var.set_bus_sleep, config.get(CONF_BUS_SLEEP)) + cg.add_optional(var.set_hub_sleep, config.get(CONF_HUB_SLEEP)) - if CONF_RESET_LOW_TIME in config: - cg.add(var.set_val_trstl(config[CONF_RESET_LOW_TIME])) - if CONF_MASTER_SAMPLE_TIME in config: - cg.add(var.set_val_tmsp(config[CONF_MASTER_SAMPLE_TIME])) - if CONF_WRITE_0_LOW_TIME in config: - cg.add(var.set_val_tw0l(config[CONF_WRITE_0_LOW_TIME])) - if CONF_RECOVERY_TIME in config: - cg.add(var.set_val_trec0(config[CONF_RECOVERY_TIME])) - if CONF_ACTIVE_PULLUP_RESISTANCE in config: - cg.add(var.set_val_rwpu(config[CONF_ACTIVE_PULLUP_RESISTANCE])) + cg.add_optional(var.set_val_trstl, config.get(CONF_RESET_LOW_TIME)) + cg.add_optional(var.set_val_tmsp, config.get(CONF_MASTER_SAMPLE_TIME)) + cg.add_optional(var.set_val_tw0l, config.get(CONF_WRITE_0_LOW_TIME)) + cg.add_optional(var.set_val_trec0, config.get(CONF_RECOVERY_TIME)) + cg.add_optional(var.set_val_rwpu, config.get(CONF_ACTIVE_PULLUP_RESISTANCE)) await cg.add_pin(var.set_sleep_pin, config.get(CONF_SLEEP_PIN)) diff --git a/esphome/components/endstop/cover.py b/esphome/components/endstop/cover.py index 066326e9d46..1e7f6e44216 100644 --- a/esphome/components/endstop/cover.py +++ b/esphome/components/endstop/cover.py @@ -55,5 +55,4 @@ async def to_code(config: ConfigType) -> None: var.get_close_trigger(), [], config[CONF_CLOSE_ACTION] ) - if CONF_MAX_DURATION in config: - cg.add(var.set_max_duration(config[CONF_MAX_DURATION])) + cg.add_optional(var.set_max_duration, config.get(CONF_MAX_DURATION)) diff --git a/esphome/components/epaper_spi/display.py b/esphome/components/epaper_spi/display.py index 35bb99ed872..1f4f1e057c1 100644 --- a/esphome/components/epaper_spi/display.py +++ b/esphome/components/epaper_spi/display.py @@ -252,8 +252,7 @@ async def to_code(config): enable = [await cg.gpio_pin_expression(pin) for pin in enable_pin] cg.add(var.set_enable_pins(enable)) cg.add(var.set_full_update_every(config[CONF_FULL_UPDATE_EVERY])) - if CONF_RESET_DURATION in config: - cg.add(var.set_reset_duration(config[CONF_RESET_DURATION])) + cg.add_optional(var.set_reset_duration, config.get(CONF_RESET_DURATION)) if transform := config.get(CONF_TRANSFORM): transform[CONF_SWAP_XY] = False else: diff --git a/esphome/components/esp32/gpio.py b/esphome/components/esp32/gpio.py index f81584891b6..2a96719f9a9 100644 --- a/esphome/components/esp32/gpio.py +++ b/esphome/components/esp32/gpio.py @@ -265,8 +265,7 @@ async def esp32_pin_to_code(config): # (inverted bit in pin_flags_ bitfield is zero-initialized to false) if config[CONF_INVERTED]: cg.add(var.set_inverted(True)) - if CONF_DRIVE_STRENGTH in config: - cg.add(var.set_drive_strength(config[CONF_DRIVE_STRENGTH])) + cg.add_optional(var.set_drive_strength, config.get(CONF_DRIVE_STRENGTH)) flags = pins.gpio_flags_expr(config[CONF_MODE]) if config[CONF_HOLD_STATE]: flags = flags | cg.gpio_Flags.FLAG_HOLD diff --git a/esphome/components/esp32_ble/__init__.py b/esphome/components/esp32_ble/__init__.py index 6c83d5e44fe..a308f7fed4e 100644 --- a/esphome/components/esp32_ble/__init__.py +++ b/esphome/components/esp32_ble/__init__.py @@ -535,16 +535,12 @@ async def to_code(config: ConfigType) -> None: ): cg.add_define("ESPHOME_ESP32_BLE_EXTENDED_AUTH_PARAMS", None) - if CONF_AUTH_REQ_MODE in config: - cg.add(var.set_auth_req(config[CONF_AUTH_REQ_MODE])) - if CONF_MAX_KEY_SIZE in config: - cg.add(var.set_max_key_size(config[CONF_MAX_KEY_SIZE])) - if CONF_MIN_KEY_SIZE in config: - cg.add(var.set_min_key_size(config[CONF_MIN_KEY_SIZE])) + cg.add_optional(var.set_auth_req, config.get(CONF_AUTH_REQ_MODE)) + cg.add_optional(var.set_max_key_size, config.get(CONF_MAX_KEY_SIZE)) + cg.add_optional(var.set_min_key_size, config.get(CONF_MIN_KEY_SIZE)) cg.add(var.set_advertising_cycle_time(config[CONF_ADVERTISING_CYCLE_TIME])) - if (name := config.get(CONF_NAME)) is not None: - cg.add(var.set_name(name)) + cg.add_optional(var.set_name, config.get(CONF_NAME)) await cg.register_component(var, config) # Define max connections for use in C++ code (e.g., ble_server.h) diff --git a/esphome/components/esp32_ble_beacon/__init__.py b/esphome/components/esp32_ble_beacon/__init__.py index 7498228f4c6..7d49abf58b7 100644 --- a/esphome/components/esp32_ble_beacon/__init__.py +++ b/esphome/components/esp32_ble_beacon/__init__.py @@ -83,8 +83,7 @@ async def to_code(config: ConfigType) -> None: cg.add(var.set_measured_power(config[CONF_MEASURED_POWER])) # TX power control only available on native Bluetooth (not ESP-Hosted) - if CONF_TX_POWER in config: - cg.add(var.set_tx_power(config[CONF_TX_POWER])) + cg.add_optional(var.set_tx_power, config.get(CONF_TX_POWER)) cg.add_define("USE_ESP32_BLE_ADVERTISING") diff --git a/esphome/components/esp32_ble_server/__init__.py b/esphome/components/esp32_ble_server/__init__.py index d37b2f4020d..001988fe92b 100644 --- a/esphome/components/esp32_ble_server/__init__.py +++ b/esphome/components/esp32_ble_server/__init__.py @@ -647,8 +647,7 @@ async def to_code(config): ) ) ) - if CONF_MANUFACTURER_DATA in config: - cg.add(var.set_manufacturer_data(config[CONF_MANUFACTURER_DATA])) + cg.add_optional(var.set_manufacturer_data, config.get(CONF_MANUFACTURER_DATA)) for service_config in config[CONF_SERVICES]: # Calculate the optimal number of handles based on the number of characteristics and descriptors num_handles = calculate_num_handles(service_config) diff --git a/esphome/components/esp32_can/canbus.py b/esphome/components/esp32_can/canbus.py index f8f76b2d578..e62578a703c 100644 --- a/esphome/components/esp32_can/canbus.py +++ b/esphome/components/esp32_can/canbus.py @@ -157,10 +157,8 @@ async def to_code(config: ConfigType) -> None: cg.add(var.set_rx(config[CONF_RX_PIN])) cg.add(var.set_tx(config[CONF_TX_PIN])) cg.add(var.set_mode(config[CONF_MODE])) - if (rx_queue_len := config.get(CONF_RX_QUEUE_LEN)) is not None: - cg.add(var.set_rx_queue_len(rx_queue_len)) - if (tx_queue_len := config.get(CONF_TX_QUEUE_LEN)) is not None: - cg.add(var.set_tx_queue_len(tx_queue_len)) + cg.add_optional(var.set_rx_queue_len, config.get(CONF_RX_QUEUE_LEN)) + cg.add_optional(var.set_tx_queue_len, config.get(CONF_TX_QUEUE_LEN)) if CONF_TX_ENQUEUE_TIMEOUT in config: tx_enqueue_timeout_ms = config[CONF_TX_ENQUEUE_TIMEOUT].total_milliseconds diff --git a/esphome/components/esp32_power_management/power_management.py b/esphome/components/esp32_power_management/power_management.py index e9b6d6462cd..dbe9798e90a 100644 --- a/esphome/components/esp32_power_management/power_management.py +++ b/esphome/components/esp32_power_management/power_management.py @@ -170,10 +170,8 @@ async def to_code(config: ConfigType) -> None: await power_management.register_power_management(var, config) add_idf_sdkconfig_option("CONFIG_PM_ENABLE", True) - if (max_mhz := config.get(CONF_MAX_FREQUENCY)) is not None: - cg.add(var.set_max_freq_mhz(max_mhz)) - if (min_mhz := config.get(CONF_MIN_FREQUENCY)) is not None: - cg.add(var.set_min_freq_mhz(min_mhz)) + cg.add_optional(var.set_max_freq_mhz, config.get(CONF_MAX_FREQUENCY)) + cg.add_optional(var.set_min_freq_mhz, config.get(CONF_MIN_FREQUENCY)) if config[CONF_PROFILING]: add_idf_sdkconfig_option("CONFIG_PM_PROFILING", True) if config[CONF_TRACE]: diff --git a/esphome/components/esp32_rmt_led_strip/light.py b/esphome/components/esp32_rmt_led_strip/light.py index 571b7d93b8b..9b8bd8f2117 100644 --- a/esphome/components/esp32_rmt_led_strip/light.py +++ b/esphome/components/esp32_rmt_led_strip/light.py @@ -137,8 +137,7 @@ async def to_code(config: ConfigType) -> None: if config[CONF_PIN][CONF_INVERTED]: cg.add(var.set_inverted(True)) - if CONF_MAX_REFRESH_RATE in config: - cg.add(var.set_max_refresh_rate(config[CONF_MAX_REFRESH_RATE])) + cg.add_optional(var.set_max_refresh_rate, config.get(CONF_MAX_REFRESH_RATE)) if CONF_CHIPSET in config: chipset = CHIPSETS[config[CONF_CHIPSET]] @@ -169,5 +168,4 @@ async def to_code(config: ConfigType) -> None: ) cg.add(var.set_use_psram(config[CONF_USE_PSRAM])) cg.add(var.set_rmt_symbols(config[CONF_RMT_SYMBOLS])) - if CONF_USE_DMA in config: - cg.add(var.set_use_dma(config[CONF_USE_DMA])) + cg.add_optional(var.set_use_dma, config.get(CONF_USE_DMA)) diff --git a/esphome/components/esp32_touch/__init__.py b/esphome/components/esp32_touch/__init__.py index bdd16bc2eff..215f016b9cd 100644 --- a/esphome/components/esp32_touch/__init__.py +++ b/esphome/components/esp32_touch/__init__.py @@ -366,20 +366,13 @@ async def to_code(config: ConfigType) -> None: cg.add(touch.set_iir_filter(config[CONF_IIR_FILTER])) if variant in (VARIANT_ESP32S2, VARIANT_ESP32S3, VARIANT_ESP32P4): - if CONF_FILTER_MODE in config: - cg.add(touch.set_filter_mode(config[CONF_FILTER_MODE])) - if CONF_DEBOUNCE_COUNT in config: - cg.add(touch.set_debounce_count(config[CONF_DEBOUNCE_COUNT])) - if CONF_NOISE_THRESHOLD in config: - cg.add(touch.set_noise_threshold(config[CONF_NOISE_THRESHOLD])) - if CONF_JITTER_STEP in config: - cg.add(touch.set_jitter_step(config[CONF_JITTER_STEP])) - if CONF_SMOOTH_MODE in config: - cg.add(touch.set_smooth_level(config[CONF_SMOOTH_MODE])) - if CONF_DENOISE_GRADE in config: - cg.add(touch.set_denoise_grade(config[CONF_DENOISE_GRADE])) - if CONF_DENOISE_CAP_LEVEL in config: - cg.add(touch.set_denoise_cap(config[CONF_DENOISE_CAP_LEVEL])) + cg.add_optional(touch.set_filter_mode, config.get(CONF_FILTER_MODE)) + cg.add_optional(touch.set_debounce_count, config.get(CONF_DEBOUNCE_COUNT)) + cg.add_optional(touch.set_noise_threshold, config.get(CONF_NOISE_THRESHOLD)) + cg.add_optional(touch.set_jitter_step, config.get(CONF_JITTER_STEP)) + cg.add_optional(touch.set_smooth_level, config.get(CONF_SMOOTH_MODE)) + cg.add_optional(touch.set_denoise_grade, config.get(CONF_DENOISE_GRADE)) + cg.add_optional(touch.set_denoise_cap, config.get(CONF_DENOISE_CAP_LEVEL)) if CONF_WATERPROOF_GUARD_RING in config: cg.add( touch.set_waterproof_guard_ring_pad(config[CONF_WATERPROOF_GUARD_RING]) diff --git a/esphome/components/espectre/__init__.py b/esphome/components/espectre/__init__.py index 3d9154c5d62..8323a56db0a 100644 --- a/esphome/components/espectre/__init__.py +++ b/esphome/components/espectre/__init__.py @@ -151,10 +151,8 @@ async def to_code(config: ConfigType) -> None: cg.add(var.set_traffic_generator_target_ip(target_ip)) if (group := config.get(CONF_CSI_TRAFFIC_MULTICAST_GROUP)) is not None: cg.add(var.set_csi_traffic_multicast_group(group)) - if (on_hits := config.get(CONF_MOTION_ON_HITS)) is not None: - cg.add(var.set_motion_on_hits(on_hits)) - if (off_hits := config.get(CONF_MOTION_OFF_HITS)) is not None: - cg.add(var.set_motion_off_hits(off_hits)) + cg.add_optional(var.set_motion_on_hits, config.get(CONF_MOTION_ON_HITS)) + cg.add_optional(var.set_motion_off_hits, config.get(CONF_MOTION_OFF_HITS)) if esp32.get_esp32_variant() == VARIANT_ESP32C5: band = CORE.config[WIFI_DOMAIN].get(wifi.CONF_BAND_MODE, "AUTO") cg.add( diff --git a/esphome/components/ethernet/__init__.py b/esphome/components/ethernet/__init__.py index a4b18942026..85ef3c0b55c 100644 --- a/esphome/components/ethernet/__init__.py +++ b/esphome/components/ethernet/__init__.py @@ -724,8 +724,7 @@ async def _to_code_esp32(var: cg.MockObj, config: ConfigType) -> None: cg.add(var.set_polling_interval(config[CONF_POLLING_INTERVAL])) if _is_framework_spi_polling_mode_supported(): cg.add_define("USE_ETHERNET_SPI_POLLING_SUPPORT") - if CONF_RESET_PIN in config: - cg.add(var.set_reset_pin(config[CONF_RESET_PIN])) + cg.add_optional(var.set_reset_pin, config.get(CONF_RESET_PIN)) cg.add(var.set_clock_speed(config[CONF_CLOCK_SPEED])) cg.add_define("USE_ETHERNET_SPI") @@ -746,8 +745,7 @@ async def _to_code_esp32(var: cg.MockObj, config: ConfigType) -> None: elif config[CONF_TYPE] in ("GENERIC", "YT8531"): # RGMII data pins come from the IDF default config; set MDC/MDIO + PHY addr. _add_mdio_setters(var, config) - if CONF_POWER_PIN in config: - cg.add(var.set_power_pin(config[CONF_POWER_PIN])) + cg.add_optional(var.set_power_pin, config.get(CONF_POWER_PIN)) _add_phy_registers(var, config) else: _add_mdio_setters(var, config) @@ -755,8 +753,7 @@ async def _to_code_esp32(var: cg.MockObj, config: ConfigType) -> None: cg.add(var.set_clk_mode(clk_mode)) if (clk_pin := config[CONF_CLK][CONF_PIN]) != DEFAULT_CLK_PIN: cg.add(var.set_clk_pin(clk_pin)) - if CONF_POWER_PIN in config: - cg.add(var.set_power_pin(config[CONF_POWER_PIN])) + cg.add_optional(var.set_power_pin, config.get(CONF_POWER_PIN)) _add_phy_registers(var, config) # Register Ethernet with the esp32 sdkconfig reconciler. It disables the @@ -782,10 +779,8 @@ async def _to_code_rp2040(var: cg.MockObj, config: ConfigType) -> None: cg.add(var.set_miso_pin(config[CONF_MISO_PIN])) cg.add(var.set_mosi_pin(config[CONF_MOSI_PIN])) cg.add(var.set_cs_pin(config[CONF_CS_PIN])) - if CONF_INTERRUPT_PIN in config: - cg.add(var.set_interrupt_pin(config[CONF_INTERRUPT_PIN])) - if CONF_RESET_PIN in config: - cg.add(var.set_reset_pin(config[CONF_RESET_PIN])) + cg.add_optional(var.set_interrupt_pin, config.get(CONF_INTERRUPT_PIN)) + cg.add_optional(var.set_reset_pin, config.get(CONF_RESET_PIN)) cg.add_define("USE_ETHERNET_SPI") cg.add_library(_RP2_SPI_LIBRARIES[config[CONF_TYPE]], None) diff --git a/esphome/components/exponential_moving_average/sensor.py b/esphome/components/exponential_moving_average/sensor.py index d8f6a949969..a944e6b79de 100644 --- a/esphome/components/exponential_moving_average/sensor.py +++ b/esphome/components/exponential_moving_average/sensor.py @@ -83,8 +83,7 @@ async def to_code(config: ConfigType) -> None: if (time_constant := config.get(CONF_TIME_CONSTANT)) is not None: cg.add(var.set_time_constant(time_constant)) - if (weighting := config.get(CONF_TIME_WEIGHTING)) is not None: - cg.add(var.set_time_weighting(weighting)) + cg.add_optional(var.set_time_weighting, config.get(CONF_TIME_WEIGHTING)) else: cg.add(var.set_alpha(config.get(CONF_ALPHA, DEFAULT_ALPHA))) cg.add(var.set_restore(config[CONF_RESTORE])) diff --git a/esphome/components/fastled_base/__init__.py b/esphome/components/fastled_base/__init__.py index 8936627aaab..8082e9f2e84 100644 --- a/esphome/components/fastled_base/__init__.py +++ b/esphome/components/fastled_base/__init__.py @@ -41,8 +41,7 @@ async def new_fastled_light(config: ConfigType) -> MockObj: var = cg.new_Pvariable(config[CONF_OUTPUT_ID]) await cg.register_component(var, config) - if CONF_MAX_REFRESH_RATE in config: - cg.add(var.set_max_refresh_rate(config[CONF_MAX_REFRESH_RATE])) + cg.add_optional(var.set_max_refresh_rate, config.get(CONF_MAX_REFRESH_RATE)) if CORE.is_esp32: from esphome.components.esp32 import add_idf_component diff --git a/esphome/components/feedback/cover.py b/esphome/components/feedback/cover.py index f203e8d5186..aca5715f4f8 100644 --- a/esphome/components/feedback/cover.py +++ b/esphome/components/feedback/cover.py @@ -147,8 +147,7 @@ async def to_code(config: ConfigType) -> None: ) # OTHER - if CONF_MAX_DURATION in config: - cg.add(var.set_max_duration(config[CONF_MAX_DURATION])) + cg.add_optional(var.set_max_duration, config.get(CONF_MAX_DURATION)) cg.add(var.set_has_built_in_endstop(config[CONF_HAS_BUILT_IN_ENDSTOP])) diff --git a/esphome/components/graph/__init__.py b/esphome/components/graph/__init__.py index 9dfa8df4cc8..6ebb8113404 100644 --- a/esphome/components/graph/__init__.py +++ b/esphome/components/graph/__init__.py @@ -151,21 +151,14 @@ async def to_code(config: ConfigType) -> None: await cg.register_component(var, config) # Graph options - if CONF_X_GRID in config: - cg.add(var.set_grid_x(config[CONF_X_GRID])) - if CONF_Y_GRID in config: - cg.add(var.set_grid_y(config[CONF_Y_GRID])) - if CONF_BORDER in config: - cg.add(var.set_border(config[CONF_BORDER])) + cg.add_optional(var.set_grid_x, config.get(CONF_X_GRID)) + cg.add_optional(var.set_grid_y, config.get(CONF_Y_GRID)) + cg.add_optional(var.set_border, config.get(CONF_BORDER)) # Axis related options - if CONF_MIN_VALUE in config: - cg.add(var.set_min_value(config[CONF_MIN_VALUE])) - if CONF_MAX_VALUE in config: - cg.add(var.set_max_value(config[CONF_MAX_VALUE])) - if CONF_MIN_RANGE in config: - cg.add(var.set_min_range(config[CONF_MIN_RANGE])) - if CONF_MAX_RANGE in config: - cg.add(var.set_max_range(config[CONF_MAX_RANGE])) + cg.add_optional(var.set_min_value, config.get(CONF_MIN_VALUE)) + cg.add_optional(var.set_max_value, config.get(CONF_MAX_VALUE)) + cg.add_optional(var.set_min_range, config.get(CONF_MIN_RANGE)) + cg.add_optional(var.set_max_range, config.get(CONF_MAX_RANGE)) # Trace options for trace in config[CONF_TRACES]: tr = cg.new_Pvariable(trace[CONF_ID], GraphTrace()) diff --git a/esphome/components/haier/climate.py b/esphome/components/haier/climate.py index 52171d1855f..dec090352bf 100644 --- a/esphome/components/haier/climate.py +++ b/esphome/components/haier/climate.py @@ -373,20 +373,14 @@ async def to_code(config): await uart.register_uart_device(var, config) cg.add(var.set_send_wifi(config[CONF_WIFI_SIGNAL])) - if CONF_CONTROL_METHOD in config: - cg.add(var.set_control_method(config[CONF_CONTROL_METHOD])) - if CONF_BEEPER in config: - cg.add(var.set_beeper_state(config[CONF_BEEPER])) - if CONF_DISPLAY in config: - cg.add(var.set_display_state(config[CONF_DISPLAY])) - if CONF_SUPPORTED_MODES in config: - cg.add(var.set_supported_modes(config[CONF_SUPPORTED_MODES])) + cg.add_optional(var.set_control_method, config.get(CONF_CONTROL_METHOD)) + cg.add_optional(var.set_beeper_state, config.get(CONF_BEEPER)) + cg.add_optional(var.set_display_state, config.get(CONF_DISPLAY)) + cg.add_optional(var.set_supported_modes, config.get(CONF_SUPPORTED_MODES)) if CONF_SUPPORTED_SWING_MODES in config: cg.add(var.set_supported_swing_modes(config[CONF_SUPPORTED_SWING_MODES])) - if CONF_SUPPORTED_PRESETS in config: - cg.add(var.set_supported_presets(config[CONF_SUPPORTED_PRESETS])) - if CONF_ANSWER_TIMEOUT in config: - cg.add(var.set_answer_timeout(config[CONF_ANSWER_TIMEOUT])) + cg.add_optional(var.set_supported_presets, config.get(CONF_SUPPORTED_PRESETS)) + cg.add_optional(var.set_answer_timeout, config.get(CONF_ANSWER_TIMEOUT)) if CONF_ALTERNATIVE_SWING_CONTROL in config: cg.add( var.set_alternative_swing_control(config[CONF_ALTERNATIVE_SWING_CONTROL]) diff --git a/esphome/components/hbridge/fan/__init__.py b/esphome/components/hbridge/fan/__init__.py index 01713ba34f4..f65fc5001fa 100644 --- a/esphome/components/hbridge/fan/__init__.py +++ b/esphome/components/hbridge/fan/__init__.py @@ -60,5 +60,4 @@ async def to_code(config: ConfigType) -> None: await cg.add_variable(var.set_pin_b, config[CONF_PIN_B]) await cg.add_variable(var.set_enable_pin, config.get(CONF_ENABLE_PIN)) - if CONF_PRESET_MODES in config: - cg.add(var.set_preset_modes(config[CONF_PRESET_MODES])) + cg.add_optional(var.set_preset_modes, config.get(CONF_PRESET_MODES)) diff --git a/esphome/components/homeassistant/__init__.py b/esphome/components/homeassistant/__init__.py index 6f5360bfed1..3913b3e1c73 100644 --- a/esphome/components/homeassistant/__init__.py +++ b/esphome/components/homeassistant/__init__.py @@ -91,8 +91,7 @@ def setup_home_assistant_entity( cg.add(var.set_entity_id(cg.RawExpression(buffer))) else: cg.add(var.set_entity_id(config[CONF_ENTITY_ID])) - if CONF_ATTRIBUTE in config: - cg.add(var.set_attribute(config[CONF_ATTRIBUTE])) + cg.add_optional(var.set_attribute, config.get(CONF_ATTRIBUTE)) cg.add_define("USE_API_HOMEASSISTANT_STATES") if state_subscription_count > 0: data = _get_data() diff --git a/esphome/components/hydreon_rgxx/sensor.py b/esphome/components/hydreon_rgxx/sensor.py index eeab5303922..ad99dfe3fd2 100644 --- a/esphome/components/hydreon_rgxx/sensor.py +++ b/esphome/components/hydreon_rgxx/sensor.py @@ -156,10 +156,8 @@ async def to_code(config: ConfigType) -> None: cg.add(var.set_sensor(sens, i)) cg.add(var.set_model(config[CONF_MODEL])) - if CONF_RESOLUTION in config: - cg.add(var.set_resolution(config[CONF_RESOLUTION])) + cg.add_optional(var.set_resolution, config.get(CONF_RESOLUTION)) cg.add(var.set_request_temperature(CONF_TEMPERATURE in config)) - if CONF_DISABLE_LED in config: - cg.add(var.set_disable_led(config[CONF_DISABLE_LED])) + cg.add_optional(var.set_disable_led, config.get(CONF_DISABLE_LED)) diff --git a/esphome/components/i2c/__init__.py b/esphome/components/i2c/__init__.py index 8598998f563..53fc183b0bb 100644 --- a/esphome/components/i2c/__init__.py +++ b/esphome/components/i2c/__init__.py @@ -333,11 +333,9 @@ async def to_code(config: ConfigType) -> None: await cg.register_component(var, config) cg.add(var.set_sda_pin(config[CONF_SDA])) - if CONF_SDA_PULLUP_ENABLED in config: - cg.add(var.set_sda_pullup_enabled(config[CONF_SDA_PULLUP_ENABLED])) + cg.add_optional(var.set_sda_pullup_enabled, config.get(CONF_SDA_PULLUP_ENABLED)) cg.add(var.set_scl_pin(config[CONF_SCL])) - if CONF_SCL_PULLUP_ENABLED in config: - cg.add(var.set_scl_pullup_enabled(config[CONF_SCL_PULLUP_ENABLED])) + cg.add_optional(var.set_scl_pullup_enabled, config.get(CONF_SCL_PULLUP_ENABLED)) cg.add(var.set_frequency(int(config[CONF_FREQUENCY]))) cg.add(var.set_scan(config[CONF_SCAN])) @@ -350,11 +348,9 @@ async def to_code(config: ConfigType) -> None: await cg.register_component(var, config) cg.add(var.set_sda_pin(config[CONF_SDA])) - if CONF_SDA_PULLUP_ENABLED in config: - cg.add(var.set_sda_pullup_enabled(config[CONF_SDA_PULLUP_ENABLED])) + cg.add_optional(var.set_sda_pullup_enabled, config.get(CONF_SDA_PULLUP_ENABLED)) cg.add(var.set_scl_pin(config[CONF_SCL])) - if CONF_SCL_PULLUP_ENABLED in config: - cg.add(var.set_scl_pullup_enabled(config[CONF_SCL_PULLUP_ENABLED])) + cg.add_optional(var.set_scl_pullup_enabled, config.get(CONF_SCL_PULLUP_ENABLED)) cg.add(var.set_frequency(int(config[CONF_FREQUENCY]))) cg.add(var.set_scan(config[CONF_SCAN])) diff --git a/esphome/components/i2s_audio/__init__.py b/esphome/components/i2s_audio/__init__.py index 4abc807ee3d..3a4d5467648 100644 --- a/esphome/components/i2s_audio/__init__.py +++ b/esphome/components/i2s_audio/__init__.py @@ -370,12 +370,9 @@ async def to_code(config: ConfigType) -> None: # Helps avoid callbacks being skipped due to processor load add_idf_sdkconfig_option("CONFIG_I2S_ISR_IRAM_SAFE", True) - if CONF_I2S_LRCLK_PIN in config: - cg.add(var.set_lrclk_pin(config[CONF_I2S_LRCLK_PIN])) - if CONF_I2S_BCLK_PIN in config: - cg.add(var.set_bclk_pin(config[CONF_I2S_BCLK_PIN])) - if CONF_I2S_MCLK_PIN in config: - cg.add(var.set_mclk_pin(config[CONF_I2S_MCLK_PIN])) + cg.add_optional(var.set_lrclk_pin, config.get(CONF_I2S_LRCLK_PIN)) + cg.add_optional(var.set_bclk_pin, config.get(CONF_I2S_BCLK_PIN)) + cg.add_optional(var.set_mclk_pin, config.get(CONF_I2S_MCLK_PIN)) if config[CONF_FULL_DUPLEX]: cg.add_define("USE_I2S_AUDIO_FULL_DUPLEX") diff --git a/esphome/components/ir_rf_proxy/infrared.py b/esphome/components/ir_rf_proxy/infrared.py index 548ba2b1326..b4e2c40f839 100644 --- a/esphome/components/ir_rf_proxy/infrared.py +++ b/esphome/components/ir_rf_proxy/infrared.py @@ -84,5 +84,4 @@ async def to_code(config: dict[str, Any]) -> None: await remote_base.attach_receiver(var, config, CONF_REMOTE_RECEIVER_ID) # Set receiver demodulation frequency if specified (metadata only, no hardware effect) - if CONF_RECEIVER_FREQUENCY in config: - cg.add(var.set_receiver_frequency(config[CONF_RECEIVER_FREQUENCY])) + cg.add_optional(var.set_receiver_frequency, config.get(CONF_RECEIVER_FREQUENCY)) diff --git a/esphome/components/it8951/display.py b/esphome/components/it8951/display.py index bb0c1f10fbb..a98d2143583 100644 --- a/esphome/components/it8951/display.py +++ b/esphome/components/it8951/display.py @@ -376,22 +376,19 @@ async def to_code(config: ConfigType) -> None: ) ) cg.add(var.set_full_update_every(config[CONF_FULL_UPDATE_EVERY])) - if (reset_duration := config.get(CONF_RESET_DURATION)) is not None: - cg.add(var.set_reset_duration(reset_duration)) + cg.add_optional(var.set_reset_duration, config.get(CONF_RESET_DURATION)) if config.get(CONF_INVERT_COLORS): cg.add(var.set_invert_colors(True)) if config.get(CONF_SLEEP_WHEN_DONE): cg.add(var.set_sleep_when_done(True)) cg.add(var.set_vcom(config[CONF_VCOM])) cg.add(var.set_vcom_register(config[CONF_VCOM_REGISTER])) - if CONF_FORCE_TEMPERATURE in config: - cg.add(var.set_force_temperature(config[CONF_FORCE_TEMPERATURE])) + cg.add_optional(var.set_force_temperature, config.get(CONF_FORCE_TEMPERATURE)) if config.get(CONF_USE_LEGACY_DPY_AREA): cg.add(var.set_use_legacy_dpy_area(True)) cg.add(var.set_grayscale(config[CONF_GRAYSCALE])) cg.add(var.set_dithering(config[CONF_DITHERING])) - if (mode := config.get(CONF_UPDATE_MODE)) is not None: - cg.add(var.set_update_mode(mode)) + cg.add_optional(var.set_update_mode, config.get(CONF_UPDATE_MODE)) transform = config.get( CONF_TRANSFORM, diff --git a/esphome/components/key_collector/__init__.py b/esphome/components/key_collector/__init__.py index dc50f8cdc0d..1ecde346ea0 100644 --- a/esphome/components/key_collector/__init__.py +++ b/esphome/components/key_collector/__init__.py @@ -94,22 +94,14 @@ async def to_code(config: ConfigType) -> None: await cg.register_component(var, config) for source_conf in config.get(CONF_SOURCE_ID, ()): await cg.add_variable(var.add_provider, source_conf) - if CONF_MIN_LENGTH in config: - cg.add(var.set_min_length(config[CONF_MIN_LENGTH])) - if CONF_MAX_LENGTH in config: - cg.add(var.set_max_length(config[CONF_MAX_LENGTH])) - if CONF_START_KEYS in config: - cg.add(var.set_start_keys(config[CONF_START_KEYS])) - if CONF_END_KEYS in config: - cg.add(var.set_end_keys(config[CONF_END_KEYS])) - if CONF_END_KEY_REQUIRED in config: - cg.add(var.set_end_key_required(config[CONF_END_KEY_REQUIRED])) - if CONF_BACK_KEYS in config: - cg.add(var.set_back_keys(config[CONF_BACK_KEYS])) - if CONF_CLEAR_KEYS in config: - cg.add(var.set_clear_keys(config[CONF_CLEAR_KEYS])) - if CONF_ALLOWED_KEYS in config: - cg.add(var.set_allowed_keys(config[CONF_ALLOWED_KEYS])) + cg.add_optional(var.set_min_length, config.get(CONF_MIN_LENGTH)) + cg.add_optional(var.set_max_length, config.get(CONF_MAX_LENGTH)) + cg.add_optional(var.set_start_keys, config.get(CONF_START_KEYS)) + cg.add_optional(var.set_end_keys, config.get(CONF_END_KEYS)) + cg.add_optional(var.set_end_key_required, config.get(CONF_END_KEY_REQUIRED)) + cg.add_optional(var.set_back_keys, config.get(CONF_BACK_KEYS)) + cg.add_optional(var.set_clear_keys, config.get(CONF_CLEAR_KEYS)) + cg.add_optional(var.set_allowed_keys, config.get(CONF_ALLOWED_KEYS)) for trigger_name, args in TRIGGER_TYPES.items(): arglist: TemplateArgsType = [(arg.type, arg.name) for arg in args] diff --git a/esphome/components/ledc/output.py b/esphome/components/ledc/output.py index bb7f8de3fe8..a606982a9b8 100644 --- a/esphome/components/ledc/output.py +++ b/esphome/components/ledc/output.py @@ -67,11 +67,9 @@ async def to_code(config: ConfigType) -> None: var = cg.new_Pvariable(config[CONF_ID], gpio) await cg.register_component(var, config) await output.register_output(var, config) - if CONF_CHANNEL in config: - cg.add(var.set_channel(config[CONF_CHANNEL])) + cg.add_optional(var.set_channel, config.get(CONF_CHANNEL)) cg.add(var.set_frequency(config[CONF_FREQUENCY])) - if CONF_PHASE_ANGLE in config: - cg.add(var.set_phase_angle(config[CONF_PHASE_ANGLE])) + cg.add_optional(var.set_phase_angle, config.get(CONF_PHASE_ANGLE)) automation.register_apply_action( diff --git a/esphome/components/matrix_keypad/__init__.py b/esphome/components/matrix_keypad/__init__.py index 8e9b21fe433..2ce699d4686 100644 --- a/esphome/components/matrix_keypad/__init__.py +++ b/esphome/components/matrix_keypad/__init__.py @@ -85,10 +85,8 @@ async def to_code(config: ConfigType) -> None: ) cg.add(var.set_keys(table)) cg.add(var.set_debounce_time(config[CONF_DEBOUNCE_TIME])) - if CONF_HAS_DIODES in config: - cg.add(var.set_has_diodes(config[CONF_HAS_DIODES])) - if CONF_HAS_PULLDOWNS in config: - cg.add(var.set_has_pulldowns(config[CONF_HAS_PULLDOWNS])) + cg.add_optional(var.set_has_diodes, config.get(CONF_HAS_DIODES)) + cg.add_optional(var.set_has_pulldowns, config.get(CONF_HAS_PULLDOWNS)) for conf in config.get(CONF_ON_KEY, []): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID]) cg.add(var.register_key_trigger(trigger)) diff --git a/esphome/components/mhz19/sensor.py b/esphome/components/mhz19/sensor.py index 5c5b24f6f48..585e0f06bf4 100644 --- a/esphome/components/mhz19/sensor.py +++ b/esphome/components/mhz19/sensor.py @@ -88,8 +88,7 @@ async def to_code(config: ConfigType) -> None: cg.add(var.set_warmup_seconds(config[CONF_WARMUP_TIME])) - if CONF_DETECTION_RANGE in config: - cg.add(var.set_detection_range(config[CONF_DETECTION_RANGE])) + cg.add_optional(var.set_detection_range, config.get(CONF_DETECTION_RANGE)) NO_ARGS_ACTION_SCHEMA = maybe_simple_id( diff --git a/esphome/components/mics_5524/sensor.py b/esphome/components/mics_5524/sensor.py index 0440a4829d9..03122f8330d 100644 --- a/esphome/components/mics_5524/sensor.py +++ b/esphome/components/mics_5524/sensor.py @@ -427,8 +427,7 @@ async def to_code(config: ConfigType) -> None: # Only a build with a datasheet model links the power law and its libm cg.add_define("USE_MICS_5524_DATASHEET") cg.add(var.set_vcc(config[CONF_VCC])) - if (rl := config.get(CONF_RL)) is not None: - cg.add(var.set_rl(rl)) + cg.add_optional(var.set_rl, config.get(CONF_RL)) cg.add(var.set_voltage_multiplier(_voltage_multiplier(config))) cg.add(var.set_samples(config[CONF_SAMPLE_COUNT])) cg.add(var.set_warmup_time(config[CONF_WARMUP_TIME])) diff --git a/esphome/components/midea/climate.py b/esphome/components/midea/climate.py index f5c1ed71b84..2a9901db4f5 100644 --- a/esphome/components/midea/climate.py +++ b/esphome/components/midea/climate.py @@ -225,16 +225,12 @@ async def to_code(config): cg.add(var.set_beeper_feedback(config[CONF_BEEPER])) cg.add(var.set_autoconf(config[CONF_AUTOCONF])) cg.add(var.set_display_control(config[CONF_DISPLAY_CONTROL])) - if CONF_SUPPORTED_MODES in config: - cg.add(var.set_supported_modes(config[CONF_SUPPORTED_MODES])) + cg.add_optional(var.set_supported_modes, config.get(CONF_SUPPORTED_MODES)) if CONF_SUPPORTED_SWING_MODES in config: cg.add(var.set_supported_swing_modes(config[CONF_SUPPORTED_SWING_MODES])) - if CONF_SUPPORTED_PRESETS in config: - cg.add(var.set_supported_presets(config[CONF_SUPPORTED_PRESETS])) - if CONF_CUSTOM_PRESETS in config: - cg.add(var.set_custom_presets(config[CONF_CUSTOM_PRESETS])) - if CONF_CUSTOM_FAN_MODES in config: - cg.add(var.set_custom_fan_modes(config[CONF_CUSTOM_FAN_MODES])) + cg.add_optional(var.set_supported_presets, config.get(CONF_SUPPORTED_PRESETS)) + cg.add_optional(var.set_custom_presets, config.get(CONF_CUSTOM_PRESETS)) + cg.add_optional(var.set_custom_fan_modes, config.get(CONF_CUSTOM_FAN_MODES)) sensors = sensor.sub_sensors(config) await sensors(CONF_OUTDOOR_TEMPERATURE, var.set_outdoor_temperature_sensor) await sensors(CONF_POWER_USAGE, var.set_power_sensor) diff --git a/esphome/components/mmc5603/sensor.py b/esphome/components/mmc5603/sensor.py index 874b774829e..4331c80898d 100644 --- a/esphome/components/mmc5603/sensor.py +++ b/esphome/components/mmc5603/sensor.py @@ -84,5 +84,4 @@ async def to_code(config: ConfigType) -> None: await sensors(CONF_FIELD_STRENGTH_Y, var.set_y_sensor) await sensors(CONF_FIELD_STRENGTH_Z, var.set_z_sensor) await sensors(CONF_HEADING, var.set_heading_sensor) - if CONF_AUTO_SET_RESET in config: - cg.add(var.set_auto_set_reset(config[CONF_AUTO_SET_RESET])) + cg.add_optional(var.set_auto_set_reset, config.get(CONF_AUTO_SET_RESET)) diff --git a/esphome/components/modbus_controller/__init__.py b/esphome/components/modbus_controller/__init__.py index aa72a08a60b..e1e40b11440 100644 --- a/esphome/components/modbus_controller/__init__.py +++ b/esphome/components/modbus_controller/__init__.py @@ -451,8 +451,7 @@ async def add_modbus_base_properties( lambda_param_type: cg.MockObj = cg.float_, lambda_return_type: Any = float, ) -> None: - if CONF_CUSTOM_PDU in config: - cg.add(var.set_custom_pdu(config[CONF_CUSTOM_PDU])) + cg.add_optional(var.set_custom_pdu, config.get(CONF_CUSTOM_PDU)) if config[CONF_RESPONSE_SIZE] > 0: cg.add(var.set_register_size(config[CONF_RESPONSE_SIZE])) diff --git a/esphome/components/mopeka_std_check/sensor.py b/esphome/components/mopeka_std_check/sensor.py index 644684afa67..96af9067f6c 100644 --- a/esphome/components/mopeka_std_check/sensor.py +++ b/esphome/components/mopeka_std_check/sensor.py @@ -122,8 +122,7 @@ async def to_code(config: ConfigType) -> None: cg.add(var.set_tank_empty(CONF_SUPPORTED_TANKS_MAP[t][0])) cg.add(var.set_tank_full(CONF_SUPPORTED_TANKS_MAP[t][1])) - if CONF_PROPANE_BUTANE_MIX in config: - cg.add(var.set_propane_butane_mix(config[CONF_PROPANE_BUTANE_MIX])) + cg.add_optional(var.set_propane_butane_mix, config.get(CONF_PROPANE_BUTANE_MIX)) sensors = sensor.sub_sensors(config) await sensors(CONF_TEMPERATURE, var.set_temperature) diff --git a/esphome/components/motion/binary_sensor/__init__.py b/esphome/components/motion/binary_sensor/__init__.py index 175f859e02e..9c421a18677 100644 --- a/esphome/components/motion/binary_sensor/__init__.py +++ b/esphome/components/motion/binary_sensor/__init__.py @@ -113,5 +113,4 @@ async def to_code(config: ConfigType) -> None: # Convert the configured tilt angle (degrees) to the cosine the C++ side expects. threshold = round(math.cos(math.radians(threshold)), 6) cg.add(var.set_threshold(threshold)) - if (duration := config.get(CONF_DURATION)) is not None: - cg.add(var.set_duration(duration)) + cg.add_optional(var.set_duration, config.get(CONF_DURATION)) diff --git a/esphome/components/mpr121/binary_sensor/__init__.py b/esphome/components/mpr121/binary_sensor/__init__.py index 565789cdc33..0ce0f42f1de 100644 --- a/esphome/components/mpr121/binary_sensor/__init__.py +++ b/esphome/components/mpr121/binary_sensor/__init__.py @@ -31,9 +31,7 @@ async def to_code(config: ConfigType) -> None: cg.add(var.set_channel(config[CONF_CHANNEL])) await cg.register_parented(var, hub) - if CONF_TOUCH_THRESHOLD in config: - cg.add(var.set_touch_threshold(config[CONF_TOUCH_THRESHOLD])) - if CONF_RELEASE_THRESHOLD in config: - cg.add(var.set_release_threshold(config[CONF_RELEASE_THRESHOLD])) + cg.add_optional(var.set_touch_threshold, config.get(CONF_TOUCH_THRESHOLD)) + cg.add_optional(var.set_release_threshold, config.get(CONF_RELEASE_THRESHOLD)) cg.add(hub.register_channel(var)) diff --git a/esphome/components/mqtt/__init__.py b/esphome/components/mqtt/__init__.py index fe426827ce6..0eaf4a9bbfa 100644 --- a/esphome/components/mqtt/__init__.py +++ b/esphome/components/mqtt/__init__.py @@ -362,8 +362,7 @@ async def to_code(config): cg.add(var.set_username(config[CONF_USERNAME])) cg.add(var.set_password(config[CONF_PASSWORD])) cg.add(var.set_clean_session(config[CONF_CLEAN_SESSION])) - if CONF_CLIENT_ID in config: - cg.add(var.set_client_id(config[CONF_CLIENT_ID])) + cg.add_optional(var.set_client_id, config.get(CONF_CLIENT_ID)) discovery = config[CONF_DISCOVERY] discovery_retain = config[CONF_DISCOVERY_RETAIN] @@ -561,12 +560,9 @@ def get_default_topic_for(data, component_type, name, suffix): async def register_mqtt_component(var, config): await cg.register_component(var, {}) - if CONF_QOS in config: - cg.add(var.set_qos(config[CONF_QOS])) - if CONF_RETAIN in config: - cg.add(var.set_retain(config[CONF_RETAIN])) - if CONF_SUBSCRIBE_QOS in config: - cg.add(var.set_subscribe_qos(config[CONF_SUBSCRIBE_QOS])) + cg.add_optional(var.set_qos, config.get(CONF_QOS)) + cg.add_optional(var.set_retain, config.get(CONF_RETAIN)) + cg.add_optional(var.set_subscribe_qos, config.get(CONF_SUBSCRIBE_QOS)) if not config.get(CONF_DISCOVERY, True): cg.add(var.disable_discovery()) if CONF_STATE_TOPIC in config: @@ -577,8 +573,7 @@ async def register_mqtt_component(var, config): config[CONF_COMMAND_TOPIC], [], cg.std_string ) cg.add(var.set_custom_command_topic(command_topic)) - if CONF_COMMAND_RETAIN in config: - cg.add(var.set_command_retain(config[CONF_COMMAND_RETAIN])) + cg.add_optional(var.set_command_retain, config.get(CONF_COMMAND_RETAIN)) if CONF_AVAILABILITY in config: availability = config[CONF_AVAILABILITY] if not availability: diff --git a/esphome/components/mt6701_i2c/__init__.py b/esphome/components/mt6701_i2c/__init__.py index 79c73eebe46..0c9539fd9f2 100644 --- a/esphome/components/mt6701_i2c/__init__.py +++ b/esphome/components/mt6701_i2c/__init__.py @@ -157,14 +157,10 @@ CONFIG_SCHEMA = ( async def to_code(config: ConfigType) -> None: var = await i2c.new_i2c_component(config) - if (direction := config.get(CONF_DIRECTION)) is not None: - cg.add(var.set_direction(direction)) - if (zero_offset := config.get(CONF_ZERO_OFFSET)) is not None: - cg.add(var.set_zero_offset(zero_offset)) - if (hysteresis := config.get(CONF_HYSTERESIS)) is not None: - cg.add(var.set_hysteresis(hysteresis)) - if (output_mode := config.get(CONF_OUTPUT_MODE)) is not None: - cg.add(var.set_output_mode(output_mode)) + cg.add_optional(var.set_direction, config.get(CONF_DIRECTION)) + cg.add_optional(var.set_zero_offset, config.get(CONF_ZERO_OFFSET)) + cg.add_optional(var.set_hysteresis, config.get(CONF_HYSTERESIS)) + cg.add_optional(var.set_output_mode, config.get(CONF_OUTPUT_MODE)) if abz := config.get(CONF_ABZ): if (ppr := abz.get(CONF_PULSES_PER_REVOLUTION)) is not None: diff --git a/tests/component_tests/motion/test_motion.py b/tests/component_tests/motion/test_motion.py index ce0fd669b24..0ad3465b68a 100644 --- a/tests/component_tests/motion/test_motion.py +++ b/tests/component_tests/motion/test_motion.py @@ -944,6 +944,7 @@ class TestEventSchema: def mock_binary_sensor_codegen(): mock_var = MagicMock() mock_parent = MagicMock() + mock_add = MagicMock() with ( patch( "esphome.components.motion.binary_sensor.cg.get_variable", @@ -962,9 +963,8 @@ def mock_binary_sensor_codegen(): "esphome.components.motion.binary_sensor.cg.register_component", new_callable=AsyncMock, ) as mock_reg_comp, - patch( - "esphome.components.motion.binary_sensor.cg.add", - ) as mock_add, + patch("esphome.components.motion.binary_sensor.cg.add", mock_add), + patch("esphome.cpp_helpers.add", mock_add), ): yield { "get_variable": mock_get_var,