Здравствуйте!
Контроллер Wiren Board 8.5, wb-rules-system 1.13.5, wb-rules 2.40.0-wb100,
прошивка 202603181358, ядро 6.8.0-wb160. Модем штатный, SIMCom A7602E-H,
соединение wb-gsm-sim1 (PPP).
СИМПТОМ
В виртуальном устройстве `network` контрол «GPRS IP Включен»
(`GPRS IP Connection Enabled`) показывает «нет» всегда, в том числе когда
соединение поднято и работает. Соседние строки при этом говорят обратное:
/devices/network/controls/GPRS IP 217.66.149.20
/devices/network/controls/GPRS IP Online Status 1 (Доступ к интернету: да)
/devices/network/controls/GPRS IP Connection Enabled 0 (Включен: нет)
То есть адрес выдан, пинг через интерфейс проходит, а «Включен» — «нет».
Оператор видит противоречие в трёх соседних строках одной карточки.
ПРИЧИНА (как мы её видим)
В /usr/share/wb-rules-system/rules/network.js признак считается так:
runShellCommand(“ip link show {} | awk ‘{for (i=1; i<=NF; i++) if ($i == \“state\”) print $(i+1)}’”…
dev.network[name + ’ Connection Enabled’] = capturedOutput.trim() === “UP”;
У point-to-point интерфейсов (PPP, туннели) ядро Linux не отслеживает несущую
и всегда сообщает `state UNKNOWN`; признак «интерфейс поднят» у них находится
во флагах. Замер на нашем контроллере при работающем 4G:
ppp0 state=UNKNOWN флаги: POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP
wlan0 state=UP флаги: BROADCAST,MULTICAST,UP,LOWER_UP
eth0 state=DOWN флаги: NO-CARRIER,BROADCAST,MULTICAST,UP
Поэтому для GPRS сравнение с “UP” не может дать «да» ни при каких условиях, а
для Ethernet и Wi-Fi та же строка работает правильно.
КАК ПОВТОРИТЬ
1. Поднять соединение wb-gsm-sim1 и убедиться, что интернет через него ходит:
ip -br a show ppp0
ping -I ppp0 -c1 8.8.8.8
2. Посмотреть контролы:
mosquitto_sub -h 127.0.0.1 -t ‘/devices/network/controls/GPRS IP#’ -v
ОЖИДАЕТСЯ: «GPRS IP Включен» = да, раз интерфейс поднят.
ФАКТИЧЕСКИ: «нет» при живом соединении.
ВОЗМОЖНОЕ ИСПРАВЛЕНИЕ
Достаточно считать интерфейс поднятым и при `state UNKNOWN` — либо, что
надёжнее, смотреть флаги (`ip link show | grep -q ‘<.*\bUP\b.*>’`) или
`ip -o link show up`, тогда логика будет одинаковой для всех типов интерфейсов.
У себя мы временно правим строку до вашего исправления: принимаем ещё и
“UNKNOWN”. На Ethernet и Wi-Fi поведение при этом не меняется.

