Апаратне вирішення зависання GSM-модемів

Проблема

  1. Вирішення проблеми
  2. Як використовується пристрій
  3. Результат

Проблема

У нашій організації є 140 необслуговуваних вузлів (комплексів), які встановлені у віддалених місцях від Анапи до Певека, в основному на відомчих майданчиках. Сам комплекс складається з компактного комп'ютера на Win32 і GNSS-прийомника з антеною на даху. Нам потрібно раз на 15 хвилин отримувати з них дані. На деяких станціях є доступ у відомчу мережу, але часто доводиться використовувати мобільний Інтернет. Ось так виглядає комплекс:

Звичайні USB-модеми (т. зв. «свистки») зарекомендували себе дуже погано: вони занадто часто зависають, а якість прийому слабкого сигналу залишає бажати кращого. Ми стали використовувати більш дорогі USB-модеми промислового типу з виносною кімнатною антеною. Але і вони періодично зависали, що призводило до недоступності комплексу. Доводилося дзвонити на метеостанції, де встановлені наші комплекси, подовгу пояснювати літнім спостерігачам, який саме кабель потрібно витягнути і вставити назад. Не всі погоджувалися виконувати таку складну процедуру.

Вирішення проблеми

На ринку існують роутери GSM з вбудованим всередині сторожовим таймером, але найчастіше вони працюють з кінцевим обладнанням по Ethernet, що ускладнює налаштування, і коштують в кілька разів дорожче. Стійко працюючі модеми за помірну ціну не підтримують 3G.

Ми вирішили піти іншим шляхом. Спочатку налаштували автоматичне щодобове перезавантаження комп'ютерів, але це не завжди допомагало: харчування на USB-модем подавалося навіть при вимкненому комп'ютері, і це було неможливо переналаштувати в BIOS. До того ж, перезавантаження перериває збір даних.

Так виникла ідея створити USB-реле, яке буде жорстко скидати харчування GSM-модема в разі його зависання. Ми отримали відповідний виріб на замовлення і почали розмикати «плюс» за допомогою реле командою з комп'ютера. В цілому, рішення працювало, але при включенні модема в половині випадків комп'ютер йшов у перезавантаження. Це було пов'язано з тим, що в модемі стояли два великих конденсатора на вході, які викликали стрибок струму при включенні, на що не розрахований порт USB, і наш маленький комп'ютер це відчував. Щоб уникнути небажаних перезавантажень ми замовили спеціальний випуск USB-реле з двоступеневим включенням навантаження: спочатку модем включається через резистор, вже потім безпосередньо. Ось так виглядає готовий пристрій з подовжувачем для зручності:

Конструкція має два USB-штекери: один на управління реле, і один на транзит до керованого приладу (модему). Єдине USB-гніздо призначене для підключення приладу, саме в ньому за керуючою командою розмикається «плюс».

Як використовується пристрій

Далі ми написали керуючу програму, яка визначає, коли потрібно перезавантажити модем, і відправляє команду на його перезавантаження. Працює вона за наступним алгоритмом:

  1. 3 рази на годину програма запускається з планувальника завдань Windows.
  2. Програма перевіряє доступність нашого сервера.
  3. Якщо 4 пінги поспіль були невдалими, програма подає команду на вимикання/включення модема через реле. При цьому робиться затримка перед включенням, щоб вбудовані конденсатори встигли розрядитися.
  4. Результати пінгів і вчинені дії записуються в лог (вимикання/включення модема).
  5. При першій можливості логи відправляються на наш сервер, де всі події записуються в базу даних для подальшого централізованого аналізу всіх причин відмов роботи станцій.

Ось приклад лога:

Дата/час

Кількість доступних серверів

Кількість невдалих пінгів поспіль

Доступ до основного сервера

Виконання команди

2017-01-24 20:37:00

0/2

6

no

 

2017-01-24 20:57:00

0/2

7

no

 

2017-01-24 21:17:00

0/2

8

no

resetmodem

2017-01-24 21:37:00

0/2

9

no

 

2017-01-24 21:57:00

0/2

10

no

 

2017-01-24 22:17:00

0/2

11

no

 

2017-01-24 22:37:00

0/2

12

no

resetmodem

2017-01-24 22:57:00

0/2

13

no

 

2017-01-24 23:17:00

1/2

0

ok

 

2017-01-24 23:37:00

1/2

0

ok

 

2017-01-24 23:57:00

1/2

0

ok

 

З даного лога видно, що було здійснено два перезавантаження модема, після другої з них наш сервер став в кінцевому підсумку доступний.

