Уважаемые гости и пользователи форума!
Чтобы видеть ссылки на форуме - надо зарегистрироваться и иметь 1 пост на форуме. Для этого есть КУРИЛКА и там тема Здрасти.

Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

OpenWrt — встроенная операционная система, основанная на ядре Linux, и предназначенная, в первую очередь, для домашних маршрутизаторов. Основные компоненты включают в себя ядро Linux, util-linux, uClibc или musl и BusyBox. Размер всех компонентов оптимизирован в связи с тем, что в большинстве домашних маршрутизаторов сильно ограничен объём памяти.

Модераторы: rewuxiin, kulia

Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 2761
Зарегистрирован: 23 янв 2012, 22:11

Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

30 авг 2019, 18:46

Интернет-провайдер в нашей местности достал до такой степени, что пришлось искать альтернативу.
► Показать
Об этой эпопее читайте Есть ли жизнь без Ростелекома? Есть! Прощай, Ростелеком! А сейчас расскажу как подключить 3G\4G модем в режиме Hilink к роутеру с OS OpenWrt и настроить бесперебойный доступ в интернет.
Имеется модем, разблокированный под любого оператора Huawei E3372h-153. Модем работает в режиме Hilink (определяется как сетевая карта).
E3372h.png
E3372h.png (44.24 КБ) 37493 просмотра
Была задача подключить его к роутеру и раздавать интернет всем устройствам, подключенных к маршрутизатору. Модель роутера не имеет значения. Лишь бы был хотя бы 1 USB порт и прошивка OpenWrt. Ну и нужен доступ в интернет для скачивания необходимых пакетов. Раньше я поднимал точку доступа на смартфоне, а на роутере поднимал Wi-Fi клиента, теперь пользуюсь скриптом для создания локального репозитория пакетов для OpenWRT [WINDOWS].
Заходим по ssh (через Putty, например) в систему роутера и устанавливаем необходимые пакеты. Можно то же самое проделать через web-интерфейс.

Код: Выделить всё

opkg update
opkg install kmod-usb-net-cdc-ether usb-modeswitch curl
reboot
Предварительно нужно отключить NAT в модеме. Для этого подключаем модем к компьютеру, заходим в веб-интерфейс по адресу Для просмотра ссылок Вы должны быть авторизованы на форуме. и настраиваем как на картинке:
dmz.png
Подключаем модем к роутеру.
Дожидаемся перезагрузки роутера и заходим в веб-морду. Нам нужно создать новый интерфейс.
Сеть --> Интерфейсы --> Добавить новый интерфейс.
interface.png
  1. Назначаем имя интерфейсу. Имя произвольное.
  2. Назначаем протокол. DHCP-клиент. Модем сам выдаст роутеру IP-адрес.
  3. Выбираем наш модем как сетевое устройство, которое определилось в роутере. В моём случае это eth1. У меня уже создан интерфейс с именем МТС, который привязан к eth1, так что не обращайте на это внимания. :-)
  4. Применяем.
firewall.png
  1. Далее нам нужно перейти на вкладку "Настройки межсетевого экрана".
  2. Выбрать зону wan. Она всегда красным цветом.
  3. Кликнуть на кнопку "Сохранить и применить"
Ждём несколько секунд...
В списке интерфейсов должен появиться наш модем.
interfacelist.png

Веб-интерфейс модема по-прежнему доступен по адресу Для просмотра ссылок Вы должны быть авторизованы на форуме.
huawei.png
Всё, уже можно пользоваться... Некоторое время... До первого недоумения: "КУДА ДЕЛСЯ ИНТЕРНЕТ???" :-D

