Install central
The central xPL device can be compared to a central station. It monitors all xPL messages and can trigger other messages based on a set of rules stored in an XML file.
Before all,make sure you have installed an xPL hub.
Contents
[hide]Install xPL central device
Install XML::Simple
:
su perl -MFile::Find=find -MFile::Spec::Functions -Tlw -e 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC' 2> /dev/null | grep -i 'xml.*simple' perl -MCPAN -e "install 'XML::Simple'" exit
If XML::SAX::Expat
doesn't install properly and blocks the installation of XML::Simple
,
which was the case on my Ubuntu BeagleBone, try:
su apt-get install libxml-sax-expat-incremental-perl ln -s /usr/share/perl5/XML/SAX/ParserDetails.ini /usr/local/share/perl/5.14.2/XML/SAX/ParserDetails.ini perl -MCPAN -e "install 'XML::Simple'" exit
Download the xPL central device script.
Move the script to xPL scripts directory:
SCRIPTS_BASE_DIR=/home/control/Documents/Controls mv xpl-central.pl $SCRIPTS_BASE_DIR chown control:users $SCRIPTS_BASE_DIR/*.pl chmod 775 $SCRIPTS_BASE_DIR/*.pl
Test xPL central device
Test it on a BeagleBone:
su control SCRIPTS_BASE_DIR=/home/control/Documents/Controls $SCRIPTS_BASE_DIR/xpl-central.pl -h $SCRIPTS_BASE_DIR/xpl-central.pl -v -n test
Open a 2nd terminal window (on any machine with xPL installed) and monitor the xPL protocol:
SCRIPTS_BASE_DIR=/home/control/Documents/Controls $SCRIPTS_BASE_DIR/xpl-monitor.pl -vf
The monitor should echo the serial port incoming messages.
Open another terminal and send a message to the serial port:
su control SCRIPTS_BASE_DIR=/home/control/Documents/Controls $SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-serPort.test -c serPort.basic command='hello world'
Launch the xPL central device at startup
The xPL central device is to be launched after the xPL hub.
Ubuntu
On Ubuntu, the xPL central device starts-up once xpl-hub_started
has been emitted.
Edit /etc/init/xpl-central.conf
:
################################################################################ # xPL central message parser # description "xPL central message parser" version "1.0" author "Francois Corthay" #------------------------------------------------------------------------------- # Configuration variables # env SCRIPTS_DIR='/home/control/Documents/Controls' env SCRIPT_NAME='xpl-central.pl' env PARAMETERS='-n home' #------------------------------------------------------------------------------- # Start and stop conditions # start on xpl-hub_started stop on shutdown respawn setuid control setgid users #------------------------------------------------------------------------------- # Start daemon # exec $SCRIPTS_DIR/$SCRIPT_NAME $PARAMETERS
Start the device and test it:
su root service xpl-central start service xpl-central status SCRIPTS_BASE_DIR=/home/control/Documents/Controls $SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-serPort.eib -c serPort.basic command='gci' $SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-serPort.eib -c serPort.basic command='dts \$15' $SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-serPort.eib -c serPort.basic command='tds (1/1/1) 1'
Mac OS
On Mac OS, the xPL central device starts-up later than the hub.
Edit /Library/LaunchDaemons/xpl-central.plist
:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>xPL central message parser</string> <key>OnDemand</key> <false/> <key>UserName</key> <string>control</string> <key>ProgramArguments</key> <array> <string>/Users/control/Documents/Controls/xpl-central.pl</string> <string>-n</string> <string>lounge</string> <string>-w</string> <string>25</string> <string>-a</string> <string>/Users/control/Documents/Controls/centralActions.xml</string> </array> </dict> </plist>
Start the device and test it:
su root launchctl load /Library/LaunchDaemons/xpl-central.plist SCRIPTS_BASE_DIR=/Users/control/Documents/Controls $SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-serPort.eib -c serPort.basic command='gci' $SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-serPort.eib -c serPort.basic command='dts \$15' $SCRIPTS_BASE_DIR/xpl-send.pl -v -t cmnd -d dspc-serPort.eib -c serPort.basic command='tds (1/1/1) 1'