Помогите в настройке сетей, Настройка GPRS, автоматический выбор провайдера, выбор SIM-карты


#10

Добрый день! А можно попросить вас показать еще cat /etc/default/hostapd?
У вас в /etc/network/interfaces iface wlan0 дважды определяется, наверное, стоит оставить одно:
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5


#11

Видимо была ошибка вставки

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
auto lo
iface lo inet loopback

# Wireless interfaces
#allow-hotplug wlan0

#iface wlan0 inet dhcp
#    wpa-ssid wifiessid
#    wpa-psk wifipassword

iface wlan0 inet static
		address 192.168.42.1
		network 192.168.42.0
		netmask 255.255.255.0


auto eth0
iface eth0 inet static
        address 10.10.10.1
        netmask 255.255.255.0
        network 10.10.10.0
        broadcast 10.10.10.255

allow-hotplug eth1
iface eth1 inet dhcp
   pre-up wb-set-mac
   metric 10


## The gsm pptp interface
## vvv uncomment block to enable

auto ppp0
iface ppp0 inet ppp
   	pre-up wb-gsm restart_if_broken; sleep 10; /etc/autoGSM.sh; sleep 5;
    provider autoprovider

#12

Точки доступа не видно
Как и с allow-hotplug wlan0 так и без этой строки
И после service networking restart


#13
wlan0     IEEE 802.11b  ESSID:"abzpro"  Nickname:"<WIFI@REALTEK>"
          Mode:Master  Frequency:2.412 GHz  Access Point: 54:C9:DF:CB:86:CB
          Sensitivity:0/0
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

А Link Quality:0 Signal level:0 Noise level:0 точно должно быть по нулям?


#14

Да, если к точке никто не подключался, то по нулям.
Проверьте, что /etc/default/hostapd не закомментирована строка DAEMON_CONF="/etc/hostapd.conf".

Телефоны не видели это точку доступа никогда или после изменения конфигурации?
Перезагрузка с новыми настройками Wi-Fi делается командой

service hostapd restart

/etc/hostapd.conf у вас вполне рабочий. /etc/network/interfaces – тоже.

Проверьте еще работу в режиме клиента.


#15

Хм. Видимо “auto wlan0” нехватало. В клиенте заработал, в точке доступа также заработал.


#16

apt-get install bridge-utils

brctl addbr br0
add bridge failed: Package not installed

Далее понимаем, что компонент не настроен в ядре

zcat /proc/config.gz | grep CONFIG_BRIDGE=
и тишина

zcat /proc/config.gz | grep CONFIG_BRIDGE_NETFILTER=
и тишина

В /lib/modules/4.9.22-wb6/kernel/net нет упоминаний о bridge
lsmod | grep bridge - также пусто

И насколько я понимаю манулы и ответы на вопросы на линукс форумах использование мостов невозможно без включения компонента в ядре.


#17

Заметил явный баг в restart_if_broken - невозможность нагорячую поменять симку. Вынимаешь симку, коннект падает, pppd пытается дозвониться - не получается
Вставляем симку, а pppd даже после 10 попытки не может дозвониться - результата нет,
смотрим gammu networkinfo - Can not access SIM card. Т.е. модем в ступоре и его нужно перезагружать, а wb-gsm restart_if_broken этого не делает, так как смотрит на gpio_get_value и ему неизвестно, в каком состоянии находится его порт.
В этом случае запускаем wb-gsm reset
После запуска pppd заново, конечно же срабатывает wb-gsm restart_if_broken и запускает модем. (Вопрос почему reset не запускает модем сам?)
Также не смог разобраться как же сделать триггер у ppp при пропадании коннекта

Написал в итоге скрипт /etc/init.d/autoGSM_HW.sh

#!/bin/sh
#LOGFILE=/var/log/ppp0.log

while :; do
	if [ ! -f /var/run/ppp0.pid ]; then
		#echo "`date +'%b %d %T'` restarting ppp0" >> $LOGFILE
		sh -c "ifdown ppp0; ifup ppp0"
	fi
	sleep 10
