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

    image

    В сфере промышленной автоматизации существует негласная парадигма, в которой многие производители промышленного оборудования делают контроллеры отдельно, а модемы отдельно. Как правило, каждое устройство помещается в свой корпус, имеет своё питание, большие габариты и высокую стоимость. Такой вариант разделения функционала имеет свои преимущества и недостатки, но, по нашему мнению, он ведет, скорее, к бóльшей коммерциализации, чем обусловлен какими-то объективными причинами. Поэтому мы решили пойти немного по другому пути и сделали универсальное устройство, которое представляет из себя свободно программируемый контроллер на базе 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 и стыковка с различными сервисами)

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

    Подробнее
    Реклама

    Комментарии 21

      +1
      Выключать модем следует либо AT-командами, либо через пин PWRKEY. Частое и внезапное отключение питания у модема может вызвать повреждения файловой системы. Это в меньшей степени касается модемов с файловой системой UBIFS — это распространенные 4G-модемы на базе чипсетов mdm9x07.
        0
        Спасибо за комментарий. Возможно Вы правы, учтём данное замечание. Попробуем использовать AT команды, данный скрипт приведён для примера и все могут внести вклад в его «реконструкцию».
        0
        многие производители промышленного оборудования делают контроллеры отдельно, а модемы отдельно
        Наверно делают контроллеры отдельно, а роутеры и модемы отдельно. И думаю для этого есть много причин:
        Роутер обслуживает несколько контроллеров.
        Роутер защищает контроллер.
        Неисправность модема/роутера не вызывает отказ контроллера.
        Модем/роутер выносятся в зону уверенного приема.
        Модем/роутер может заменить не специалист.
        И т.д.

          0
          Согласен с выше сказанным. Правда это устройство может быть как отдельным 3g роутером, так и выполнять функции контроллера. Такое устройство может обслуживать и себя и другие контроллеры, что логично. Замена mPCi модуля под силу многим.
          0
          Если у вас десятки этих модемов и проблемы со связью, то вы их будете непрерывно делать. Есть очень много причин, почему так делать нельзя. Нужен отдельный сервис, который будет контролировать состояние AT-командами. Тем более, что так можно получать информацию об уровне сигнала, принимать СМС и т.п.
          Справедливости для, периодически (раз в несколько суток) перегружать китайские ширпотребные модемы, это хорошая идея, но делать это лучше тоже АТ-командами.
            0
            Хорошо, по поводу АТ команд писал выше. А Huawei не самая шерпотрепная фирма, хоть и китайская.
            0
            Приведите конкретные примеры использования данного устройства?
            Что то я сомневаюсь в его реальном применении в промышленных объектах.
            Температурные режимы хотя бы… вся эта автоматизация в на мини — пк живет ярко, но не долго в теплое время года.
              0
              Корабельщики брали видимо для связи, крупные компании как шлюз IIoT мониторить то что накопилось на предприятиях, Умный дом. Самое интересное это беспилотные поплавки для анализа колебания воды на пол года в море))) Многие клиенты вообще не знаем что делают с ними.
                0
                Может как игрушка контроллера умного дома и подойдет, но для облачных решений точно нет. Передача данных у этих процессоров последовательная, а не параллельная, портов много но они стоят в очереди.
                  0
                  Возможно передача и последовательная. А какая скорость для облачных решений нужна? Никто большие потоки и не гоняют, в основном телеметрия. На счёт умного дома я не согласен, я работал в этой сфере и там как раз подобное железо эксплуатируют гораздо сильнее чем а пром зоне: видеопотоки, аудио, телеметрия, веб сервер и все это в одном железе разом.
                    0
                    Видать у нас разные подходы к проектированию умного дома. Мне больше понятней массив физических микро-кластеров не зависимых от друга.
                      0
                      Согласен, распределённый подход лучше, но никто не отменял стыковку с верхним уровнем, а для этого нужен шлюз. Мы описывали дешевую реализацию управления освещением в своей первой статье, можете почитать.
              0
              Скрипты у вас конечно мда. Кстати на гитхаб хорошо бы класть, чтобы можно было удобно предлагать улучшения. Ну вот очевидное предложение
              sudo kill -USR1 $(ps ax | grep 'check_inet' | awk '{print $1}')

              Почему бы не?
              sudo killall -USR1 check_inet.sh


              Вообще
              ps ax | grep FOO| awk
              никогда не нужно делать. Это чудовищный франкенштейн, а его все копипастят. Есть же pgrep/pkill.
                +1
                Спасибо за помощь. На счёт гитхаба хорошая идея. Мы больше по железу, поэтому предложили свои скрипты возможно «кривые» с точки зрения программистов. Учтём Ваши предложения.
                  0

                  и вообще можно было переписать все на systemd

                  0

                  Не думали туда хаб эзернетовский добавить?

                    0
                    Делаем модуль расширения с независимым вторым Ethernet портом, места мало и не факт что влезет больше одной дополнительной розетки. У большинства запрос: второй независимый порт для разделения уровней сетей. Низкий уровень (modbus, pfofinet...) и высокий уровень (mqtt, opc..)
                    0
                    Ценник на железку слишком высокий для применения в проектах.
                      0
                      Согласен, но с учетом нынешнего рынка и стоимости деталей индустриального исполнения мы не сильно накручиваем ценник. С алиэкспресом сравнивать тоже не правильно, т.к. Купить у них официально на юр лицо будет стоить так же с растаможкой, но без гарантии и тех поддержки.
                      0

                      ИМХО всю статью можно было бы сократить до: «поставили pci-e модемы, они тоже зависают, перезагружаем по питанию».


                      у меня USB 4G модемы, перезагружать приходится, кроме этого работают отлично.


                      USB-модем:


                      • дешевле;
                      • имеет 4G;
                      • имеет встроенную антенну (внешние тоже можно подключить, но в городе этого обычно не требуется).

                      какие преимущества у вашего решения?

                        0
                        Зависает крайне редко и по вине провайдера, цена на модем не выше чем на свисток, решение выглядит коммерчески законченным, антенна надежно крепится. В общем для дома я бы тоже использовал свисток, а вот в Белазы и пром щиты мы устанавливаем такие решения. Как минимум вибрации пережить и отвал антенного пигтейла. 4G никто не запрещает поставить, но в этом нет смысла т.к. Потоки данных исчисляются в килобайтах. Даже в Умный дом продавать rasberry с торчащим свистком мне кажется стыдно. Коммерция есть коммерция ))

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое