Python 驱动的 Alexa 公告

问题描述 投票:0回答:1

我有一个在我的电脑上运行的 python 脚本,监视网络数据并偶尔打印警报。我想将此字符串提供给 Alexa,以便在我的所有 echo 设备上发布警报。我怎样才能做到这一点?

我知道 Alexa 可以接受文本,因为我可以通过 Alexa Android 应用程序输入文本,并在我的所有 echo 设备上宣布它。我需要一种方法将文本从 python 脚本发送到 Alexa 应用程序并触发公告。

5:20 的这段视频 (https://youtu.be/UEPt3edhwc0?t=318) 显示 Echo 通过 Home Assistant 宣布自定义文本,我想通过 Python 来执行此操作。幸运的是,Home Assistant 使用两个 python 包 AlexaPy 和 alexa_media_player 来完成此任务。

AlexaPy (https://alexapy.readthedocs.io/en/latest/alexapy/alexapy.html#submodules) 正是我所需要的,一个 send_announcment 方法,允许回显设备宣布文本(“这是一个测试”)通过以下代码片段。

echo_device = alexapy.AlexaAPI(device, alexa_login) # stuck here
await echo_device.send_announcment(message='this is a test')

我可以创建 alexa_login 对象并确认它可以使用以下代码:

import asyncio
import alexapy

url = 'amazon.com'
name = 'amazon_login_name'
password = 'amazon_password'


def fun_outputpath(file: str):
    return file


async def connect():
    alexa_login = alexapy.AlexaLogin(url, name, password, fun_outputpath)
    await alexa_login.login()
    is_connected = await alexa_login.test_loggedin()
    if is_connected:
        print("Connected")
        print(alexa_login.customer_id)
        print(alexa_login.email)
        print(alexa_login.password)
    else:
        print("Not connected")
    await alexa_login.close()


def main():
    asyncio.run(connect())

if __name__ == "__main__":
    main()

但是我无法弄清楚要传递什么参数作为“device”参数。查看 AlexaPy 代码显示设备需要 AlexaClient 实例。

class AlexaAPI:
    # pylint: disable=too-many-public-methods
    """Class for accessing a specific Alexa device using rest API.

    Args:
    device (AlexaClient): Instance of an AlexaClient to access
    login (AlexaLogin): Successfully logged in AlexaLogin

    """

    devices: dict[str, Any] = {}
    wake_words: dict[str, Any] = {}
    _sequence_queue: dict[Any, list[dict[Any, Any]]] = {}
    _sequence_lock: dict[Any, asyncio.Lock] = {}

    def __init__(self, device, login: AlexaLogin):
        """Initialize Alexa device."""
        self._device = device

AlexaClient 类在 alexa_media_player python 包中定义(https://github.com/keatontaylor/alexa_media_player/blob/dev/custom_components/alexa_media/media_player.py):

class AlexaClient(MediaPlayerDevice, AlexaMedia):
    """Representation of a Alexa device."""

    def __init__(self, device, login, second_account_index=0):
        """Initialize the Alexa device."""
        super().__init__(self, login)

        # Logged in info
        self._authenticated = None
        self._can_access_prime_music = None
        self._customer_email = None
        self._customer_id = None
        self._customer_name = None

        # Device info
        self._device = device

我觉得我已经接近解决方案,但我需要一些帮助来找出创建 AlexaClient 对象以作为参数传递给“device”参数的最佳方法。

python echo text-to-speech alexa-voice-service
1个回答
-1
投票

你找到解决办法了吗? 我也在尝试做同样的事情

© www.soinside.com 2019 - 2024. All rights reserved.