概述
iot领域场景联动,特别是智能家居领域有着很重要的应用价值,场景联动是已经成为iot领域的核心应用之一,设备相互连接并且相互作用,催促着物联网领域不断向前发展,参考[2];
首先了解一下基本概念,场景表示一种特定的状态,比如灯打开状态或者灯关闭状态、门磁处于打开状态、报警器处于报警状态, 动作表示一种行为,从而使设备处于一种场景中,打开灯(动作)使灯处于打开状态(场景),结果上来说动作和场景相同,在IOT业务中,动作即是场景;自动化表示从一种场景自动地转变成另外一种场景,用户也可以手动点击触发场景生成(手点的就不叫自动化了);
自动化从场景A自动地转变成场景B,那么场景A就称为条件,场景B称为动作,条件有几种来源,第一种是设备上报的数据(也是来源最大的一部分); 第二种是环境数据,比如温度、湿度、天气、PM2.5、空气质量、日落日出,用户选择气象条件时,可以选择当前城市;第三种是场景本身,场景B作为动作,同样也可以作为条件; 第四种是定时任务,定时或者周期性触发; 同样,动作也有大概几类,第一类是设备动作,打开灯或者关闭灯; 第二类是消息,发送短信,语音,push, 邮件;第三类是场景; 第四类是延时,延时多长时间触发动作;
总体结构 ![](https://i-blog.csdnimg.cn/blog_migrate/81a255fe09d335b7213c5e920b40da19.png)
如图普通设备通过mqtt把设备时间发送到场景系统,环境数据一般通过消息中间件发送到场景系统; 网关及子设备要分情况对待,如果网关和子设备内部触发的动作(也即zigbee场景),则不需要经过场景系统,否则需要经过场景系统处理;
场景自动化处理过程
处理过程主要有几个关键步骤,首先是条件匹配,判断执行条件是否满足条件;其次,再判断执行策略,动作只能触发一次,可连续触发,触发有限次数等;最后执行相应动作;
场景条件
条件A,B,C 会存在逻辑与、逻辑或的关系,这两种关系跟java中&& || 关系运算符功能类似; 当三个条件是逻辑与的关系时,A触发,则必须B,C都满足才会继续往下走; 当三个条件是逻辑或的关系时,任何一个条件的触发都会继续往下走;
条件为定时任务,则需要使用中间件作为触发源头,触发条件执行;
条件表达式计算可以采用groovy表达式;
执行策略
执行策略主要用来控制动作的执行次数,根据业务场景来做不同类型的限制,针对三种场景,对比分析每种策略的适用范围:
策略名称 | 适用范围 |
单次执行 | 避免冗余触发 |
有限次执行 | 针对家庭有定制需求的用户,或者收费项目 |
重复执行 | 免费消息,很重要的报警 |
单次执行的适用场景,比如开关打开触发动作,开关打开之后肯定有关闭,这样开关才能再次打开,一个开关不可能打开又打开,单次执行适用这种情况; 有限次执行和重复执行相对比较好理解,有限制次数和不限制次数;
场景动作
场景条件,执行策略都满足后则开始执行动作,场景动作必须按顺序执行,顺序不同代表的含义也不一样; 场景动作本身也可以作为触发条件,那么在这种情况下要注意循环调用; A-->B-->C, C-->A 这样导致A,C不断被触发;
zigbee场景
zigbee网关可以存储与在网关内部相关的场景自动化,这些场景自动化都是可重复执行,在网络拓扑结构发生变更时,网关规则要及时同步更新;zigbee场景自动化利用网关和子设备交互的特性,避免与云服务端交互,不仅减少了网络带宽,而且效率会有一定程度的提高;
zigbee网关及子设备在处理场景联动方面会有很多优势,场景主要分两种,第一种zigbee子设备触发时,子设备本身的设备事件会通知zigbee网关,zigbee网关收到子设备消息后上报到云服务器; 还有一种场景联动(zigbee场景,也称本地化场景联动),zigbee子设备触发事件,子设备事件通知到网关之后网关本身根据规则直接动作触发zigbee网关或者其它子设备;
消息队列
设备上报的事件首先发送到消息队列,消息队列发送到场景系统;消息队列保证消息稳定,可靠, 消息的先后顺序;
定时任务
场景条件中有一类是定时触发,定时条件需要使用到定时中间件,提前把时间存到中间件中,然后到指定时间触发条件;
参考:
1. https://baijiahao.baidu.com/s?id=1639194454562027661&wfr=spider&for=pc