Описание модернизации маршрутизатора Beeline smart box turbo+, которая позволит активировать распаянный на плате отдельный SoC с функционалом Zigbee координатора, прошить его и использовать его в системе умного дома.
Вводная
ТТХ роутера Beeline smart box turbo+
Manuf/OEM/ODM SerComm PCB ID: CQR00B-1.6
Блок питания: 12 VDC, 1.5 A
CPU: MediaTek MT7621AT (880 MHz, 2 cores, 4 threads)
FLASH: Nand 128 Mb
RAM: 128 MB DDR3 (NANYA nt5cc64m16gp-di)
USB: 3.0 (разведен) + 2.0 (не разведен на разъем)
UART: да, J4
Wifi1: MediaTek MT7603EN bgn MIMO 2x2:2 (до 300 Мбит/сек)
Wifi2: MediaTek MT7615N n+ac MIMO 4x4:4 160 МHz (до 1733 Мбит/сек)
Zigbee 3.0 chip: EFR32 MG1B232GG
Switch: MediaTek MT7621AT 10/100/1000 (5 портов всего)
LAN ports: x4 10/100/1000
WAN ports: x1 10/100/1000
Zigbee антенна и пара 5ГГц антенн с фронтальной направленностью выполнены на верхнем крае основной платы.
Комбинированные 2,4+5ГГц антенны 2дБ в торцах корпуса формируют боковые лепестки. Можно установить вместо них 5дБ антенны с ufl пигтейлами (обзор здесь делал) и развернуть к передней или задней стенке).
Оригинальная прошивка не поддерживает USB модемы.
При работе CPU греется, желательно наклеить радиатор.
ТТХ модуля Zigbee
В маршрутизаторе установлен чип EFR32MG1B232GG с функционалом Zigbee 3.0 производства Silicon Labs.
SoC содержит процессор с ядром Cortex M4, 32K SRAM, 256K Flash, порты ввода-вывода и выходной усилитель мощности с КУ до +19дБ.
Производительность сравнима с широко известным CC2538 в комбинации с усилителем СС2592.
В Itead Sonoff Zigbee bridge используется аналогичная микросхема EFR32MG2 следующего поколения — Gen2.
Прошивки для Gen1 и Gen2 между собой не совместимы.
Расшифровка основной части маркировки MG1B232GG
M — family code
G — Gecko
1 — series 1
B — Performance Grade Basic
2 — Feature Code reserved
3 — Feature Code TXRX
2 — Feature Code Band 2.4GHz
G — Flash 256K
G — Temperature Grade -40 to +85C
Дополнительное поле маркировки, например 1820C00OXE
18 – The last 2 digits of the assembly year.
20 – The 2-digit workweek when the device was assembled.
C00OXE – A trace or manufacturing code. The first letter is the device revision.
Как это используется в роутере
А никак :)
SoC EFR32MG1 распаян под небольшим экраном в углу платы, чуть выше расположена контактная группа JP1 для установки разъема SMT типа с шагом 1,27мм (используется для прошивки и отладки чипа).
Тип корпуса QFN32, соответствие выводов чипа и JP1 будут показаны в разделе «1. Перепрошивка EFR32», там же подписан функционал выводов.
Интерфейс связи с CPU — UART с Software flow control, выводы PA0=TXD, PA1=RXD.
На стороне CPU (MT7621) используется UART3, который не активирован ни в одной прошивке (профилях устройств).
По прихоти разработчиков устройства кнопка WPS роутера заведена на выход GPIO#11 CPU, который предназначен для выхода TXD2 UART2.
Чтобы сохранить функционал кнопки и не заморачиваться с мультиплексированием GPIO проще оставить UART2 деактивированным.
Соответственно в системе UART3 CPU отображается в /dev/ttyS1 (нумерация начинается с 0 и сдвигается на 1).
В исходном состоянии «с завода» в EFR32 прошит загрузчик и прошивка EmberZNet v6, реализующая функционал координатора.
Подготовительная часть
Для корректной работы Zigbee модуля необходима прошивка с поддержкой UART3,
например вот эта.
В этой сборке дополнительно установлен и активирован модуль ser2net, который пробрасывает /dev/ttyS1 на клиентское устройство.
При желании можно портировать Zigbee2Tasmota c Sonoff zigbee gateway и собрать модуль для Openwrt (с этим еще разбираюсь, не специалист).
Шлюза Zigbee2mqtt для этого чипа пока нет, и скорее всего реализовать его в виде модуля на роутере не получится (обычно он работает в node.js, требовательного к производительности и объему памяти).
Для собирающих прошивки самостоятельно предлагаю ознакомиться с
выложенными на github патчем, dts и конфигом сборки.
На текущий момент актуальная версия EmberZNet v8 и версия SDK v6.9.0 (но шить будем прошивку собранную с SDK v6.7.8).
Для прошивки понадобится любой SWD программатор
например китайский $1 клон STLink v2
4 гибких провода (обычно идет с STLink в комплекте).
Для прошивки из Windows понадобятся драйвера ST-Link и прошивальщик EBLink (он в принципе кроссплатформенный).
1. Перепрошивка EFR32
1.1 Откройте крышку роутера, найдите контактную группу JP1.
1.2 Подпаяйте 4 провода: к GND, RST, SWCLK=PF0, SWDIO=PF1 и соедините их с соответствующими выводами программатора.
1.3 Установите драйвера для STLink программатора и убедитесь что он определился в системе.
1.4 Подайте питание на роутер (дожидаться загрузки необязательно, требуется только питание 3.3в).
1.5 Распакуйте
файлы из архива в папку с исполняемым файлом eblink.exe и прошейте:
сначала bootloader
eblink.exe -I stlink,dr -S silabs-auto -P ../scripts/ -F erase,verify,run,file=BTL_STD_S1_256-COM_PA0-PA1-PD15.srec
потом прошивку
eblink.exe -I stlink,dr -S silabs-auto -P ../scripts/ -F verify,run,file=NCP_USW_115K2_S1_F256_678_PA0-PA1.srec
Отпаяйте провода.
В этой прошивке вывод PD15 (#6 контакт JP1) задействован для принудительного входа в режим bootloader (активный уровень низкий).
Для активации необходимо подключиться к UART (с настройками 115200-8-N-1, XON/XOFF) порту EFR32 локально или через проброшенный порт, замкнуть #6 контакт JP1 на GND и удерживая сбросить чип (замкнуть RST #3 контакт JP1 на GND).
В консоли отобразится меню из 3х пунктов.
Для прошивки новой версии нужно выбрать соответствующий пункт и отправить файл прошивки в режиме xmodem.
Например для смены роли zigbee-координатора на zigbee-роутер
залить эту прошивку.
2. Настройка роутера для проброса портов
2.1 Подключитесь к роутеру по SSH
2.2 Откройте для редактирования файл /etc/ser2net.conf. По умолчанию он содержит такой конфиг:
1880:raw:0:/dev/ttyS1:115200 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS remctl
где первая цифра «1880» — номер TCP порта, который можно сменить на более удобный.
raw — режим работы порта с максимальной прозрачностью (это требуется для правильного проброса ASH — см. ниже)
0 — таймаут
/dev/ttS1:115200 — пробрасываемый порт, его скорость и доп. настройки.
2.3 После внесения изменений перезапустите службу
/etc/init.d/ser2net restart
2.4 На удаленном контроллере запустите ответный процесс для подключения к роутеру.
sudo socat pty,raw,link=/dev/ttyVS1 tcp:192.168.2.1:1880, user=root,group=dialout,mode=660,forever,reuseaddr,keepalive
2.5 Проверка соединения из консоли роутера:
conntrack -E | grep sport=1880
При успехе в ответе будет нечто подобное:
[UPDATE] tcp 6 7440 ESTABLISHED src=192.168.2.3 dst=192.168.2.1 sport=53250 dport=1880 src=192.168.2.1 dst=192.168.2.3 sport=1880 dport=53250 [ASSURED]
3. Интеграция в homeassistant
Настройка проброса порта в Docker
Комментарий для тех кто использует системы автоматизации, работающие внутри виртуальных контейнеров (например hass.io / homeassistant работает в контейнере Docker.
Полученный в разделе 2 предыдущей статьи порт ttyVS1 с точки зрения операционной системы не является блочным устройством и не будет проброшен внутрь docker-контейнера (это особенность docker). Соответственно автоматизация «Zigbee Home Automation» этот порт автоматически не распознает и не «увидит».
Для тех кто хочет лично убедиться еще раз замечу, что для этого типа порта бесполезно создавать правила udev, скрипты автоматического подключения в rc.local и прочие обходные пути – все это не срабатывает.
Даже если бы контейнер homeassistant запускался явно (а его запуском управляет отдельный контейнер hassio-supervisor), то подстановки -v /dev/ttyVS1:/dev/ttyVS1 и/или --device-cgroup-rule 'a *:* rwm' в скрипт запуска docker run… все равно не сработают.
Варианты работающих костылей которые работают:
а) Использовать сервис который однократно выполнит скрипт при перезапуске сервера:
#!/bin/bash
function run_script() {
local STR
STR=$(sudo docker stats --no-stream | grep homeassistant);
if [ -n "$STR" ]; then
sleep 3;
sudo docker exec -it homeassistant bash -c "socat pty,raw,link=/dev/ttyVS1 tcp:192.168.2.1:1880,forever,reuseaddr,keepalive";
fi
}
run_script
b) Вручную в консоли после перезапуска homeassistant:
sudo docker exec -it homeassistant bash -c "socat pty,raw,link=/dev/ttyVS1 tcp:192.168.2.1:1880,forever,reuseaddr,keepalive"
К счастью оказалось что EZSP и Itead Sonoff bridge используют похожие методы подключения в интеграцию Zegbee Home Automation и допускают подключение сразу внутри docker контейнера через сокеты.
3.1 Откройте веб-интерфейс Homeassistant, перейдите в «Настройки», выберите пункт «Интеграции» и добавьте «Zigbee Home Automation». В настройке последовательного порта интеграции выберите пункт «Enter manually».
3.2 Выберите тип радиоустройства — «EZSP»
3.3 Установите настройки порта: socket://<ip адрес роутера>:<номер проброшенного TCP порта>. Скорость = 115200. и нажмите «Подтвердить».
3.4 Через несколько секунд UART порт с вашего роутера будет проброшен в контейнер, интеграция ZHA автоматически распознает тип протокола (на самом деле там ASH over UART).
3.5 После завершения настройки интеграции можно ее переименовать.
3.6 А после сопряжения всех устройств отключить опцию автоматического обнаружения.
3.7 И исправить неправильно распознанные классы устройства, так как производители оборудования
кладут болтне точно соответствуют стандартам, поэтому интеграция ZHA может неправильно классифицировать подключенные устройства.
Чтобы это исправить требуется посмотреть адрес и endpoint сопряженного устройства
И вписать в файл configuration.yaml:
zha:
device_config:
11:22:33:44:55:66:77:88-1: # format: {ieee}-{endpoint_id}
type: 'switch' # corrected device type
И перезагрузить сервер.
Выражаю большую благодарность
АВАТАРА и
azt59 за предоставленные трассировки и моральную помощь,
Австралийскому разработчику
Gary (aka Gobasoz) за помощь с адаптацией прошивки под схему включения EFR32.
home assistant запускается не на роутере
надо бы расписать это момень
в данной статье это как то пропущено
Автор не рассказывает, как развернуть ХА.
Он рассказывает, как поднять и интегрировать шлюз, если у вас дома уже развёрнут ХА.
У кого-то может стоять Домотикс, который емнип умеет работать EZSP.
просто считаю что в тексте надо бы уточнить что этот самый ХА где то отдельно запускается
мне лично этотне сразу понятно было
Транспорт обеспечивает роутер и сеть, а расшифровку и обмен данными, взаимодействие с автоматизациями — штатный программный компонент homeassitant из блока интеграций.
Не знаю вставится ли…
В Перми есть, но уже стоит в брони.
И я ещё должен Вам продавать себе в убыток? С чего бы? Ищите сами, покупайте. Что за любовь к халяве за чей-то счёт?
Вот я и расценил это как предложение, в какой-то степени. И решил начать с 500 рублей. Успокойтесь вы мне ничего не должны.
Что самое интересное — по цене такие б/у роутеры выходят дешевле USB координатора, а по возможностям — существенно превосходят (как минимум в плане мобильности, можно не в сервер УД ставить или выделенную под роутер распберри, а поставить как stand-alone устройство).
Одно расстраивает — похоже, муськовчане массово выгребли все подобные роутеры с Авито. Самый дешёвый нашёл за 2000 руб, остальные ещё дороже (но даже и в этом случае выходит дешевле стика).
По 1400 мне предлагали опт новые.
но его и по UART прикрутить можно
https://aliexpress.ru/item/item/33040311100.html
а есть ещё платка с usb за те же 800 чип вроде такой же
Один небезызвестный стартапер собирает стики на чипах gen2 и продает по 3400р.
И если делать стик самому, то лучше за $6 купить
подключить его к ESP, залить прошивку Tasmota и получить аналог Sonoff zigbee gateway.
Если надо могу поделиться схемой подключения GPIO.
И ещё раз отмечу что sonoff zigbee gateway сделан на Efr32mg2 (gen2).
Распиновку дам чуть позже.
При сборке и монтаже лучше размещать платки с ESP и EFR под углом или не очень близко друг к другу (снизить взаимные помехи).
Описание процесса прошивки и интеграции в homeassistant есть на страничке kvvhost
Меня интересует устройство протокола зигби в програмном плане, а все прошивки на зигби закрытые, даром что их на гитхабе выклдадывают. Тайна за семью печатями и 256битным шифром.
А тут прошивку значит Gary наваял…
надеюсь что с stm32wb будет проще…
И вот эти совершенно не нужные и неудобные спойлеры…
1. Выжать из железки максимум для домашнего использования (роутер встаёт на замену Xiaomi mi mini). Это решилось сборкой прошивки с определенными пакетами и настроками из коробки.
2. Включить в работу zigbee (причем он там достаточно неплохой, 3.0 и как координатор должен потянуть до 200 устройств).
3. Даже если уже есть стик, второй (третий и тд) координатор работают параллельно расширяя зону покрытия и распределяя нагрузку.
4. Полученный роутер с этим модулем можно установить на второй квартире/даче, поднять с него VPN до домашнего роутера и управлять zigbee и wifi устройствами удаленно, завязав на автоматизации единого контроллера умного дома.
Это сходу, можно ещё кейсы придумать.
Это не 4pda, не любой другой форум.
а теперь «бородатые дядьки» обсуждают железки
у меня… этот… когнитивный дисссонас… во.!
Времена меняются… Когда-то мы были моложе, наш «чат» собирал каждый летний день десятки человек offline и сотни — онлайн, мы ездили на турбазы и «зависали». А теперь… Теперь вот роутеры, ZigBee и другой хлам… :)
И шестизнак был признаком крутости )
Список этого «софта» видел… в гробу я его видел))
У людей бывает по 150+ устройств ZigBee. Не надо проецировать на всех свой опыт.
Чем хуже? У нас раза в 4 мощнее и на роутер ресурсов хватит и zigbee обслуживать
Непосредственно на шлюзах без подключения к облачным сервисам можно выполнять только простейшие локальные сценарии. Типа «включить лампочку zigbee при нажатии на выключатель zigbee», «поорать сиреной при открытии двери». Все.
Для примера: есть zigbee термостатическая головка батареи отопления Moes. Со своим термодатчиком, шаговым 2х режимным мотором, недельным календарем, в котором каждый день разбит на 6 разных температурных интервалов, с авто- и неавто- стабилизацией температуры, детектором открытия окна и еще по мелочи.
Один пакет обмена с головкой после парсинга в json занимает полстраницы 10м шрифтом. Никакому шлюзу это не переварить :)
Без него можно обойтись если устройства умеют делать direct binding, но таких девайсов — по пальцам пересчитать и это просто выключатель/диммер и лампы.
На контроллере можно организовать умную обработку событий, прикрутить управление голосом, через телеграм, по местоположению телефона.
Почему пару лампочек? Например Квартирка 35км, полтора десятка оконечных zigbee устройств, еще столько же wifi девайсов которые используют mqtt, там же сетевой плеер, камеры.
Есть интересный проект шлюза «ESP32 SLS Gateway», но он на сс2530/31/38, с закрытой и пока бесплатной прошивкой. Мощностей роутера хватит чтобы поднять похожий функционал, но нет исходников.
прикольный эксперимент, конечно. Но это вещь в себе, на мой взгляд. Зачем держать отдельное устройство, если zigbee шлюз можно повесить на ту же машину, где и HA. Много ли найдется тех, кто будет использоватьэту железку как основной шлюз/роутер дома совсместно с zigbee?
Так вот первый проигрывает вчистую. Стик на сс2538 сравним по радиусу действия с сабжевым efr32 (у которого напомню 2дБ антенна F-типа, с гантелеобразной диаграммой направленности).
Думаю немного. Но если пользователи зашьют в efr32 прошивку zigbee-router то это будет неплохим вариантом расширения зоны покрытия для тех кто использует сабжевый роутер как основной домашний.
Вчера я попросил мантейнера сделать для нас такую прошивку. Она standalone и не будет требовать постоянного коннекта с контроллером умного дома.
Прошивка роутера готова, выложена на гитхабе сегодня, но я еще не проверял ее.
Какую именно прошивку шить зависит от способа прошивки. Если через проброшенный порт и загрузчик то шить gbl файл. Если через swd программатор то s37, вот ссылка на файлы прошивки.
В случае роутера проброс порта не нужен. Но зачем отрезать себе путь для обновления прошивки? Или потом опять вскрывать корпус и паяться?
Карту сети с привязками можно глянуть в ZHA или Nodered, z2m ее не показывает.
Еще заметил неточность — Подпаяйте 4 провода: к GND, RST, SWCLK=PF0, SWDIO=PF1
на картинке у вас отмечены PF2 PF3 а не 0 и 1
От Harwesta 5 гиг нормально работает? Могу с падавана на нее перейти раз в ней проброшены порты
У меня все верно. На картинке я показал весь модуль со снятой крышкой и расписал все точки с указанием GPIO.
Для переделки крышку снимать не надо, и паяться нужно к отладочному ряду выводов.
Да, там изначально все работало нормально. Дня 4 назад обновил в исходниках драйвера семейства mt76, сейчас там самые свежие, брал с гита.
Падаван использует другую разметку флешки, поэтому ставить нужно factory прошивку через breed для Netgear R6220 (6350 и тд) и восстанавливать factory раздел.
В прошивке использован пакет wpad-mini, там как помнится есть поддержка mesh сетей и хендовера.
АВАТАРА раскидывал тестовую зону на нескольких роутерах и все работало.
UPD: а как вы видите в имене прошивки что это именно роутера прошивка. Может есть какой-то сайт с описаниями у этого репо ссылка
Squeezelite у меня крутится на мини роутере китайском клоне hame a5-v11 c внешним USB ЦАП на pcm2704, он во второй комнате стоит. Настройки выставил по максимуму звук очень неплох.
Но cначала в любом случае нужно прошить bootloader — он общий для обоих типов прошивок и его версия должна соответствовать их версии — v8.
Ps
Роутер ругался на несоответствие прошивки из-за разницы в текущем cat /proc/cpuinfo и board id в моей сборке.
Переход лучше было делать через breed
Но можно обратиться в личку к azt59, он собирал шлюз под openwrt но роутер у него умер.
Да, у меня контроллерами работают два аппарата: Renegade и Tinker board. Первый с 64битным образом homeassistant от rpi3, второй с 32битным от rpi2. Оба по производительности в разы уделывают raspberry.
eblink.exe -I stlink,dr -S silabs-auto -P ../scripts/ -F erase,verify,run,file=NCP_USW_MG1B232_678_115k2_TX-PA0_RX-PA1_BT-PD15.hex
? как потом роутер в сеть вести?
Шить нужно srec файл, и если шьется основная прошивка то ключ erase использовать нельзя.
В тексте даны правильные команды.
Вот из этих которая srec? Хочется зашить сразу программатором в режим роутера, на padavan пока с UART не решили вопрос
Спроси у автора
То есть роутеров нет у нас?
Я же сам запрашивал компиляцию.
github.com/grobasoz/zigbee-firmware/tree/master/MG1B232
Вот в этой папке пробуй прошить s37 файл. Если будет ругаться то надо сконвертировать s37 в srec. Или залить gbl файлы через uart (ты же все равно подпаиваешь swd, так еще пару проводов припаяй)
И еще: bootloader шьется с предварительным стиранием. Основная прошивка — без стирания.
Uart в Падаване можно ждать долго, эта сборка рассчитана на сетевой роутер.
На синем форуме уже сделали к openwrt для Turbo+ рабочий модуль zigbee2mqtt.
>как конвертировать s37 в srec?
нашел, s37 и есть srec
>UART куда паять?
сам понял, rx, tx и землю
srec не равно s37
Сам нарвался на эту тонкость
sourceforge.net/projects/srecord/files/srecord-win32/
при переименовании в srec шьёт, но эффекта нет
Правда провода не отпаивал, может в этом дело. Хочу еще попробовать gbl через uart зашить
В других перечисленных роутерах MU-MIMO 2:2