Введение
Отдыхая на новогодних праздниках, я загорелся идеей создания «Умного дома». Среди «народных» экосистем наиболее популярным в силу дешевизны и обилия всевозможных подключаемых устройств мне сразу показалось решение от Xiaomi. Сразу отказавшись от управления своим домом через китайские сервера (возможные задержки, безопасность и привязка к устройствам одного производителя), я принялся изучать всевозможные системы управления умным домом и подбирать для них совместимое оборудование.
После часов поисков я решил, что мне подходит Home Assistant. Строить всё на начальном этапе я решил с использованием Raspberry Pi 4 Model B (2GB) и датчиков от Xiaomi. Купив шлюз (нужна версия с артикулом DGNWG02LM) и включив протокол связи локальной сети, я столкнулся с тем, что порты 4321 и 9898, необходимые для интеграции в Home Assistant, по-прежнему остались закрытыми.
Убедиться в этом можно было через Nmap при помощи команды nmap -sU -Pn <IP ШЛЮЗА> -p 9898,4321,54321:
![image](https://habrastorage.org/webt/ta/rh/hl/tarhhleh9pcv7fmpaebftwvciuq.png)
В статье я опишу, как открыть эти порты, и что для этого потребуется.
Подготовка
Не уверен, что можно размещать ссылки на конкретные магазины, поэтому укажу только цены, по которым я купил всё необходимое в Москве. Нам потребуются:
- Насадка U6 для отвёртки (она же SP6) — 36 руб
- Конвертер USB-to-TTL на базе CH340 — 84 руб
- Соединительный кабель мама-папа — нужно минимум 3 штуки, но я взял набор из 40 штук за 110 руб
- Паяльник — у меня был :)
Приступаем к самому интересному
Все дальнейшие действия вы выполняете на свой страх и риск. Вскрытие шлюза лишает вас гарантии.
Первым делом необходимо снять три резиновых накладки, которые закрывают винты. Накладки не приклеены, просто поддеваем их чем-то тонким: я использовал нож.
![image](https://habrastorage.org/webt/zf/bi/qs/zfbiqsiq4yzt6xqk4rjwgerodcm.jpeg)
Под одной из накладок будет гарантийная пломба. Это точка невозврата.
Открутив винты, аккуратно открываем шлюз. В верхней его части находится динамик, подключенный проводами к плате на нижней части. Отсоединяем провода, чтобы ничего не мешало.
![image](https://habrastorage.org/webt/od/zu/6d/odzu6db1a8_ky6wic1lrtnfxunw.jpeg)
К плате шлюза потребуется припаять три кабеля. С двумя точками всё ясно, третья — сбоку на кнопке. Места обозначены на картинке:
![image](https://habrastorage.org/webt/h5/-x/1v/h5-x1vvavmnokro2iojyysyn76q.jpeg)
У нас получится нечто такое:
![](https://habrastorage.org/webt/_a/g0/he/_ag0hesnmhhb2e7zk9hs1g4d-tg.jpeg)
На следующем этапе необходимо настроить подключение для конвертера. Убираем с конвертера перемычки (при покупке у меня она стояла на VCC и 3V3), подключаем его к порту USB 2.0.
На Windows 10 драйвера загрузились сами, в диспетчере устройств появилось подключение по порту COM3 (запомните его, в дальнейшем пригодится).
![](https://habrastorage.org/webt/ar/iw/ew/ariwewaznpdg4oothlkls-mogl8.png)
В свойствах нашего устройства переходим во вкладку «Параметры порта» и меняем значения:
- «Бит в секунду» на 115200
- «Управление потоком» на Нет
На всякий случай можно свериться со скриншотом:
![](https://habrastorage.org/webt/df/g0/dr/dfg0drfos-u5pbh2t2nj_rpihx4.png)
С настройкой конвертера мы закончили, вытаскиваем его из USB-порта. Переходим к подключению шлюза: соединяем его TX с RX конвертера, а GND с GND. RX шлюза пока не подключаем.
Включаем шлюз в розетку. Если всё сделали правильно, он начнёт мигать синим. Дожидаемся полной загрузки (мигания прекратятся) и подключаем конвертер в тот же USB-порт, что и на этапе настройки.
Запускаем PuTTY от имени администратора. В разделе «Session» меняем «Connection type» на Serial. В полях «Serial line» и «Speed» указываем порт, который мы запоминали ранее (в моём случае — COM3), и 115200:
![](https://habrastorage.org/webt/d_/sc/lb/d_sclb65priuudogh09janyh8dg.png)
В разделе «Serial» проверяем, чтобы был указан наш COM-порт, «Speed (baud)» — 115200 и «Flow control» — None.
![](https://habrastorage.org/webt/vh/c3/hh/vhc3hh2c3gdi4lzmmereg-hdtqo.png)
Возвращаемся в раздел «Session» и подключаемся к шлюзу. Если всё сделали правильно, в консоли появится читаемый текст. У меня он выглядел вот так:
![](https://habrastorage.org/webt/tw/aa/nj/twaanjonw54dshlwypcamd71lro.png)
Далее необходимо подключить RX шлюза к TX конвертера. Ошибок в консоли быть не должно. У меня продолжил появляться читаемый текст — на этот раз в формате JSON.
Вводим команду psm-set network.open_pf 3 и нажимаем Enter.
В некоторых видео и статьях, которым я следовал, написано, что в консоли должен появиться какой-то ответ. После ввода команды я подождал около минуты, но ответа не последовало. В консоли лишь изредка мелькали новые записи. Поэтому, на всякий случай, попробовал три других варианта команды:
- psm-get network open_pf 3 (пробел вместо точки)
- #psm-get network.open_pf 3 (после любой записи в консоли нажимаем Enter, чтобы появилась #, и пишем команду)
- #psm-get network open_pf 3 (аналог предыдущей, но с пробелом)
После четырёх попыток ответа я не дождался и решил проверить, не открылись ли порты. Для этого нужно отключить конвертер и перезагрузить шлюз, вытащив его из розетки. Не подключая конвертер к компьютеру, включаем шлюз и дожидаемся загрузки. После этого командой nmap -sU -Pn <IP ШЛЮЗА> -p 9898,4321,54321 проверяем порты. В моём случае они оказались открыты!
![image](https://habrastorage.org/webt/9y/lx/pf/9ylxpfv2a9zr_pbupu5s-hodjvs.png)
troyanskiy
День добрый.
Это все, конечно, интересно, но… У меня такой же шлюз спокойненько работает с HA и нужные порты открыты.
Вы пробовали читать доку тут www.home-assistant.io/integrations/xiaomi_aqara? А этой доке есть сылка на Adding_the_Xiaomi_Gateway_to_Domoticz, где указано как ввести шлюз в режим разработчика.
barkalov
Я не знаю, как дело обстоит сейчас. Но полгода назад было так, что если сначала по воздуху обновить прошивку шлюза, и только потом включить на нём режим разработчика, то он окажется недоступным. И вернуть режим разработчика можно уже можно будет только с помощью UART.
wowgamr Автор
Новые ревизии шлюзов (надпись около вилки идёт по кругу) поставляются с последней прошивкой. Там порты изначально закрыты, по-другому их не открыть.
На старых версиях с этим было проще.
DaemonGloom
Тут всё ещё забавнее стало сейчас. Потому что под именем DGNWG05LM могут продаваться как минимум, две разных модели. Одна из них идентична вашей (только с европейской вилкой) и подключается через uart, другая внешне выглядит точно таким же образом, имеет те же маркировки, но содержит внутри другую плату. И не разблокируется совсем. Можно только перепрошить на сторонний софт, в котором лишь часть вещей поддерживаются. Так что надо быть крайне внимательным при покупке и проверять не только надпись на корпусе, но и идентификацию устройства в Mi Home (будет что-то типа lumi.gateway.mieu01 в неудачном случае). Плата неудачника выглядит так: user-images.githubusercontent.com/39265343/66909562-a2557600-f015-11e9-81fc-6d921247d803.png
wowgamr Автор
Подозреваю, что у вас не Xiaomi Gateway, а Aqara Gateway. Для Home Assistant подходит только та модель второй версии шлюза, которую я написал в статье.
wowgamr Автор
А нет, я ошибся. Это шлюз, который в наборе с датчиками для Европы идёт.
tmin10
Проверил сейчас свой, режим разработчика активен, открыты только 2 UDP порта, 5353 и 54321.