Last Updated on : 2024-06-20 08:32:08download
您现在正在阅览的,是一篇不完全公开的文档,这表示该文档内容的适用性有一定的限制,文档或目录所描述的内容适用于旧版本 SDK、API、工具、平台等。
如果您需要更准确的技术文档,请访问 涂鸦开发者平台,然后自行搜索。
本文档主要介绍生产测试 SDK 接口参考信息,包括主要功能,接口函数和回调函数。
Zigbee生产测试SDK是基于涂鸦私有网络通信协议、涂鸦私有Zigbee产测通信协议开发,用于Zigbee设备的授权、生产测试软件的二次开发。
本SDK文档共包括涂鸦网络通信库、Zigbee设备固件通信库两部分组成。其中,涂鸦网络通信库用于与涂鸦 IoT 的通信。主要包括账号登录、获取授权码信息、模块授权、授权校验、授权日志上传等功能。Zigbee设备固件通信库包括基于涂鸦Zigbee设备通信协议的模块产测功能,包括进入产测模式、授权信息读写、按键测试、信号强度测试等功能。
网络通信库:TuyaCloudIfLib.dll
Zigbee设备固件通信库:Tuya.Module.ProtocolServer.dll
主要依赖库:
BouncyCastle.Crypto.dll
Newtonsoft.Json.dll
Tuya.Core.dll
Tuya.Module.BottomCommunication.dll
|接口|说明|
|-|-|-|
|SetUrlSftVer|设置涂鸦 IoT 工作环境|
|UserLogin|账号登录|
|TokenAuth|授权|
|GetTokenInfo|获取Token信息|
|GetFirmwareSignFromServer|获取固件签名|
|TokenAuthValidate|授权有效性校验|
|AddAuthLog|添加授权日志|
|接口|说明|
|-|-|-|
|CommunicationServerBuilder.UseSerialPort|设置Zigbee设备通信服务串口信息 |
|CommunicationServerBuilder.UseTCPClient|设置Zigbee设备通信服务TCP信息|
|CommunicationServerBuilder.Builder
|ZigbeeComServer.Start|启动Zigbee设备通信服务|
|ZigbeeComServer.Stop|停止Zigbee设备通信服务|
|ZigbeeComServer.SwitchTestMode|进入测试模式 |
|ZigbeeComServer.WriteAuthKey|写入固件授权信息|
|ZigbeeComServer.ReadAuthKey|读取固件授权信息 |
|ZigbeeComServer.ReadMAC|读取MAC|
|ZigbeeComServer.WritePID|写入PID|
|ZigbeeComServer. ReadPID|读取PID|
|ZigbeeComServer.WriteFirmwareKey|写入固件签名|
|ZigbeeComServer.DownloadConfig|写入OEM配置文件|
|ZigbeeComServer.QueryConfig|检测配置文件|
部分内容为涂鸦产测授权SDK主要是授权测试部分的相关设置、接口调用流程。
整机测试主要包括账号登录、授权码信息获取、固件升级、建立连接、进入测试模式、固件版本校验、授权等部分。测试开始前需确保涂鸦账号、授权码Token正确无误。
环境设置
设置涂鸦 IoT 工作环境。用于设置涂鸦 IoT 的工作模式,设置软件版本信息等。
账号登录
账号登录为使用涂鸦 IoT 授权的前提,账号密码需向涂鸦注册。登录成功后方可使用涂鸦 IoT 相关功能。
信息获取
授权码信息部分作用为根据涂鸦提供授权码获取授权码配置的相关信息,如固件版本信息以及其他相关测试的配置等。
固件升级
固件升级为可选功能,由涂鸦 IoT 服务提供固件版本控制,由第三方提供固件烧录写入工具,在产测时完成升级。
固件信息比较
固件版本比较。此部分主要作用为确保固件中运行的固件版本与授权码中配置的固件信息一致,确保设备批次或烧录结果无误。方法为调用固件通信库接口将获取到的相关信息与授权码中相关信息进行校验。
授权流程
本部分介绍授权详细流程,其中涉及云端通信库、WIFI设备固件通信库相关接口。
授权部分为设备向涂鸦 IoT 注册授权,只有授权通过后才可与涂鸦 IoT 进行正确连接。本部分涉及云端通信库授权、授权校验等接口,涉及到Zigbee设备固件通信库中写入设备授权信息、读取设备授权信息接口。此部分授权通过后授权测试结束。如授权失败,可能会造成整机产测无法进入。授权部分中除读写授权配置信息可使用自有通信协议外,云端通信库授权接口调用不可缺少、省略,否则都可能会造成后续流程失败。
授权准备
授权开始前需确认登录流程是否成功,以及Token相关信息获取无误。除此之外需自行创建序列号SN用于测试,SN的作用为识别授权设备身份,以方便后续整机测试获取Mac正常。SN的要求为独立不重复,且每个SN使用后不可重复授权(包括授权失败的情况)。
建立连接
调用程序并传入连接参数建立通信Server,与设备建立连接。
进入产测模式
先进入产测模式,固件返回该版本固件需要写入的相关信息,包括是否写入PID、固件签名、OEM config文件、AuthKey。
读取设备MAC
读取固件中的MAC,用于授权接口的入参。
授权
授权接口调用。参数为SN、授权码、mac、软件版本信息。调用成功后云端会返回授权会返回分配的mac、uuid、accessKey等信息,此信息用于写入固件设置固件相关参数。
注:授权错误、缺失或授权SN重复使用,授权接口会返回错误信息。
向固件写入授权信息。此处如使用涂鸦Zigbee设备固件通信库,需确保Zigbee通信服务开启成功、进入产测模式成功。分为4个步骤:
步骤1: 判断授权返回的mac和从固件中获取的mac是否相同,不相同的话,重新写入mac。
步骤2: 根据进入产测返回的固件信息和调用云端获取授权码信息的接口,决定是否写入PID。
步骤3: 根据进入产测返回的固件信息和调用获取固件签名的接口,决定是否写入固件签名。
步骤4: 根据云端获取授权码信息的接口,决定是否写入OEM config文件。如果授权码支持写入配置文件,下载配置文件,如果配置文件的url为空,则报错,下载完成后,判断下载的文件是否是标准json文件,如果是标准json文件,需要压缩文件,如果不是,直接将文件写入后缀为.bin的同名文件中。调用请求下载参数文件的接口,传入文件长度和校验值,等待返回,然后调用传输配置文件的接口,支持分包传输,每包都需要等待返回值,然后调用结束文件传输的接口。
读取固件授权信息
读取固件授权信息即为读取上步骤中写入的授权信息,调用相关读取的接口,判断以上写入的信息是否正确。
授权信息校验
调用授权接口并校验固件授权信息后,可确保写入固件授权信息与授权信息一致,此时需进行授权校验确保授权成功。参数包括Token、SN、uuid、mac、accessKey、软件版本信息等。
添加授权日志
用于记录本次授权相关信息。需要上传的内容包括Token、SN、uuid、时间戳、固件信息、授权状态等。添加授权日志接口调用返回正确后授权成功。
设置涂鸦 IoT 工作环境 SetUrlSftVer
账号登录 UserLogin
授权 TokenAuth
[in] apiVer api版本,默认为1.0
获取Token信息 GetTokenInfo
授权有效性校验 TokenAuthValidate
添加授权日志 AddAuthLog
CommunicationServerBuilder.UseSerialPort设置Zigbee通信服务串口信息
CommunicationServerBuilder.UseTCPClient设置Zigbee通信服务TCP信息
CommunicationServerBuilde.Build
CommunicationServerBuilder.UseSerialPort设置Zigbee通信服务串口信息
CommunicationServerBuilder.UseTCPClient设置Zigbee通信服务TCP信息
CommunicationServerBuilde.Build
ZigbeeComServer.Start启动Zigbee通信服务
ZigbeeComServer.Stop关闭Zigbee通信服务
ZigbeeComServer.SwitchTestMode进入测试模式
函 数:
bool SwitchMode(out EnterTestModeRsp rsp, int sendRetryTimes = 1, int receiveRetryTimes = 50, int retryInterval = 100)
ZigbeeComServer.WriteAuthKey写入固件授权码
ZigbeeComServer.ReadAuthKey读取固件授权码
ZigbeeComServer.ReadMAC读取MAC
ZigbeeComServer.WritePID写入PID
ZigbeeComServer.ReadPID读取PID
ZigbeeComServer.WriteFirmwareKey写入固件签名
ZigbeeComServer.DownloadConfig写入OEM配置文件
ZigbeeComServer.QueryConfig查询OEM配置文件信息
enum _LoginUrlType
{
Release = 0, //线上环境,默认
Preview = 1, //预发环境
Daily = 2 //日常环境
}
public class UserLoginReqParas
{
public string username; //用户名,必填
public string password; //密码,必填
public string token; //token,非必填
}
public class PermissionsData
{
public string permissionCode; // 登录权限码
public string permissionName; // 登录权限名称
}
public class UserLoginResult
{
public string sessionId; // 登录session id
public List<PermissionsData> permissions; // 登录权限数据列表
}
public class UserLoginRspParas{
public bool success; //接口执行结果,成功为true,失败为false
public string errorMsg; // 错误信息
public string errorCode; //错误码
public string status; // 操作状态,包含一些特定的错误信息或状态
public long t; //接口调用时间
public UserLoginResult result; // 账号登录返回结果
}
public class TokenAuthReq
{
public string sn ; //产品序列号
public string tokenId ; //激活码
public string sftVersion ;//软件版本号
public string muid ; //乐鑫芯片的muid,其他芯片传空字符串
public string mac ; // 产品的mac地址
public string chipId ; // 加密芯片的芯片ID,无加密芯片传空串
}
public class TokenAuthResult
{
public string uuid; //模块uuid
public string mac; //授权的mac
public string accessKey; //授权秘钥
}
public class TokenAuthRsp{
public bool success; //接口执行结果,成功为true,失败为false
public string errorMsg; //错误信息
public string errorCode; //错误代码
public string status; //操作状态
public long t; //接口调用时间戳
public ProdTokenAuthResult result; //授权结果只有串口执行结果为true的时候有意义
}
public class GetTokenInfoReqParas
{
public string tokenId; //激活码
public string type; //授权类型“wifi”
public string sftVersion; //软件版本
public string softwareName; //软件名称
}
public class TokenInfo
{
public int amount; //授权总数
public string firmwareConfigMd5; //配置文件md5校验码
public string firmwareConfigUrl; //配置文件下载地址
public string snPrefix; //sn的前缀
public string firmwareChip; //固件芯片平台
public string firmwareProtocolType; //固件协议类型
public string productionFirmwareMd5; //生产固件md5校验码
public string productionFirmwareUrl; //生产固件下载地址
public bool supportFirmwareConfig; //是否支持oem配置
public string productionSubFirmwareUrl; //子固件下载地址
public string moduleModelChip; //模组芯片平台
public string productId; //产品ID
public string type; //激活码类型
public string firmwareKey; //固件key
public string macRule; //是否云端分配mac,“0”:不分配mac,“1”:分配mac
public bool oem; //是否是oem固件
public string countryCode; //国家码
public string productionSubFirmwareMd5; //子固件md5校验码
public string userareaFirmwareUrl; //用户区固件下载地址
public string userareaFirmwareMd5; //用户区固件md5校验码
public bool refreshUserarea; //是否刷新用户区固件
public long effectiveTime; //激活码生效时间
public int expires; //有效期
public string id; //激活码
public string productionId; //生产批号
public bool test; //是否产测
public int usedAmount; //已授权数量
public string wifiHotspotName; //热点名称
public string wifiPassword; //热点密码
public string desc; //激活码描述信息
public string manufacturer; //生产工厂
public string productKey; //预留
public string fingerprint; //固件名称
public string firmwareVersion; //固件版本
public int firmwareType; //预留
public bool gpioTest; //预留
public bool wifiTest; //预留
public string baselineVersion; //预留
public string flashRunSize; //flash大小,单位Mbits
}
public class TokenAuthRsp
{
public bool success; //接口执行结果,成功为true,失败为false
public string errorMsg; //错误信息
public string errorCode; //错误码
public string status; //操作状态,包含一些特定的错误信息或状态
public long t; //接口调用时间戳
public ProdTokenAuthResult result; //授权结果数据
}
public class TokenAuthValidateReq {
public string tokenId ; //激活码
public string sn; //产品序列号
public string mac ; //mac地址
public string uuid ; //授权产品uuid
public string muid ; //产品芯片的id
public string accessKey ; //授权秘钥
public string wifiHotspotName ; //热点名称
public string wifiPassword ; //热点密码
public string chipId ; //加密芯片id
public string sftVersion ; //软件版本
}
public class TokenAuthValidateResult
{
public bool result; //授权校验结果
public string failureDepict; //失败原因描述信息
}
public class TokenAuthValidateRsp : BaseResponse
{
public bool success; //授权校验执行结果
public string errorMsg; //错误信息
public string errorCode; //错误码
public string status; //操作状态,包含一些特定的错误信息或状态
public long t; //时间戳
public ProdTokenAuthValidateResult result; // 授权校验结果
}
public class AuthLog
{
public string hid; //wifi类授权为mac地址
public string uuid; //授权uuid
public string tokenId; //激活码
public string sn; //产品sn
public string activeTime; //时间戳
public string firmwareInfo; //固件指纹,包含固件名称和版本
public string gpio; //gpio测试结果“成功”或“失败”
public string rssi; //wifi信号强度测试结果
public int authStatus; //授权状态,1:成功 ,0:失败
public string authDepict; //授权状态描述,“成功”或“失败”
public string countryCode; //国家码
}
public class AddAuthLogReqParas
{
public AuthLog log; //授权日志数据集
}
public class AddAuthLogRspParas{
public bool success; //接口执行结果
public string errorMsg; //错误信息
public string errorCode; //错误代码
public string status; //操作状态,包含一些特定的错误信息或状态
public long t; //时间戳
}
public class ComPortParas
{
public string PortName; //串口号如“COM3”
public int BaudRate ; //波特率
public int DataBits ; //数据为
public Parity Parity ; //奇偶校验
public StopBits StopBits ; //停止位数
public int ReadBufferSize ; //读缓存大小
public int WriteBufferSize ; //写缓存大小
public int ReadTimeout ; //读超时时间,单位毫秒
}
public class TCAppientParas
{
public string HostName { get; set; }//目标IP地址
public int Port { get; set; }//目标端口
public int? ReceiveBufferSize { get; set; }//发送缓冲区大小
public int? SendBufferSize { get; set; }//接受缓冲区大小
public int? ReceiveTimeout { get; set; }//超时时间
}
public class WriteConfigInfoReq
{
public string Auzkey; //授权秘钥
public string UUID; //授权uuid
public bool PID; //产品PID
public bool IsProductionTest; //是否为整机测试
public string ApSSID; //授权的热点名称
Public string ApPWD;//授权的热点密码
}
public class BaseRsp
{
public bool Ret; //返回结果:true:成功 false:失败
}
public class GetModuleInformationRsp
{
public string AuthKey; //授App
public string UUID; //授权uuid
public string PID; //产品PID
public bool IsProductionTest; //是否为整机测试
public string ApSSID; //授权的热点名称
Public string ApPWD;//授权的热点密码
}
此代码进仅演示从涂鸦 IoT 端获取授权信息并完成授权校验的部分内容。(不包含写mac地址,写授权信息等其他功能)。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TuyaCloudIfLib;
using Newtonsoft.Json;
//1. Login
UserLoginReqParas loginReq= new UserLoginReqParas();
loginReq.username = "******";
loginReq.password = "######";
UserLoginRspParas loginRsp= TuyaCloudIf.UserLogin(loginReq);
if (loginRsp.success == false)
MessageBox.Show(loginRsp.errorMsg);
else
MessageBox.Show("Login successfully !");
//2. Get token information
GetTokenInfoReqParas GetTokenReq = new GetTokenInfoReqParas();
GetTokenReq.tokenId= "XRVAygmzpvRZNxYN";
GetTokenInfoRspParas GetTokenRsp = TuyaCloudIf.GetTokenInfo(GetTokenReq);
if(GetTokenRsp.success == false)
return false;
//3. Get firmware signs
var req = new TuyaCloudIfLib.GetModuleSignReqParas
{
mac = mac,
tokenId = tokenId,
firmwareName = "tuya_zigbee"
};
var rsp = TuyaCloudIfLib.TuyaCloudIf.GetModuleSign(req);
if (rsp.success == false)
{
errMsg += rsp.errorMsg;
return false;
}
else
{
sign = rsp.result.sign;
return true;
}
//4. Auth
TokenAuthReq AuthReq = new TokenAuthReq();
AuthReq.sn = "sn0000000002";
AuthReq.mac = "ecfabc9a86f0";//mac read from module
AuthReq.sftVersion = "test_app";
AuthReq.muid = "";// muid read from module
AuthReq.chipId = "";
AuthReq.tokenId = "*****************";//tokenId
TokenAuthRsp AuthRsp= TuyaCloudIf.TokenAuth(AuthReq);
If(AuthRsp.success== false)
Return false;
//5. Auth validate
TokenAuthValidateReq ValidateReq = new TokenAuthValidateReq();
ValidateReq.accessKey = AuthRsp.result.accessKey;
ValidateReq.muid = "";//read
ValidateReq.sn = "sn0000000002";
ValidateReq.mac = AuthRsp.result.mac;
ValidateReq.tokenId = "*****************";
ValidateReq.uuid = AuthRsp.result.uuid;
ValidateReq.chipId = "";
ValidateReq.wifiHotspotName = "";
ValidateReq.wifiPassword = "";
ValidateReq.sftVersion = "test_app";
TokenAuthValidateRsp ValidateRsp= TuyaCloudIf.TokenAuthValidate(ValidateReq);
if (!ValidateRsp.success)
MessageBox.Show("Validate fail !");
else
MessageBox.Show("Validate successfully!");
Is this page helpful?
YesFeedback