Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
… даже если что-то глючит и модем отключается от сети? Ну тогда поможет следующий скрипт…По мне, так это костыль, думаю есть более правильное решение.
… Пока что я не могу предоставить нормального решения, поскольку сам ещё не занялся этим. Предполагают, что это из-за того, что программа usb-modeswitch не отрабатывает корректно...Значит нужно ожидать этих проблем и бороться самому(.
В условиях плохого приёма соединение часто обрубается… Дело в том, что у портов ЮСБ есть ограничение на отдаваемый ток, при превышении которого, насколько я помню, порт отрубается.А можно какие-нибудь доказательства? У меня складываются сомнения, что это так.
По мне, так это костыль, думаю есть более правильное решение.
Значит нужно ожидать этих проблем и бороться самому(.
А можно какие-нибудь доказательства? У меня складываются сомнения, что это так.
Да, но… Падения соединения могут происходить, в теории, по множеству причин...
Нам необходимо лишь одно — под номером 0, остальные 2 мы не используем — они не для наших целей. Насколько мне известно, одно из них, скорее всего, используется для отсылки СМС, а второе — для просмотра уровня сигнала сети и прочего.Немного не так: устройство 0 получает команды и отдает статус команд (а СМС читаются и отправляются тоже через команды), 1 — для звонков, 2 — собственно интернет (если я последние 2 не путаю, давно интересовался).
Я буду использовать программу wvdial, дополнительно к ней нужно установить пакет ppp, если он ещё не установлен.
при запуске wvdial ”занимает собой” всю консоль, не давая возможности запустить что-либо ещёВот поэтому либо использовать NetworkManager как высокоуровневую запускалку, либо спускаться на самый низ к pppd, т.к. wvdial — обертка к pppd, о чем и говорит строка
PPPD OptionsОни оба консоль не занимают: у NM GUI не касается вообще, а консольный вариант nmcli, как и pppd, освобождает после выполнения (уходят в фон).
Modem = /dev/ttyUSB0здесь стоит добавить, что если два модема/еще какая ситуация, да хоть зависон первых трех портов, то есть модем выдернули, а порты не освободились — udev присвоит адреса ttyUSB3/5 и надо прописать решение для этого случая (обращаться к /dev/ttyUSB3). Хотя два модема — экзотика, но бывает. Телефон в качестве модема через кабель может появиться как /dev/ttyACM0.
для этого надо было бы определять принадлежность вставленной сим-карты тому или иному провайдеру, а решение с использованием этого становится очень сложным.Здесь отца русской демократии спасет команда AT+COPS?, которая возвратит оператора, к которому зарегистрировались, в виде +COPS: 0,2,«25002»,0 где первый 0 — домашний оператор, а число в кавычках — международный код оператора (Мегафон в данном случае), список кодов операторов вместе с их названиями вызывается командой AT+COPN (российские начинаются на 250). Вот чтобы определить, какая из симок одного оператора стоит, надо будет поискать, сходу не нашел такого.
usb-modeswitch не отрабатывает корректно, если модем вставлен в компьютер при запуске системыне замечал, чаще pppd зависает и не освобождает порт. Для программного перезапуска USB был нагуглен файлик, к сожалению, сейчас удален оттуда. Закинул на pastebin, автору респект.
устройство 0 получает команды и отдает статус команд (а СМС читаются и отправляются тоже через команды), 1 — для звонков, 2 — собственно интернет (если я последние 2 не путаю, давно интересовался).
здесь стоит добавить, что если два модема/еще какая ситуация, да хоть зависон первых трех портов, то есть модем выдернули, а порты не освободились — udev присвоит адреса ttyUSB3/5 и надо прописать решение для этого случая (обращаться к /dev/ttyUSB3). Хотя два модема — экзотика, но бывает. Телефон в качестве модема через кабель может появиться как /dev/ttyACM0.
Вот поэтому либо использовать NetworkManager как высокоуровневую запускалку, либо спускаться на самый низ к pppd, т.к. wvdial — обертка к pppd, о чем и говорит строка
Здесь отца русской демократии спасет команда AT+COPS?...
Для программного перезапуска USB был нагуглен файлик, к сожалению, сейчас удален оттуда. Закинул на pastebin, автору респект.
Еще отмечу, что параметр `lock` указывает монополизировать порт, так что если в дальнейшем столкнетесь с отказом своего веб-интерфейса работать при запущенном интернете, уберите.
Хм, ну интернет точно работает через нулевой порт, через остальные 2 не работает, так что — видимо, это варьируется в зависимости от модема, чего, впрочем, следует ожидать.Я в исходники не лазил, сказать не могу. В принципе да, раз уж телефону хватает одного порта, тогда так и есть. Для чего остальные два — не скажу, чтоб опять не слажать.
пока что не планируется подключать ещё и второй модем. Предлагаете упомянуть это в статье?Ну одна строка роли не сыграет, лучше указать. Туториал есть туториал, не просто в два жеста нарисовать сову, а понять, почему к такому порту в таком случае.
А, собственно, нужно ли подниматься на уровень выше? =) Всё пока работает и нормально конфигурируется, честно-честно. То, что обёртка — понимаю, но обёртка более чем работоспособная и полезная. Понимаю, что тут всё решает глубина погружения =)Лично я начинал с автоконфигурялки в SIDUX'е. Там только порт и APN надо было. Но когда поставил на комп — pppd показался легче KPPP и wvdial тем, что запуск в одном месте, параметры в другом, логин/пароль в третьем, сразу понятно, что куда и где напортачил. С pppd легче тестировать модем, понаписал команд вида ATZ (сброс), AT&V (показать настройки), AT+CSQ (уровень сигнала), AT+CLAC (доступные команды) и читаешь выхлоп тут же. Опять же решение мультидистрибутивное выходит, не все потянут Дебиан (я, например).
Спасибо за команду. Хорошо бы проверить, везде ли она работает. Думаю, если будет свободное время, напишу решение для автоподключения на базе этой команды. А пока что — у меня только одна симка у каждого оператора, значит, пока что решение подходит =) У меня пока проблемы с pySerial, не могу нормально наладить терминал на python для работы с модемом. Как налажу, буду писать модули для взаимодействия и настройки.Я на питоне (2.7) написал гуишку смотреть счет и уровень сигнала, ну и произвольные команды выполнять. Хотел развить в демона, но не потянул, да и с нуля надо переписывать. В личку могу отправить.
Вам тоже спасибо большое за то, что поделились =) Я вроде как видел что-то похожее на ГитХабе, только тогда мне почему-то показалось, что оно перезапускает все USB-контроллеры, подключённые к компьютеру. У себя скомпилирую, проверю, если заработает нормально — буду использовать.Да, на гитхабе то же самое, только шапка другая. Не сохранилось команды компиляции, но по идее — как и там
(тихим голосом) А как это лучше компилировать? Использовать просто стандартную команду gcc или какие-либо опции? А то я нуб в этих делах, с С хорошо если HelloWorld более-менее нормально написал, из консоли с помощью gcc компилил пару раз и давно...
gcc -o usbreset usbreset.c Хм, веб-интерфейс будет брать информацию с другого порта — /dev/ttyUSB1 или 2, если вы об этом. Но — спасибо, учту при дебагеВот о об этом я и говорил, что другие порты хз для чего, работать придется через 0.
Ну одна строка роли не сыграет, лучше указать. Туториал есть туториал, не просто в два жеста нарисовать сову, а понять, почему к такому порту в таком случае.
Я на питоне (2.7) написал гуишку смотреть счет и уровень сигнала, ну и произвольные команды выполнять. Хотел развить в демона, но не потянул, да и с нуля надо переписывать. В личку могу отправить.
Раздача интернета с 3G модема в локальную сеть в Linux