mirror of
https://github.com/home-assistant/core.git
synced 2025-08-01 09:38:21 +00:00
Add actions to Alexa Devices (#145645)
This commit is contained in:
parent
6c2a662838
commit
1a75a88c76
@ -2,9 +2,12 @@
|
|||||||
|
|
||||||
from homeassistant.const import Platform
|
from homeassistant.const import Platform
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import aiohttp_client
|
from homeassistant.helpers import aiohttp_client, config_validation as cv
|
||||||
|
from homeassistant.helpers.typing import ConfigType
|
||||||
|
|
||||||
|
from .const import DOMAIN
|
||||||
from .coordinator import AmazonConfigEntry, AmazonDevicesCoordinator
|
from .coordinator import AmazonConfigEntry, AmazonDevicesCoordinator
|
||||||
|
from .services import async_setup_services
|
||||||
|
|
||||||
PLATFORMS = [
|
PLATFORMS = [
|
||||||
Platform.BINARY_SENSOR,
|
Platform.BINARY_SENSOR,
|
||||||
@ -13,6 +16,14 @@ PLATFORMS = [
|
|||||||
Platform.SWITCH,
|
Platform.SWITCH,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
||||||
|
"""Set up the Alexa Devices component."""
|
||||||
|
async_setup_services(hass)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(hass: HomeAssistant, entry: AmazonConfigEntry) -> bool:
|
async def async_setup_entry(hass: HomeAssistant, entry: AmazonConfigEntry) -> bool:
|
||||||
"""Set up Alexa Devices platform."""
|
"""Set up Alexa Devices platform."""
|
||||||
|
@ -38,5 +38,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"services": {
|
||||||
|
"send_sound": {
|
||||||
|
"service": "mdi:cast-audio"
|
||||||
|
},
|
||||||
|
"send_text_command": {
|
||||||
|
"service": "mdi:microphone-message"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
121
homeassistant/components/alexa_devices/services.py
Normal file
121
homeassistant/components/alexa_devices/services.py
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
"""Support for services."""
|
||||||
|
|
||||||
|
from aioamazondevices.sounds import SOUNDS_LIST
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from homeassistant.config_entries import ConfigEntryState
|
||||||
|
from homeassistant.const import ATTR_DEVICE_ID
|
||||||
|
from homeassistant.core import HomeAssistant, ServiceCall, callback
|
||||||
|
from homeassistant.exceptions import ServiceValidationError
|
||||||
|
from homeassistant.helpers import config_validation as cv, device_registry as dr
|
||||||
|
|
||||||
|
from .const import DOMAIN
|
||||||
|
from .coordinator import AmazonConfigEntry
|
||||||
|
|
||||||
|
ATTR_TEXT_COMMAND = "text_command"
|
||||||
|
ATTR_SOUND = "sound"
|
||||||
|
ATTR_SOUND_VARIANT = "sound_variant"
|
||||||
|
SERVICE_TEXT_COMMAND = "send_text_command"
|
||||||
|
SERVICE_SOUND_NOTIFICATION = "send_sound"
|
||||||
|
|
||||||
|
SCHEMA_SOUND_SERVICE = vol.Schema(
|
||||||
|
{
|
||||||
|
vol.Required(ATTR_SOUND): cv.string,
|
||||||
|
vol.Required(ATTR_SOUND_VARIANT): cv.positive_int,
|
||||||
|
vol.Required(ATTR_DEVICE_ID): cv.string,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
SCHEMA_CUSTOM_COMMAND = vol.Schema(
|
||||||
|
{
|
||||||
|
vol.Required(ATTR_TEXT_COMMAND): cv.string,
|
||||||
|
vol.Required(ATTR_DEVICE_ID): cv.string,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def async_get_entry_id_for_service_call(
|
||||||
|
call: ServiceCall,
|
||||||
|
) -> tuple[dr.DeviceEntry, AmazonConfigEntry]:
|
||||||
|
"""Get the entry ID related to a service call (by device ID)."""
|
||||||
|
device_registry = dr.async_get(call.hass)
|
||||||
|
device_id = call.data[ATTR_DEVICE_ID]
|
||||||
|
if (device_entry := device_registry.async_get(device_id)) is None:
|
||||||
|
raise ServiceValidationError(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="invalid_device_id",
|
||||||
|
translation_placeholders={"device_id": device_id},
|
||||||
|
)
|
||||||
|
|
||||||
|
for entry_id in device_entry.config_entries:
|
||||||
|
if (entry := call.hass.config_entries.async_get_entry(entry_id)) is None:
|
||||||
|
continue
|
||||||
|
if entry.domain == DOMAIN:
|
||||||
|
if entry.state is not ConfigEntryState.LOADED:
|
||||||
|
raise ServiceValidationError(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="entry_not_loaded",
|
||||||
|
translation_placeholders={"entry": entry.title},
|
||||||
|
)
|
||||||
|
return (device_entry, entry)
|
||||||
|
|
||||||
|
raise ServiceValidationError(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="config_entry_not_found",
|
||||||
|
translation_placeholders={"device_id": device_id},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def _async_execute_action(call: ServiceCall, attribute: str) -> None:
|
||||||
|
"""Execute action on the device."""
|
||||||
|
device, config_entry = async_get_entry_id_for_service_call(call)
|
||||||
|
assert device.serial_number
|
||||||
|
value: str = call.data[attribute]
|
||||||
|
|
||||||
|
coordinator = config_entry.runtime_data
|
||||||
|
|
||||||
|
if attribute == ATTR_SOUND:
|
||||||
|
variant: int = call.data[ATTR_SOUND_VARIANT]
|
||||||
|
pad = "_" if variant > 10 else "_0"
|
||||||
|
file = f"{value}{pad}{variant!s}"
|
||||||
|
if value not in SOUNDS_LIST or variant > SOUNDS_LIST[value]:
|
||||||
|
raise ServiceValidationError(
|
||||||
|
translation_domain=DOMAIN,
|
||||||
|
translation_key="invalid_sound_value",
|
||||||
|
translation_placeholders={"sound": value, "variant": str(variant)},
|
||||||
|
)
|
||||||
|
await coordinator.api.call_alexa_sound(
|
||||||
|
coordinator.data[device.serial_number], file
|
||||||
|
)
|
||||||
|
elif attribute == ATTR_TEXT_COMMAND:
|
||||||
|
await coordinator.api.call_alexa_text_command(
|
||||||
|
coordinator.data[device.serial_number], value
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_send_sound_notification(call: ServiceCall) -> None:
|
||||||
|
"""Send a sound notification to a AmazonDevice."""
|
||||||
|
await _async_execute_action(call, ATTR_SOUND)
|
||||||
|
|
||||||
|
|
||||||
|
async def async_send_text_command(call: ServiceCall) -> None:
|
||||||
|
"""Send a custom command to a AmazonDevice."""
|
||||||
|
await _async_execute_action(call, ATTR_TEXT_COMMAND)
|
||||||
|
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def async_setup_services(hass: HomeAssistant) -> None:
|
||||||
|
"""Set up the services for the Amazon Devices integration."""
|
||||||
|
for service_name, method, schema in (
|
||||||
|
(
|
||||||
|
SERVICE_SOUND_NOTIFICATION,
|
||||||
|
async_send_sound_notification,
|
||||||
|
SCHEMA_SOUND_SERVICE,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
SERVICE_TEXT_COMMAND,
|
||||||
|
async_send_text_command,
|
||||||
|
SCHEMA_CUSTOM_COMMAND,
|
||||||
|
),
|
||||||
|
):
|
||||||
|
hass.services.async_register(DOMAIN, service_name, method, schema=schema)
|
504
homeassistant/components/alexa_devices/services.yaml
Normal file
504
homeassistant/components/alexa_devices/services.yaml
Normal file
@ -0,0 +1,504 @@
|
|||||||
|
send_text_command:
|
||||||
|
fields:
|
||||||
|
device_id:
|
||||||
|
required: true
|
||||||
|
selector:
|
||||||
|
device:
|
||||||
|
integration: alexa_devices
|
||||||
|
text_command:
|
||||||
|
required: true
|
||||||
|
example: "Play B.B.C. on TuneIn"
|
||||||
|
selector:
|
||||||
|
text:
|
||||||
|
|
||||||
|
send_sound:
|
||||||
|
fields:
|
||||||
|
device_id:
|
||||||
|
required: true
|
||||||
|
selector:
|
||||||
|
device:
|
||||||
|
integration: alexa_devices
|
||||||
|
sound_variant:
|
||||||
|
required: true
|
||||||
|
example: 1
|
||||||
|
default: 1
|
||||||
|
selector:
|
||||||
|
number:
|
||||||
|
min: 1
|
||||||
|
max: 50
|
||||||
|
sound:
|
||||||
|
required: true
|
||||||
|
example: amzn_sfx_doorbell_chime
|
||||||
|
default: amzn_sfx_doorbell_chime
|
||||||
|
selector:
|
||||||
|
select:
|
||||||
|
options:
|
||||||
|
- air_horn
|
||||||
|
- air_horns
|
||||||
|
- airboat
|
||||||
|
- airport
|
||||||
|
- aliens
|
||||||
|
- amzn_sfx_airplane_takeoff_whoosh
|
||||||
|
- amzn_sfx_army_march_clank_7x
|
||||||
|
- amzn_sfx_army_march_large_8x
|
||||||
|
- amzn_sfx_army_march_small_8x
|
||||||
|
- amzn_sfx_baby_big_cry
|
||||||
|
- amzn_sfx_baby_cry
|
||||||
|
- amzn_sfx_baby_fuss
|
||||||
|
- amzn_sfx_battle_group_clanks
|
||||||
|
- amzn_sfx_battle_man_grunts
|
||||||
|
- amzn_sfx_battle_men_grunts
|
||||||
|
- amzn_sfx_battle_men_horses
|
||||||
|
- amzn_sfx_battle_noisy_clanks
|
||||||
|
- amzn_sfx_battle_yells_men
|
||||||
|
- amzn_sfx_battle_yells_men_run
|
||||||
|
- amzn_sfx_bear_groan_roar
|
||||||
|
- amzn_sfx_bear_roar_grumble
|
||||||
|
- amzn_sfx_bear_roar_small
|
||||||
|
- amzn_sfx_beep_1x
|
||||||
|
- amzn_sfx_bell_med_chime
|
||||||
|
- amzn_sfx_bell_short_chime
|
||||||
|
- amzn_sfx_bell_timer
|
||||||
|
- amzn_sfx_bicycle_bell_ring
|
||||||
|
- amzn_sfx_bird_chickadee_chirp_1x
|
||||||
|
- amzn_sfx_bird_chickadee_chirps
|
||||||
|
- amzn_sfx_bird_forest
|
||||||
|
- amzn_sfx_bird_forest_short
|
||||||
|
- amzn_sfx_bird_robin_chirp_1x
|
||||||
|
- amzn_sfx_boing_long_1x
|
||||||
|
- amzn_sfx_boing_med_1x
|
||||||
|
- amzn_sfx_boing_short_1x
|
||||||
|
- amzn_sfx_bus_drive_past
|
||||||
|
- amzn_sfx_buzz_electronic
|
||||||
|
- amzn_sfx_buzzer_loud_alarm
|
||||||
|
- amzn_sfx_buzzer_small
|
||||||
|
- amzn_sfx_car_accelerate
|
||||||
|
- amzn_sfx_car_accelerate_noisy
|
||||||
|
- amzn_sfx_car_click_seatbelt
|
||||||
|
- amzn_sfx_car_close_door_1x
|
||||||
|
- amzn_sfx_car_drive_past
|
||||||
|
- amzn_sfx_car_honk_1x
|
||||||
|
- amzn_sfx_car_honk_2x
|
||||||
|
- amzn_sfx_car_honk_3x
|
||||||
|
- amzn_sfx_car_honk_long_1x
|
||||||
|
- amzn_sfx_car_into_driveway
|
||||||
|
- amzn_sfx_car_into_driveway_fast
|
||||||
|
- amzn_sfx_car_slam_door_1x
|
||||||
|
- amzn_sfx_car_undo_seatbelt
|
||||||
|
- amzn_sfx_cat_angry_meow_1x
|
||||||
|
- amzn_sfx_cat_angry_screech_1x
|
||||||
|
- amzn_sfx_cat_long_meow_1x
|
||||||
|
- amzn_sfx_cat_meow_1x
|
||||||
|
- amzn_sfx_cat_purr
|
||||||
|
- amzn_sfx_cat_purr_meow
|
||||||
|
- amzn_sfx_chicken_cluck
|
||||||
|
- amzn_sfx_church_bell_1x
|
||||||
|
- amzn_sfx_church_bells_ringing
|
||||||
|
- amzn_sfx_clear_throat_ahem
|
||||||
|
- amzn_sfx_clock_ticking
|
||||||
|
- amzn_sfx_clock_ticking_long
|
||||||
|
- amzn_sfx_copy_machine
|
||||||
|
- amzn_sfx_cough
|
||||||
|
- amzn_sfx_crow_caw_1x
|
||||||
|
- amzn_sfx_crowd_applause
|
||||||
|
- amzn_sfx_crowd_bar
|
||||||
|
- amzn_sfx_crowd_bar_rowdy
|
||||||
|
- amzn_sfx_crowd_boo
|
||||||
|
- amzn_sfx_crowd_cheer_med
|
||||||
|
- amzn_sfx_crowd_excited_cheer
|
||||||
|
- amzn_sfx_dog_med_bark_1x
|
||||||
|
- amzn_sfx_dog_med_bark_2x
|
||||||
|
- amzn_sfx_dog_med_bark_growl
|
||||||
|
- amzn_sfx_dog_med_growl_1x
|
||||||
|
- amzn_sfx_dog_med_woof_1x
|
||||||
|
- amzn_sfx_dog_small_bark_2x
|
||||||
|
- amzn_sfx_door_open
|
||||||
|
- amzn_sfx_door_shut
|
||||||
|
- amzn_sfx_doorbell
|
||||||
|
- amzn_sfx_doorbell_buzz
|
||||||
|
- amzn_sfx_doorbell_chime
|
||||||
|
- amzn_sfx_drinking_slurp
|
||||||
|
- amzn_sfx_drum_and_cymbal
|
||||||
|
- amzn_sfx_drum_comedy
|
||||||
|
- amzn_sfx_earthquake_rumble
|
||||||
|
- amzn_sfx_electric_guitar
|
||||||
|
- amzn_sfx_electronic_beep
|
||||||
|
- amzn_sfx_electronic_major_chord
|
||||||
|
- amzn_sfx_elephant
|
||||||
|
- amzn_sfx_elevator_bell_1x
|
||||||
|
- amzn_sfx_elevator_open_bell
|
||||||
|
- amzn_sfx_fairy_melodic_chimes
|
||||||
|
- amzn_sfx_fairy_sparkle_chimes
|
||||||
|
- amzn_sfx_faucet_drip
|
||||||
|
- amzn_sfx_faucet_running
|
||||||
|
- amzn_sfx_fireplace_crackle
|
||||||
|
- amzn_sfx_fireworks
|
||||||
|
- amzn_sfx_fireworks_firecrackers
|
||||||
|
- amzn_sfx_fireworks_launch
|
||||||
|
- amzn_sfx_fireworks_whistles
|
||||||
|
- amzn_sfx_food_frying
|
||||||
|
- amzn_sfx_footsteps
|
||||||
|
- amzn_sfx_footsteps_muffled
|
||||||
|
- amzn_sfx_ghost_spooky
|
||||||
|
- amzn_sfx_glass_on_table
|
||||||
|
- amzn_sfx_glasses_clink
|
||||||
|
- amzn_sfx_horse_gallop_4x
|
||||||
|
- amzn_sfx_horse_huff_whinny
|
||||||
|
- amzn_sfx_horse_neigh
|
||||||
|
- amzn_sfx_horse_neigh_low
|
||||||
|
- amzn_sfx_horse_whinny
|
||||||
|
- amzn_sfx_human_walking
|
||||||
|
- amzn_sfx_jar_on_table_1x
|
||||||
|
- amzn_sfx_kitchen_ambience
|
||||||
|
- amzn_sfx_large_crowd_cheer
|
||||||
|
- amzn_sfx_large_fire_crackling
|
||||||
|
- amzn_sfx_laughter
|
||||||
|
- amzn_sfx_laughter_giggle
|
||||||
|
- amzn_sfx_lightning_strike
|
||||||
|
- amzn_sfx_lion_roar
|
||||||
|
- amzn_sfx_magic_blast_1x
|
||||||
|
- amzn_sfx_monkey_calls_3x
|
||||||
|
- amzn_sfx_monkey_chimp
|
||||||
|
- amzn_sfx_monkeys_chatter
|
||||||
|
- amzn_sfx_motorcycle_accelerate
|
||||||
|
- amzn_sfx_motorcycle_engine_idle
|
||||||
|
- amzn_sfx_motorcycle_engine_rev
|
||||||
|
- amzn_sfx_musical_drone_intro
|
||||||
|
- amzn_sfx_oars_splashing_rowboat
|
||||||
|
- amzn_sfx_object_on_table_2x
|
||||||
|
- amzn_sfx_ocean_wave_1x
|
||||||
|
- amzn_sfx_ocean_wave_on_rocks_1x
|
||||||
|
- amzn_sfx_ocean_wave_surf
|
||||||
|
- amzn_sfx_people_walking
|
||||||
|
- amzn_sfx_person_running
|
||||||
|
- amzn_sfx_piano_note_1x
|
||||||
|
- amzn_sfx_punch
|
||||||
|
- amzn_sfx_rain
|
||||||
|
- amzn_sfx_rain_on_roof
|
||||||
|
- amzn_sfx_rain_thunder
|
||||||
|
- amzn_sfx_rat_squeak_2x
|
||||||
|
- amzn_sfx_rat_squeaks
|
||||||
|
- amzn_sfx_raven_caw_1x
|
||||||
|
- amzn_sfx_raven_caw_2x
|
||||||
|
- amzn_sfx_restaurant_ambience
|
||||||
|
- amzn_sfx_rooster_crow
|
||||||
|
- amzn_sfx_scifi_air_escaping
|
||||||
|
- amzn_sfx_scifi_alarm
|
||||||
|
- amzn_sfx_scifi_alien_voice
|
||||||
|
- amzn_sfx_scifi_boots_walking
|
||||||
|
- amzn_sfx_scifi_close_large_explosion
|
||||||
|
- amzn_sfx_scifi_door_open
|
||||||
|
- amzn_sfx_scifi_engines_on
|
||||||
|
- amzn_sfx_scifi_engines_on_large
|
||||||
|
- amzn_sfx_scifi_engines_on_short_burst
|
||||||
|
- amzn_sfx_scifi_explosion
|
||||||
|
- amzn_sfx_scifi_explosion_2x
|
||||||
|
- amzn_sfx_scifi_incoming_explosion
|
||||||
|
- amzn_sfx_scifi_laser_gun_battle
|
||||||
|
- amzn_sfx_scifi_laser_gun_fires
|
||||||
|
- amzn_sfx_scifi_laser_gun_fires_large
|
||||||
|
- amzn_sfx_scifi_long_explosion_1x
|
||||||
|
- amzn_sfx_scifi_missile
|
||||||
|
- amzn_sfx_scifi_motor_short_1x
|
||||||
|
- amzn_sfx_scifi_open_airlock
|
||||||
|
- amzn_sfx_scifi_radar_high_ping
|
||||||
|
- amzn_sfx_scifi_radar_low
|
||||||
|
- amzn_sfx_scifi_radar_medium
|
||||||
|
- amzn_sfx_scifi_run_away
|
||||||
|
- amzn_sfx_scifi_sheilds_up
|
||||||
|
- amzn_sfx_scifi_short_low_explosion
|
||||||
|
- amzn_sfx_scifi_small_whoosh_flyby
|
||||||
|
- amzn_sfx_scifi_small_zoom_flyby
|
||||||
|
- amzn_sfx_scifi_sonar_ping_3x
|
||||||
|
- amzn_sfx_scifi_sonar_ping_4x
|
||||||
|
- amzn_sfx_scifi_spaceship_flyby
|
||||||
|
- amzn_sfx_scifi_timer_beep
|
||||||
|
- amzn_sfx_scifi_zap_backwards
|
||||||
|
- amzn_sfx_scifi_zap_electric
|
||||||
|
- amzn_sfx_sheep_baa
|
||||||
|
- amzn_sfx_sheep_bleat
|
||||||
|
- amzn_sfx_silverware_clank
|
||||||
|
- amzn_sfx_sirens
|
||||||
|
- amzn_sfx_sleigh_bells
|
||||||
|
- amzn_sfx_small_stream
|
||||||
|
- amzn_sfx_sneeze
|
||||||
|
- amzn_sfx_stream
|
||||||
|
- amzn_sfx_strong_wind_desert
|
||||||
|
- amzn_sfx_strong_wind_whistling
|
||||||
|
- amzn_sfx_subway_leaving
|
||||||
|
- amzn_sfx_subway_passing
|
||||||
|
- amzn_sfx_subway_stopping
|
||||||
|
- amzn_sfx_swoosh_cartoon_fast
|
||||||
|
- amzn_sfx_swoosh_fast_1x
|
||||||
|
- amzn_sfx_swoosh_fast_6x
|
||||||
|
- amzn_sfx_test_tone
|
||||||
|
- amzn_sfx_thunder_rumble
|
||||||
|
- amzn_sfx_toilet_flush
|
||||||
|
- amzn_sfx_trumpet_bugle
|
||||||
|
- amzn_sfx_turkey_gobbling
|
||||||
|
- amzn_sfx_typing_medium
|
||||||
|
- amzn_sfx_typing_short
|
||||||
|
- amzn_sfx_typing_typewriter
|
||||||
|
- amzn_sfx_vacuum_off
|
||||||
|
- amzn_sfx_vacuum_on
|
||||||
|
- amzn_sfx_walking_in_mud
|
||||||
|
- amzn_sfx_walking_in_snow
|
||||||
|
- amzn_sfx_walking_on_grass
|
||||||
|
- amzn_sfx_water_dripping
|
||||||
|
- amzn_sfx_water_droplets
|
||||||
|
- amzn_sfx_wind_strong_gusting
|
||||||
|
- amzn_sfx_wind_whistling_desert
|
||||||
|
- amzn_sfx_wings_flap_4x
|
||||||
|
- amzn_sfx_wings_flap_fast
|
||||||
|
- amzn_sfx_wolf_howl
|
||||||
|
- amzn_sfx_wolf_young_howl
|
||||||
|
- amzn_sfx_wooden_door
|
||||||
|
- amzn_sfx_wooden_door_creaks_long
|
||||||
|
- amzn_sfx_wooden_door_creaks_multiple
|
||||||
|
- amzn_sfx_wooden_door_creaks_open
|
||||||
|
- amzn_ui_sfx_gameshow_bridge
|
||||||
|
- amzn_ui_sfx_gameshow_countdown_loop_32s_full
|
||||||
|
- amzn_ui_sfx_gameshow_countdown_loop_64s_full
|
||||||
|
- amzn_ui_sfx_gameshow_countdown_loop_64s_minimal
|
||||||
|
- amzn_ui_sfx_gameshow_intro
|
||||||
|
- amzn_ui_sfx_gameshow_negative_response
|
||||||
|
- amzn_ui_sfx_gameshow_neutral_response
|
||||||
|
- amzn_ui_sfx_gameshow_outro
|
||||||
|
- amzn_ui_sfx_gameshow_player1
|
||||||
|
- amzn_ui_sfx_gameshow_player2
|
||||||
|
- amzn_ui_sfx_gameshow_player3
|
||||||
|
- amzn_ui_sfx_gameshow_player4
|
||||||
|
- amzn_ui_sfx_gameshow_positive_response
|
||||||
|
- amzn_ui_sfx_gameshow_tally_negative
|
||||||
|
- amzn_ui_sfx_gameshow_tally_positive
|
||||||
|
- amzn_ui_sfx_gameshow_waiting_loop_30s
|
||||||
|
- anchor
|
||||||
|
- answering_machines
|
||||||
|
- arcs_sparks
|
||||||
|
- arrows_bows
|
||||||
|
- baby
|
||||||
|
- back_up_beeps
|
||||||
|
- bars_restaurants
|
||||||
|
- baseball
|
||||||
|
- basketball
|
||||||
|
- battles
|
||||||
|
- beeps_tones
|
||||||
|
- bell
|
||||||
|
- bikes
|
||||||
|
- billiards
|
||||||
|
- board_games
|
||||||
|
- body
|
||||||
|
- boing
|
||||||
|
- books
|
||||||
|
- bow_wash
|
||||||
|
- box
|
||||||
|
- break_shatter_smash
|
||||||
|
- breaks
|
||||||
|
- brooms_mops
|
||||||
|
- bullets
|
||||||
|
- buses
|
||||||
|
- buzz
|
||||||
|
- buzz_hums
|
||||||
|
- buzzers
|
||||||
|
- buzzers_pistols
|
||||||
|
- cables_metal
|
||||||
|
- camera
|
||||||
|
- cannons
|
||||||
|
- car_alarm
|
||||||
|
- car_alarms
|
||||||
|
- car_cell_phones
|
||||||
|
- carnivals_fairs
|
||||||
|
- cars
|
||||||
|
- casino
|
||||||
|
- casinos
|
||||||
|
- cellar
|
||||||
|
- chimes
|
||||||
|
- chimes_bells
|
||||||
|
- chorus
|
||||||
|
- christmas
|
||||||
|
- church_bells
|
||||||
|
- clock
|
||||||
|
- cloth
|
||||||
|
- concrete
|
||||||
|
- construction
|
||||||
|
- construction_factory
|
||||||
|
- crashes
|
||||||
|
- crowds
|
||||||
|
- debris
|
||||||
|
- dining_kitchens
|
||||||
|
- dinosaurs
|
||||||
|
- dripping
|
||||||
|
- drops
|
||||||
|
- electric
|
||||||
|
- electrical
|
||||||
|
- elevator
|
||||||
|
- evolution_monsters
|
||||||
|
- explosions
|
||||||
|
- factory
|
||||||
|
- falls
|
||||||
|
- fax_scanner_copier
|
||||||
|
- feedback_mics
|
||||||
|
- fight
|
||||||
|
- fire
|
||||||
|
- fire_extinguisher
|
||||||
|
- fireballs
|
||||||
|
- fireworks
|
||||||
|
- fishing_pole
|
||||||
|
- flags
|
||||||
|
- football
|
||||||
|
- footsteps
|
||||||
|
- futuristic
|
||||||
|
- futuristic_ship
|
||||||
|
- gameshow
|
||||||
|
- gear
|
||||||
|
- ghosts_demons
|
||||||
|
- giant_monster
|
||||||
|
- glass
|
||||||
|
- glasses_clink
|
||||||
|
- golf
|
||||||
|
- gorilla
|
||||||
|
- grenade_lanucher
|
||||||
|
- griffen
|
||||||
|
- gyms_locker_rooms
|
||||||
|
- handgun_loading
|
||||||
|
- handgun_shot
|
||||||
|
- handle
|
||||||
|
- hands
|
||||||
|
- heartbeats_ekg
|
||||||
|
- helicopter
|
||||||
|
- high_tech
|
||||||
|
- hit_punch_slap
|
||||||
|
- hits
|
||||||
|
- horns
|
||||||
|
- horror
|
||||||
|
- hot_tub_filling_up
|
||||||
|
- human
|
||||||
|
- human_vocals
|
||||||
|
- hygene # codespell:ignore
|
||||||
|
- ice_skating
|
||||||
|
- ignitions
|
||||||
|
- infantry
|
||||||
|
- intro
|
||||||
|
- jet
|
||||||
|
- juggling
|
||||||
|
- key_lock
|
||||||
|
- kids
|
||||||
|
- knocks
|
||||||
|
- lab_equip
|
||||||
|
- lacrosse
|
||||||
|
- lamps_lanterns
|
||||||
|
- leather
|
||||||
|
- liquid_suction
|
||||||
|
- locker_doors
|
||||||
|
- machine_gun
|
||||||
|
- magic_spells
|
||||||
|
- medium_large_explosions
|
||||||
|
- metal
|
||||||
|
- modern_rings
|
||||||
|
- money_coins
|
||||||
|
- motorcycles
|
||||||
|
- movement
|
||||||
|
- moves
|
||||||
|
- nature
|
||||||
|
- oar_boat
|
||||||
|
- pagers
|
||||||
|
- paintball
|
||||||
|
- paper
|
||||||
|
- parachute
|
||||||
|
- pay_phones
|
||||||
|
- phone_beeps
|
||||||
|
- pigmy_bats
|
||||||
|
- pills
|
||||||
|
- pour_water
|
||||||
|
- power_up_down
|
||||||
|
- printers
|
||||||
|
- prison
|
||||||
|
- public_space
|
||||||
|
- racquetball
|
||||||
|
- radios_static
|
||||||
|
- rain
|
||||||
|
- rc_airplane
|
||||||
|
- rc_car
|
||||||
|
- refrigerators_freezers
|
||||||
|
- regular
|
||||||
|
- respirator
|
||||||
|
- rifle
|
||||||
|
- roller_coaster
|
||||||
|
- rollerskates_rollerblades
|
||||||
|
- room_tones
|
||||||
|
- ropes_climbing
|
||||||
|
- rotary_rings
|
||||||
|
- rowboat_canoe
|
||||||
|
- rubber
|
||||||
|
- running
|
||||||
|
- sails
|
||||||
|
- sand_gravel
|
||||||
|
- screen_doors
|
||||||
|
- screens
|
||||||
|
- seats_stools
|
||||||
|
- servos
|
||||||
|
- shoes_boots
|
||||||
|
- shotgun
|
||||||
|
- shower
|
||||||
|
- sink_faucet
|
||||||
|
- sink_filling_water
|
||||||
|
- sink_run_and_off
|
||||||
|
- sink_water_splatter
|
||||||
|
- sirens
|
||||||
|
- skateboards
|
||||||
|
- ski
|
||||||
|
- skids_tires
|
||||||
|
- sled
|
||||||
|
- slides
|
||||||
|
- small_explosions
|
||||||
|
- snow
|
||||||
|
- snowmobile
|
||||||
|
- soldiers
|
||||||
|
- splash_water
|
||||||
|
- splashes_sprays
|
||||||
|
- sports_whistles
|
||||||
|
- squeaks
|
||||||
|
- squeaky
|
||||||
|
- stairs
|
||||||
|
- steam
|
||||||
|
- submarine_diesel
|
||||||
|
- swing_doors
|
||||||
|
- switches_levers
|
||||||
|
- swords
|
||||||
|
- tape
|
||||||
|
- tape_machine
|
||||||
|
- televisions_shows
|
||||||
|
- tennis_pingpong
|
||||||
|
- textile
|
||||||
|
- throw
|
||||||
|
- thunder
|
||||||
|
- ticks
|
||||||
|
- timer
|
||||||
|
- toilet_flush
|
||||||
|
- tone
|
||||||
|
- tones_noises
|
||||||
|
- toys
|
||||||
|
- tractors
|
||||||
|
- traffic
|
||||||
|
- train
|
||||||
|
- trucks_vans
|
||||||
|
- turnstiles
|
||||||
|
- typing
|
||||||
|
- umbrella
|
||||||
|
- underwater
|
||||||
|
- vampires
|
||||||
|
- various
|
||||||
|
- video_tunes
|
||||||
|
- volcano_earthquake
|
||||||
|
- watches
|
||||||
|
- water
|
||||||
|
- water_running
|
||||||
|
- werewolves
|
||||||
|
- winches_gears
|
||||||
|
- wind
|
||||||
|
- wood
|
||||||
|
- wood_boat
|
||||||
|
- woosh
|
||||||
|
- zap
|
||||||
|
- zippers
|
||||||
|
translation_key: sound
|
@ -4,7 +4,8 @@
|
|||||||
"data_description_country": "The country where your Amazon account is registered.",
|
"data_description_country": "The country where your Amazon account is registered.",
|
||||||
"data_description_username": "The email address of your Amazon account.",
|
"data_description_username": "The email address of your Amazon account.",
|
||||||
"data_description_password": "The password of your Amazon account.",
|
"data_description_password": "The password of your Amazon account.",
|
||||||
"data_description_code": "The one-time password to log in to your account. Currently, only tokens from OTP applications are supported."
|
"data_description_code": "The one-time password to log in to your account. Currently, only tokens from OTP applications are supported.",
|
||||||
|
"device_id_description": "The ID of the device to send the command to."
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"flow_title": "{username}",
|
"flow_title": "{username}",
|
||||||
@ -84,12 +85,532 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"services": {
|
||||||
|
"send_sound": {
|
||||||
|
"name": "Send sound",
|
||||||
|
"description": "Sends a sound to a device",
|
||||||
|
"fields": {
|
||||||
|
"device_id": {
|
||||||
|
"name": "Device",
|
||||||
|
"description": "[%key:component::alexa_devices::common::device_id_description%]"
|
||||||
|
},
|
||||||
|
"sound": {
|
||||||
|
"name": "Alexa Skill sound file",
|
||||||
|
"description": "The sound file to play."
|
||||||
|
},
|
||||||
|
"sound_variant": {
|
||||||
|
"name": "Sound variant",
|
||||||
|
"description": "The variant of the sound to play."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"send_text_command": {
|
||||||
|
"name": "Send text command",
|
||||||
|
"description": "Sends a text command to a device",
|
||||||
|
"fields": {
|
||||||
|
"text_command": {
|
||||||
|
"name": "Alexa text command",
|
||||||
|
"description": "The text command to send."
|
||||||
|
},
|
||||||
|
"device_id": {
|
||||||
|
"name": "Device",
|
||||||
|
"description": "[%key:component::alexa_devices::common::device_id_description%]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"selector": {
|
||||||
|
"sound": {
|
||||||
|
"options": {
|
||||||
|
"air_horn": "Air Horn",
|
||||||
|
"air_horns": "Air Horns",
|
||||||
|
"airboat": "Airboat",
|
||||||
|
"airport": "Airport",
|
||||||
|
"aliens": "Aliens",
|
||||||
|
"amzn_sfx_airplane_takeoff_whoosh": "Airplane Takeoff Whoosh",
|
||||||
|
"amzn_sfx_army_march_clank_7x": "Army March Clank 7x",
|
||||||
|
"amzn_sfx_army_march_large_8x": "Army March Large 8x",
|
||||||
|
"amzn_sfx_army_march_small_8x": "Army March Small 8x",
|
||||||
|
"amzn_sfx_baby_big_cry": "Baby Big Cry",
|
||||||
|
"amzn_sfx_baby_cry": "Baby Cry",
|
||||||
|
"amzn_sfx_baby_fuss": "Baby Fuss",
|
||||||
|
"amzn_sfx_battle_group_clanks": "Battle Group Clanks",
|
||||||
|
"amzn_sfx_battle_man_grunts": "Battle Man Grunts",
|
||||||
|
"amzn_sfx_battle_men_grunts": "Battle Men Grunts",
|
||||||
|
"amzn_sfx_battle_men_horses": "Battle Men Horses",
|
||||||
|
"amzn_sfx_battle_noisy_clanks": "Battle Noisy Clanks",
|
||||||
|
"amzn_sfx_battle_yells_men": "Battle Yells Men",
|
||||||
|
"amzn_sfx_battle_yells_men_run": "Battle Yells Men Run",
|
||||||
|
"amzn_sfx_bear_groan_roar": "Bear Groan Roar",
|
||||||
|
"amzn_sfx_bear_roar_grumble": "Bear Roar Grumble",
|
||||||
|
"amzn_sfx_bear_roar_small": "Bear Roar Small",
|
||||||
|
"amzn_sfx_beep_1x": "Beep 1x",
|
||||||
|
"amzn_sfx_bell_med_chime": "Bell Med Chime",
|
||||||
|
"amzn_sfx_bell_short_chime": "Bell Short Chime",
|
||||||
|
"amzn_sfx_bell_timer": "Bell Timer",
|
||||||
|
"amzn_sfx_bicycle_bell_ring": "Bicycle Bell Ring",
|
||||||
|
"amzn_sfx_bird_chickadee_chirp_1x": "Bird Chickadee Chirp 1x",
|
||||||
|
"amzn_sfx_bird_chickadee_chirps": "Bird Chickadee Chirps",
|
||||||
|
"amzn_sfx_bird_forest": "Bird Forest",
|
||||||
|
"amzn_sfx_bird_forest_short": "Bird Forest Short",
|
||||||
|
"amzn_sfx_bird_robin_chirp_1x": "Bird Robin Chirp 1x",
|
||||||
|
"amzn_sfx_boing_long_1x": "Boing Long 1x",
|
||||||
|
"amzn_sfx_boing_med_1x": "Boing Med 1x",
|
||||||
|
"amzn_sfx_boing_short_1x": "Boing Short 1x",
|
||||||
|
"amzn_sfx_bus_drive_past": "Bus Drive Past",
|
||||||
|
"amzn_sfx_buzz_electronic": "Buzz Electronic",
|
||||||
|
"amzn_sfx_buzzer_loud_alarm": "Buzzer Loud Alarm",
|
||||||
|
"amzn_sfx_buzzer_small": "Buzzer Small",
|
||||||
|
"amzn_sfx_car_accelerate": "Car Accelerate",
|
||||||
|
"amzn_sfx_car_accelerate_noisy": "Car Accelerate Noisy",
|
||||||
|
"amzn_sfx_car_click_seatbelt": "Car Click Seatbelt",
|
||||||
|
"amzn_sfx_car_close_door_1x": "Car Close Door 1x",
|
||||||
|
"amzn_sfx_car_drive_past": "Car Drive Past",
|
||||||
|
"amzn_sfx_car_honk_1x": "Car Honk 1x",
|
||||||
|
"amzn_sfx_car_honk_2x": "Car Honk 2x",
|
||||||
|
"amzn_sfx_car_honk_3x": "Car Honk 3x",
|
||||||
|
"amzn_sfx_car_honk_long_1x": "Car Honk Long 1x",
|
||||||
|
"amzn_sfx_car_into_driveway": "Car Into Driveway",
|
||||||
|
"amzn_sfx_car_into_driveway_fast": "Car Into Driveway Fast",
|
||||||
|
"amzn_sfx_car_slam_door_1x": "Car Slam Door 1x",
|
||||||
|
"amzn_sfx_car_undo_seatbelt": "Car Undo Seatbelt",
|
||||||
|
"amzn_sfx_cat_angry_meow_1x": "Cat Angry Meow 1x",
|
||||||
|
"amzn_sfx_cat_angry_screech_1x": "Cat Angry Screech 1x",
|
||||||
|
"amzn_sfx_cat_long_meow_1x": "Cat Long Meow 1x",
|
||||||
|
"amzn_sfx_cat_meow_1x": "Cat Meow 1x",
|
||||||
|
"amzn_sfx_cat_purr": "Cat Purr",
|
||||||
|
"amzn_sfx_cat_purr_meow": "Cat Purr Meow",
|
||||||
|
"amzn_sfx_chicken_cluck": "Chicken Cluck",
|
||||||
|
"amzn_sfx_church_bell_1x": "Church Bell 1x",
|
||||||
|
"amzn_sfx_church_bells_ringing": "Church Bells Ringing",
|
||||||
|
"amzn_sfx_clear_throat_ahem": "Clear Throat Ahem",
|
||||||
|
"amzn_sfx_clock_ticking": "Clock Ticking",
|
||||||
|
"amzn_sfx_clock_ticking_long": "Clock Ticking Long",
|
||||||
|
"amzn_sfx_copy_machine": "Copy Machine",
|
||||||
|
"amzn_sfx_cough": "Cough",
|
||||||
|
"amzn_sfx_crow_caw_1x": "Crow Caw 1x",
|
||||||
|
"amzn_sfx_crowd_applause": "Crowd Applause",
|
||||||
|
"amzn_sfx_crowd_bar": "Crowd Bar",
|
||||||
|
"amzn_sfx_crowd_bar_rowdy": "Crowd Bar Rowdy",
|
||||||
|
"amzn_sfx_crowd_boo": "Crowd Boo",
|
||||||
|
"amzn_sfx_crowd_cheer_med": "Crowd Cheer Med",
|
||||||
|
"amzn_sfx_crowd_excited_cheer": "Crowd Excited Cheer",
|
||||||
|
"amzn_sfx_dog_med_bark_1x": "Dog Med Bark 1x",
|
||||||
|
"amzn_sfx_dog_med_bark_2x": "Dog Med Bark 2x",
|
||||||
|
"amzn_sfx_dog_med_bark_growl": "Dog Med Bark Growl",
|
||||||
|
"amzn_sfx_dog_med_growl_1x": "Dog Med Growl 1x",
|
||||||
|
"amzn_sfx_dog_med_woof_1x": "Dog Med Woof 1x",
|
||||||
|
"amzn_sfx_dog_small_bark_2x": "Dog Small Bark 2x",
|
||||||
|
"amzn_sfx_door_open": "Door Open",
|
||||||
|
"amzn_sfx_door_shut": "Door Shut",
|
||||||
|
"amzn_sfx_doorbell": "Doorbell",
|
||||||
|
"amzn_sfx_doorbell_buzz": "Doorbell Buzz",
|
||||||
|
"amzn_sfx_doorbell_chime": "Doorbell Chime",
|
||||||
|
"amzn_sfx_drinking_slurp": "Drinking Slurp",
|
||||||
|
"amzn_sfx_drum_and_cymbal": "Drum And Cymbal",
|
||||||
|
"amzn_sfx_drum_comedy": "Drum Comedy",
|
||||||
|
"amzn_sfx_earthquake_rumble": "Earthquake Rumble",
|
||||||
|
"amzn_sfx_electric_guitar": "Electric Guitar",
|
||||||
|
"amzn_sfx_electronic_beep": "Electronic Beep",
|
||||||
|
"amzn_sfx_electronic_major_chord": "Electronic Major Chord",
|
||||||
|
"amzn_sfx_elephant": "Elephant",
|
||||||
|
"amzn_sfx_elevator_bell_1x": "Elevator Bell 1x",
|
||||||
|
"amzn_sfx_elevator_open_bell": "Elevator Open Bell",
|
||||||
|
"amzn_sfx_fairy_melodic_chimes": "Fairy Melodic Chimes",
|
||||||
|
"amzn_sfx_fairy_sparkle_chimes": "Fairy Sparkle Chimes",
|
||||||
|
"amzn_sfx_faucet_drip": "Faucet Drip",
|
||||||
|
"amzn_sfx_faucet_running": "Faucet Running",
|
||||||
|
"amzn_sfx_fireplace_crackle": "Fireplace Crackle",
|
||||||
|
"amzn_sfx_fireworks": "Fireworks",
|
||||||
|
"amzn_sfx_fireworks_firecrackers": "Fireworks Firecrackers",
|
||||||
|
"amzn_sfx_fireworks_launch": "Fireworks Launch",
|
||||||
|
"amzn_sfx_fireworks_whistles": "Fireworks Whistles",
|
||||||
|
"amzn_sfx_food_frying": "Food Frying",
|
||||||
|
"amzn_sfx_footsteps": "Footsteps",
|
||||||
|
"amzn_sfx_footsteps_muffled": "Footsteps Muffled",
|
||||||
|
"amzn_sfx_ghost_spooky": "Ghost Spooky",
|
||||||
|
"amzn_sfx_glass_on_table": "Glass On Table",
|
||||||
|
"amzn_sfx_glasses_clink": "Glasses Clink",
|
||||||
|
"amzn_sfx_horse_gallop_4x": "Horse Gallop 4x",
|
||||||
|
"amzn_sfx_horse_huff_whinny": "Horse Huff Whinny",
|
||||||
|
"amzn_sfx_horse_neigh": "Horse Neigh",
|
||||||
|
"amzn_sfx_horse_neigh_low": "Horse Neigh Low",
|
||||||
|
"amzn_sfx_horse_whinny": "Horse Whinny",
|
||||||
|
"amzn_sfx_human_walking": "Human Walking",
|
||||||
|
"amzn_sfx_jar_on_table_1x": "Jar On Table 1x",
|
||||||
|
"amzn_sfx_kitchen_ambience": "Kitchen Ambience",
|
||||||
|
"amzn_sfx_large_crowd_cheer": "Large Crowd Cheer",
|
||||||
|
"amzn_sfx_large_fire_crackling": "Large Fire Crackling",
|
||||||
|
"amzn_sfx_laughter": "Laughter",
|
||||||
|
"amzn_sfx_laughter_giggle": "Laughter Giggle",
|
||||||
|
"amzn_sfx_lightning_strike": "Lightning Strike",
|
||||||
|
"amzn_sfx_lion_roar": "Lion Roar",
|
||||||
|
"amzn_sfx_magic_blast_1x": "Magic Blast 1x",
|
||||||
|
"amzn_sfx_monkey_calls_3x": "Monkey Calls 3x",
|
||||||
|
"amzn_sfx_monkey_chimp": "Monkey Chimp",
|
||||||
|
"amzn_sfx_monkeys_chatter": "Monkeys Chatter",
|
||||||
|
"amzn_sfx_motorcycle_accelerate": "Motorcycle Accelerate",
|
||||||
|
"amzn_sfx_motorcycle_engine_idle": "Motorcycle Engine Idle",
|
||||||
|
"amzn_sfx_motorcycle_engine_rev": "Motorcycle Engine Rev",
|
||||||
|
"amzn_sfx_musical_drone_intro": "Musical Drone Intro",
|
||||||
|
"amzn_sfx_oars_splashing_rowboat": "Oars Splashing Rowboat",
|
||||||
|
"amzn_sfx_object_on_table_2x": "Object On Table 2x",
|
||||||
|
"amzn_sfx_ocean_wave_1x": "Ocean Wave 1x",
|
||||||
|
"amzn_sfx_ocean_wave_on_rocks_1x": "Ocean Wave On Rocks 1x",
|
||||||
|
"amzn_sfx_ocean_wave_surf": "Ocean Wave Surf",
|
||||||
|
"amzn_sfx_people_walking": "People Walking",
|
||||||
|
"amzn_sfx_person_running": "Person Running",
|
||||||
|
"amzn_sfx_piano_note_1x": "Piano Note 1x",
|
||||||
|
"amzn_sfx_punch": "Punch",
|
||||||
|
"amzn_sfx_rain": "Rain",
|
||||||
|
"amzn_sfx_rain_on_roof": "Rain On Roof",
|
||||||
|
"amzn_sfx_rain_thunder": "Rain Thunder",
|
||||||
|
"amzn_sfx_rat_squeak_2x": "Rat Squeak 2x",
|
||||||
|
"amzn_sfx_rat_squeaks": "Rat Squeaks",
|
||||||
|
"amzn_sfx_raven_caw_1x": "Raven Caw 1x",
|
||||||
|
"amzn_sfx_raven_caw_2x": "Raven Caw 2x",
|
||||||
|
"amzn_sfx_restaurant_ambience": "Restaurant Ambience",
|
||||||
|
"amzn_sfx_rooster_crow": "Rooster Crow",
|
||||||
|
"amzn_sfx_scifi_air_escaping": "Scifi Air Escaping",
|
||||||
|
"amzn_sfx_scifi_alarm": "Scifi Alarm",
|
||||||
|
"amzn_sfx_scifi_alien_voice": "Scifi Alien Voice",
|
||||||
|
"amzn_sfx_scifi_boots_walking": "Scifi Boots Walking",
|
||||||
|
"amzn_sfx_scifi_close_large_explosion": "Scifi Close Large Explosion",
|
||||||
|
"amzn_sfx_scifi_door_open": "Scifi Door Open",
|
||||||
|
"amzn_sfx_scifi_engines_on": "Scifi Engines On",
|
||||||
|
"amzn_sfx_scifi_engines_on_large": "Scifi Engines On Large",
|
||||||
|
"amzn_sfx_scifi_engines_on_short_burst": "Scifi Engines On Short Burst",
|
||||||
|
"amzn_sfx_scifi_explosion": "Scifi Explosion",
|
||||||
|
"amzn_sfx_scifi_explosion_2x": "Scifi Explosion 2x",
|
||||||
|
"amzn_sfx_scifi_incoming_explosion": "Scifi Incoming Explosion",
|
||||||
|
"amzn_sfx_scifi_laser_gun_battle": "Scifi Laser Gun Battle",
|
||||||
|
"amzn_sfx_scifi_laser_gun_fires": "Scifi Laser Gun Fires",
|
||||||
|
"amzn_sfx_scifi_laser_gun_fires_large": "Scifi Laser Gun Fires Large",
|
||||||
|
"amzn_sfx_scifi_long_explosion_1x": "Scifi Long Explosion 1x",
|
||||||
|
"amzn_sfx_scifi_missile": "Scifi Missile",
|
||||||
|
"amzn_sfx_scifi_motor_short_1x": "Scifi Motor Short 1x",
|
||||||
|
"amzn_sfx_scifi_open_airlock": "Scifi Open Airlock",
|
||||||
|
"amzn_sfx_scifi_radar_high_ping": "Scifi Radar High Ping",
|
||||||
|
"amzn_sfx_scifi_radar_low": "Scifi Radar Low",
|
||||||
|
"amzn_sfx_scifi_radar_medium": "Scifi Radar Medium",
|
||||||
|
"amzn_sfx_scifi_run_away": "Scifi Run Away",
|
||||||
|
"amzn_sfx_scifi_sheilds_up": "Scifi Sheilds Up",
|
||||||
|
"amzn_sfx_scifi_short_low_explosion": "Scifi Short Low Explosion",
|
||||||
|
"amzn_sfx_scifi_small_whoosh_flyby": "Scifi Small Whoosh Flyby",
|
||||||
|
"amzn_sfx_scifi_small_zoom_flyby": "Scifi Small Zoom Flyby",
|
||||||
|
"amzn_sfx_scifi_sonar_ping_3x": "Scifi Sonar Ping 3x",
|
||||||
|
"amzn_sfx_scifi_sonar_ping_4x": "Scifi Sonar Ping 4x",
|
||||||
|
"amzn_sfx_scifi_spaceship_flyby": "Scifi Spaceship Flyby",
|
||||||
|
"amzn_sfx_scifi_timer_beep": "Scifi Timer Beep",
|
||||||
|
"amzn_sfx_scifi_zap_backwards": "Scifi Zap Backwards",
|
||||||
|
"amzn_sfx_scifi_zap_electric": "Scifi Zap Electric",
|
||||||
|
"amzn_sfx_sheep_baa": "Sheep Baa",
|
||||||
|
"amzn_sfx_sheep_bleat": "Sheep Bleat",
|
||||||
|
"amzn_sfx_silverware_clank": "Silverware Clank",
|
||||||
|
"amzn_sfx_sirens": "Sirens",
|
||||||
|
"amzn_sfx_sleigh_bells": "Sleigh Bells",
|
||||||
|
"amzn_sfx_small_stream": "Small Stream",
|
||||||
|
"amzn_sfx_sneeze": "Sneeze",
|
||||||
|
"amzn_sfx_stream": "Stream",
|
||||||
|
"amzn_sfx_strong_wind_desert": "Strong Wind Desert",
|
||||||
|
"amzn_sfx_strong_wind_whistling": "Strong Wind Whistling",
|
||||||
|
"amzn_sfx_subway_leaving": "Subway Leaving",
|
||||||
|
"amzn_sfx_subway_passing": "Subway Passing",
|
||||||
|
"amzn_sfx_subway_stopping": "Subway Stopping",
|
||||||
|
"amzn_sfx_swoosh_cartoon_fast": "Swoosh Cartoon Fast",
|
||||||
|
"amzn_sfx_swoosh_fast_1x": "Swoosh Fast 1x",
|
||||||
|
"amzn_sfx_swoosh_fast_6x": "Swoosh Fast 6x",
|
||||||
|
"amzn_sfx_test_tone": "Test Tone",
|
||||||
|
"amzn_sfx_thunder_rumble": "Thunder Rumble",
|
||||||
|
"amzn_sfx_toilet_flush": "Toilet Flush",
|
||||||
|
"amzn_sfx_trumpet_bugle": "Trumpet Bugle",
|
||||||
|
"amzn_sfx_turkey_gobbling": "Turkey Gobbling",
|
||||||
|
"amzn_sfx_typing_medium": "Typing Medium",
|
||||||
|
"amzn_sfx_typing_short": "Typing Short",
|
||||||
|
"amzn_sfx_typing_typewriter": "Typing Typewriter",
|
||||||
|
"amzn_sfx_vacuum_off": "Vacuum Off",
|
||||||
|
"amzn_sfx_vacuum_on": "Vacuum On",
|
||||||
|
"amzn_sfx_walking_in_mud": "Walking In Mud",
|
||||||
|
"amzn_sfx_walking_in_snow": "Walking In Snow",
|
||||||
|
"amzn_sfx_walking_on_grass": "Walking On Grass",
|
||||||
|
"amzn_sfx_water_dripping": "Water Dripping",
|
||||||
|
"amzn_sfx_water_droplets": "Water Droplets",
|
||||||
|
"amzn_sfx_wind_strong_gusting": "Wind Strong Gusting",
|
||||||
|
"amzn_sfx_wind_whistling_desert": "Wind Whistling Desert",
|
||||||
|
"amzn_sfx_wings_flap_4x": "Wings Flap 4x",
|
||||||
|
"amzn_sfx_wings_flap_fast": "Wings Flap Fast",
|
||||||
|
"amzn_sfx_wolf_howl": "Wolf Howl",
|
||||||
|
"amzn_sfx_wolf_young_howl": "Wolf Young Howl",
|
||||||
|
"amzn_sfx_wooden_door": "Wooden Door",
|
||||||
|
"amzn_sfx_wooden_door_creaks_long": "Wooden Door Creaks Long",
|
||||||
|
"amzn_sfx_wooden_door_creaks_multiple": "Wooden Door Creaks Multiple",
|
||||||
|
"amzn_sfx_wooden_door_creaks_open": "Wooden Door Creaks Open",
|
||||||
|
"amzn_ui_sfx_gameshow_bridge": "Gameshow Bridge",
|
||||||
|
"amzn_ui_sfx_gameshow_countdown_loop_32s_full": "Gameshow Countdown Loop 32s Full",
|
||||||
|
"amzn_ui_sfx_gameshow_countdown_loop_64s_full": "Gameshow Countdown Loop 64s Full",
|
||||||
|
"amzn_ui_sfx_gameshow_countdown_loop_64s_minimal": "Gameshow Countdown Loop 64s Minimal",
|
||||||
|
"amzn_ui_sfx_gameshow_intro": "Gameshow Intro",
|
||||||
|
"amzn_ui_sfx_gameshow_negative_response": "Gameshow Negative Response",
|
||||||
|
"amzn_ui_sfx_gameshow_neutral_response": "Gameshow Neutral Response",
|
||||||
|
"amzn_ui_sfx_gameshow_outro": "Gameshow Outro",
|
||||||
|
"amzn_ui_sfx_gameshow_player1": "Gameshow Player1",
|
||||||
|
"amzn_ui_sfx_gameshow_player2": "Gameshow Player2",
|
||||||
|
"amzn_ui_sfx_gameshow_player3": "Gameshow Player3",
|
||||||
|
"amzn_ui_sfx_gameshow_player4": "Gameshow Player4",
|
||||||
|
"amzn_ui_sfx_gameshow_positive_response": "Gameshow Positive Response",
|
||||||
|
"amzn_ui_sfx_gameshow_tally_negative": "Gameshow Tally Negative",
|
||||||
|
"amzn_ui_sfx_gameshow_tally_positive": "Gameshow Tally Positive",
|
||||||
|
"amzn_ui_sfx_gameshow_waiting_loop_30s": "Gameshow Waiting Loop 30s",
|
||||||
|
"anchor": "Anchor",
|
||||||
|
"answering_machines": "Answering Machines",
|
||||||
|
"arcs_sparks": "Arcs Sparks",
|
||||||
|
"arrows_bows": "Arrows Bows",
|
||||||
|
"baby": "Baby",
|
||||||
|
"back_up_beeps": "Back Up Beeps",
|
||||||
|
"bars_restaurants": "Bars Restaurants",
|
||||||
|
"baseball": "Baseball",
|
||||||
|
"basketball": "Basketball",
|
||||||
|
"battles": "Battles",
|
||||||
|
"beeps_tones": "Beeps Tones",
|
||||||
|
"bell": "Bell",
|
||||||
|
"bikes": "Bikes",
|
||||||
|
"billiards": "Billiards",
|
||||||
|
"board_games": "Board Games",
|
||||||
|
"body": "Body",
|
||||||
|
"boing": "Boing",
|
||||||
|
"books": "Books",
|
||||||
|
"bow_wash": "Bow Wash",
|
||||||
|
"box": "Box",
|
||||||
|
"break_shatter_smash": "Break Shatter Smash",
|
||||||
|
"breaks": "Breaks",
|
||||||
|
"brooms_mops": "Brooms Mops",
|
||||||
|
"bullets": "Bullets",
|
||||||
|
"buses": "Buses",
|
||||||
|
"buzz": "Buzz",
|
||||||
|
"buzz_hums": "Buzz Hums",
|
||||||
|
"buzzers": "Buzzers",
|
||||||
|
"buzzers_pistols": "Buzzers Pistols",
|
||||||
|
"cables_metal": "Cables Metal",
|
||||||
|
"camera": "Camera",
|
||||||
|
"cannons": "Cannons",
|
||||||
|
"car_alarm": "Car Alarm",
|
||||||
|
"car_alarms": "Car Alarms",
|
||||||
|
"car_cell_phones": "Car Cell Phones",
|
||||||
|
"carnivals_fairs": "Carnivals Fairs",
|
||||||
|
"cars": "Cars",
|
||||||
|
"casino": "Casino",
|
||||||
|
"casinos": "Casinos",
|
||||||
|
"cellar": "Cellar",
|
||||||
|
"chimes": "Chimes",
|
||||||
|
"chimes_bells": "Chimes Bells",
|
||||||
|
"chorus": "Chorus",
|
||||||
|
"christmas": "Christmas",
|
||||||
|
"church_bells": "Church Bells",
|
||||||
|
"clock": "Clock",
|
||||||
|
"cloth": "Cloth",
|
||||||
|
"concrete": "Concrete",
|
||||||
|
"construction": "Construction",
|
||||||
|
"construction_factory": "Construction Factory",
|
||||||
|
"crashes": "Crashes",
|
||||||
|
"crowds": "Crowds",
|
||||||
|
"debris": "Debris",
|
||||||
|
"dining_kitchens": "Dining Kitchens",
|
||||||
|
"dinosaurs": "Dinosaurs",
|
||||||
|
"dripping": "Dripping",
|
||||||
|
"drops": "Drops",
|
||||||
|
"electric": "Electric",
|
||||||
|
"electrical": "Electrical",
|
||||||
|
"elevator": "Elevator",
|
||||||
|
"evolution_monsters": "Evolution Monsters",
|
||||||
|
"explosions": "Explosions",
|
||||||
|
"factory": "Factory",
|
||||||
|
"falls": "Falls",
|
||||||
|
"fax_scanner_copier": "Fax Scanner Copier",
|
||||||
|
"feedback_mics": "Feedback Mics",
|
||||||
|
"fight": "Fight",
|
||||||
|
"fire": "Fire",
|
||||||
|
"fire_extinguisher": "Fire Extinguisher",
|
||||||
|
"fireballs": "Fireballs",
|
||||||
|
"fireworks": "Fireworks",
|
||||||
|
"fishing_pole": "Fishing Pole",
|
||||||
|
"flags": "Flags",
|
||||||
|
"football": "Football",
|
||||||
|
"footsteps": "Footsteps",
|
||||||
|
"futuristic": "Futuristic",
|
||||||
|
"futuristic_ship": "Futuristic Ship",
|
||||||
|
"gameshow": "Gameshow",
|
||||||
|
"gear": "Gear",
|
||||||
|
"ghosts_demons": "Ghosts Demons",
|
||||||
|
"giant_monster": "Giant Monster",
|
||||||
|
"glass": "Glass",
|
||||||
|
"glasses_clink": "Glasses Clink",
|
||||||
|
"golf": "Golf",
|
||||||
|
"gorilla": "Gorilla",
|
||||||
|
"grenade_lanucher": "Grenade Lanucher",
|
||||||
|
"griffen": "Griffen",
|
||||||
|
"gyms_locker_rooms": "Gyms Locker Rooms",
|
||||||
|
"handgun_loading": "Handgun Loading",
|
||||||
|
"handgun_shot": "Handgun Shot",
|
||||||
|
"handle": "Handle",
|
||||||
|
"hands": "Hands",
|
||||||
|
"heartbeats_ekg": "Heartbeats EKG",
|
||||||
|
"helicopter": "Helicopter",
|
||||||
|
"high_tech": "High Tech",
|
||||||
|
"hit_punch_slap": "Hit Punch Slap",
|
||||||
|
"hits": "Hits",
|
||||||
|
"horns": "Horns",
|
||||||
|
"horror": "Horror",
|
||||||
|
"hot_tub_filling_up": "Hot Tub Filling Up",
|
||||||
|
"human": "Human",
|
||||||
|
"human_vocals": "Human Vocals",
|
||||||
|
"hygene": "Hygene",
|
||||||
|
"ice_skating": "Ice Skating",
|
||||||
|
"ignitions": "Ignitions",
|
||||||
|
"infantry": "Infantry",
|
||||||
|
"intro": "Intro",
|
||||||
|
"jet": "Jet",
|
||||||
|
"juggling": "Juggling",
|
||||||
|
"key_lock": "Key Lock",
|
||||||
|
"kids": "Kids",
|
||||||
|
"knocks": "Knocks",
|
||||||
|
"lab_equip": "Lab Equip",
|
||||||
|
"lacrosse": "Lacrosse",
|
||||||
|
"lamps_lanterns": "Lamps Lanterns",
|
||||||
|
"leather": "Leather",
|
||||||
|
"liquid_suction": "Liquid Suction",
|
||||||
|
"locker_doors": "Locker Doors",
|
||||||
|
"machine_gun": "Machine Gun",
|
||||||
|
"magic_spells": "Magic Spells",
|
||||||
|
"medium_large_explosions": "Medium Large Explosions",
|
||||||
|
"metal": "Metal",
|
||||||
|
"modern_rings": "Modern Rings",
|
||||||
|
"money_coins": "Money Coins",
|
||||||
|
"motorcycles": "Motorcycles",
|
||||||
|
"movement": "Movement",
|
||||||
|
"moves": "Moves",
|
||||||
|
"nature": "Nature",
|
||||||
|
"oar_boat": "Oar Boat",
|
||||||
|
"pagers": "Pagers",
|
||||||
|
"paintball": "Paintball",
|
||||||
|
"paper": "Paper",
|
||||||
|
"parachute": "Parachute",
|
||||||
|
"pay_phones": "Pay Phones",
|
||||||
|
"phone_beeps": "Phone Beeps",
|
||||||
|
"pigmy_bats": "Pigmy Bats",
|
||||||
|
"pills": "Pills",
|
||||||
|
"pour_water": "Pour Water",
|
||||||
|
"power_up_down": "Power Up Down",
|
||||||
|
"printers": "Printers",
|
||||||
|
"prison": "Prison",
|
||||||
|
"public_space": "Public Space",
|
||||||
|
"racquetball": "Racquetball",
|
||||||
|
"radios_static": "Radios Static",
|
||||||
|
"rain": "Rain",
|
||||||
|
"rc_airplane": "RC Airplane",
|
||||||
|
"rc_car": "RC Car",
|
||||||
|
"refrigerators_freezers": "Refrigerators Freezers",
|
||||||
|
"regular": "Regular",
|
||||||
|
"respirator": "Respirator",
|
||||||
|
"rifle": "Rifle",
|
||||||
|
"roller_coaster": "Roller Coaster",
|
||||||
|
"rollerskates_rollerblades": "RollerSkates RollerBlades",
|
||||||
|
"room_tones": "Room Tones",
|
||||||
|
"ropes_climbing": "Ropes Climbing",
|
||||||
|
"rotary_rings": "Rotary Rings",
|
||||||
|
"rowboat_canoe": "Rowboat Canoe",
|
||||||
|
"rubber": "Rubber",
|
||||||
|
"running": "Running",
|
||||||
|
"sails": "Sails",
|
||||||
|
"sand_gravel": "Sand Gravel",
|
||||||
|
"screen_doors": "Screen Doors",
|
||||||
|
"screens": "Screens",
|
||||||
|
"seats_stools": "Seats Stools",
|
||||||
|
"servos": "Servos",
|
||||||
|
"shoes_boots": "Shoes Boots",
|
||||||
|
"shotgun": "Shotgun",
|
||||||
|
"shower": "Shower",
|
||||||
|
"sink_faucet": "Sink Faucet",
|
||||||
|
"sink_filling_water": "Sink Filling Water",
|
||||||
|
"sink_run_and_off": "Sink Run And Off",
|
||||||
|
"sink_water_splatter": "Sink Water Splatter",
|
||||||
|
"sirens": "Sirens",
|
||||||
|
"skateboards": "Skateboards",
|
||||||
|
"ski": "Ski",
|
||||||
|
"skids_tires": "Skids Tires",
|
||||||
|
"sled": "Sled",
|
||||||
|
"slides": "Slides",
|
||||||
|
"small_explosions": "Small Explosions",
|
||||||
|
"snow": "Snow",
|
||||||
|
"snowmobile": "Snowmobile",
|
||||||
|
"soldiers": "Soldiers",
|
||||||
|
"splash_water": "Splash Water",
|
||||||
|
"splashes_sprays": "Splashes Sprays",
|
||||||
|
"sports_whistles": "Sports Whistles",
|
||||||
|
"squeaks": "Squeaks",
|
||||||
|
"squeaky": "Squeaky",
|
||||||
|
"stairs": "Stairs",
|
||||||
|
"steam": "Steam",
|
||||||
|
"submarine_diesel": "Submarine Diesel",
|
||||||
|
"swing_doors": "Swing Doors",
|
||||||
|
"switches_levers": "Switches Levers",
|
||||||
|
"swords": "Swords",
|
||||||
|
"tape": "Tape",
|
||||||
|
"tape_machine": "Tape Machine",
|
||||||
|
"televisions_shows": "Televisions Shows",
|
||||||
|
"tennis_pingpong": "Tennis PingPong",
|
||||||
|
"textile": "Textile",
|
||||||
|
"throw": "Throw",
|
||||||
|
"thunder": "Thunder",
|
||||||
|
"ticks": "Ticks",
|
||||||
|
"timer": "Timer",
|
||||||
|
"toilet_flush": "Toilet Flush",
|
||||||
|
"tone": "Tone",
|
||||||
|
"tones_noises": "Tones Noises",
|
||||||
|
"toys": "Toys",
|
||||||
|
"tractors": "Tractors",
|
||||||
|
"traffic": "Traffic",
|
||||||
|
"train": "Train",
|
||||||
|
"trucks_vans": "Trucks Vans",
|
||||||
|
"turnstiles": "Turnstiles",
|
||||||
|
"typing": "Typing",
|
||||||
|
"umbrella": "Umbrella",
|
||||||
|
"underwater": "Underwater",
|
||||||
|
"vampires": "Vampires",
|
||||||
|
"various": "Various",
|
||||||
|
"video_tunes": "Video Tunes",
|
||||||
|
"volcano_earthquake": "Volcano Earthquake",
|
||||||
|
"watches": "Watches",
|
||||||
|
"water": "Water",
|
||||||
|
"water_running": "Water Running",
|
||||||
|
"werewolves": "Werewolves",
|
||||||
|
"winches_gears": "Winches Gears",
|
||||||
|
"wind": "Wind",
|
||||||
|
"wood": "Wood",
|
||||||
|
"wood_boat": "Wood Boat",
|
||||||
|
"woosh": "Woosh",
|
||||||
|
"zap": "Zap",
|
||||||
|
"zippers": "Zippers"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"exceptions": {
|
"exceptions": {
|
||||||
"cannot_connect_with_error": {
|
"cannot_connect_with_error": {
|
||||||
"message": "Error connecting: {error}"
|
"message": "Error connecting: {error}"
|
||||||
},
|
},
|
||||||
"cannot_retrieve_data_with_error": {
|
"cannot_retrieve_data_with_error": {
|
||||||
"message": "Error retrieving data: {error}"
|
"message": "Error retrieving data: {error}"
|
||||||
|
},
|
||||||
|
"device_serial_number_missing": {
|
||||||
|
"message": "Device serial number missing: {device_id}"
|
||||||
|
},
|
||||||
|
"invalid_device_id": {
|
||||||
|
"message": "Invalid device ID specified: {device_id}"
|
||||||
|
},
|
||||||
|
"invalid_sound_value": {
|
||||||
|
"message": "Invalid sound {sound} with variant {variant} specified"
|
||||||
|
},
|
||||||
|
"entry_not_loaded": {
|
||||||
|
"message": "Entry not loaded: {entry}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,7 @@ def mock_amazon_devices_client() -> Generator[AsyncMock]:
|
|||||||
client.get_model_details = lambda device: DEVICE_TYPE_TO_MODEL.get(
|
client.get_model_details = lambda device: DEVICE_TYPE_TO_MODEL.get(
|
||||||
device.device_type
|
device.device_type
|
||||||
)
|
)
|
||||||
|
client.send_sound_notification = AsyncMock()
|
||||||
yield client
|
yield client
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,3 +5,5 @@ TEST_COUNTRY = "IT"
|
|||||||
TEST_PASSWORD = "fake_password"
|
TEST_PASSWORD = "fake_password"
|
||||||
TEST_SERIAL_NUMBER = "echo_test_serial_number"
|
TEST_SERIAL_NUMBER = "echo_test_serial_number"
|
||||||
TEST_USERNAME = "fake_email@gmail.com"
|
TEST_USERNAME = "fake_email@gmail.com"
|
||||||
|
|
||||||
|
TEST_DEVICE_ID = "echo_test_device_id"
|
||||||
|
77
tests/components/alexa_devices/snapshots/test_services.ambr
Normal file
77
tests/components/alexa_devices/snapshots/test_services.ambr
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# serializer version: 1
|
||||||
|
# name: test_send_sound_service
|
||||||
|
_Call(
|
||||||
|
tuple(
|
||||||
|
dict({
|
||||||
|
'account_name': 'Echo Test',
|
||||||
|
'appliance_id': 'G1234567890123456789012345678A',
|
||||||
|
'bluetooth_state': True,
|
||||||
|
'capabilities': list([
|
||||||
|
'AUDIO_PLAYER',
|
||||||
|
'MICROPHONE',
|
||||||
|
]),
|
||||||
|
'device_cluster_members': list([
|
||||||
|
'echo_test_serial_number',
|
||||||
|
]),
|
||||||
|
'device_family': 'mine',
|
||||||
|
'device_locale': 'en-US',
|
||||||
|
'device_owner_customer_id': 'amazon_ower_id',
|
||||||
|
'device_type': 'echo',
|
||||||
|
'do_not_disturb': False,
|
||||||
|
'entity_id': '11111111-2222-3333-4444-555555555555',
|
||||||
|
'online': True,
|
||||||
|
'response_style': None,
|
||||||
|
'sensors': dict({
|
||||||
|
'temperature': dict({
|
||||||
|
'name': 'temperature',
|
||||||
|
'scale': 'CELSIUS',
|
||||||
|
'value': '22.5',
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
'serial_number': 'echo_test_serial_number',
|
||||||
|
'software_version': 'echo_test_software_version',
|
||||||
|
}),
|
||||||
|
'chimes_bells_01',
|
||||||
|
),
|
||||||
|
dict({
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
# ---
|
||||||
|
# name: test_send_text_service
|
||||||
|
_Call(
|
||||||
|
tuple(
|
||||||
|
dict({
|
||||||
|
'account_name': 'Echo Test',
|
||||||
|
'appliance_id': 'G1234567890123456789012345678A',
|
||||||
|
'bluetooth_state': True,
|
||||||
|
'capabilities': list([
|
||||||
|
'AUDIO_PLAYER',
|
||||||
|
'MICROPHONE',
|
||||||
|
]),
|
||||||
|
'device_cluster_members': list([
|
||||||
|
'echo_test_serial_number',
|
||||||
|
]),
|
||||||
|
'device_family': 'mine',
|
||||||
|
'device_locale': 'en-US',
|
||||||
|
'device_owner_customer_id': 'amazon_ower_id',
|
||||||
|
'device_type': 'echo',
|
||||||
|
'do_not_disturb': False,
|
||||||
|
'entity_id': '11111111-2222-3333-4444-555555555555',
|
||||||
|
'online': True,
|
||||||
|
'response_style': None,
|
||||||
|
'sensors': dict({
|
||||||
|
'temperature': dict({
|
||||||
|
'name': 'temperature',
|
||||||
|
'scale': 'CELSIUS',
|
||||||
|
'value': '22.5',
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
'serial_number': 'echo_test_serial_number',
|
||||||
|
'software_version': 'echo_test_software_version',
|
||||||
|
}),
|
||||||
|
'Play B.B.C. radio on TuneIn',
|
||||||
|
),
|
||||||
|
dict({
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
# ---
|
195
tests/components/alexa_devices/test_services.py
Normal file
195
tests/components/alexa_devices/test_services.py
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
"""Tests for Alexa Devices services."""
|
||||||
|
|
||||||
|
from unittest.mock import AsyncMock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from syrupy.assertion import SnapshotAssertion
|
||||||
|
|
||||||
|
from homeassistant.components.alexa_devices.const import DOMAIN
|
||||||
|
from homeassistant.components.alexa_devices.services import (
|
||||||
|
ATTR_SOUND,
|
||||||
|
ATTR_SOUND_VARIANT,
|
||||||
|
ATTR_TEXT_COMMAND,
|
||||||
|
SERVICE_SOUND_NOTIFICATION,
|
||||||
|
SERVICE_TEXT_COMMAND,
|
||||||
|
)
|
||||||
|
from homeassistant.config_entries import ConfigEntryState
|
||||||
|
from homeassistant.const import ATTR_DEVICE_ID
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.exceptions import ServiceValidationError
|
||||||
|
from homeassistant.helpers import device_registry as dr
|
||||||
|
|
||||||
|
from . import setup_integration
|
||||||
|
from .const import TEST_DEVICE_ID, TEST_SERIAL_NUMBER
|
||||||
|
|
||||||
|
from tests.common import MockConfigEntry, mock_device_registry
|
||||||
|
|
||||||
|
|
||||||
|
async def test_setup_services(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
mock_amazon_devices_client: AsyncMock,
|
||||||
|
mock_config_entry: MockConfigEntry,
|
||||||
|
) -> None:
|
||||||
|
"""Test setup of Alexa Devices services."""
|
||||||
|
await setup_integration(hass, mock_config_entry)
|
||||||
|
|
||||||
|
assert (services := hass.services.async_services_for_domain(DOMAIN))
|
||||||
|
assert SERVICE_TEXT_COMMAND in services
|
||||||
|
assert SERVICE_SOUND_NOTIFICATION in services
|
||||||
|
|
||||||
|
|
||||||
|
async def test_send_sound_service(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
device_registry: dr.DeviceRegistry,
|
||||||
|
mock_amazon_devices_client: AsyncMock,
|
||||||
|
mock_config_entry: MockConfigEntry,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
|
) -> None:
|
||||||
|
"""Test send sound service."""
|
||||||
|
|
||||||
|
await setup_integration(hass, mock_config_entry)
|
||||||
|
|
||||||
|
device_entry = device_registry.async_get_device(
|
||||||
|
identifiers={(DOMAIN, TEST_SERIAL_NUMBER)}
|
||||||
|
)
|
||||||
|
assert device_entry
|
||||||
|
|
||||||
|
await hass.services.async_call(
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_SOUND_NOTIFICATION,
|
||||||
|
{
|
||||||
|
ATTR_SOUND: "chimes_bells",
|
||||||
|
ATTR_SOUND_VARIANT: 1,
|
||||||
|
ATTR_DEVICE_ID: device_entry.id,
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert mock_amazon_devices_client.call_alexa_sound.call_count == 1
|
||||||
|
assert mock_amazon_devices_client.call_alexa_sound.call_args == snapshot
|
||||||
|
|
||||||
|
|
||||||
|
async def test_send_text_service(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
device_registry: dr.DeviceRegistry,
|
||||||
|
mock_amazon_devices_client: AsyncMock,
|
||||||
|
mock_config_entry: MockConfigEntry,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
|
) -> None:
|
||||||
|
"""Test send text service."""
|
||||||
|
|
||||||
|
await setup_integration(hass, mock_config_entry)
|
||||||
|
|
||||||
|
device_entry = device_registry.async_get_device(
|
||||||
|
identifiers={(DOMAIN, TEST_SERIAL_NUMBER)}
|
||||||
|
)
|
||||||
|
assert device_entry
|
||||||
|
|
||||||
|
await hass.services.async_call(
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_TEXT_COMMAND,
|
||||||
|
{
|
||||||
|
ATTR_TEXT_COMMAND: "Play B.B.C. radio on TuneIn",
|
||||||
|
ATTR_DEVICE_ID: device_entry.id,
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert mock_amazon_devices_client.call_alexa_text_command.call_count == 1
|
||||||
|
assert mock_amazon_devices_client.call_alexa_text_command.call_args == snapshot
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
("sound", "device_id", "translation_key", "translation_placeholders"),
|
||||||
|
[
|
||||||
|
(
|
||||||
|
"chimes_bells",
|
||||||
|
"fake_device_id",
|
||||||
|
"invalid_device_id",
|
||||||
|
{"device_id": "fake_device_id"},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"wrong_sound_name",
|
||||||
|
TEST_DEVICE_ID,
|
||||||
|
"invalid_sound_value",
|
||||||
|
{
|
||||||
|
"sound": "wrong_sound_name",
|
||||||
|
"variant": "1",
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_invalid_parameters(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
mock_amazon_devices_client: AsyncMock,
|
||||||
|
mock_config_entry: MockConfigEntry,
|
||||||
|
sound: str,
|
||||||
|
device_id: str,
|
||||||
|
translation_key: str,
|
||||||
|
translation_placeholders: dict[str, str],
|
||||||
|
) -> None:
|
||||||
|
"""Test invalid service parameters."""
|
||||||
|
|
||||||
|
device_entry = dr.DeviceEntry(
|
||||||
|
id=TEST_DEVICE_ID, identifiers={(DOMAIN, TEST_SERIAL_NUMBER)}
|
||||||
|
)
|
||||||
|
mock_device_registry(
|
||||||
|
hass,
|
||||||
|
{device_entry.id: device_entry},
|
||||||
|
)
|
||||||
|
await setup_integration(hass, mock_config_entry)
|
||||||
|
|
||||||
|
# Call Service
|
||||||
|
with pytest.raises(ServiceValidationError) as exc_info:
|
||||||
|
await hass.services.async_call(
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_SOUND_NOTIFICATION,
|
||||||
|
{
|
||||||
|
ATTR_SOUND: sound,
|
||||||
|
ATTR_SOUND_VARIANT: 1,
|
||||||
|
ATTR_DEVICE_ID: device_id,
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert exc_info.value.translation_domain == DOMAIN
|
||||||
|
assert exc_info.value.translation_key == translation_key
|
||||||
|
assert exc_info.value.translation_placeholders == translation_placeholders
|
||||||
|
|
||||||
|
|
||||||
|
async def test_config_entry_not_loaded(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
device_registry: dr.DeviceRegistry,
|
||||||
|
mock_amazon_devices_client: AsyncMock,
|
||||||
|
mock_config_entry: MockConfigEntry,
|
||||||
|
) -> None:
|
||||||
|
"""Test config entry not loaded."""
|
||||||
|
|
||||||
|
await setup_integration(hass, mock_config_entry)
|
||||||
|
|
||||||
|
device_entry = device_registry.async_get_device(
|
||||||
|
identifiers={(DOMAIN, TEST_SERIAL_NUMBER)}
|
||||||
|
)
|
||||||
|
assert device_entry
|
||||||
|
|
||||||
|
await hass.config_entries.async_unload(mock_config_entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
assert mock_config_entry.state is ConfigEntryState.NOT_LOADED
|
||||||
|
|
||||||
|
# Call Service
|
||||||
|
with pytest.raises(ServiceValidationError) as exc_info:
|
||||||
|
await hass.services.async_call(
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_SOUND_NOTIFICATION,
|
||||||
|
{
|
||||||
|
ATTR_SOUND: "chimes_bells",
|
||||||
|
ATTR_SOUND_VARIANT: 1,
|
||||||
|
ATTR_DEVICE_ID: device_entry.id,
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert exc_info.value.translation_domain == DOMAIN
|
||||||
|
assert exc_info.value.translation_key == "entry_not_loaded"
|
||||||
|
assert exc_info.value.translation_placeholders == {"entry": mock_config_entry.title}
|
Loading…
x
Reference in New Issue
Block a user