阿里云以稳定、可靠著称,所以很多开发者使用 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连接。
一机一密
一机一密,顾名思义,就是每一个设备都要有DeviceName,ProductKey 和 DeviceSecret。
字段 |
中文名 |
备注 |
DeviceName |
设备名 |
不可重复;例程中以IMEI做设备名 |
ProductKey |
产品密钥 |
阿里云物联网套件产品的密钥。由阿里云分配。该Key唯一且不可修改。相同产品中的Key相同 |
DeviceSecret |
设备密钥 |
由阿里云动态生成,不可自定义修改;相同产品中的每个设备DeviceSecret均不同 |
由此可见,“一机一密”模式下,开发者需要给每个设备写入不同的DeviceSecret,才能顺利连接到阿里云。调试时修改代码即可,但是量产时,每个设备的LOD都是批量下载的,完全相同的,那么怎么才能再给每个设备写入不同的DeviceSecret呢?
开发者可以把IMEI对应的DeviceSecret写入配置文件,让模块运行时读取DeviceSecret即可:
首先,开发者应准备好需要上传的设备在aliyun添加一机一密产品,然后:设备管理 – 选择产品 – 批次管理 – 批量添加。
在弹出的窗口中,先选择产品,再点击“批量上传”:
(如果开发者不知道上传文件的格式,可以先看阿里云提供的模板)
接下来我们上传如下格式的csv为例:
(此处DeviceName使用的是模块IMEI。开发者使用扫描枪去扫描模块的二维码获得获得IMEI,也可以访问http://erp.openlaut.com/根据箱号下载IMEI表格)
接下来点“确认”即可:
上传成功后,“批次管理”会出现刚刚上传的详情,点击“下载CSV”:
下载csv文件后,我们可以打开查看其结构:
接下来就是修改文件的样式,使之成为模块可读的配置文件:
1、删掉第一行;
2、批量替换,把(86857)替换为(IMEI86857),实现在每行首加入(IMEI);
3、把每行第二个逗号到结尾的内容(,MFPOxUSMfbc),替换为双引号(”);
4、把第一个逗号(,)替换为等号和双引号( = ”)
(以上修改不复杂,批量替换即可,方法在此不再赘述)
修改后,该文件格式如下:
然后参考NVM DEMO,使用模块自身的IMEI为key去读取对应的DeviceSecret,然后连接阿里云即可。示例代码如下:
--[[ 函数名:getDeviceSecret 功能 :获取设备密钥 参数 :无 返回值:设备密钥 ]] local function getDeviceSecret() --默认使用设备的SN作为设备密钥,用户可以根据项目需求自行修改 --return misc.getSn() return nvm.get("IMEI"..misc.getImei()) --用户单体测试时,可以在此处直接返回阿里云的iot控制台上生成的设备密钥,例如return "y7MTCG6Gk33Ux26bbWSpANl4OaI0bg5Q" --return "y7MTCG6Gk33Ux26bbWSpANl4OaI0bg5Q" end
如果开发者觉得这个方式比较繁琐,亦或设备很多无法全部写入配置文件,或者担心有泄密的风险,也可以用如下方法:
1、模块下载好底层和lua后,通过UART1将DeviceSecret写入模块,模块收到后自动保存,随后即可读取保存的DeviceSecret,连接到阿里云(请参考JSON+UART+NVM demo);
2、模块开机后,自动联网,以IMEI为参数,get/post方法发出请求,服务器验证IMEI合法性后,下发正确的DeviceSecret,模块收到DeviceSecret后,自动保存,随后即可读取保存的DeviceSecret,连接到阿里云(请参考HTTP+JSON+NVM demo);
注意:如果模块使用接收到的DeviceSecret无法连接到阿里云,应重试N次,如果仍然失败,则进行相应处理(如点亮红色LED,或者以IMEI为参数上报错误信息,自动清除已保存的DeviceSecret等)。
一型一密
一型一密相对于一机一密,要简单很多,仅需在代码中固定写入ProductKey和ProductSecret即可:
--采用一型一密认证方案时: 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,开发者可以根据自己的实际情况进行修改。