Не знаю как обстоят дела у других владельцев 3\4G модемов, но у меня иногда "отваливается интернет". :'( Захожу в веб-морду модема, а там всё ОК. Линк есть, даже трафик бежит. Жидкий, но он есть, а интернета НЕТ... *SCRATCH*
В 99% помогает простое отключение и включение соединения. В редких случаях нужно перезагружать модем. Но проще передёрнуть модем в USB.
У меня роутер висит на стене, как раз за монитором. Каждый раз заходить в веб-морду модема (вставать и лезть за монитор) как-то лениво... :-[ Да и "толстые" торренты качаю иногда... :-)
Что-то надо придумать для автоматического "передёргивания модема".
Что первое пришло в голову - пакет watchcat OpenWrt.
Но там, если "отвалился" интернет тупо перезагружается роутер. А это долго.
td-w8970-v1.png
td-w8970-v1.png (109.78 КБ) 37484 просмотра
По крайней мере мой гигабитный TP-Link TD-W8970 v1.2 перезагружается довольно нерасторопно. :(
Приходила мысль перешить модем в Stick (классический USB-модем) и рулить им через AT-команды *YAHOO* .
Покопал инфу в интернете и пришёл к выводу: встать и передёрнуть модем в роутере - быстрее и проще, чем прошить модем, а потом организовать автоматику через AT-команды. %)
Решение нашлось. У Huawei-ев в режиме Hilink есть API. Например, если в браузере перейти по ссылке Для просмотра ссылок Вы должны быть авторизованы на форуме. на экране появится ряд чисел
APIstatus.png
APIstatus.png (5.82 КБ) 37483 просмотра
а код страницы имеет довольно информативные теги

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<response>
<ConnectionStatus>901</ConnectionStatus>
<WifiConnectionStatus></WifiConnectionStatus>
<SignalStrength></SignalStrength>
<SignalIcon>5</SignalIcon>
<CurrentNetworkType>9</CurrentNetworkType>
<CurrentServiceDomain>3</CurrentServiceDomain>
<RoamingStatus>0</RoamingStatus>
<BatteryStatus></BatteryStatus>
<BatteryLevel></BatteryLevel>
<BatteryPercent></BatteryPercent>
<simlockStatus>0</simlockStatus>
<WanIPAddress>10.111.217.135</WanIPAddress>
<WanIPv6Address></WanIPv6Address>
<PrimaryDns>212.188.31.152</PrimaryDns>
<SecondaryDns>212.188.31.153</SecondaryDns>
<PrimaryIPv6Dns></PrimaryIPv6Dns>
<SecondaryIPv6Dns></SecondaryIPv6Dns>
<CurrentWifiUser></CurrentWifiUser>
<TotalWifiUser></TotalWifiUser>
<currenttotalwifiuser>0</currenttotalwifiuser>
<ServiceStatus>2</ServiceStatus>
<SimStatus>1</SimStatus>
<WifiStatus></WifiStatus>
<CurrentNetworkTypeEx>46</CurrentNetworkTypeEx>
<maxsignal>5</maxsignal>
<wifiindooronly>-1</wifiindooronly>
<wififrequence>0</wififrequence>
<classify>hilink</classify>
<flymode>0</flymode>
<cellroam>0</cellroam>
<ltecastatus>0</ltecastatus>
</response>
УРЯЯЯЯ-ЯЯЯ-Я! *YAHOO* *DANCE*
Устанавливаем curl в роутере,

Код: Выделить всё

opkg update
opkg install curl
заходим в консоль, набираем команду

Код: Выделить всё

curl -s -X GET http://192.168.8.1/api/monitoring/status
и получаем ОБЛОМ!!!! ]:->
APIopenwrt.png
Потратив изрядное количество времени в поиске информации, всё-таки нашёл объяснение такого поведения API модема. Всё дело в безопасности. Чтобы не было несанкционированного доступа к API модема. То есть для нормального ответа API модема нам нужно как-то легализовать свои запросы.
Пишем команду в консоли роутера:

Код: Выделить всё

curl -s -X GET http://192.168.8.1/api/webserver/SesTokInfo
и получаем информацию:

Код: Выделить всё

<?xml version="1.0" encoding="UTF-8"?>
<response>
<SesInfo>SessionID=tJnebnySHLlP+whNsVwHn5yJMFizfddRGJZwH7lea4Es69qnk40CUaYQ0h0jr06EriRBZ8glcZGg/wRuQCPRofm0l1YxFefLhLLZRwX9QO700PIkCkKOB2IxEXPyrGlV</SesInfo>
<TokInfo>tuY0erY9OgnafggIYylBN2mm+cI/mntb</TokInfo>
</response>
Чтобы API модема нормально принимала команды, нужно предварительно и перед каждой командой запрашивать данные сессии и внедрять содержимое тегов <SesInfo></SesInfo> и <TokInfo></TokInfo> в тело запросов.
Путём метода "научного тыка", несчётного количества проб и ошибок я написал небольшой скрипт, который позволяет управлять модемом через API.
Пока только пинг гугловского DNS и три варианта реакции на отсутствие ответа.
1. Отключение и включение линка в модеме.
2. Если не помогло - перезагрузка модема.
3. Если и это не помогло - перезагрузка роутера.
Алгоритм пока сырой. Но пользоваться уже можно.

