image

В сфере промышленной автоматизации существует негласная парадигма, в которой многие производители промышленного оборудования делают контроллеры отдельно, а модемы отдельно. Как правило, каждое устройство помещается в свой корпус, имеет своё питание, большие габариты и высокую стоимость. Такой вариант разделения функционала имеет свои преимущества и недостатки, но, по нашему мнению, он ведет, скорее, к бoльшей коммерциализации, чем обусловлен какими-то объективными причинами. Поэтому мы решили пойти немного по другому пути и сделали универсальное устройство, которое представляет из себя свободно программируемый контроллер на базе Linux с модемом в едином корпусе. Это нам позволило в своих проектах практически совсем отказаться от привычных всем щитов автоматизации и прийти к более мобильным решениям.

Под катом этой статьи мы поделимся с Вами тонкостями настройки модема и несколькими полезными скриптами для более стабильного 3G-соединения.

Предпосылки и решения


При разработке своего устройства мы руководствовались тем, что оно должно выходить в мобильный интернет, чтобы подключаться к облачным платформам. Было два пути: напаивать модем на плату, либо использовать mPCIe-разъемы. Мы остановились на втором варианте и предусмотрели сразу два mPCIe-разъема (рисунок 1), поскольку такой вариант нам показался более интересным и гибким. Ведь установка и замена модема занимает считанные секунды, плюс для пользователя появляется необходимая вариативность и он может использовать такие комбинации mPCIe-модулей, которые ему необходимы под конкретный проект. Кроме 3G-модема это может быть LoraWan или Wi-Fi модули. Плюс ко всему mPCIe-решения зарекомендовали себя как достаточно надежные и качественные.

image
Рисунок 1 — mPCIe-разъемы

В качестве основного 3G-модуля для нашего устройства мы рассматривали следующие варианты:

  • MikroTik R11e-LTE6
  • Quectel EC25-E
  • YUGA CLM920 TE5
  • HUAWEI MU709s-2p

Однако после проведения тестов наиболее предпочтительным для нас в плане надежности и соотношения цена-качество оказался модем фирмы HUAWEI (рисунок 2). Мы взяли его за основу и устанавливаем опционально в наши устройства. Поэтому в дальнейшем мы будем рассматривать настройку и скрипты относительного модема этой модели. Возможно, этот скрипт будет универсальным и будет полезен для других модемов, однако стабильность работы с другими моделями не гарантируется. Для Rasbian Buster и HUAWEI MU709s-2p всё работает отлично.

image
Рисунок 2 — Модем HUAWEI MU709s-2p, установленный на плату устройства

Использование скрипта для перезагрузки 3G-модема


Для более устойчивой и безотказной работы мы написали скрипт, который будет пинговать заданный IP-адрес, а если же определенное в настройках количество пингов не прошло, то GSM-модем перезагрузится, тем самым восстанавливая зависшее сетевое соединение. Стоит отметить, что модем определяется в системе как сетевая карта lan1.

Архив со всеми необходимыми файлами можно скачать по этой ссылке. Также текст самих скриптов представим ниже.

Файл check_inet.sh необходим для проверки наличия интернет соединения. Если заданный IP-адрес не пингуется, то мы дергаем 19 ногу и перезапускаем модем по питанию. Код из себя представляет следующий вид:

#!/bin/bash
#count=0;
#echo "Start script"
#echo 19 > '/sys/class/gpio/export'

while [ true ]; do
# sleep 30
. /home/pi/igate.conf
#echo $usb_port
#echo 'AT^NDISDUP=1,1,''"'$apn'"''\r\n' 
#echo 'AT^NDISDUP=1,1,"internet.mts.ru"\r\n' 
flag=0

for ((i = 1; i <= $ping_count; i++)); do
#for i in {1..$ping_count}; do #делаем 5 пингов до сервера
#ping -I eth1 -c 1 8.8.8.8 > /dev/null || flag=$(($flag+1))
ping -I $interface -c 1 $ping_ip || flag=$(($flag+1))
sleep 1
done

if [ "$flag" -ge "$ping_error" ]; then #если потерь пакетов больше 3х
#echo "рестарт модема - начало"
#count=$((count+1))
#echo $count
#рестарт модема
sudo ifconfig eth1 down
echo 19 > '/sys/class/gpio/export'
echo out > '/sys/class/gpio/gpio19/direction'
echo 0 > '/sys/class/gpio/gpio19/value'
sleep 1
echo 1 > '/sys/class/gpio/gpio19/value'
sleep 15
sudo ifconfig eth1 up
sleep 1
#echo -en 'AT^NDISDUP=1,1,"internet.mts.ru"\r\n' > /dev/ttyUSB3
#АТ команда для записи настроек точки доступа APN
echo -en 'AT^NDISDUP=1,1,''"'$apn'"''\r\n' > $usb_port
#echo "рестарт модема - конец"
fi
sleep $timeout
done 

