Files
Victor Alexandrovich Tsyrenschikov 373ed28445 python
2026-03-30 20:25:42 +05:00

71 lines
2.2 KiB
Python

import voluptuous as vol
from homeassistant.components.media_player import (
ATTR_MEDIA_CONTENT_ID,
ATTR_MEDIA_CONTENT_TYPE,
ATTR_MEDIA_EXTRA,
MEDIA_PLAYER_PLAY_MEDIA_SCHEMA,
)
from homeassistant.components.notify import (
ATTR_DATA,
ATTR_MESSAGE,
BaseNotificationService,
PLATFORM_SCHEMA,
)
from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.reload import async_setup_reload_service
from homeassistant.helpers.template import Template
from .core.const import DOMAIN
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Required(ATTR_DATA): cv.make_entity_service_schema(
{
vol.Optional(ATTR_MEDIA_CONTENT_ID): cv.template,
vol.Optional(ATTR_MEDIA_CONTENT_TYPE, default="text"): cv.string,
vol.Optional(ATTR_MEDIA_EXTRA): dict,
}
)
}
)
# noinspection PyUnusedLocal
async def async_get_service(hass, config, discovery_info=None):
"""Get the Yandex Station notification service."""
await async_setup_reload_service(hass, DOMAIN, ["notify"])
return YandexStationNotificationService(hass, config[ATTR_DATA])
# noinspection PyAbstractClass
class YandexStationNotificationService(BaseNotificationService):
"""Implement the notification service for Yandex Station."""
def __init__(self, hass, data: dict):
"""Initialize the service."""
self.data = data
self.template: Template = data.pop(ATTR_MEDIA_CONTENT_ID, None)
if self.template:
self.template.hass = hass
async def async_send_message(self, message: str, **kwargs):
"""Send a TTS message to the speaker."""
if self.template:
kwargs[ATTR_MESSAGE] = message
message = self.template.async_render(kwargs)
service_data = self.data.copy()
service_data[ATTR_MEDIA_CONTENT_ID] = message
if kwargs.get(ATTR_DATA):
service_data.update(kwargs[ATTR_DATA])
service_data = cv.make_entity_service_schema(
MEDIA_PLAYER_PLAY_MEDIA_SCHEMA, extra=vol.REMOVE_EXTRA
)(service_data)
return await self.hass.services.async_call(
"media_player", "play_media", service_data
)