• 欢迎大家分享资料!前往留言板评论即可!

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

合宙 模组资料网 4年前 (2021-05-15) 654次浏览 0个评论 扫描二维码

阿里云以稳定、可靠著称,所以很多开发者使用 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添加一机一密产品,然后:设备管理 选择产品 批次管理 批量添加。

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

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

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

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

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

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

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

 接下来点“确认”即可:

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

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

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

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

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

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

1、删掉第一行;

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

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

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

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

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

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

然后参考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即可:

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

--采用一型一密认证方案时:
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,开发者可以根据自己的实际情况进行修改。


喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址