Файл start_inet.sh запускает check_inet.sh после перезагрузки устройства:

#!/bin/bash

### BEGIN INIT INFO
# Provides:          start_inet
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This service is used to manage a servo
### END INIT INFO


case "$1" in 
    start)
        echo "Starting check_inet"
        sudo /home/pi/check_inet.sh > /dev/null 2>&1 &
        #/home/pi/check_inet.sh
        ;;
    stop)
        echo "Stopping check_inet"
        #killall servod
        sudo kill -USR1 $(ps ax | grep 'check_inet' | awk '{print $1}')
        ;;
    *)
        echo "Usage: /etc/init.d/check_inet start|stop"
        exit 1
        ;;
esac

exit 0

Также в архиве находится файл конфигурации igate.conf

Последовательность настройки:

1. Добавьте правило соответствия физического подключения COM-порта модема к концентратору USB. Для этого поправьте файл по следующему пути:

sudo nano /etc/udev/rules.d/99-com.rules

2. Добавьте в файл следующую строку:

KERNEL==”ttyUSB*”, KERNELS==”1-1.5:2.4?, SYMLINK+=”GSM”

3. Сохраните правила и перезагрузите устройство. Теперь порт Вашего модема будут определять по удобному псевдониму /dev/GSM;

4. Скачайте архив по предложенной выше ссылки, либо самостоятельно создайте файлы check_inet.sh, start_inet.sh и igate.conf;

5. Скопируйте файл check_inet.sh в папку:

/home/pi/

6. Сделайте файл check_inet.sh исполняемым:

sudo chmod +x /home/pi/check_inet.sh

7. Скопируйте файл start_inet.sh в папку:

/etc/init.d/

8. Сделайте файл start_inet.sh исполняемым:

sudo chmod +x /etc/init.d/start_inet.sh

9. Обновите конфигурацию автозагрузки выполнив команду:

sudo update-rc.d start_inet.sh defaults

10. Скопируйте файл igate.conf в папку:

/home/pi/

11. Настройте файл конфигурации. Ниже представлен файл конфигурации с комментариями:

#ip-адрес пинга. Скрипт будет пытаться пинговать этот ip-адрес, если определенное в параметре [ping_error] количество пингов не прошло, скрипт будет перезагружать GSM-модем, тем самым восстанавливая зависшее сетевое соединение.

ping_ip=”8.8.8.8?

#точка доступа APN. Это адрес точки доступа Вашего интернет-провайдера, он выдается вместе с сим-картой.

apn=”internet.mts.ru”

#период проверки соединения 3G (период пинга). Период выполнения скрипта. Каждые 30 секунд будет осуществляться проверка пингов.

timeout=30

#количество пингов. Общее количество пингов.

ping_count=5

#количество неуспешных пингов для рестарта модема. Количество неуспешных пингов, после которых необходимо выполнять перезагрузку модема. Не может быть больше чем [ping_count]. Процент потерянных пакетов нужно подбирать индивидуально в зависимости от качества покрытия сети.

ping_error=3

#LAN интерфейс модема. Сетевой интерфейс модема, обычно на устройстве AntexGate определяется как [eth1], посмотреть название можно выполнив команду ifconfig

interface=eth1

#USB порт модема. Физический USB порт к которому подключена сетевая карта, обычно на устройстве AntexGate определяется как [ttyUSB4]

usb_port=”/dev/GSM”

Управление скриптом


Запуск в фоновом режиме файла скрипта check_inet.sh:

/etc/init.d/start_inet.sh start

Остановить check_inet.sh:

/etc/init.d/start_inet.sh stop

Скрипт также автоматически запускается после перезагрузки устройства.

Варианты применения устройства


Рассмотрим основные задачи, под которые можно использовать устройство:

  1. Контроллер с выходом в интернет для передачи данных в облако;
  2. 3G-роутер для задач в «поле»;
  3. Контроллер для умного дома с резервирующим каналом 3G. То есть можно использовать LAN-порт как основной канал связи, а 3G в качестве резервного, чтобы всегда был доступ к устройству;
  4. Базовая станция LoRaWAN, то есть опрос устройств по LoRaWAN и передача данных в облако через сеть 3G или LTE;
  5. Устройство для мониторинга транспорта (подключение по CAN и стыковка с различными сервисами)

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