配网常见问题排查 - 客户端
更新时间:2018-10-19 11:29:34
本文以Android App端举例,主要介绍设备发现、设备配网、设备绑定三个链路的常见问题排查。
一、设备发现链路
设备发现目前有两种方式:一种是本地设备发现,通过 CoAP 发现;另外一种是通过云端获取已配网设备上报的待配列表。
1. 本地设备发现
本地设备发现流程(APP发现当前局域网已配网设备):
(1) APP 端发送 /device/info/get 广播,等待设备回复设备信息;
(2) 设备受到广播之后,上报token;
(3) token上报成功之后,发送单播到手机端IP;
(4) 手机端收到设备端包含token的单播回复或者带token的广播通告则发现设备;
(5) App上层接收到SDK过滤后的待配列表,请求服务端的过滤接口awss/enrollee/product/filter,将已绑定的设备,当前APP不支持的设备,需要隔离的设备排查之后返回给APP端;
无法发现已配网设备
在配网发现页面无法看到本地已经配好网或者不需要配网的以太网设备。可以按照以下步骤排查问题:
a. 环境问题
(1)查看手机端 WiFi 是否开启;
(2)检查手机连接的网络和已配设备是否连接的同一WiFi;
(3)需要发现的设备是否已配网、是否上电、是否在线。
b. 上层过滤问题
设备类型是否支持被当前APP发现,是否已被绑定;返回首页,看是否能看到该设备,如果能看到则是正常的;
c. 设备端Token上报失败
请参考设备端日志排查设备上传token失败问题;
d. APP端日志分析
(1)查找关键字"onLocalDeviceFound";
从app端分析,是否收到设备端发送的
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}
2. 云端待配设备发现
发现本地已上电,但是还未给设备配网的待配设备。这种方式一般是指通过已配设备发现未配网的设备,并上报到云端,手机端再从云端拉取待配列表来展示的方式。
云端待配设备发现流程(APP发现当前局域网待配网设备):
前提条件:当前局域网有一个已配网设备,有至少一个待配网设备;
(1) 已配网设备发现待配网设备,并上报到云端;
(2) App SDK发送 /awss/enrollee/list/get 获取待配设备列表的请求;
(3) 服务端收到请求后,返回用户绑定的所有设备发现的待配设备;
(4) App SDK接收到待配列表数据之后,根据bssid过滤,只返回当前局域网发现的设备;
无法发现待配网设备
根据目前接入情况,该问题主要是以下问题导致:环境问题、设备上报问题、过滤失败问题。
a. 环境问题
(1)确认已配网设备或者路由器设备是否已经上电,是否已正常上线;确认待配设备是否已上电;
(2)检测手机和已配设备是否在同一WiFi下,如果不在同一WiFi下是不会显示的;
(3)是否已绑定了已配网的设备;可以返回主页我的设备列表查看,是否有当前手机连接的WiFi下的已配网设备;
b. 设备端上报问题
(1)查询关键字"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
(2)请参考设备端日志排查设备上传token失败问题;
c. 过滤失败问题
查看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;
二、Android App端配网日志参考
1. 一键&零配&路由器配网配网成功链路参考:
// 配网入口
AlinkDC_AddDeviceBiz: setDevice() call
AlinkDC_AddDeviceBiz: startAddDevice() call // 开始配网
// 配网参数检查 参数预检查
AlinkDC_AddDeviceBiz: state=AddStatePrechecking,isSuccess=true,info=null,error=null
##### 一键配网专属流程 开始
// 进入一键配网流程输入账号密码
AlinkDC_AddDeviceBiz: >state=AddStateProvisionPreparing,isSuccess=false,info=null,error=null
// 如果有上述流程,但是没有toggleProvision调用,则是没有输入账号密码就结束了流程
AlinkDC_AddDeviceBiz: toggleProvision() call
##### 一键配网专属流程 结束
// 真正进入配网
AlinkDC_AddDeviceBiz: state=AddStateProvisioning,isSuccess=false,info=null,error=null
// 配网成功的结果如下
AlinkDC_AddDeviceBiz: state=AddStateProvisionOver,isSuccess=true,
2. 热点配网成功链路参考:
// 热点开启
AlinkDC_HotspotHelper: setupWifiAP() call.
// 发现设备
AlinkDC_HotspotHelper: discoveryDevices() call.
// 发送 ssid 和 password 到设备端
// 如果没有 switchAP 就直接 recoverWiFiConnect 则表示未收到指定PK的设备连接上热点。
AlinkDC_HotspotHelper: switchAP() call. ssid=xxx
// 停止发现设备
AlinkDC_HotspotHelper: stopDiscovery() call.
// 恢复 wifi 连接
AlinkDC_HotspotHelper: recoverWiFiConnect() call.
AlinkDC_AddDeviceBiz: setDevice() call.
// 开始配网
AlinkDC_AddDeviceBiz: startAddDevice() call.
// 预检查
AlinkDC_AddDeviceBiz: state=AddStatePrechecking,isSuccess=true,info=null,error=null
// 配网中
AlinkDC_AddDeviceBiz: state=AddStateProvisioning,isSuccess=true,info=null,error=null
// 配网成功 或者失败 配网失败查看具体的失败原因
AlinkDC_AddDeviceBiz: state=AddStateProvisionOver,isSuccess=true
3. 配网失败排查
常见的配网失败现象有以下两种:
a)设备联网中进度从0%-100%,之后显示设备连接失败;
b) 设备一直显示设备连接中进度从0%-100%直到失败。
在排查问题的时候可以先确定用户进入配网页面的路径。
(1)本地发现的设备列表 -> “设备联网中”;
(2)产品列表或者扫码 ->“热点开启中”->“设备连接中”->“设备联网中”;
(3)产品列表或者扫码 -> “设备联网中”;
a. 环境检查:
(1)确认设备已上电并进入配网模式;
(2)确认手机WiFi已开启;
(3)热点模式确认手机有SIM卡,并且使用手机流量能够上网;
(4)确认WiFi 密码是否正确;
(5)热点模式下,手机申请的权限是否都有赋予;
b. APP端排查:
(1)搜索关键字"AlinkDC_AddDeviceBiz";
查看配网流程是否已启动,startAddDevice 代表配网已启动。
AlinkDC_AddDeviceBiz: startAddDevice() call.
// 预检查
AlinkDC_AddDeviceBiz: state=AddStatePrechecking,isSuccess=true,info=null,error=null
// 配网中
AlinkDC_AddDeviceBiz: state=AddStateProvisioning,isSuccess=true,info=null,error=null
// 配网成功 或者失败 配网失败查看具体的失败原因
AlinkDC_AddDeviceBiz: state=AddStateProvisionOver,isSuccess=true
(2)搜索关键字"AddStateProvisionOver";
根据 AddStateProvisionOver 返回的错误信息,ErrorCode 确定错误原因,如code=606,则表示请求服务端接口的时候出错,导致配网失败。参考配网错误码
// 配网结果
AlinkDC_AddDeviceBiz: state=AddStateProvisionOver,isSuccess=false,info=null,error=DCErrorCode [code:617, subcode:0, codeName:PROVISION_TIMEOUT, message:provisionTimeout, extra:null]
(3)搜索关键字"awss.event.connectap.notify";
如果没有以下日志,则表示手机端没有收到设备端的配网成功通告。
05-30 17:51:58.630 31368-31886/com.aliyun.iot.living D/AlinkDC_CoAPNotifyDeliver: onRecRequest request={"id":"24","version":"1.0","method":"awss.event.connectap.notify","params":{"awssVer":{"smartconfig":"2.0","zconfig":"2.0","router":"2.0","ap":"2.0"},"productKey":"b1iuHMGJYGI","deviceName":"IOT_test01","mac":"2C:3A:E8:22:05:CE","ip":"192.168.1.31","cipherType":4,"type":0}}
可以检查下手机当前连接的WiFi是否和给设备配置的WiFi一致。
返回发现列表页,看是否能发现这个设备,有可能是未接收到通告。
如果WiFi一致,且返回首页仍不能发现设备,则需要从设备端日志开始排查。
4. 设备连接中失败
设备连接中失败,是热点配网热点创建之后,没有正确的设备连上当前开启的热点的场景。可以从环境检查、APP端日志排查、设备端日志排查三个维度分析。
a. 环境检查
(1)系统是否7.1.x及以上版本,提示开启热点的时候有没有正常开启 aha 12345678 热点;
(2)APP端弹出需要授予权限,如开启WiFi、开启热点的时候有没有授予权限;
(3)设备有没有进入配网模式;
(4)热点是否正常开启;部分手机热点开启成功,顶部会提示“手机热点已开启”;
(5)热点开启成功,查看手机的通知栏或顶部是否有提示“一个设备已连接”;
(6)确认WRITE_SETTINGS权限申请成功。
b. APP端日志排查
(1)搜索关键日志"COAP_METHOD_AWSS_DEVICE_INFO_NOTIFY": 设备未连接
如果没有这个日志,则表示没有设备端连接上来;
05-30 17:51:38.433 31368-31886/com.aliyun.iot.living D/AlinkDC_CoAPNotifyDeliver: onRecRequest request={"id":"5","version":"1.0","method":"awss.device.info.notify","params":{"awssVer":{"smartconfig":"2.0","zconfig":"2.0","router":"2.0","ap":"2.0"},"productKey":"b1iuHMGJYGI","deviceName":"IOT_test01","mac":"2C:3A:E8:22:05:CE","ip":"192.168.43.192","cipherType":4,"random":"6A000BC93C4649A33DF7787A2102B1F5","signMethod":0,"sign":"DEEC98C3C5BE9E7CF06B4E81C434D887C5B872D0"}}
05-30 17:51:38.434 31368-31886/com.aliyun.iot.living D/AlinkDC_PhoneApAhaNotifyHandler: onRecRequest
05-30 17:51:38.446 31368-31886/com.aliyun.iot.living D/AlinkDC_PhoneApAhaNotifyHandler: COAP_METHOD_AWSS_DEVICE_INFO_NOTIFY
05-30 17:51:38.447 31368-31368/com.aliyun.iot.living D/AlinkDC_DCTrackerWrapper: sendEvent(),ALP_phoneApDevFoundSucc
05-30 17:51:38.448 31368-31368/com.aliyun.iot.living D/AlinkDC_PhoneApAhaNotifyHandler: COAP_METHOD_AWSS_DEVICE_INFO_NOTIFY new device.
(2)搜素关键日志"switchAP"; PK不一致
如果1中有发现设备,但是没有"switchAP" 日志,则连接热点的设备PK和用户选择的PK不一致。
05-30 17:51:38.577 31368-31828/com.aliyun.iot.living D/AlinkDC_HotspotHelper: switchAP() call. ssid=NETGEAR73
05-30 17:51:38.595 31368-31828/com.aliyun.iot.living D/AlinkDC_AlinkPhoneApConfigStrat: start get wifi list task.
05-30 17:51:38.596 31368-31828/com.aliyun.iot.living D/AlinkDC_DCTrackerWrapper: sendEvent(),ALP_phoneApGetWifiListStart
c. 设备端日志排查
请参考设备端日志排查;
三、设备绑定流程
以下三个过程是串行的,任何一步失败了,都会导致绑定失败。
1. 获取设备类型
根据 ProductKey 获取设备是否是 WIFI 设备,如果是 WIFI 设备则走后续获取 token 及绑定的流程。
/thing/allProductInfo/getByProductKey -- "netType":"WIFI"
2. 获取绑定 token
// 开始获取 token
AlinkDC_LocalDeviceMgr: getDeviceToken() call
// 发现本地设备 带token
AlinkDC_LocalDeviceMgr: getDeviceToken onLocalDeviceFound
// 设备端会请求以下服务端接口 上报 token
20180530_17:51:54 report token:{"id":"0", "version":"1.0", "method":"thing.awss.enrollee.match", "params": {"token":"986F9B0A77297F31D162945A2E7ED84D"}}
20180530_17:51:54 report token result:0
3. 绑定
APP 获取 token 之后开始调用绑定接口/awss/enrollee/user/bind。
四、配网错误码请参考
错误码 | 错误类别 | 错误描述 | 处理建议 |
---|---|---|---|
600 | SYSTEM_ERROR | 系统错误 | 重试并切换配网方式 |
60101 | NETWORK_ERROR | 当前连接的Wifi是5G网络,不支持配网 | 提示用户切换到2.4G网络 |
60102 | NETWORK_ERROR | Wifi未连接 | 提示用户开启Wifi连接 |
60103 | NETWORK_ERROR | 手机流量未开启或者无SIM卡 | 提示用户当前配网方式需要SIM卡,切需要能上网。热点配网的过程会提示。 |
60201 | PARAMS_ERROR | productKey为空 | 检查linkType是否为空,或不支持,或需要的参数未填。 |
60202 | PARAMS_ERROR | linkType错误 | 检查linkType是否为空,或不支持,或需要的参数未填。 |
60203 | PARAMS_ERROR | deviceType错误 | 检查deviceType是否是不需要配网或者非Wifi设备。 |
60204 | PARAMS_ERROR | 配网参数错误 | 检查配网参数,如配网版本号是否匹配。 |
60205 | PARAMS_ERROR | SSID为空 | 传递正确的SSID |
603 | UNKNOWN_ERROR | 未知错误 | |
604 | SDK_ERROR | SDK内部错误 | 重试并切换配网方式 |
605 | USER_CANCEL | 用户取消配网 | |
606 | SERVER_FAIL | 服务端请求失败 | 根据日志查看错误类型 |
607 | PROVISION_TIMEOUT | 配网超时 | 重试 |