
Raspberry Pi – Thermomètre et contrôle Web domestique
Dans ce document, nous allons voir les étapes à suivre pour installer des capteurs de température sur un Raspberry Pi, la création d’une base de données pour stocker les températures et d’un script qui prend la température périodiquement. Nous allons créer un site web qui nous permettra d’obtenir la température actuelle ainsi qu’un graphique avec l’historique des températures. Pour boucler la boucle, Nous mettrons des boutons sur le site Web qui effectueront des tâches telles que l’allumage/la désactivation d’un thermostat!
La première chose sera de se procurer un capteur de température numérique comme le DS18B20 que l’on obtient sur eBay pour 1€ même submersible pour l’aquarium, Nous aurons également besoin d’une résistance de 4,7k. Nous pourrions même obtenir un capteur d’humidité pour obtenir les deux graphiques =).
Ce que nous allons faire, c’est permettre aux modules d’utiliser les thermomètres, nous installerons MySQL pour stocker l’historique des graphiques de température dans une base de données, nous allons créer un script en Python pour remplir la base de données avec des informations tous les 2 minutes et pour finir nous allons installer Apache et créer un site web où nous pouvons voir en temps réel les températures ainsi qu’un graphique avec l’historique. Et si nous nous rions au document précédent où nous avons vu comment utiliser un relais avec le Raspberry, Nous pouvons créer des boutons sur le même site Web qui nous permettent d’allumer ou d’éteindre une lumière. Commençons par activer les modules:
[Code source]Sudo ModProbe W1-GPIO
Sudo ModProbe W1-Therm[/Code source]
Au moment où je jette la framboise, je devrais la garder:
[Code source]sudo vim /etc/modules
w1-gpio
W1-THERM[/Code source]
Et nous essayons la commande suivante où nous verrons la température de chaque capteur:
[Code source]cat /sys/bus/w1/devices/ID_SENSOR/w1_slave[/Code source]
Installer MySQL, et créez la base de données,
Après avoir laissé les thermomètres déjà en marche, la prochaine chose sera d’installer MySQL et toutes les conditions requises pour créer une base de données et stocker les températures de dans mon cas 2 Capteurs de température (Environnement et aquarium). L’installation de MySQL Server vous demandera de définir le mot de passe root:
[Code source]Sudo apt-get install python-pip
apt-get install python-mysqldb
Demandes d’installation de sudo pip
Sudo pip Installer PyMySQL
Sudo apt-get install MySQL-Server MySQL-Client PHP5-MySQL[/Code source]
Nous allons dans MySQL et créons une base de données appelée 'Temperatures', Une table appelée 'temps’ avec 3 Champs 'Temp1', Saison 2’ et 'created_at':
[Code source]mysql -u racine -p
Mysql> CRÉER UNE BASE DE DONNÉES Températures;
Mysql> UTILISATION Températures;
CRÉER DES TEMPÉRATURES DE TABLE (
temp1 FLOTTEUR, temp2 FLOTTEUR, created_at CURRENT_TIMESTAMP PAR DÉFAUT DE L’HORODATAGE
);[/Code source]
Démon pour obtenir de la température,
Nous continuons à créer un script en Python qui lit les températures et les stocke dans la base de données précédente, Pour ce faire, nous pouvons utiliser le script suivant où nous allons modifier avec nos ID de capteur correspondants dans 'sensorids', On peut dire que c’est temperatura_demonio.py:
[Code source]Demandes d’importation
importer hashlib
Heure d’importation
capteurs = [« 28-00000523E071 », « 28-0000052391f2 »]
températures moyennes = []
pour capteur à portée(Len(Capteurs)):
températures = []
pour l’heure d’interrogation dans la plage(0,3):
texte = ”;
tandis que text.split(« n »)[0].Trouver(« OUI ») == -1:
tfile = ouvrir(« /sys/bus/w1/devices/"+ sensorids[capteur] +« /w1_slave »)
text = tfile.read()
tfile.close()
temps.sommeil(1)
deuxièmeligne = texte.split(« n »)[1]
temperaturedata = deuxièmeline.split(" ")[9]
température = flotteur(de températuredonnées[2:])
températures.append(température / 1000)
avgtemperatures.append(somme(Températures) / flotter(Len(Températures)))
Verseau = Températures moyennes[0]
Ambiante = températures moyennes[1]
importer MySQLdb
db = MySQLdb.connect(« localhost »,« racine »,« CONTRASENA_DE_ROOT »,« Températures »)
curseur = db.cursor()
curseur.exécuter(« ""INSERT INTO températures (Temp1,Temp2) VALEURS (%s,%s) """,(Verseau,environnement))
db.commit()[/Code source]
Nous exécutons le script plusieurs fois pour créer quelques enregistrements dans la base de données avec
[Code source]Python temperatura_demonio.py[/Code source]
Et nous vérifions simplement que la base de données qui contient des données avec:
[Code source]mysql -u racine -p
utilisation Températures;
Choisir * de Intérim;[/Code source]
Si tout est correct, nous programmons le script Python pour qu’il s’exécute toutes les deux minutes, Nous ajoutons la ligne suivante dans notre cron avec 'crontab -e’
[Code source]*/2 * * * * /usr/bin/python /accueil/pi/temperatura_demonio.py[/Code source]
Installation du serveur web,
Une fois que nous avons déjà un démon qui capture notre température dans une base de données, la prochaine chose sera de mettre un site web avec Apache et de mettre un portail sympa avec quelques graphiques JavaScript. Commencé:
[Code source]sudo apt-get install apache2 php5 libapache2-mod-php5
wget http://iada.nl/en/system/files/tempmon_2_0.zip[/Code source]
Décompressez le ZIP à l’adresse '/var/www/temp/’ et nous modifierons dans 'index.php’ Toutes les données de connexion correctes, ainsi que nous apporterons quelques modifications de base, Dans cet exemple, quelques mots allemands qui apportent.
[Code source]$mysqli = nouveau mysqli(« HÔTE », « UTILISATEUR », « MOT DE PASSE », « BASE DE DONNÉES »);
Gem laatste 24u –> Média
Capteur Binnen –> Verseau
Capteur Buiten –> Environnement[/Code source]
Et voici à quoi ressemblerait le web une fois que nous redémarrerions le service Apache! maquereau, Non?, Nous allons accéder au site HTTP://IP_RASPBERRY/temp
Ajouter des boutons supplémentaires au site Web,
Si nous voulons ajouter des boutons au site Web pour exécuter n’importe quelle action, Dans cet exemple, nous allons mettre un bouton pour allumer le thermostat qui est connecté de l’autre côté du relais (termostato_enciende.sh) & un autre pour l’éteindre (termostato_apaga.sh); plus deux autres boutons pour allumer & Éteindre l’éclairage du couloir (pasillo_enciende.sh & pasillo_apaga.sh). À la fin du fichier 'index.php', Avant la fin du body, nous avons ajouté:
[Code source]
<h1>Chauffage</h1>
<form id="relais" action="remote_relay.php" method="OBTENIR »>
<input type="bouton" id="Thermostat submitOn" style="bordure:1px solide #000; taille_police:40Px;" value="Sur" onClick="TermostatorelaisOn()"/>
<input type="bouton" id="ThermostatsubmitOff" style="bordure:1px solide #000; taille_police:40Px;" value="Désactivé" onClick="ThermostatorelamontArrêt()"/>
<h1>Allée</h1>
<input type="bouton" id="PasillosubmitOn" style="bordure:1px solide #000; taille_police:40Px;" value="Sur" onClick="PasillorelayOn()"/>
<input type="bouton" id="CouloirsubmitOff" style="bordure:1px solide #000; taille_police:40Px;" value="Désactivé" onClick="CouloirrelaieDésactivé()"/>
</Forme>
<?php $state = _GET $[« total »]; si ($state == « Thermostatoon »){ Exec(« /accueil/pi/termostato_enciende.sh »); } si ($state == « Termostatooff »){ Exec(« /accueil/pi/termostato_apaga.sh »); } si ($state == « Pasilloon »){ Exec(« /accueil/pi/pasillo_enciende.sh »); } si ($state == « Pasillooff »){ Exec(« /accueil/pi/pasillo_apaga.sh »); } ?>[/Code source]
Y editamos el script de Java que carga 'script.js’ Añadiendo las Siguientes modificaciones:
[Code source]window.onload = fonction(){
buttonOn = document.getElementById('TermostatosubmitOn');
buttonOn.onClick = TermostatorelaisOn;
buttonOff = document.getElementById('TermostatosubmitOff');
buttonOff.onClick = TermostatorelayOff;
buttonOff = document.getElementById('PasillosubmitOff');
buttonOff.onClick = PasillorelayOff;
buttonOff = document.getElementById('PasillosubmitOff');
buttonOff.onClick = PasillorelayOff;
}
fonction TermostatorelayOn(){
hidden = document.getElementById(« total »);
hidden.value = « Termostatoon »;
form = document.getElementById(« relais »);
form.method = « OBTENIR »;
form.action = « index.php »;
formulaire.soumettre();
}
fonction TermostatorelayOff(){
hidden = document.getElementById(« total »);
hidden.value = « Termostatooff »;
form = document.getElementById(« relais »);
form.method = « OBTENIR »;
form.action = « index.php »;
formulaire.soumettre();
}
fonction PasillorelayOn(){
hidden = document.getElementById(« total »);
hidden.value = « Pasilloon »;
form = document.getElementById(« relais »);
form.method = « OBTENIR »;
form.action = « index.php »;
formulaire.soumettre();
}
fonction PasillorelayOff(){
hidden = document.getElementById(« total »);
hidden.value="Couloir »;
form = document.getElementById(« relais »);
form.method = « OBTENIR »;
form.action = « index.php »;
formulaire.soumettre();
}[/Code source]
Et ce serait le résultat du site web d’un iPad où l’on verra d’une part la température actuelle de ces deux capteurs, N’oubliez pas que d’autres peuvent être ajoutés, ou utiliser un capteur d’humidité, etc… Et en bas on peut mettre des boutons aussi simples que ceux-ci pour pouvoir éteindre ou allumer un relais et ouvrir ou fermer un circuit électrique! Ou tout ce à quoi nous pouvons penser, aller… pour se connecter de l’extérieur (Internet) Vers ce site web de notre maison, nous pouvons utiliser des services gratuits tels que DynDNS ou NO-IP pour connaître à tout moment l’IP publique que nous avons en plus de configurer un VPN pour un accès sécurisé. Ainsi, de n’importe où, nous pouvons allumer le thermostat avant de rentrer à la maison, ou tout autre besoin que nous avons, Comme une alarme avec une caméra…