Аргументы клиента асинхронного автобана

Отказ от ответственности: я впервые работаю с WS и MQTT, поэтому структура может быть неправильной. Пожалуйста, укажите это.

Я использую автобан с asyncio для получения и отправки сообщений в экземпляр HA (HomeAssistant) через веб-сокеты.

Как только мой код Python получит сообщения, я хочу перенаправить их с помощью MQTT в сервис AWS IoT. Это общение должно работать в обе стороны.

Я сделал эту работу как сценарий, в котором все плавает в файле. Я пытаюсь сделать эту работу в структуре класса, и именно так будет выполнена моя окончательная работа.

Для этого мне нужно, чтобы мой WebSocketClientProtocol имел доступ к AWSIoTClient .publish и .subscribe. Хотя инициализация WebSocketClientProtocol выполняется через фабрику, в результате я не уверен, как передать ему какие-либо аргументы. Например:

if __name__ == "__main__":

    aws_iot_client = AWSIoTClient(...)

    factory = WebSocketServerFactory('ws://localhost:8123/api/websocket')
    factory.protocol = HomeAssistantProtocol

Как я могу передать aws_iot_client в HomeAssistantProtocol?

Я нашел примеры Autobahn-Twisted, которые делают это, используя self.factory в подклассе WebSocketClientProtocol, но это недоступно для asyncio.


person Giannis    schedule 17.11.2017    source источник


Ответы (1)


Я обнаружил, что вызов run_until_complete возвращает transport, protocol экземпляров, поэтому я могу передать ему клиент AWS.

loop = asyncio.get_event_loop()
coro = loop.create_connection(factory, '127.0.0.1', 9000)
transport, protocol = loop.run_until_complete(coro)
person Giannis    schedule 18.11.2017