Открыть порт 9898 xiaomi gateway: Открытие портов 4321 и 9898 на шлюзе Xiaomi Gateway 2 / Хабр
|Содержание
Открытие портов 4321 и 9898 на шлюзе Xiaomi Gateway 2 / Хабр
Введение
Отдыхая на новогодних праздниках, я загорелся идеей создания «Умного дома». Среди «народных» экосистем наиболее популярным в силу дешевизны и обилия всевозможных подключаемых устройств мне сразу показалось решение от Xiaomi. Сразу отказавшись от управления своим домом через китайские сервера (возможные задержки, безопасность и привязка к устройствам одного производителя), я принялся изучать всевозможные системы управления умным домом и подбирать для них совместимое оборудование.
После часов поисков я решил, что мне подходит Home Assistant. Строить всё на начальном этапе я решил с использованием Raspberry Pi 4 Model B (2GB) и датчиков от Xiaomi. Купив шлюз (нужна версия с артикулом DGNWG02LM) и включив протокол связи локальной сети, я столкнулся с тем, что порты 4321 и 9898, необходимые для интеграции в Home Assistant, по-прежнему остались закрытыми.
Убедиться в этом можно было через Nmap при помощи команды nmap -sU -Pn <IP ШЛЮЗА> -p 9898,4321,54321:
В статье я опишу, как открыть эти порты, и что для этого потребуется.
Подготовка
Не уверен, что можно размещать ссылки на конкретные магазины, поэтому укажу только цены, по которым я купил всё необходимое в Москве. Нам потребуются:
- Насадка U6 для отвёртки (она же SP6) — 36 руб
- Конвертер USB-to-TTL на базе Ch440 — 84 руб
- Соединительный кабель мама-папа — нужно минимум 3 штуки, но я взял набор из 40 штук за 110 руб
- Паяльник — у меня был 🙂
Приступаем к самому интересному
Все дальнейшие действия вы выполняете на свой страх и риск. Вскрытие шлюза лишает вас гарантии.
Первым делом необходимо снять три резиновых накладки, которые закрывают винты. Накладки не приклеены, просто поддеваем их чем-то тонким: я использовал нож.
Под одной из накладок будет гарантийная пломба. Это точка невозврата.
Открутив винты, аккуратно открываем шлюз. В верхней его части находится динамик, подключенный проводами к плате на нижней части. Отсоединяем провода, чтобы ничего не мешало.
К плате шлюза потребуется припаять три кабеля. С двумя точками всё ясно, третья — сбоку на кнопке. Места обозначены на картинке:
У нас получится нечто такое:
На следующем этапе необходимо настроить подключение для конвертера. Убираем с конвертера перемычки (при покупке у меня она стояла на VCC и 3V3), подключаем его к порту USB 2.0.
На Windows 10 драйвера загрузились сами, в диспетчере устройств появилось подключение по порту COM3 (запомните его, в дальнейшем пригодится).
В свойствах нашего устройства переходим во вкладку «Параметры порта» и меняем значения:
- «Бит в секунду» на 115200
- «Управление потоком» на Нет
На всякий случай можно свериться со скриншотом:
С настройкой конвертера мы закончили, вытаскиваем его из USB-порта. Переходим к подключению шлюза: соединяем его TX с RX конвертера, а GND с GND. RX шлюза пока не подключаем.
Включаем шлюз в розетку. Если всё сделали правильно, он начнёт мигать синим. Дожидаемся полной загрузки (мигания прекратятся) и подключаем конвертер в тот же USB-порт, что и на этапе настройки.
Запускаем PuTTY от имени администратора. В разделе «Session» меняем «Connection type» на Serial. В полях «Serial line» и «Speed» указываем порт, который мы запоминали ранее (в моём случае — COM3), и 115200:
В разделе «Serial» проверяем, чтобы был указан наш COM-порт, «Speed (baud)» — 115200 и «Flow control» — None.
Возвращаемся в раздел «Session» и подключаемся к шлюзу. Если всё сделали правильно, в консоли появится читаемый текст. У меня он выглядел вот так:
Далее необходимо подключить 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 проверяем порты. В моём случае они оказались открыты!
Открытие портов в Xiaomi Gateway и интеграция через LAN протокол – Мир в фотоисториях
Такие посты довольно не типичны для меня и формата блога, но как я писал раньше мы ведем дневничок, а не какой-то журнал определенного формата. Сием постом официально открываю рубрику “умного дома” и постараюсь освещать идеи и темы, которые мне показались интересными.
О полной конфигурации будет как-нибудь отдельный пост, а сейчас статья в стиле “чтоб не забыть”.
Проблема закрытых портов на Xioami Gateway 2 (Lumi.gateway.v3) оказалась серьезным препятствием в автоматизации и создании умного дома (smart home). Так как продукты Xiaomi можно использовать в других системах автоматизации как OpenHub, IoBrocker, Node-Red или Home Assistant, то наличие открытых портов и активация LAN-протокола являются неотъемлемой частью этого процесса. Сейчас мы рассмотрим все возможные (надеюсь) сценарии, которые могут нам встретиться:
Как активировать LAN протокол
Настройка putty для работы в режиме serial
Подготовка Xiaomi Gateway для открытия портов
Открываем порты в Xiaomi Gateway
- Проблема возникает на шлюзах (Gateways) с прошивкой 1. 4.1_161.0143 или выше.
- Gateways с Firmware 1.4.1_159.0143 или ниже работают отлично после активирования LAN протокола.
- Gateways в которых LAN протокол был активирован до 1.4.1_159.0143, а прошивка обновлена потом, должны и дальше нормально работать.
Последовательность действий при покупке нового шлюза (gateway):
- Первым делом активируем LAN протокол. MiHome App будет всячески мешать выскакивающими окошками, но не сдавайтесь. как активировать будет чуть ниже.
- После этого обновляем ПО шлюза
- Тестируем все ли ок:
- Сразу в системе автоматизации
- Командой “nmap -sU GATEWAY_IP -p 9898,4321“
Если вы получили в ответ такое сообщение:
PORT STATE SERVICE
4321/udp closed rwhois
9898/udp closed monkeycom
MAC Address: 7C:49:хх:хх:хх:хх (Unknown)
То все плохо и придется немножко потрудиться, чтобы их открыть.
Как активировать LAN протокол
Открываем MiHome App. Среди устройств выбираем наш Gateway (в моем случае MiHub.HWR)
Идем в настройки
Дальше в раздел о программе.
И там усердно “тапаем” по версии пока не появятся два дополнительных пункта:
- Wireless communication protocol
- Hub Info
В Wireless communication protocol активируем единственный чекбокс. Все.
Подготовка Xiaomi Gateway для открытия портов
Для начала нам нужно будет разобрать сам девайс. Стоит обратить внимание, что понадобится специальная отвертка в виде рогатули, чтоб открутить шурупы. Как на картинках (нашел всяческие варианты в интернете) ниже находим контакты с которыми нам придется немножко повозиться. Именно к ним нам надо будет подключаться через UART модуль. Я пользовался этим Wingoneer CP2104 seriall Konverter USB 2.0 UART 6PIN
Wingoneer CP2104 seriall Konverter USB 2.0 UART 6PIN
Основная задача состоит в подключение UART к контактам шлюза. Я умудрился удержать пальцами контакта и другой рукой ввести команду для открытия порта, кто-то припаивает, а ниже нашелся универсальный способ: приклеить все скотчем. Считаю его просто самым лучшим методом.
Обязательно все нужно делать при выключенном шлюзе и UART конвертере.
Дальше очень важно учитывать, что Rх шлюза мы подключаем к Tх UART и Tх шкюза к Rх UART. GND я прицеплял к корпусу или к контактам кнопки сброса. Дальше настраиваем Putty, чтобы мы могли ввести команду для открытия портов. (описание ниже)
После того как все подключено, можно включать все шлюз в сеть и UART в USB.
Разные картинки разобранного шлюза.
Этот метод я имел ввиду.
Настройка putty для работы в режиме serial
По умолчанию у Putty в режиме serial не возможности копировать команды в окно терминала. Для этого в настройка нужно активировать Local echo как на картинке. Дальше в главном окне выбираем serial, COM порт к которому подключен UART.
Открываем порты в Xiaomi Gateway
После того как шлюз включили нужно подождать пока он полностью включится. После этого выполняем следующею последовательность действий:
- В putty в окно терминала вставляем “psm-set network.open_pf 3” и сразу же клавишу ввода. Я для подстраховки повторил это действие несколько раз, так как пару раз мою команду не принял шлюз из-за потока UDP пакетов, которые буквально разрывали на части мою команду.
- Для проверки проверяем командой: “psm-get network.open_pf”
- Перезапускаем шлюз и наслаждаемся проделанной работой.
Reddit — Погрузитесь во что угодно
Проведя пару дней, возясь с вещами Xiaomi Aqara и не имея возможности заставить работать беспроводные кнопки, я, наконец, понял это.
(Спасибо [этот пост] (https://www.reddit.com/r/homeassistant/comments/92yi12/traefik_and_homeassistant_docker/) от Eximo84)
Итак, что я использую:
Homeassistant в среде докеров с использованием docker-compose
Траефик
Шлюз Xiaomi (Акара)
Кнопки беспроводной связи Xiaomi (Gen-1)
Первая проблема, с которой я столкнулся, заключалась в том, что концентратор вообще не мог подключиться. Порт 9898 был открыт, так как я использовал метод uart.
Я исправил это, используя ключ, адрес Mac, а также IP-адрес хоста.
Это выглядит примерно так
сяоми_акара: discovery_retry: 10 шлюзы: - ключ: хххххххххххххх макинтош: 04cf8xxxxxx хост: 192.168.x.xx
Теперь шлюз Xiaomi должен появиться в вашем домашнем помощнике. Даже кнопки показывают, что вы подключились к шлюзу, но есть одна проблема. Кнопки не регистрируют нажатия.
Я думаю, это из-за обратного прокси-сервера, который использует traefik, и ему не разрешено использовать многоадресную рассылку.
Вы можете исправить это, зайдя в свой traefik.toml и добавив следующие строки под [file]
[файл] [бэкэнды] [backends.backend-homeassistant] [backends.backend-homeassistant.servers] [backends.backend-homeassistant.servers.server-homeassistant-ext] URL-адрес = "http://192.168.x.xx:8123" вес = 0 [интерфейсы] [frontends. frontend-homeassistant] backend = "бэкэнд-домашний помощник" пасхостхеадер = истина [frontends.frontend-homeassistant.routes] [frontends.frontend-homeassistant.routes.route-homeassistant-ext] правило = "Хост: hass.yourdomain.com"
После добавления этого в ваш traefik.toml вам также необходимо изменить файл docker-compose, так как теперь вы можете использовать network-mode: host вместо сети обратного прокси-сервера traefik.
Либо закомментируйте все под «ярлыками» и «сетями», либо удалите это.
Мой docker-compose теперь выглядит примерно так:
помощница по дому: container_name: домашний помощник изображение: домработница/помощница по дому порты: - '8123:8123' тома: - /root/докер/homeassistant/config:/config - /etc/localtime:/etc/localtime:ro перезапуск: всегда network_mode: хост
Убедитесь, что вы делаете «docker-compose up -d», чтобы обновить контейнер с новыми настройками. Теперь вы можете перезапустить свой контейнер traefik, вы можете использовать portainer или команду «docker-compose restart traefik».
После перезапуска ваш xiaomi aqara должен иметь возможность нормально подключаться, ваш домен + SSL-сертификат должны работать, а нажатия кнопок должны регистрироваться.
Я надеюсь, что это поможет кому-то, у кого такая же проблема. Если есть какие-либо вопросы, не стесняйтесь спрашивать!
Xiaomi Mi Mijia Gateway V3 ZNDMWG03LM попытаться открыть порт 9898 — xiaomibinding
coupeaze
(Ответ)
1
У меня проблема с открытием порта для нового Xiaomi Mi Gateway 3.
В конце хотелось подключить шлюз к моему Iobroker без облака xiaomi.
Я уже пробовал кое-что…
- Я выполнил несколько различных шагов, как описано в следующей теме:
«[РЕШЕНО] Openhab2 — Xiaomi Mi Gateway — не отвечает» - Я подключил GW, как показано на рисунке ниже… (без VCC+ (желтый))
2. 1 Скорость последовательного канала составляет 38400Xiaomi mijia Gateway V3 ZDMWG03LM_Binding_2004041422×1079 150 КБ
- Итак, я могу прочитать и получить несколько команд, но не могу передать ни одной
- Кто-нибудь знает, что мне делать, может @Ingo1977 ?
купе
(Ответ)
2
…and here a section of the recorded data:
=== RootFS Firmware ===
product=aqara-rtl8197-gateway
branch=develop
VERSION=1.4.4_0003
версия = 1.4.4_0003
== 10 == заводской тест не пройден, не удается запустить приложения!!!
== 9 == заводской тест не пройден, приложения не запускаются!!!
factory_test Время сборки: 20:16:38 15 ноября 2019 г.
== 8 == заводской тест не пройден, не могу запускать приложения!!!
file=/var/device_config,did=xxxxxxxx //изменено
key=xxxxxxxxxxxxxxxx //изменено
mac=00:00:00:00:00:00
934 model=lumi.gateway.mgl03
проверка сделала xxxxxxxx //изменено
*cat: не удается открыть ‘/device.conf’: нет такого файла или каталога *
cp: невозможно создать ‘/device. conf’: файловая система только для чтения
get_factory_result=1
размер gobal_cmd_list 4804
factory_dir:/data/factory!
miio_dir:/data/miio!conf_dir:/data/conf!
файл_версии:/etc/rootfs_fw_info!
порт ble uart: 1
порт zigbee uart: 2
порт homekit i2c: 1
factory udp_init!
Ввод cmd: [ 10.660000] store_tty0_enable buf=disable
[ 10.660000] , count=8
Ким_Андерсен
(Ким Андерсен)
3
Вы читали эту тему:
Фото из интернета, это не мое фото, но связь та же. Данные с моего устройства:
Номер версии: 272
网关ID:131875487
Zigbee通道:25
网关信息:
{«жизнь»:486863,»cfg_time»:0,»токен»:»9b5e8d7b5fb46b9afc5eab5572d2cb99″,»mac»:»04:CF:8C:8F:B1:CD»,»fw_ver»:»1.4.1_175″,» hw_ver»: «MW300», «модель»: «lumi.gateway.v3», «mcu_fw_ver»: «0220», «wifi_fw_ver»: «SD878x-14.76.36.p84-702.1.0-WM», «ap» :{«rssi»:-65,»ssid»:»грибы»,»bssid»:»C4:6E:1F:99:B9:91″},»netif»:{«localIp»:»192.168.1.127″,»маска»:»255.255.255.0″,»…
Кажется, существуют разные платы шлюза V.3.
Виктор Романчук
(Виктор Романчук)
4
Наверное я тупой, но эта тема началась в 2018 году про обновленную версию Xiaomi miija, такую же как у меня 🙁
Ingo1977
(Инго1977)
5
@coupeaze Думаю, пока никому не удалось открыть порт 9898 на этом многорежимном шлюзе. Кстати. спасибо за открытие этой новой темы. Вы добились успеха за это время?
Кто-нибудь еще может здесь поддержать?
Инго1977
(Инго1977)
6
Может ли кто-нибудь помочь нам со шлюзом?
Инго1977
(Инго1977)
7
@Victor_Romanchuk Это новый шлюз Xiaomi, поддерживающий также устройства Zigbee 3. Но пока мы с @coupeaze не можем открыть порт 9898 для связи. Не могли бы вы помочь или поддержать?
Виктор_Романчук
(Виктор Романчук)
8
Насколько я понимаю, это апгрейд, но второй версии. Я купил его давно. К сожалению, я не нашел решения, выкинул это устройство и успешно установил флешку CC2531 с помощью mqtt2zigbee. Это работает и полезно
Ingo1977
(Инго1977)
9
У этого устройства есть большое преимущество, и это его диапазон! Поэтому я хочу использовать его локально и отключить интернет-соединение. Кроме того, он поддерживает устройства Zigbee 3.0, что также является большим плюсом. Нам просто нужно идентифицировать контакт RX, и тогда мы, вероятно, сможем найти решение, используя это устройство.
Инго1977
(Инго1977)
10
@coupeaze Можешь выложить фото и с другой стороны латины?
Можете ли вы посмотреть, какие чипы (имена) используются, и перечислить их здесь?
Затем мы можем поискать информацию в Интернете…
marcel_verpaalen
(Марсель)
11
Виктор Романчук:
Насколько я понимаю, это апгрейд, но второй версии. Я купил его давно. К сожалению решения не нашел, выкинул этот девайс
Если есть кто-то, кто не может сейчас использовать свой шлюз и не против поэкспериментировать
, я хотел бы попробовать, может ли он общаться с протоколом miio.
Просто для ясности: это будет означать либо отправку вашего устройства, либо совместное использование его в micloud. (или разрешите мне удаленный доступ к OH karaf ssh, который может «видеть» шлюз, не обязательно должен быть «рабочим»)
Примечание: моя цель — установить с ним связь без необходимости вскрытия/пайки.
купе
(Ответ)
12
До сих пор мне не удавалось. Я могу читать только информацию через Putty, вот и все.
Ниже вы можете увидеть другую сторону доски.