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

от автора

В свободное от работы время занимаюсь хобби — экспериментирую с умным домом на базе 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. Расшифровка команды
Кнопка “Wink”. Перевод команды.

Кнопка “Wink”. Перевод команды.

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

Кнопка “Вкл". Расшифровка команды

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

Кнопка “Вкл». Перевод команды

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

Кнопка “Назад". Расшифровка команды

Кнопка “Назад». Расшифровка команды
Кнопка “Назад". Перевод команды

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

Какая-то из кнопок медиасервисов. Перевод команды

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

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

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

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

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

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

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

Заключение

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

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

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


ссылка на оригинал статьи https://habr.com/ru/articles/897572/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *