我在去年12月份的时候评测了BLE转MQTT 网关GL.inet GL-S10,当时我主要对ESP32网关和BLE信标进行了开箱和拆解。最近我开始正式使用该设备和他们推荐的App和软件了。由于我在测试过程中遇到了几个问题,所以花费的时间比预期的要长,我想其中的大部分问题现在应该都可以通过新固件解决了,而且他们的文档估计也会很快更新。

我会按照用户手册中的步骤详细地进行此次评测。我第一次做是在安装安卓app的GL-S10上,然后在网关上电后按下网关按钮使其进入配对模式,很快我就在Apps上检测到网关了。

请注意,我们最好不要共享设备的 MAC 地址,因为默认情况下共享后没有安全措施,任何人就都可以使用我们在下面使用工具访问获得的这些信息。这太不安全了。

你们也可以配置网络设置,例如DHCP固定IP、WiFi账户密码,以及MQTT服务器设置和时区等。我可以毫无问题地将其连接到我的WiFi 接入点(AP)了,不过会在短时间内就收到“设备已断开连接”这样的消息。

现在,每次我通过配对模式来配置应用程序时都会发生这种情况,所以每次在此错误出现之前我就只有不到一分钟的时间来做自己想做的事。我尝试通过按住按钮10秒钟来将网关恢复为出厂设置,甚至清除数据并卸载手机上的应用程序之后再试了一次,但还是没有解决这个问题。之后我联系该公司并跟他们说明了我所遇到的情况后,他们判断可能是硬件出了故障,所以他们又给我寄了一台设备。
注意,我之前评测时使用的是“4G LTE WiFi 调制解调器”便携式热点设备,该设备配备了具有10 Mbps数据套餐的SIM卡。当我回到家并使用宽带互联网提供热点,我再次尝试使用“旧”的 GL-S10 网关时,这个问题就消失了。但将网关连接到我的路由器也并非一点问题都没有。

研究之后我发现如果WiFi路由器配置了“WPA WPA2-PSK”加密方法,它就会显示为灰色,因为GL-S10不支持它。更改WiFi 路由器中的加密设置应该是唯一的解决方案。而且即使是在最新的固件 (v2.3.1)中也会出现这种情况。解决这个问题后,我就有稳定的连接了。
下一步是安装适用于Windows、Mac OS和Linux操作系统的MQTT X MQTT 5.0 开源桌面客户端。我将它安装在我的 Ubuntu 20.04 笔记本电脑上。
1 |
sudo snap install mqttx |
我们在1884 端口的“iot-s10-test.gl-inet.cn”上从GL.inet与beta测试服务器,并建立新连接。

Android 应用程序中也使用了相同的测试服务器,但使用的是 IP 地址 (134.175.4.252) 而不是 URL。

上面的 MQTT 配置还包括网关的主题命令和响应字符串、具有 RSSI 阈值BLE 设备的报告配置,以及仅发送相关数据的过滤规则。如果你们未选择过滤器,那么它会发送其他有关 BLE 设备的信息,在下面我们会看到。
回到MQTT X这边,我现在可以轻松连接到GL.inet MQTT服务器了。

并向 GL-IoT/rspTopic/<GL-S10 MAC> 添加新订阅,这样之后我才能接收对可能会给我发送MQTT命令的响应。

当使用带有正确JSON数据格式的GL-IoT/comTopic/<GL-S10 MAC>发送命令时,我从来没有收到过回复,就好像网关离线了一样。

在这里测试版的IP地址发生了变化:
1 2 3 |
ping iot-s10-test.gl-inet.cn PING iot-s10-test.gl-inet.cn (167.172.193.67) 56(84) bytes of data. 64 bytes from 167.172.193.67 (167.172.193.67): icmp_seq=1 ttl=47 time=362 ms |
使用新的IP地址更改 android 应用程序中的设置后,结果如下所示:

