基础篇

基础场景见上面两个帖子,这里单独说明数组和可变长度数组的用法
话不多说,开始今天的演(表)示(演)

Profile和插件开发

添加一个string类型的属性:

在插件里添加一条数据上报消息:(已添加一个messageId,值为0x02

再添加一个固定长度的数组型字段,长度为5个字节

与profile里的属性关联起来:

再添加一条数据上报消息:(已添加一个messageId,值为0x03

再添加一个长度字段:

添加一个可变长度数组,并关联长字段:

与profile里的属性关联起来:

最后部署插件即可。

调测:

注册一个新设备:

使用NB设备模拟器,绑定后上报数据:先上报3条02开头的码流

查看设备历史数据:

说明:数组类型使用base64进行编解码。数据上报是平台使用base64进行编码,所以应用收到推送消息后,如要知道原始码流是什么,得使用base64解码。base64编解码规则见本帖后面的介绍和总结

再上报03开头的码流:

查看设备历史数据:

命令下发:

在profile里添加一个命令和命令字段

插件中添加一个命令下发消息,其中messageId为04

info字段内容如下:

部署插件后开始在线测试。先上报两个数据:

上报的消息转码后结果如下:

将收到的other_info的内容作为命令下发字段的参数值下发给设备:

设备模拟器收到的数据如下:

‘’

Base64编解码介绍:我们以上面的03开头的消息为例进行说明
找一个base64在线编解码器,将other_info的值进行解码(注意勾选解码结果以16进制显示)

那么反过来编码的结果会是什么样的呢?

为什么得到的结果不是AQ==呢?原因很简单,因为这里是按照字符编码的,而不是按数值进行编码的。我们可以按照base64编码原理手动计算一下。

base64编码说明:Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。

这是什么意思呢?我们一起计算一下就明白了。
base64每3个8字节进行编码,每个8字节是一个字符,这里有两种转化方式,导致编码会有2种结果。

1)把01当作字符,不足3个字符,补1个0,得到010,再转成8字节2进制表示。字符怎么用2进制表示的?在计算机里使用ascii码表示,查ascii码表,0的2进制ascii码为00110000,1的2进制ascii码为00110001,010就变成了001100000011000100110000(3*8=24),转化为4个6位的字节(4*6=24)就变成001100、000011、000100、110000(每6位数一组,我在中间用、隔开),之后在6位的前面补两个0,形成8位一个字节的形式,00001100、00000011、00000100、00110000,这几个数转成10进制的值分别为12、3、4、48,再查base64的表,12为M,3为D,4为E,最后一位因为我们补了一个0才得到的010(如果剩下的字符不足3个字节,则用0填充,输出字符使用'='),所以使用=表示,就得到了MDE=

2)把01当作数值(也就是1),不足3个字符,补2个0,得到100,转成8字节2进制表示,即0转成00000000,1转成00000001,于是100就是000000010000000000000000,转化为4个6位的字节(4*6=24)就变成000000、010000、000000、000000,前面补两个0得到00000000、00010000、00000000、00000000,这几个数转成10进制的值分别为0、16、0、0,再查base64的表,0为A,16为Q,后面2个字符因为我们补了2个0所以都是=,就得到了AQ==

总结:

1)数组类型的数据是按Base64码进行编解码的,比如在数据上报时01转为“AQ==”,命令下发时将“AQ==”(命令下发的参数值为AQ==转为01。大家可以试试看。
2)可变长度数组要关联长度字段,长度字段必须为int型
3)命令下发直接使用定长的数组即可,下发的字段长度是其实是以实际下发的数据为准。

4)平台使用的Base64编码是将码流当作数值型而非字符型(见上面的第二种转化方法)

补充:

P.S. 再追加Base64编码解码参考帖子(帖子后面有代码)

JS实现——Base64编码解码,带16进制显示

作者:Lily_w

