- PVSM.RU - https://www.pvsm.ru -

4G-роутер в роли универсального сервера для IoT

4G-роутер в роли универсального сервера для IoT - 1
Роутеры серии ICR-3200 [1] призваны заменить классическую связку: одноплатный компьютер + модем + роутер. Теперь можно запускать всю необходимую логику прямо на роутере. Благодаря мощному ARM-процессору, 512 МБ оперативной памяти и ~2ГБ встроенной флеш-памяти, на роутере можно даже запустить сервер nodejs!

Последовательные интерфейсы RS-232/485 также встроены в роутер и доступны сразу в операционной системе с полным root-доступом. Открытое окружение для сборки собственных программ и библиотеки C/C++ для работы с низкоуровневым аппаратным API также в наличии.
Функция глубокого сна позволит экономить энергию при работе от аккумулятора: роутер можно активировать только тогда, когда связь действительно необходима.

В статье мы разберем интересные функции устройства и попробуем на практике поработать с интерфейсом ввода-вывода из shell-скриптов.

Технические характеристики

Роутеры серии ICR-3200 [1] выполнены на единой аппаратной платформе и представлены пятью моделями, различающимися диапазонами частот LTE, наличием Wi-Fi и геолокации (GNSS). Устройства позиционируются как замена связки одноплатного компьютера и роутера. Мощный процессор и большой объем оперативной памяти позволяет запускать ресурсоемкие пользовательские приложения прямо на роутере.

  • Процессор Cortex-A8 — тактовая частота 1 ГГц, архитектура 32 bit
  • 512 МБ RAM
  • Флеш-память от 1,5 до 4 ГБ — для хранения пользовательских данных
  • Порты ввода-вывода — интерфейсы RS-232/485 и цифровые порты ввода-вывода доступны для использования пользовательскими программами

Отдельно стоит модель ICR-3211B [2], работающая по стандарту LTE Cat. M1 (NB-IoT [3]). Протокол LTE Cat. M1 был специально разработан для M2M-решений, имеет низкую скорость передачи данных (375 kb/s), а также большую дальность действия и повышенную стабильность в сложных условиях связи внутри помещений. Роутер имеет встроенный ионистор (суперконденсатор) [4], позволяющий устройству работать короткое время после полного отключения питания.

Режим глубокого сна

Режим глубоко сна позволяет ввести роутер в состояние, когда все процессы заморожены и аппаратная часть отключены, для экономии энергии, при этом все функции устройства отключаются и со стороны оно будет выглядит полностью выключенным. Потребление энергии в таком режиме составляет не более 10 mW.

4G-роутер в роли универсального сервера для IoT - 2
В режиме сна роутер почти не потребляет энергию и просыпается за 3 секунды

Когда потребуется разбудить роутер для передачи данных, он проснется за ~3 секунды. Разумеется, потребуется дополнительное время на регистрацию модема в сотовой сети, однако это существенно быстрее загрузки роутера с нуля. Такая опция полезна для систем с автономным питанием, большую часть времени находящихся в простое и активирующихся изредка, для выполнения активных действий, например сигнализации или блока резервирования.

Пробуждение и засыпание

Управление засыпанием и пробуждением происходит через модуль Sleep Mode [5].

Существует 2 способа управления режимом сна:

  • Через цифровой вход — в этом режиме роутером управляет внешнее устройство, например микроконтроллер. По сигналу LOW на цифровой вход роутер засыпает, а при получении HIGH — просыпается, или наоборот. Можно также настроить таймаут срабатывания для защиты от случайных переключений.
  • Через внутренний таймер — роутер отсчитывает время и просыпается/засыпает в нужное время. Это удобно использовать для выполнения разовых операций или загрузки данных за определенный период.

4G-роутер в роли универсального сервера для IoT - 3
Интерфейс настройки режима глубоко сна

Функция «последний вздох»

Авария питания на удаленном объекте бывает особенно неприятной, потому что непонятно, из-за чего недоступна связь с объектом. Функция «Последний вздох» позволяет роутеру работать некоторое время после полного отключения питания и отправить сообщение о том, что произошла авария и резервное питание не включилось. Благодаря встроенному ионистору, ресурс которого значительно больше аккумуляторных батарей, он не требует обслуживания и замены. Это полезно для систем резервирования питания, в которых возможны сбои и важно отследить момент полной потери напряжения.

