Диагностика подключения zigbee-шлюза Xiaomi
Для взаимодействия с zigbee-устройствами из экосистемы Xiaomi в MajorDoMo используется модуль Xiaomi Home в связке со шлюзами Mijia и Aqara с активированным режимом работы в локальной сети (gateway LAN communication protocol, режим разработчика).
В большинстве случаев все работает "из коробки", и достаточно лишь установить сам модуль и активировать режим разработчика на шлюзе. Но при определенных обстоятельствах возможны ситуации, когда в модуле не добавляются устройства или не обновляются данные от них. Универсальных способов решения подобных проблем нет, т. к. многое зависит от конкретных ситуаций и условий эксплуатации MajorDoMo и оборудования Xiaomi (топология сети, настройки роутера, настройки ОС сервера, перечень ПО сервера, настройки модуля и т.п., и т.д.)
Далее приводится ориентировочный список способов диагностики и разрешения проблемных ситуаций.
1. Настройки модуля Xiaomi Home
В поле Bind IP вместо пустого значения указать адрес 224.0.0.50 или локальный IP сервера из того же сегмента сети, что и шлюз (пробовать оба варианта). Также для дальнейшей отладки включить все логи -"отладка DebMes", "отладка Cycle", "включать в лог heartbeat от шлюзов". Для вступления изменений в силу требуется перезапустить цикл модуля.
2. Цикл модуля модуля Xiaomi Home
Должен быть запущен (зеленый индикатор в интерфейсе модуля и зеленый статус в X-Ray). В логе цикла не должно быть записей о его постоянной остановке.
3. Режим разработчика на шлюзе
Должен быть включен. Включается либо в приложении Mihome, либо в модуле Xiaomi miIO при наличии токена шлюза. Чтобы убедиться, что режим активен, можно просканировать открытые порты шлюза (nmap), сниффить сетевые пакеты (tcpdump, wireshark) или отловить сообщения (reports) от шлюза (MiHomeAdmin, Multicast Tester).
3.1 Сканирование портов
Команда для nmap:
1 |
nmap -sU -Pn IP-шлюза -p 9898,4321,54321 |
Должен быть открыт порт 9898/udp.
3.2 Захват сетевых пакетов
На Linux консольная команда для tcpdump:
1 |
sudo tcpdump dst port 9898 -X |
На Windows использовать Wireshark по аналогии.
В идеале выполнять на самом сервере с MajorDoMo.
3.3 Просмотр репортов шлюза
На Windows с помощью утилиты MiHomeAdmin. Вкладка Events.
На Android приложение Multicast Tester. IP адрес указать 224.0.0.50, порт - 9898.
4. Межсетевой экран и антивирус
На время диагностики полностью отключить, а в идеале - удалить. В том числе касается разного рода штатных защитников, встроенных в ОС. Если отключать АВ и МЭ неприемлемо, то настраивать на свободное прохождение UDP multicast траффика на портах 9898 и 4321. Мультикаст адрес группы 224.0.0.50. Для правил на уровне приложений добавить в доверенные PHP-процесс цикла модуля.
5. Настройки wifi-роутера и топология сети
Сервер и шлюз должны находиться в одном сегменте локальной сети, внутри которого должны свободно маршрутизироваться мультикаст-пакеты от шлюза. Если сервер также подключен через wifi, то проверить на роутере опцию "Изоляция wifi-клиентов" и отключить ее, если она активна.
6. Порт web-сервера MajorDoMo
Если используется не стандартный порт web-сервера Apache (80), то проверить и при необходимости указать корректный порт в файле конфигурации MajorDoMo - config.php.
7. Настройки операционной системы
Если сетевой интерфейс сервера не включен в мультикаст группу 224.0.0.50, то необходимо сделать это вручную.
Для Linux:
1 |
sudo smcroute -j eth1 224.0.0.50 |
где eth1 заменить на свой.
8. Особенности ОС Windows 10
На Windows 10 имеется ряд проблем с обработкой и маршрутизацией мультикаст траффика, которые с попеременным успехом решаются следующими способами.
8.1 Отключить IPv6 в настройках сетевого интерфейса.
8.2 Скорректировать таблицу маршрутизации.
В командной строке от имени администратора выполнить:
1 2 |
route delete 224.0.0.0 mask 240.0.0.0 route add -p 224.0.0.0 mask 240.0.0.0 192.168.21.100 |
где 192.168.21.100 заменить на свой IP (адрес интерфейса сервера).
8.3 Удалить обновление KB4103721 или внести изменение в реестр ОС.
1 2 |
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters] "AllowEncryptionOracle"=dword:00000002 |
После каждого изменения нужно перезагружать ОС!
Важно! Особенности активации режима разработчика на некоторых шлюзах.
На некоторых экземплярах шлюзов Xiaomi Mijia Gateway, у которых, если не был активен LAN mode (режим разработчика) и было выполнено обновление прошивки, то после обновления его уже невозможно включить. Видимость включения режима есть, но порты 9898, 4321 при этом закрыты, и в локальной сети нет мультикаст-пакетов от шлюза.
Для решения проблемы предлагается:
1. После покупки не обновлять прошивку шлюза! Сначала активировать режим разработчика, убедиться, что он работает, и только потом обновляться.
2. Восстановить работоспособность режима разработчика через UART шлюза. Нужен паяльник, адаптер USB to UART, отвертка и компьютер. Разобрать шлюз, припаять к его UART соединительные провода, подключить через адаптер к компьютеру и подключиться к консоли шлюза (подробнее здесь). Затем для активации режима разработчика, выполнить в консоли несколько команд в соответствии с этой инструкцией.
Внимание! Если вы обращаетесь с вопросом на форуме и телеграм-чате, то сразу прикладывайте максимум информации:
- Версия и модель шлюза.
- Версия прошивки шлюза.
- Версия операционной системы.
- Способ подключения сервера к локальной сети (ethernet, wifi).
- IP-адреса сервера и шлюза.
- Скриншоты главной страницы модуля и его настроек.
- Скриншот вкладки Services из X-Ray.
- Лог цикла модуля (log_дата_cycle_xiaomihome.php.txt).
- Лог самого модуля (дата_xiaomi.log).
- Содержимое файла hosts.
- Результат команды netstat -ab -p UDP (для windows).
- Результат команды route print (для windows).
- Результат команды netsh interface ipv4 show joins (для windows).
- Результат команды sudo netstat -avpu (для linux).
- Результат команды sudo netstat -r (для linux).
- Результат команды sudo netstat -g (для linux).