Код: Выделить всё

#!/bin/ash
# самая первая строка не ошибка!
#functions
getToken() {
	SesTokInfo=$(curl -s -X GET http://192.168.8.1/api/webserver/SesTokInfo) #получаем данные
	export SesInfo=$(echo "${SesTokInfo}" | grep SesInfo | cut -d ">" -f2 | cut -d "<" -f1) #получаем SesInfo
	export TokInfo=$(echo "${SesTokInfo}" | grep TokInfo | cut -d ">" -f2 | cut -d "<" -f1) #получаем TokInfo
}
#
checkLink() {
	export LIMIT=$1
	for i in $(seq 0 $LIMIT)
	do
	if ping -W 5 8.8.8.8 -c 1 >>  /dev/null; then
		export LinkOFF=0
		#uci set system.led_wps.trigger='none'
		#uci commit
		#echo "none" > /sys/class/leds/tdw89x0:green:wps/trigger
		break;
	else
		logger "No internet connection. Wait..."
		sleep 1
	fi
	export LinkOFF=1
	done
}
#
getStatusLink() {
	getToken
	StatusAll=$(curl -s -X GET http://192.168.8.1/api/monitoring/status -H "Cookie: $SesInfo" -H "__RequestVerificationToken: $TokInfo")
	export statusLink=$(echo "${StatusAll}" | grep ConnectionStatus | cut -d ">" -f2 | cut -d "<" -f1) #получаем состояние подключения
	#echo $statusLink
}
#
setLinkOFF() {
	getToken
	# отключаем соединение
	curl http://192.168.8.1/api/dialup/mobile-dataswitch -H "Cookie: $SesInfo" -H "__RequestVerificationToken: $TokInfo" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Referer: http://192.168.8.1/html/home.html" --data "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><dataswitch>0</dataswitch></request>"
}
#
setLinkON() {
	getToken
	# включаем соединение
	curl http://192.168.8.1/api/dialup/mobile-dataswitch -H "Cookie: $SesInfo" -H "__RequestVerificationToken: $TokInfo" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Referer: http://192.168.8.1/html/home.html" --data "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><dataswitch>1</dataswitch></request>"
}
rebootModem() {
	#reboot
	getToken
	curl http://192.168.8.1/api/device/control -H "Cookie: $SesInfo" -H "__RequestVerificationToken: $TokInfo" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Referer: http://192.168.8.1/html/home.html" --data "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><Control>1</Control></request>"
	logger "3G modem rebooting"
}
#begin
#Проверяем подключен ли модем
if [ X"$(ls /sys/class/net | grep eth1)" != X"" ]; then
	checkLink 1
	if [ X"$LinkOFF" == X"0" ]; then
		if [ -f "/etc/router" ]; then
			rm -rf /etc/router
		fi
	exit 0;
	else
		#uci set system.led_wps.trigger='heartbeat'
		#uci commit
		#echo "heartbeat" > /sys/class/leds/tdw89x0:green:wps/trigger
		getStatusLink
		if [ X"${statusLink}" == X"901" ]; then
			setLinkOFF
			sleep 10
			# ждём 10 секунд
		fi
		getStatusLink
		if [ X"${statusLink}" == X"902" ]; then
			setLinkON
		fi
	fi
	checkLink 10
	if [ X"$LinkOFF" == X"0" ]; then
		logger "3G modem reconnected"
		exit 0;
	else
		rebootModem
	fi
	checkLink 20
	if [ X"$LinkOFF" == X"0" ]; then
		logger "3G modem rebooted"
		exit 0;
	else
		logger "Router reboot"
		if [ ! -f "/etc/router" ]; then
			touch /etc/router
			#uci set system.led_wps.trigger='heartbeat'
			#uci commit
			reboot
		fi
	fi
fi
Итак... Чтобы использовать данный скрипт, нам нужно настроить cron и создать расписание, по которому он будет запускаться.

Код: Выделить всё

touch /etc/crontabs/root
ln -sf /etc/crontabs/root /etc/crontab
/etc/init.d/cron start
/etc/init.d/cron enable
Проверим запуск cron

Код: Выделить всё

logread | grep "cron"
Выхлоп должен быть примерно таким:

Код: Выделить всё

Sun Sep  1 07:26:50 2019 cron.info crond[2481]: crond (busybox 1.28.4) started, log level 5
Теперь нам нужно разместить скрипт в файловой системе роутера и создать расписание запуска сценария.
В OpenWrt по-умолчанию в целях экономии размера прошивки нет продвинутого текстового редактора. Только vi с минимальным функционалом. Так что будет проще и быстрее залить готовый файл скрипта в роутер любым удобным способом. Например, WinSCP из-под Windows
WinSCP.png
Удобнее всего размещать скрипты в каталоге /etc
После копирования файла в файловую систему роутера, нам нужно установить атрибуты скрипта на исполнение. Можно сделать тем же WinSCP.
WinSCPattr.png
или консольной командой

Код: Выделить всё

chmod o+x /etc/m.sh
Осталось написать и запустить задание для cron. Быстрее всего это можно сделать через консоль (Скрипт будет запускаться каждую минуту - значение "*/1").

Код: Выделить всё

echo -e "*/1 * * * * sh /etc/m.sh\n" >> /etc/crontab
/etc/init.d/cron restart
На этом всё. Удачи! *DRINK*

P.S. Как я уже упоминал, скрипт написан "на коленке". Есть что оптимизировать и дополнить. Например, добавить мигание индикаторами при обрыве линка. В скрипте эти строки есть, но закомментированы. Если хотите сделать себе индикацию, пишите, указав версию прошивки и модель роутера.
Вложения
m.zip
Готовый скрипт
(1.22 КБ) 293 скачивания
rewuxiin
Супер модератор
Супер модератор
Сообщения: 222
Зарегистрирован: 30 окт 2012, 15:14

Re: Управление 3G\4G модемом Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

31 авг 2019, 12:16

в TPlink-ах обычно есть wathdogs. устанавливаешь пинг в яндекс и если нет ответа - перезагружаешь все устройство, раз usb модем питается от него
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 2761
Зарегистрирован: 23 янв 2012, 22:11

Re: Управление 3G\4G модемом Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

31 авг 2019, 12:26

rewuxiin писал(а):
31 авг 2019, 12:16
в TPlink-ах обычно есть wathdogs. устанавливаешь пинг в яндекс и если нет ответа - перезагружаешь все устройство, раз usb модем питается от него
Это watchcat в OpenWrt. Дык долго же. Тем более если роутер не имеет программного управления питанием USB-портов, модем так и останется зависшим линком. И я ещё не дописал статью. Финал с хэппи-эндом. :-D
Mordevolt
Сообщения: 1
Зарегистрирован: 09 июн 2020, 20:15

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

09 июн 2020, 20:19

Расскажите пожалуйста конец истории! аналогичная проблема с модемом, вот сейчас пытаюсь воспользоватся вашим скриптом.
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 2761
Зарегистрирован: 23 янв 2012, 22:11

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

10 июн 2020, 19:54

Mordevolt писал(а):
09 июн 2020, 20:19
Расскажите пожалуйста конец истории!
Да что рассказывать....
Обновил в роутере прошивку 18.06. Всё работает :-)
Спрашивайте, если что.
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 2761
Зарегистрирован: 23 янв 2012, 22:11

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

15 сен 2020, 18:42

bezoomie писал(а):
15 сен 2020, 00:12
интернет не отваливается?
Очень-очень редко :-)
Основная проблема сейчас в том, что М Т С научилась палить раздачу с патченного модема на "безлимитном" тарифе и частенько ни с того, ни с сего режет скорость до 1 мегабит. ]:->
Приходится вручную делать реконнект через вебморду модема.
Решение пока не ищу - ростелеком тянет к нам оптику, обещает GPON \m/ \m/
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 2761
Зарегистрирован: 23 янв 2012, 22:11

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

