大家好,之前先后发布了华为云IOT的Java、Android、微信小程序的华为云物联网平台的上位机应用开发教程,基本介绍了不同环境下的华为云物联网平台的接口调用方法,最近接到了两个小伙伴咨询华为云物联网平台的C#应用开发问题,其实本质都是一样的,像查询设备属性下发命令等功能在应用侧开发都是以Http的GET或POST请求完成接口调用的形式,仔细查看代码的话其实与Android那期的开发教程有很大的相似之处,本期就带大家使用Visual Studio完成C#的窗体应用开发完成华为云物联网平台的基本接口调用。

一、新建工程与核心类

1. 新建工程

2. 新建类(用于完成核心功能)

二、认证鉴权

1. 文档介绍

根据华为云官方提供的帮助文档,我们可以知道,在调用接口前,我们需要完成认证鉴权,我们本次教程采用的是Token认证(帮助文档参考链接:认证鉴权_设备接入 IoTDA_API参考_应用侧API参考_如何调用API_华为云)

上图的最后一行,我们可以看到,官方给出了一个调用IAM用户Token(使用密码)的帮助信息,所我们需要准备如下信息(获取IAM用户Token(使用密码)_统一身份认证服务 IAM_API参考_API_Token管理_华为云):

在浏览上图教程中,我们可以看到我们需要 IAM用户所属帐号名、IAM用户名、IAM用户密码、项目名称所属(项目ID),然后我们将准备的参数填入下述的JSON数据体,并且在完成请求解析出接口返回的响应消息头中“X-Subject-Token”值,其值就是需要获取的用户Token:

String postbody="{"+"""+"auth"+"""+": {"+"""+"identity"+"""+": {"+"""+"methods"+"""+": ["+"""+"password"+"""+"],"+"""+"password"+"""+": {"+"""+"user"+"""+":{"+"""+"domain": {"name": "********"},"name": "********","password": "********"}}},"scope": {"project": {"name": "cn-north-4"}}}}";
String strurl="https://iam.cn-north-4.myhuaweicloud.com"+"/v3/auth/tokens?nocatalog=false";

2.获取token的方法:

引入命名空间:using System.Net;

  String HUAWEINAME = "xxxxxxx";       //华为账号名String IAMINAME = "xxxxxxx";         //IAM账户名String IAMPASSWORD = "xxxxxxx";      //IAM账户密码String project_id = "xxxxxxx";       //产品IDString device_id = "xxxxxxx";        //设备IDString service_id ="xxxxxxx";        //服务IDString commands = "xxxxxxx";         //命令名称String token= "xxxxxxx";             //获取的token/*函数功能:获取token*返回值:token字符串*参数:  无* USER:IOT趣制作* */
public string GetToken()
{Console.WriteLine("正在获取token...
");string URL = "https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens ";
String data = "{" + """ + "auth" + """ + ": {" + """ + "identity" + """ + ": {" + """ + "methods" + """ + ": [" + """ + "password" + """ + "]," + """ + "password" + """ + ": {" + """ + "user" + """ + ":{" + """ + "domain": {"name": "" + HUAWEINAME + ""},"name": "" + IAMINAME + "","password": "" + IAMPASSWORD + ""}}},"scope": {"project": {"name": "cn-north-4"}}}}";Encoding encoding = Encoding.Default;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);request.Method = "post";request.ContentType = "application/json";byte[] buffer = encoding.GetBytes(data);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);HttpWebResponse response = (HttpWebResponse)request.GetResponse();Console.WriteLine(response);token = response.GetResponseHeader("X-Subject-Token");Console.WriteLine("Token:" + token);return token;
}

3.添加调用:

HuaweiIOT dev1 = new HuaweiIOT();
dev1.GetToken();

4.运行:

【补充】由于我们获取的TOKEN是有24小时有效期的,大家可以在获取token后去生成token.txt文件,当过期时再重新获取,本教程不在次延伸扩展。

四、获取设备影子解析设备属性

1. 查看文档

首先我们查看华为云官方提供的帮助文档(https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html)

我们需要的URI

可知我们的请求URL:"https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/"+ project_id + "/devices/"+ device_id + "/shadow";

响应样例:

