User Tools

Site Tools


raspberry_pi:projects:temperature_sensor

This is an old revision of the document!


Sistema de comprovació de temperatures del CPD (raspi)

Configuracio inicial raspberry pi

Veure capitol configuració inicial Raspberry

OS per RPI

Obtindre imatge Raspbian/Lite desde https://www.raspberrypi.org/downloads/raspbian/

Obtindre programa Win32 Disk Imager http://sourceforge.net/projects/win32diskimager/

Iniciar Win32 Disk Imager y seleccionar la imatge Rapsbian descarregada (.img file) amb el selector “Image File”. Seleccionar la lletra on es la SD y “Write”.

Imager demana confirmar sobreescritura. Seleccionar “Yes”. Esprar a la confirmacio y “OK”, tancar Disk Imager y extreure la SD card.

ajust basic Raspberry Pi

Insertar la SD card a la Raspberry Pi (Conectar teclat y display abans de conectar la alimentacio).

Rasperry Pi arrenca i demana username y password.

Per defecte son :

username: pi

password: raspberry

Despres de arrencar es pot entrar a configuracio amb:

sudo raspi-config

A la configuracio:

  1. Cambiar password/username si es creu necessari
  2. Configurar arrencada per consola smb option 1, console.
  3. Ajustar/comprobar configuracio de Hora/idioma/teclat.
  4. De les opcions de interfacing , seleccionar P2 - SSH enable
  5. Open advanced options → Expand filesystem

Finalment anar a “Finish” i reiniciar RPI amb:

sudo reboot

connexio PC(SSH)

Desde Windows es pot fer servir PuTTY http://www.chiark.greenend.org.uk/~sgtatham/putty….

Per saber la ip de la Raspberry es pot fer servir:

ifconfig

cablejat Sensor

instal.lacio llibreries DHT22

Actualitzar la Raspberry pi.

sudo apt-get update
 
sudo apt-get upgrade

Install Adafruit Python code. Necezsari per llegir el sensor DHT22. Tambe pèrmet comprovar que tot esta montat correctament.

Primer, instalar compilador y llibreria python

sudo apt-get install build-essential python-dev python-openssl

Situarse al directori on es vol instal.lar el codi Adafruit , per defecte /home/.

cd /home/pi

Pot fer falta instl.lar Git si no esta inclos per defecte:

sudo apt-get install git

Clonar el repositori git:

git clone https://github.com/adafruit/Adafruit_Python_DHT.g...

Anar al directori corresponent:

cd Adafruit_Python_DHT

And finally install the Adafruit library. Type following and press enter.

sudo python setup.py install

prova del DHT22

Anar al directori Adafruit_Python_DHT y despres al directori examples. Entrar el seguent i pulsar enter enter.

cd /home/pi/Adafruit_Python_DHT/examples

provar el funcionament amb:

sudo ./AdafruitDHT.py sensortipus GPIO

En el cas del cablejat del texte:

sudo ./AdafruitDHT.py 22 4

Si tot esta ok, es veura la lectura del sensor.

configuracio MySql per guardar dades Temperatura

Instalar Mysql/MariaDb y els complements necesaris:

sudo apt-get install mysql-server python-mysqldb

Entrar al mode consola de sql.

sudo mysql -u root -p -h localhost

Pulsar Enter per password (buit)y entrarem en la consola MariaDb

Sobre consola

Primer, crear base de dades temperatures:

CREATE DATABASE temperatures;

Seleccionar la base de dades creada:

USE temperatures;

Crear usuari i garantir acces a la base de dades a aquest usuari:

CREATE USER 'logger'@'localhost' IDENTIFIED BY 'password';
 
GRANT ALL PRIVILEGES ON temperatures.* TO 'logger'@'localhost';
 
FLUSH PRIVILEGES;

El usuari/privilegis estan creats. Ara es possible cambiar de l´usuari root a aquest nou usuari:

quit

Tornar a conectar amb el nou usuari

sudo mysql -u logger -p -h localhost

Donar la contrasenya implementada al pas anterior.

Crear dues taules. Temperaturedata per guardar les dades del sensor y data/hora y mailsendlog that amb informacio del correus que han superat els limits de temperatura.

Per crear les taules:

USE temperatures;

Crear la primera taula amb les columnes dateandtime, sensor, temperature y humidity:

CREATE TABLE temperaturedata (dateandtime DATETIME, sensor VARCHAR(32), temperature DOUBLE, humidity DOUBLE);

Crear segona taula amb columnes dateandtime, triggedsensor, triggedlimit y lasttemperature:

CREATE TABLE mailsendlog (mailsendtime DATETIME, triggedsensor VARCHAR(32), triggedlimit VARCHAR(10), lasttemperature VARCHAR(10));

Es pot confirmar, que les taules buides estan creades amb:

SELECT * FROM mailsendlog;
SELECT * FROM temperaturedata;

Si les taules exiteixen, es veura: “Empty Set (0.00 sec)”

La base de dades esta configurada es pot sortir de mysql:

quit

Reiniciar mysql perque els canvis tinguin efecte:

sudo /etc/init.d/mysql restart

temperature Logger Code

Asegurarse de estar en el directori on es vol instal.lar el DHT22-TemperatureLogger, per defecte /home/pi/:

cd /home/pi

Clonar el respositori git:

git clone https://github.com/jjpFin/DHT22-TemperatureLogger

Anar al directori DHT22-TemperatureLogger:

cd /home/pi/DHT22-TemperatureLogger

Obrir config.json en un editor:

sudo nano config.json

Llistat de configuracions:

#mysql:Configuracio de la base de dades.
 
#sensors: Configuracions per els sensor conectats a la RPI.
 
#name: nom dels sensor y GPIO on esta conectat.
 
#SensorType: 22 per un dht22 .
 
#Temperature low and high  limits per llençar els correus de alerta.
 
#Humidity limits igual per humitat.
 
#Threshold :llindar de activacio de advertencies.
 
#mailInfo: Informacio per els email. 
 
#Senderaddress: Remitent dels correus.
 
#Receiveraddress: Receptor dels correus.
 
#Username: nom usuari correu.
 
#Password: password  email de enviamaent.
 
#subjectMessage: Capçalera del correu.
 
#subjectWarning: Motiu del correu.
 
#sqlBackupDump: configuracio Backup dumps.
 
#BackupDumpEnabled y/n indica si es vol backup de sql.
 
#backupDay dia per el backup. 1-7 (Monday to Sunday) 0 daily.
 
#backupHour hora del dump - 0-24
 
#backupDumpPath  path on dump es guardat. Per defecte carpeta Backups.
 
#weeklyAverages: Define si s´envien promitjos setmanals.
 
#weeklyAveragesSendingEnabled: y significa activat.
 
#weekDayForSendingAverages: dia de la setmana dels promitjos. 1-7 (Monday to Sunday)
 
#hourOfTheDayForSendingAverages: hora del dia 0-24.
 
#useFahrenheits: y enabled, n disabled. 
 
#mailSendingTimeoutInFullHours: 0-x
 
#Per reduir spam. A 0, logger envia mail a cada advertencia. Valors mes alts limiten els correus a un per hora. Utilitzat perque la #safata de entrada no es pleni de advertencies.
 
#adafruitPath:  path per Adafruit_Python_DHT  per defecte/home/pi/Adafruit_Python_DHT/ Script AdafruitDHT.py.

Un cop fetes les configuracions, premer Ctrl+x y guardar amb “Y”. Provar el funcionament del DHT22-TemperatureLogger :

python DHT22logger.py

Si tot es correcte el programa escriura a la base de dades per comprovar que es aixi entrar a la base de dades:

sudo mysql -u logger -p -h localhost

Posar la password corresponent. A la consola mysql:

USE temperatures;
 
SELECT * FROM temperaturedata;

Comprovar que les lectures s´escriuen a la base de dades, per sortir:

quit

lectura automatica Sensor

Afegir una tasca crontab:

crontab -e

Seleccionar opcio /bin/nano y s´obrira el crontab.

Afegir al crontab la tasca (per exemple cada 15 minuts).

*/15 * * * * python /home/pi/DHT22-TemperatureLogger/DHT22logger.py

Sortir i guardar Ctrl+x seleccionant “Y” quan es pregunti.

Configurar IP estatica Raspbian

Per configurar una IP estática a Raspbian s´ha de edoitar el fitxer /etc/dhcpcd.conf :

sudo nano /etc/dhcpcd.conf

Si mirem el contingut veurem linies comentades (comencen amb '#') que tenen un exemple de configuració IP estática

# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

thinkspeak

Configuració del compte de ThingSpeak.com

Registrar-se a https://thingspeak.com Si no tenim compte previ a MathWorks ThingSpeak ens redirigueix, amb la possibilitat de emprar el amteix mail per el registre a:https://www.mathworks.com.

Crear un nou channel al nostre perfil i afegir dos field chart (Temperatura i Humitat). Obtindre el “Write API Key” del channel creat servira per configurar el script de conexio a thingspeak i enviament de dades.

Script Python per el envíament de dades al compte de ThingSpeak ts.py

    import sys
    import urllib2
    import RPi.GPIO as GPIO
    import Adafruit_DHT
    # Write API Key ThingSpeak.com
    miWriteAPIKey = "XXXXXXXXXXXXXXXX"
    # Número GPIO de conexión out del sensor dht22 a RaspberryPi
    raspiNumGPIO = "X"
    def getSensorData():
       RH, T = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, raspiNumGPIO)
       return (str(RH), str(T))
    def main():
       print 'Iniciando...'
       baseURL = 'https://api.thingspeak.com/update?api_key=%s' % miWriteAPIKey
       while True:
           try:
               RH, T = getSensorData()
               f = urllib2.urlopen(baseURL + "&field1=%s&field2=%s" % (RH, T))
               print f.read()
               f.close()
               sleep(5)
           except:
               print 'Terminado.'
               break
    if __name__ == '__main__':
    main()

Canvis al codi basic

A miWriteAPIKey introduir la Write API Key del compte corresponent de thingspeak corresponent control-temperatures@fidmag.com.

miWriteAPIKey = "XXXXXXXXXXXXXXXX"

Canviat:

f = urllib2.urlopen(baseURL + "&field2=%s&field1=%s" % (RH, T))

S´ha canviat l´ordre per que apareixi primer la temperatura que es la dada mes rellevant.

automatitzar l´enviament de dades

Afegir una tasca crontab:

crontab -e

Seleccionar opcio /bin/nano y s´obrira el crontab.

Afegir al crontab la tasca (per exemple cada 15 minuts).

*/15 * * * * python /home/pi/Adafruit_Python_DHT/DHT22-TemperatureLogger/ts.py

Sortir i guardar Ctrl+x seleccionant “Y” quan es pregunti.

Canals Thingspeak

enviament de e-mails de alerta amb thingspeak

fer un analisi MATLAB per enviar el mail

  • Obtindre una “alert API key” desde Accounts>My profile. Les API de alertes comencen amb “TAK”
  • Crear un nou MathLab Analysis a Apps>MathLab Analysis. Clickar “new” a la part superiort i escollir la plantilla en blanc i escriure o enganxar el seguent codi:
alert_body = 'This is the text that will be emailed';
alert_subject = 'This will be the subject of the email';
alert_api_key = 'YOUR_API_KEY_FROM_STEP_1';
alert_url= "https://api.thingspeak.com/alerts/send";
jsonmessage = sprintf(['{"subject": "%s", "body": "%s"}'], alert_subject,alert_body);
options = weboptions("HeaderFields", {'Thingspeak-Alerts-API-Key', alert_api_key; 'Content-Type','application/json'});
result = webwrite(alert_url, jsonmessage, options);
  • Ajustar el alert body, subject y la (alert) API key.
  • Click “save and Run” i es rebrá un email en uns pocs instants.
  • Conectar el MATLAB Analysis a TimeControl o React que depengui del valor del canal en el que estas interessat.

React App

React treballa amb MATLAB® Analysis per fer accions quan les dades del canal compleixen unes determinades condicions.

Definir Reaccions a les dades del canal

Seleccionar Apps>React

  1. Click a “New React”
  2. Seleccionar Opcions

  • React name: Nom que es vol donar a la alerta
  • Condition Type: Es pot seleccionar si la condicio es un string, numeric..etc en el nostre cas numeric
  • Test Frecuency: Frequencia amb la que es vol comprobar la reaccio per exemple on data insertion ; cada cop que s´introduieix dades…
  • Condition:
  • If channel : canal de Thingspeak a analitzar
  • Field : camp que vol analitzar exemple Field 1 temperatura
  • Is greather than: es mes gran, es poden seleccionar altres condicions
  • 27: Valor de llindar
  • Action: en el nostre cas MathLab Analisys
  • Code to execute: El nom donat al script anterior de enviament de E-mail
  • Options: Seleccionar si es vol executar l´script cada cop que es compleix la condicio o nomes la primera vegada
  • Save React: Guardar el módul React corresponent.

condition no Data Check

Al apartat condition hi ha la posibilitat de activar no data check, condicio per reaccionar en cas de que no es rebin dades procedents del sensor.Es pot configurar que si es compleix aquesta condicio s´activi el modul react corresponent.

sql

CREATE TABLE temperaturedata (dateandtime DATETIME, sensor VARCHAR(32), temperature DOUBLE, humidity DOUBLE);
CREATE TABLE mailsendlog (mailsendtime DATETIME, triggedsensor VARCHAR(32), triggedlimit VARCHAR(10), lasttemperature VARCHAR(10));

referencies

raspberry_pi/projects/temperature_sensor.1738769024.txt.gz · Last modified: 2025/02/05 15:23 by jmbargallo