# 华为云YAT产品接入流程
鸿蒙后台网址:https://devicepartner.huawei.com/console/home (opens new window)
#创建产品
<span class="ne-text">选择左侧导航栏的产品开发,点击加号创建新产品,或者选择以前创建的产品编辑查看已经创建的产品。</span>
<img width="1068" alt="" src="/img/1623372563022-e5a75ea6-1e05-48da-b095-eae550b29634.png"></img>
<span class="ne-text">选择品类,点击下一步。</span>
<img width="599" alt="" src="/img/1627352941760-599d6967-ddf8-4852-976a-5c9e188416ea.png"></img>
<span class="ne-text">选择方案:标准开发方案,下一步。</span>
<img width="513" alt="" src="/img/1634016970931-71a216a2-4187-49c1-a619-0e12896f7fde.png"></img>
<span class="ne-text">输入产品基本信息:注意这一步很重要,填写确认以后就不能修改了,所以一定要填写正确。产品名称会在配网时发现新设备提示出来,连接方式和通信类型请按照下图选择,最后点击创建。</span>
<img width="566" alt="" src="/img/1627353150314-9d0a045e-6256-4ce8-9201-f650da36d2ef.png"></img>
<span class="ne-text">输入联系人信息:</span>
<img width="460.5" alt="" src="/img/1627353316033-931cb902-a1be-4f3b-96df-01f82c53565d.png"></img>
<span class="ne-text">产品创建成功以后会分配ProdID、ProdKey等信息,后面会用到。</span>
<span class="ne-text"></span>
<span class="ne-text">产品定义:操作系统设置请参考下图。</span>
<img width="719.5" alt="" src="/img/1627353383999-b7ac7f04-9791-4f23-8b17-a5691a73bcd4.png"></img>
<span class="ne-text">使用庆科的EMW3010模组请选择标准开发方案,参考下面的选择。</span>
<img width="392" alt="" src="/img/1634020957873-5ad171a9-64b0-4df8-8857-6a4500c0cc02.png"></img>
<img width="751" alt="" src="/img/1634017116994-4bab3e7a-26f1-4a83-b012-45e8028f4b34.png"></img>
<span class="ne-text">使用庆科EMC3090模组请选择自定义开发方案,并按照下图选择模组:</span>
<img width="437.5" alt="" src="/img/1634020990915-328e9b95-cdd2-4dc3-ace5-b928ae977f70.png"></img>
<img width="818.5" alt="" src="/img/1634020878946-a92b0309-3f62-4e94-8f93-f67ed3b38aa6.png"></img>
<span class="ne-text">填写完产品信息以后点击提交,进入交互设计页面。</span>
<span class="ne-text">交互设计:点击进入开发</span>
<img width="703.5" alt="" src="/img/1627353731778-07786d94-b880-4e69-ad1a-cbe17e4cd3d5.png"></img>
<span class="ne-text">物模型定义:点击新建品类功能,按需添加需要的功能。</span>
<img width="767.5" alt="" src="/img/1627353754186-908b2d7a-fbaa-4acc-ac02-bdcfb461a82f.png"></img>
<img width="387.5" alt="" src="/img/1627353789058-d8e70c42-b773-4a7b-9fa1-86e662b501e8.png"></img>
<span class="ne-text">选择完品类功能以后点击确定,回到上个页面,点击下一步,进入APP开发页面。APP开发选择线上开发,等待后台生成H5页面,按需配置页面。页面配置完成以后点击下一步,进入产品配置。按需做产品配置。</span>
<img width="706.5" alt="" src="/img/1627353843834-27540706-ca3f-43cd-be33-977a492c3cfa.png"></img>
<span class="ne-text">产品配置完成以后,点击左上角的产品型号,进入上一级页面。</span>
<img width="593" alt="" src="/img/1627353941340-165dcaee-1a4e-4294-818c-4d88b021d1e8.png"></img>
<span class="ne-text">点击集成开发,进入集成开发页面。</span>
<img width="726" alt="" src="/img/1627353965174-8e9721b9-28cf-4d2e-b49a-68c3f972bb53.png"></img>
<span class="ne-text">配网设置:</span>
<img width="501.5" alt="" src="/img/1627353992345-3d695fa6-f02a-47e8-9cdf-7ed81bfa6538.png"></img>
<span class="ne-text">点击修改,配置正确的SSID,这个SSID是配网模式下,模组启动的热点名称,这个配置非常重要,鸿蒙会基于SSID来判断是哪个产品。</span>
<img width="584.5" alt="" src="/img/1628143207843-625c5473-bdab-44cc-ba5e-8ba2ebb6f76d.png"></img>
<span class="ne-text">按照上图设置完SSID以后点击保存。</span>
<span class="ne-text">选择开启PIN码验证,然后先点击手动PIN码,再点击自动PIN码。</span>
<img width="242" alt="" src="/img/1627354114693-f5ad3d87-ec2f-4acd-b323-1151d9ed2874.png"></img>
<span class="ne-text">剩余项目请参考下图填写,然后点击提交完成产品的所有配置。</span>
<img width="478" alt="" src="/img/1627354139028-78d8bc8f-9fb6-4ca3-b943-6b8bc07391a5.png"></img>
<span class="ne-text">在产品的信息页面中,三个关键信息:ProdID,产品型号和ProdKey的配置需要修改到代码中。</span>
<img width="759" alt="" src="/img/1627354226237-49e50a4d-3c87-40f2-b47c-66768d923c33.png"></img>
#产品信息导出
点击图中红色圈出的地方的导出按钮,浏览器会下载一个json文件,是产品的基本信息,内容举例如下:
{ "acKey":"xxxxxxxxxxxxxxxxxx", "accessType":"HARD", "brand":"庆科", "brandEn":"MXCHIP", "desc":"firmwareVer:固件软件版本号; softwareVer:SDK版本号; hardwareVer:设备硬件版本号", "deviceModel":"Light3010", "deviceName":"庆科3010测试灯", "deviceTypeId":"01B", "deviceTypeName":"智能照明", "deviceTypeNameEn":"Lamp", "firmwareVer":null, "hardwareVer":"1.0.0", "manufacturerId":"01A", "manufacturerName":"上海庆科信息技术有限公司", "manufacturerNameEn":"mxchip", "prodId":"258X", "productSeries":"Light", "protocolType":"WIFI", "softwareVer":"12.0.0.304" }
#代码修改
#hal_token.c
把复制的ProdID和ProdKey填写到SDK的如下函数中。
#hal_sys_param.c
需要修改关于产品的定义,类似如下内容:
#hilink的修改
<span class="ne-text">hilink_device_sdk.c 修改A_C数组,参考上面导出的产品信息的acKey。</span>
<span class="ne-text">hilink_device.h的修改请参考导出的产品信息填写。</span>
宏定义 | JSON值 |
PRODUCT_ID | prodId |
DEVICE_TYPE | deviceTypeId |
MANUAFACTURER | manufactureNameEn |
DEVICE_MODEL | deviceModel |
DEVICE_TYPE_NAME | deviceTypeNameEn |
MANUAFACTURER_NAME | manufacturerNameEn |
<span class="ne-text">所以根据我导出的产品信息,hilink_device.h的宏定义修改如下:</span>
/* 设备基本信息 */ #define PRODUCT_ID "258X" #define DEVICE_TYPE "01B" #define MANUAFACTURER "01A" #define DEVICE_MODEL "Light3010" /* 请确保设备类型英文名和厂商英文名长度之和不超过17字节 */ #define DEVICE_TYPE_NAME "Lamp" #define MANUAFACTURER_NAME "mxchip"
#再次检查配网设置:
<img width="501.5" alt="" src="/img/1627353992345-3d695fa6-f02a-47e8-9cdf-7ed81bfa6538.png"></img>
<span class="ne-text">点击修改,配置正确的SSID,这个SSID是配网模式下,模组启动的热点名称,这个配置非常重要,鸿蒙会基于SSID来判断是哪个产品。</span>
<img width="584.5" alt="" src="/img/1628143201334-2b432c46-86d5-44ad-8a72-240bb5158cb8.png"></img>
#产品控制代码修改
#下载profile
<span class="ne-text">在产品后台下载产品的profile,这个profile定义了控制产品的命令列表。在产品主界面,点击交互设计->进入开发。</span>
<img width="373.5" alt="" src="/img/1629254623635-08b5b9ac-71b7-46ab-9083-c7e02a80b173.png"></img>
<span class="ne-text">在交互设计的右上角点击下载Profile,会下载一个excel文件:Profile_<ProdID>.xlsx文件。</span>
<img width="736.5" alt="" src="/img/1629254715295-d842b7fc-dcc1-42ee-b218-6a569b5b07d6.png"></img>
#根据Profile修改代码
打开Profile文件,找到设备属性表,根据表的内容修改hilink_device_sdk.c文件。
上面是一个demo的Profile的内容,下面是c文件修改的内容。
// 设备服务信息 int gSvcNum = 1; svc_info_t gSvcInfo[] = { {"switch", "switch"}, }; // 设备服务的总数量 #define SRV_TOTAL_COUNT 1 // 服务switch定义 #define SWITCH_PROP_COUNT 1 #define SWITCH_ON_IDX 0 const SRV_PROPERTY_S switch_props[SWITCH_PROP_COUNT] = { { "on", DTYPE_BOOL, OPR_GET | OPR_PUT | OPR_REPORT } }; // 设备服务总列表 const SRV_INFO_S services[SRV_TOTAL_COUNT] = { {"switch", "switch", SWITCH_PROP_COUNT, switch_props}, };
gSvcNum的数量要是这个页面本身包含的服务sid的数量去掉默认的两个服务(update和netInfo)以后的值。
gSvcInfo是所有这些服务的说明,其中第一个字符串是sid的内容,第二个字符串是ServiceType的内容。
switch_props定义操作属性,第一个字符串对应表格的属性,第二个对应数据类型,第三个对应操作权限。一个服务器sid下面如果有多少个操作属性就需要定义多少个数组。
services数组定义所有的服务sid。
#注意
在创建产品的集成开发那个页面,要选择开启PIN码校验,然后一定要先点击一次手动PIN码,再点击自动PIN码,不能只点击自动PIN码。
#设备授权
点击左侧导航栏,选择设备授权。
点击ACKey下载,获取ACKey并填写到SDK中。
<span class="ne-text">hal_token.c</span>
hilink_device_sdk.c
#申请激活码
激活码公钥生成方式:参考链接:生成私钥与公钥 (opens new window)
- 准备一台安装有OpenSSL的PC。Linux系统的PC通常自带OpenSSL,推荐使用。
- 在命令行窗口中,执行如下命令,生成私钥。
openssl genrsa -out rsa_private_key.pem 1024
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt >> privatekey.txt
<span class="ne-text" style="color: rgb(36, 39, 40); font-size: 16px">命令执行成功后,得到“rsa_private_key.pem”(标准格式)和“privatekey.txt”(pkcs8格式)两个私钥文件。前者用于生成公钥文件;后者用于解密激活码文件。</span>
- 继续执行如下命令,生成私钥对应的公钥。
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
<span class="ne-text" style="color: rgb(36, 39, 40); font-size: 16px">命令执行成功后,得到“rsa_public_key.pem”文件。用文件编辑器打开该文件,拷贝公钥信息(</span>**<span class="ne-text" style="color: rgb(36, 39, 40); font-size: 16px">不要拷贝第一行和最后一行</span>**<span class="ne-text" style="color: rgb(36, 39, 40); font-size: 16px">,亦即“BEGIN PUBLIC KEY”、“END PUBLIC KEY”所在的两行信息),以备后续</span>[<span class="ne-text">申请激活码</span>](https://developer.huawei.com/consumer/cn/doc/development/SmartDevicePartner-Guides/deviceauthorization-0000001134626077#ZH-CN_TOPIC_0000001134626077__section148301230122317)<span class="ne-text" style="color: rgb(36, 39, 40); font-size: 16px">使用。</span>
<span class="ne-text" style="color: rgb(36, 39, 40); font-size: 16px"></span>
#激活码解密
<span class="ne-text">从华为官网下载下来的激活码文件是一个*.lic文件这个文件是加密的,需要通过工具解密。</span>[📎token_解密工具(Java版).rar](/attach/zh/token_解密工具(Java版).rar)
<span class="ne-text">运行如下命令解密</span>
java -jar decode.jar MXCHIP_TEST01_00120210611.lic authorized.zip privatekey.txt
<span class="ne-text">其中privatekey.txt就是上面产生public_key时创建的文件,decode.jar就是压缩包里面的文件,lic文件就是官网下载的授权的加密文件,authorized.zip就是产生的解密后的token文件,每一行代表一个token。</span>
<span class="ne-text"></span>
#转换为token.bin文件
<span class="ne-text">解压token_parse.zip文件,解压出authorized.zip文件,在CMD执行命令:</span>
`token_parse.exe 00f778c3-0b22-41ea-9cf2-72693b74c3b2.txt`
<span class="ne-text">则会把txt里面的所有token产生成独立的bin文件,假设申请了100个token,则会产生100个bin文件。</span>
<span class="ne-text"></span>
#token烧录
<span class="ne-text">大批量生产请使用MXCHIP的BAT烧录系统。</span>
<span class="ne-text">研发人员可以通过原厂工具把上面生成的token.bin文件烧录。EMC3090请使用imagetool,烧录地址是0x1F9000\. EMW301请使用hiBurn,烧录地址0x1E3000。</span>
<span class="ne-text"></span>
#认证沙箱操作步骤
- 模组侧KitFwk切换release版本。目前git上的SDK已经切换到release版本了。
- 模组侧Token需要重新申请调测Token,以前申请的Token都不能再使用了。
- Device Partner平台,帐号管理 > 基本资料,申请测试权限,庆科的账户已经设置了,客户账户需要修改。
- Device Partner平台,产品开发 > 集成开发 > 管理调测设备,添加设备SN(HalGetSerial()接口。我们SDK默认都是使用的模组的MAC地址的小写生成的SN,类似这种:7c25da002e82。
- 手机侧安装
智慧生活基础服务
:更新至HiLinkSvc_Beta_12.0.2.303.apk,切换“新认证环境”。 - 手机侧安装智慧生活:更新至AILife_Debug_12.0.2.302.apk,切换“认证沙箱”。
- 如果token下载失败,请到产品定义页面,点击编辑再点击提交,触发服务器做一次同步,再申请token。
#FAQ
1、新创建的产品,按照上面修改完程序以后无法搜索到设备,或者搜索到的是未知设备。
解决办法:
1. <span class="ne-text">首先检查APP的版本,请使用12.0.0.302版本,环境设置为认证环境。</span>
2. <span class="ne-text">到网页后台集成开发页面,点击一次手动PIN码,再点击自动PIN码,只需要来回点2次,不需要其他操作,也不需要提交。</span>
3. <span class="ne-text">删除APP缓存,并重启APP。删除APP缓存的方法:Android系统调出所有正在运行的程序列表,长按智慧生活图标,点击存储,删除数据。</span>
2、配网失败
<span class="ne-text">解决办法:请确认token是否下载正确了,一定要使用跟产品匹配的token,并正确烧录到产品的flash中。检查输入的路由器密码是否正确。恢复配网模式多试两次。</span>