Автар dex35
dex35
Разработка, 3d печать, игры

Алиса, включи кондиционер

Обложка публикации

Компания TCL, производитель кондиционера реализовала интеграцию с Алисой для сплит-систем обойдя портативные кондиционеры стороной. Хотя приложение для управления кондиционером есть, было принято решение исправить это недоразумение и подружить кондиционер с Алисой.

Ресерч. Первым делом нужно понять, могу ли я внутри локальной сети отправлять команды на устройство. Для этого нужно просканировать трафик который летит к кондиционеру при совершении каких-то действий в приложении. Решение простое - создаем точку доступа на ПК, подключаем к ней кондиционер и вооружаемся Wireshark сканируя нужный сетевой интерфейс. Проанализировав трафик я узнал, что команды летят с серверов Amazon, используя протокол MQTTS - это проблема, валидного сертификата у меня нет.

Оказалось я не первый озадачился идеей управления кондиционером через системы умного дома и нашел репозиторий на GitHub, где человек посредством реверс инжиниринга Android приложения TCL Home, определил к каким адресам отправляются запросы на аутентификацию и повторил это решение на node.js. Он использует Home Assistant для управления умным домом и соответственно, отправлял команды через него, а я пока далек от этих технологий, умного дома у меня нет :D Итого - у меня есть возможность аутентифицироваться в аккаунте TCL Home, но максимум что я могу сделать - узнать включен ли сейчас кондиционер.

Параллельно я обсуждал идею с товарищем, любителем IoT устройств. Он нашел репозиторий на GitHub повторяющий все функции приложения TCL Home и как оказалось это доработанное решение предыдущего автора под Home Assistant, но уже использующее MQTTS. Итого - у меня есть решение на python покрывающее мою задачу: отправлять валидные запросы на сервера Amazon.

Ресерч закончен. Начинается самое интересное - реализация приложения, выполняющего необходимые задачи. Вооружаемся node.js, повторяем реализацию аутентификации в TCL Home, получаем секреты и адрес облака. Благодаря второму репозиторию, я знаю названия команд, какие параметры и значения они принимают, а так же топик, в который нужно складывать команды. Реализуем подключение к облаку Amazon и отправку команд по MQTTS - для этого берем библиотеку от Amazon - aws-iot-device-sdk-v2 (документация отвратительная) Проверяем решение - работает как задумано, аутентификацию проходит, соединение устанавливается, команды выполняются.

Теперь финальный штрих, нужно реализовать интеграцию с Алисой. Для реализации подобной интеграции есть несколько вариантов, но т.к. я не официальный представитель TCL мне придется ограничиться навыком типа, "Алиса, запусти навык таролог" :D Дорабатываем приложение, реализуем веб-сервер с эндпоинтом для Алисы, сервис будет отправлять туда запросы. Реализуем "триггеры" для обработки команд - готово. Тестируем через консоль разработчика Яндекс - работает, управляем голосом через колонку - работает.

Осталась одна главная проблема - Алиса при запуске навыка начинает говорить много лишнего. Попытка решить это через сценарии Алисы, (алгоритм: запусти навык портативный кондиционер, пауза несколько секунд, включи/выключи) не дала результатов, работает не стабильно, периодически отправляя пустую команду на сервер. Если у кого-то есть идеи, как победить запуск через сценарии - делитесь, буду признателен.

Репозиторий с проектом не публикую, пользоваться этим не очень удобно да и сделано на коленке, если решусь доработать - обновлю пост и приложу ссылку.