智能家居通讯协议xPL的应用
2008-07-17
作者:陆圣轩, 徐 安, 郭凯杰
摘 要: 介绍了xPL协议的基本内容、工作过程和使用方法;并以电话远程遥控" title="远程遥控">远程遥控系统运用xPL与上位机" title="上位机">上位机、下位机" title="下位机">下位机完成数据通信,最终实现对家居设施的远程控制" title="远程控制">远程控制。
关键词: xPL协议 远程控制 智能家居
智能家居控制系统的出现使得人们可以通过电话、手机或者互联网在任何时候、任意地点对家中的任意电器,如灯光、电源和家庭环境等进行远程控制。然而,为了协调家居各子系统能顺利工作,控制系统必须使用具有强大兼容性的协议对各个子系统进行控制。xPL协议[1](eXtremely simPle protocoL)就是这样一个具有强大兼容性的协议,是一种新颖的智能家居控制系统中的通信协议,2003年1月由英国的两名工程师 Ian Lowe和Tony Tofts发起,并于2003年上半年得到完善。运用xPL协议,可以根据用户自身的需要,编写出相应的个性化程序,将使智能家居系统的开发变得简单,并能完成对多种家电的控制。开发的系统将具有可靠性、兼容性和安全性。
1 xPL协议的指令信息格式
xPL信息有三种类型,分别为xpl-cmnd、xpl-stat 和xpl-trig,它们使得xPL网络中各设备之间的相互通信过程变得简单。
xPL程序以行为单位,每行以一个换行符作为结束。一个完整的xPL信息应该由以下四部分组成:
(1) 信息类型(xpl-cmnd、xpl-stat 或者xpl-trig);
(2) 一个大小可以变(但须在限定范围内)的头文件;
(3) schema.version 格式的信息样式表;
(4) 一个单一信息“体”,包含 name=value。
信息格式(Schema)标识符是为了使来自不同厂商的设备和程序能够在开放的环境下通信,schema定义了传输信息的格式内容。这样,每条信息将属于一个特定的类。
命令、状态和其他信息是以一系列名称/值对组成的xPL信息表达的。一个xPL信息可能包含很多这样的对。信息包含的特定内容以及这些内容的顺序由所用信息的schema规定。开发者可以在其中加入更多的信息,但由信息schema规定的基本要素必须总是以正确的顺序罗列出。
1.1 xpl-cmnd指令
xpl-cmnd指令是用来使一个装置执行一个动作的,分为两种:定向命令信息和广播命令信息。
1.1.1 定向命令信息
如果想对家居环境中的一个特定的装置进行控制,如休息室里的窗帘控制器,或者中央供暖系统的加热器,信息可以通过目标定向传达到受控装置或程序。只有信息中指定的目标定向装置或程序才会对收到的定向命令信息进行响应。
1.1.2 广播命令信息
广播命令信息向xPL网络中所有装置和应用程序" title="应用程序">应用程序发送一个xPL命令,一旦此信息发出,xPL网络中所有装置和应用程序都会对此信息进行响应。
1.2 xpl-stat指令
xpl-stat指令是用来获取xPL网络中的装置或程序的实际状态信息的。所有的装置和应用程序都应该定时发送一个“heartbeat”(心跳)状态信息,并且可以随意地对询问当前状态的请求作出回应。
1.2.1 Heartbeat心跳信息
一个xPL网络中的所有装置都应该发送heartbeat信息(Hub除外)。Heartbeat中囊括了配置信息、正常监视、故障诊断和事件日志。Heartbeat的时间间隔由开发者定义,可以是5~30分钟内的任何时间长度。请求所有设备识别它们自身,程序可发送一个广播命令。格式是一个schema类hbeat.request类型和command=request单一体元素。当一个xPL设备接收到这样的信息时,它应当发送一个标准的heartbeat信息作为回复。
1.2.2 状态请求
与采用通常的heartbeat一样,在xPL网络中的设备要想知道另一个设备的当前状态,可以启用状态请求机制。
1.3 xpl-trig指令
在xPL网络中,无论何时,当出现一个装置的状态改变、响应一个xPL命令、一个人的直接的行为(如按下一个开关)等情况时,不论这种变化是否由一个外部事件(按下一个按钮,IR探测,达到温度,或者一个设备启动)引起,触发信息都会被发送。
2 xPL设备配置
2.1 Group(组)
当智能家居环境中的同类设备不止一个、用户想同时控制它们的打开或者关闭时,可将此类设备设置为同一个组。xPL为此提供了一个强大的机制,它的形式为:“group=”的配置标签。配置信息中的 “group=”标签将清空已经存在的组。因此,当一个设备的组将要发生改变时,所有想要包含此设备的组必须在配置信息中全部被设定。
2.2 Filter(过滤器)
在xPL网络中,有大量的xPL信息,但其中的设备并不是每条信息都需要接收,这样,就需要一个过滤器filter将与其无关的信息过滤掉,而只接收与自身匹配的信息。信息过滤器可以通过一个配置信息指定使用。过滤器是在一个配置信息中用“filter=tag”来定义。一个配置信息中的“filter=tag”将会清空已有的过滤器,因此,当要改变一个过滤器时,所有期望的过滤器必须在配置信息中设定。过滤器只应用于广播信息,为的是减少设备所使用信息的数量。如果多个过滤器同时存在,只要其中的一个与将要处理的信息匹配就可以了。
3 xPL服务器配置
3.1 xPL Hub
因为TCP/IP协议一次只允许一个应用程序占用一个特定的端口,因此,用一个“Hub”机制来实现多个xPL应用程序在同一个主机上运行。一个应用程序如果要侦听xPL通信,应该与一个动态UDP端口进行绑定,并且在心跳信息或者设置信息中将程序侦听的端口发送出去。Hub接收到这些心跳信息后将应用程序添加到它的客户机名单中。当进来的xPL信息在一个xPL端口被接收到时,Hub会把它们转发给所有注册的客户机。在以太网上传输的xPL信息支持最大为1 500字节的信息长度。
3.2 xPLHal
3.2.1 xPLHal的概念
xPLHal是一个没有图形用户界面的服务程序。在没有xPL设备接入网络的情况下,它也会一直在后台运行。xPLHal Manager是一个xPLHal的控制台程序,它使用XHCP(而不是xPL)对底层服务进行配置,它可以在网络中的任何PC机上运行,而不一定是在xPL的服务器上。xPLHal完全可以在没有Manager的情况下运行。
3.2.2 xPLHal 中的参数设置
(1) Modes(状态)
Modes被用来反映一个房间可以处于的不同状态。例如,“繁忙”、“空闲”和“休息”。它可以通过xPLHal属性对话框的相关标签进行设定。
房间处于不同状态时,其Modes也不相同。因此,用户可以利用Modes编程来制定智能家居系统的行为。例如,可以使一个xPL指令信息在房间“空闲”模式下触发,而在房间“繁忙”时,这个行为却不发生。
(2) Periods(时段)
Periods用来代表一天中不同的时段。默认情况下可以有两个备选值:Day(白天)和Night(黑夜)。同样可以利用Periods编程来制定家居系统的行为。
究竟Periods是“白天”还是“黑夜”可以通过许多方法判断,下面给出其中的一些方法:
①通过安装xPL的DawnDusk服务程序。它可以在“黎明”和“黄昏”时分别发出xPL信息,原理是它可以根据所在地计算出日出和日落的时间。
②在PC机上直接接入光传感器,例如通过串行口接入。
在家居系统中,程序可以将Modes与Period联合使用,从而实现一个比较复杂的逻辑环境。
(3) Global variables全局变量
全局变量由xPLHal支持并由用户自己定义的变量。如果用户需要保存程序中的状态信息,则可以将它保存在全局变量集合中。全局变量是不可变的,它将被写入磁盘,确保即使系统重启时它的值仍然存在。全局变量也将被复制给其他xPLHal从服务器。
Mode和Periods值将以全局变量的形式存储在xPLHal中,而VB程序员可以通过xPL开发者提供的ActiveX控件在VB程序中方便地找到这些全局变量,同时也可以得到各个设备的当前状态和当前时段。
4 电话远程遥控系统设计
4.1电话远程遥控系统设计方案[2]
在xPL协议的帮助下,只要将家中固定电话、PC机和单片机相连接,就可以利用手机完成对家中家居设施的远程控制。当电话打入时,xPL协议从调制解调器上收到用户的控制命令,并将信息传递给上位PC机,由上位机对信息处理后,将指令传达给单片机,单片机将直接控制家中所有的被控设备。本实验系统中,单片机的控制对象分为开关量对象和红外遥控对象。由单片机控制的红外发射器可以对一切具有红外接收功能的家电诸如空调、电视机、DVD播放机等进行控制。系统设计方案如图1所示。
虽然xPL软件本身提供了强大的功能,但要实现用户要求的复杂控制功能,还需要编写控制程序。xPL软件是基于Visual Basic语言开发的,同时xPL开发者提供了ActiveX控件,使得Visual Basic编程者很容易将xPL功能加入到程序中。加之Visual Basic用于制作界面强大又易于操作的优势,因此,本实验系统的上位机程序采用VB编写控制程序。控制程序将负责接收xPL指令信息,做出判断和处理后,向单片机下达指令完成控制动作。
4.2 程序介绍
4.2.1 xPLPhone
若要实现电话对家中家居设施的控制,则需要安装xPLPhone软件。xPLPhone是一款xPL官方网站提供的免费软件。它能使调制解调器成为一个完全支持xPL的设备,使得PC机能够接听电话,可以通过对xPLPhone编写基于xPL指令信息与协议规则的脚本语言实现既定的功能。
电话远程遥控系统包括两大功能:一是主人不在家时的访客留言录音功能;二是主人对智能控制系统中的设备的电话远程遥控功能。图2是电话远程遥控流程示意图。
4.2.2 控制界面设计
系统的控制界面如图3所示。xPL指令信息和当前状态经由ActiveX控件从xPLHal传递到控制软件。控制软件根据指令信息,经过判断和处理,由串口向下位机发送命令。控制软件的用户界面也实时反映各个设备的当前状态。
控制软件的工作方式与特点:
(1)xPL提供的ActiveX控件使得Visual Basic程序可以方便地接收到xPL指令信息和设备的当前状态信息。软件由xPLHal接收到xPL信息,经过解析和判断后,便可以向下位机发送命令了。
(2)在xPL网络中,有大量的xPL信息,但其中的设备并不是每条信息都需要接收。这样,就需要一个过滤器Filter, 将与其无关的信息过滤掉,而只接收与自身匹配的信息。本实验系统定义了一个Schema:iHouse.Basic。Filter将自动过滤掉与iHouse.Basic无关的信息。
(3)遥控系统可以经过ActiveX控件由 xPLHal 得到当前时段和xPL设备的当前状态。在接收到xPL指令信息后,通过对这些状态和时段的判断,决定单片机应该产生哪些控制动作。
4.2.3 下位机程序设计
本系统采用LPC932单片机对各个被控设备进行控制。单片机通过RS232与上位机相连接,从上位机接收控制数据,然后通过特定电路与被控设备相连接,实现开关量控制或红外信号控制[4]。
xPL作为一个专门为智能家居控制设计的协议,它是一个统一的、具有极其简单和容易使用的特点的开放协议。它具有以下特点:
(1)提供了一个丰富的特征和功能集,同时,有一个较完善的、但并不复杂的信息结构。
(2)具有强大的自动发现和配置的能力,完全支持“即插即用”体系结构。
(3)特定信息结构确保了来自不同生产商的支持xPL的设备能够相互通信,而没有不兼容的危险。
本文通过电话远程遥控系统的设计与实现,说明了用xPL协议实现智能家居将大大降低设计难度,同时保证了网络设备的兼容性、可靠性。xPL协议在智能家居领域将具有广阔的市场前景。
参考文献
[1] JACOBSON J. Understanding home automatic. Electronic House, 2001: 48-50.
[2] SCHONGA B.VBScript揭秘.高长剑,译.北京:电子工业出版社,1998:70-147.
[3] 徐安.微型计算机控制技术.北京:科技出版社,2004.
[4] LEWISD W L. Fundamentals of embedded software:where C and assembly meet. 北京: 高等教育出版社,2005.