Page 2 sur 3

Re: lancer un sript python au demarrage

Posté : mer. 26 avr. 2017 08:32
par Muj
Bonjour ,

Lorsque je fais "sudo /home/pi/porte.py" dans le terminal, il s' éxécute normalement.
Je vous avoue que j'ai pas tout compris pour les environnements différents. Mes connaissances en informatique sont limités.
J'ai plus l'habitude de programmer des API .
Donc je préfére vous envoyer mon script , J'espére que ça pourra vous aider.


#!/usr/bin/python3
#-*-coding: utf-8 -*-

import wiringpi#importation du module wiringpi
import time #importation du module time
import mysql.connector# module d'interface avec le serveur web

wiringpi.wiringPiSetupGpio()#on utilise la numérotation connecteur

#connexion base de donées
conn = mysql.connector.connect(host="localhost", user="root", password="raspberry", database="poulailler")
cursor = conn.cursor()
if conn :
print ("connexion base de données reussie")
else :
print("erreur de connexion")

cursor.execute("UPDATE poulailler SET heure_ouverture=15 WHERE id=1")


ouvert = int(10) #cycle porte ouverte
ferme = int(3) #cycle porte fermée
position = int(5) #cycle init

wiringpi.pinMode(13,2)#configure la broche 32 en sortie PWM
wiringpi.pwmSetMode(0)#mode wiringpi frequence constante
wiringpi.pwmSetRange(384)#valeur max rapport cyclique
wiringpi.pwmSetClock(1)#valeur du diviseur



def commande_ouverture() :
global position
while position != ouvert :
position = position + 1
wiringpi.pwmWrite(13,int(position))
time.sleep(0.5)


def commande_fermeture() :
global position
while position != ferme :
position = position - 1
wiringpi.pwmWrite(13,int(position))
time.sleep(0.5)

wiringpi.pwmWrite(13, int(position))
time.sleep(2)
while True :

#Récupération des valeurs de la base
cursor.execute("SELECT * FROM poulailler WHERE id=1")
row = cursor.fetchone()
while row is not None:
type_po = row[1]
commande = row[2]
h_ouv = row[3]
m_ouv = row[4]
h_ferm = row[5]
m_ferm = row[6]
row = cursor.fetchone()
print(type_po , commande , h_ouv , m_ouv , h_ferm , m_ferm)

#Récupération de l'heure
h = time.localtime().tm_hour# heure du systeme
m = time.localtime().tm_min# minute du sysyteme
print ( "heure :",h,":",m)
hm = (h * 60) + m
ouv_hm = (h_ouv * 60) + m_ouv
ferm_hm = (h_ferm * 60) +m_ferm
print ( "heure :",hm, " minute ouverture :",ouv_hm," minute fermeture :",ferm_hm)
time.sleep(1)

if type_po == 1:#Mode Manuel
if commande == 1:# demande ouverture
if position == ouvert:
print ("ouvert", position)
else:
commande_ouverture() #appel de la fonction ouverture
else:#demande fermeture
if position == ferme :
print ("fermé", position)
else :
commande_fermeture()# appel de la fonction commande fermeture

else:#Mode Horloge
if (hm > ouv_hm) and (hm < ferm_hm):# demande ouverture
if position == ouvert:
print ("ouvert", position)
else:
commande_ouverture() # appel de la fonction ouverture
else:#demande fermeture
if position == ferme :
print ("fermé", position)
else :
commande_fermeture() #appel de la fonction fermeture




GPIO.cleanup()



Merci à vous

Re: lancer un sript python au demarrage

Posté : mer. 26 avr. 2017 11:21
par domi
Bonjour,

Dans ton code je vois qu'il y a des "Print", donc sans analyser plus profondément le code, les "print" ne peuvent afficher que dans le terminal courant.
Si tu lances ce code dans un "cron", il n'y a pas de terminal actif, donc on ne sait pas ce qu'il fait des "Print". Je ne suis pas assez qualifier en python pour savoir ce qui se passe, (bug ou ignore l'erreur) mais déjà c'est une anomalie.

C'est un peu comme si tu demandais à une personne d'effectuer plusieurs taches consécutives. Dans les taches tu demandes de poser l'objet qu'elle a dans la main sur la table, mais il n'y a pas de table (pas de terminal), dans ce cas, la personne bug !

Je pense donc qu'il faut déjà nettoyer le code afin qu'il puisse s’exécuter sans terminal de sortie.

Re: lancer un sript python au demarrage

Posté : mer. 26 avr. 2017 12:28
par Muj
Ok pour les "print".
J'ai nettoyé le code et j' ai revu les conditions if.
Le code fonctionne quand je le lance mamnuellement par la commande "sudo /home/pi/porte.py"
mais toujours pas automatiquement au reboot.
Merci

Re: lancer un sript python au demarrage

Posté : mer. 26 avr. 2017 13:06
par mike913
Bonjour

les print n'ont rien à voire.
Pour ma part j'utilise souvent les print dans la mise au point d' un programme, et je ne les enlève pas quand je lance le programme dans un cron.
Par contre il peuvent être utile pour voir si le programme se lance bien.
dans ton cron tu peu mettre la ligne comme suit: sudo /home/pi/porte.py >> debug.txt
et tu verras si le fichier se crée.

cordialement

Re: lancer un sript python au demarrage

Posté : mer. 26 avr. 2017 13:42
par Muj
Bonjour,
Le fichier ne se crée pas.

Re: lancer un sript python au demarrage

Posté : mer. 26 avr. 2017 16:55
par mike913
et si tu le lances directement en ligne de commande ?
sudo /home/pi/porte.py >> debug.txt

Re: lancer un sript python au demarrage

Posté : mer. 26 avr. 2017 19:26
par Manfraid
Salut

bien vérifier que les droit d’exécution sont actif pour le groupe autre

Re: lancer un sript python au demarrage

Posté : jeu. 27 avr. 2017 07:46
par Muj
Bonjour à tous,

En faisant la commande "sudo /home/pi/porte.py >> debug.text" , le fichier se crée mais il n'y a rien dedans.

"bien vérifier que les droit d’exécution sont actif pour le groupe autre" : pour ça un peu d'explication svp.
(mise à part sudo je connais pas)
Merci

Re: lancer un sript python au demarrage

Posté : jeu. 27 avr. 2017 08:05
par gege05
Bonjour,

pour voir les droits :
ls -l /home/pi/porte.py
"- rw- r-x r--" (un exemple de réponse possible)

le troisième groupe de 3 caractères donne les droits de "autres"

Re: lancer un sript python au demarrage

Posté : jeu. 27 avr. 2017 08:28
par Muj
Pour les droits ça me donne : " -rwxr -xr -x 1 pi pi "