Raspberry PI 4 Huawei E3372 – Send AT commands – Stack Overflow

twitter Новости

Предварительная подготовка

Есть две разновидности прошивок: 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

Что я сделал, чтобы подружить модем с антенной?

  1. Взял стоковый модем, запустил виртуалку 2022 года с WindowsXP (песочницу), там уже были дрова Huawei, но в Мобильном ассистенте общаться с модемом не удалось.
  2. Скачал c 4pda Pupdatewiz и подходящую прошивку.
  3. Запустил 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
  1. Выключил винду, на маке использовал mode_switch и переключил модем на вечный debug mode.
  2. Снова загрузил винду, в ней стал доступен Терминал.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 приведен ниже:

  1. На фоне модем плевался мне подобными сообщениями в терминал:
^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).

Показатели качества принимаемого сигнала

Значения параметровRSSISINR (Ec/Io)
Отличные-30…-50 dBm30 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!

Оцените статью
Huawei Devices
Добавить комментарий