Page 73 - 《软件学报》2021年第12期
P. 73

王博  等:SSRules:让智能家居自动化规则更易于编写和检查                                                 3737














                        Fig.2    The state machines for each capability of the fan and coffee machine
                                       图 2   电扇和咖啡机的能力状态机

         3    SSRules 编程范式及其到 HA 规则的翻译

             本节首先分析以状态触发器-状态动作(SS)风格设计 SSRules 编程范式的可行性;然后给出 SSRules 提供给
         终端用户使用的 SS 规则范式的定义,分析它在应对表 2 所列的 10 种 TAP 缺陷的能力;接着分析转译器面对的
         主要问题,并引入 EE 中间范式作为 SS 规则到 HA 规则转换的桥梁;最后介绍 SS 到 EE 转译的关键算法.
         3.1   SS范式的引入

             由第 1 节可知:终端用户不太能区分事件和状态,并且用户使用 State-State 时序范式会比使用含 Event 触发
         器的范式更易写对规则.为此,我们以状态为基础,通过规则分组、自动优先级等改进措施(详见第 3.2 节)来提供
         “State-trigger State-action”编程范式,简称 SS 范式.
             •   SS 范式的易写易改性
             SS 范式可以较为简洁地表达用户日常常见需求;并且和 Event-State→Event 相比,SS 范式写出的规则容易
         随需求的变更和细化进行修改.为了更清晰地表述这两种范式的区别,表 5 给出了分别用两种范式描述夜灯开
         关的规则,其中,模式是 HA 提供的虚拟传感器,有回家模式和离家模式两种取值.在 SS 范式下,作用于夜灯的 3
         条规则均作为子句按序置于“ FOR  夜灯”语句中,每个子句形如“EXPECT A  [WHILE B]”,表示当 B 成立(或永
         真)时,期望 A 中各能力为指定的值;对于同一实体的多个 EXPECT,SSRules 按从前往后以第一个 WHILE 条件
         成立的 EXPECT 子句所指定的期望状态为准.然而,当用 Event-State→Event 表示时,为了正确表达所列出的几
         种情况的状态保持和它们之间的转移关系,需要写出 9 条规则来细分情况.假设用户用 SS 范式先写了后 2 条规
         则,运转一段时间后他又添加第 1 条保证离家模式下夜灯总是关闭的需求,在 SS 范式下,这种添加是简单的;但
         是若使用 Event-State→Event 达到相同目的,则需要在原先第 3 条~第 6 条、第 8 条、第 9 条这 6 条规则基础之
         上新增 3 条规则,并修改原先的规则细节(修改部分用粗体字表示),这样的编写和修改非常琐碎、易错.
                          Table 5    Example of comparing SS rules and Event-State→Event rules
                                表 5   SS 范式与 Event-State→Event 范式的比较举例
                   SS 范式                                Event-State→Event 范式
            FOR  夜灯               1. IF  进入离家模式 WHILE  灯开启 THEN  关闭夜灯
            1. EXPECT(开关,关) WHILE  2. IF  进入回家模式 WHILE 人体传感器激活 AND  夜间 THEN  打开夜灯
              模式.状态==离家模式         3. IF  变为白天 WHILE  灯开启 THEN  关闭夜灯
            2. EXPECT(开关,开) WHILE   4. IF  变为夜间 WHILE 人体传感器激活 THEN  打开夜灯
              人体传感器.状态==激活        5. IF  人体传感器信号变为激活 WHILE  晚上 AND  回家模式 THEN  打开夜灯
              AND  时钟.状态==夜间      6. IF  人体传感器变为未激活 WHILE  晚上 AND  回家模式 THEN  关闭夜灯
            3. EXPECT(开关,关)       7. IF  夜灯变为打开 WHILE  离家模式 THEN  关闭夜灯
                                  8. IF  夜灯变为关闭 WHILE  回家模式 AND 人体传感器激活 AND  夜间 THEN  打开夜灯
                                  9. IF 夜灯变为打开 WHILE  回家模式 AND 人体传感器激活 OR  白天 THEN  关闭夜灯

             •   SS 范式的局限
             SS 范式能表达大多数智能家居的场景需求,但是无法表达无状态或者难以抽象出状态的事件和动作(如无
   68   69   70   71   72   73   74   75   76   77   78