一、概述
机智云的sdk日志中包含了大量的信息,极大的方便开发者定位问题,但很多开发者都看不懂这些日志,因此该份教程讲述如何从sdk的日志中找到自己需要的信息以及定位问题。
该份文档的阅读前提是开发者已经具备获取android日志的条件和能力,并且已经熟悉机智云sdk相关使用方法。如不具备这些前提,请先参考网络上的相关资料。
二、设置sdk级别
要查看sdk的日志,首先需要调用sdk设置日志级别的方法,将其设为所有级别,以及设置在后台输出二进制数据。
调用方法:
xpgwifisdk.setloglevel(xpgwifiloglevel loglevel, string logfile, boolean bprintdataindebug);
参数说明:
三、过滤日志
sdk的日志主要有两个“tag”,一个是“xpgc”,一个是“xpgwifisdk”。一般情况下,logcat的log tag 设置为“xpg”即可。
如图:
“xpgc”代表该日志属于sdk底层逻辑所打印的日志。
“xpgwifisdk”代表该日志属于sdk外部公共接口所打印的日志。
如图:
四、日志分析
sdk在执行每一步操作的时候,都会打印出相关信息,具体信息课参考如下说明:
云端请求
sdk里包含的大量的云端交互操作,其中与云端交互部分,会以“w”(警告)级别打印,在eclipse的log cat中会以橘黄色来标记。如下图:
该日志包含了请求的相关信息,如请求的header以及body。
其中header包含了appid以及token等比较重要的信息,app发布的时候请注意关闭日志输出。
sdk内部使用的网络接口都是使用机智云openapi的相关接口,接口的详情可参考官网的文档。
根据该日志,可以看出发出自己的接口调用是否正确,例如缺少token或者缺少appid等;同时也可以判断自己的网络质量,是否发起请求以后长时间未收到云端回复。
一些常见的问题分析会在该文档后面再详细描述。
云端响应
sdk发起请求后,在网络正常的情况下,sdk会收到云端的响应,响应结果也会打印在日志中。如图:
具体的reponse会以“w”级别标出。上图是获取账号下绑定的设备的请求响应。一般情况下,开发者无需理会具体的网络请求和响应,sdk会自行处理并作出回调。只有在网络情况不好的情况下,开发者才需要从日志中分析网络请求是否正常。
发现设备
sdk发现本地设备的过程实际上是udp的收发过程。sdk会往路由器发送一个udp广播,烧写了机智云模块的设备在收到改广播后,会回复一个响应帧到sdk端。具体的过程可由下图看出来:
“xpgbroadcast(),port = 12414”该日志说明sdk向路由器的12414端口发送了一个udp广播,具体的指令内容可参考协议文档。如果发送成功,sdk会打印“udp package send success”。
当设备收到了指定的udp广播以后,会回复相关响应帧,该响应帧包含了设备的productkey、did、ip地址、mac地址等信息。具体的指令内容可参考协议文档。
sdk收到设备的回复以后,会回调diddiscoverd接口。
从该日志可以看出sdk发出广播后,是否有设备回复。如果没有收到回复,说明有几点原因:
本地没有设备
路由器不支持udp广播
可根据实际情况定位问题和解决问题。
小循环登录设备
小循环登录即是手机与设备在同一路由器内,通过设备ip建立tcp连接。登录的过程如下图:
由图中的“connected to server 192.168.1.102:12416”可以看出sdk发起的是小循环登录,连接的是设备的ip地址,端口号为12416。
登录成功后,sdk内部会打印“onlogin(int): 0”,返回值0说明登录成功了,会回调“didlogin”接口通知ui进行处理。
通过该日志,可以判断设备是进行大循环还是小循环连接,并且可以看出连接成功或者失败,以及失败的原因。具体失败的原因会在本文档后面进一步描述。
大循环登录设备
大循环登录即是手机与设备不在同一路由器(网段)内,通过机智云云端建立mqtt连接。登录的过程如下图:
由图中的“connected to server m2m.gizwits.com:1883”可以看出sdk发起的是大循环登录,连接的是机智云云端域名地址,端口号为1883。
登录成功后,sdk内部会打印“onlogin(int): 0”,返回值0说明登录成功了,会回调“didlogin”接口通知ui进行处理。
通过该日志,可以判断设备是进行大循环还是小循环连接,并且可以看出连接成功或者失败,以及失败的原因。具体失败的原因会在本文档后面进一步描述。
小循环收发指令
小循环发送指令通过tcp/ip进行收发。开发者调用sdk方法,传入json格式的指令,由sdk内部解析成为二进制指令,并发送给设备。设备收到后做出状态改变,按照机智云串口协议要求,把自己的状态用二进制指令返回,sdk收到后再封装为json格式,回调给相关接口。详见下图:
其中“writepi()”说明是通过ip的方式发送的指令,也即是小循环发送。
通过该日志,可以看出二进制指令是否按照协议文档收发,是否能正常解析为json格式,解析的json格式是否正确。具体的分析过程会在本文档后面进一步描述。
大循环收发指令
小循环发送指令通过mqtt方式进行收发。开发者调用sdk方法,传入json格式的指令,由sdk内部解析成为二进制指令,并发送给设备。设备收到后做出状态改变,按照机智云串口协议要求,把自己的状态用二进制指令返回,sdk收到后再封装为json格式,回调给相关接口。详见下图:
其中“writepm()”说明是通过mqtt的方式发送的指令,也即是大循环发送。
“readpm()”说明时通过mqtt的方式接收到指令,也就是大循环接收。
通过该日志,可以看出二进制指令是否按照协议文档收发,是否能正常解析为json格式,解析的json格式是否正确。具体的分析过程会在本文档后面进一步描述。
收发指令详解
sdk收发指令的过程,均在sdk中打印显示,app的调试,也可以从日志中获得大量很有用的信息。一个收发指令的过程如下图:
一次指令的收发,具体经过了以下几个步骤:
1.调用sdk的“write()”方法发送json指令
如上图日志中的json指令,包含了“fan_speed”这个数据点。通过该日志,可以看出发送的json格式是否正确,数据点是否正确,数据点的key跟value是不是目标数据。
2.sdk把json指令解析为原始业务指令
“writep0()”代表了sdk把json格式的指令解析为二进制指令,下面会打印出字节格式的指令。
3.sdk把二进制指令小循环发往设备或大循环发往云端
“writepm()”代表了sdk加入了机智云协议的包头后把指令发往云端。
如果是“writepi()”,则说明是小循环发送指令。
通过该日志,可以看出当前发送的指令属于大循环还是属于小循环。
4.sdk接收到本地或云端的二进制指令
“readpm()”代表了sdk接收到了云端返回的二进制指令,如果是”readpi()”,则说明sdk接收到了本地设备返回的二进制指令。
通过该日志,可以看出当前接收的指令属于大循环还是属于小循环。
5.sdk把二进制指令去除包头后变为原始业务指令
如果sdk接收到了云端的指令,会去除机智云协议的包头,保留原始的字节业务指令并打印在控制台中。
6.sdk把原始业务指令封装为json格式
sdk获取到二进制指令后会根据自动加载的配置文件解析为json格式指令。如上图的“receive data”中打印出的json指令。通过该日志,可以看出解析是否正常以及具体每个数据点的key和value。
7.sdk把json格式指令通过接口回调给ui层
sdk解析结束后会通过回调接口把数据回调到ui层,tag为“xpgwifisdk”,接口名一般是”did”开头,例如图中的”didreceivedata”。
通过该日志可以看出sdk是否已经成功调用了回调接口,以及调用的回调接口具体的接口名。
我国首颗通信能力达10Gbps的低轨宽带卫星顺利完成通信能力测试 堪称中国“太空互联网”的—大步
我国智能汽车专利强国之路任重道远
福州工地使用健康码测温人脸机共同抗疫防疫
感受艺术与科技的相遇:小米MIX 2
WinCC系统介绍_WinCC系统的基本功能
机智云SDK Logs分析教程
NVIDIA 2020年下半年推出自动驾驶出租车,采用NVIDIA Drive平台
采用分体式设计的便携式AR头显DreamGlass Air发起众筹活动
安徽工程大学选购我司高温差示扫描量热仪
互联网会给工程机械带来那哪一些影响
详谈锂电池充电方法,聚合物锂电池充电方法五大步骤
打造出企业级网络设备制造经营管理优势 菲菱科思夯实扩张基础
水牙线是什么_水牙线品牌排行榜
消费级无人机应用越来越广 技术革新难题慢慢增长
数字时代半导体测试挑战与智能制造解决方案优势
关于医院信息化建设的分析和说明
黑龙江移动开通省内首个5G基站将于2020年实现全省的5G全面商用
浅析数据中心交换机芯片,中国自主可控国产化交换机已是历史必然
LCD背光、I/O端口及电源保护电路设计
因期待而精彩 同星FlexRay系列产品即将上市