文档目录:

  • 说明
  • 1. 连接阿里云物联网
  • 2. IoT 客户端
  • 3. 订阅Topic与响应Topic
  • 4. 设备上报属性
  • 4.1 上报位置信息
  • 5. 设置设备属性
  • 6. 设备事件上报
  • 7. 服务调用
  • 8. 委托事件
  • 9. 自定义委托事件方法

预先在设备编写好相应的代码,这些代码能够处理一个或多个任务,即为 服务 ,一个服务包含一个或多个任务。

CZGL.AliIoTClient 中,服务器下发服务调用指令不需要设置,默认服务器可以直接下发命令而不需要经过客户端同意。
虽然客户端能够直接接收服务器的服务调用指令,但是必须要设置相应的方法绑定到委托中,方能处理指令。

下面会举例说明如何使用服务调用:

  1. 设备定义一个服务,这个服务是定时爆炸。
  2. 当收到服务器下发的爆炸命令和定时爆炸时间,就会开始任务
  3. 爆炸后,返回爆炸结果
  4. 服务器下发命令给设备,让它爆炸
  5. 服务器不管设备怎么爆炸,也不等你爆炸
  6. 设备爆炸完了,去告诉服务器设备以及完成爆炸

1)设置服务调用

打开阿里云物联网控制台,点击自定义功能,按以下定义。

服务定义:

输入参数:

输出参数:


2)定义服务说明

定义的服务,有输入参数、输出参数,是指服务器向设备下发命令调用服务,这个服务需要的输入参数、调用这个服务后返回的参数。
这个是相对设备来说的,服务器调用设备的服务,给设备传入数据(输入参数),然后设备处理完毕,返回结果(输出参数)。

里面有异步、同步方法,使用异步方法,服务器不需要等待设备响应结果,可以直接返回。
同步方法,服务器必须等待响应结果,一直没有获得结果则会超时报错。

使用的基础测试代码如下(请替换 DeviceOptions 的值):

        static AliIoTClientJson client;static void Main(string[] args){// 创建客户端client = new AliIoTClientJson(new DeviceOptions{ProductKey = "a1A6VVt72pD",DeviceName = "json",DeviceSecret = "7QrjTptQYCdepjbQvSoqkuygic2051zM",RegionId = "cn-shanghai"});client.OpenPropertyDownPost();// 设置要订阅的Topic、运行接收内容的Topicstring[] topics = new string[] { client.CombineHeadTopic("get") };// 使用默认事件client.UseDefaultEventHandler();// 连接服务器client.ConnectIoT(topics, null, 60);Console.ReadKey();}

运行控制台程序,打开阿里云物联网控制台,在线调试,找到服务,选择 机器自动爆炸
在输入框输入以下内容:

{"timee":10
}

点击发送,再查看控制台输出。

{"method":"thing.service.bom","id":"670534570","params":{"timee":10},"version":"1.0.0"}

根据定义和要求,实际上收到服务调用命令后,需要进行处理并且返回响应结果。


3)编写接收模型和响应模型

收到的消息是 Alink json ,你可以通过 CZGL.AliIoTClient 转换成相应的对象。
同样,也需要将相应的对象转成 Alink json 上传到服务器中,作为响应。

编写接收模型: 里面只有一个很简单的参数 timee ,这个就是在控制台定义的 传入参数。

        public class Bom{public string method { get { return "thing.service.bom"; } set { } }public string id { get; set; }public string version { get { return "1.0.0"; } set { } }public Params @params { get; set; }public class Params{public int timee { get; set; }}public Bom(){@params = new Params();}}

编写响应模型:

    public class ReBom{public string id { get; set; }public int code { get; set; }public Data data { get; set; }public class Data{public int isbom { get; set; }}public ReBom(){data = new Data();}}

4)定义委托方法

CZGL.AliIoTClient 中,有个 PubServiceEventHandler 委托,当收到服务器的服务调用命令时,这个委托就会触发响应的事件。

所以,我们编写一个处理命令的方法,另外自定义一个委托方法。

服务调用方法:

        /// <summary>/// 服务调用方法/// </summary>/// <param name="timee"></param>/// <returns></returns>public static bool BomServer(int timee){Console.WriteLine($"我将在 {timee} 秒后爆炸");/** 其它代码 **/// 返回处理结果,已经爆炸return true;}

