智能硬件APP开发,一般分三种形式, Andriod、ios、H5,而常见的H5开发常见的又属 APICloud SDK、微信应用开发。有的开发者,自己擅长移动端语言开发、或者是会使用常见的开源框架,便选择写原生APP或者是混合APP
下面带你们来看看,如何为智能硬件写微信应用开发。
一、需准备的工具:前端
公众号的原始IDjava
设备的二维码android
一台设备ios
注意,不能申请订阅号(不支持微信认证)。咱们将申请一个服务号,而且完成认证操做,而后才能开启“设备功能”模块,最后添加一个产品。web
二、设备绑定tomcat
三、业务服务器的搭建服务器
一、准备好工具后:微信
公众号的原始IDwebsocket
设备的二维码框架
一台设备
微信接入前,需保证,设备能正常地与机智云进行通信,设备的具体开发流程以下。
注意,在WIFI模块中,写入AirKiss时,须要配置公众号的原始ID。也就说,除了将机智云的product_key写入MCU之外,还须要将公众号原始ID写入WIFI固件中。关于固件的烧录,厂商或者小伙伴们若有困难,能够寻求机智云 · 客服MM的帮助。
微信客户端APP能够经过扫描二维码添加设备。设备二维码相关信息请点击这里。设置内容以下:
设备不但要在WIFI固件中写入公众号原始ID(注意,不是APPID),还要将全部设备的Mac地址,登记到微信服务器上。一开始,微信只给你100个配额,也就是说,你只能受权100个设备。
受权的方法,就是向微信的接口,发送一次请求,具体请看微信文档-设备受权。
不少小伙伴反应,受权常常失败,咱们这里给出一组基于WIFI通信的示例,你们能够参考:
注意:12位xxxxxxxxxxxx,表明设备的Mac地址,id是指设备ID,也就是机智云的did。但由于设备必须在上线后,机智云才会分配一个did,因此,咱们并没有法预知did是什么。一般的作法是:将id和mac,都设置为设备的Mac值。
auth_key能够不填,设置为空字符串,但不能没有这个字段。
op_type为0时,表示添加一台设备,后面须要跟着product_id字段(产品ID,在公众号的“设备功能”中,添加产品后,会有这个id)。op_type为1时,表示更新一台设备,此时不须要product_id字段。
批量受权时,记得更新顶部的:device_num。
这样,咱们硬件(设备)层面的准备工做,就完成啦。
好了,到这步,你能够稍微的奖励一下本身,享受一下阶段性的成果啦!
打开你的微信(确保是wifi连接状态),扫一扫你的产品二维码。
下面有两个按钮,绿色的按钮,是启动微信的AirKiss,将WIFI的帐号密码,发送给设备的WIFI模块。
部分设备须要启动匹配模式,才能配置上网。通常先启动设备的匹配模式,再使用微信的配置功能。配置完成后,会自动跳转到设备搜索界面。
在搜索界面,若是前面准备工做到位了,你必定能发现设备(不论是否绑定过)。点击发现的设备,而后绑定。微信会自动跳转到公众号页面。而后,你能够在微信的设置页面中,发现多了一个项目:设备。
固然,上面的操做,只是实现绑定操做。下面的教程将介绍如何监控设备的数据点。
为了简化开发者的操做,咱们将一些必要的API封装成了两个SDK: Java-SDK 以及 js-SDK。它们分别用于后台和前端页面,各自封装了机智云的OpenAPI 以及 WebSocket。
这两个SDK,将大大的简化了API的操做,帮咱们接管了token和用户管理,咱们只须要调用相关方法,便可实现设备的绑定和解绑。
SDK,能够在本文的附件中下载。
设备没问题了,咱们如今须要的是,操控设备自己的功能。
因为设备已经与机智云正常的通信,所以,对设备的操做,其实就是如何与机智云交互。
如今,用户已经在微信中绑定了设备,他但愿看到,设备在线状态。怎么办?
咱们使用微信的OpenId,做为惟一标识,生成匿名用户。何时注册匿名用户呢?微信绑定设备时候,将推送一条设备绑定事件消息到咱们的业务服务器。咱们在这个时候,将同时完成注册匿名用户,以及绑定用户/设备的操做。
微信在绑定时,发送这么一条事件消息:
咱们须要的是其中的OpenID和Mac,而后咱们调用机智云的Java-SDK:
DeviceInfo deviceInfo = OpenApi.bindDevice( wechatOpenId, gizwitsAppId, gizwitsProductKey, gizwitsProductSecret, mac, deviceAlias, deviceRemark) |
参数名 | 类型 | 说明 |
---|---|---|
wechatOpenId | String | 微信中的OpenId,也就是机智云中注册的匿名用户 |
gizwitsAppId | String | 机智云产品所绑定的APP的id |
gizwitsProductKey | String | 机智云的产品key |
gizwitsProductSecret | String | 机智云的产品Secret |
mac | String | 设备的Mac地址 |
deviceAlias | String | 设备的别名 |
deviceRemark | String | 设备的备注 |
这个方法,一次性解决了两个问题:注册匿名用户,绑定用户/设备。相对的,也要设定不少参数。全部的参数都是String类型。
其中deviceAlias(设备别名)以及deviceRemark(设备备注)均可以填空字符串“”。gizwitsProductKey就是你在开发者中心建立的产品。
而gizwitsProductSecret,则是该产品对应的密匙,在产品的详细信息中能够找到。
gizwitsAppId是机智云中,APP的Id。因为一个产品,多是多个APP操做的,好比iOS的APP,Android的APP,网站Web应用,甚至微信这样的轻应用,都算是一个APP。所以,在建立产品后,你还能够在为产品绑定一个或多个APP。这里的gizwitsAppId就是咱们所绑定APP的Id了。注意,APP必须绑定在产品上,才能使用。
当你调用该方法,就能实现注册匿名用户,已经将用户/设备绑定的操做了。是否是很方便呢?固然,为了方便起见,你还能够进一步封装这个SDK。这里就不展开了。
解绑操做也是相似的逻辑。当微信推送一条解绑事件消息,咱们就会进行解绑操做。一样调用SDK:
Boolean isSuccess = OpenApi.unbindDevice(wechatOpenId, gizwitsAppId, gizwitsDid); |
参数名 | 属性 | 说明 |
---|---|---|
WechatOpenId | String | 微信中的OpenId,也就是机智云中注册的匿名用户 |
gizwitsAppId | String | 机智云产品所绑定的APP的id |
Boolean isOnline = OpenApi.getDeviceOnlineStatus(wechatOpenId, gizwitsAppId, gizwitsDid); |
参数名 | 属性 | 说明 |
---|---|---|
wechatOpenId | String | 微信中的OpenId,也就是机智云中注册的匿名用户 |
gizwitsAppId | String | 机智云产品所绑定的APP的id |
gizwitsDid | String | 机智云中的设备ID,对应Mac,设备重置时会从新注册 |
请注意,在服务器部署的时候,部分开发者会发现部署失败。tomcat中的catalina日志会报错:
javax.net.ssl.SSLException:java.security.ProviderException:java.security.KeyException |
这是由于SDK中采用了Https的方式进行访问。
解决方法是:升级服务器环境中的库:nss。
好了,咱们如今已经绑定了设备,而且也能知道设备的在线的状态了。可是具体如何操做咱们的设备?一个良好的体验,固然是具备交互页面的。
下面咱们就一步步的搭建一个交互页面,来监控咱们的设备吧!
用户点击页面,咱们如何知道是哪一个用户呢?咱们须要获取当前用户的OpenId来识别时哪一个用户。如何获取呢?详细能够看微信的官方文档。
简单的来讲,咱们向微信的服务器发送受权请求,微信会判断咱们请求的URL,是不是受权的域名,若是验证经过,就会转发到咱们的URL,而且带上几个参数。
其中最重要的参数,是code,咱们经过Code能够获取OpenId。而后,咱们再将OpenId返回到页面中。
对于访问机智云的WebSocket,咱们已经封装成了一个JS-SDK。你们只须要引入到页面便可。
首先是,构建一个gizwits服务:
这个gizwits服务,会负责接下来全部的操做,包括:链接设备,读取设备的数据点,操做设备等。
参数名 | 属性 | 说明 |
---|---|---|
ApiHost | String | websocket的目标API域名 |
CommType | String | 协议格式:custom(自定义协议); attrs_v4(标准数据点协议) |
wechatOpenId | String | 当前访问的微信用户OpenId |
GizwitsAppId | String | 机智云产品所绑定的APP的id |
固然,此时gizwits服务,并无运行起来,咱们还须要初始化操做。但在操做以前,咱们能够选择配置一个回调函数,它会在初始化结束后,自动运行。
当执行gizwits.init()的时候,就会初始化gizwits服务,而且将匿名用户OpenId绑定的全部设备,放置在回调函数的devices中。
而咱们要作的操做,都应该写在回调函数gizwits.onInit里面。
devices列表中的每一个设备,都会有六个属性,分别是product_key(产品的Key), dev_alias(设备别名),did(设备ID),mac,is_online(在线状态), remark(设备备注)。咱们能够根据状况来使用。
上面的操做中,咱们已经获取到了设备列表。通常来讲,客户可能拥有多个设备,所以,咱们在这一步,就能够罗列一个设备列表,由用户本身决定,来操做哪台设备。
想要操做具体哪台设备,咱们就去链接哪台设备:gizwits.connect(did)。固然链接成功后,也有一个回调函数:gizwits.onConnected。此回调函数没有传入值。
注意,链接设备以前,必须先初始化。
初始化和链接设备,并不是同步操做,所以,若是只是简单的前后执行,可能会出错。所以,建议能够将链接设备的操做,放在初始化的回调函数中,保证执行的前后关系。
链接成功后,咱们就能够收到设备上报的数据了。上报的数据经过回调函数:gizwits.onReceivedAttrs。该回调函数会有一个回调值(参数),这个回调值的格式以下:
上面的操做中,咱们已经获取到了设备列表。通常来讲,客户可能拥有多个设备,所以,咱们在这一步,就能够罗列一个设备列表,由用户本身决定,来操做哪台设备。
链接设备
想要操做具体哪台设备,咱们就去链接哪台设备:gizwits.connect(did)。固然链接成功后,也有一个回调函数:gizwits.onConnected。此回调函数没有传入值。
注意,链接设备以前,必须先初始化。
初始化和链接设备,并不是同步操做,所以,若是只是简单的前后执行,可能会出错。所以,建议能够将链接设备的操做,放在初始化的回调函数中,保证执行的前后关系。
链接成功后,咱们就能够收到设备上报的数据了。上报的数据经过回调函数:gizwits.onReceivedAttrs。该回调函数会有一个回调值(参数),这个回调值的格式以下:
获取设备的数据点,也很简单,只需调用gizwits.read()方法,不须要任何参数。调用此方法,能够立刻获取一次,一样,数据也是经过回调函数 gizwits.onReceivedAttrs,或者gizwits.onReceivedRaw来获取。
当websocket链接错误时,会调用gizwits.onError函数,若有须要,能够重写该函数;回调值是错误信息:
gizwits.onError = function(value){ console.log("error!!!!:::::", value.toString()); } |
当设备发生上线,或者下线的事件时,gizwits服务,会调用gizwits.onOnlineStatusChanged 回调函数.
回调值有两个参数:did和在线状态(is_online)。
gizwits.onOnlineStatusChanged = function(value) { alert("设备上下线通知,did=", value.did); alert("设备上下线通知,is_online=", value.is_online); } |
最后是,设备的远程控制。
远程控制的调用方法,若是commType=custom,则使用gizwitsws.send(command)方法,若是commType=attrs_v4,则使用gizwitsws.write(command)方法。
远程控制的值,若是commType=custom,请输入p0,例如[,,…];若是commType=attrs_v4,请输入datapoints,例如{“power”:true}。
下面是远程控制RBG灯的代码样例:
var command = '{"LED_R": 0, "LED_G": 0, "LED_B": 0}'; gizwits.write(did, JSON.parse(command)); |
固然,使用控制设备的前提是,咱们已经链接上了一台设备。
至此,咱们已经实现了微信接入的核心部分。在此教程中,Java-SDK与js-SDK为咱们带来了很大的,咱们几乎不用关心如何调用机智云的API和websocket,而是直接调用SDK的方法就能够了。
最后,但愿你们能多多反馈意见,为更加便捷的开发贡献一份力量。