01 ноя 2020, 05:59

Ростелеком, как и предполагалось, подложил очередную свинью! ]:->
Оптику протянули только до своей будки.
Дальше как прежде - по ADSL *ROFL*
Единственная разница: теперь скорость будет не 256 килобит/сек., а 6 мегабит. \m/ \m/ :-|
И то только к Новому Году доделают...
Нафига мне такой интернет, буду сидеть на мобильном. :-)
В связи с этим обновил скрипт.
Добавил проверку наличие модема.
Если модема нет, скрипт ничего не делает. То есть, если модема нет, теперь роутер не перезагружается.
Kirgiz_09
Сообщения: 2
Зарегистрирован: 29 ноя 2021, 05:38

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

29 ноя 2021, 05:48

Здравствуйте. А сможете накидать 2 скрипта:
1. Переключение на "Только 3g"
2. Переключение на "Только 4g"
По вечерам на 4g сеть лежит, приходится вручную через веб-интерфейс каждый день переключать на 3g на 2-3 часа, а потом ночью обратно на 4g.
Буду очень признателен!
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 2761
Зарегистрирован: 23 янв 2012, 22:11

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

29 ноя 2021, 10:56

Kirgiz_09 писал(а):
29 ноя 2021, 05:48
А сможете накидать 2 скрипта:
1. Переключение на "Только 3g"
2. Переключение на "Только 4g"
Как вы себе всё это представляете?
Kirgiz_09
Сообщения: 2
Зарегистрирован: 29 ноя 2021, 05:38

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