done

Можно включить логирование рестартов раскаментив пару строк.

Добавляем в автозагрузку

chmod 755 /etc/init.d/autoGSM_HW.sh
update-rc.d autoGSM_HW.sh defaults

В /etc/network/interfaces прописал ppp0 таким образом, используя && чтоб лишнего не ждать

auto ppp0
iface ppp0 inet ppp
   	pre-up wb-gsm restart_if_broken && /etc/autoGSM.sh;
    provider autoprovider

В /etc/autoGSM.sh добавил несколько строк проверки наличия сети провайдера, здесь на всякий случай оставил паузу в 10 сек

#!/bin/sh
sleep 10

PROVIDER=`gammu networkinfo | grep -o -P '(?<=\").*(?=\")' | head -n 1`


if [ "$PROVIDER" = '' ]; then
	echo "Error getting provider name"
	sh -c "wb-gsm reset"
	exit 1;
fi;

echo "Detected provider: $PROVIDER"


if [ "$PROVIDER" = 'MTS RUS' ]; then
	echo "Using MTS"
	cp /etc/ppp/peers/mts /etc/ppp/peers/autoprovider
	exit 0;
fi;
	
if [ "$PROVIDER" = 'MegaFon RUS' ]; then
	echo "Using Megafon"
	cp /etc/ppp/peers/megafon2 /etc/ppp/peers/autoprovider
	exit 0;
fi;

if [ "$PROVIDER" = 'Beeline' ]; then
	echo "Using Beeline"
	cp /etc/ppp/peers/beeline /etc/ppp/peers/autoprovider
	exit 0;
fi;

if [ "$PROVIDER" = 'Tele2 RU' ]; then
	echo "Using Tele2"
	cp /etc/ppp/peers/tele2 /etc/ppp/peers/autoprovider
	exit 0;
fi;

echo "Error, provider not in list"
exit 1;

Если скрипт выйдет с exit 1 то это вызовет ошибку в pre-up и скрипт дозвона не запустится, далее демон autoGSM_HW.sh в течении 10 сек перезапустит модем и запустит соединение ppp0 с определением провайдера и дозвоном снова

Также во всех скриптах дозвона в /etc/ppp/peers задал maxfail 3 а также прописал порт /dev/ttyACM0 и скорость 460800. Таким образом через три попытки дозвона ppp0 упадёт, далее опять будет работа демона autoGSM_HW.sh. Если указать бесконечное число попыток, то pre-up запустить лишь один раз при загрузке модема, если симку вынуть во время работы, то переподключение не произойдёт без перезагрузки модема, а ppp будет пытаться дозвониться при отсутствующей симке.

По скорости:
speedtest-cli --server 14091 - выбрал один сервер для проведения тестов
Результат:

Hosted by KRAFT-S (Samara) [287.68 km]: 144.141 ms
Download: 0.84 Mbit/s
Upload: 2.80 Mbit/s

Тоже самое с телефона
Ping - 74ms, Download 5Mbit/s, Upload 4.43 Mbit/s

Подскажите, какую скорость в peer можно устанавливать для sim5300e ? 460800 это максимум?


#18

Переделал скрипты на MNC идентификаторы, init.d не работает нормально, выполнит while три раза и упадёт, сделал через cron с периодичностью в минуту. rc.local вообще не нашёл где лежит.

В кроне * * * * * root /etc/autoGSM_HW

#!/bin/bash
#LOGFILE=/var/log/ppp0.log

if [ ! -e /var/run/ppp0.pid ]; then
	#echo "`date +'%b %d %T'` restarting ppp0" >> $LOGFILE
	logger -i -t autoGSM_HW "Restarting ppp0"
	sh -c "ifdown ppp0; ifup ppp0"
fi

/etc/autoGSM.sh

#!/bin/bash