2.添加JSON程序包

3.引入命名空间

using System.IO;
using Newtonsoft.Json.Linq;

4.具体方法:

/*函数功能:通过设备影子获取设备属性
*返回值:无
*参数: 无
* USER:IOT趣制作
* */
public void GetProByShadow()
{Console.WriteLine("正在获取设备影子...
");String jsonShadow = "";String URL = "https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/" + project_id + "/devices/" + device_id + "/shadow";URL = String.Format(URL, project_id, device_id);Console.WriteLine("URL:" + URL);HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);request.Method = "GET";request.ContentType = "application/json";if (token == "") GetToken();request.Headers.Add("X-Auth-Token", token);HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream responseStream = response.GetResponseStream();StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);jsonShadow = streamReader.ReadToEnd();streamReader.Close();responseStream.Close();Console.WriteLine("shadow:" + jsonShadow);JObject arr = JObject.Parse(jsonShadow);Console.WriteLine(arr);String shadowstr = "";if (arr.ContainsKey("shadow") == true){shadowstr = arr["shadow"][0]["reported"]["properties"].ToString();Console.WriteLine(shadowstr);}properties mydev = new properties();JObject pro = JObject.Parse(shadowstr);mydev.temp = pro["temp"].ToString();mydev.humi = pro["humi"].ToString();mydev.light = pro["light"].ToString();Console.WriteLine("temp:" + mydev.temp + ",humi:" + mydev.humi + ",light:" + mydev.light);}//设备属性类别与属性值public class properties{public string temp { get; set; }public string humi { get; set; }public string light { get; set; }}

我们在调用接口后返回的json数据具体内容各不相同,但整体格式是一样的,我上述程序对应的格式如下,大家根据自己的实际JSON数据进行解析:

添加调用并运行:

dev1.GetProByShadow();

五、设备命令的下发

老样子,我们依旧查看华为云帮助文档(下发设备命令_设备接入 IoTDA_API参考_应用侧API参考_设备命令_设备同步命令_华为云)

我们得到的信息:

同步命令下发需要设备在线

URI为:

strurl="https://iotda.cn-north-4.myhuaweicloud.com"+"/v5/iot/%s/devices/%s/commands";

消息体是:

String body="{"paras":{""+"*****"+"""+":"+"*****"+"},"service_id":"***** ","command_name":"*****"}";

我们写一下实现方法:

/*函数功能:向设备下发同步命令(开灯:led=1)
*返回值:无
*参数: 无
* USER:IOT趣制作
* */
public void SetCommand()
{Console.WriteLine("下发命令,led:1");string URL = "https://iotda.cn-north-4.myhuaweicloud.com/v5/iot/" + project_id + "/devices/" + device_id + "/commands";//开灯命令String bodyData = "{"paras":{"" + "led" + """ + ":" + "1" + "},"service_id":"Dev_data","command_name":"Control"}";Encoding encoding = Encoding.Default;HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);request.Method = "POST";request.ContentType = "application/json";if (token == "") GetToken();request.Headers.Add("X-Auth-Token", token);byte[] buffer = encoding.GetBytes(bodyData);request.ContentLength = buffer.Length;request.GetRequestStream().Write(buffer, 0, buffer.Length);
}

添加调用并运行

设备响应命令需要在设备接收到命令后及时完成上报,功能由设备完成,不在此扩展讲解,我使用MQTT模拟响应后,在设备的消息跟踪可看到下面的效果,如果设备没有及时响应,不影响命令发送,但会报告同步命令响应异常的警告, 注意:同步命令需要在设备在线时才会发送成功,具体查看接口文档的错误码介绍.

通过上述两个接口的调用,相信大家已经掌握的基本的接口使用方法,所有代码已经在上面贴出,如果需要上述工程文件,公众 HAO回复“华为云C#”即可,如果在开发过程中遇到问题,欢迎大家在vx留言提出,看到后会及时回复。

华为云物联网平台的C#应用开发(基本接口调用)相关推荐

  1. 华为云物联网平台微信小程序开发教程2.0【完整详细教程】

    一.简介   在之前曾发布过一篇文章"华为云物联网平台的微信小程序开发",在最近接到部分用户私信在使用开发过程中出现的问题,例如API访问的"401"现象等问题 ...

  2. 华为云物联网平台的微信小程序开发

    第0章 简介 上上期出了一个华为云物联网平台的Android APP应用开发教程, 根据后台的私信,包括华为云物联网IOT论坛里和公众号里,发现大家对物联网平台的移动端的开发需求还是很大的,接下来,带 ...

  3. 教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发)

    教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发) 一.简介         esp8266系列作为低功耗高性价比的嵌入式无线网络控制模块,深受对嵌入式感兴趣的 ...

  4. 使用网络调试助手通过MQTT协议接入到华为云物联网平台

    一.写在之前 首先分享一篇华为云的官方指南:在线开发MQTT协议的智慧路灯_设备接入 IoTDA_最佳实践_设备接入_华为云 这篇文章很好地讲述了如何通过MQTT.fx的设备模拟器替代真实的设备,然后 ...

  5. stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应

    (示例:stm32f103c8t6+esp01s串口AT指令模式) 流程简介: 一. MQTT透传AT固件烧录 本期教程使用的是stm32+AT指令控制esp01s接入华为云联网平台完成数据上报与命令 ...

  6. 【物联网】华为云物联网平台-基于C示例代码的快速体验

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 创建产品 04. 注册设备 05. C语言工程下载 06. 编译OpenSSL库 07. 编译paho库 08. 编译C参 ...

  7. 合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

    一.简介 1.项目介绍 之前发布的文章有esp8266的wifi模块和BC20的NB模块与华为云物联网通信为主,本期文章采用了合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较 ...

  8. ESP8266通过AT指令接入华为云物联网平台

    1. esp8266 MQTT固件烧录 在先前如果使用Arduino开发过后的esp8266可能已经无法使用AT指令,或者出厂固件不支持全部的MQTT功能,这里我们首先对esp8266进行MQTT固件 ...

  9. MQTT网关连接华为云物联网平台应用

    1.概述 ZLAN5143D是一款专门为工业环境设计的RS485设备数据采集器/物联网网关,兼具串口服务器.Modbus网关.MQTT网关.RS485转JSON等多种功能于一体.如图 1所示,可以连接 ...

