|
|
Line 1: |
Line 1: |
− | Controlling the home from distance is made via a web access. | + | Controlling the home from distance can be made via web access methods such as the [http://en.wikipedia.org/wiki/Representational_state_transfer#RESTful_web_APIs RESTful] API. |
| | | |
− | In this example, the server is <code>harmonia.local</code>: evidently, this has to be replaced by your local server name.
| + | Before all, make sure you have installed an [[install xpl hub|xPL hub]]. |
| | | |
| = Install a web server = | | = Install a web server = |
− |
| |
− | Install the [http://www.lighttpd.net web server]:
| |
− | su
| |
− | apt-get update
| |
− | apt-get install lighttpd
| |
− | apt-get install php5-cgi
| |
− | lighttpd-enable-mod fastcgi fastcgi-php
| |
− | service lighttpd reload
| |
− | service lighttpd status
| |
− |
| |
− | Configure the base directory and modify the line with <code>server.document-root</code>:
| |
− | WWW_ROOT=/mnt/storage/www/
| |
− | nano /etc/lighttpd/lighttpd.conf
| |
− | service lighttpd reload
| |
− | cp /var/www/index.lighttpd.html $WWW_ROOT
| |
− |
| |
− | Navigate to your server within a web browser.
| |
− | You should discover the default [http://www.lighttpd.net lighttpd] placeholder page.
| |
− |
| |
− | = Install the webSocket libraries =
| |
− |
| |
− | == jQuery ==
| |
− |
| |
− | Download the [http://jquery.com/download/ latest compressed, production jQuery version].
| |
− | wget http://code.jquery.com/jquery-2.1.4.min.js
| |
− |
| |
− | == XML::Simple ==
| |
− |
| |
− | Check if the <code>XML::Simple</code> is already installed:
| |
− | 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.pm'
| |
− |
| |
− | Install the library:
| |
− | perl -MCPAN -e "install 'XML::Simple'"
| |
− |
| |
− | Alternatively, on Ubuntu:
| |
− | apt-get install libxml-simple-perl
| |
− |
| |
− | == Net::WebSocket::Server ==
| |
− |
| |
− | Check if the <code> XML::Simple</code> is already installed:
| |
− | 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 'WebSocket/Server.pm'
| |
− |
| |
− | Install the library:
| |
− | perl -MCPAN -e "install 'Net::WebSocket::Server'"
| |
− |
| |
− | = Prepare a home control page =
| |
− |
| |
− | Create the home control directory:
| |
− | WWW_CONTROL=$WWW_ROOT/homeControl
| |
− | mkdir -p $WWW_CONTROL
| |
− | chmod -R 775 $WWW_CONTROL
| |
− | chown -R control:users $WWW_CONTROL
| |
− | cd $WWW_CONTROL
| |
− |
| |
− | In this directory, create a <code>simple.html</code> control page:
| |
− | <pre>
| |
− | <html>
| |
− | <head>
| |
− | <script src="//code.jquery.com/jquery-1.11.0.min.js">
| |
− | </script>
| |
− | </head>
| |
− | <body>
| |
− | <!-- Light controls .................................................... -->
| |
− | <br />
| |
− | <table align="center" border='0px' cellpadding='12px' cellspacing='0px' bgcolor="#CCCCCC">
| |
− | <tr>
| |
− | <th width="240px">ceiling</th>
| |
− | <th width="240px">stand</th>
| |
− | </tr>
| |
− | <tr>
| |
− | <td align="center"><input id="ceiling" type="checkbox" /></td>
| |
− | <td align="center"><input id="stand" type="checkbox" /></td>
| |
− | </tr>
| |
− | </table>
| |
− |
| |
− | <!-- Websocket java script ............................................. -->
| |
− | <script>
| |
− | $().ready(function() {
| |
− | var ws = new WebSocket('ws://harmonia.local:8080/');
| |
− |
| |
− | ws.onopen = function() {
| |
− | console.log("Web socket started");
| |
− | }
| |
− | // outgoing messages
| |
− | $('#ceiling').on('change', function() {
| |
− | ws.send('ceiling ' + $(this).is(':checked'));
| |
− | });
| |
− | $('#stand').on('change', function() {
| |
− | ws.send('stand ' + $(this).is(':checked'));
| |
− | });
| |
− | // polling message
| |
− | window.setInterval(
| |
− | function() {
| |
− | ws.send('poll request');
| |
− | }
| |
− | , 100
| |
− | );
| |
− | // incoming messages
| |
− | ws.onmessage = function(message) {
| |
− | console.log(message.data);
| |
− | var words = message.data.split(' ');
| |
− |
| |
− | if (words[0] === 'ceiling') {
| |
− | $('#ceiling').prop('checked', words[1] == 'true');
| |
− | }
| |
− | if (words[0] === 'stand') {
| |
− | $('#stand').prop('checked', words[1] == 'true');
| |
− | }
| |
− | }
| |
− | });
| |
− | </script>
| |
− |
| |
− | </body>
| |
− | </html>
| |
− | </pre>
| |
− | Navigate to the control page: <code>http://harmonia.local/homeControl/simple.html</code>
| |
− |
| |
− | = Implement a WebSocket server =
| |
| | | |
| | | |
| [[Category: all]] [[Category: install]] [[Category: web]] | | [[Category: all]] [[Category: install]] [[Category: web]] |
Controlling the home from distance can be made via web access methods such as the RESTful API.