【开发者portal在线开发插件系列四】数组 及 可变长度数组相关推荐

  1. 【开发者portal在线开发插件系列五】命令的响应,即命令结果的上报(mid的使用)

    基础篇 [开发者portal在线开发插件系列一]profile和基本上下行消息 [开发者portal在线开发插件系列二]多条上下行消息(messageId的使用) 基础场景见上面两个帖子,这里单独介绍 ...

  2. 【开发者portal在线开发插件系列二】多条上下行消息(messageId的使用)

    前言和基本操作请参考[开发者portal在线开发插件系列一]profile和基本上下行消息,此处不再复述,没操作过的小伙伴一定要先去看看哦~ 话不多说,开始今天的演(表)示(演) 场景说明: 假设一: ...

  3. 【开发者portal在线开发插件系列一】profile和基本上下行消息

    前言: 开发者portal支持在线开发profile(即设备建模).在线开发插件.模拟应用管理设备.模拟设备上报数据接收命令.支持离线开发的profile和插件的上传部署,是合作伙伴快速集成设备.对接 ...

  4. 【开发者portal在线开发插件系列三】字符串 及 可变长度字符串

    基础篇 基础场景见上面两个帖子,这里单独说明字符串和可变长度字符串的用法. 话不多说,开始今天的演(表)示(演) Profile和插件开发 添加一个string类型的属性: 在插件里添加一条数据上报消 ...

  5. iOS开发UINavigation系列四——导航控制器UINavigationController

    iOS开发UINavigation系列四--导航控制器UINavigationController 一.引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationIte ...

  6. WCF开发实战系列四:使用Windows服务发布WCF服务

    WCF开发实战系列四:使用Windows服务发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇文章中我们通过编写的控制台程序或WinForm程序来为本 ...

  7. 这款 20 万开发者使用的开发插件到底经历了什么?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 导读:涉及开发的技术人员,永远绕不开的就是将应用部署到相 ...

  8. 2020年度JEECG开发者大赛,开发插件赚外块还能赢大奖!!

    为了打造完善JeecgBoot插件生态,让用户拥有更多实用插件,让有才华的程序员分享插件也能赚取外块,JEECG官方特推出"JEECG插件市场"网站,供大家分享和下载插件! htt ...

  9. springboot 事务统一配置_Spring Boot实现分布式微服务开发实战系列(五)

    最近已经推出了好几篇SpringBoot+Dubbo+Redis+Kafka实现电商的文章,今天再次回到分布式微服务项目中来,在开始写今天的系列五文章之前,我先回顾下前面的内容. 系列(一):主要说了 ...

最新文章

  1. TEASER-plusplus 编译测试
  2. 文章id 文章标题点击量php,WordPress如何通过文章ID获取文章标题等信息
  3. 【图像配准】基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA、SATD算法
  4. iOS平台经典游戏《合金弹头X》上架 售价25元
  5. 使用setCustomView建立标题居中的自定义ActionBar
  6. RxJava API使用示例
  7. java引言_Java C++(引言一)
  8. 拓端tecdat|基于模型的聚类和R语言中的高斯混合模型
  9. 微信小程序——车牌键盘组件实现
  10. Ext.js 自定义桌面注意
  11. Unity 计算屏幕视口UV坐标的几种方法
  12. 三角公式以及常见关系
  13. python绘制花朵图案_Python编写万花尺图案实例
  14. 未来技术 html5 app,未来web浏览技术提前体验:10个会让你惊叹不已的HTML5画布(canvas)技术应用演示...
  15. 计算机专业英语(二)缩略词全称与解释
  16. GO语言格式化输出占位符
  17. android 蓝牙歌名,从Android上的蓝牙CarKit上显示标题(不是歌曲或艺术家,但是有效的SIP会话)...
  18. 粗糙集matlab,粗糙集理论权重确定方法用matlab实现
  19. 命令行神器cmder
  20. 【DockerCE】Docker-CE 20.10.21正式版发布

热门文章

  1. Git笔记(4) 获取仓库
  2. cpp 原子操作_C++ 新特性学习(八) — 原子操作和多线程库[多工内存模型]
  3. java快速压缩文件夹_如何使用java压缩文件夹本身
  4. cad渐开线齿轮轮廓绘制_如何在机械CAD软件中自动生成齿轮
  5. python 三维图 背景_Python利用matplotlib生成图片背景及图例透明的效果
  6. (转载)委托与函数指针辨析
  7. .NET垃圾回收机制 转
  8. 微信H5支付(基于Java实现微信H5支付)
  9. 七:Java之封装、抽象、多态和继承
  10. java解析excel生成sql文件