Professional Documents
Culture Documents
TuR
otarialspberyP
Giraceatlm
r perautradael
CPUconNodsyH
ejg.ihchasrt
Hola! Hoy vengo a ensearos un proyecto en el que estoy trabajando. He llegado al punto en el que
pre ero ensearos cmo hacerlo antes que mostraros el proyecto cuando acabe todo (que tambin
lo har). Hace poco, nuestro compaero AlexCorvis public una entrada sobre Xively y Raspberry
Pi, una manera de ver estadsticas y el estado de nuestra Raspberry Pi en Internet, es decir, el
Internet de las cosas. Esto no vale slo para Raspberry Pi, pero como sabemos que os gusta, lo
aplicamos a ello.
converted by Web2PDFConvert.com
Voy a contaros mi planteamiento principal para llevar a cabo esto con el menor consumo de
recursos por parte de la Raspberry Pi. En Linux, podemos ver por ejemplo, la temperatura en
miligrados en un archivo haciendo simplemente esto:
1 cat /sys/class/thermal/thermal_zone0/temp
Muy sencillo, no? Pues lo que pens hacer es poner un watchdog que me controlara cundo
cambiaba el chero para que cuando lo hiciese, coger su contenido y meterlo en la gr ca.
Problema: el archivo cambiaba de contenido pero veas sus propiedades y la ltima hora de
modi cacin era la hora en la que haba encendido el ordenador. Cmo puede modi carse un
archivo sin modi carse? An sigo sin entenderlo, as que si algn linuxero experto lo sabe Por
favor que me lo diga!
Bueno, pues viendo el fracaso de esto, fu a lo fcil: cada X tiempo ejecuto un comando para saber
la temperatura y gra co lo que me devuelva. Haciendo esto, la Raspberry Pi funciona bastante
bien. No se calienta ni se queda atascada y va el navegador bastante fluido.
Despus de este rollo, voy a ensearos lo que tenis que hacer para acabar realizando este tutorial:
PiyrRpberasalW
enebdoriversunaraltnsI 1.
Esto lo podis hacer siguiente tutorial: Instalar servidor Web Raspberry Pi
Si no tenis Raspberry Pi pero lo queris hacer en cualquier Linux, podis seguir este: Instalar
converted by Web2PDFConvert.com
PiyrRpberasal npm
eysjnode.araltnsI 2.
Simplemente introduciremos los siguientes comandos:
1 sudo apt-get install nodejs npm
Es lo mismo para cualquier Linux. Recordad que al final la Rasberry Pi con Raspbian es a grandes
rasgos un Debian.
oectoypr delapetcaralem
earosCr3.
1 mkdir /var/www/Raspberry-Pi-Status
oi.SetockaraltnsI 4.
Ejecutamos el siguiente comando:
1 npm install socket.io
1 cd js
1 nano server.js
No explicar el cdigo paso a paso porque est visto en los tutoriales de node.js de Geeky Theory.
Voy diciendo lo que hago en los comentarios:
1 /**
2 * Autor: Mario Prez Esteso
3 * Web: geekytheory.com
4 */
5
6 var app = require('http').createServer(handler),
7
io = require('socket.io').listen(app),
8 fs = require('fs'),
converted by Web2PDFConvert.com
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
sys = require('util'),
exec = require('child_process').exec,
child;
//Escuchamos en el puerto 8000
app.listen(8000);
//Si todo va bien al abrir el navegador, cargaremos el archivo index.html
function handler(req, res) {
fs.readFile(__dirname+'/../index.html', function(err, data) {
if (err) {
//Si hay error, mandaremos un mensaje de error 500
console.log(err);
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
//Cuando abramos el navegador estableceremos una conexin con socket.io.
//Cada 5 segundos mandaremos a la grfica un nuevo valor.
io.sockets.on('connection', function(socket) {
setInterval(function(){
child = exec("cat /sys/class/thermal/thermal_zone0/temp", function (error, stdout, stderr) {
if (error !== null) {
console.log('exec error: ' + error);
} else {
//Es necesario mandar el tiempo (eje X) y un valor de temperatura (eje Y).
var date = new Date().getTime();
var temp = parseFloat(stdout)/1000;
socket.emit('temperatureUpdate', date, temp);
}
});}, 5000);
});
<!DOCTYPE html>
<!-Autor: Mario Prez Esteso <mario@geekytheory.com>
Web: geekytheory.com
-->
<html>
<head>
<meta charset="utf-8" name="viewport" content="width=device-width" />
converted by Web2PDFConvert.com
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<title>
Raspberry Pi Status
</title>
<!-- Importo el mdulo socket.io que tengo en el proyecto -->
<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<!-- Importo el archivo Javascript de Highcharts directamente desde su servidor -->
<script src="http://code.highcharts.com/highcharts.js"></script>
</head>
<body>
<!-- Creo el div donde tendr la grfica. Le digo que ocupe todo el ancho
de la pantalla y 400px de alto -->
<div id="chart" style="width:100%; height:400px;"></div>
<!-- Comienza el Javascript -->
<script>
// Creo un WebSocket. Poned la IP de vuestra Raspberry Pi!
var socket = io.connect('http://192.168.1.9:8000');
// Creo un nuevo objeto 'Chart'
var chart;
chart = new Highcharts.Chart({
chart: {
renderTo: 'chart',
defaultSeriesType: 'spline',
events: {
load: function() {
// Cada vez que reciba un valor desde el socket, lo meto en la grfica
socket.on('temperatureUpdate', function (time, data) {
var series = chart.series[0];
series.addPoint([time, data]);
});
}
}
},
rangeSelector : {
selected : 100
},
title: {
text: 'CPU Temperature Raspberry Pi'
},
xAxis: {
type: 'datetime',
tickPixelInterval: 150,
maxZoom: 20 * 1000
},
yAxis: {
minPadding: 0.2,
maxPadding: 0.2,
title: {
text: 'Temperature C',
margin: 80
}
},
series: [{
name: 'Temperature',
data: []
}]
});
</script>
</body>
</html>
gocdidelnecuiEj7.
Ejecutamos el siguiente comando:
1 nodejs js/server.js
converted by Web2PDFConvert.com
Como siempre, podis ver todo el cdigo en GitHub. Haced fork, starreadlo, Lo que queris!
HIGHCHARTS
JAVASCRIPT
JS
NODE
TEMPERATURA
NODEJS
RASPBERRY PI
TEMPERATURE
NODEJS
COMPARTIR:
converted by Web2PDFConvert.com
AUTORES
converted by Web2PDFConvert.com