Raspberry Pi与3G / 4G Dongle的连接问题

时间:2018-01-18 08:02:14

标签: linux raspberry-pi 3g usb-modeswitch

我谦卑地走到我的绳索末端,徘徊在疯狂的边缘。

情况如下:

我的业务提供的小型服务使用Raspberry Pi Zero W。

使用华为k4203和usb_modeswitch进行设置,配置如下:

/etc/udev/rules.d/40-usb_modeswitch.rules

# Huawei k4203
ACTION=="add", ATTR{idVendor}=="12d1", ATTR{idProduct}=="1f1c", 
RUN+="/usr/sbin/usb_modeswitch -v 12d1 -p 1f1c -W -M 
55534243123456780000000000000011062000000101000100000000000000"
ACTION=="add", SUBSYSTEM=="net", ATTRS{idVendor}=="12d1", 
ATTRS{idProduct}=="1590", NAME="4gmodem", RUN+="/root/modem-up.sh"
ACTION=="remove", KERNEL=="4gmodem", RUN+="/root/modem-down.sh"

/root/modem-down.sh

#!/bin/bash
# modem-down.sh
/usr/bin/systemctl restart openvpn@raspz1
/usr/bin/rfkill unblock wifi
/usr/bin/ip link set WIRELESS_INTERFACE up[/code]

/root/modem-up.sh

#!/bin/bash
# modem-up.sh
/usr/bin/rfkill block wifi
#/usr/bin/netctl restart 4gmodem-PROFILE
# Optional
#/usr/bin/ping -c 1 -w 60 8.8.8.8 &&
/usr/bin/systemctl restart openvpn@raspz1

/etc/usb_modeswitch.d/12d1:1f1c

# Vodafone / Huawei K4203
DefaultVendor=0x12d1
DefaultProduct=0x1f1c
#DefaultProduct=0x14fb
TargetVendor=0x12d1
TargetProductList="157a,1590"
MessageContent="55534243123456780000000000000011062000000101000100000000000000"
HuaweiNewMode=1

问题是有时加密狗会断开互联网连接 - 我无法通过SSH连接到它,它与我的VPN断开连接而客户端感到恼火。 当我在办公室时,没什么大不了的 - 我只是拔出加密狗,把它推回去,它再次起作用。

或者,我可以关闭墙上的电源,一旦再次加载,它将重新连接并工作。

然而,我目前正在海外旅行并(试图)度假(我的家人一直要我下车,因为我花了几个小时寻找解决方案)。

所以从本质上讲,我需要一种方法来远程通过某种脚本让加密狗重新连接到网络。

我尝试过的事情:

- >定期ping网络的脚本,如果没有点击google.com,请重新启动pi。

这不起作用。由于我似乎无法掌握的原因,软件重启似乎没有重新启动连接。我有一种感觉,这可能是因为它没有切断加密狗的电源,就像完全重启或拔出加密狗一样。

- >切断加密狗的能力

我尝试使用以下脚本切断加密狗的电源:

echo 0 > /sys/devices/platform/soc/20980000.usb/buspower
sleep 5
echo 1 > /sys/devices/platform/soc/20980000.usb/buspower

这确实削减了功率,但只是暂时(例如,在我发送“回声1”之前它不会保持关闭状态,而是设备将闪烁蓝色几次然后恢复其当前状态。)

需要注意的是,当您第一次插入加密狗时,它会在变为蓝色之前闪烁绿色几次 - 但是上述脚本不能这样做。

- > ifconfig 4gmodem down&&的所有变体达

似乎没有做任何事情。

- > /etc/init.d/networking restart - 似乎没有做任何事情

我认为可以运作的东西:

我已经有了这个想法几天,但风险是如果我错了,pi将保持与互联网断开连接,我将无法修复它直到我回家 - 这不是好哈哈

echo "rebooting internet"
  #remove lines from modeswitch so it won't enable modem mode when plugged in.
  sudo rm /etc/udev/rules.d/40-usb_modeswitch.rules
  #reboot dongle
  sudo echo 0 > /sys/devices/platform/soc/20980000.usb/buspower
  sleep 5
  sudo echo 1 > /sys/devices/platform/soc/20980000.usb/buspower
  #modem will hopefully now be flashing green (in storage mode, not modem)
  #write to file
  sudo cat <<EOT >> /etc/udev/rules.d/40-usb_modeswitch.rules
  # Huawei k4203
  ACTION=="add", ATTR{idVendor}=="12d1", ATTR{idProduct}=="1f1c", RUN+="/usr/sbin/usb_modeswitch -v 
 12d1 -p 1f1c -W -M 55534243123456780000000000000011062000000101000100000000000000"
  ACTION=="add", SUBSYSTEM=="net", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1590", 
  NAME="4gmodem", RUN+="/root/modem-up.sh"
  ACTION=="remove", KERNEL=="4gmodem", RUN+="/root/modem-down.sh"
 EOT
 #reboot dongle again with mode_switch reconfigured
  sudo echo 0 > /sys/devices/platform/soc/20980000.usb/buspower
  sleep 5
  sudo echo 1 > /sys/devices/platform/soc/20980000.usb/buspower
  # Device should now reboot into modem mode

以上代码的想法是我在设置加密狗时注意到,当不是调制解调器模式时,它会闪烁绿色(例如当您第一次将其插入设备时,在它变为蓝色之前) 所以上面的代码基本上“打破”usb_modeswitch,重新启动加密狗,它将有希望进入存储模式,然后恢复过程。

我认为它可能会奏效,但正如我所说,从这个遥远的地方来说风险太大了。

有没有人对我如何断开连接/重新连接3g Dongle的想法或想法?

由于

1 个答案:

答案 0 :(得分:0)

我会定期检查外部IP 尝试:   IP =(socket.gethostbyname(&#34; info.io&#34))
  除了:IP =&#39;未知&#39;   打印IP 然后重新启动pi,如果没有。我也投入了一个dhclient wlan0,但这可能仅适用于使用直接ip连接代替wvdial的调制解调器。看看你是否可以在网上找到一个改变调制解调器配置的脚本,以防止它在调制解调器模式以外的任何其他模式下启动,这对我的Sierra 320U来说很有用。