一、开发流程:
1、概述
如果开发者有通过微信公众平台作为与最终消费者的交互界面的需求,您可以通过阅读本文档了解如何借助机智云以及微信公众号、微信硬件平台进行开发。由于基于微信公众号进行硬件设备的接入、控制需要与多个平台交互。所以,有必要对每个平台的作用有清晰的了解。
2、总体接入流程图
微信客户端 —》微信服务器 —》厂商服务器 —》机智云 —》设备(传感器)
3、机智云
【1】从机智云到设备(传感器)过程中,在微信接入业务场景中,通过开发者中心(site.gizwits.com)的图形化界面定义设备功能,机智云自动生成设备MCU与通信模组之间的串口通信协议,开发者根据协议文档即可实现设备的联网能力.
【2】从厂商服务器到机智云过程中,设备接入机智云后,机智云提供了面向微信应用的API,提供传输设备数据到应用、应用向设备发起的控制信息的功能。
4、厂商服务器
厂商服务器是厂商为了满足自己的微信应用,独立部署的WEB系统。该系统通过机智云平台提供的API进行与设备的数据、控制的实时通讯,解决智能硬件接入的需求;通过访问微信公众号平台的API实现以微信为渠道服务厂商最终消费者的需求。开发者可以为自己的应用设计个性化的HTML交互界面与功能。
5、微信服务器
微信服务器主要为设备与厂商服务器之间的通信提供了一系列的接口,主要包括微信用户账号与设备的绑定/解绑定、接受/发送设备消息等,具体接口及使用方法可查看微信官方文档,微信最近推出了微信硬件平台,在做微信接入前需要仔细了解微信公众号与微信硬件平台,提供的功能要在不断完善。
6、微信客户端
微信客户端提供了最终与用户交互的操作界面,可以理解为就是一个运行在手机的浏览器,只不过是运行在微信公众号这套体系下。开发者可通过自己申请的公众号管理后台配置自定义的菜单、
二、常见问题:
1、机智云Web Socket API服务是什么?
机智云Web Socket API服务是为了满足基于Html5应用如微信公众号这种应用远程控制设备,实时展现设备状态而开发的一套API接口。Web Socket API主要是为了弥补HTTP协议短连接的不足,能够实时将设备数据传输到网页并展现。
2、WEB socket协议与HTTP有什么区别?
HTTP协议是由客户端主动向服务端发起单向通信,是短连接,Web Socket是长连接双向通信,服务端与客户端都可主动发送数据。
3、如果未成功绑定设备,是否可以调用web socket api提供的控制设备指令?
未成功绑定设备,不能成功调用控制设备的指令。
4、在使用设备控制api与服务端通讯,采用什么编码?
采用utf8编码。数据点中枚举值为非ASCII的字符明确需要以Unicode编码。
5、设备控制api协议中的参数详细描述有吗?
did:目标设备的did。attr:属性值。raw:自定义内容。
did是open api 注册设备的返回结果。
attr的值需要结合数据点的定义。
raw的值需要结合p0协议的定义。
websocket只是m2m客户端的一种存在形式。因此与open api的结合如同用户或设备与open api中定义的参数是一样的,可在Open api获取参数的详细意义。
6、Web socket api提供SSL的通讯支持吗?
是支持的。
三、开发教程内容:
1、微信SDK下载
打开以下地址链接,下载微信SDK:
https://github.com/gizwits/gizwits-wechat-js-sdk
2、为什么接入微信
【1】使用微信的好处:
微信有大量的用户,用户不愿意,为某个垂直领域的服务,单独装一个应用,微信有全平台的版本,开发一次,相当于开发多个应用等。
【2】微信的两大体系:
《A》用户体系(OpenId)
《B》微信APP(AirKiss 和 内置浏览器)
3、申请微信公众号
首先,我们需要申请微信公众号,注意,不能申请订阅号(不支持微信认证)。我们将申请一个服务号,并且完成认证操作,然后才能开启“设备功能”模块,最后添加一个产品。最终,你会得到两件东西:公众号的原始ID和设备的二维码。当然,你也可以使用测试号,进行前期开发阶段的调试。
4、购买测试设备
微信接入前,需保证,设备能正常地与机智云进行通讯,设备的具体开发流程如下:
开通服务号 —》微信认证 —》启用设备功能 —》添加产品 —》获取品类二维码 —》产品设计 -》定义数据节点 —》开发MCU/SOC —》烧录WiFi固件 —》微信开发 —》烧录AirKiss固件扩展 —》与云端正常通讯
注意事项:
在WIFI模块中,写入AirKiss时,需要配置公众号的原始ID。也就说,除了将机智云的product_key写入MCU以外,还需要将公众号原始ID写入WIFI固件中。关于固件的烧录,厂商或者小伙伴们如有困难,可以寻求机智云 · 客服MM的帮助。
5、设备二维码
微信客户端APP可以通过扫描二维码添加设备。为使已成功接入机智云的设备能被微信控制,在微信公众平台创建产品的时候请按照以下设置来勾选。
其中:连接类型选择“Wi-Fi”设备,产品添加方式选择“每种型号唯一的二维码”,产品添加成功后,微信会生成此款产品的唯一一个二维码,通过扫描这个唯一的二维码可以进行微信配网后近场发现设备来绑定,如果选择“每个产品唯一的二维码”,那么将会为此款产品的每一个产品生成一个二维码,扫描该二维码可以直接绑定设备,但是无法通过近场发现绑定,产品配置方式选择“微信配网”与“不使用加密“。
设置内容如下:
【1】连接类型:Wi-Fi
【2】产品添加方式:每种型号唯一的二维码
【3】产品配置方式:微信配网与不使用加密
6、设备授权
设备不但要在WIFI固件中写入公众号原始ID(注意,不是APPID),还要将所有设备的Mac地址,登记到微信服务器上。一开始,微信只给你100个配额,也就是说,你只能授权100个设备。授权的方法,就是向微信的接口,发送一次请求,具体请看微信文档-设备授权。
7、阶段性成果
打开你的微信(确保是wifi链接状态),扫一扫你的产品二维码。下面有两个按钮,绿色的按钮,是启动微信的AirKiss,将WIFI的账号密码,发送给设备的WIFI模块。部分设备需要启动匹配模式,才能配置上网。一般先启动设备的匹配模式,再使用微信的配置功能。配置完成后,会自动跳转到设备搜索界面。
在搜索界面,如果前面准备工作到位了,你一定能发现设备(不管是否绑定过)。点击发现的设备,然后绑定。微信会自动跳转到公众号页面。然后,你可以在微信的设置页面中,发现多了一个项目:设备。当然,上面的操作,只是实现绑定操作。
8、简化操作的SDK
为了简化开发者的操作,我们将一些必要的API封装成了两个SDK: java-SDK 以及 js-SDK。它们分别用于后台和前端页面,各自封装了机智云的OpenAPI 以及 WebSocket。这两个SDK,将大大的简化了API的操作,帮我们接管了token和用户管理,我们只需要调用相关方法,即可实现设备的绑定和解绑。
9、业务服务器的搭建
设备没问题了,我们现在需要的是,操控设备本身的功能。由于设备已经与机智云正常的通讯,因此,对设备的操作,其实就是如何与机智云交互。
10、机智云设备绑定
【1】如果用户已经在微信中绑定了设备,并且他希望看到设备在线状态。使用微信的OpenId,作为唯一标识,生成匿名用户。什么时候注册匿名用户呢?微信绑定设备时候,将推送一条设备绑定事件消息到我们的业务服务器。我们在这个时候,将同时完成注册匿名用户,以及绑定用户/设备的操作。设备的绑定流程如下:
用户扫码 —》 绑定用户/设备 —》收到绑定时间 —》绑定匿名用户/设备 —》返回绑定成功的设备信息 —》保存did/openId/mac的绑定关系 —》确认 —》跳转公众号
【2】微信在绑定时,发送这么一条事件消息,我们需要的是其中的OpenID和Mac,然后我们调用机智云的Java-SDK,其参数如下:
DeviceInfo deviceInfo = OpenApi.bindDevice(wechatOpenId, gizwitsAppId, gizwitsProductKey, gizwitsProductSecret, mac, deviceAlias, deviceRemark);
wechatOpenId:微信中的OpenId,也就是机智云中注册的匿名用户
gizwitsAppId:机智云产品所绑定的APP的id
gizwitsProductKey:机智云的产品key
gizwitsProductSecret:机智云的产品Secret
mac:设备的Mac地址
deviceAlias:设备的别名
deviceRemark:设备的备注
注意事项:
这个DeviceInfo deviceInfo = OpenApi.bindDevice()方法,一次性解决了两个问题:注册匿名用户,绑定用户/设备。相对的,也要设定很多参数。所有的参数都是String类型。
其中deviceAlias(设备别名)以及deviceRemark(设备备注)都可以填空字符串“”。gizwitsProductKey就是你在开发者中心创建的产品。而gizwitsProductSecret,则是该产品对应的密匙,在产品的详细信息中可以找到。gizwitsAppId是机智云中,APP的Id。由于一个产品,可能是多个APP操作的,比如IOS的APP,Android的APP,网站Web应用,甚至微信这样的轻应用,都算是一个APP。因此,在创建产品后,你还可以在为产品绑定一个或多个APP。这里的gizwitsAppId就是我们所绑定APP的Id了。
注意,APP必须绑定在产品上,才能使用。当你调用该方法,就能实现注册匿名用户,已经将用户/设备绑定的操作了。是不是很方便呢?当然,为了方便起见,你还可以进一步封装这个SDK。这里就不展开了。
11、机智云设备解绑
解绑操作也是类似的逻辑。当微信推送一条解绑事件消息,我们就会进行解绑操作。同样调用Java-SDK:
Boolean isSuccess = OpenApi.unbindDevice(wechatOpenId, gizwitsAppId, gizwitsDid);
wechatOpenId:微信中的OpenId,也就是机智云中注册的匿名用户
gizwitsAppId:机智云产品所绑定的APP的id
12、获取设备的在线状态
Boolean isOnline = OpenApi.getDeviceOnlineStatus(wechatOpenId, gizwitsAppId, gizwitsDid);
wechatOpenId:微信中的OpenId,也就是机智云中注册的匿名用户
gizwitsAppId:机智云产品所绑定的APP的id
gizwitsDid:机智云中的设备ID,设备重置时会重新注册
请注意,在服务器部署的时候,部分开发者会发现部署失败。tomcat中的catalina日志会报错
13、微信页面操作设备
现在已经绑定了设备,并且也能知道设备的在线的状态了。但是具体如何操作我们的设备?一个良好的体验,当然是具有交互页面的。下面我们就一步步的搭建一个交互页面,来监控我们的设备吧。
14、获取OpenId
当我们向微信的服务器发送授权请求,微信会判断我们请求的URL,是否是授权的域名,如果验证通过,就会转发到我们的URL,并且带上几个参数。其中最重要的参数,是code,我们通过Code可以获取OpenId。然后,我们再将OpenId返回到页面中。
15、机智云连接websocket
对于访问机智云的WebSocket,我们已经封装成了一个JS-SDK。大家只需要引入到页面即可。
16、初始化gizwits服务
首先是,构建一个gizwits服务,这个gizwits服务,会负责接下来所有的操作,包括:连接设备,读取设备的数据点,操作设备等。
当然,此时gizwits服务,并没有运行起来,我们还需要初始化操作。但在操作之前,我们可以选择配置一个回调函数,它会在初始化结束后,自动运行。
当执行gizwits.init()的时候,就会初始化gizwits服务,并且将匿名用户OpenId绑定的所有设备,放置在回调函数的devices中。而我们要做的操作,都应该写在回调函数gizwits.onInit里面。devices列表中的每个设备,都会有六个属性,分别是product_key(产品的Key), dev_alias(设备别名),did(设备ID),mac,is_online(在线状态), remark(设备备注)。我们可以根据情况来使用。
初始化服务参数如下:
ApiHost:websocket的目标API域名
CommType:协议格式:custom(自定义协议); attrs_v4(标准数据点协议)
wechatOpenId:当前访问的微信用户OpenId
GizwitsAppId:机智云产品所绑定的APP的id
17、设备列表
上面的操作中,我们已经获取到了设备列表。一般来说,客户可能拥有多个设备,因此,我们在这一步,就可以罗列一个设备列表,由用户自己决定,来操作哪台设备。
18、连接设备
想要操作具体哪台设备,我们就去连接哪台设备:gizwits.connect(did)。当然连接成功后,也有一个回调函数:gizwits.onConnected。此回调函数没有传入值。
注意,连接设备之前,必须先初始化。初始化和连接设备,并非同步操作,因此,如果只是简单的先后执行,可能会出错。因此,建议可以将连接设备的操作,放在初始化的回调函数中,保证执行的先后关系。连接成功后,我们就可以收到设备上报的数据了。上报的数据通过回调函数:gizwits.onReceivedAttrs。
19、手动读取:设备数据点
获取设备的数据点,也很简单,只需调用gizwits.read()方法,需要传入did。调用此方法,可以马上获取一次,同样,数据也是通过回调函数 gizwits.onReceivedAttrs,或者gizwits.onReceivedRaw来获取。
网友评论