编写委托方法: 当收到服务调用命令时,应当如何处理。

        /// <summary>/// 收到服务调用/// </summary>/// <param name="sender"></param>/// <param name="e"></param>public static void Service_Bom_EventHandler(object sender, MqttMsgPublishEventArgs e){// handle message receivedstring topic = e.Topic;string message = Encoding.ASCII.GetString(e.Message);if (topic.Contains("bom")){// 将收到的服务调用数据转为对象var model = client.Thing_Service_JsonToObject<Bom>(message);// 获取里面的timee参数,将这个参数传入给方法进行处理var re = BomServer(model.@params.timee);// 设置要返回的信息var reModel = new ReBom(){code = 200,id = model.id};reModel.data.isbom = 1;// 对服务器做出响应,返回处理结果client.Thing_Service_Identifier_Reply<ReBom>(reModel, "bom", false);}}

如果你有多个服务,那么在上面给出的示例方法 Service_Bom_EventHandler 中,加个判断即可。 总之,这些是自定义的,灵活性很高,CZGL.AliIoTClient 负责将你的数据处理以及进行上传下达,但是如何处理指令,需要你编写相应的处理方法。


5)绑定到委托中

在连接服务器前,绑定到委托中

            client.PubServiceEventHandler += Service_Bom_EventHandler;// 连接服务器client.ConnectIoT(topics, null, 60);

就这么一句代码而已。

当然, CZGL.AliIoTClient 默认有一些方法,在收到服务器消息时触发,这些不会影响到你的委托方法。
如果你不需要,去除即可。

            // 使用默认事件// client.UseDefaultEventHandler();client.PubServiceEventHandler += Service_Bom_EventHandler;// 连接服务器client.ConnectIoT(topics, null, 60);

至此,完整的代码如下:

    class Program{static AliIoTClientJson client;static void Main(string[] args){// 创建客户端client = new AliIoTClientJson(new DeviceOptions{ProductKey = "a1A6VVt72pD",DeviceName = "json",DeviceSecret = "7QrjTptQYCdepjbQvSoqkuygic2051zM",RegionId = "cn-shanghai"});client.OpenPropertyDownPost();// 设置要订阅的Topic、运行接收内容的Topicstring[] topics = new string[] { client.CombineHeadTopic("get") };// 使用默认事件client.UseDefaultEventHandler();client.PubServiceEventHandler += Service_Bom_EventHandler;// 连接服务器client.ConnectIoT(topics, null, 60);Console.ReadKey();}/// <summary>/// 收到服务调用/// </summary>/// <param name="sender"></param>/// <param name="e"></param>public static void Service_Bom_EventHandler(object sender, MqttMsgPublishEventArgs e){// handle message receivedstring topic = e.Topic;string message = Encoding.ASCII.GetString(e.Message);if (topic.Contains("bom")){// 将收到的服务调用数据转为对象var model = client.Thing_Service_JsonToObject<Bom>(message);// 获取里面的timee参数,将这个参数传入给方法进行处理var re = BomServer(model.@params.timee);// 设置要返回的信息var reModel = new ReBom(){code = 200,id = model.id};reModel.data.isbom = 1;// 对服务器做出响应,返回处理结果client.Thing_Service_Identifier_Reply<ReBom>(reModel, "bom", false);}}public class Bom{public string method { get { return "thing.service.bom"; } set { } }public string id { get; set; }public string version { get { return "1.0.0"; } set { } }public Params @params { get; set; }public class Params{public int timee { get; set; }}public Bom(){@params = new Params();}}public class ReBom{public string id { get; set; }public int code { get; set; }public Data data { get; set; }public class Data{public int isbom { get; set; }}public ReBom(){data = new Data();}}/// <summary>/// 服务调用方法/// </summary>/// <param name="timee"></param>/// <returns></returns>public static bool BomServer(int timee){Console.WriteLine($"我将在 {timee} 秒后爆炸");/** 其它代码 **/// 返回处理结果,已经爆炸return true;}}

5)服务器下发服务调用指令

运行上面设置的程序,打开阿里云物联网控制台,进入 在线调试。
选择演示的产品、设备,选择上面定义的机器自动爆炸服务。

在文本框输入以下内容

{"timee":10
}

点击 发送指令 ,然后点一下 刷新。 可以看到右侧出现了 设备上报数据、云端下发数据

再到设备中,在导航栏点击 服务调用,即可看到调用的服务、传入参数、输出参数等信息。


6)后续说明

上传响应时,响应的 id 必须与收到的指令 id 一致。

转载于:https://www.cnblogs.com/whuanle/p/10994708.html

阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:7. 服务调用相关推荐

  1. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:4. 设备上报属性

    设备自身 CPU 温度.电源输入电压.内存使用率等,以及接入到设备的传感器如温度传感器.光敏传感器等,这些硬件的数据输出即是 属性 . 设备将这些硬件的数据上传到阿里云物联网平台,实时显示这些设备的状 ...

  2. 【PBL项目实战】户外智慧农场项目实战系列——1.阿里云物联网平台的开通与云端可视化应用的新建

    岭师人工智能素养教育共同体PBL项目教程系列之1:户外智慧农场项目实战系列 原文链接  https://mp.weixin.qq.com/s/avKWJHNvnPeFsdEXUBByjw 本系列以户外 ...

  3. 阿里云物联网配置实例_云音箱-MQTT服务器-业务服务器三者数据流转

    第一步:创建MQTT服务器的产品和添加设备 登录阿里云,选择物联网平台 选择公共实例 选择设备管理-选择产品-创建产品 我们这里填入产品名称和自定义品类 然后前往定义物模型-编辑草稿 然后添加自定义功 ...

  4. MQTT.fx客户端MQTT接入阿里云物联网平台,登录、订阅、发布消息

    目录 1. 准备 2. MQTT.fx 设置登录名.密码 3. MQTT.fx 接入阿里云,订阅Topic 4. 阿里云下发数据给 MQTT.fx 5. MQTT.fx 发布消息给服务器 相关链接:M ...

  5. 【阿里云物联网平台-1】使用MQTTfx模拟客户端,往阿里云物联网平台发布数据

    目录 MQTT协议简单介绍(每句都是干货) 手把手流程 服务器:阿里云物联网平台 客户端:MQTTfx 后记 MQTT协议简单介绍(每句都是干货) MQTT是应用层协议,基于TCP/IP. 是一种发布 ...

  6. MQTT客户端远程控制WIFI设备(阿里云物联网平台)

    MQTT客户端远程控制WIFI设备(阿里云物联网平台) MQTT客户端远程控制WIFI设备(阿里云物联网平台) 准备工作 配置Topic 调试 MQTT客户端远程控制WIFI设备(阿里云物联网平台) ...

  7. 利用rfcomm实现树莓派与手机通信_工业物联网 | 怎么用NodeRed实现树莓派与阿里云物联网平台通信?虹科告诉你!...

    想获取更多IIOT干货 请点击蓝字,关注我们 虹科工业树莓派 高性能 多接口 宽温--适应恶劣环境 ★★★★★ Node-RED是构建物联网(IoT)应用程序的强大工具,它使用可视化的编程方法,允许开 ...

  8. mqtt协议详解_阿里云物联网平台使用心得(七)MQTT协议14个报文总览

    大家好,物联网爱好小组成员超子,又和大家见面了,超子我能力有限,水平不高,有什么错误的地方,欢迎板砖.超子将参考<MQTT-3.1.1标准协议中文版>PDF手册,详解每个报文的格式,以及如 ...

  9. 手机秒变IoT设备?——巧妙利用阿里云物联网平台

    什么?嵌入五行代码可以实现用户定位,用户在线数量统计,还能和云端消息交互! 没错得益于阿里云物联网套件创建设备免费,消息收费也只有百万消息三块六(先使用后付费,不满不要钱),尤其对于学生党来说,基本是 ...

最新文章

  1. java 内存测试_请你说一下java jvm的内存机制
  2. EMNLP'21 | 基于相似样本检索的在线更新机器翻译系统
  3. mysql常用的函数
  4. 未来科学家数学与计算机奖,未来科学大奖“对话未来科学家”
  5. apache限制php上传大小修改
  6. spring中的aop术语和细节
  7. 网络合作伙伴通信协议指南:NETWORK ASSOCIATES GUIDE TO COMMUNICATIONS PROTOCOLS
  8. 常用User-Agent大全 -《狗嗨默示录》-
  9. IDEA插件jrebel的配置使用
  10. CentOS7 设置笔记本触摸板
  11. 【h5py 报错】ImportError: DLL load failed while importing defs: 找不到指定的程序。
  12. “三次握手,四次挥手”你真的懂吗? 1
  13. Java 基础系列(七) --- 透彻学习Java的接口
  14. ArduPilot 开发手册学习:写在前面
  15. java模拟时钟课程设计_java课程设计-时钟图形模拟
  16. 未来交通已经“上线” 高德地图智慧交通合作已攻150城,半年大增约五成
  17. 支持大S,你一定要幸福!
  18. java esc_java里控制台按esc键退出,怎么实现
  19. opencv 反色处理
  20. go语言刷题:77. 组合

热门文章

  1. 简单两步,spring aop上手即用即会
  2. 用BRAT进行中文情感分析语料标注
  3. “Attention is All You Need 翻译
  4. pytorch 与 numpy 的数组广播机制
  5. python 替换字符串的方法replace()、正则re.sub()
  6. LeetCode简单题之将每个元素替换为右侧最大元素
  7. 合肥工业大学—SQL Server数据库实验二:数据库架构的创建与使用
  8. 端到端TVM编译器(上)
  9. TinyML-TVM如何驯服TinyML
  10. NNVM AI框架编译器