Этот репозиторий служит для распространения драйвера для Систем безопасности "Астра", для языка программирования Go.
Драйвер распространяется только в бинарном виде, в связи с тем, что протокол взаимодействия проприетарный. Последняя версия драйвера всегда доступна для загрузки в разделе Releases.
Помимо самого драйвера в архивах распространяются исходный код зависимостей: goburrow/serial и npat-efault/crc16
Устройства Астра-РИ-М выходят с завода в режиме "автономный", он не предполагает работу в качестве ведомого устройства на линии RS-485, в связи с этим необходимо переключить РИ-М в режим "системный". Делается это заменой прошивки, для чего потребуется загрузить и установить ПО ПКМ Астра Pro (во время установки убедитесь, что среди модулей ПКМ активирована галочка рядом с модулем смены ПО), и далее следуйте документации из Инструкции пользователя, раздел "Смена ПО на РР для работы в режиме «Системный»"
Go, начиная с версии 1.7, поддерживает binary-only packages
, это зависимости
распространяемые только в виде бинарных файлов, с минимальными исходниками. При
этом версия Go, используемая вами, и использованная для компиляции пакета,
должны совпадать.
В разделе загрузок можно увидеть множество файлов, например
go1.8.1_android_386.tar.gz
, — в названии зашифрована версия Go, целевая ОС и
архитектура. Вам необходимо выбрать подходящий вам архив и распаковать его в
GOPATH
.
В файле Makefile можно увидеть пример загрузки и установки корректных версий зависимостей, а в cmd/astra/main.go — пример исполняемого файла, взаимодействующего с Астра-РИ-М.
В целом процесс взаимодействия должен строиться следующим образом:
- Инициализация драйвера командой
driver := astra_l.Connect("/dev/tty1")
, где/dev/tty1
— порт, к которому подключен РИ-М - Затем необходимо указать адрес устройства, с которым будет проходить
дальнейшая работа:
device := driver.GetDevice(0x01)
FindDevice()
с адресом устройства0xFF
, чтобы убедиться что РИ-М доступен и не зарегистрированRegisterDevice()
с аргументомf.EUI.GetShortDeviceEUI()
, гдеf
— результат вызоваFindDevice()
. После этого шага устройство перестанет отвечать по адресу0xFF
, и будет отзываться только на адрес указанный в шаге 2- Затем необходимо инициализировать радио-сеть:
device.CreateLevel2Net(1)
, где аргумент соответствует литере радио-извещателей, с которыми необходимо работать. Т.е.1
в качестве аргумента означает что работа будет идти с радио-извещателями с пометкойлит.1
- Из необходимых радио-извещателей Астра извлечь батарейки, для каждого
регистрируемого извещателя вызвать функцию
device.RegisterLevel2Device(0)
, разместить извещатель недалеко от РИ-М и установить элемент питания. Если регистрация будет успешной — функция в ответ вернёт краткую информацию о новом извещателе. - При восстановлении связи с РИ-М желательно запрашивать состояние устройства
вызовом
device.GetState()
- Для получения списка событий необходимо вызвать
device.GetEvents()
.