Уровень сигнала gsm в интерфейсе

Добрый день. Хочу вывести уровень сигнала в интерфейс. С созданием виртуального устройства и скриптами все понятно.
Думаю просто sh написать который в очередь будет писать.
Но как проверять уровень при работающем соединении gprs. Так что бы его не обрывать?

Нужен CMUX, а с ним пока проблемы. Подождите примерно неделю, как раз разбираемся.

Добрый вечер! Есть ли новости по решению проблемы?

Новости есть, но плохие. Китайские товарищи из Neoway накосячили в реализации CMUX в прошивке модема, поэтому с линуксом он нормально не работает. Решения два: обновить прошивку модема (делается только с паяльником, потому что китайские товарищи из Neoway видимо считаются неполноценными и не смогли получить документацию на чипсет у Mediatek), либо патчить код cmux в ядре и обходить проблемное место.

Ну и третье решение: сменить вендора модема на менее ущербного, что мы в ближайшей партии и сделаем.

Если у вас Wiren Board 5 и он ещё на гарантии, то пишите, мы вам просто поменяем на версию с другим модемом, в котором CMUX работает.

Спасибо! Письмо написал.

Добрый день! Подскажите, пожалуйста, на WB 6.5 как лучше всего организовать мониторинг уровня GSM сигнала?

Дмитрий, добрый день! Подскажите, у вас 3G-модем или 2G?
Для 3G можно забирать уровень сигнала таким скритпом на Python:

import serial
ser = serial.Serial(port='/dev/ttyGSM', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1)
cmd="AT+CSQ\r"
ser.write(cmd.encode())
msg=ser.read(64)
print(msg)

через порт /dev/ttyGSM, не задействованный в коммуникациях.

Вызываете и получаете значение CSQ:

python /root/csq.py |grep "+CSQ:" | cut -d ' ' -f2 | cut -d ',' -f1 | tr '\n' ' ' | sed -e 's/\s//'

Добрый день! Я так пробовал, на write зависает. pppd блокирует /dev/ttyGSM, если убить pppd процесс, то работает. Хотелось бы без этого) Сейчас работаю с 2G модемом, но уже стали закупать с 3G, поэтому 3G актуальнее. Есть разница между схемой работы при 2G и 3G?

Да, разница есть: у 3G-модема отдельный порт для передачи данных, /dev/ttyACM0, и порт ttyGSM остается свободным для команд управления. А вот в 2G порт только один, соответственно, ничего сделать нельзя. Ну, если только для периодической оценки качества равть ppp-соединение, и проверять качество. Но это же не то, что требуется?

Хорошо, понял. Чтобы отличать контроллер, в котором 3G-модем, от контроллера с 2G, насколько корректно просто выполнять проверку наличия /dev/ttyACM0? Или есть способы получше?

Ваш пример Python кода у меня не заработал на WB 6.5 с 3G, тоже завис на write. А вот если указать /dev/ttyACM0 вместо /dev/ttyGSM, то всё проработало. По идее так и должно быть, т.к. в файлах из /etc/ppp/peers в первой строчке указано /dev/ttyGSM.

Но в документации (https://wirenboard.com/wiki/index.php/GSM/GPRS) написано “Для 3G-связи порт UART не подходит в силу ограничения пропускной способности UАRT-канала, следует использовать ACM-порт /dev/ttyACM0.”
Как правильно поступить в данной ситуации? В файлах из /etc/ppp/peers заменить /dev/ttyGSM на /dev/ttyACM0, после чего писать AT команды в /dev/ttyGSM?

Дмитрий, совершенно верно, делайте, как написано в документации, тогда ttyGSM освободится для мониторинга.

Добрый день! Подскажите, пожалуйста, а что означает результат AT-команды AT+CSQ, когда в контроллер WB6 не вставлена ни одна sim-карта? Т.е. уровень сигнала какой сети он возвращает?

Вы можете звонить в 112/911 и без сим-карты в МТ, через какую-то ближайшую станцию любого оператора, вот ее сигнал, думаю, и принимаете. В задраенной наглухо цистерне при работе от аккумулятора можете проверить гипотезу :slight_smile: