I purchased a Drei Neo modem with OpenWRT already installed. Since it had some problems with the LTE module I decided to flesh it with the Sysupgrade image firmware on the OpenWRT site.
After configuration and upgrade it makes me install the QMI and MODEMMANAGER modules to manage the LTE network.
The problem is as follows:
On NETWORK /INTERFACES I have created a connection for WAN.
If I use protocol=UMTS/GPRS/EV-DO and modem device=/dev/ttyUSB1 The connection is stable but limited to 25-40Mb/s
If I use protocol=MODEMMANAGER and Modem device=ZTE CORPORATION - MF287PLUS The connection is fast up to 100Mb/s but after a while it disconnects and the modem device field is empty. with message "Error: Network device is not present"
If I use protocol=QMI Cellular and modem device=/dev/ttyUSB1 OR device=/dev/cdc-wdm0 The connection does not work and sometimes it does not find the modem.
Do you guys know a solution or can you direct me to a support forum?
Please provide log files, especially from the time the modemmanager connection fails. You can retrieve them with the logread command.
The modem on my MF287 Pro works quite well in QMI mode and with ModemManager. It tends to be more stable with ModemManager. But then I never put heavy load on the modem, it’s used as a backup connection.
It happened every now and then (a few times per month) that the modem itself crashes and either reboots or disappears completely. This seems to be a bug with the modem firmware, something no in control of OpenWrt.
Have you resolved your issues? I have a MF287 and the modem works with both modemmanger and qmi, but after a while (few hours to a few days) my speeds go down to about 3 Mbps. Only a physical unplug-replug brings back the original speeds.
Don't know if this can help you but I have a couple of mf286d and one of them started to have problems with the modem (every couple of weeks the modem “disappeared” and was no more present in the connected usb devices).
After a lot of time trying to debug the issue, I solved by changing the psu, which delivered too less power to the unit.
I have a number of Drei Neo (both Pro and Plus) in service, and use the script below in a cronjob, executed every three minutes, to conditionally reset the modem via adb - or reboot the whole device - if the connection seems down for too long:
#!/bin/ash
# Copyright (C) 2025 Johannes Truschnigg <johannes@truschnigg.info>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program. If not, see <https://www.gnu.org/licenses/>.
## configuration BEGIN
PING_PEERS='8.8.8.8 1.1.1.1 9.9.9.9 2620:fe::fe 2001:4860:4860::8888 2606:4700:4700::1111'
STORAGE_PATH='/mnt/sda1'
## configuration END
for prog in adb fping
do
type "${prog}" > /dev/null || exit 1
done
sleep 1
if ! test -e "${STORAGE_PATH}" || ! df -P "${STORAGE_PATH}" | awk -v x=1 '{if(NR == 2){if($4 > 1000000){x=0}else{x=1}}} END{exit x}'
then
: overriding STORAGE_PATH due to low space on configured target
STORAGE_PATH=/tmp
else
: enough free space in STORAGE_PATH
fi
read -r upt _ < /proc/uptime
if [ "${upt%.*}" -lt 300 ]
then
logger -t check_inet_conn "too early during this uptime to act, NOOP"
exit 0
fi
if [ -z "${SIMULATE_DOWNTIME:-}" ]
then
_cmd='fping'
else
logger -t check_inet_conn "simulation of downtime requested via env:SIMULATE_DOWNTIME"
_cmd='false'
fi
if ${_cmd} --fast-reachable=1 ${PING_PEERS} >/dev/null
then
if test -d /tmp/check_inet_conn_stats
then
ls -l /tmp/check_inet_conn_stats | logger -t check_inet_conn
sleep 1
logread > "${STORAGE_PATH}/check_inet_conn_logread_allgoodagain_$(date +%s)"
rm -rf /tmp/check_inet_conn_stats
fi
exit 0
fi
logger -t check_inet_conn "no Internet connection detected"
mkdir -p /tmp/check_inet_conn_stats
cd /tmp/check_inet_conn_stats
touch "failed-check-$(date +%s)"
rm -f MARKER
touch -d "@$(( $(date +%s ) - 3600 ))" MARKER
failcnt=$(find . -xdev -newer MARKER -name 'failed-check-*' -type f | wc -l)
logger -t check_inet_conn "fail counter at ${failcnt}"
if [ "${failcnt}" -eq 3 ]
then
logger -t check_inet_conn "rebooting modem via adb..."
adb shell dmesg > "${STORAGE_PATH}/check_inet_conn_logread_reboot_modem_$(date +%s)_modemdmesg"
adb reboot
logread > "${STORAGE_PATH}/check_inet_conn_logread_reboot_modem_$(date +%s)"
fi
if [ "${failcnt}" -ge 6 ]
then
logger -t check_inet_conn "rebooting system..."
adb shell dmesg > "${STORAGE_PATH}/check_inet_conn_logread_reboot_system_$(date +%s)_modemdmesg"
logread > "${STORAGE_PATH}/check_inet_conn_logread_reboot_system_$(date +%s)"
sync
sleep 5
reboot
fi
exit 1
I have tried using a lab bench power supply to power the router, but the issue is still there.
Also if I reset the modem in any way (over serial, adb, or uqmi) it never boots up or at least openwrt doesn't recognize it anymore. I have to do a power cycle to get it working again.