PORT=/dev/ttyGSM
DEFAULT_BAUDRATE=115200
REPORT_FILE=`mktemp`
declare -a gsm_dbm=("-110" "-109" "-107" "-105" "-103" "-101" "-99" "-97" "-95" "-93" "-91" "-89" "-87" "-85" "-83" "-81" "-79" "-77" "-75" "-73" "-71" "-69" "-67" "-65" "-63" "-61" "-59" "-57" "-55" "-53")
declare -a gsm_cond=("BAD" "BAD" "BAD" "BAD" "BAD" "BAD" "BAD" "BAD" "BAD" "OK" "OK" "OK" "OK" "OK" "Good" "Good" "Good" "Good" "Good" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent" "Excellent")

if [ ! -e $PORT ]; then
	logger -i -t autoGSM "Reseting modem by pin"
	#echo "Reseting modem by pin"
	sh -c "wb-gsm reset && wb-gsm restart_if_broken; sleep 10;"
else
	#set speed
	stty -F $PORT  ${DEFAULT_BAUDRATE} -icrnl
	/usr/sbin/chat -s -r $REPORT_FILE TIMEOUT 10 ABORT "ERROR" REPORT "\r\n" "" "AT" "" OK "OK"  > $PORT < $PORT
	ANSWER=`tail -n 1 $REPORT_FILE`
	logger -i -t autoGSM "AT: $ANSWER"
	if [ "$ANSWER" = "RDY" ]; then
		/usr/sbin/chat -s -r $REPORT_FILE TIMEOUT 10 ABORT "ERROR" REPORT "\r\n" "" "AT" "" OK "OK"  > $PORT < $PORT
		ANSWER=`tail -n 1 $REPORT_FILE`
		logger -i -t autoGSM "AT: $ANSWER"
	fi
	
	if [ "$ANSWER" != "OK" ]; then
		logger -i -t autoGSM "Reseting modem by pin"
		sh -c "wb-gsm reset; wb-gsm restart_if_broken"
		sleep 10
		exit 1;
	fi
	/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 5 ABORT "RDY" ABORT "ERROR"  ABORT "BUSY" REPORT "\r\n" "" "AT+CPIN?" OK "+CPIN: READY" > $PORT < $PORT 2>/dev/null 
	ANSWER=`tail -n 1 $REPORT_FILE`
	logger -i -t autoGSM "AT+CPIN?: $ANSWER"

	if [ "$ANSWER" != "+CPIN: READY" ]; then
		logger -i -t autoGSM  "Reseting modem by software"
		/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 10 ABORT "ERROR" REPORT "\r\n" "" "AT+CFUN=1,1" OK "OK"  > $PORT < $PORT
		ANSWER=`tail -n 1 $REPORT_FILE`
		logger -i -t autoGSM "AT+CFUN=1,1: $ANSWER"
		sleep 11
		/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 15 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT" OK "RDY" > $PORT < $PORT
		ANSWER=`tail -n 1 $REPORT_FILE`
		logger -i -t autoGSM "AT: $ANSWER"
		exit 1;
	fi
	rm $REPORT_FILE
fi


/usr/sbin/chat -s  -r $REPORT_FILE TIMEOUT 1 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+COPS=0,0" OK "OK" > $PORT < $PORT
ANSWER=`tail -n 1 $REPORT_FILE`
logger -i -t autoGSM "AT+COPS=0,0: $ANSWER"
rm $REPORT_FILE

/usr/sbin/chat -s  -r $REPORT_FILE TIMEOUT 2 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+COPS?" OK "OK" > $PORT < $PORT
ANSWER=`tail -n 1 $REPORT_FILE`
logger -i -t autoGSM "AT+COPS?: $ANSWER"
rm $REPORT_FILE

if [[ "$ANSWER" =~ ^.*,[\"]{0,}([^\"\,]+)[\"]{0,},[0-9]{1,}$ ]]; 
then 
  PROVIDER_NAME=${BASH_REMATCH[1]}
  logger -i -t autoGSM "PROVIDER_NAME = $PROVIDER_NAME"
else 
  logger -i -t autoGSM "PROVIDER_NAME = ERROR"
  exit 1;
fi



/usr/sbin/chat -s  -r $REPORT_FILE TIMEOUT 1 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+COPS=3,2" OK "OK" > $PORT < $PORT
ANSWER=`tail -n 1 $REPORT_FILE`
logger -i -t autoGSM "AT+COPS=3,2: $ANSWER"
rm $REPORT_FILE

/usr/sbin/chat -s  -r $REPORT_FILE TIMEOUT 2 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+COPS?" OK "OK" > $PORT < $PORT
ANSWER=`tail -n 1 $REPORT_FILE`
logger -i -t autoGSM "AT+COPS?: $ANSWER"
rm $REPORT_FILE

if [[ "$ANSWER" =~ ^.*,[\"]{0,}([^\"\,]+)[\"]{0,},[0-9]{1,}$ ]]; 
then 
  PROVIDER_ID=${BASH_REMATCH[1]}
  logger -i -t autoGSM "PROVIDER_ID = $PROVIDER_ID"
else 
  logger -i -t autoGSM "PROVIDER_ID = ERROR"
  exit 1;
fi

/usr/sbin/chat -s  -r $REPORT_FILE TIMEOUT 1 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+CSQ" OK "OK" > $PORT < $PORT
ANSWER=`tail -n 1 $REPORT_FILE`
logger -i -t autoGSM "AT+CSQ: $ANSWER"


if [[ "$ANSWER" =~ ^.*\ ([0-9]{1,}),[0-9]{1,}$ ]]; 
then 
	STRENGTH=$(("${BASH_REMATCH[1]}"))
	logger -i -t autoGSM "Signal: [$STRENGTH] ${gsm_cond[$STRENGTH]} ${gsm_dbm[$STRENGTH]}dBm"
fi

if [ ! -e $(eval echo /etc/ppp/peers/$PROVIDER_ID) ]; then
	logger -i -t autoGSM "Unknown network $PROVIDER_NAME [$PROVIDER_ID], error getting apn settings"
	exit 1;
else
	logger -i -t autoGSM "Selecting /etc/ppp/peers/$PROVIDER_ID"
	cp $(eval echo "/etc/ppp/peers/$PROVIDER_ID") /etc/ppp/peers/autoprovider
	exit 0;
fi

exit 1;

/etc/network/interfaces

auto ppp0
iface ppp0 inet ppp
      pre-up wb-gsm restart_if_broken; /etc/autoGSM.sh;
      provider autoprovider

/etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client	server	secret			IP addresses
gdata * gdata *
beeline * beeline *
mts * mts *
motiv * motiv *
n@k * nok *
ntc * ntc *
skylink * skylink *
smarts * smarts *
internet * internet *
IT * IT *

Итог: не выключая контроллер можно вставить симкарту или заменить текущую, соединение поднимется автоматически. У меня также установлен openvpn в качестве клиента, и при первой же возможности контроллер остётся на связи с возможностью обратного доступа по ssh.
Используемые операторы:

25001	MTS (Mobile Telesystems)
25002	Megafon
25006	DANYCOM
25011	YOTA
25020	Tele2/ECC/Volgogr.
25023	ЗАО «Джи Ти Эн Ти» (Возможно не поддерживается, имеется спутниковая связь)
25027	Летай (ТАТТЕЛЕКОМ)
25032	WIN-Mobile
25033	СевМобайл
25034	Крымтелеком
25035	Motiv LLC Ekaterinburg-2000
25039	Ростелеком (Utel, АКОС, НСС, БайкалВестКом, Волгоград-GSM, Тамбов GSM)
25054	Таттелеком
25060	Волна мобайл
25061	Интертелеком (Республика Крым и Севастополь) (Возможно не поддерживается CDMA с точной доступа #777)
25062	Тинькофф Мобайл
25099	Beeline / OJSC Vimpel-Communications (VimpelCom)

Было отсеяно 17 операторов из 44, остальные закрылись или были выкуплены другими операторами. Если есть информация, что APN точки из /etc/chatscripts имеют неверную конфигурацию, сообщите здесь.

Результат работы из /var/log/messages

Mar  3 21:46:32 wirenboard-AVBQBQ46 user.notice autoGSM[2612]: AT: OK
Mar  3 21:46:32 wirenboard-AVBQBQ46 user.notice autoGSM[2619]: AT+CPIN?: +CPIN: READY
Mar  3 21:46:32 wirenboard-AVBQBQ46 user.notice autoGSM[2623]: AT+COPS=0,0: OK
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2627]: AT+COPS?: +COPS: 0,0,"MTS RUS",2
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2629]: PROVIDER_NAME = MTS RUS
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2632]: AT+COPS=3,2: OK
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2636]: AT+COPS?: +COPS: 0,2,"25001",2
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2638]: PROVIDER_ID = 25001
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2641]: AT+CSQ: +CSQ: 15,0
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2642]: Signal: [15] Good -81dBm
Mar  3 21:46:33 wirenboard-AVBQBQ46 user.notice autoGSM[2644]: Selecting /etc/ppp/peers/25001

#19

Kenny, добрый день! Грандиозная работа! Спасибо!
По поводу CONFIG_BRIDGE_NETFILTER: когда-то он был в ядре, но. поскольку вещь практически невостребованная, мог пропасть.

Для sim5300e скорость 460800 актуальна только для последовательного подключения, через UART (/dev/ttyGSM), для коммуникации через CDC/ACM-усторйство установка скорости неактуальна, обмен данными будет на максимальной скорости.


#20

Переименуйте пожалуйста топик. С таким названием при желании потом трудно будет найти.
Например “Скрипт для Автонастройки GSM соеднинения”


#21

Довольно странно, что sim5300e не может воспринять вставку симки без перезагрузки. Возможно я понимаю не всю расшифровку пинов и схемы модуля, но есть встроенная возможность увидеть вставлена ли симка. Для этого в мануале по модулю предлагают использовать AT+CSMINS и AT+CSDT. Для использования автоматической детекции вставленности симки предлагают использовать 8 пиновый вариант подключения симки к модулю.

QIP%20Shot%20-%20Screen%20231

Подскажите, какой вариант из вышеперечисленных используется?
На данный момент я вижу следующее:

Включаем модем с симкой.

AT+CSMINS?
+CSMINS: 0,1

OK
AT+CSMINS=1
OK
AT+CSDT?
+CSDT: 0

OK
AT+CSDT=1
OK
AT+CSDT?
+CSDT: 1
AT&W
OK *Хоть и говорит окей, но не записывает он текущие настройки и значения CSDT и CSMINS не сохраняются

Вынимаем симку и получаем секунды через три в minichat:

+CPIN: NOT READY

+CSMINS: 1,0

Далее модем отзывается на команды следующим образом:

AT+CSMINS?
+CSMINS: 1,0

OK
AT_CPIN?
ERROR

Вставляем симку обратно, ждём секунд 10, ничего не приходит автоматически, отправляем команды вручную:

AT+CSMINS?
+CSMINS: 1,0

OK
AT+CPIN?
ERROR

Это означает, что модем не увидел симку автоматом. Скорее всего подключение производится по 6-pin а не по 8-pin.

Далее провёл следующий эксперимент:

AT+CFUN=4,0
OK
+CSMINS: 1,1

+CPIN: READY

Call Ready
AT+CFUN=1,0
OK
AT+CPIN?
+CPIN: READY

OK

Получается, можно и не перезагружать модем и не ждать 10-20 сек, чтобы получить рабочий вариант функционала вставки симку на горячую. Вопрос только в том, как подключена симка к модему: 8pin или 6pin?


#22

Небольшие правки для /etc/autoGSM.sh

if [ "$ANSWER" != "+CPIN: READY" ]; then
		#logger -i -t autoGSM  "Reseting modem by software"
		#/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 10 ABORT "ERROR" REPORT "\r\n" "" "AT+CFUN=1,1" OK "OK"  > $PORT < $PORT
		#ANSWER=`tail -n 1 $REPORT_FILE`
		#logger -i -t autoGSM "AT+CFUN=1,1: $ANSWER"
		#sleep 11
		#/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 15 ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT" OK "RDY" > $PORT < $PORT
		#ANSWER=`tail -n 1 $REPORT_FILE`
		#logger -i -t autoGSM "AT: $ANSWER"
		#exit 1;
		
		/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 10 ABORT "ERROR" REPORT "\r\n" "" "AT+CFUN=4,0" OK "OK"  > $PORT < $PORT
		ANSWER=`tail -n 1 $REPORT_FILE`
		logger -i -t autoGSM "AT+CFUN=4,0: $ANSWER"
		sleep 2
		/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 10 ABORT "ERROR" REPORT "\r\n" "" "AT+CFUN=1,0" OK "OK"  > $PORT < $PORT
		ANSWER=`tail -n 1 $REPORT_FILE`
		logger -i -t autoGSM "AT+CFUN=1,0: $ANSWER"
		sleep 2
		/usr/sbin/chat -s -r $REPORT_FILE  TIMEOUT 5 ABORT "RDY" ABORT "ERROR"  ABORT "ERROR" ABORT "BUSY" REPORT "\r\n" "" "AT+CPIN?" OK "+CPIN: READY" > $PORT < $PORT 2>/dev/null 
		ANSWER=`tail -n 1 $REPORT_FILE`
		logger -i -t autoGSM "AT+CPIN?: $ANSWER"
		if [ "$ANSWER" != "+CPIN: READY" ]; then
			exit 1;
		fi
		sleep 2
	fi

В кроне * * * * * root /etc/autoGSM_HW; sleep 25; /etc/autoGSM_HW

Поднимает скорость реакции на вставку симки.


#23

Можно и wb-gsm немного дополнить и в репозиторий положить, я не против. Или в Вики статью сделать. Могу даже архив с АПН выложить


#24

Kenny, добрый день! В WB6 Нога модуля PRESENCE не подключена к молексу для симки. Разработчики говорят, что этот функционал, несмотря на то, что был заявлен, фактически не поддерживался многими модулями.

Перезагрузку серез AT+CFUN протестируем: возможно, это лучший способ, чем дергать питание.


#25

Спасибо!
Наверное, самым простым способом будет дополнить статью в вики, потом протестировать, потом включить в релиз. Если можете написать какой-то текст, пришлите его на info@contactless.ru, я его отформатирую, проверю и дополню нашу документацию!


#26

Последний вариант делает всё без перезагрузки модуля! Т.е. в /var/log/messages вы не увидите переподключения usb устройства.

AT+CFUN=4,0 - включаем минимальный режим или режим “В самолёте”, ноль - без перезагрузки
AT+CFUN=1,0 - включаем полный режим, ноль - без перезагрузки.

В написанном ранее скрипте было использовано AT+CFUN=1,1, где последняя единица означает перезагрузку устройства. По поведению это сравнимо с дёрганьем ноги из wb-gsm reset

Данный метод можно назвать типа wb-gsm soft_reset


#27

Коллеги, в поддержании темы пару слов.

  1. Как я понимаю, в исходные коды wirenboard данное решение так и не попало? Есть планы его в общий дистрибутив включать?
  2. Хотелось бы данное решение доработать до возможности автоматического переключения между слотами SIM, что бы переключаться автоматом на второго оператора, если первый вне зоны доступа. (я сейчас этим плотно собираюсь заняться, и это потребует небольших изменений в стандартных библиотеках и скриптах wirenboard. Т.к. в wb-gsm-common.sh слот SIM задается жестко в коде.
    Как лучше сделать выбор слота? Через переменные окружения? Или есть еще какие-нибудь идеи?

назначил(а) ответственного EvgenyBoger #28

#29

пока нет

если сделаете, то присылайте pull request. Исходники в github/wb-utils