最新文章

  1. 优化算法:粒子群算法,遗传算法,差分进化算法
  2. python整理数据_Python数据类型整理
  3. 堆晶结构_内蒙古苏尼特左旗地区堆晶角闪辉长岩的发现及地质意义
  4. [转]软件保护之注册算法篇
  5. 设计模式在Netty中的应用-观察者模式源码举例
  6. 使用代码执行organization unit determination逻辑
  7. MSComm写串口通信驱动步骤
  8. mysql 锁设置密码_[转载]mysql锁小结
  9. Cookie介绍与操作
  10. oracle dba_tables degree default,oracle中如何将表的并行度设定为DEFAULT?如下:
  11. 网络热门知识点,Linux内核——网络协议栈基本知识
  12. 电池SOC仿真系列-基于RNN的电池SOC估算研究
  13. liunx中文件夹不能删除怎么操作
  14. 正在与拖延症病魔抗争中
  15. [JZOJ5442]【NOIP2017提高A组冲刺11.1】荒诞([BZOJ3060]【POI2012】Tour de Byteotia)
  16. 图像目标检测算法总结(从R-CNN到YOLO v3)
  17. 复合选择器之后代选择器
  18. android 2k 屏幕 字体模糊,2k显示器怎么会字体模糊
  19. 在android安卓模拟器BlueStacks蓝手指上使用微信摇一摇
  20. 2022年R1快开门式压力容器操作题库及模拟考试

热门文章

  1. 动态规划——买卖股票的最佳时机含手续费
  2. TechSmith Snagit 教程——Snagit如何录制视频?
  3. 算法实验题 5.1 湖泊
  4. 基于SE-YOLOV4的变电站断路器分合状态识别算法
  5. FANUC系统5136报警维修
  6. python3+ffmpeg下载B站视频,附代码
  7. Android 四大组件之Service
  8. 工具 | 使用 CLion 编译调试 MySQL 8.0
  9. CAN总线35周年,回顾它的前世今生
  10. 分享自己做的一个词典小软件