我现在仍然无法收到来自主题命令的响应,但好一点的是在订阅 GL-IoT/dataTopic/<GL-S10 Mac> 后,我就可以按照配置每秒从 BLE 信标接收数据了,这在以前是无法正常工作的。

最后,我得知我可能没有最新的网关固件了,需要手动在App OTA升级界面里输入 http://iot-s10-test.gl-inet.cn/s10/ota/gl_s10_v2.3.1.bin到OTA URL,然后再执行OTA升级。

该公司认为OTA升级功能不是最人性化的,目前他们之所以这样设计目的是为了让用户可以升级自己的固件,用户在这里可以自己进行构建。所以,他们计划在未来的版本中简化这个升级步骤。虽然经过了一番调整之后才能使其工作,但GL.inet 还是很不错的。即使在假期期间,他们也对我的评测提供了很及时的帮助和响应。
到目前为止,一切都可以正常工作了,接下来我们一起来看看网关是如何工作的。GL-S10 Config API 给用户提供了一个命令列表,用户基本上可以通过带有JSON格式命令的MQTT客户端在移动应用程序中执行用户所属权限范围内的所有操作。这里我们可以使用命令来配置WiFi和查询WiFi账户密码,因为这是最前面的两个命令。

在使用GL-IoT/rspTopic/<GL-S10 MAC>创建新订阅后,我们就可以使用GL-IoT/comTopic/<GL-S10 MAC>和JSON数据创建一个命令,如下所示:
1 2 3 4 5 6 7 8 9 10 |
{ "jsonrpc": "2.0", "method": "SET_WIFI_CONFIG", "params": { "type":0, "ssid": "LPT Maker", "pwd": "password" }, "id": 1 } |
type等于0时,可以设置SSID、PASSWORD;等于1时,可以设置SSID、 USERNAME、USERPASSWORD。ssid是接入点名称,最多有32个字符,pwd密码则最多64个字符,id是 SET_WIFI_CONFIG的命令号 (0x01)。
如果一切正常,我们接下来应该就能收到以下JSON 数据作为回复:
1 2 3 4 5 |
{ "jsonrpc": "2.0", "result": 0, "id": 1 } |
回复中result字段为0x00时代表执行成功,result字段为0x01代表执行失败。
但是我们可以发送GET_WIFI_CONFIG命令来仔细检查哪里出了错误,如下所示:

工作一切正常。正如前面所述,你们还可以使用 API 配置和检查其他网关参数,例如 DHCP固定IP、MQTT服务器、主题、计时器间隔、蓝牙过滤器等。
接着我们来看看GL-S10网关收到的BLE信标,添加新订阅 GL-IoT/dataTopic/<GL-S10 MAC>到App或 MQTT客户端,然后每隔1秒或者是在App/MQTT客户端中配置的任何时间间隔来接收数据。

