支持多个实体关联
This commit is contained in:
parent
bb2fcfac9c
commit
8052caa7fc
|
@ -9,17 +9,16 @@ from homeassistant.const import CONF_URL, CONF_USERNAME, CONF_PASSWORD
|
|||
from homeassistant.helpers.storage import STORAGE_DIR
|
||||
from urllib.parse import quote
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.helpers.selector import selector
|
||||
|
||||
import os
|
||||
from .manifest import manifest
|
||||
from .http_api import fetch_data
|
||||
from homeassistant.util.json import save_json
|
||||
|
||||
DOMAIN = manifest.domain
|
||||
|
||||
class SimpleConfigFlow(ConfigFlow, domain=DOMAIN):
|
||||
|
||||
VERSION = 2
|
||||
VERSION = 3
|
||||
|
||||
async def async_step_user(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
|
@ -66,7 +65,7 @@ class OptionsFlowHandler(OptionsFlow):
|
|||
return self.async_create_entry(title='', data=user_input)
|
||||
|
||||
media_states = self.hass.states.async_all('media_player')
|
||||
media_entities = {}
|
||||
media_entities = []
|
||||
|
||||
for state in media_states:
|
||||
friendly_name = state.attributes.get('friendly_name')
|
||||
|
@ -75,10 +74,15 @@ class OptionsFlowHandler(OptionsFlow):
|
|||
value = f'{friendly_name}({entity_id})'
|
||||
|
||||
if platform != 'cloud_music':
|
||||
media_entities[entity_id] = value
|
||||
media_entities.append({ 'label': value, 'value': entity_id })
|
||||
|
||||
DATA_SCHEMA = vol.Schema({
|
||||
vol.Required('media_player', default=options.get('media_player')): vol.In(media_entities)
|
||||
vol.Required('media_player', default=options.get('media_player')): selector({
|
||||
"select": {
|
||||
"options": media_entities,
|
||||
"multiple": True
|
||||
}
|
||||
})
|
||||
})
|
||||
return self.async_show_form(step_id="user", data_schema=DATA_SCHEMA, errors=errors)
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"domain": "ha_cloud_music",
|
||||
"name": "\u4E91\u97F3\u4E50",
|
||||
"version": "2023.11.6",
|
||||
"version": "2023.11.15",
|
||||
"config_flow": true,
|
||||
"documentation": "https://github.com/shaonianzhentan/ha_cloud_music",
|
||||
"requirements": [
|
||||
|
|
|
@ -60,15 +60,22 @@ async def async_setup_entry(
|
|||
hass: HomeAssistant,
|
||||
entry: ConfigEntry,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
) -> None:
|
||||
media_player = CloudMusicMediaPlayer(hass, entry)
|
||||
) -> None:
|
||||
|
||||
await hass.async_add_executor_job(track_time_interval, hass, media_player.interval, TIME_BETWEEN_UPDATES)
|
||||
async_add_entities([ media_player ], True)
|
||||
entities = []
|
||||
for source_media_player in entry.options.get('media_player'):
|
||||
entities.append(CloudMusicMediaPlayer(hass, source_media_player))
|
||||
|
||||
def media_player_interval(now):
|
||||
for mp in entities:
|
||||
mp.interval(now)
|
||||
|
||||
await hass.async_add_executor_job(track_time_interval, hass, media_player_interval, TIME_BETWEEN_UPDATES)
|
||||
async_add_entities(entities, True)
|
||||
|
||||
class CloudMusicMediaPlayer(MediaPlayerEntity):
|
||||
|
||||
def __init__(self, hass, entry):
|
||||
def __init__(self, hass, source_media_player):
|
||||
self.hass = hass
|
||||
self._attributes = {
|
||||
'platform': 'cloud_music'
|
||||
|
@ -79,9 +86,9 @@ class CloudMusicMediaPlayer(MediaPlayerEntity):
|
|||
self._attr_supported_features = SUPPORT_FEATURES
|
||||
|
||||
# default attribute
|
||||
self.source_media_player = entry.options.get('media_player')
|
||||
self._attr_name = manifest.name
|
||||
self._attr_unique_id = manifest.documentation
|
||||
self.source_media_player = source_media_player
|
||||
self._attr_name = f'{manifest.name} {source_media_player.split(".")[1]}'
|
||||
self._attr_unique_id = f'{manifest.domain}{source_media_player}'
|
||||
self._attr_state = STATE_ON
|
||||
self._attr_volume_level = 1
|
||||
self._attr_repeat = 'all'
|
||||
|
|
Loading…
Reference in New Issue