29 ноя 2021, 19:13

SinglWolf писал(а):
29 ноя 2021, 10:56
Как вы себе всё это представляете?
Допустим создать скрипт "Только 3g", добавить в crontab выполнение в 19:30, а "Только 4G" в 23:30.

При вводе адреса Для просмотра ссылок Вы должны быть авторизованы на форуме. я тоже получил ответ как у вас на скриншоте.
Параметр <CurrentNetworkType>9</CurrentNetworkType> это и есть тип сети как я понимаю (в данном случае "Только 3g"). Для "Только 4G" этот параметр равен 19. Нет ли возможности отправить по Curl команду на изменение этого параметра?
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 2761
Зарегистрирован: 23 янв 2012, 22:11

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

29 ноя 2021, 19:42

Kirgiz_09 писал(а):
29 ноя 2021, 19:13
При вводе адреса Для просмотра ссылок Вы должны быть авторизованы на форуме. я тоже получил ответ как у вас на скриншоте.
Параметр <CurrentNetworkType>9</CurrentNetworkType> это и есть тип сети как я понимаю (в данном случае "Только 3g"). Для "Только 4G" этот параметр равен 19. Нет ли возможности отправить по Curl команду на изменение этого параметра?
Я уже забыл всё, если честно :-D .
Смотрите код скрипта.Есть же команды модему. Смотрите как отправляются. Всё возможно.
У меня сейчас просто нет времени на это :-[ . Только после НГ *PARDON* .
Funjy
Сообщения: 1
Зарегистрирован: 06 фев 2022, 12:06

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

06 фев 2022, 12:07

Классный мануал. Большое спасибо!
azzee
Сообщения: 1
Зарегистрирован: 29 май 2023, 00:11

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

16 янв 2024, 21:36

А как сделать просто рестарт модема через хайлинковский API, просто ежечасно?
Или реконект может можно сделать ежечасно?
Аватара пользователя
SinglWolf
Администратор
Администратор
Контактная информация:
Откуда: Башкирия
Сообщения: 2761
Зарегистрирован: 23 янв 2012, 22:11

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

17 янв 2024, 08:42

azzee писал(а):
16 янв 2024, 21:36
А как сделать просто рестарт модема через хайлинковский API, просто ежечасно?
Или реконект может можно сделать ежечасно?
На 4pda есть тема про E3372h. Читал там, что можно залезть в сам модем и настроить в системе crontab.
А так, рестарт роутера можно делать ежечасно, если время перезагрузки не напрягает.
galyabox
Сообщения: 1
Зарегистрирован: 29 июл 2024, 20:23

Re: Продвинутый рестарт (smart reboot) 3G\4G модема Huawei E3372 в режиме Hilink через роутер с прошивкой OpenWrt

04 авг 2024, 19:53

Большое спасибо за статью *OK* . До этого использовал селениум для смены ip, долго и не удобно

Вернуться в «OpenWrt|LEDE»