数据如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "dev_wifi_sta_mac": "E8DB841D7388", "dev_ble_mac": "E8DB841D738A", "dev_sn": "32d1e73977ae85e2", "dev_id": "E8d7388", "dev_version": "2.3.1", "dev_list": [ { "mac": "D896E08B7E29", "rssi": -43, "ad": "0201061AFF4C0002151732050807568877293527446341505900014B07C51816C0DE0200014B070400000000000000000000000022F70C", "ts": 18446744072867391000 }, { "mac": "D896E08B7E29", "rssi": -45, "ad": "0201061AFF4C0002151732050807568877293527446341505900014B07C51816C0DE0200014B070400000000000000000000000022F70C", "ts": 18446744072867394000 } ], "dev_list_len": 2, "publish_ts": 18446744072867394000 } |
最上面的是是一些关于网关的信息,dev_list 报告了关于BLE信标的信息,包括MAC、RSSI、ad(广播数据 advData)和时间戳。如果BLE信标包含名称,就还会有一个包含数据的“n”字段。
这里我们看到有“两个”设备,显然这是我们的BLE信标发送的两条消息。RSSI约为 -43到-45 dBm,信标距离网关大约是5厘米。我们看看如果我将BLE信标移动到距离网关视线大约9米的地方会发生什么,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "dev_wifi_sta_mac": "E8DB841D7388", "dev_ble_mac": "E8DB841D738A", "dev_sn": "32d1e73977ae85e2", "dev_id": "E8d7388", "dev_version": "2.3.1", "dev_list": [ { "mac": "D896E08B7E29", "rssi": -65, "ad": "0201061AFF4C0002151732050807568877293527446341505900014B07C51816C0DE0200014B070400000000000000000000000022F70C", "ts": 18446744072867475000 }, { "mac": "D896E08B7E29", "rssi": -65, "ad": "0201061AFF4C0002151732050807568877293527446341505900014B07C51816C0DE0200014B070400000000000000000000000022F70C", "ts": 18446744072867478000 } ], "dev_list_len": 2, "publish_ts": 18446744072867478000 } |
信号强度已显着下降至了-65 dBm,此类数据可以帮助我们估计房间内BLE信标与网关的距离,就像多个信标甚至室内位置一样。这里直接使用MAC过滤来完成此操作,操作后仅显示来自信标的数据了。我们删除 MAC 过滤看看会怎么样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "dev_wifi_sta_mac": "E8DB841D7388", "dev_ble_mac": "E8DB841D738A", "dev_sn": "32d1e73977ae85e2", "dev_id": "E8d7388", "dev_version": "2.3.1", "dev_list": [ { "mac": "697E44B45AE0", "rssi": -68, "ad": "0201021107FC9DD0B3CB84E0840642F3F7E2E0BFCB", "ts": 18446744072868538000 }, { "mac": "D896E08B7E29", "rssi": -72, "ad": "0201061AFF4C0002151732050807568877293527446341505900014B07C51816C0DE0200014B070400000000000000000000000022F70C", "ts": 18446744072868538000 } ], "dev_list_len": 2, "publish_ts": 18446744072868538000 } |
有一个带“697E44B45AE0”蓝牙MAC的新设备。原本我没有查不到品牌,但之前注意到一台MAC好像是A4E22988ED6F的设备,一番查找后了解到它是“青岛海尔科技有限公司”。嗯,我得找找我得屋子里是否有海尔的设备?哦,想起来了,这周我在卧室里装了一台海尔空调,果然,空调也有一个开放的 BLE接入点。所以连接上之后,我的空调就广播出BLE消息了。
这个网关还可以用作跟踪设备,这时候我女朋友似乎在家,因为网关可以跟踪她的Amazfit Bip Watch,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
{ "dev_wifi_sta_mac": "E8DB841D7388", "dev_ble_mac": "E8DB841D738A", "dev_sn": "32d1e73977ae85e2", "dev_id": "E8d7388", "dev_version": "2.3.1", "dev_list": [ { "mac": "EB5B4CBA55EE", "rssi": -81, "n": "Amazfit Bip Watch", "ad": "0201061BFF5701006E74DCD42A214DE1A8988A3FFA043C9E03EB5B4CBA55EE1209416D617A666974204269702057617463680302E0FE", "ts": 18446744072869593000 }, { "mac": "D896E08B7E29", "rssi": -70, "ad": "0201061AFF4C0002151732050807568877293527446341505900014B07C51816C0DE0200014B070400000000000000000000000022F70C", "ts": 18446744072869593000 } ], "dev_list_len": 2, "publish_ts": 18446744072869595000 } |
其实,这个网关还有很多方面值得测试,特别是在改进的用户名、密码和SSL/TLS连接的安全性方面,但在这篇评测中我已经没有时间继续进行了。
最后,十分感谢GL.inet将BLE 转MQTT的网关GL-S10 寄送给我。你们可以在GL.Inet商店购买该网关,它与信标一起购买的价格是29.9美元。

文章翻译者:Taylor Lee,瑞科慧联(RAK)高级嵌入式开发工程师,有丰富的物联网和开源软硬件经验,熟悉行业主流软硬件框架,对行业发展动向有着敏锐的感知力和捕捉能力。