Add sound horn and flash lights buttons to Renault (#161976)

Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
This commit is contained in:
Sebastiaan Speck
2026-02-03 15:18:55 +01:00
committed by GitHub
parent 89f536e332
commit 1ebde65f03
6 changed files with 966 additions and 0 deletions

View File

@@ -79,4 +79,20 @@ BUTTON_TYPES: tuple[RenaultButtonEntityDescription, ...] = (
),
translation_key="stop_charge",
),
RenaultButtonEntityDescription(
async_press=lambda x: x.vehicle.sound_horn(),
key="sound_horn",
is_supported=lambda vehicle: (
vehicle.details.supports_endpoint("actions/horn-start")
),
translation_key="sound_horn",
),
RenaultButtonEntityDescription(
async_press=lambda x: x.vehicle.flash_lights(),
key="flash_lights",
is_supported=lambda vehicle: (
vehicle.details.supports_endpoint("actions/lights-start")
),
translation_key="flash_lights",
),
)

View File

@@ -9,6 +9,12 @@
}
},
"button": {
"flash_lights": {
"default": "mdi:lightbulb-on"
},
"sound_horn": {
"default": "mdi:bugle"
},
"start_air_conditioner": {
"default": "mdi:air-conditioner"
},

View File

@@ -221,6 +221,16 @@ class RenaultVehicleProxy:
"""Set vehicle charge schedules."""
return await self._vehicle.set_charge_schedules(schedules)
@with_error_wrapping
async def sound_horn(self) -> None:
"""Start vehicle horn."""
await self._vehicle.start_horn()
@with_error_wrapping
async def flash_lights(self) -> None:
"""Start vehicle lights."""
await self._vehicle.start_lights()
COORDINATORS: tuple[RenaultCoordinatorDescription, ...] = (
RenaultCoordinatorDescription(

View File

@@ -73,6 +73,12 @@
}
},
"button": {
"flash_lights": {
"name": "Flash lights"
},
"sound_horn": {
"name": "Sound horn"
},
"start_air_conditioner": {
"name": "Start air conditioner"
},

View File

@@ -1,4 +1,102 @@
# serializer version: 1
# name: test_button_access_denied[zoe_40][button.reg_zoe_40_flash_lights-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_40_flash_lights',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Flash lights',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Flash lights',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'flash_lights',
'unique_id': 'vf1zoe40vin_flash_lights',
'unit_of_measurement': None,
})
# ---
# name: test_button_access_denied[zoe_40][button.reg_zoe_40_flash_lights-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-40 Flash lights',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_40_flash_lights',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_button_access_denied[zoe_40][button.reg_zoe_40_sound_horn-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_40_sound_horn',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Sound horn',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Sound horn',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'sound_horn',
'unique_id': 'vf1zoe40vin_sound_horn',
'unit_of_measurement': None,
})
# ---
# name: test_button_access_denied[zoe_40][button.reg_zoe_40_sound_horn-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-40 Sound horn',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_40_sound_horn',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_button_access_denied[zoe_40][button.reg_zoe_40_start_air_conditioner-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -146,6 +244,104 @@
'state': 'unknown',
})
# ---
# name: test_button_empty[zoe_40][button.reg_zoe_40_flash_lights-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_40_flash_lights',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Flash lights',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Flash lights',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'flash_lights',
'unique_id': 'vf1zoe40vin_flash_lights',
'unit_of_measurement': None,
})
# ---
# name: test_button_empty[zoe_40][button.reg_zoe_40_flash_lights-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-40 Flash lights',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_40_flash_lights',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_button_empty[zoe_40][button.reg_zoe_40_sound_horn-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_40_sound_horn',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Sound horn',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Sound horn',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'sound_horn',
'unique_id': 'vf1zoe40vin_sound_horn',
'unit_of_measurement': None,
})
# ---
# name: test_button_empty[zoe_40][button.reg_zoe_40_sound_horn-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-40 Sound horn',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_40_sound_horn',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_button_empty[zoe_40][button.reg_zoe_40_start_air_conditioner-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -293,6 +489,104 @@
'state': 'unknown',
})
# ---
# name: test_button_errors[zoe_40][button.reg_zoe_40_flash_lights-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_40_flash_lights',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Flash lights',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Flash lights',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'flash_lights',
'unique_id': 'vf1zoe40vin_flash_lights',
'unit_of_measurement': None,
})
# ---
# name: test_button_errors[zoe_40][button.reg_zoe_40_flash_lights-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-40 Flash lights',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_40_flash_lights',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_button_errors[zoe_40][button.reg_zoe_40_sound_horn-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_40_sound_horn',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Sound horn',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Sound horn',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'sound_horn',
'unique_id': 'vf1zoe40vin_sound_horn',
'unit_of_measurement': None,
})
# ---
# name: test_button_errors[zoe_40][button.reg_zoe_40_sound_horn-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-40 Sound horn',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_40_sound_horn',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_button_errors[zoe_40][button.reg_zoe_40_start_air_conditioner-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -440,6 +734,104 @@
'state': 'unknown',
})
# ---
# name: test_button_not_supported[zoe_40][button.reg_zoe_40_flash_lights-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_40_flash_lights',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Flash lights',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Flash lights',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'flash_lights',
'unique_id': 'vf1zoe40vin_flash_lights',
'unit_of_measurement': None,
})
# ---
# name: test_button_not_supported[zoe_40][button.reg_zoe_40_flash_lights-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-40 Flash lights',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_40_flash_lights',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_button_not_supported[zoe_40][button.reg_zoe_40_sound_horn-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_40_sound_horn',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Sound horn',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Sound horn',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'sound_horn',
'unique_id': 'vf1zoe40vin_sound_horn',
'unit_of_measurement': None,
})
# ---
# name: test_button_not_supported[zoe_40][button.reg_zoe_40_sound_horn-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-40 Sound horn',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_40_sound_horn',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_button_not_supported[zoe_40][button.reg_zoe_40_start_air_conditioner-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -587,6 +979,104 @@
'state': 'unknown',
})
# ---
# name: test_buttons[captur_fuel][button.reg_captur_fuel_flash_lights-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_captur_fuel_flash_lights',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Flash lights',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Flash lights',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'flash_lights',
'unique_id': 'vf1capturfuelvin_flash_lights',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[captur_fuel][button.reg_captur_fuel_flash_lights-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-CAPTUR-FUEL Flash lights',
}),
'context': <ANY>,
'entity_id': 'button.reg_captur_fuel_flash_lights',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[captur_fuel][button.reg_captur_fuel_sound_horn-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_captur_fuel_sound_horn',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Sound horn',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Sound horn',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'sound_horn',
'unique_id': 'vf1capturfuelvin_sound_horn',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[captur_fuel][button.reg_captur_fuel_sound_horn-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-CAPTUR-FUEL Sound horn',
}),
'context': <ANY>,
'entity_id': 'button.reg_captur_fuel_sound_horn',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[captur_fuel][button.reg_captur_fuel_start_air_conditioner-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -636,6 +1126,104 @@
'state': 'unknown',
})
# ---
# name: test_buttons[captur_phev][button.reg_captur_phev_flash_lights-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_captur_phev_flash_lights',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Flash lights',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Flash lights',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'flash_lights',
'unique_id': 'vf1capturphevvin_flash_lights',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[captur_phev][button.reg_captur_phev_flash_lights-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-CAPTUR_PHEV Flash lights',
}),
'context': <ANY>,
'entity_id': 'button.reg_captur_phev_flash_lights',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[captur_phev][button.reg_captur_phev_sound_horn-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_captur_phev_sound_horn',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Sound horn',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Sound horn',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'sound_horn',
'unique_id': 'vf1capturphevvin_sound_horn',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[captur_phev][button.reg_captur_phev_sound_horn-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-CAPTUR_PHEV Sound horn',
}),
'context': <ANY>,
'entity_id': 'button.reg_captur_phev_sound_horn',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[captur_phev][button.reg_captur_phev_start_air_conditioner-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -783,6 +1371,104 @@
'state': 'unknown',
})
# ---
# name: test_buttons[twingo_3_electric][button.reg_twingo_iii_flash_lights-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_twingo_iii_flash_lights',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Flash lights',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Flash lights',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'flash_lights',
'unique_id': 'vf1twingoiiivin_flash_lights',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[twingo_3_electric][button.reg_twingo_iii_flash_lights-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-TWINGO-III Flash lights',
}),
'context': <ANY>,
'entity_id': 'button.reg_twingo_iii_flash_lights',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[twingo_3_electric][button.reg_twingo_iii_sound_horn-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_twingo_iii_sound_horn',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Sound horn',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Sound horn',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'sound_horn',
'unique_id': 'vf1twingoiiivin_sound_horn',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[twingo_3_electric][button.reg_twingo_iii_sound_horn-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-TWINGO-III Sound horn',
}),
'context': <ANY>,
'entity_id': 'button.reg_twingo_iii_sound_horn',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[twingo_3_electric][button.reg_twingo_iii_start_air_conditioner-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -930,6 +1616,104 @@
'state': 'unknown',
})
# ---
# name: test_buttons[zoe_40][button.reg_zoe_40_flash_lights-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_40_flash_lights',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Flash lights',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Flash lights',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'flash_lights',
'unique_id': 'vf1zoe40vin_flash_lights',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[zoe_40][button.reg_zoe_40_flash_lights-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-40 Flash lights',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_40_flash_lights',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[zoe_40][button.reg_zoe_40_sound_horn-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_40_sound_horn',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Sound horn',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Sound horn',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'sound_horn',
'unique_id': 'vf1zoe40vin_sound_horn',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[zoe_40][button.reg_zoe_40_sound_horn-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-40 Sound horn',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_40_sound_horn',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[zoe_40][button.reg_zoe_40_start_air_conditioner-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
@@ -1077,6 +1861,104 @@
'state': 'unknown',
})
# ---
# name: test_buttons[zoe_50][button.reg_zoe_50_flash_lights-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_50_flash_lights',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Flash lights',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Flash lights',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'flash_lights',
'unique_id': 'vf1zoe50vin_flash_lights',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[zoe_50][button.reg_zoe_50_flash_lights-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-50 Flash lights',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_50_flash_lights',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[zoe_50][button.reg_zoe_50_sound_horn-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'button',
'entity_category': None,
'entity_id': 'button.reg_zoe_50_sound_horn',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'object_id_base': 'Sound horn',
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Sound horn',
'platform': 'renault',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': 0,
'translation_key': 'sound_horn',
'unique_id': 'vf1zoe50vin_sound_horn',
'unit_of_measurement': None,
})
# ---
# name: test_buttons[zoe_50][button.reg_zoe_50_sound_horn-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'REG-ZOE-50 Sound horn',
}),
'context': <ANY>,
'entity_id': 'button.reg_zoe_50_sound_horn',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_buttons[zoe_50][button.reg_zoe_50_start_air_conditioner-entry]
EntityRegistryEntrySnapshot({
'aliases': set({

View File

@@ -182,3 +182,49 @@ async def test_button_start_air_conditioner(
)
assert len(mock_action.mock_calls) == 1
assert mock_action.mock_calls[0][1] == (21, None)
@pytest.mark.usefixtures("fixtures_with_data")
@pytest.mark.parametrize("vehicle_type", ["zoe_40"], indirect=True)
async def test_button_sound_horn(
hass: HomeAssistant, config_entry: ConfigEntry
) -> None:
"""Test that button invokes renault_api with correct data."""
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
data = {
ATTR_ENTITY_ID: "button.reg_zoe_40_sound_horn",
}
with patch(
"renault_api.renault_vehicle.RenaultVehicle.start_horn",
) as mock_action:
await hass.services.async_call(
BUTTON_DOMAIN, SERVICE_PRESS, service_data=data, blocking=True
)
assert len(mock_action.mock_calls) == 1
assert mock_action.mock_calls[0][1] == ()
@pytest.mark.usefixtures("fixtures_with_data")
@pytest.mark.parametrize("vehicle_type", ["zoe_40"], indirect=True)
async def test_button_flash_lights(
hass: HomeAssistant, config_entry: ConfigEntry
) -> None:
"""Test that button invokes renault_api with correct data."""
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
data = {
ATTR_ENTITY_ID: "button.reg_zoe_40_flash_lights",
}
with patch(
"renault_api.renault_vehicle.RenaultVehicle.start_lights",
) as mock_action:
await hass.services.async_call(
BUTTON_DOMAIN, SERVICE_PRESS, service_data=data, blocking=True
)
assert len(mock_action.mock_calls) == 1
assert mock_action.mock_calls[0][1] == ()