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

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


         Key words:    smart home; trigger-action programming; end-user programming; runtime system; bug detection

             随着物联网、人工智能与 5G 等创新技术驱动的万物互联时代的到来,智能家居作为物联网的重要应用场
         景之一,正快速进入千家万户.智能家居令家庭中的各种设备互联互通,使用户实现设备的自动控制、远程控制
                                                                                 [1]
         和可编程控制,甚至可以根据历史经验主动进行自动化服务.根据 MarketWatch 发布的报告 ,2016 年,全球智能
         家居市值 556.5 亿美元,预计 2025 年将达到 1 742.4 亿美元;同时,中国的智能家居市场也在快速发展,据艾瑞咨
                    [2]
         询发布的报告 ,2017 年,中国智能家居市场规模为 3 254.7 亿元,预计 2020 年将达到 5 819.3 亿元.
             为管理种类和规模不断增加的智能设备,国内外主要领导厂商纷纷推出智能家居平台,如三星的
         SmartThings、Amazon 的 Alexa、Google 的 Home、小米的米家、华为 HiLink、云端规则定制平台 IFTTT(“IF
                       [3]
         This Then That”) 等,但它们几乎不开源并且仅支持相关品牌的设备,限制了用户所能管控的设备类型及范围;
                                                       [4]
         在开源的智能家居平台中,基于 Python3 的 HomeAssistant 相对成熟,支持多种操作系统/平台,集成了 IFTTT、
         GoogleAssistant、MQTT 等产品/功能.这些智能家居平台将要管控的设备抽象化,通过建立通信标准以及 API
                                                                              [5]
         互联等方式连接设备和 app,采用“触发-动作编程”(trigger-action programming,简称 TAP) 支持用户定制规则以
         指定系统行为.但我们通过多次调研发现:现有 TAP 虽足以满足终端用户表达简单的自动化任务,但灵活性不
         足,难以支持更复杂的用例         [5−8] .
             TAP 规则(如 IFTTT)典型地将单个触发器(trigger)与单个动作(action)关联起来,例如“如果开始下雨,则关
         窗”.然而,许多常见行为需要 TAP 提供更强的表达能力,如对空调等复杂设备的设定、对门锁窗户等安全攸关
         设备的可靠设定、对夜灯/咖啡机等设备的工作持续时间设定等.为支持用户的日常需求,不同的智能家居平台
                                                                                    [9]
                                               [5]
         提供不同的支持,例如引入 and 连接多个触发器 或者连接多个触发器和多个动作(如 Stringify )、用更一般的
         and/or 组合多个触发器或多个动作(如 HomeAssistant)、增加对触发器的条件过滤(如 Microsoft Flow             [10] ,Zapier [11]
         和 HomeAssistant)、增加“状态保持时长”的表达能力(如 SmartRules              [12] )、支持自定义的事件/服务(如
         HomeAssistant).各种 TAP 扩展丰富了可定制性,但是也存在语义不清晰、编写复杂等缺陷,不便于用户使用.
             随着设备数量的增加,其交互也随之增多,TAP 编程出错的可能性也会增加.针对这类问题,一些研究如
         BuildingRules [13] ,IRuler [14] 等提供对某些 TAP 编程缺陷的检测;AutoTap [15] 能由线性时序逻辑表达的设备性质合
         成某些 TAP 规则,从而避免用户直接编写 TAP 规则;AutoTap 和 Menshen                [16] 还提供有限的错误修复功能.
         Brackenbury 等人 [17] 首次提出和规范可用于 TAP 规则触发器的 3 种时序范式 Event-Event,State-State 和 Event-
         State,并总结了 TAP 可能存在的 10 种编程缺陷.
             针对智能家居系统面临的挑战,本文研究易写易改、支持多触发器-多动作、支持状态保持描述等能力的
         TAP 规则的表示,然后构建支持这种规则表示的智能家居自动化框架.在 TAP 规则的表示方面,触发器和动作均
         可以分为(纯)状态型和事件型.本文首先系统分析和总结了各种 TAP 编程范式以及它们引起的缺陷种类、原因
         和检测/修复现状,指出了改进 TAP 的可能渠道;然后,针对用户不易分清事件和状态、不易写全规则所要考虑的
         情况组合以及“Event-trigger Event-action”(EE)风格的规则冗长、更改琐碎等特征,本文提出以“State-trigger
         State-action”(SS)为基础构建面向终端用户易写易改的、具有丰富表达能力的具体 SS 规则范式.在自动化框架
         构建方面,鉴于 HomeAssistant(简称 HA)相对成熟和开源,支持多种平台和多种设备及服务集成方式,提供以
         Event 为核心的宽泛 TAP 配置,本文以它为基础构建支持 SS 规则范式的智能家居自动化框架 SSRules.针对
         Brackenbury 等人 [17] 指出的 10 种 TAP 缺陷,采用 SS 规则范式能天然排除时间窗错误和翻转触发器这 2 种缺陷,
         完全避免优先级冲突;结合 SSRules 的实现策略,能部分解决或消除安全默认偏差、非瞬时动作、重复触发这 3
         种缺陷,并附带改善缺少反向动作的缺陷;对于无限循环和不确定时序这两种缺陷,可以通过模型检查等方法在
         规则转译成 HA 之前避免;SSRules 尚不能解决矛盾的动作这种缺陷.本文的主要贡献如下:
             (1)  系统分析和总结了 TAP 编程范式及其编程缺陷,指出了改进 TAP 的几种可能渠道,为我国智能家居领
         域从业者和软件研发人员全面了解 TAP 编程、缺陷及改进提供了参考资料;
             (2)  提出以“State-trigger State-action”为基础构建易写易改、有丰富表达力的 TAP 编程范式.SS 规则范式
   60   61   62   63   64   65   66   67   68   69   70