<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://rs-485.com/index.php?action=history&amp;feed=atom&amp;title=XPL_Protocol</id>
	<title>XPL Protocol - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://rs-485.com/index.php?action=history&amp;feed=atom&amp;title=XPL_Protocol"/>
	<link rel="alternate" type="text/html" href="https://rs-485.com/index.php?title=XPL_Protocol&amp;action=history"/>
	<updated>2026-05-04T13:11:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://rs-485.com/index.php?title=XPL_Protocol&amp;diff=1764&amp;oldid=prev</id>
		<title>RS-485: Imported from Wikipedia (overwrite)</title>
		<link rel="alternate" type="text/html" href="https://rs-485.com/index.php?title=XPL_Protocol&amp;diff=1764&amp;oldid=prev"/>
		<updated>2026-05-03T14:44:50Z</updated>

		<summary type="html">&lt;p&gt;Imported from Wikipedia (overwrite)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Primary sources|date=February 2008}}&lt;br /&gt;
{{DISPLAYTITLE:xPL Protocol}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;xPL&amp;#039;&amp;#039;&amp;#039; is an open protocol intended to permit the control and monitoring of [[home automation]] devices. The primary design goal of xPL is to provide a rich set of features and functionality, whilst maintaining an elegant, uncomplicated message structure. The protocol includes complete discovery and auto-configuration capabilities which support a fully &amp;quot;plug-n-play&amp;quot; architecture - essential to ensure a good end-user experience.&lt;br /&gt;
&lt;br /&gt;
xPL benefits from a strongly specified message structure, required to ensure that xPL-enabled devices from different vendors are able to communicate without the risk of incompatibilities.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;xPL About Page&amp;quot;&amp;gt;{{cite web |url=http://xplproject.org.uk/?page_id=2 |title=About the Project |work=The xPL Project Web Site |access-date=23 April 2012}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Communications between xPL applications on a Local Area Network (LAN) use [[User Datagram Protocol|UDP]] on port [[List of TCP and UDP port numbers|3865]].&amp;lt;ref name=&amp;quot;xPL Primer&amp;quot;&amp;gt;{{cite web |url=http://www.xplmonkey.com/xpl.html |title=xPL Primer |work=xPL Monkey Web Site |author=Lansell, Mal |access-date=23 April 2012 |archive-date=31 March 2012 |archive-url=https://web.archive.org/web/20120331051041/http://www.xplmonkey.com/xpl.html |url-status=dead }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xPL development has primarily occurred in the DIY community, where users have written connecting software to existing protocols and devices. Some examples include bridges to other home automation protocols like [[Z-Wave]]&amp;lt;ref&amp;gt;{{cite web |url=http://www.xplmonkey.com/zwave.html |title=xPLMonkey Z-wave Page |work=xPL Monkey Web Site |author=Lansell, Mal |access-date=23 April 2012 |archive-date=16 April 2012 |archive-url=https://web.archive.org/web/20120416014844/http://www.xplmonkey.com/zwave.html |url-status=dead }}&amp;lt;/ref&amp;gt; and [[Universal powerline bus|UPB]].&amp;lt;ref&amp;gt;{{cite web |url=http://www.xpl4java.org/UPB4Java/ |title=UPB4Java V1.2c - Java API for the UPB automation protocol |work=xPL4Java Web Site |author=Duprey, Gerald R Jr |date=5 July 2008 |access-date=23 April 2012 |archive-date=9 January 2014 |archive-url=https://web.archive.org/web/20140109022901/http://xpl4java.org/UPB4Java/ |url-status=dead }}&amp;lt;/ref&amp;gt; Commercially, the Logitech SqueezeCenter software for the [[Squeezebox (network music player)|Squeezebox]] supports xPL.&amp;lt;ref&amp;gt;{{cite web |url=http://wiki.slimdevices.com/index.php/XPL |title=SqueezeboxWiki xPL Page |work=SqueezeboxWiki |access-date=23 April 2012}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
Different devices communicate using xPL within a local network.&lt;br /&gt;
They all broadcast their messages on the&lt;br /&gt;
[https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt IANA registered UDP port] 3865&lt;br /&gt;
for the other devices to handle.&lt;br /&gt;
&lt;br /&gt;
As on modern operating systems only one program can listen to a given port,&lt;br /&gt;
there is a need for a hub forwarding the messages to all devices on the same machine.&lt;br /&gt;
The devices register to the hub on a private UDP port and the hub then forwards all incoming message to these private ports.&lt;br /&gt;
&lt;br /&gt;
=== HUB ===&lt;br /&gt;
A hub is the first xPL component required on a machine running xPL devices.&lt;br /&gt;
&lt;br /&gt;
All devices send a [http://xplproject.org.uk/wiki/index.php?title=Schema_-_HBEAT heartbeat message] to the hub on a regular basis (typically 5 minutes).&lt;br /&gt;
When disconnecting, they also can send a special heartbeat end message for the hub to radiate them out of his list.&lt;br /&gt;
&lt;br /&gt;
The hub [http://xplproject.org.uk/wiki/index.php?title=XPL_hubs_specification forwards all messages] to every device in its list.&lt;br /&gt;
There is no filtering of messages: a blind redistribution of all messages is carried out.&lt;br /&gt;
&lt;br /&gt;
=== XPL device ===&lt;br /&gt;
Applications add functionality to a home automation solution such as light control, sun rise/set, weather information and so on.&lt;br /&gt;
&lt;br /&gt;
A device chooses a free UDP port and sends heartbeat messages from that port to the hub on the&lt;br /&gt;
[https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt IANA registered UDP port] 3865.&lt;br /&gt;
&lt;br /&gt;
From that time, the devices listens for messages on its private port but sends messages as broadcast on the xPL port 3865.&lt;br /&gt;
The [http://xplproject.org.uk/wiki/index.php?title=XPL_Specification_Document message types] are one of the following:&lt;br /&gt;
* &amp;#039;&amp;#039;command&amp;#039;&amp;#039;, targeted to control other devices&lt;br /&gt;
* &amp;#039;&amp;#039;status&amp;#039;&amp;#039;, generally as an answer to a command&lt;br /&gt;
* &amp;#039;&amp;#039;trigger&amp;#039;&amp;#039;, used to notify a change in a device&amp;#039;s state&lt;br /&gt;
&lt;br /&gt;
An extensive list of [http://xplproject.org.uk/wiki/index.php?title=Applications applications] can be downloaded from the net.&lt;br /&gt;
[http://xplproject.org.uk/wiki/index.php?title=Development_Tools Tooklits] are also provided for users wishing to develop their own devices.&lt;br /&gt;
&lt;br /&gt;
=== Bridge ===&lt;br /&gt;
It is assumed that your [[Communications protocol|network protocol]] is [[Internet protocol suite|UDP/IP]] but this is by no means a requirement.&lt;br /&gt;
If you wish for your XPL message to cross from one transport medium to another (UDP/IP to [[RS-232|RS232]] for example) then you will need a Bridge.&lt;br /&gt;
&lt;br /&gt;
=== Rules ===&lt;br /&gt;
&lt;br /&gt;
On Windows, [http://xplproject.org.uk/wiki/index.php?title=FAQ#xPL_HAL xPL HAL] processes incoming xPL messages&lt;br /&gt;
and executes scripts to perform a wide variety of tasks.&lt;br /&gt;
Configuration is done either through a Windows-based Manager or via a browser.&lt;br /&gt;
xPL HAL also includes an xPL Configuration Manager.&lt;br /&gt;
&lt;br /&gt;
On Linux or Mac OS, [http://www.dspc.ch/xPL/index.php/Install_central xpl-central] monitors all xPL messages&lt;br /&gt;
and can trigger other messages based on a set of rules stored in an XML file.&lt;br /&gt;
&lt;br /&gt;
== Transmission media ==&lt;br /&gt;
&lt;br /&gt;
The xPL protocol can operate over a variety of transmission media, including [[Ethernet]], RS232 and RS485.&lt;br /&gt;
&lt;br /&gt;
=== Ethernet ===&lt;br /&gt;
&lt;br /&gt;
All xPL devices broadcast their messages over [[User Datagram Protocol|UDP]], on [https://www.iana.org/assignments/port-numbers IANA registered port] 3865.&lt;br /&gt;
&lt;br /&gt;
But, as only one application can listen at a time to a given port, the xPL protocol uses a hub to retransmit all broadcast messages to the different applications on the same machine.&lt;br /&gt;
The applications subscribe to the hub on a free port by sending heartbeat messages which specifies the port they are listening to.&lt;br /&gt;
In turn, the hub forwards all xPL broadcast messages it receives to every application in his list.&lt;br /&gt;
&lt;br /&gt;
== Protocol ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lite on the wire, by design&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
xPL Messages are line based, with each line ending with a linefeed (ASCII: 10 decimal) character.&lt;br /&gt;
The following is an example of a typical xPL Message:&lt;br /&gt;
&lt;br /&gt;
 xpl-cmnd&lt;br /&gt;
 {&lt;br /&gt;
 hop=1&lt;br /&gt;
 source=xpl-xplhal.myhouse&lt;br /&gt;
 target=acme-cm12.server&lt;br /&gt;
 }&lt;br /&gt;
 x10.basic&lt;br /&gt;
 {&lt;br /&gt;
 command=dim&lt;br /&gt;
 device=a1&lt;br /&gt;
 level=75&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Message Structure ===&lt;br /&gt;
&lt;br /&gt;
All messages are made out of:&lt;br /&gt;
* The message type (&amp;#039;&amp;#039;xpl-cmnd&amp;#039;&amp;#039;, &amp;#039;&amp;#039;xpl-stat&amp;#039;&amp;#039; or &amp;#039;&amp;#039;xpl-trig&amp;#039;&amp;#039;)&lt;br /&gt;
* The header block, inside curly braces, containing:&lt;br /&gt;
** hop=&amp;#039;&amp;#039;n&amp;#039;&amp;#039;, the hop count which is incremented each time the xPL message is transferred from one physical network to another&lt;br /&gt;
** source=&amp;#039;&amp;#039;vendor_id&amp;#039;&amp;#039;-&amp;#039;&amp;#039;device_id&amp;#039;&amp;#039;.&amp;#039;&amp;#039;instance_id&amp;#039;&amp;#039;, which serves to identify the sender of the message&lt;br /&gt;
** target=&amp;#039;&amp;#039;vendor_id&amp;#039;&amp;#039;-&amp;#039;&amp;#039;device_id&amp;#039;&amp;#039;.&amp;#039;&amp;#039;instance_id&amp;#039;&amp;#039;, which serves to identify the destination of the message&lt;br /&gt;
* The message schema, in the format &amp;#039;&amp;#039;class&amp;#039;&amp;#039;.&amp;#039;&amp;#039;type&amp;#039;&amp;#039;&lt;br /&gt;
* The message body, inside curly braces, containing &amp;#039;&amp;#039;name&amp;#039;&amp;#039;=&amp;#039;&amp;#039;value&amp;#039;&amp;#039; pairs&amp;lt;ref name=&amp;quot;xPL Spec Doc&amp;quot;&amp;gt;{{cite web |url=http://xplproject.org.uk/wiki/XPL_Specification_Document.html |title=XPL Specification Document |date=3 August 2011 |work=The xPL Project Web Site |access-date=23 July 2015}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the header block, the target name is replaced by the wildcard symbol &amp;quot;*&amp;quot; for broadcast messages.&lt;br /&gt;
This is the case for tigger and status messages.&lt;br /&gt;
&lt;br /&gt;
=== Message Schema ===&lt;br /&gt;
xPL uses [http://xplproject.org.uk/wiki/index.php?title=XPL_Message_Schema well defined message schemas] to ensure that applications from different vendors can interact sensibly. Message Schemas are extensible, and define not only the elements which should be present in a message, but also the order in which they appear.&lt;br /&gt;
&lt;br /&gt;
This allows simple devices and applications to parse messages more easily.&lt;br /&gt;
&lt;br /&gt;
All of the existing message schemas can be found on the [http://xplproject.org.uk/wiki/ xPL project home page].&lt;br /&gt;
Developers looking to create a new schema are invited to do so.&lt;br /&gt;
&amp;lt;ref name=&amp;quot;xPL Project Documentation&amp;quot;&amp;gt;{{cite web |url=http://xplproject.org.uk/wiki/Project_documentation.html |title=xPL Project Documentation |date=3 August 2011 |work=The xPL Project Web Site |access-date=23 July 2015}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[xAP Home Automation protocol]] - A substantially similar home automation protocol&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
&lt;br /&gt;
=== Official ===&lt;br /&gt;
* [http://www.xplproject.org.uk/ xPL Home Automation Project homepage]&lt;br /&gt;
* [http://www.xplproject.org.uk/wiki xPL Home Automation Project WIki]&lt;br /&gt;
* [http://xplproject.org.uk/forums/ xPL Forum] {{Webarchive|url=https://web.archive.org/web/20101011095920/http://xplproject.org.uk/forums/ |date=2010-10-11 }}&lt;br /&gt;
* [http://xplproject.org.uk/wiki/index.php xPL Project URL links]&lt;br /&gt;
&lt;br /&gt;
=== Development ===&lt;br /&gt;
* [https://www.xplmonkey.com/xpl.html xPL Monkey] {{Webarchive|url=https://web.archive.org/web/20240216145446/https://www.xplmonkey.com/xpl.html |date=2024-02-16 }}&lt;br /&gt;
* [http://johnb.xplproject.org.uk/info/perl/ Perl toolkit]&lt;br /&gt;
* [https://github.com/beanz/xpl-perl/ xPL Perl]&lt;br /&gt;
* [https://github.com/fcorthay/xPL Perl and Python xPL scripts]&lt;br /&gt;
* [https://github.com/olebrun/xPL.Arduino implementation of the xPL Protocol for Arduino]&lt;br /&gt;
* [https://codebender.cc/library/xPL#xPL.cpp Arduino xPL Library]&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
* [https://misterhouse.sourceforge.net/ Misterhouse supports xPL]&lt;br /&gt;
* [http://wiki.slimdevices.com/index.php/XPL Logitech Media Server supports xPL], [http://xplproject.org.uk/wiki/Schema_-_AUDIO.html Logitech Media Server message schema]&lt;br /&gt;
&lt;br /&gt;
{{List of Automation Protocols}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Home automation]]&lt;br /&gt;
[[Category:Industrial computing]]&lt;br /&gt;
[[Category:Industrial automation]]&lt;/div&gt;</summary>
		<author><name>RS-485</name></author>
	</entry>
</feed>