Bonsoir ,avec une sonde branché sur mon raspberry , je récupère les valeurs de température toute les 5 minutes dans un fichier ,avec ces valeurs je fais un graph en php .
Mon probleme , je voudrais trouvé une solution pour accélérer l'affichage de ce graphe , il faut environ 1 minute pour qu'il apparaissent dans le navigateur , c'est vraiment trop long .
Voila le code php de mon graphe qui est certainement a optimisé .
# Une DB ?
Posté par Pouetpouet . Évalué à 2. Dernière modification le 27 mars 2015 à 21:11.
Peut-être faudrait-il songer à utiliser des outils prévu pour ce genre de cas:
RRDTool
(Voir aussi InfluxDB, et autres logiciels de monitoring)
Ou tout simplement une base de données ? Visiblement tu utilises un fichier pour stocker tes valeurs, à partir d'un certain volume ça peut devenir plus un problème qu'une solution.
Une autre piste: cacher les calculs ne concernant que d'anciennes valeurs ?
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Bonjour , j'ai trouvé ce tuto qui utilise SQLite database.
https://github.com/talltom/PiThermServer
d’après vous est ce que je vais gagné en rapidité d'affichage ?
[^] # Re: Une DB ?
Posté par j_m . Évalué à 1.
Je dirais oui. Surtout parce que la génération du graph est déléguée au navigateur (dans cette page html -> temperature_plot.htm). C'est l'idée du commentaire en-dessous ([1]).
[^] # Re: Une DB ?
Posté par j_m . Évalué à 1.
Pour vérifier si c'est la taille de tes fichiers et tes calculs qui ralentissent le traitement ou bien juste le traitement de l'image, tu pourrais commenter ta fonction draw_graph et laisser scale et get_data.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1. Dernière modification le 28 mars 2015 à 15:57.
Ah je suis vraiment embarrasser car j'ai aussi trouver un tuto avec RRDTool https://howonpi.wordpress.com/
Lequel choisir ? lequel est le mieux entre les 2 tuto ?
Sur howonpi il parle du serveur Web nginx , mon raspberry est déjà équipé du serveur Web apache est ce compatible ?
[^] # Re: Une DB ?
Posté par j_m . Évalué à 1.
Ce deuxième à l'air pas mal. J'aime bien l'idée de travailler en ram.
Il fait aussi calculer le graph dans le navigateur. Donc sur ce point là ça ne doit pas être trop différent.
Pour nginx et apache, ce sont deux logiciels qui font la même choses et qui ne peuvent pas travailler en même temps. Il faudra que tu empêches apache de se lancer au démarrage, ou que tu l'enlève complètement.
Sinon quand on voit ton code php on a l'impression que tu es un peu programmeur, mais c'est quoi ton niveau en fait ? Tu sais programmer ? Je sais pas trop quel niveau d'explication on peut te donner.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Mon niveau !!! très très bas , Ce code n'est pas de moi c'est un ami qui me l'a fait il y a 2 ans quand j’ai commencé un projet de domotique sur un raspberry toute la partie électronique est de moi, et la partie programmation c’était lui.
Actuellement, il est très fatigué, et ne peux plus m’aider. Je me retrouve donc dans l’impasse. Et mon projet n’est hélas pas fini. j'essaye donc de me débrouillé seul avec mes faibles connaissance en programmation !
mon raspberry est équipé d' apache. pas trop envie de changer pour pour nginx
[^] # Re: Une DB ?
Posté par j_m . Évalué à 1.
Comme ça, a vue de nez, je dirais que tu peux essayer de faire l'installation avec apache. Tu évites juste d'installer nginx, et puis tu adaptes les path dans lesquels tu vois un nginx apparaître.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
J'ai fait l'installation de howonpi .tout c'est bien passé par contre rien quand je tape IP/tempChart.html j'ai bien la page avec un menu mais aucun graph. j'ai l'impression qu'il y a un probleme de lien Quand j'ai fait l'installation tout a été se mettre dans Root
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Bonjour voila une copie d’écran de ce que j'ai ,
le graph n'apparait pas . Dans mon précédent message je disais que tout les path avait été s'installer dans Root. j'ai déplacé le fichier tempChart.html dans home/www Faut'il déplacer les autres fichiers ?
[^] # Re: Une DB ?
Posté par j_m . Évalué à 1.
Tu as mis où ton répertoire www/ ? Il y a quoi dedans ? Et dans /webdata/, il y a quoi ?
Par défaut, avec apache, www/ est dans /var. Ca donne /var/www
Je pense qu'à la fin tu devrais trouver au moins ça dans ce répertoire:
charts/
webdata
tempChart.html
Si tu fais une recherche sur "/webdata/" dans le code source de tempChart.html, tu peux voir que le script accède à des fichiers de ce répertoire. Est-ce que ces fichiers existent? Est ce que tu les vois dans /var/www/webdata et dans /webdata ?
[^] # Re: Une DB ?
Posté par j_m . Évalué à 1.
Avec ton message, j'ai l'impression que ton répertoire www/ est dans home. Mes questions sont toujours valables.
Il y a quoi dans /home/www/ ?
Qu'est-ce que tu vois quand tu fais : ls /home/www/webdata
etc.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Bon ben gros probleme !! j'ai tout cassé . Mon raspberry fonctionne mais je ne peux plus l’atteindre avec putty .
Et ça depuis l'installation de la tache Cron
sudo crontab -e
*/5 * * * * /home/pi/readTemp.py
Comment supprimer cette Cron ? sans avoir accés au raspberry ? Si je branche ma carte SD sur un NAs Peux t’ont retrouver ou elle se cache ?
Pour répondre a ta question :Il y a quoi dans /home/www/ ? il y a tout mes fichier www et PHP.
[^] # Re: Une DB ?
Posté par j_m . Évalué à 2.
Dans le cas le plus simple, le cron lis le fichier /etc/crontab
Mais il est important, c'est lui qui récupère les température toutes les 5 minutes (c'est plus clair en lisant /etc/crontab).
le fichier /home/pi/readTemp.py existe-t-il bien ? Tu as mis les bons droits dessus ?
Et il y a aussi les 3 éléments qui ont dû être ajoutés par la procédure. J'ai donné les noms plus haut.
Et dans le dossier /home/www/webdata ? Il y a des trucs ? Sinon, c'est que tu as merdé sur la création du lien. Tu as peut-être aussi merdé sur la création du dossier /webdata.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1. Dernière modification le 29 mars 2015 à 15:22.
Bon je suis reparti depuis le debut avec une copie de ma carte SD
Dans home/www j'ai effectivement un dossier charts , un dossier webdata et un fichier tempChart.html.
Les 5 autres fichiers
createDS18B20database.py ,DS18B20Config.py ,readTemp.py, data_DS18B20.rrd ,DS18B20Config.pyc
sont dans home/www/py.
Dans le dossier dossier /home/www/webdata il n'y a rien
Si tu veux on peux en parler sur http://webchat.freenode.net/
Canal rfsniff
[^] # Re: Une DB ?
Posté par j_m . Évalué à 1.
Le gars s'appelle pi. /home/pi, c'est son répertoire personnel. D'ailleurs quand il fait
$ cd ~
Ca le déplace dans ce répertoire. C'est peut-être ça que tu as loupé.
D'ailleurs est-ce que tu as un fichier DS18B20.conf ?
Ce dossier doit contenir la même chose que dans /webdata car tu en as fait un lien vers ce dossier.
Et le dossier /webdata doit contenir tous les fichiers qui sont référencés dans le code source en html. Tu dois regarder le code source et chercher du texte qui commence par /webdata.
Sur ce, je crois que je commence à me lasser. Je te souhaite bonne chance. Peut-être que quelqu'un d'autre pourra t'aider pour la suite.
[^] # Re: Une DB ?
Posté par NeoX . Évalué à 2.
faudrait voir comment est codé la page tempChart.html,
mais à mon avis, tu as rangé les fichiers à ta sauce, et le tempChart.html ne les trouve pas.
à mon avis, il vaut mieux creer un dossier
temperature
et decompressé le contenu du tempChart dedans,
avec un peu de chance ca donne l'arborescence suivante :
/home/www/temperature
/home/www/temperature/tempChart.html
/home/www/temperature/webdata
/home/www/temperature/charts
/home/www/temperature/createDS18B20database.py
/home/www/temperature/readTemp.py
/home/www/temperature/data_DS18B20.rrd
/home/www/temperature/DS18B20Config.pyc
le generateur de graphe sera alors visible avec ton navigateur à l'adresse http://ip-du-raspberry/temperature/tempChart.html
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Merci NeoX pour toutes ces explications que j'ai appliqué a la lettre sauf le nom du dossier que j'ai changé ( temperature = Graph).
Mais rien a changé .
Le générateur de graphe est bien visible dans mon navigateur à l'adresse http://192.168.1.19/Graph/tempChart.html , comme ce matin mais aucunes valeurs aucun graph !
[^] # Re: Une DB ?
Posté par NeoX . Évalué à 2.
comme je l'évoquais dans l'autre sujet,
howonpi parle d'un capteur de temperature DS18B20,
si tu n'as pas ce capteur, il est probable que le script qui remplit la base de donnée ne trouve rien, et donc s'il n'y a rien, il n'y a pas de graphe.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1. Dernière modification le 29 mars 2015 à 17:37.
Si justement j'ai 3 capteurs
28-000004d330cb,Sonde T° Eau chaudière (Retour)
28-000004d3bf43,Sonde T° Eau chaudière (Aller)
28-0000023,9592,Sonde T° Intérieure
par contre j'ai un doute avec webdata
sudo ln -s /webdata webdata
[^] # Re: Une DB ?
Posté par NeoX . Évalué à 2.
dans le tuto il cree un /webdata qui est un dossier tmpfs (en RAM)
puis il fait un lien (sudo ln -s /webdata webdata) du dossier /webdata vers /var/www/charts/webdata
je ne sais pas si le generateur de la base cherche à ecrire dans /webdata ou s'il cherche autrement
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Ça doit être ça qui déconne . chez moi c'est un simple fichier de 8 o dans root !
[^] # Re: Une DB ?
Posté par NeoX . Évalué à 2.
ca doit etre un dossier
et pour respecter le mode d'emploi sans passer par un tmpfs (dossier en RAM), il faut faire comme ca :
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
J'y comprend plus rien . Ce que je sais par contre c'est que le raspberry va bientôt apprendre a voler !! ou je vais peux être le forcer a se suicider !!
J'ai fait un dossier tmpfs l'étape 4 du tuto il s'appelle webdata.
Quand je tape tes commandes évidement ça ne fonctionne pas !
root@PiHome:/home/www/Graph# rm -rf /webdata
root@PiHome:/home/www/Graph# mkdir /webdata
root@PiHome:/home/www/Graph# ln -s /webdata
ln: impossible de créer le lien symbolique « ./webdata »: Le fichier existe
```
[^] # Re: Une DB ?
Posté par NeoX . Évalué à 2.
parce qu'il te manque un morceau dans la commande
ln -s
tu as deja fait l'etape 4 tmpfs dans le tuto, tres bien.
il faut donc active cette partition =>
mount /webdata
puis faire un lien de /webdata vers le dossier Graph :
ln -s /webdata /home/www/Graph/webdata
evidemment il faut que /home/www/Graph/webdata n'existe pas avant de faire le
ln -s
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1. Dernière modification le 29 mars 2015 à 20:39.
Merci Néox , mais je laisse tomber , je suis dégouté de linux . j'ai passé toute ma journée depuis 8 heures ce matin .trop compliqué pour moi . j'ai lu et relu au moins 80 fois ce tuto et en plus de l'aide du forum je n'y arrive pas .
[^] # Re: Une DB ?
Posté par NeoX . Évalué à 2.
laisse pas tomber pour si peu, reposes toi, reviens sur le projet dans quelques jours
tu as un produit genial, qui a bien avancé, et qui peut etre completé par d'autres idées.
faut juste prendre le temps et comprendre ce que tu fais pour savoir le refaire, et surtout, savoir l'adapter à ta machine/config.
car souvent le tuto, sauf à etre fait sur une machine strictement identique à la tienne, sera fait sur la machine specifique à l'utilisateur qui a redigé le tuto (ex dans le cas qui nous interesse, la personne a un ngnix , installe ses fichiers dans /var/www )
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Tu n'as pas un peu de temps pour te connecter avec moi avec team viewver pour voir exactement ce que j'ai fait .
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1. Dernière modification le 04 avril 2015 à 14:31.
Bonjour , Après vérification ,et nombreuses tentatives je suis toujours dans l'impasse avec aucune valeur affiché sur ma page http://192.168.1.19/Graph/tempChart.html.
Quand je lance la commande /home/www/Graph# python readTemp.py dans putty ca fonctionne bien ,
Le dossier Webdata ,et le fichier base de donnée data_DS18B20.rrd se rempli bien .Est ce que mon probleme ne viens pas de tempChart.html ?
[^] # Re: Une DB ?
Posté par NeoX . Évalué à 3.
le grapheur cherche les données dans un fichier /webdata/DS18B20Status.txt
lors de l'installation tu disais avoir installé le grapheur dans /home/www/Graph et avoir fait un dossier webdata dedans.
le ficheir html tel qu'il est ecrit va chercher les datas : (au choix, je ne suis pas assez calé en javascript) :
- /webdata/DS18B20Status.txt qui serait la racine de ton systeme sur le PI, la procedure sur HWONPI dit d'ailleurs de faire un
ln -s
de l'emplacement reel webdata vers un autre emplacement, celui du serveur web)le fichier html ne semble pas codé pour aller chercher directement le fichier data_DS18B20.rrd
donc attention, si tu as renommé les fichiers pour ta convenance, il faut adapter les scripts pour refleter ce changement.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Mon dossier ramdisk webdata est a la racine du PI et le lien que j'ai fais avec ln -s est dans home/www/Graph/webdata .
Dans mon dossier Graph j'ai:
createDS18B20database.py
data_DS18B20.rrd
DS18B20.conf
DS18B20.py
DS18B20.pyc
DS18B20Config.py
DS18B20Config.pyc
readTemp.py
tempChart.html
/charts
/webdata
C'est le fichier readTemp.py qui va remplir data_DS1820.rdd mais rien ne le lit
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Ça y est enfin !! ça fonctionne !!c’était le dossier /charts qui n’était pas au bon endroit ,il fallait le mettre dans www .
Maintenant mon autre probleme c'est la tache cron qui ne fonctionne pas .çà doit normalement lire les sondes toutes les 5 minutes .
J'ai donc créer Graph avec dedans
*/5 * * * * root python /home/www/Graph/readTemp.py
Toutes mes taches cron sont dans etc/cron.d
[^] # Re: Une DB ?
Posté par j_m . Évalué à 2. Dernière modification le 04 avril 2015 à 16:28.
Essaye en utilisant le path complet de python. Quelque chose comme /usr/bin/python
Par exemple:
*/5 * * * * root /usr/bin/python /home/www/Graph/readTemp.py
J'ai déjà eu des problèmes de variables d'environnements dans des scripts. Ici ca serait ta variable PATH qui n'est pas settée dans l'environnement d'exécution de cron. Donc il faut faire sans.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
je viens de tester la tache cron comme cela
*/5 * * * * root /usr/bin/python /home/www/Graph/readTemp.py
ça ne passe pas aucun démarrage de readTemp.py
un truc que je ne comprend pas encore dans la console si je tape
root@PiHome:/# python /home/www/Graph/readTemp.py
voila la réponse. Unable to read 'DS18B20.conf'
et si je fais
root@PiHome:/home/www/Graph# python readTemp.py
TDS1:23.875
TDS2:20.812
TDS3:19.812
[^] # Re: Une DB ?
Posté par j_m . Évalué à 2. Dernière modification le 04 avril 2015 à 20:54.
C'est une bonne observation.
Je pense qu'il va falloir que tu te mettes un peu au python si tu veux t'en sortir. Par exemple ce message d'erreur vient de ton code source readTemp.py:
on essaie d'ouvrir le fichier DS18B20.conf, et ça ne marche pas donc on a sauté jusqu'au except puis on a fait print, puis quit. Je pense que c'est parce qu'il regarde dans le répertoire courant. Essaies d'ajouter /home/www/Graph/ devant DS18B20.conf
Mais même là ça ne suffira sans doute pas car j'ai vu qu'il y avait d'autres problèmes dans ce genre, avec des fichiers. Par exemple, il y a aussi la ligne suivante:
Il faudrait régler tous les path à problème de ton fichier source.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
fileRrdTool = "/home/pi/data_DS18B20.rrd"
Ca je l'avais modifié sinon la BD ne se remplirais pas
par contre j'ai bien ajouter /home/www/Graph/ devant DS18B20.conf .
Maintenant python /home/www/Graph/readTemp.py marche dans putty , mais la tache cron ne démarre toujours pas .
*/5 * * * * root /usr/bin/python /home/www/Graph/readTemp.py
[^] # Re: Une DB ?
Posté par NeoX . Évalué à 3.
ca peut aussi se regler en mettant dans le cron
cd /home/www/Graph && /usr/bin/python /home/www/Graph/readTemp.py
mais comme dit j_m tout ca vient de la maniere dont readTemp.py est codé,
et visiblement il est codé "avec les pieds"
dans le sens ou on ne doit jamais mettre un chemin en dur dans un programme,
car sinon l'utilisateur n'a pas d'autre choix que de ranger les choses dans les memes dossiers ou de retoucher le code.
dans ton cas, le plus facile est peut-etre de chercher toutes les ouvertures de fichier pour les changer pour aller sur
/home/www/Graph
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Bonjour, j'ai testé en ligne de commande cd /home/www/Graph && /usr/bin/python /home/www/Graph/readTemp.py , ca fonctionne ,par contre toujours impossible avec la tache cron,Est ce que je ne me plante pas quand je crées ma tache cron .
Comment voir les taches cron qui tourne ?
[^] # Re: Une DB ?
Posté par j_m . Évalué à 2. Dernière modification le 05 avril 2015 à 11:30.
Mettre en place un cron peut dépendre de ta distribution et je ne connais pas trop celle qui est utilisée par le pi. Mais tu as l'air de dire que tu as ajouté un fichier à la main dans un répertoire cron, alors que dans la doc officielle on parle d'utiliser la commande suivante:
Qui va ouvrir le fichier de configuration et dans lequel tu devras mettre ta ligne qui commence par */5 * * *, si elle n'y est pas déjà. Pour en savoir plus : http://www.raspberrypi.org/documentation/linux/usage/cron.md
Par default beaucoup de log se retrouvent dans le dossier
/var/log/
Tu peux regarder si tu trouves quelque chose qui contient "cron", "anacron", etc. Il y a aussi le fichier
/var/log/syslog
qui, quand il existe, agglomère les logs de plusieurs logiciels.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 1.
Dans crontab -e je n'ai aucune tache cron , toute les taches cron que mon ami a fait sur le Pi sont dans etc/cron.d (31 fichiers) . J'ai utiliser ce tuto http://www.devils-heaven.com/raspberry-pi-cron-jobs/ pour crée mon fichier Graph qui est dans cron.d
Dans le dossier /var/log/ j'ai un fichier cron.log
avec beaucoup d'info.
Ces 2 lignes reviennent souvent
Apr 5 06:26:01 PiHome /usr/sbin/cron[2002]: (*system*Graph) INSECURE MODE (group/other writable) (/etc/cron.d/Graph)
Apr 5 06:26:01 PiHome /usr/sbin/cron[2002]: (root) INSECURE MODE (mode 0600 expected) (crontabs/root)
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 2. Dernière modification le 05 avril 2015 à 12:41.
je devais avoir un probleme de droit , maintenant je retrouve ça dans les log
Apr 5 12:30:01 PiHome /USR/SBIN/CRON[3971]: (root) CMD (python /home/www/Graph/readTemp.py)
Je crois que enfin ça fonctionne !!
[^] # Re: Une DB ?
Posté par j_m . Évalué à 2.
Cool.
C'était pas un problème facile. Il a fallu ouvrir les scripts pour voir les fichiers qui étaient manipulés et comment on y accède. Il a aussi fallu checker des logs pour le cron.
Quand tu es prêt à faire ça, peu d'installations peuvent te résister, même pour des logiciels qui ne sont pas écrits pour être partagé, comme ici.
[^] # Re: Une DB ?
Posté par b.gwen . Évalué à 2. Dernière modification le 05 avril 2015 à 15:21.
Je remercie j_m et Néox qui ont eu de la patience avec moi . Enfin ça fonctionne . juste une chose qui m'intrigue sur le graph on as pas le nom des sondes mais DTS1 DTS2 DTS3 normalement je devrais avoir le nom des sondes avec le fichier DS18B20.conf .
# Génération d'image
Posté par Chris K. . Évalué à 5.
En dehors de la quantité de données à gérer, générer des images sur un pi ça va pas être top niveau perf car même un simple redimensionnement d'une image prend déjà du temps sur ce genre de petits processeurs.
Le mieux serait de déléguer le rendu de tes graphs au navigateur en utilisant une bibliothèque javascript comme Chart.js pour faire le rendu.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.