不知不觉中,小米中枢网关已经上市两年,而米家自动化极客版也已经度过了周岁生日。它们的推出,让资深米粉们拍案叫好——毕竟,他们又解锁了小米智能家居更有意思的玩法! 时隔一年,小米又为自动化极客版带来了一个超级重磅更新,也就是众多玩家和用户期待已久的“变量”功能。想要用过「变量」实现更多功能,你可要好好看看「什么值得买App」首席生活家「袋鼠叔叔」的保姆级攻略了…什么是「变量」?可能很多小伙伴听到“变量”这个词时,会感到既熟悉又陌生。熟悉是因为在初中一路到大学数学中,总是少不了它的身影。而陌生则是因为在踏上工作岗位之后,除了码农之外,就很少会接触到它了,可能早已忘得一干二净。 所以,让我们用最快的速度,再重新认识一下“变量”。不过想了解变量,就要和函数一起来说。函数是数学中,一种描述映射关系的概念,通常用f(x)来表示。其中f代表函数名称,x表示输入值(也就是变量),f(x)表示输出值。我们可以将其理解为一种对应法则。当法则一定时,我们输入不同的变量x,就会获得不同的结果f(x)。当我们设定x的值为1时,这个函数的结果f(x)就是11(1+10=11)。如果设定x为99,则函数结果为100。我们让x等于几,其实就是为变量x赋值,是不是超级简单?当然,函数也可以特别复杂。不过我们在米家自动化极客版中将用到的函数和变量,都是最最简单的,每个人都能轻松理解,完全无需担心。米家自动化极客版变量功能基础
在开始之前,请确保中枢网关或BE6500Pro的固件版本已升级至最新。正常通过浏览器进入自动化极客版页面后,可以看到和之前版本相比,最显著的变化就是左侧增加了一个“(x)全局变量列表”。点击后,右侧就出现了创建变量的图标(两个按键的功能是一样的)。点击创建变量按钮后,就可以创建一个全局变量,类型可以是文本,也可以是数字(最高支持17位值)。需要特别注意,这里创建的变量为全局变量,也就是可以被所有自动化条目任意调用。而如果想要创建仅适用于某条单一自动化的变量时,就需要进入自动化编辑页面,点击顶端的(x)—创建变量。这里可以看到,标题已经变成了“创建本规则变量”,意思是说这个变量仅能在本条自动化中使用,不能跨场景调用。那什么时候该使用全局变量,什么时候又该使用本规则变量呢?其实很简单:- 如果一个变量,只需要在一条自动化场景中使用,就建议大家将其设置为本规则变量,其他场景无法调用此变量,也就不会引起混乱。
- 如果一个变量,需要用于两个或以上的自动化场景,就可以将其设置为全局变量,方便其他场景共同调用。
比如我在窗户外面放了一个温湿度计,需要获取当前的室外温度,并将其赋值给(x)“室外温度”,我们就可以将此变量设置为全局变量,方便在不同的自动化场景中,计算室内温度和室外温度的温差。另外,大家可能已经注意到了,在创建变量的时候,还需要选择变量类型为“数值”或“文本”。这个很好理解。数值变量就是此变量的值为数字。变量值在所有情况下,都是不带单位的。我们为其赋值时,原值的任何单位(%/℃等),都会被忽略。数字类型的变量可以使用预设函数或+-x÷符号进行运算,我后面会详细详解。而文本变量其实就是一串字符串,可以进行拼接操作,最实用的功能就是让小爱音箱按照我们所设定的内容进行播报。因此,我建议大家在创建变量时,养成好习惯,在名称前加入特定标识来区分全局/本规则/数字/文本变量。对于一名程序员来说,这也是基本的规范操作。比如在一般编程语言中,全局变量是global,本规则变量是local,整数是integer,小数是double,文本是string等等。当我们创建变量“户外温度”时,可以将其命名为“GD户外温度”,代表此变量类型为全局变量小数,使用时就会非常方便。当然,你也可以用自己能理解的字母来代表。在创建变量时,还有一个需要特别注意的点就是“初始值”。数值变量必须拥有一个初始值,而文本变量的初始值可以为空。初始值的意思是,当中枢网关重启,或重新启用某条自动化时,该变量会被赋予的值。所以初始值需要按需填写。而文本变量初始值则可设置为一段固定文本,这样即便是停电后再来电或系统故障导致自动化重启,也不会对其有影响。
变量功能卡片介绍
创建完变量后,要如何使用呢?将左侧的功能卡片滚到最下方,就可以看到变量相关的功能,一共有6个:我接下来一个一个给大家解释具体功能。
1、设备出发赋值 就是当设备状态发生改变时,就将值赋值给变量。比如我这里,当机柜温湿度计发生变化时,就赋值给变量。设置完成后,机柜温湿度计显示为26℃,那“机柜温度”这个变量的值就为26。
2、查询设备并赋值 就是字面上理解的那样,查询某个设备的状态,并赋值给某个变量。和上面的“设备触发赋值”不同的是,查询设备赋值卡片前面必须有一个触发条件。还以上面的机柜温湿度计为例,如果使用查询设备并赋值卡片,就必须在前面接一个触发,比如当按动无线开关时:变量值更新卡片简单来说,就是一个触发条件。既可以作为事件,也可以作为状态。这张卡片和之前最常用的设备—查询当前状态卡片几乎是一模一样的,只不过是把查询目标由设备状态变成了变量值。前面我们提到,数值类型的变量是可以用来计算的,这就是数值运算卡片的功能。使用这张卡片,我们既可以使用计算式(函数)对某一特定变量进行赋值,也可以通过计算多个变量之间的关系,得到一个新的变量。系统已经非常贴心的给我们内置了26种常用函数,通过点击最右侧的f(x)就可以展开:这些预设函数其实日常常用的只有一小部分,为了大家一目了然他们的用法,我大致整理一下:上面讲了,如果一个变量类型为数值,我们就可以对其进行函数运算。那当一个变量类型为文本的时候,我们就可以使用“文本拼接”卡片对其进行拼接。请注意,文本拼接不仅包含文本变量+文本变量的拼接,也同样可以进行文本变量+数值变量的拼接。除了以上6张新增卡片外,设备—执行操作卡片这次也新增了一个隐藏功能——特定设备的特定功能可以直接执行数值变量。比如灯具的亮度和色温,在最右侧多了一个(x)图标,点击后就可以选择变量填入,然后直接让亮度/色温执行该变量数值。变量功能实战指南
说完变量和函数的具体概念及用法,相信大家都很好奇,如何将他们运用在日常的智能场景中呢?下面就以几个简单的案例来说明一下。
1、设备状态寄存 如果你是一个相对资深的米家用户,对寄存器这个概念应该不会陌生。在某个设备本身不能作为状态,或者是较为复杂的自动化场景下,寄存器的使用是非常普遍的。之前没有变量时,想寄存状态,需要找到某个设备上用不到的功能,比如空白的智能开关按键,或者中枢网关指示灯等。不过这种方式存在很大的问题,比如设备本身的功能可能会影响到寄存器状态,多数寄存器也仅有两个状态,而且可用的寄存器数量也非常有限。在有了变量功能以后,就可以彻底抛弃这种方式,转而使用变量作设备状态寄存。方法也非常简单,直接创建一个文字变量,并且给其赋予特定的文字值即可。还是以上面的离家模式和回家模式为例:首先创建一个全局文本变量,我取名为在/离家状态,初始值留空。然后在在家模式和离家模式的最后,只要添加一张“文本拼接”卡片,让在家时变量的文本=在家模式,离家时变量的文本=离家模式即可:之后如果需要在其他自动化场景中调用当下的在/离家状态时,只要通过“查询变量值”卡片查询变量文本即可:这样比以前到处找设备指示灯去做状态寄存器,不仅方便百倍,又能确保稳定性。当然,除了文本变量外,数值变量同样可以用来做状态寄存器,而且数值变量本身支持计算,用法可以更加灵活多变。还以在家/离家判定为例,但是这次我们升级一下,不1仅要判定家里是否有人,还要知道具体有多少人。为了方便演示,我这里用一个无线开关做触发。当然最完美的触发设备是使用BE6500Pro或Home WiFi这类可以以WiFi连接设备数来判定。我们创建一个名为目前在家人数的数值变量,初始值设定为0(无人在家)。然后开始做场景。单击开关时,增加一个人;双击开关时,减少一个人。逻辑非常简单,就是一开始在讲函数时提到的f(x)=x+1或f(x)=x-1,x=目前在家人数。总结:文本变量和数值变量都可以非常轻松的用来作为状态寄存器。前者的优点是文字描述更直观,后者的优点则是可以直接进行计算,大家可以灵活按需选择。上面已经说过,我们可以使用函数和+-×÷对一个或多个变量进行计算,现在来结合实际案例,给大家讲一下具体做法。案例——计算弱电机柜和客厅之间的温度差,在温差≥5℃时,自动开启机柜风扇降温,在温差小于3℃时关闭风扇。在没有变量之前,我们是完全没办法做出以上这条自动化场景的,因为系统不支持计算。而现在,我们可以利用变量计算来轻松达成。首先新建一条名为“机柜风扇自动控制”的自动化场景,然后在其中创建两个本规则变量,分别命名为“LD机柜-客厅温差”和“LD机柜温度”。另外,由于客厅温度这个变量可能会被用于其他自动化场景,所以干脆将其创建为全局变量,命名为“GD客厅温度”。接下来,使用“设备触发赋值”卡片对客厅温度和机柜温度这两个变量赋值,让这两个变量的值实时等于对应温度计的温度:然后用机柜温度减去客厅温度,就等于温度差。拉一张“数值运算”卡片进来,左边填入变量“LD机柜-客厅温差”,右边填入“LD机柜温度-GD客厅温度”。注意在填入右边的两个变量时,可以通过点击右侧的(x),或者直接输入$符号也行。接下来,用“任意事件发生”卡片,把两个设备触发赋值和数值运算卡片连接起来。这样一来,当机柜或客厅任何一个温度计读数发生变化时,就可以立即更新计算出温度差。现在点击变量编辑页面的刷新按钮来测试一下,可以看到温差已经算出来了:最后一步就极其简单了,只要使用“变量值更新”卡片,当每次变量值发生更新时,系统就会自动判断——温差≥5时打开风扇,<3时关闭风扇即可。这样,一条相当完美的弱电机柜风扇自动控制场景就完成了,既可以时刻保持路由器,NAS等设备处于舒适环境,又可以让风扇间歇运转,省电静音。如果你稍懂编程,那么对变量拼接一定不会陌生。在米家自动化极客版中,通过“文本拼接”将多个变量拼接在一起,就能实现丰富的内容输出,而在之前,这是很难做到的。还是通过一个常用案例来讲。案例——每天早上起床后让小爱音箱进行以下早安播报:主人早上好!今天是202X年X月X日星期X,当前北京时间X点X分,室内温度X摄氏度。观察一下这句话,里面包含有7个变量,分别是今年年份,本月月份,今日日期,今日星期,当前时钟,当前分钟,主卧温度。这些变量都是相对固定的,基本不会变,所以我们可以创建为全局变量,方便其他自动化调用。现在为这些变量赋值。除了主卧温度这个变量使用“设备触发赋值”卡片,其他变量都使用数值运算卡片,让他们等同于对应的日期函数,然后连接起来。这样一来,每次温湿度计更新时,其他变量就会自动赋值,非常方便。然后再创建一个“LS早安播报”的文本变量,用于把上面这些变量和文字给拼接起来。最后,为这条早安播报文本变量添加一个触发条件即可。比如我每天是用小爱音箱作为闹钟,床头放一个无线开关,闹钟响后长按无线开关,关闭闹钟并延迟10秒开始播报。重点是选择小爱音箱作为执行设备时,直接选择播放文本,然后填入早安播报变量即可:当然,为了让大家能以最快的速度明白文本变量拼接的原理和做法,上面的这个案例我设置的比较简单。如果你有更复杂的需求,只要拼接更多的变量和文字即可,比如播报每日天气,日程,行程信息等,都可以轻松做到。最后,在加入了变量和函数功能之后,米家自动化极客版几乎可以算是一套完善的智能家居“编程”语言,让智能家居的智能化水平达到了一个全新的高度。当然,如果你有更好的「变量控制」推荐,也欢迎在评论区留言分享给其他人,或者点击“阅读原文”去了解更多! |