4G-роутер в роли универсального сервера для IoT - 4
Роутер пошлет сигнал об аварии питания даже после полного отключения питания

Чтобы правильно отреагировать на событие потери питания, нужно как-то узнать об этом.
Текущее напряжение питания можно получить либо с помощью shell-команды status sys:

$ status sys
Firmware Version : 6.1.10 (2019-07-02)
Serial Number    : ACZ1100000623519
Profile          : Standard
RTC Battery      : Ok
Supply Voltage   : 12.3 V # ← напряжение питания
Temperature      : 37 C   # ← температура внутри корпуса
Time             : 2019-08-16 16:21:18
Uptime           : 0 days, 11 hours, 43 minutes

Либо с помощью аппаратного Unix I/O control (ioctl) и программы на C/C++ или другом языке.
В таблице показаны адреса нужных аппаратных регистров. Текущее напряжение питания возвращается в виде целого числа, в милливольтах. Использование низкоуровневого API предпочтительнее shell-скриптов в данном случае для более быстрой реакции. Подробная информация о работе с аппаратной частью доступна в руководстве разработчика. [6]

4G-роутер в роли универсального сервера для IoT - 5
Запрос ioctl, отдающий текущее напряжение питания.

Последовательные интерфейсы

В роутер встроены два последовательных интерфейса: RS-232 и RS-485. Они позволяют подключать периферийные устройства напрямую к роутеру, без использования дополнительной обвязки. При этом на роутере может быть запущен полноценный сервер Node-RED или Nodejs, что позволяет обойтись одним устройств для разворачивания простой системы автоматизации, без дополнительных компьютеров и контроллеров.

4G-роутер в роли универсального сервера для IoT - 6

По умолчанию оба интерфейса доступны для работы как стандартные serial-устройства в Linux:

ls -la /dev/ttyS*
crw-------    1 root     root      251,   0 Jan  1  1970 /dev/ttyS0 # ← порт rs-232
crw-------    1 root     root      251,   1 Jan  1  1970 /dev/ttyS1 # ← порт rs-485 
crw-------    1 root     root      251,   5 Jan  1  1970 /dev/ttyS5 # ← не разведен

Все стандартные библиотеки будут поддерживать эти устройства без дополнительных настроек, в том числе модуль Modbus-RTU2TCP [7] и другие.

Пользовательские модули

Функциональность устройства можно расширить с помощью пользовательских модулей: это упрощенный вариант пакетов, только без пакетного менеджера. Весь список доступных модулей имеется на сайте https://advantech-bb.cz/products/software/user-modules [8].

Модули устанавливаются вручную, с помощью загрузки файла пакета через веб-интерфейс:

4G-роутер в роли универсального сервера для IoT - 7

На текущий момент доступны 73 модуля. Вот некоторые интересные из них:

  • Node-RED [9] — популярный инструмент для объединения различных промышленных протоколов в целостную систему
  • Nodejs [10] — полноценный сервер nodejs. Большой объем оперативной памяти и мощный процессор позволяет запускать ресурсоемкие приложения прямо на роутере!
  • Python2/3 [11]
  • Веб-shell [12] — позволяет работать в консоли через браузер.
  • Azure IoT SDK Python [13] — набор инструментов для разработки программ под Microsoft Azure IoT Hub.

Так как прошивка роутеров открыта, разработчики могут писать собственные модули, в том числе и с веб-интерфейсом. Справочные материалы доступны в руководстве по написанию модулей [6] и и разделе для разработчиков [14] на веб-сайте компании. Для удобства сборки пакетов доступно готовое окружение для кросс-компиляции [15].

Аппаратные ресурсы через shell-скрипты

Для простых задач автоматизации удобно использовать shell-скрипты, из которых можно управлять световой индикацией и получать/задавать состояние цифровых пинов.

Световой индикацией удобно показывать текущее состояние выполнения команд. Например, индикация передачи данных — частое мигание, попытка подключения — редкое мигание, простой — горит непрерывно. Рассмотрим команду led. На вход она принимает только один аргумент — тип мигания светодиодом.

# led
led on|off|fast|slow

Вот как это выглядит в реальной жизни:

Демонстрация режимов работы пользовательского индикатора через shell-команды

Для работы с цифровыми пинами используется команда io.

