IoT物联网实现M2M设备之间联动实战

    技术2022-07-10  165

    M2M(即Machine-to-Machine)是一种端对端通信技术。IoT物联网平台支持使用规则引擎的Topic转发功能,实现M2M通信,您不用担心高并发场景下的稳定通信、低延时等技术难点,也不需要购买大量服务器去承载这些请求,您只需要根据自己的业务配置好转发规则即可。

     

    本次实战,我们讲解在厨房场景中如何实现不同消费者购买的燃气灶和抽油烟机的联动,同样适用于智能家居场景中温湿度传感器和空调联动,空气质量传感器和空气净化器联动等。

      技术方案  

     

    基于IoT物联网平台中规则引擎的M2M能力和设备标签功能,我们可以组合出设备之间联动的技术方案,如下:

    消费者A购买我们的燃气灶z001和油烟机s001后,业务系统会在IoT物联网平台给燃气灶z001打上设备标签targetId:s001 。 

     

    当燃气灶z001发送特定Topic: /a***h/z001/user/change/rangehood 后,会在云端规则引擎处理后,转发给油烟机s001订阅的Topic: /a***i/s001/user/control/params ,并携带业务信息,以便抽油烟机判断是否开机和转速等级。

     

      创建产品  

     

    1.抽油烟机

    在控制台创建抽油烟机产品。

     

    添加自定义Topic,用来监听运行指令。

     

    2.燃气灶

    在控制台创建燃气灶产品。

     

    添加自定义Topic,用来发送控制油烟机运行的参数。

     

      注册设备  

     

    3.油烟机设备

    在控制台注册油烟机设备s001。

     

     

    4.燃气灶设备

    在控制台注册燃气灶设备z001,并添加标签信息: targetId:s001,来绑定抽油烟机设备s001。

     

      配置M2M规则  

     

    通过规则引擎,配置云产品流转规则,如下:

     

    处理数据

    通过SQL规则,我们抽取出 rangehoodId,status,windPower 共3个业务参数。

    SELECT  attribute('targetId') as rangehoodId, status,  windPower  FROM  "/a****h/+/user/change/rangehood"

     

    转发数据

    转发数据过程中,我们用 ${rangehoodId}  来动态替换目标设备。

     

      设备开发  

     

    我们以Nodejs脚本来模拟设备行为。

     

    5.油烟机设备

    油烟机设备s001主要通过subscribe特定Topic来监听云端指令。

    const mqtt = require('aliyun-iot-mqtt'); var options = {     productKey: "替换",     deviceName: "替换",     deviceSecret: "替换",     regionId: "cn-shanghai" }; //建立连接 const client = mqtt.getAliyunIotMqttClient(options); client.subscribe(`/${options.productKey}/${options.deviceName}/user/control/params`) client.on('message', function(topic, message) {     console.log("sub topic => " + topic)     console.log("message => " + message) })

     

    6.燃气灶设备

    燃气灶设备z001根据自身状态,上报业务数据到云端。

    const mqtt = require('aliyun-iot-mqtt'); var options = {     productKey: "替换",     deviceName: "替换",     deviceSecret: "替换",     regionId: "cn-shanghai" }; var pubTopic = `/${options.productKey}/${options.deviceName}/user/change/rangehood`; //建立连接 const client = mqtt.getAliyunIotMqttClient(options); //上报数据 client.publish(pubTopic, getPostData(), { qos: 0 }); function getPostData() {     const payloadJson = {         status: "on", //on,off         windPower: "high" //low,middle,high     }     console.log("Pub Topic => " + pubTopic)     console.log("Payload => " + JSON.stringify(payloadJson))     return JSON.stringify(payloadJson); }

     

      联机运行  

     

    我们先启动油烟机s001模拟程序,再启动燃气灶z001模拟程序。

    7.燃气灶设备运行日志

    我们看到燃气灶z001上报运行数据到IoT物联网平台,通过预先配置M2M规则,流转控制指令给油烟机设备s001。

     

    8.油烟机设备运行日志

    我们看到油烟机s001收到了IoT物联网平台流转过来的设备运行指令。

    Processed: 0.010, SQL: 9