一、易微联WIFI智能开关控制器模块
买了一个单火版易微联的wifi智能双控开关,如图:
先提一下优点:
易微联合支持HuaWei HiLink,智慧生活APP可以直接控制设备。
支持语音控制,小艺、小度、小爱、天猫精灵等。
支持智能定时。
有单独的易微联APP,也可以通过第三方平台分享设备至华为的智慧生活app。
单单这些还不足以让我青睐,还有一点是,易微联有开发平台,允许个人开发者自由接入,但是有效期是1年。
二、易微联开发者平台
易微联的开发者平台叫做“酷宅开发平台”,网址是:https://ewelink.gitee.io/ewelink-api/#/
目前对个人:暂时免费,仅提供 OAuth2.0 授权登录方式,包含 1 个 1 年有效期的接口调用凭证,无技术支持,有限的文档资料,有限的接口数量,有限的接口调用次数,接口不保证稳定性。
对企业:¥ 12000/年
三、对接流程
登录易微联开发者平台,提交认证资料,等待审核完成。接着创建1个应用,个人用户仅可以创建1个应用,且有效期是1年。
支持的接口清单一览表:
(1)这件事情的开端最重要是要获取到accessToken的值。流程图如下(来自官网):
首先是根据应用信息生成一个易微联的授权链接,用户打开该链接,进入易微联的授权页面,输入账号和密码,易微联后台校验成功后调用回调接口,并传输code。
该回调接口是我们自定义开发的,拿到code后,调用/v2/user/oauth/token接口,最终得到token值。
有了token值,就可以调用其他的接口了。
(2)、生成授权链接
主要是签名的计算,签名计算方式:
算法:HMAC(Hash-based Message Authentication Code)SHA256
密钥:{clientSecret} 消息:{clientId}_{seq}
结果:HMAC 计算返回原始二进制数据后进行 Base64 编码
示例:此处假设 clientId = ABC,seq = 123,clientSecret = abc
实际算出的签名是:v1+mfNY2ukxswM8sZOTg99srZsVnUVv9DGXeav1096M=
//生成授权链接
string nonce = Guid.NewGuid().ToString().Replace("-", string.Empty).Substring(0, 8);
string clientId = "APPID";
string clientSecret = "APPID";
string seq = GetTimeStampLong().ToString();
string redirectUrl = "XXX";//回调接口
string message = $"{clientId}_{seq}";
string authorization = CreateSign(message,clientSecret);
string url = $"https://c2ccdn.coolkit.cc/oauth/index.html?state=lwd&clientId={clientId}&authorization={authorization}&seq={seq}&redirectUrl={redirectUrl}&nonce={nonce}&grantType=authorization_code";
// System.Diagnostics.Process.Start(url);
Console.WriteLine(url);
其中redirectUrl是回调地址,与创建应用信息跳转地址一栏一样。
(3)回调地址
回调地址或者或者叫跳转地址,是用户在易微联授权页登录成功后,易微联自动调用的一个网址,其实是一个get http web api 接口。
需要创建一个web api项目,并部署在服务器中,这里不再展开。
[HttpGet]
public string Login(string code, string region, string state)
{
string clientId = "APPID";
string clientSecret = "APPID";
string redirectUrl = "XXX";//回调接口
string baseUrl = "https://cn-apia.coolkit.cn";
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("code", code);
dic.Add("redirectUrl", redirectUrl);
dic.Add("grantType", "authorization_code");
string url = $"{baseUrl}/v2/user/oauth/token";
string a = JsonConvert.SerializeObject(dic);
string sign = CreateSign(a, clientSecret);
Dictionary<string, string> header = new Dictionary<string, string>();
header.Add("X-CK-Appid", clientId);
header.Add("Authorization", $"Sign {sign}");
string ContentType = "application/json";
string host = "cn-apia.coolkit.cn";
string json = HttpWebResponseUtility.CreateJSONPost(url, ContentType, a, header);
return "OK";
}
(4)获取设备列表
//授权完成,获取到token值后,调用其他接口
string token = "***";
//获取设备列表
Dictionary<string, string> header = new Dictionary<string, string>();
header.Add("Authorization", $"Bearer {token}");
url = $"{baseUrl}/v2/device/thing";
string json = HttpWebResponseUtility.CreateGetHttpResponse(url,header);
Console.WriteLine(json);
(5)获取设备状态
//获取设备状态
Dictionary<string, string> header = new Dictionary<string, string>();
header.Add("Authorization", $"Bearer {token}");
url = $"{baseUrl}/v2/device/thing/status?type=1&id=10016726cc¶ms=switch";
string json = HttpWebResponseUtility.CreateGetHttpResponse(url, header);
Console.WriteLine(json);
(6)设置设备状态
//控制设备
Dictionary<string, string> header = new Dictionary<string, string>();
header.Add("Authorization", $"Bearer {token}");
url = $"{baseUrl}/v2/device/thing/status";
setStatus setStatus = new setStatus();
setStatus.type = 1;
setStatus.id = "10016726cc";
setStatus.@params.@switch="off";
string a = JsonConvert.SerializeObject(setStatus);
string json = HttpWebResponseUtility.CreateJSONPost(url,a, header);
Console.WriteLine(json);
注意:代码中使用到了第三方序列化库:Newtonsoft.Json。
我已将代码上传,下载码是:73A0619205
下载码是啥?如何下载=》点击查看