$ io
Usage: io [get <pin>] | [set <pin> <value>]

io set out0 1 # Установить цифровой выход OUT0 в состояние 1 (LOW)
io get bin0   #  Получить значение цифрового входа BIN0

Важно помнить, что логика в данном случае инвертированная. Соответственно 1=LOW, 0=HIGH. Используя команду io мы можем легко работать с цифровыми пинами из bash-скриптов и строить простую логику для автоматизации и управления.

В качестве демонстрации простоты работы с цифровыми входами и индикацией, напишем бесполезный скрипт, отображающий статус цифрового входа с помощью светодиода.

#!/bin/bash
while true
do
	[ $(io get bin0) -eq 0 ] && led fast || led on
done

Принцип работы скрипта прост: если BIN0 в состоянии 0, то диод горит часто, иначе горит непрерывно. Вот как это выглядит вживую:

Демонстрация работы bash-скрипта, отображающего состояние цифрового входа с помощью индикатора.

Несмотря на примитивность этого скрипта, он наглядно показывает, как в одну строчку, без дополнительного ПО, библиотек и настроек можно получать входные данные с цифровых входов и реагировать на них.

Ссылки

  • В данной статье не затрагиваются сетевые функции роутеров, такие как балансировка, failover, VPN и прочее, так как все эти темы уже разобраны в другой нашей статье: Промышленные 4G-роутеры SmartMotion [16].
  • Пример применения роутера ICR-3211B [2] есть в нашей первой статье: Привет, мы Advantech [17].
  • Ознакомиться с ценами на продукцию можно в общем онлайн-магазине [18]. Собственный сайт на русском еще не готов.

Автор: Advantech Россия

Источник [19]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/lte/327657

Ссылки в тексте:

[1] ICR-3200: https://www.advantech.ru/products/industrial-iot-4g-lte-router-gateway/sub_7e21d2de-630c-4925-a51c-f41c18642d72?utm_source=habr&utm_medium=post&utm_campaign=icr-3200&utm_content=all

[2] ICR-3211B: https://www.advantech.ru/products/7e21d2de-630c-4925-a51c-f41c18642d72/icr-3211b/mod_3e1da9ee-6d63-4539-a4c2-d903fb360c5c?utm_source=habr&utm_medium=post&utm_campaign=icr-3200&utm_content=icr-3211b

[3] NB-IoT: https://ru.wikipedia.org/wiki/NB_IoT

[4] ионистор (суперконденсатор): https://ru.wikipedia.org/wiki/%D0%98%D0%BE%D0%BD%D0%B8%D1%81%D1%82%D0%BE%D1%80

[5] Sleep Mode: https://ep.advantech-bb.cz/products/software/user-modules/download/333/sleep-mode-application-note-20190329.pdf

[6] руководстве разработчика.: https://advantech-bb.cz/support/router-models/download/294/programming-of-user-modules-20181121.pdf

[7] Modbus-RTU2TCP: https://ep.advantech-bb.cz/products/software/user-modules#protocol-modbus-rtu2tcp

[8] https://advantech-bb.cz/products/software/user-modules: https://advantech-bb.cz/products/software/user-modules

[9] Node-RED: https://ep.advantech-bb.cz/products/software/user-modules#node-red

[10] Nodejs: https://ep.advantech-bb.cz/products/software/user-modules#nodejs

[11] Python2/3: https://ep.advantech-bb.cz/products/software/user-modules#python3

[12] Веб-shell: https://ep.advantech-bb.cz/products/software/user-modules#web-terminal

[13] Azure IoT SDK Python: https://ep.advantech-bb.cz/products/software/user-modules#azure-iot-sdk-python

[14] и разделе для разработчиков: https://ep.advantech-bb.cz/devzone

[15] окружение для кросс-компиляции: https://ep.advantech-bb.cz/devzone/preparing-build-environment

[16] Промышленные 4G-роутеры SmartMotion: https://habr.com/ru/company/advantech/blog/449962/

[17] Привет, мы Advantech: https://habr.com/ru/company/advantech/blog/445912/

[18] онлайн-магазине: https://buyemt.advantech.com/?utm_source=habr&utm_medium=post&utm_campaign=icr-3200&utm_content=buyemt

[19] Источник: https://habr.com/ru/post/464003/?utm_source=habrahabr&utm_medium=rss&utm_campaign=464003