设备发现目前有两种方式,本地发现和云端待配设备发现。

本地设备发现

本地设备发现,即通过CoAP发现。支持本地发现的设备包括:已配网的设备、边缘网关、以太网网关、通过已配网设备发现未配网的设备。

本地设备发现流程(App发现当前局域网已配网设备)如下。

  1. App端发送/device/info/get广播,等待设备回复设备信息。
  2. 设备受到广播之后,上报token。
  3. token上报成功之后,发送单播到手机端IP。
  4. 手机端收到设备端包含token的单播回复或者带token的广播通告则发现设备。
  5. App上层接收到SDK过滤后的待配列表,请求服务端的过滤接口awss/enrollee/product/filter,将已绑定的设备,当前App不支持的设备,需要隔离的设备排查之后返回给App端。

在配网发现页面无法看到本地已经配好网或者不需要配网的以太网设备。可以按照以下步骤排查。

  1. 检查环境问题。
    • 查看手机端WiFi是否开启。
    • 检查手机连接的网络和已配设备是否连接的同一WiFi。
    • 需要发现的设备是否已配网、是否上电、是否在线。
  2. 检查上层过滤问题。
    • 设备类型是否支持被当前App发现。
    • 设备是否已被绑定。
    • 首页否能看到该设备,如果能看到则正常。
  3. 检查设备端Token上报失败。
  4. 查看App端日志分析。

    通过查找关键字 onLocalDeviceFound ,如果有,则收到设备端发送的消息。

    06-01 11:23:28.268 28773-28773/com.aliyun.iot.living D/AlinkDC_DiscoverListenerAdapter: onLocalDeviceFound deviceInfo={"awssVer":{"ap":"2.0","router":"2.0","smartconfig":"2.0","valid":true,"zconfig":"2.0"},"dCConfigParams":{"a":"a1hj4YskTA0","b":"MOC108_02","f":"AlibabaP2P"},"devType":"0","deviceName":"MOC108_02","linkType":"ForceAliLinkTypeNone","productKey":"a1hj4YskTA0","supportRouterAP":true,"token":"E7A9DCF212E3911A1D6E0244B3F959B7","valid":true}

云端待配设备发现

通过云端获取已配网设备上报的待配列表,从而发现设备。

发现本地已上电,但是还未给设备配网的待配设备。这种方式一般是指通过已配设备发现未配网的设备,并上报到云端,手机端再从云端拉取待配列表来展示的方式。

云端待配设备发现流程(App发现当前局域网待配网设备)如下。

  1. 已配网设备发现待配网设备,并上报到云端。
  2. App SDK发送/awss/enrollee/list/get获取待配设备列表的请求。
  3. 服务端收到请求后,返回用户绑定的所有设备发现的待配设备。
  4. App SDK接收到待配列表数据之后,根据bssid过滤,只返回当前局域网发现的设备。

目前为止,无法发现待配网设备的原因有:环境问题、设备上报问题、过滤失败等。按以下步骤进行排查。

  1. 检查环境问题。
    • 确认已配网设备或者路由器设备是否已经上电,是否已正常上线;确认待配设备是否已上电。
    • 检测手机和已配设备是否在同一WiFi下,如果不在同一WiFi下是不会显示的。
    • 是否已绑定了已配网的设备;可以返回主页我的设备列表查看,是否有当前手机连接的WiFi下的已配网设备。
  2. 检查设备端上报问题。
    查询关键字 enrollee report result 。如果有以下日志内容,则表示该已配设备发现了待配设备并上报设备信息。如果没有,请参考一键配网问题排查
    [2018-05-18-20:57:42:955]new enrollee[0] dev_name:pre_8266_xf01 time:ffffeee0topic:/sys/a1WvhmtFHEO/pre_3060_xf03/thing/awss/enrollee/found, packet:{"id":"1", "version":"1.0", "method":"thing.awss.enrollee.found", "params":{"awssVer":{"smartconfig":"2.0","zconfig":"2.0","router":"2.0","ap":"2.0"},"type":0,"ssid":"antbang_test1","bssid":"00:1C:A3:06:B3:B4","rssi":0,"payload":["0D7072655F383236365F786630310B61315776686D744648454F106A000BC93C4649A33DF7787A2102B1F50400140DECE7422DBE52C3527314F2A14424257E1F09CB"]}}, method:thing.awss.enrollee.found
    [2018-05-18-20:57:42:979][dbg] enrollee_report(642): enrollee report result:success, period:60000ms
  3. 检查过滤失败问题。

    查看App端日志,查找关键字 onEnrolleeDeviceFound 。如果返回结果为空,则根据设备端有没有上报,定位是设备端问题还是服务端问题。

    06-01 11:25:06.228 28773-24993/com.aliyun.iot.living D/AlinkDC_CloudDiscoverChain: startDiscover getEnrolleeList onResponse com.aliyun.iot.aep.sdk.apiclient.callback.IoTResponseImpl@d7c56c1
    06-01 11:25:06.228 28773-24993/com.aliyun.iot.living D/AlinkDC_CloudDiscoverChain: startDiscover getEnrolleeList result={"code":200,"data":{"totalNum":0,"items":[]},"id":"b4311f89-c6b8-484e-8d03-236b79f1bd62"}
    06-01 11:25:06.228 28773-24993/com.aliyun.iot.living D/EnrolleeDeviceCache: updateCache
    06-01 11:25:06.228 28773-28773/com.aliyun.iot.living D/AlinkDC_DiscoverListenerAdapter: onEnrolleeDeviceFound deviceInfoList=null;