Предварительная подготовка
Есть две разновидности прошивок: Stick и HiLink. С прошивкой Stick модем будет видеться AT-модемом, для подключения к интернету нужно «дозваниваться». С HiLink-прошивкой модем представляется сетевой картой Ethernet, и не требует настроек в ОС.
По умолчанию, модем находится в режиме HiLink, такой типа роутер, с красивым веб-интерфейсом.
$ lsusb | grep Huawei
Bus 001 Device 010: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard
# Здесь 12d1 это идентификатор производителя а 1506 это режим сетевой карты.
# Если не 1506, то надо переключить.
sudo minicom -D /dev/ttyUSB0
AT^NVWREX=50502,0,128,8F 29 FF 8E A8 CA 34 89 78 73 18 BA 9E F5 9C 64 0B A4 DB 81 DC 03 45 6E 72 DA EC 6A 0C 7C 90 65 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8B 8C F4 B5 AF 0C F2 2C FE E0 F4 46 9C CF 47 95 36 71 1F 1C BF 05 7F 84 AB A9 F2 92 89 33 3C 12 01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AT^DATALOCK="00000000"
AT^CIMEI="#############"
Balong Flash / Прошивка под mac, linux, windows
Для прошивки под Linux используется утилита balong_flash.
В отличие от Linux, нa Macintosh адрес, скорее всего, будет не /dev/ttyUSB0, а /dev/tty.HUAWEIMobile-Diag.
Достоверно узнать адрес устройства можно с помощью команды ls /dev | grep HUA.
$ ./balong_flash -h
Утилита предназначена для прошивки модемов на чипсете Balong V7
./balong_flash [ключи] <имя файла для загрузки или имя каталога с файлами>
Допустимы следующие ключи:
-p <tty> - последовательный порт для общения с загрузчиком (по умолчанию /dev/ttyUSB0)
-n - режим мультифайловой прошивки из указанного каталога
-g# - установка режима цифровой подписи (-gl - описание параметров)
-m - вывести карту файла прошивки и завершить работу
-e - разобрать файл прошивки на разделы без заголовков
-s - разобрать файл прошивки на разделы с заголовками
-k - не перезагружать модем по окончании прошивки
-r - принудительно перезагрузить модем без прошивки разделов
-f - прошить даже при наличии ошибок CRC в исходном файле
Pupdatewiz Flash / Прошивка под windows
Распаковать архив, поместить нужную прошивку (.exe или .bin) в папку с командным файлом go.cmd и запустить его.
3g/lte routers:
- Huawei B310s-22
- Huawei B315s-22
- Huawei B525s-23a
- Huawei B525s-65a
- Huawei B715s-23c
- Huawei B528s
- Huawei B535-232
- Huawei B628-265
- Huawei B818-263
- Huawei E5186s-22a
- Huawei E5576-320
- Huawei E5577Cs-321
3g/lte usb sticks:
(Device must support NETWork mode aka. “HiLink” version, it wont work with serial mode)
- Huawei E3131
- Huawei E3372
- Huawei E3531
5g routers:
- Huawei 5G CPE Pro 2 (H122-373)
(probably will work for other Huawei LTE devices too)
Archlinux
Add repository by adding this at end of file /etc/pacman.conf
Code examples
Some code examples are in /examples folder
Debian and derivatives
Add repository by running these commands
Donations
- 250 CZK (9,79 EUR) for B535-232 fund, thx @larsvinc !
- 371,69 CZK (14,32 EUR) by Oleg Jusaew
Gentoo
$ emerge dev-python/huawei-lte-api
Get a reuse the token for the huawei modem e3372h
so i want to read some sms received in my huawei modem.
For that i m tryin to first get the token and session id from the ‘http://192.168.8.1/api/webserver/SesTokInfo page
then try to reuse this token in the page http://192.168.8.1/api/sms/sms-list
but i got this error
<error>
<code>125002</code>
<message></message>
</error>
which mean that i don t have the right token value, what i m wondering about.
so this is how my code looks
import hashlib
import base64
import binascii
import xml.etree.ElementTree as ET
from datetime import datetime
import requests
from bs4 import BeautifulSoup
BASEURL = 'http://192.168.8.1'
session = requests.Session()
reqresponse = session.get(BASEURL '/api/webserver/SesTokInfo')
if reqresponse.status_code == 200:
root = ET.fromstring(reqresponse.text)
for results in root.iter('SesInfo'):
sessionid = results.text
print("the sessionId is", sessionid)
for results in root.iter('TokInfo'):
token = results.text
print("The token is", token)
sessioncookies = reqresponse.cookies
post_data = '<?xml version = "1.0" encoding = "UTF-8"?>n'
post_data = '<request><PageIndex>1</PageIndex><ReadCount>3</ReadCount><BoxType>1</BoxType><SortTyp$
headers = {'Content-Type': 'text/xml; charset=UTF-8',
'__RequestVerificationToken': token
}
api_url = BASEURL '/api/sms/sms-list'
logonresponse = session.post( api_url, data=post_data, headers=headers, cookies=sessioncookies)
logonresponse2 = session.get( api_url, data=post_data, headers=headers, cookies=sessioncookies)
result = BeautifulSoup(logonresponse.text, 'html.parser')
for r in result:
print(r)
can someone helo me with the troubleshooting please?
Lte routers:
- Huawei B2368-22 (Incompatible firmware, testing device needed!)
- Huawei B593s-22 (Incompatible firmware, testing device needed!)
Nvram
В модеме имеется хранилище различной конфигурационной информации – NVRAM. Оно организовано в виде набора записей переменной длины. Каждая запись имеет номер – от 0 до 65535, но не все номера записей физически присутствуют в модеме.
Чтобы узнать длину конкретной записи, используется команда:
at^nvrdlen=<item>
at^nvrdlen=8268
^NVRDLEN: 12
Посмотреть содержимое конкретной записи можно командой:
at^nvrdex=<item>,<offset>,<len>
Пример:
at^nvrdex=8268,0,12
^NVRD: 8268,0,12,01 00 00 00 01 00 00 00 0A 00 00 00
Pip (pip3 on some distros)
$ pip install huawei-lte-api
Python api to reboot antminer
Cgiminer Api has a restart
command, but it require configuration to allow the priviledged command, and I doubt it restart the entire machine.
Instead, I opt to write code to SSH into the machine and issue a reboot command. The downside is root/admin username and password is required.
I use Paramiko for Python SSH support.
Repository
You can also use these repositories maintained by me
Tl;dr
Что я сделал, чтобы подружить модем с антенной?
- Взял стоковый модем, запустил виртуалку 2022 года с WindowsXP (песочницу), там уже были дрова Huawei, но в Мобильном ассистенте общаться с модемом не удалось.
- Скачал c 4pda Pupdatewiz и подходящую прошивку.
- Запустил Pupdatewiz — вуаля!
После прошивки стало:
Device name: E3372
Serial number: G4################
IMEI: ###############
Hardware version: CL2E3372HM
Software version: 22.333.01.00.00
Web UI version: 17.100.13.112.03 (17.100.13.01.03_Mod1.12)
LAN MAC address: BA:AB:DE:AD:BE:EF
- Выключил винду, на маке использовал mode_switch и переключил модем на вечный debug mode.
- Снова загрузил винду, в ней стал доступен Терминал.exe.
Вот этими командами восстанавливается убитая в ходе прошивки имеюшка. Тут как повезет либо AT^CIMEI, либо AT^NVWREX. Первая команда, как я понял, не всегда доступна, для успешного использования в второй надо предварительно воспользоваться утилитой imei_converter и вместо нулей записать то что надо. Команда AT^INFORBU нужна имхо для применения долгосрочной записи в NVRAM.
AT^CIMEI="###############"
AT^NVWREX=0,0,16,08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
AT^INFORBU
AT^RESET
Код imei_converter.c приведен ниже:
- На фоне модем плевался мне подобными сообщениями в терминал:
^RSSI:26
^HCSQ:"LTE",61,51,146,22
^RSSI:24
^HCSQ:"LTE",56,51,151,22
CREG: 1,"#####","#########"
Последнее событие — событие IMSI Attach.
Поиск базовых станций сотовой связи
Данный модем обладает уникальным свойством – он умеет делать поиск всех окружающих базовых станций (БС). Причем не только БС оператора вставленной в него симкарты, а вообще все БС всех операторов, сигнал от которых достигает антенны модема. Для каждой найденной БС выводится ее CID и уровень принимаемого от нее сигнала.
Если в округе имеется сигнал LTE, то следует перевести модем в режим 2G3G командой AT^SYSCFGEX=”0201″,3FFFFFFF,1,2,800C5,, или в настройках веб-интерфейса.
Также обратите внимание, что эту команду можно ввдить только через порт управления (PCUI). Если ее ввести через порт, предназначенный для установки РРР-соединения (modem), то команда будет выдавать пустой ответ (просто ОК и все).
Формат команды:
AT^NETSCAN=num,level,mode
num – число находимых БС, от 1 до 20. Если будет найдено больше num БС, то станции с самым слабым сигналом будут исключены из списка
level – минимальный уровень сигнала БС, включаемых в список. Задается в дБ, от -110 (самый низкий уровень)
Пример команды:
at^netscan=20,-108,1
^NETSCAN: 10638,,,1e7e,250,02,0,-78,8b77,400000
^NETSCAN: 10687,,,1e7e,250,02,0,-79,d5c8,400000
^NETSCAN: 10662,,,1e7e,250,02,0,-82,8ade,400000
^NETSCAN: 10587,,,4cf8,250,20,0,-105,d4fc,400000
^NETSCAN: 10563,,,4cf8,250,20,0,-106,d4f9,400000
В этом примере заказывается поиск 3G БС с уровнем сигнала не ниже -108 дБ. Результат выдается в виде списка, отсортированного по уровню сигнала. Самая верхняя БС – самая мощная, нижняя – самая слабая. Формат элемента списка:
^NETSCAN: 10638,,,1e7e,250,02,0,-78,8b77,400000
1e7e - LAC станции
250 - MCC (Россия)
02 - MNC (В данном случае - МТС).
0 - хотел бы я сам знать что это, из дизассемблированного кода я так и не понял смысла этого поля.
-78 - уровень сигнала данной БС
8b77 - CID станции
400000 - диапазнон, в котором принимается сигнал БС (как в команде ^syscfgex).
Показатели качества принимаемого сигнала
Значения параметров | RSSI | SINR (Ec/Io) |
---|---|---|
Отличные | -30…-50 dBm | 30 dB и выше |
Хорошие | -50…-70 dBm | от 20 dB до 30 dB |
Удовлетворительные | -70…-85 dBm | от 10 dB до 20 dB |
Плохие | -85…-110 dBm | менее 10 dB |
Raspberry pi 4 huawei e3372 – send at commands
I’m trying to send AT commands to a Huawei E3372 USB Dongle but I haven’t figured out how to mount correctly.
If I do lsusb, I get the following:
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 045e:00cb Microsoft Corp. Basic Optical Mouse v2.0
Bus 001 Device 003: ID 03f0:034a HP, Inc Elite Keyboard
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
The dongle is listed, I can also access it’s configuration screen on 192.168.1.1 and I can access internet.
I have tried creating the config file:
sudo nano /etc/usb_modeswitch.d/12d1:14db
and entered the following configuration
TargetVendor=0x12d1
TargetProduct=0x14db
MessageContent="55534243123456780000000000000011062000000100000000000000000000"
NoDriverLoading=1
I have tried various configurations found on the web but none seems to work.
/dev/tty /dev/tty19 /dev/tty3 /dev/tty40 /dev/tty51 /dev/tty62
/dev/tty0 /dev/tty2 /dev/tty30 /dev/tty41 /dev/tty52 /dev/tty63
/dev/tty1 /dev/tty20 /dev/tty31 /dev/tty42 /dev/tty53 /dev/tty7
/dev/tty10 /dev/tty21 /dev/tty32 /dev/tty43 /dev/tty54 /dev/tty8
/dev/tty11 /dev/tty22 /dev/tty33 /dev/tty44 /dev/tty55 /dev/tty9
/dev/tty12 /dev/tty23 /dev/tty34 /dev/tty45 /dev/tty56 /dev/ttyAMA0
/dev/tty13 /dev/tty24 /dev/tty35 /dev/tty46 /dev/tty57 /dev/ttyprintk
/dev/tty14 /dev/tty25 /dev/tty36 /dev/tty47 /dev/tty58
/dev/tty15 /dev/tty26 /dev/tty37 /dev/tty48 /dev/tty59
/dev/tty16 /dev/tty27 /dev/tty38 /dev/tty49 /dev/tty6
/dev/tty17 /dev/tty28 /dev/tty39 /dev/tty5 /dev/tty60
/dev/tty18 /dev/tty29 /dev/tty4 /dev/tty50 /dev/tty61
No more luck with dmesg | grep ttyUSB that returns nothing (same for USB0, USB1,…)
It’s probably something wrong in the config file but I don’t see exactly what needs to be done.
Any idea ?
Thanks!