Stupid House

Включение ethernet порта в Xiaomi Gateway 3, автоматизация для Home Assistant


Включение 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
xiaomi gateway 3 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.

xiaomi gateway 3 ethernet port

Аккуратно просверливаем в корпусе отверстие для провода, для 4х парной витой пары подойдет сверло на 6. Собираем корпус.

xiaomi gateway 3 ethernet wire

На обратном конце провода вешаем розетку RJ-45, согласно схемам подключения витой пары, T568A или T568B (1 - Tx+, 2 - Tx-, 3 - Rx+, 6 - Rx-), на картинке выше распаяно по схеме T568B.

xiaomi gateway 3 ethernet socket

Подключаем маршрутизатор к коммутатору по порту 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 адрес бриджа), от чего сетевое оборудование может работать не корректно (зависит от оборудования). Подобные проблемы могут быть связаны как с подключением (кабель, розетка, порт, плохая пайка), так и с оборудованием.

Автор: muxa, 25.05.2021
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии