El script lo guardo en alguna ruta en concreto?
El campo de fecha y hora, creo que la BD tiene para añadir TIMESTAMP en un campo cuando añades un registro nuevo, no le tienes que pasar tu esa info. Asi me ahorro meter esos datos en la trama.
En cuanto pueda, hago esto. Tengo que recibir primero datos en la Rasp
Gracias
En la misma ruta que lo guardes ejecutas luego el comando mysql.
Si, se puede poner TIMESTAMP de forma automatica o que en el INSERT que se hace desde el script de python se use la función NOW(). Efectivamente en la trama no debe venir la fecha, ya que es el script de python el que la introduce automáticamente. Entonces, ¿prefieres TIMESTAMP automático o hacerlo con la función NOW() desde el INSERT
ejemplo con TIMESTAMP automático:
INSERT INTO trama(nodo, numero, temperatura, humedad) VALUES(1, 28, 17.7, 67.3);
ejemplo con NOW:
INSERT INTO trama(nodo, numero, fecha, temperatura, humedad) VALUES(1, 28, NOW(), 17.7, 67.3);
Pues desconozco cual es la mejor forma. Supongo que no habra mucha diferencia no?
También puedes instalar phpmyadmin, si quieres hacerlo de forma gráfica, para las pruebas.
Saludos
Lo tengo instalao el phpmyadmin
grafisoft escribió:Pues desconozco cual es la mejor forma. Supongo que no habra mucha diferencia no?
Ninguna en realidad. De hecho en tu caso puede que sea más cómodo el timestamp. Cambia el script por este otro, ademas añado la batería que no había puesto antes:
Código: CREATE DATABASE sensores;
GRANT ALL PRIVILEGES ON sensores.* to cliente@localhost IDENTIFIED BY 'cliente2014';
FLUSH PRIVILEGES;
USE sensores;
CREATE TABLE trama(id INT NOT NULL AUTO_INCREMENT, nodo TINYINT NOT NULL, numero INT NOT NULL, fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP, bateria FLOAT, temperatura FLOAT, humedad FLOAT, PRIMARY KEY (id));
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 1, '2014-12-20 00:00:00', 3.8, 25.7, 77.4);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 1, '2014-12-20 00:00:00', 3.77, 25.7, 77.4);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 2, '2014-12-20 01:00:00', 3.8, 25.4, 67.4);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 2, '2014-12-20 01:00:00', 3.45, 25.4, 67.4);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 3, '2014-12-20 02:00:00', 3.8, 25.8, 56.8);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 3, '2014-12-20 02:00:00', 3.9, 25.8, 56.8);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 4, '2014-12-20 03:00:00', 3.4, 25.1, 88.9);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 4, '2014-12-20 03:00:00', 3.8, 25.1, 88.9);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 5, '2014-12-20 04:00:00', 3.66, 24.6, 45.7);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 5, '2014-12-20 04:00:00', 3.8, 24.6, 45.7);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 6, '2014-12-20 05:00:00', 3.83, 21.9, 67.1);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 6, '2014-12-20 05:00:00', 3.81, 21.9, 67.1);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 7, '2014-12-20 06:00:00', 3.55, 25.7, 34.2);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 7, '2014-12-20 06:00:00', 3.9, 25.7, 34.2);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 8, '2014-12-20 07:00:00', 4.2, 21.2, 55.6);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 8, '2014-12-20 07:00:00', 4.3, 21.2, 55.6);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 9, '2014-12-20 08:00:00', 3.77, 24.8, 56.0);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 9, '2014-12-20 08:00:00', 3.8, 24.8, 56.0);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 10, '2014-12-20 09:00:00', 3.45, 27.7, 56.3);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 10, '2014-12-20 09:00:00', 3.65, 27.7, 56.3);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 11, '2014-12-20 10:00:00', 3.8, 29.7, 56.6);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 11, '2014-12-20 10:00:00', 3.8, 29.7, 56.6);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 12, '2014-12-20 11:00:00', 3.90, 30.1, 56.9);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 12, '2014-12-20 11:00:00', 3.56, 30.1, 56.9);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 13, '2014-12-20 12:00:00', 3.8, 31.5, 57.2);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 13, '2014-12-20 12:00:00', 3.8, 31.5, 57.2);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 14, '2014-12-21 00:00:00', 3.33, 25.7, 77.4);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 14, '2014-12-21 00:00:00', 3.8, 25.7, 77.4);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 15, '2014-12-21 01:00:00', 3.8, 25.4, 67.4);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 15, '2014-12-21 01:00:00', 3.8, 25.4, 67.4);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 16, '2014-12-21 02:00:00', 3.78, 25.8, 56.8);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 16, '2014-12-21 02:00:00', 3.8, 25.8, 56.8);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 17, '2014-12-21 03:00:00', 3.8, 25.1, 88.9);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 17, '2014-12-21 03:00:00', 3.8, 25.1, 88.9);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 18, '2014-12-21 04:00:00', 3.45, 24.6, 45.7);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 18, '2014-12-21 04:00:00', 3.46, 24.6, 45.7);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 19, '2014-12-21 05:00:00', 3.47, 21.9, 67.1);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 19, '2014-12-21 05:00:00', 3.48, 21.9, 67.1);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 20, '2014-12-21 06:00:00', 3.8, 25.7, 34.2);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 20, '2014-12-21 06:00:00', 3.8, 25.7, 34.2);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 21, '2014-12-21 07:00:00', 3.8, 21.2, 55.6);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 21, '2014-12-21 07:00:00', 3.8, 21.2, 55.6);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 22, '2014-12-21 08:00:00', 3.8, 24.8, 56.0);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 22, '2014-12-21 08:00:00', 3.4, 24.8, 56.0);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 23, '2014-12-21 09:00:00', 3.7, 27.7, 56.3);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 23, '2014-12-21 09:00:00', 3.8, 27.7, 56.3);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 24, '2014-12-21 10:00:00', 3.9, 29.7, 56.6);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 24, '2014-12-21 10:00:00', 3.55, 29.7, 56.6);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 25, '2014-12-21 11:00:00', 3.8, 30.1, 56.9);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 25, '2014-12-21 11:00:00', 4.2, 30.1, 56.9);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(1, 26, '2014-12-21 12:00:00', 4.1, 31.5, 57.2);
INSERT INTO trama(nodo, numero, fecha, bateria, temperatura, humedad) VALUES(2, 26, '2014-12-21 12:00:00', 4.0, 31.5, 57.2);
Jero escribió:También puedes instalar phpmyadmin, si quieres hacerlo de forma gráfica, para las pruebas.
Es una buena herramienta para trabajar con el mysql desde el navegador.
Bueno, pues le he echado un tiempecillo al proyecto y ya he creado la página web que muestra los datos (a falta de poner el plano de la casa):
http://sensores.homelinux.net/
Se filtra mediante nodo (en los datos de prueba hay dos nodos) y/o fecha (en los datos de prueba está desde el 20 de Diciembre hasta hoy a las 16 horas) .
Las gráficas muestran la media de todos los datos de cada hora durante 24 horas del nodo y día seleccionados (por defecto los muestra del nodo 1 y del día en curso).
La tabla muestra el registro completo del nodo y día seleccionados.
Como decía antes, ya sólo me falta poner el plano de la casa, que tendrá puestos los últimos datos de cada habitación.
Que fiera. Hoy estare fuera casi todo el dia  A ver si le meto un empujoncito en lo que me falta.
Vaya pasada de proyecto!!
Yo tengo una raspberry y no me importaría comprar unos nrf24L01 para ayudar con pruebas
El que va despacio soy yo, que no saco un rato libre ni por casualidad
Bueno, pues ya le he añadido el plano de la casa indicando donde están situados los nodos y qué información más reciente contienen, además de pintarse de un color u otro dependiendo de la temperatura.
Además la tabla de abajo muestra en orden inverso los valores, por lo que lo primero que se ve es el más reciente del día elegido.
Le he puesto que la página se refresque cada 5 minutos por si sola.
Al script de creación de la BBDD hay que añadirle una línea para crear un indice en la tabla y así las consultas sean más rápidas:
Código: ALTER TABLE trama ADD INDEX (nodo, fecha);
Genial, en estos dias que tengo vacaciones, remato el proyecto ^^
Sigo peleándome con el modulo conectado directamente a la rasp, sin resultados. Voy a pasar al plan B y volveré en otro momento a este punto. Voy a conectar el modulo nRF via UART mediante un nodo. Por tanto sera comunicación serie con la rasp. El tema sera como capturar la info que le entre, supongo que no sera complicado.
Mañana probare a hacerlo así, y de paso empezare a programar la trama, que aun no lo tengo hecho.
Con pySerial será suficiente. Por cierto, ¿va a estar la raspberry pi conectada a internet? Se le podría programar para que cada x tiempo pusiera en twitter un mensaje de cómo están los nodos o que publique alarmas.
Va conectada al router, asi que tiene salida a internet. Eso que comentas, son funciones extra
He estado haciendo pruebas con un nrf24l01 conectado a la Raspberry Pi y otro conectado a un Arduino (he seguido este tutorial http://www.akirasan.net/raspbpi-arduino-...-nrf24l01/ ) y ha funcionado:
Este es el código de Arduino:
Código: #include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
//nRF24 Cableado utilizado. El pin 9 es CE y 10 a CSN/SS
// CE -> 9
// SS -> 10
// MOSI -> 11
// MISO -> 12
// SCK -> 13
RF24 radio(9,10);
const uint64_t pipe = 0xcacadebacaLL;
int nodo = 1;
int trama = 1;
float bateria = 4.0;
float temperatura = 25.0;
float humedad = 50.0;
void setup(void)
{
Serial.begin(9600);
radio.begin();
radio.setChannel(14);
radio.setRetries(15,15);
radio.setPayloadSize(32);
radio.openWritingPipe(pipe);
radio.printDetails(); //Debug
radio.powerUp();
Serial.println("Esperando 10 segundos");
delay(10000);
};
void loop()
{
char buffer[7];
char texto[32];
String cadena = String(nodo) + "#" + String(trama) + "#" + "BA:";
dtostrf(bateria, 4, 2, buffer);
cadena += String(buffer) + "#" + "TE:";
dtostrf(temperatura, 5, 2, buffer);
cadena += String(buffer) + "#" + "HU:";
dtostrf(humedad, 5, 2, buffer);
cadena += String(buffer);
cadena.toCharArray(texto, sizeof(texto));
Serial.println(cadena);
bool ok = radio.write(&texto, cadena.length());
trama++;
delay(1000);
}
Y este el de la Raspberry Pi en python:
Código: #!/usr/bin/python
from nrf24 import NRF24
import time
pipe = [0xca, 0xca, 0xde, 0xba, 0xca]
radio = NRF24()
radio.begin(0, 0, 25, 18) #Set CE and IRQ pins
radio.setRetries(15,15)
radio.setPayloadSize(32)
radio.setChannel(14)
radio.setPALevel(NRF24.PA_MAX)
radio.openReadingPipe(1, pipe)
radio.startListening()
radio.printDetails()
radio.powerUp()
while True:
while not radio.available(0):
time.sleep(0.250)
recv_buffer = []
radio.read(recv_buffer)
out = ''.join(chr(i) for i in recv_buffer)
print out
No uso arduino, uso PIC, y no logro comunicarlos. Algún parámetro de configuración debo tener diferente. Probare la libreria para python tambien. Y volvere a repasar todos los parametros.
Seguro que es eso, cómo lo tienes configurado?
El ultimo día estuve ya con el datasheet del nrf, la libreria de PIC y el código de la rasp para intentar dejar todos los parámetros iguales. Tengo un arduino por aquí, probare también con el arduino para al menos, poder confirmar que realmente funciona. Porque la comunicación la compruebo con otro nodo, y si que recibo cosas, pero en la rasp no salen. Al final, sera una tontería de estas que te hacen volverte loco unos dias.
Puede ser que estés usando la librería de bizintek? En esa librería solo se configura un byte de address (repetido 4 veces) mientras que en otras se configuran los 5 a pelo.
|