dimanche 22 décembre 2013

Serveur node.js pour un projet domotique

Objectif : Créer un serveur simple à l'aide de node.js sur un raspberry pi qui permettra de commander l'allumage d'une lampe.
Côté matériel, le raspberry est équipé de la carte d'extension piFace qui comporte des relais.



Tout d'abord, quelques liens et tutos qui m'ont aidés à réaliser ce projet:
http://fr.openclassrooms.com/informatique/cours/des-applications-ultra-rapides-avec-node-js
http://nodejs.developpez.com/tutoriels/javascript/node-js-livre-debutant/
http://blog.rueedlinger.ch/2013/03/raspberry-pi-and-nodejs-basic-setup/
http://fr.openclassrooms.com/informatique/cours/des-applications-ultra-rapides-avec-node-js/socket-io-passez-au-temps-reel
https://npmjs.org/package/piface-node

code de l'application principale app.js:
var http = require('http');
var fs = require('fs');
var pfio = require('piface-node');

pfio.init();

// Chargement du fichier index.html affiché au client
var server = http.createServer(function(req, res) {
    fs.readFile('./index.html', 'utf-8', function(error, content) {
        res.writeHead(200, {"Content-Type": "text/html"});
        res.end(content);
    });
});

// Chargement de socket.io
var io = require('socket.io').listen(server, { log: false});

// Quand on client se connecte, on le note dans la console
io.sockets.on('connection', function (socket) {
    socket.emit('message', 'Vous êtes bien connecté !');
    socket.on('allume', function (message) {
      console.log('Allumer la lampe');
      pfio.digital_write(0, 1);
    });
    socket.on('eteint', function (message) {
      console.log('Eteindre la lampe');
      pfio.digital_write(0,0);
    });
});
server.listen(8080);

Code de index.html:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>PiFace</title>
    </head>

    <body>
        <h1>Commande de la lampe</h1>

        <p><input type="button" value="Allumer" id="RelaisOn" /></p>
        <p><input type="button" value="Eteindre" id="RelaisOff" /></p>


        <script src="/socket.io/socket.io.js"></script>
        <script>
            var socket = io.connect('http://192.168.1.10:8080');
            socket.on('message', function(message) {
              alert('Le serveur a un message pour vous: ' + message);
            })
            var bouton1 = document.getElementById('RelaisOn');
            var bouton2 = document.getElementById('RelaisOff');
            bouton1.addEventListener('click', function() {
              socket.emit('allume', 'Allumer');
            }, false);
            bouton2.addEventListener('click', function() {
              socket.emit('eteint', 'Eteindre');
            }, false);
        </script>
    </body>
</html>