Включение ethernet порта в Xiaomi Gateway 3, автоматизация для Home Assistant
Самый лучший Wi-Fi - это провод (админская мудрость). Те, кто подключал Xiaomi Gateway 3 к Home Assistant и разбирал устройство чтобы добраться до технических контактов наверно знают, что на плате есть выводы ethernet порта. По умолчанию порт отключен на уровне прошивки устройства, но т.к. к устройству можно получить доступ по telnet, то включить порт не составляет труда.
Общее описание
Интерфейсы Wlan и Ethernet объединены в один бридж, при загрузке устройства стартовый скрипт гасит порт Ethernet и запускает порт Wlan, после успешного подключения IP адрес получает бридж.
В ручную это выполняется так:
# telnet gateway3_ip_address rlxlinux login: admin # ifconfig eth0 up | ifconfig wlan0 down
После смены активных интерфейсов проверяем, что интерфейс wlan0 отключен и вместо него работает интерфейс eth0:
# ifconfig
Пароль на подключение отсутствует. Обе команды (на включение ethernet и отключение wlan) следует отправлять в одной строке т.к. если сначала поднять ethernet, то, поскольку оба интерфейса находятся в одном бридже, трафик пойдет с обоих интерфейсов и как к этому отнесется сетевое оборудование предсказать сложно.
Доступ к telnet по умолчанию есть не на всех прошивках Xiaomi Gateway 3, как прошить шлюз и подключить его к Home Assistant описано в статье: Xiaomi Gateway 3 - подключение к Home Assistan и в проекте разработчика расширения для Home Assistant позволяющего подключать шлюз к Home Assistant.
Подключение Ethernet
Разбираем шлюз. Видеоинструкция на YouTube.
Берем небольшой кусок провода UTP-5 и припаиваемся к контактам порта ethernet на плате. Достаточно будет 2х парного провода т.к. на плате всего четыре контакта, максимальная скорость подключения составит 100MBit.
Аккуратно просверливаем в корпусе отверстие для провода, для 4х парной витой пары подойдет сверло на 6. Собираем корпус.
На обратном конце провода вешаем розетку RJ-45, согласно схемам подключения витой пары, T568A или T568B (1 - Tx+, 2 - Tx-, 3 - Rx+, 6 - Rx-), на картинке выше распаяно по схеме T568B.
Подключаем маршрутизатор к коммутатору по порту ethernet. Проверяем что все работает, включив порт.
Автоматизация в Home Assistant
Включение Ethernet и отключение Wlan интерфейсов в Home Assistant будет производиться через Shell скрипт, для отображения состояния шлюза (online/offline) создадим сенсор, проверка доступности шлюза будет производиться командой ping. Должно работать на всех Unix системах.
В папке ~/homeassistant/packages
создаем файл gateway_3.yaml
. Создаем сенсор, отображающий состояние шлюза:
binary_sensor: - platform: ping host: 192.168.18.23 name: "xiaomi_gateway_3_state" count: 2 scan_interval: 30
- Platform: ping - проверка устройства пакетом ping.
- Host - адрес устройства.
- Name - наименование сенсора.
- Count - количество подтвержденных запросов для смены состояния сенсора.
- Scan_interval - частота отправки запросов.
Прописываем путь к скрипту выполняющего подключение к шлюзу по telnet и меняющему состояние интерфейсов:
shell_command: gateway3_eth0: ~/.homeassistant/.shell/gateway3_eth0
Автоматизация запускающая скрипт:
automation: - id: sxg3_device_available alias: System - Device available - Gateway 03 trigger: - platform: state entity_id: binary_sensor.xiaomi_gateway_3_state from: 'off' to: 'on' condition: [] action: - service: shell_command.gateway3_eth0 mode: single
Логика автоматизации такова, что если сенсор xiaomi_gateway_3_state
переходит из состояния OFF в состояние ON, то выполняется скрипт.
Для подключения к telnet устройства через скрипт в систему необходимо установить ПО expect
. Для Ubuntu/Raspberry OS это будет так:
$ sudo apt-get update $ sudo apt-get install expect
В папке ~/homeassistant/
создаем папку .shell
. В папке .shell
создаем файл gateway3_eth0
:
$ mkdir /homeassistant/homeassistant/.shell $ touch /homeassistant/homeassistant/.shell/gateway3_eth0
Текст скрипта:
#!/usr/bin/expect spawn telnet 192.168.18.23 expect "rlxlinux login:" send "admin\r" expect "#" send "ifconfig eth0 up | ifconfig wlan0 down\r" expect "#" send "exit\r" expect eof
Найденные проблемы
При потере связи шлюз гасит Ethernet интерфейс и включает Wlan. Может случиться так, что связь по Wlan будет, а по Ethernet нет, но скрипт будет отрабатывать переключение с Wlan на Ethernet, что может привести к циклическому отваливанию шлюза. В тестовых условиях из-за такого поведения удалось получить состояние устройства, когда оба интерфейса активированы, а т.к. они включены в один бридж, то получается, что трафик идет с обоих интерфейсов, с одним MAC адресом (MAC адрес бриджа), от чего сетевое оборудование может работать не корректно (зависит от оборудования). Подобные проблемы могут быть связаны как с подключением (кабель, розетка, порт, плохая пайка), так и с оборудованием.