Control Huawei HiLink USB LTE modems (E3372, E8372, etc.) via REST API. Send/receive SMS, check signal strength, manage SIM PIN, query prepaid balance, and m...
Control Huawei HiLink USB LTE modems via their local REST API.
The modem must be in HiLink mode (not stick/serial mode) and accessible via HTTP.
Set gateway IP in ~/.config/hilink/config:
HILINK_GATEWAY=192.168.200.1
Or pass via environment: export HILINK_GATEWAY=192.168.200.1
Default: 192.168.200.1
The LTE USB interface needs an IP on the modem's subnet (e.g., 192.168.200.x). Configure as static IP with no gateway and no DNS to avoid routing conflicts:
# /etc/network/interfaces.d/lte
allow-hotplug lte0
iface lte0 inet static
address 192.168.200.100/24
Critical: Never let the LTE interface set a default route or DNS — it will override your LAN connection. Use nogateway and nohook resolv.conf in dhcpcd, or a static config with no gateway line.
USB network interfaces get random names on each boot. Create a udev rule for a stable name:
# Find MAC address
cat /sys/class/net/enx*/address
# Create udev rule
echo 'SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="lte0"' \
| sudo tee /etc/udev/rules.d/70-lte-modem.rules
# SMS
scripts/hilink.sh sms send "+41791234567" "Hello!"
scripts/hilink.sh sms list
scripts/hilink.sh sms read 40001
scripts/hilink.sh sms delete 40001
# Status & Signal
scripts/hilink.sh status
scripts/hilink.sh signal
# SIM PIN
scripts/hilink.sh pin enter 1234
scripts/hilink.sh pin disable 1234
scripts/hilink.sh pin status
# Prepaid Balance (USSD)
scripts/hilink.sh balance
# Connection info
scripts/hilink.sh info
All HiLink API calls require a session token + CSRF token pair:
# Get tokens
curl -s http://GATEWAY/api/webserver/SesTokInfo
# Returns: <SesInfo>cookie</SesInfo><TokInfo>csrf_token</TokInfo>
# Use in requests
curl -X POST http://GATEWAY/api/endpoint \
-H "Cookie: <SesInfo value>" \
-H "__RequestVerificationToken: <TokInfo value>" \
-H "Content-Type: application/xml" \
-d '<xml request body>'
For detailed API endpoints, see references/api.md.
scripts/hilink.sh pin enter <PIN>.sudo ip route del default via 192.168.200.1ZIP package — ready to use