【阿里云】如何向模块批量写入DeviceSecret呢?

批量将DeviceSecret写入模块,实现便捷连接到阿里云,轻松量产。

阿里云以稳定、可靠著称,所以很多开发者使用 Air2xx/Air8xx系列模块,使用Luat模式,配合阿里云的物联网套件进行开发。

阿里云的认证较为繁琐,不过开发者根据提供的 Lua demo 代码,或者AT手册,都能较为轻松的连接到阿里云。

但是,很多开发者在量产环节还是遇到了不小的难题——不论是一机一密,还是一型一密,都要涉及设备的批量管理,颇为麻烦。所以本文就针对这个痛点,给大家提供一些解决方案,助力开发者顺利量产。

如果没有尝试过阿里云物联网套件的开发者,可以登录 https://account.aliyun.com/login/login.htm?oauth_callback=http%3A%2F%2Fiot.console.aliyun.com%2F创建产品,然后使用aLiYun demo连接。

一机一密

一机一密,顾名思义,就是每一个设备都要有DeviceNameProductKey DeviceSecret

字段

中文名

备注

DeviceName

设备名

不可重复;例程中以IMEI做设备名

ProductKey

产品密钥

阿里云物联网套件产品的密钥。由阿里云分配。该Key唯一且不可修改。相同产品中的Key相同

DeviceSecret

设备密钥

由阿里云动态生成,不可自定义修改;相同产品中的每个设备DeviceSecret均不同

由此可见,“一机一密”模式下,开发者需要给每个设备写入不同的DeviceSecret,才能顺利连接到阿里云。调试时修改代码即可,但是量产时,每个设备的LOD都是批量下载的,完全相同的,那么怎么才能再给每个设备写入不同的DeviceSecret呢?

开发者可以把IMEI对应的DeviceSecret写入配置文件,让模块运行时读取DeviceSecret即可:

首先,开发者应准备好需要上传的设备在aliyun添加一机一密产品,然后:设备管理 选择产品 批次管理 批量添加。

attachments-2018-09-lnr2oiOL5b8dd4db2de1d.png

在弹出的窗口中,先选择产品,再点击“批量上传”:

attachments-2018-09-DFKsb0hb5b8dd4e2210b7.png

(如果开发者不知道上传文件的格式,可以先看阿里云提供的模板)

接下来我们上传如下格式的csv为例:

attachments-2018-09-iyBEtufb5b8dd4f1a1da3.png

(此处DeviceName使用的是模块IMEI。开发者使用扫描枪去扫描模块的二维码获得获得IMEI,也可以访问http://erp.openlaut.com/根据箱号下载IMEI表格)

 接下来点“确认”即可:

attachments-2018-09-qYOICXny5b8dd4f78127d.png

上传成功后,“批次管理”会出现刚刚上传的详情,点击“下载CSV”:

attachments-2018-09-AUBeFBp35b8dd4fce9f6a.png

下载csv文件后,我们可以打开查看其结构:

attachments-2018-09-iVnU3aBI5b8dd511e3834.png

接下来就是修改文件的样式,使之成为模块可读的配置文件:

1、删掉第一行;

2、批量替换,把(86857)替换为(IMEI86857),实现在每行首加入(IMEI);

3、把每行第二个逗号到结尾的内容(,MFPOxUSMfbc),替换为双引号();

4、把第一个逗号(,)替换为等号和双引号( = ”)

(以上修改不复杂,批量替换即可,方法在此不再赘述)

修改后,该文件格式如下:

attachments-2018-09-X2KDGiNd5b8dd51886836.png

然后参考NVM DEMO,使用模块自身的IMEIkey去读取对应的DeviceSecret,然后连接阿里云即可。示例代码如下:

--[[
函数名:getDeviceSecret
功能  :获取设备密钥
参数  :无
返回值:设备密钥
]]
local function getDeviceSecret()
    --默认使用设备的SN作为设备密钥,用户可以根据项目需求自行修改
    --return misc.getSn()
	return nvm.get("IMEI"..misc.getImei())
    
    --用户单体测试时,可以在此处直接返回阿里云的iot控制台上生成的设备密钥,例如return "y7MTCG6Gk33Ux26bbWSpANl4OaI0bg5Q"
    --return "y7MTCG6Gk33Ux26bbWSpANl4OaI0bg5Q"
end

如果开发者觉得这个方式比较繁琐,亦或设备很多无法全部写入配置文件,或者担心有泄密的风险,也可以用如下方法:

1、模块下载好底层和lua后,通过UART1DeviceSecret写入模块,模块收到后自动保存,随后即可读取保存的DeviceSecret,连接到阿里云(请参考JSON+UART+NVM demo);

2、模块开机后,自动联网,以IMEI为参数,get/post方法发出请求,服务器验证IMEI合法性后,下发正确的DeviceSecret,模块收到DeviceSecret后,自动保存,随后即可读取保存的DeviceSecret,连接到阿里云(请参考HTTP+JSON+NVM demo);

 

注意:如果模块使用接收到的DeviceSecret无法连接到阿里云,应重试N次,如果仍然失败,则进行相应处理(如点亮红色LED,或者以IMEI为参数上报错误信息,自动清除已保存的DeviceSecret等)。

一型一密

一型一密相对于一机一密,要简单很多,仅需在代码中固定写入ProductKeyProductSecret即可:

attachments-2018-09-jsvyibR65b8dd5223b895.png

--采用一型一密认证方案时:
PRODUCT_KEY和PRODUCE_SECRET为阿里云华东2站点上创建的产品的ProductKey和ProductSecret,用户根据实际值自行修改
local PRODUCT_KEY = "b1KCi45LcCP"
local PRODUCE_SECRET = "VWll9fiYWKiwraBk"
--除了上面的PRODUCT_KEY和PRODUCE_SECRET外,还需要提供获取DeviceName的函数、获取DeviceSecret的函数、设置DeviceSecret的函数
--设备第一次在某个product下使用时,会先去云端动态注册,获取到DeviceSecret后,调用设置DeviceSecret的函数保存DeviceSecret

不涉及每一个设备单独的DeviceSecret(这个参数是动态获取的)。故此,不再赘述。


PS:以上代码均是引自aLiYun demo下的testALiYun.lua,开发者可以根据自己的实际情况进行修改。

  • 发表于 2018-09-04 08:39
  • 阅读 ( 5102 )
  • 分类:默认分类

0 条评论

请先 登录 后评论
不写代码的码农
技术销售Delectate

43 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章