Типова ситуація: гроші на сім-карті скінчилися, модем не працює, станція недоступна. Рахунок поповнили, але модем сам не може запустити мобільний Інтернет, поки його не перезавантажить USB-реле (буває необхідна перереєстрація в мережі GSM через холодний пуск). Якщо ж з грошима все гаразд, мережа не зникає, то модем пропрацює без проблем близько 36 годин, а потім, швидше за все, знову зависне і вимагатиме перезавантаження. Раніше для перезавантаження модема доводилося дзвонити в інші часові пояси, турбувати людей, пояснювати... Спостерігачі на віддалених пунктах отримали посилки з нашим химерним пристроєм, здолали інструкцію з з'єднання трьох USB-штекерів, і більше перезавантажувати модеми ми їх не просили, тепер це відбувається за клацанням USB-реле і вирішується комп'ютером самостійно.

Сама програма написана нами на JScript (це така вбудована в Windows Javascript-подібна мова) і встановлювалася на станції віддалено або через Remote Desktop, або через власну систему централізованого управління станціями на PowerShell Remoting. Треба сказати, через PowerShell працювати з великою кількістю станцій простіше: один раз написав інструкцію, і на всіх станціях виконується установка автоматично. До того ж, не потрібно чекати, поки прогрузиться графічний інтерфейс (як у випадку з Remote Desktop).

На деяких особливо важливих станціях з нестабільним дротовим підключенням використовується GSM-модем в якості резервного каналу. І його було бажано вмикати тільки тоді, коли дротовий канал не працює. Тут, знову ж таки, на допомогу приходить USB-реле: як тільки пінги перестали проходити по основному (дротовому) каналу, включається модем, Windows автоматично переходить на нове підключення з іншим дефолтним шлюзом. Далі раз на добу модем через реле вимикається, щоб можна було перевірити основне з'єднання. Якщо воно все ще не працює, модем вмикається назад.

Треба сказати, управління дефолтними шлюзами - це зазвичай ціла історія: у законах IP «шлюз за замовчуванням» може бути тільки один, а маніпуляції з таблицею маршрутизації призводять до проблем. Справа в тому, що при відключенні мобільного з'єднання можуть змінюватися номери мережевих адаптерів, до яких прив'язуються ручні записи в таблиці маршрутизації. Виходу два: або «залізне» відключення другого каналу через реле, або тонке і акуратне налаштування метрики шлюзів з перевіркою логіки роботи метрик за всіма сценаріями.

Всі події пишуться до бази даних і відображаються в інтерфейсі Таблиці обліку станцій центрального сервера:

Результат

Коротко резюмую, як працює система, що вийшла:

  1. Комп'ютер збирає дані з вимірювального приладу станції.
  2. USB-модем передає дані через стільникову мережу.
  3. USB-реле управляє харчуванням модема.
  4. Програма вимикає і включає живлення модема (через реле) в разі зависання або коли потрібно перемкнути канал зв'язку.
  5. Реле включає модем плавно, щоб уникнути стрибків струму.

Модеми, які ми використовуємо, обходяться приблизно по 6 000 руб., ще 2 300 руб. USB-реле. У сумі це дешевше, ніж використання модемів з вбудованим сторожовим таймером, які мають і ряд недоліків:

  1. Модеми зі сторожовим таймером використовують окремий блок живлення, роз'єм від якого довелося б припоювати до нашого 12-вольтового джерела безперебійного живлення.
  2. Немає можливості просто вимкнути або увімкнути модем для автоматичного переходу між дротовим каналом зв'язку і GSM.
  3. Бувають випадки, коли модем не завис, але сім-карта в мережі не реєструються. Чи допоможе тут сторожовий таймер - невідомо. Так само як ніхто не гарантує, що сам він не зависне. Наше рішення діє від кінцевого результату: немає з'єднання - скидаємо живлення модема.

Використання ж USB-реле для управління модемом має такі переваги:

  1. Модеми можна використовувати вже наявні, в тому числі недорогі, часто зависаючі.
  2. Під час з «єднання дротів модем можна просто вимкнути, щоб не витрачати трафік, а вмикати лише при виникненні проблем з дротовим з» єднанням. Причому автоматично.
  3. Проста установка: потрібно тільки з'єднувати три USB-штекери і встановити програму. Помилитися у фізичному підключенні важко.

Побачити і почути, як працює реле, вимикаючи і включаючи модем, можна на цьому відео:

У підсумку, проблема зависання GSM-модемів вирішена залізно (в прямому і переносному сенсах) і більше нас не турбує. А заодно з'явилися додаткові можливості з управління каналами зв'язку.

Сама проблема віддалених необслуговуваних пунктів виникала через специфіку роботи з розподіленими системами: ми займаємося моніторингом космічної погоди і підтримуємо мережу вимірювальних станцій, почитати про це можна тут.

Якщо виникнуть питання, пишіть: Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.

P.S. Висловлюю подяку колезі Олексію Васильєву за участь у написанні статті.