当没有人看到它时,WiFi模块会中断。 (或:Schrodingers WiFi)

时间:2017-11-02 10:52:24

标签: raspberry-pi wifi pm2

我带着一个奇怪的问题来找你们。

对于我们的项目,我们在Raspberry Pi3(运行Raspbian)上使用NodeJS。我们使用以下库构建一个wifi模块:WifiControl。为了监视Raspberry Pi上应用程序的日志,我们使用pm2。为了输入Pi需要连接的SSID和密码,我们运行了一个GUI界面,允许用户将这些详细信息发送给Pi。

案例如下:

  • 当用户输入他们的SSID和密码时
  • 发送给Pi3
  • pi3使用该库尝试连接到提供的AP
  • pi通知GUI连接尝试的状态(成功/失败)

这很好,如果我们在连接尝试期间用pm2观察Pi的日志(我们ssh到Pi然后使用pm2日志)。当我们以这种方式使用时,Pi总是连接到wifi(假设凭证输入正确)。

现在,如果我们重复上述完全相同的步骤,但这次我们不会进入Pi并跟踪正在进行的操作,Pi永远无法连接。什么可能导致这个" schrodingers wifi",观察连接尝试意味着它有效,而不是观察它意味着它不会?下面我在2次不同的连接尝试中添加了pm2的日志。前缀为' WifiControl'是来自库的调试输出。

观察连接尝试期间的输出:

1|OCB-RN3K | 2017-11-02 10:46 +00:00: [2017-11-02T10:46:05.709Z] [WIFI]: Trying to connect to: { ssid: 'ssid', password: 'password' }
1|OCB-RN3K | 2017-11-02 10:46 +00:00: WiFiControl: It appears there is already a connection for this SSID.
1|OCB-RN3K | 2017-11-02 10:46 +00:00: WiFiControl: Executing:   nmcli connection delete "ssid"
1|OCB-RN3K | 2017-11-02 10:46 +00:00: WiFiControl: Success!
1|OCB-RN3K | 2017-11-02 10:46 +00:00: WiFiControl: Executing:   nmcli device wifi connect "ssid" password "password"
1|OCB-RN3K | 2017-11-02 10:46 +00:00: WiFiControl: Success!
1|OCB-RN3K | 2017-11-02 10:46 +00:00: WiFiControl: WiFi connection request to "ssid" has been processed.
1|OCB-RN3K | 2017-11-02 10:46 +00:00: WiFiControl: Successfully connected to "ssid"
1|OCB-RN3K | 2017-11-02 10:46 +00:00: [2017-11-02T10:46:09.681Z] [WIFI]: Successfully connected to: Onmi Airspace
1|OCB-RN3K | [2017-11-02T10:46:09.682Z] [CONTROLS]: WiFi Connected!

未观察到连接尝试后的输出:

[WIFI]: Trying to connect to: { ssid: 'ssid', password: 'password' }
1|OCB-RN3K | 2017-11-02 10:48 +00:00: WiFiControl: Executing:   nmcli device wifi connect "ssid" password "password"
1|OCB-RN3K | 2017-11-02 10:48 +00:00: WiFiControl: WiFi connection request to "ssid" has been processed.
1|OCB-RN3K | 2017-11-02 10:48 +00:00: [2017-11-02T10:48:56.737Z] [WIFI]: Error during connection attempt [1/3]: { ssid: 'ssid',
1|OCB-RN3K |   success: false,
1|OCB-RN3K |   msg: 'Error: Could not connect to ssid' }

这已经过多次测试,我们认为这不是巧合。

1 个答案:

答案 0 :(得分:0)

此问题似乎与pm2日志无关,但在Raspberry Pi上缺少某些权限。这意味着当我们通过SSH进入Pi时,我们将登录并触发该用户的正确权限,允许nmcli运行(即使程序在启动时运行,以我们在ssh期间使用的同一用户身份登录)。

编辑:以下内容完全不起作用:

  

通过向用户授予sudo权限来解决问题   程序运行,我们现在正在寻找其他选择   关于权限(因为sudo有点过分热心)。我走了   这个问题需要进一步参考,因为这是一个非常难的问题   缩小bug。