Très joli node.js javascript script qui permet de retourner une valeur de lumière depuis un senseur.

Un client Web (par exemple un Raspberry Pi) peut ainsi vérifier sa valeur en accédant en local http://192.168.1.61:8001/lightsync

var http = require("http");
var url  = require('url');
var fs   = require('fs');

var io   = require('/usr/local/lib/node_modules/socket.io'); 
var b    = require('/usr/local/lib/node_modules/bonescript');

//Lets define a port on 192.168.1.61 where we want to listen to
const PORT=8001; 

//console.log("Server listening on port %s", PORT);

var server = http.createServer(function(request, response) {
var path = url.parse(request.url).pathname;

  switch(path){
    case '/':
          response.writeHead(200, {'Content-Type': 'text/html'});
          response.write('Hello JBB<BR><BR>');
          response.write('To get the light sensor value < 9990 :  ');
          response.write('http://192.168.1.61:8001/lightsync<BR> '); 
          response.end();
          break;
    case '/lightsync':
          response.writeHead(200, {'Content-Type': 'text/plain'});

          var reading = b.analogRead('P9_40');   //Synchronous light value (< 1.0 Volt))
          value = (10000 - ((1.0 - (reading*reading*reading)) * 10000)) | 0

          response.write('' + value);  //string conversion          
          response.end();
          break;
    default:
        response.writeHead(404);
        response.write("opps this doesn't exist - 404");
        response.end();
        break;
    }
  });

server.listen(PORT);

var value = 9999

var listener = io.listen(server);
listener.sockets.on('connection', function(socket) {
    b.analogRead('P9_40', computeValue);
    
    socket.emit('message', {'message': value});
});

function computeValue(x) {
    reading = x.value
    value = (10000 - ((1.0 - (reading*reading*reading)) * 10000)) | 0 
}


Notes:

  • Le senseur est connecté sur le PIN analogique P9_40 ( Beaglebone Black pins (broches) )
  • Le senseur est installé à l'extérieur au bout d'un câble d'environ 3 mètres
  • Le reading*reading*reading permet d'augmenter les valeurs moyennes
  • La nuit nous avons bien une valeur de 0
  • En pleine journée ensoleillée, nous avons une valeur proche de 10000
  • Une valeur de 6000 est une bonne limite pour décider d'allumer des luminaires à l'intérieur, par exemple sur un Raspberry Pi avec un relais, voir désactiver un senseur de présence qui contrôle aussi ces mêmes luminaires.

    La vérification des erreurs n'est pas évidente!   Voir le watchdog sur le Beaglebone Black.