Запуск matter-thead OTBR на МТС_360
Устанавливаем OpenWrt 25.12.2
В web интерфейсе OWRT "System" -> "Software" -> "Configure apk"

В /etc/apk/repositories.d/distfeeds.list
Закомментировать последнюю строку #
В /etc/apk/repositories.d/customfeeds.list
Добавить ссылку на репозитарий HOMEd
https://apk.homed.dev/arm_cortex-a7_neon-vfpv4/packages.adb
В терминале:
# 1. добавляем ключ HOMEd
wget -O /etc/apk/keys/homed.key https://apk.homed.dev/apk.key
# 2. Обновляем списки пакетов
apk update
apk upgrade
2. Устанавливаем полезные пакеты
apk add luci-lua-runtime kmod-tun mosquitto-ssl curl openssh-sftp-server openocd mc mc-skins htop kmod-tun ipset ip6tables avahi-daemon dbus kmod-hci-uart
3. Правим конфиг mosquito. /etc/mosquito/mosquitto.conf Добавляем в конец файла
listener 1883
listener 9001
protocol websockets
allow_anonymous true
6. Удаляем сетевые интерфейсы. Делаем из устройства точку доступа. Новый IP получаем с основного роутера в сети.
# Отключаем DHCP-сервер на LAN
uci set dhcp.lan.ignore='1'
uci commit dhcp
# LAN как DHCP клиент
uci set network.lan.proto='dhcp'
uci -q delete network.lan.ipaddr
uci -q delete network.lan.netmask
uci -q delete network.lan.gateway
uci -q delete network.lan.dns
# Удаляем лишние интерфейсы
uci -q delete network.wan
uci -q delete network.wan6
uci -q delete network.wwan
# Настраиваем bridge br-lan
uci -q delete network.@device[0]
uci set network.@device[0]='device'
uci set network.@device[0].name='br-lan'
uci set network.@device[0].type='bridge'
uci -q delete network.@device[0].ports
uci add_list network.@device[0].ports='eth0'
uci add_list network.@device[0].ports='wlan0' # или phy0-ap0
uci commit network
/etc/init.d/network restart
6. Прошивка радио Thread nRF52840 (RCP). Про zigbee можете забыть. Его больше нет.
скачиваем в папку /opt файлик прошивки openthread_115200.hex
cd /usr/share/openocd/scripts
openocd -f interface/stlink.cfg -f target/nrf52.cfg -c "init" -c "reset init" -c "halt" \
-c "nrf5 mass_erase" \
-c "flash write_image /opt/openthread_115200.hex" \
-c "reset" -c "exit"
7. Установка пакетов OTBR
apk add openthread-br luci-app-openthread libavahi-client iptables-mod-extra
8. Создаем сеть Thread
# 1. Убеждаемся, что мы в чистом состоянии
killall otbr-agent 2>/dev/null
# 2. Создаём директорию для постоянного хранения
mkdir -p /overlay/var/lib/thread
# 3. Удаляем /var/lib/thread если это файл или директория
rm -rf /var/lib/thread
# 4. Создаём симлинк
ln -s /overlay/var/lib/thread /var/lib/thread
# 5. Проверяем, что симлинк создался правильно
ls -la /var/lib/ | grep thread
# Должно показать: lrwxrwxrwx ... thread -> /overlay/var/lib/thread
# 6. Проверяем права доступа
chmod 755 /overlay/var/lib/thread
# 7. Запускаем otbr-agent
/usr/sbin/otbr-agent -I wpan0 -B br-lan "spinel+hdlc+uart:///dev/ttymxc3?uart-baudrate=115200" &
sleep 5
# 8. Проверяем, что сокет создался
ls -la /var/lib/thread/
# Должны увидеть файлы .sock или .data
# 9. Создаём датасет
ot-ctl factoryreset
sleep 2
ot-ctl dataset init new
#ot-ctl dataset activetimestamp 1
#ot-ctl dataset channel 15
#ot-ctl dataset panid 0x1234
#ot-ctl dataset extpanid dead00beef00cafe
#ot-ctl dataset networkname "OpenThread"
#ot-ctl dataset networkkey 00112233445566778899aabbccddeeff
#ot-ctl dataset meshlocalprefix fdde:ad00:beef:0::
ot-ctl dataset commit active
# 10. Проверяем датасет
ot-ctl dataset active
# 11. Запускаем сеть
ot-ctl ifconfig up
sleep 2
ot-ctl thread start
sleep 20
# 12. Проверяем состояние
ot-ctl state
# Должен быть "leader"
# 13. Останавливаем агента, чтобы данные записались
killall otbr-agent
sleep 3
# 14. Проверяем, что данные сохранились в постоянную память
ls -la /overlay/var/lib/thread/
# Должны быть непустые файлы .data
# 15. Запускаем агента снова
/usr/sbin/otbr-agent -I wpan0 -B br-lan "spinel+hdlc+uart:///dev/ttymxc3?uart-baudrate=115200" &
sleep 5
# 16. Проверяем, загрузился ли датасет
ot-ctl dataset active
# Должен показать датасет, НЕ Error 23!
# 17. Запускаем сеть
ot-ctl ifconfig up
sleep 2
ot-ctl thread start
sleep 40
# 18. Финальная проверка
# Должен быть "leader"
ot-ctl state
9. Создаем службу запуска сети thread.
cat > /etc/init.d/thread-border-router << 'SCRIPT_EOF'
#!/bin/sh /etc/rc.common
START=95
STOP=10
start() {
echo "Starting Thread Border Router..."
if pgrep otbr-agent > /dev/null; then
echo "Thread Border Router already running"
return 0
fi
# Настройка постоянного хранилища
rm -rf /var/lib/thread 2>/dev/null
mkdir -p /overlay/var/lib/thread
ln -sf /overlay/var/lib/thread /var/lib/thread
# Запуск агента
/usr/sbin/otbr-agent -I wpan0 -B br-lan "spinel+hdlc+uart:///dev/ttymxc3?uart-baudrate=115200&uart-flow-control" &
# Ждём инициализации
sleep 8
if ! pgrep otbr-agent > /dev/null; then
echo "ERROR: otbr-agent failed to start"
return 1
fi
# Создаём датасет если нужно
if ! ot-ctl dataset active 2>/dev/null | grep -q "Active Timestamp"; then
echo "Creating Thread dataset..."
ot-ctl factoryreset 2>/dev/null
sleep 2
ot-ctl dataset init new 2>/dev/null
ot-ctl dataset commit active 2>/dev/null
echo "Thread dataset created"
fi
ot-ctl ifconfig up 2>/dev/null
sleep 2
ot-ctl thread start 2>/dev/null
# Принудительно включить Backbone Router функции
ot-ctl bbr enable
ot-ctl srp server enable
sleep 5
# Проверка
echo "=== Статус ==="
ot-ctl state
ot-ctl bbr state
ot-ctl srp server state
# Включаем proxy NDP и RA
echo 2 > /proc/sys/net/ipv6/conf/br-lan/accept_ra
echo 1 > /proc/sys/net/ipv6/conf/br-lan/proxy_ndp
# Проверка маршрутизации
ip -6 route
ip -6 neigh show
echo "Waiting for Thread network to form..."
local attempts=0
while [ $attempts -lt 20 ]; do
state=$(ot-ctl state 2>/dev/null | tr -d '\r')
[ "$state" = "leader" ] || [ "$state" = "router" ] && break
sleep 1
attempts=$((attempts + 1))
done
echo "Thread state: $state"
logger -t "thread" "Thread Border Router started, state: $state"
}
stop() {
echo "Stopping Thread Border Router..."
ot-ctl thread stop 2>/dev/null
sleep 2
ot-ctl ifconfig down 2>/dev/null
killall otbr-agent 2>/dev/null
echo "Thread Border Router stopped"
logger -t "thread" "Thread Border Router stopped"
}
restart() {
stop
sleep 2
start
}
boot() {
start
}
SCRIPT_EOF
# Делаем скрипт исполняемым
chmod +x /etc/init.d/thread-border-router
# Включаем автозапуск
/etc/init.d/thread-border-router enable
# Запускаем
/etc/init.d/thread-border-router start
sleep 40
ot-ctl state
ot-ctl dataset active
13. Управление службой Thread
Запуск службы
/etc/init.d/thread-border-router start
Остановка службы
/etc/init.d/thread-border-router stop
Перезапуск службы
/etc/init.d/thread-border-router restart
Просмотр логов
logread | grep thread-border-router
11. Сохраняем ключик сети. (вдруг пригодится)
ot-ctl dataset active -x | head -1 > /etc/thread_dataset.tlv
cat /etc/thread_dataset.tlv
14. Перезагружаемся
reboot
15. После загрузки проверяем
ot-ctl dataset active
16. прописываем OTBR в конфиге HOMEd
17. Если проблемы с bluetooth, то выключаем WiFi и смотрим
logread -f | grep -E "bluetooth|bluez|hci