Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[Projet] Temperature logger
#1

Bonjour à tous !

Je vous présente mon projet d'enregistrement de température. L'objectif étant d'enregistrer régulièrement la température d'une ou plusieurs sondes DS18B20 et d'afficher les valeurs sous forme de graphique.

Sans plus tarder, voici le principe de fonctionnement :

[Image: 64741]
  • Le raspberry pi doit pouvoir envoyer régulièrement (1min) via HTTP la(les) température(s) mesuré(s) ainsi qu'un timestamp pour l'horodatage en appelant le script php "log.php"
  • Le script log.php prend 4 paramètres : motdepasse, temperature, temperature_2, date (l'horodatage) et enregistre le tout dans une BDD sqlite
  • Un second script, graph.php, se chargera de créer le graphique en accédant à la BDD

Coté raspberry pi :
Rien d'extraordinaire : le raspberry pi (:captain obviousSmile et un capteur DS18B20.
[Image: 4pk6.jpg]

Coté serveur :
En bleu, température intérieur, et en gris température extérieur (le pointeur de la souris n'apparait pas sur la capture, elle est à proximité de la bulle) :
[Image: 8q4f.png]

Github :
https://github.com/Anonyme/TemperatureLogger

Todo list :
A faire - En cours - Fait

temperature.py
  • Interpreter les codes d'erreur HTTP en cas d'échec

log.php :
  • Comparaison avec le dernier relevé. Si la différence de température est supérieur de 0.5°C, alors on enregistre la temperature
  • Quoi qu'il arrive, la temperature est enregistrée touts les 15 minutes

graph.php :
  • Choix d'une lib php pour la génération de graphique. La lib doit pouvoir interpréter un timestamp. Choix retenu : pChart Chart.js
  • Générer des graphiques selon les périodes suivantes : /heure /jour /semaine voir /mois et /an (Aperçu)
  • Interface semigraphique ("curses") ou graphique ("tkinter") | Choix retenu : tkinter | (Aperçu)
Répondre
#2

Beau projet Wink

Anciennement vodkaorange Wink
Forum français et communauté sur les caméras embarqués et dashcam : Dashcam-France.fr
Blog notes - Github
Répondre
#3

Merci Smile

J'ai modifier le script python, et je l'appelle toutes les 5 min via un cron.

Coté log.php, les modifications apportés seront :
A faire - En cours - Fait
  • Comparaison avec le dernier relevé. Si la différence de température est supérieur de 0.5°C, alors on enregistre la temperature
  • Quoi qu'il arrive, la temperature est enregistrée touts les 15 minutes

Coté graph.php voici ce qu'il y a faire :
  • Choix d'une lib php pour la génération de graphique. La lib doit pouvoir interpréter un timestamp. Choix retenu : pChart
  • Générer des graphiques selon les périodes suivantes : /heure /jour /semaine voir /mois et /an
Répondre
#4

Peut tu m'éclairer pour la tâche CRON s'il te plait ? Big Grin

Anciennement vodkaorange Wink
Forum français et communauté sur les caméras embarqués et dashcam : Dashcam-France.fr
Blog notes - Github
Répondre
#5

Dans un terminal, (user: pi , sans privilèges root)
Code :
[== Indéfini ==]
crontab -e
Ajouter la règle:
Code :
[== Indéfini ==]
*/1 * * * * python3.2 /home/pi/temperature/temperature.py

Quitter avec CTRL+X et enregistrer.

Donner les droits d’exécution au script python :
Code :
[== Indéfini ==]
chmod a+x temperature.py

Il doit y avoir également au tout début du script python #!/usr/bin/python

J'ai bien dans ma BDD un enregistrement toutes les minutes, mais décalé de quelques secondes (surement due au script lui même...), ce n'est pas très important dans mon cas.

Je te conseille d'aller jeter un œil sur ce site qui explique très bien comment utiliser cron : http://fr.openclassrooms.com/informatiqu...ulierement
Répondre
#6

Mise à jour du script log.php Smile
Répondre
#7

Aperçu d'un graphique des deux dernières heures :

[Image: lhri.png]

Il fait plutôt chaud dans ma chambre Cool
Répondre
#8

On se demande ce que tu faisais à partir de 20h46 :p

Serial Organisateur d'aPIro
Bloggeur Bidouilleur
Ydle, domotique DIY basée sur un raspberry pi
Répondre
#9

Tu peux nous éclairer sur l'utilisation de pChart ?

Je pense que tu en aidera plus d'un Big Grin

Anciennement vodkaorange Wink
Forum français et communauté sur les caméras embarqués et dashcam : Dashcam-France.fr
Blog notes - Github
Répondre
#10

Yaug a écrit :On se demande ce que tu faisais à partir de 20h46 :p

Le capteur s'était rapproché d'un peu trop près de la lampe ^^

vodkaorange a écrit :Tu peux nous éclairer sur l'utilisation de pChart ?

Je pense que tu en aidera plus d'un Big Grin

J'ai pompé une grosse partie du code de référence. Je l'ajoute dans le premier post.
Répondre
#11

Du nouveau :

- La génération de graphiques selon les périodes n'a pas été toujours programmé : actuellement, les deux dernières heures me convient. Un formulaire (une liste de choix ou des champs), et quelques conditions devraient suffire.
- J'ai reçu un petit écran de 4.3 pouces, deux entrée composites pour environ 17 euros ("car rear view lcd monitor" sur ebay) :

[Image: hv8g.jpg]

La résolution n'est vraiment pas terrible. Actuellement, je fais un simple 'tail -f out.log' et la règle crontab est :
Code :
[== Indéfini ==]
*/1 * * * * python3.2 /home/pi/temperature/temperature.py >> out.log

- Avec cet écran, je compte faire une petite interface semi-graphique avec le module "curses" de python ou une interface graphique avec Tkinter
Répondre
#12

Générer des graphiques selon les périodes suivantes : /heure /jour /semaine voir /mois et /an


Voici un aperçu :

[Image: f2jh.png]
Répondre
#13

ça commence à être pas mal
par contre tu as pas mal de variation quand même !

Serial Organisateur d'aPIro
Bloggeur Bidouilleur
Ydle, domotique DIY basée sur un raspberry pi
Répondre
#14

Effectivement, je fais aussi pas mal de minnage de Litecoin/ altcoin(scrypt) avec mon PC, ce qui fait pas mal de chaleur.

Mise à jour de temperature.py :
  • Interpreter les codes d'erreur HTTP en cas d'échec Fait
Répondre
#15

Et voilà, j'ai fait une première interface graphique :

[Image: zjlv.png]
[Image: npjx.jpg]

Codes sources mis à jour (premier post)
Répondre
#16

Sinon, pour éviter d'avoir énormément de code sur ton premier post, tu peux toujours utiliser Github Smile.
Répondre
#17

Bonjour,
je voudrais réaliser ce tuto,mais je n ai pas les compétences pour l adapter a mon installation et a ma configuration (enfin cela ne marche pas).je m'explique:
Pour mon installation:
j'ai 2 sondes ds18b20 cablées en parallèle d’après le tuto :https://learn.adafruit.com/adafruits-ras...e-sensing/
Pour la partie config:
-J'ai modifié le fichier etc/modules en ajoutant 2 lignes :w1-gpio et w1-therm
-Quand je me connecte en ssh sur mon raspberry et que je tape la ligne de commande suivante: find /sys/bus/w1/devices/ -name "28-*" -exec cat {}/w1_slave \; | grep "t=" | awk -F "t=" '{print $2/1000}',j'ai bien la temperature de mes 2 sondes qui s'affiche.

Pour l'installation du server:

sudo apt-get install lighttpd
sudo apt-get install php5-common php5-cgi php5
sudo lighty-enable-mod fastcgi-php
sudo service lighttpd force-reload
sudo chown www-data:www-data /var/www
sudo usermod -a -G www-data pi

Puis installation de SQLITE:

sudo apt-get install sqlite3
sudo apt-get install libsqlite3-0 libsqlite3-dev
sudo apt-get install php5-sqlite

Mise en place du tuto via Gitub
Je cré un dossier var/www/php (pour faire mes essais)
sudo nano gui.py et copie du code
sudo nano read_temp.py et copie du code (je change la ligne :device_file='/sys/bus/w1/devices/identifiant d'une de mes sondes)
sudo nano temperature.py(je change la ligne(urlServeur = 'http://192.168.1.18/php/log.php')
sudo nano graph.php et copie du code
sudo nano log.php et copie du code
Tous ces fichiers sont dans le dossier var/www/php
sudo chmod a+x temperature.py
crontab -e
J'ajoute cette ligne : */1 * * * * python3.2 /home/pi/temperaturelogger/temperature.py >> out.log

Création de la table(je crois que c'est la que le bas blesse,je suis un débutant)
je tape dans une fenetre en ssh
sqlite3 et en retour j'ai:
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
je tape ensuite:CREATE TABLE temperature_table (id INTEGER PRIMARY KEY, temperature, date) et en retour j'ai:
...>
et la j'attend mais ça reste comme ça
J'ai essayé:
sqlite3
sqlite> CREATE TABLE temperature_table (id INTEGER PRIMARY KEY, temperature, date); (ajout du ";") et la en retour jai:
sqlite>
Pour la parie : pChart2.1.3 , j'avoue que je n ai pas compris ce que je devais faire de ce coté la.

J'aimerai afficher la lecture de mes 2 sondes (log.php et grap.php)et ensuite voire ce que je peux faire avec 2 nouvelles sondes que j ai acheté (pas des ds18b20 mais des DHT22)

Voila,je sais que je risque de passer pour un boulet,j'ai essayé d’être le plus précis possible dans mes manipulations,mais la je bloque et je ne sais plus quoi faire.Merci d'avance à tous ceux qui prendront la peine ne serait ce que de lire mon message.
Répondre
#18

Salut,

Pour que ton topic incite un peu plus les gens à te répondre, n'hésite pas à utiliser des balises [ code ] (sans les espaces) pour citer tes commandes. Comme ceci :

Code :
sqlite3
sqlite> CREATE TABLE temperature_table (id INTEGER PRIMARY KEY, temperature, date);   (ajout du ";") et la en retour jai:
sqlite>
Répondre
#19

Salut à tous !
Je suis face plus ou moins au même probleme que JFdeBeauvais moi aussi.
Je ne connais quasiment pas le php et le mysql, mais en lisant le fichier log.php, j'ai trouvé ça.
Code :
// Connexion à la BDD
            $db = 'db.sqlite';
            $table = "temperature_table";
            $base= new SQLite3($db);
Du coup j'ai d'abord supposé qu'il fallait créer une table db.sqlite ou alors db.sqlite est un équivalent pour appeler le serveur mysql local ?
Bref, j'ai créer une base db.sqlite, mais ça n'empéche que quand j'essaye de faire la requête mysql cité ci dessus, elle fonctionne toujours pas, j'ai l'impression que la syntaxe n'est pas correcte, quelqu’un pourrais jeter un œil ?

Merci d'avance
Répondre
#20

La base de données n' utilise pas MySql mais SQlite3 qui est un autre serveur de BDD
Répondre
#21

Ah ok tout s'explique, il peut y avoir un conflit si on installe les deux en même temps ?
Et du coup sous SQLite3 , la commande SQL
Code :
[== Indéfini ==]
CREATE TABLE temperature_table (id INTEGER PRIMARY KEY, temperature, date);
fonctionnerais ?
merci Big Grin
Répondre
#22

Le test est rapide à faire Smile :

Code :
[email protected]:~$ sqlite3 t.db
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE temperature_table (id INTEGER PRIMARY KEY, temperature, date);
sqlite> .schema
CREATE TABLE temperature_table (id INTEGER PRIMARY KEY, temperature, date);
sqlite> select * from temperature_table;
sqlite>

Donc oui Wink.
Répondre
#23

Bonjour. Après plusieurs mois d'inactivité me revoilà ! Smile

J'ai récemment mis à jour le code. Voici les modifications :
  • Changement de la librairie de graph pour chart.js :

En bleu, température intérieur, et en gris température extérieur (le pointeur de la souris n'apparait pas sur la capture, elle est à proximité de la bulle) :
[Image: 8q4f.png]
  • Compatible avec plusieurs capteurs
  • Bug corrigé : lorsque la température est inférieure à 10°C, la lecture était faussé. Explications :

Voici l'ancien code :
Code :
[== Python ==]
def read_temp():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    temp_string = lines[1].strip()[-5:]
    temp_c = round(float(temp_string)/1000.0,precisionMesure)
    return temp_c

lines[1].strip()[-5:] ne retenait que les cing derniers caractères. Par exemple 21375 si la température est de 21.375. Or si la température est de 9°C, cela correspond à 9000 soit 4 caractères.

La solution :
Code :
[== Python ==]
def MesurerTemperature():
    f = open(Capteur, 'r')
    fichierCapteur = f.read()
    f.close()
    # On divise en deux ligne et on selectionne la deuxieme. Puis on découpe la ligne en mots à chaque espace. On ne retient que le 10ieme, auquel on lui retire les deux premiers caractères (t=). Ouf :P
    temperatureBrute = (fichierCapteur.split("\n")[1].split(" ")[9])[2:]
    temperatureLue.append(round(float(temperatureBrute)/1000.0,precisionMesure))
    return temperatureLue

Voili voilou. Big Grin
Les fichiers source sont dispo sur GitHub.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)