解放重复劳动丨华为云IoT API Explorer对接小程序实现系统化应用

x33g5p2x  于2021-11-11 转载在 其他  
字(3.4k)|赞(0)|评价(0)|浏览(418)

摘要:《物联网平台接口调用实验》详细讲解了API Explorer的应用,根据提供的接口,结合真实案例,制作了一个小程序,真正的把它应用起来,解放重复劳动,小程序是一个很好的平台,作为应用侧应用作为快速App环境。

本文分享自华为云社区《华为云IoT API Explorer对接小程序实现系统化应用》,作者: 神龙居市 。

《物联网平台接口调用实验》详细讲解了API Explorer的应用,根据提供的接口,结合真实案例,制作了一个小程序,真正的把它应用起来,解放重复劳动,小程序是一个很好的平台,作为应用侧应用作为快速App环境。

准备资料

1、华为云账号,并开通IoTDA控制台,选择北京四区域,创建好资源空间。

2、小熊派Bearpi-HM Nano开发板,和E53_IA1扩展版,

3、微信小程序账号,如果没有认证,也可以用开发临时账号运行。

4、小熊派其中一个案例,并导出Profile文件。Profile文件和API 接口数据字段有差异可以批量替换

工作原理和使用到的API Explorer接口。

工作流程和调用接口关系如图

接口调用封装代码

1、首先是登陆接口,需要在北京四区域开通IoT平台的资源空间权限

  1. //请求Token的json数据格式
  2. var tokenReq = require('../jsons/reqJson/tokenReq.js');
  3. // 认证得到Token
  4. //X-Auth-Token
  5. //token.project.id
  6. export function authToken(params) {
  7. var data = tokenReq.reqTokenJson;
  8. data.auth.identity.password.user.name = params.iamAccount
  9. data.auth.identity.password.user.password = params.iamPassword
  10. data.auth.identity.password.user.domain.name = params.account
  11. console.log("auth_data", data)
  12. return request({
  13. url: `${global.IAMEndpoint}/v3/auth/tokens`,
  14. method: 'post',
  15. data: data
  16. })
  17. }
  18. //从token中获得project_id,作为全局数据,以备后用
  19. wx.setStorageSync('project_id', res.token.project.id)

2、查找和初始化资源,如果project_id对应的指定名称的资源空间是否存在,否则创建资源空间

  1. //检查资源产品
  2. let params ={ 'project_id': global.project_id }
  3. init(params, res => {
  4. global.products = res;
  5. wx.navigateTo({
  6. url: '../home/index',
  7. })
  8. })
  9. export function init(params, func) {
  10. getAppSpace({
  11. "project_id": params.project_id
  12. }).then(res => {
  13. var app_name = global.app_name;
  14. var applications = res.applications;
  15. for (var item of applications) {
  16. if (item.app_name == app_name) {
  17. global.app_id = item.app_id
  18. break;
  19. }
  20. }
  21. if (global.app_id) {
  22. console.log('app_id', global.app_id);
  23. func(true)
  24. } else {
  25. addAppSpace({
  26. 'project_id': global.project_id || wx.getStorageSync('project_id')
  27. }).then(res => {
  28. global.app_id = res.app_id
  29. console.log('app_id', global.app_id);
  30. func(true)
  31. })
  32. }
  33. });
  34. }

3、添加设备是中选定产品后添加,所以在添加设备的同时,先检查产品是否存在,不存在先创建产品。我这里的产品是通过Profile编辑的,说到这里要吐槽一下,通过IoTDA平台编辑导出的Profile文件和API Explorer接口不一致,json结构是一致的,但是字段名称不一致。对此我也在平台上反应过,已经被采纳,但是还没有实现。IOT的APIExplorer接口CreateProduct参数与Profile不一致_建议反馈_开发者中心-华为云 (huaweicloud.com)

  1. addOrGetDevice: function (func) {
  2. //检查输入
  3. var json = deviceCreate.deviceCreateJson;
  4. json.node_id = this.data.device_name
  5. json.device_name = this.data.device_name
  6. // json.project_id = global.project_id
  7. json.product_id = global.product_id
  8. json.app_id = global.app_id
  9. //产品是否存在
  10. this.checkProduct(this.data.selectedProduct, product => {
  11. //检查设备,创建设备
  12. var has = this.data.devices.filter((x) => {
  13. return x.device_name == this.data.device_name;
  14. });
  15. if (has == false) {
  16. var params = {
  17. "deviceCreateJson": {
  18. "node_id": this.data.device_name,
  19. "device_name": this.data.device_name,
  20. "product_id": product.product_id,
  21. "app_id": product.app_id,
  22. "description": "XXXXXX device"
  23. },
  24. "project_id": global.project_id
  25. }
  26. addDevice(params).then(device => {
  27. if (device.device_id) {
  28. this.setData({
  29. showAddDevice: false
  30. })
  31. func({
  32. device_id: device.device_id,
  33. secret: device.auth_info.secret
  34. }, {
  35. ssid: this.data.wifiSSID,
  36. pwd: this.data.wifiPwd
  37. })
  38. } else {
  39. wx.showModal({
  40. title: '创建设备失败',
  41. content: `${res.error_msg}`,
  42. showCancel: false
  43. })
  44. }
  45. })
  46. } else {
  47. func(null, {
  48. ssid: this.data.wifiSSID,
  49. pwd: this.data.wifiPwd
  50. })
  51. }
  52. })
  53. }

4、设备的动态展示,根据产品的Profile属性而来。设备属性值不能直接通过设备读取,这里读取的设备影子数据

  1. //影子属性
  2. export function getDeviceProperties(params) {
  3. if (!params) params = {}
  4. let project_id = params.project_id || global.project_id || wx.getStorageSync('project_id')
  5. let device_id = params.device_id
  6. return request({
  7. url: `${global.IOTDAEndpoint}/v5/iot/${project_id}/devices/${device_id}/shadow`,
  8. method: 'get'
  9. })
  10. }

小程序的相关界面

点击关注,第一时间了解华为云新鲜技术~

相关文章