Проброс USB-порта Mikrotik c CC2531 к контроллеру на macOS

08 ноября 2019, 19:07

Предисловие

Когда я попытался запустить связку zigbee2mqtt+mosquitto на macOS, то столкнулся с рядом нюансов системы:

  •  docker не может внутрь контейнера отдавать блочные устройства, потому что в macOS они в свои и linux их использовать не умеет
  • сама macOS "балуется" юсб-портами, когда отключает экран(без перехода в спящий режим), что приводит к отвалу стика. Причину и способ лечения я так и не смог найти.
Таким образом, все подобие умного дома периодически превращается в тыкву и намекает, что надо купить Raspberry Pi, поставить на него флешку с линуксом, воткнуть в розетку и все. Но iMac у меня включен всегда, и я не рассчитывал на такой поворот.
В этот момент внимание на себя обратил Mikrotik в коридоре, который тоже включен постоянно и особо по жизни не напрягается. Вспомнив о наличии штатной возможности предоставления доступа к usb-порту по сети, я принял решение поискать счастья с такой схемой.
Вцелом принцип такой:
  1. Вставить стик в роутер и настроить доступ к порту по сети
  2. В macOS(в самой системе или внутри контейнера) создается виртуальное устройство, которым zigbee2mqtt общается как с железным свистком в порту компьютера
  3. Настраивается автозапуск и разводятся каналы zigbee и wi-fi на частоте 2,4Ггц
Этот алгоритм справедлив как для win, так и для *nix, а вместо роутера можно использовать ESPшку. У меня же MikroTik и Mac и я про них расскажу.

На роутере

Сама возможность удаленного доступа к устройствам на Mikrotik как-то не сильно всплывает на форумах и статьях, но она есть "из коробки" и работает стабильно.

Адрес роутера в сети у меня 192.168.88.1.

В веб-интерфейсе или winbox System - Ports должен появиться usb порт, который настраивается вот так:

k01-1.jpg

Параметры работы с устройством

k01-2.jpg

Настройки удаленного доступа. Я ограничил доступ только из локальной сети, а порт выбрал 4040

На компьютере

Для создания виртуального устройства и соединения с портом MikroTik используется программа socat(бесплатна, ставится через homebrew).  

brew install socat

Создать папку vusb в каталоге zigbee2mqtt:

mkdir /usr/local/lib/node_modules/zigbee2mqtt/vusb/

Проверить запуск:

/usr/local/bin/socat -d -d pty,raw,echo=0,link=/usr/local/lib/node_modules/zigbee2mqtt/vusb/zigbee_cc2530 tcp-connect:192.168.88.1:4040,reuseaddr

Если все хорошо, то на экране появится похожая картинка:

1600x_image.png?1573236260

В настройках zigbee2mqtt указать:

serial: 
    port: /usr/local/zigbee2mqtt/vusb/zigbee_cc2530

Донастройка и автозапуск

Для автозапуска socat я использую системного демона Launchctl, что позволяет его запускать при загрузке до входа пользователя.

Создать в папке /Library/LaunchDaemons/ файл homebrew.mxcl.socat.plist с содержимым:

sudo nano /Library/LaunchDaemons/homebrew.mxcl.socat.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"\>
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>homebrew.mxcl.socat</string>
  <key>ProgramArguments</key>
  <array>
<string>/usr/local/bin/socat</string>
<string>-d</string>
<string>-d</string>
<string>pty,raw,echo=0,link=/usr/local/lib/node_modules/zigbee2mqtt/vusb/zigbee_cc2530</string>
<string>tcp-connect:192.168.88.1:4040,reuseaddr</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StartInterval</key>
    <integer>30</integer>
</dict>
</plist>

Загрузить plist в перечень загружаемых демонов и запустить его прямо сейчас:

launchctl load /Library/LaunchDaemons/homebrew.mxcl.socat.plist

Остановить сервис и не загружать его больше при старте:

launchctl unload /Library/LaunchDaemons/homebrew.mxcl.socat.plist

Для того, чтобы качество связи не хромало, надо разнести по разным каналам сеть wi-fi роутера и канал CC2531 или вовсе отключить на роутере 2,4Ггц, если клиентов 80211n дома не живет и в гости не ожидается.

Вот картинка с ресурса где изображены пересечения каналов zigbee и wi-fi

1600x_image.png?1573239528

У меня wi-fi живет на 6 канале, zigbee на дефолтном 11. Проблем с качеством связи обоих сетей не замечаю.

Конец

Вцелом, это костыль, который усложняет систему. и его использование вместо классических подходов должно быть по-хорошему оправдано внятными причинами. Ими могут стать занятые, неисправные или отсутствующие usb-порты, а может и желание разместить сервисы УД в облаке.

Настройка для Raspberry и ESP на иностранном языке найдется тут

А мое железо и ПО, на котором работает все сегодня такое:

iMac 21,5 + macOS Catalina 10.15.1

MikroTik hapAC + RouterOS v6.45.6

Удачи!


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
К списку блогов

Скидки для сообщества

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

LifeControl

+7 495 240-81-01
Промокод:
sprut10
Размер скидки:
10%
На весь ассортимент Lifecontrol

Похожие записи

27 января 2019, 10:55
Избавляемся от wi-fi реле на ESP в пользу zigbee без прошивок и танцев с бубном.
30 января 2019, 12:39
Я построю свой луна-парк, с блекджеком и шлюхами! Хотя, к черту лунапарк !
28 июня 2019, 09:50
Расскажу о планах на ближайшие несколько недель и немного упрощу вам жизнь.
01 июня 2019, 16:20
Блог Нуба. Наверняка вы задавались подобными вопросами.
03 февраля 2019, 08:41
Нам потребуется система на Deconz с установленным GUI, лампа Hue c обновленной прошивкой по предыдущей заметке (потребуется Hue Hub)
17 марта 2019, 11:54
Принцип работы умного дома Xiaomi для чайников. Первая часть, протокол ZigBee
20 мая 2019, 11:09
немного моих умозаключений на тему Wi-Fi, Zigbee, Z-wave, BlueTooth
09 марта 2019, 11:41
Каким датчиком лучше автоматизировать.
27 мая 2019, 22:31
Есть только розетка, а хочется поставить выключатель? Встречаем Четырех друзей of Hue.
23 августа 2019, 12:58
Gledopto GL-B-007Z и GL-B-008Z