Что скрывает тупой пульт в вашем умном доме

В свободное от работы время занимаюсь хобби — экспериментирую с умным домом на базе Home Assistant (HA) и окружающей его программно-аппаратной инфраструктурой в виде различных медиасервисов, сервисов мониторинга и прочего.

Мой умный дом сейчас насчитывает несколько десятков различных устройств в основном из экосистемы Tuya. Из них есть как различные датчики температуры, влажности, движения, присутствия, открытия, обнаружения влаги, электромониторинга, так и различные реле, переключатели, пульты, кнопки и прочее. Например реализована система обнаружения и предотвращения протечек через шаровые краны с электроприводом и двухканальное реле. При срабатывании любого датчика протечки вода перекрывается на ввод в квартиру, а мне приходит уведомление в Telegram.

Почти все устройства у меня работают по протоколу Zigbee. Привожу его краткое описание:

Zigbee — это беспроводной протокол для IoT, работающий на частоте 2.4 ГГц (как Wi-Fi, но с меньшим энергопотреблением). Его ключевые особенности:   

  • Сеть с ячеистой топологией (mesh) — устройства ретранслируют сигнал, увеличивая покрытие.  

  • Низкое энергопотребление — идеально для датчиков (например, Xiaomi Aqara).  

  • Локальная работа — в отличие от облачных решений, Zigbee может функционировать без интернета.

На прикладном уровне в Home Assistant для работы с Zigbee обычно используются интеграции типа Zigbee Home Automation (ZHA) или Zigbee2MQTT (Z2M), которые у меня работают одновременно через usb-донглы Sonoff. Сам Zigbee2MQTT — это мост между Zigbee-гаджетами и Home Assistant, который обеспечивает двунаправленную коммуникацию посредством MQTT-сообщений. 

Преимущества Zigbee2MQTT:   

  • Универсальность — поддерживает огромное количество устройств, даже те, что несовместимы с официальными хабами (например, Tuya).  

  • Гибкость — все команды и события видны в MQTT, их можно анализировать и писать автоматизации на их основе.  

  • Локальный контроль — опять же, никакого облака, все данные внутри локальной сети. 

Однажды столкнулся с необходимостью управлять некоторыми устройствами через ИК-канал и я решил попробовать это реализовать с помощью устройства от MOES UFO-R11, которое представляет собой универсальный пульт для умного дома, который может имитировать сигнал от любых ик-пультов (в данном случае пульт от телевизора TCL).

Под спойлером фото обоих пультов.

Скрытый текст
Пульт TCL RC902V FMR5
Пульт TCL RC902V FMR5
MOES UFO-R11
MOES UFO-R11

В спальне, где это сейчас требуется, у меня располагается телевизор TCL на базе Android и не инверторная сплит-система Rapid. 

Предполагалось использовать пока два главных сценария на оба устройства: включение и выключение, так как телевизор у меня так и не захотел включаться по Wake-on-Lan, а для кондиционера этот ик-протокол вообще единственный, ибо в нём даже wi-fi модуль не предусмотрен. Позже, вероятно, появятся другие сценарии, т.к. тут их можно реализовать любые, которые поддерживает пульт или завязанные на любые другие сценарии и автоматизации, которые связаны с другими устройствами. Например выключить телевизор, при моём засыпании или автоматизировать работу кондиционера.

Находка

Чтобы я мог эмулировать команды пульта, мне нужно обучить мой «умный» пульт. Само обучение выглядит так: мне нужно включить режим обучения пульта в интерфейсе Z2M в HA и нажать на «пульте-учителе» кнопку, нажатие которой нужно имитировать на «умном» пульте. В данном случае это кнопка включения.

Интерфейс Home Assistant в процессе обучения пульта
Интерфейс Home Assistant в процессе обучения пульта

В результате получается текстовая команда, с помощью которой далее следует создать автоматизацию включения/выключения телевизора которая на данный момент у меня успешно работает.

На этом статью можно было бы завершить, если бы не моё праздное любопытство. На скриншоте видно строку, похожую на base64 и я решил попробовать расшифровать и посмотреть, что она из себя представляет: закинул полученную команду в base64decode.org для декодирования. На первый взгляд тут также не было совершенно ничего осмысленного, и вменяемого ни с UTF-8, ни с ASCII или другими широко используемыми кодировками не выходило, но тут я случайно выбрал UTF-16LE, и, внезапно, получил китайские символы.

Кнопка включения на пульте при декодировании из base64
Кнопка включения на пульте при декодировании из base64

Это заинтриговало меня ещё больше, и я решил попробовать перевести их через Google Translate. В результате чего получился следующий текст:

Кнопка включения на пульте при декодировании из base64. Перевод
Кнопка включения на пульте при декодировании из base64. Перевод

Далее я начал проверять, что зашифровано в других кнопках, это кнопка «настройки»:

Кнопка
Кнопка «настройки». Расшифровка команды.
Кнопка
Кнопка «настройки». Перевод команды.
Кнопка
Кнопка «Wink. Расшифровка команды
Кнопка
Кнопка «Wink». Перевод команды.

Ещё я выяснил, что при нажатии на одну и ту же кнопку, если до этого были нажаты другие, появляются другие команды. То есть с самого начала на кнопке включения я видел одну команду, а теперь тут появилась другая:

Кнопка
Кнопка «Вкл». Расшифровка команды
Кнопка
Кнопка «Вкл». Перевод команды

Ещё несколько кнопок:

Кнопка
Кнопка «Назад». Расшифровка команды
Кнопка
Кнопка «Назад». Перевод команды
Какая-то из кнопок медиасервисов. Перевод команды
Какая-то из кнопок медиасервисов. Перевод команды

Интересно, не правда ли?

Я попробовал погуглить по итогу что бы могли значить эти даты, что это был за чемпионат и ничего интересного не получил. Вообще про этот год есть только одно упоминание о футбольном клубе «Ляонин» связанное с чемпионатом. Ну и ещё что-то про события на площади Тяньаньмэнь, но это в следующем году.

Далее я решил прогнать несколько полученных фраз через дипсик и результат меня сильно удивил, если не сказать, что шокировал, честно говоря

Попытка узнать у Depseek значение закодированных фраз.
Попытка узнать у Depseek значение закодированных фраз.
Попытка узнать у Depseek значение закодированных фраз. Продолжение
Попытка узнать у Depseek значение закодированных фраз. Продолжение

А ещё после этого запроса в китайских сервисах что-то сломалось и дипсик теперь разговаривает со мной почему-то только по-китайски.

45d77ee84531e394dfc03bdebb969d81.png

Заключение

У меня до сих пор остаётся много вопросов к моему сегодняшнему открытию и я надеюсь собрать всё, что я нашёл в единую картину, чтобы понять что происходит. Сейчас проверяю остальные кнопки на пульте и судя по информации, в них есть какая-то последовательность, но я ещё не понял что за чем идёт. Надеюсь сегодня успеть дешифровать остальное, после чего опубликую продолжение.

Также постараюсь найти носителя языка и задать им несколько вопросов.

Если у кого-то есть соответствующие знания — подключайтесь. Также прошу всех, кто пользуется HA и Z2M проверить что зашифровано в их пультах.

© Habrahabr.ru