x-automate:使用 Linux 控制你的家居
自从我小时候看《杰森一家》开始,我就梦想着住在未来的家中,那里有智能家电和一个中央计算机控制房屋,与居住者的活动同步。
虽然我们还没有完全实现那个愿景,但它已经在地平线上出现一段时间了。家庭自动化行业的早期先驱之一是 X10 协议。Pico Electronics 是一家位于苏格兰法夫格伦罗西斯的小型设计公司,它基于之前的 X9 项目开发了 X10 项目,X9 项目是一个用于访问录音带上的音轨的随机访问方案(很像当今的 CD 技术)。Pico 还负责设计了一些最早的计算器芯片。虽然 X10 系统确实有其局限性(其中一些局限性已在最近的改进中得到解决),但它是一种相当廉价的方式来实现家庭自动化,而无需从头开始重新布线你的家。
X10 系统由控制器和模块组成。控制器通过现有的家庭布线向控制器发送“开启”/“关闭”消息,控制器要么抛掷继电器,要么使用双向可控硅电路(一种用于灯光调暗/电机速度控制应用的电子电路)来执行调光操作。每个模块都设置为一个地址 (1-16) 和一个房屋代码 (A-P),控制器设置为一个房屋代码。如果多个单元设置为相同的地址,它们都可以通过一条消息进行控制。如果您需要额外的覆盖范围,您可以按房屋代码将设施划分为区域。X10 模块和控制器,以及用于计算机控制的 CP-290 接口,可以从许多邮购供应商或 Radio Shack 购买。
X10 系统的一个局限性是单向通信——没有收到信号的确认返回。此外,该系统的范围有限,有时难以从 220V 线路的一侧到达另一侧(美国住宅通常将 220V 分割为 110V)。桥接模块有助于解决第二个问题,现在有新设备可用,它们实现了双向通信 (TW-523)。
这一切与 Linux 有什么关系呢?在玩了一段时间 Linux 并了解了 cron 之后,我开始考虑一直开着我的机器,并使用我现有的 X10 设备和 CP-290 接口来控制房屋周围的功能,我过去常常将 CP-290 接口插入我的旧 DOS 电脑来控制房屋灯光。CP-290 可以下载程序并自行控制房屋,但通过让 Linux 完成这项工作,我获得了额外的奖励,即让系统执行其他任务,例如上传/下载我的邮件、播报时间并给我口头提醒。
幸运的是,其他人也有同样的想法。Aaron Hightower (aaronh@acm.org) 编写了 x10-amh,这是一个命令行程序,它与 CP-290 通信,控制人们可能希望控制的房屋周围的物品。
仅 x10-amh 就足以与 cron 协同工作并自动执行任务;你只需在你的 crontab 文件中编写适当的 x10-amh 命令,就可以开始了。以下是我的 crontab 文件中的一个示例
55 4 * * mon-fri exec /usr/local/bin/x10 -n 3,4,11 15 5 * * mon-fri exec /usr/local/bin/x10 -f 3,4,11 0 7 * * mon-fri exec /usr/local/bin/x10 -f 10,11,12 0 23 * * sun-thu exec /usr/local/bin/x10 -f 1,4,3,9,6,7 0 9 * * mon-fri exec /usr/local/bin/x10 -f 1,2,3,4,5,6,7,8,9,10,11,12
我是 Usenet 的常客,我关注的群组之一是 comp.home.automation。如果你在这个群组中阅读一段时间,你会看到大量的公告,宣传最新的、最棒的家庭自动化软件,以及为 MS Windows 编写的精美 GUI。作为一个公认的 Linux 倡导者,我开始认为 Linux 也应该拥有自己的精美家庭自动化 GUI。
x-automate 是一个 Tcl/Tk 前端,它与 Aaron 的 x10-amh 协同工作。它是完全可定制的,具有遥控器类型的界面(图 1)和各种图标,代表我家周围一些典型的家庭自动化候选设备。除了遥控界面外,你还可以设置你家的平面图(图 2),设备放置在其真实位置的合理表示中。进一步延续《杰森一家》的主题,我还编写了一个 C 程序 speak,它通过另一个串行端口向 bgmicro Digitalker 语音合成板发送 ASCII 文本,然后语音合成板“说出”系统正在做什么。这部分是可选的。你可以配置系统而不发出声音,或者实施另一种方法,例如使用适当的声音文件,使用 cat xxx.au > /dev/audio。
程序及其相关文件应一起存储在一个目录中。(在我的情况下,它是 ~/x10。)你必须从其目录运行程序才能拾取位图文件。你的 X10 模块的配置存储在 ~/.x10rc 中,应该看起来像列表 1中所示的那个。
该程序包含一个表格输入部分,用于修改你的配置(图 3)。屏幕很像电子表格,带有单元格,用于编辑每个单元的各种参数。你需要指示单元所在的楼层(对于多层设施),平面图图标的 x,y 坐标(加载平面图后可以微调这一点),房屋代码和单元号。此外,你需要为图标前缀和设备分配一个描述性短语,说明它是否可调光,以及如果你配置了声音,则要说的短语。你可以在字段之间使用 Tab 键,以及插入和删除行。完成后,将设置存储在你的 .x10rc 文件中。
还有一个表格屏幕用于配置计划事件,这些事件可以上传到 CP290。x10-amh 以以下格式存储事件数据
event { devmap 2 daymap 1,2,3,4,5,6,7 housecode a mode today minute 39 hour 23 function dim dimlevel 5 }
x-automate 中的表格简化了编辑此数据的过程(图 4)。简而言之,你需要定义设备、事件的星期几、房屋代码、模式、分钟、小时、功能和调光级别(如果适用)。要从命令行上传此数据,请运行 x10-amh filename,其中 filename 包含上述格式的计划数据。
x-automate 还具有访问 x10-amh 的其他命令行选项的方法,主要通过菜单。你可以设置 CP-290 的日期/时间、查询 CP290 的状态并执行自检。
要创建你的平面图,我建议使用 xfig,将文件保存或转换为 “xbm” 文件,以便在 x-automate 中显示。在设计平面图时,请记住你的屏幕尺寸。可以为每个楼层或区域制作单独的图纸,文件名输入在 .x10rc 文件中。控制图标将显示在 x,y 坐标处,这些坐标在你的 .x10rc 文件中定义,并且可以用于以与“遥控器”相同的方式控制设备。单击图标的边缘并拖动将在平面图上移动图标,并更新配置中的 x,y 坐标,这些坐标可以重新保存到你的 .x10rc 文件中。发行版中包含一组大小尺寸不同的图标(用于平面图)。随意制作你自己的图标——如果你制作了一些漂亮的图标,请发送给我。现在,Linux 用户也可以拥有一个精美的家庭控制 GUI,就像那个“其他”操作系统一样。
