开发者社区> 问答> 正文

小白学习IOT 第八课 规则引擎

介绍完设备和服务器之间的上报和下发通信,这一节课,我们介绍一下设备之间的通信,这要用到IOT套件中的规则引擎了。说到规则引擎,有必要简单介绍一下便于后面容易理解和操作,规则引擎顾名思义,是一套定义的规则对输入进行分析处理后再转到输出,规则这里定义的是使用SQL语句对输入进行过滤,而引擎的含义,笔者理解的是将SQL语句的分析结果转发到输出,目前IOT套件的规则引擎可以转发到五个地方:设备的另一个主题,存储表格,DATAHUB,RDS和MNS。我们这里先做一个稍微简单的操作示例,便于读者理解,我们打算要做的是把一个设备发出来的主题转到另一个设备的接收主题中,所以规则引擎的输入SQL语句基本没有过滤,而规则引擎的输出则用到第一种,转发到另一个设备的主题。好了,let's go,让我们动手开始操作吧:
首先在网页控制台创建两个设备,然后在记事本上记下设备的名称和SECRET,后面要用到,类似下面格式:
DEVICE1
MyIeFYt7HYNTyxdwiydjtF9N1LUMovqa


DEVICE2
it78l2JJU3e3kCtn2fojE18ju8ZmmE7T


然后就是在规则引擎中添加规则了,在IOT套件的规则引擎一栏中,点击右上方的创建规则按钮,规则名称输入:设备间转发,规则描述输入:设备1的TOPIC:update转发到设备2的TOPIC:get。创建完规则,点击右方的管理,进入规则详细信息的配置,处理数据的SQL语句中,字段填入*,表示我们选择所有字段,Topic一项,我们输入DEVICE1/update,表示接收设备一的UPDATE主题。条件一项为空,表示对所有输入分析。在转发数据一块,点击添加方法,选择方法一项选择发布到另一个TOPIC,TOPIC后面一项,输入DEVICE2/get,表示转发到设备二的GET主题。配置完规则引擎,退到上一页,点击右边的启动,这时可以看到我们新加的规则引擎状态已经变为运行中了。






最后就是修改我们模拟设备端的代码了。如前几课一样,显示下载设备端的SDK,然后解压和编译,命令行如下:
wget http://aliyun-iot.oss-cn-hangzhou.aliyuncs.com/aliyun-iot-device-sdk-c-2017-05-11.zip


unzip aliyun-iot-device-sdk-c-2017-05-11.zip
cd aliyun-iot-device-sdk-c-2017-05-11/
make
这里,我们要用到两个模拟设备,所以把SDK例子中的demo拷贝为device1,device2,然后删除原有的demo文件,同时要把makefile也分别拷贝为makefile1和makefile2,使得我们的模拟设备1和2可以编译:
cd examples/linux/mqtt/
cp demo.c device1.c
cp makefile makefile1
cp demo.c device2.c
cp makefile makefile2
rm demo demo.c makefile
先修改设备1,填入我们设备的相关参数,然后修改消息为‘这是来自设备1的一条消息’
vi device1.c
#define PRODUCT_KEY    "产品KEY"
#define PRODUCT_SECRET "产品SECRET"
#define DEVICE_NAME    "设备1的名称"
#define DEVICE_SECRET  "设备1S的SECRET"


sprintf(buf, "{\"message\":\"Hello World\"}");这一行改为:
sprintf(buf, "{\"消息\":\"这是来自设备1的一条消息\"}");


vi makefile1
设备一的makefile1文件相关demo的名称改为device1,编译设备一的代码:
make -f makefile1
修改设备2的代码
vi device2.c
填入设备2相关参数,修改接收消息为‘设备2接收到的消息:’
#define PRODUCT_KEY    "产品KEY"
#define PRODUCT_SECRET "产品SECRET"
#define DEVICE_NAME    "设备1的名称"
#define DEVICE_SECRET  "设备1S的SECRET"
printf("Message : %s\n", msg);这一行改为:
printf("设备2接收到的消息 : %s\n", msg);
然后修改设备二的makefile2文件,把demo相关的名称改为device2
vi makefile2
然后编译设备2代码
make -f makefile2
最后,将设备二运行在后台,用于接收消息,设备一后运行用于发送消息,我们编译一个shell脚本来实现,内容如下两行:
vi r.sh
./device2&
./device1
最后修改脚本的权限,然后运行脚本,查看运行结果:
chmod 777 r.sh
./r.sh








附件:




TIMELAPSE :
http://xunyun17.xyz/iottimelapse/lesson8.mp4









展开
收起
洵云 2017-08-12 12:38:29 6809 0
4 条回答
写回答
取消 提交回答
  • Re小白学习IOT 第八课 规则引擎
    处理数据处不支持  ${deviceName}/update  这类写法 怎么改?

    -------------------------

    回 5楼魔咒626的帖子
    不能多对多吗?  比如一个产品下有多个设备之间,只要其中一个设备发布一个消息,其他设备都能收到,  这类情况能否一条规则就解决?

    -------------------------

    回 7楼魔咒626的帖子
    好的,谢谢了,我去试试
    2018-03-05 17:40:48
    赞同 展开评论 打赏
  • Re小白学习IOT 第八课 规则引擎
    文档中当时说的可以支持RDS,但是现在貌似只支持杭州节点了,我需要把数据处理然后存到mysql的数据库中去,需要如何操作。
    2017-11-02 13:46:03
    赞同 展开评论 打赏
  • 目前转发只有四种:TOPIC,TABLE STORE,DATA HUB和MNS,你说的RDS应该是表格存储吧

    -------------------------

    ${deviceName}这个换成实际的设备名城啊

    -------------------------

    这种需求感觉不太符合 iot的结构,因为终端设备往往是执行部件,不需要知道其他设备的状态,如果要做可以在服务端加入接收topic和转发topic的逻辑。

    2017-08-15 08:39:06
    赞同 展开评论 打赏
  • Re小白学习IOT 第八课 规则引擎
    最近在看iot套件的文档,发现转发rds这里不能选不知道为啥,下拉列表里面压根没有这个选项
    2017-08-14 14:55:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ST + AliOS > Smart IoT ! 立即下载
IOT赋能旅行场景的实践与展望 立即下载
阿里云IoT物联网市场暨合作伙伴计划发布 立即下载