lancer un sript python au demarrage
Modérateurs : Francois, Manfraid
Re: lancer un sript python au demarrage
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
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
-
- Administrateur
- Messages : 3230
- Enregistré le : mer. 17 sept. 2014 18:12
- Localisation : Seine et Marne
Re: lancer un sript python au demarrage
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.
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.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Re: lancer un sript python au demarrage
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
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
-
- Raspinaute
- Messages : 246
- Enregistré le : mar. 7 oct. 2014 09:46
- Localisation : Morsang / Orge - Essonne
- Contact :
Re: lancer un sript python au demarrage
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
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
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net
Re: lancer un sript python au demarrage
Bonjour,
Le fichier ne se crée pas.
Le fichier ne se crée pas.
-
- Raspinaute
- Messages : 246
- Enregistré le : mar. 7 oct. 2014 09:46
- Localisation : Morsang / Orge - Essonne
- Contact :
Re: lancer un sript python au demarrage
et si tu le lances directement en ligne de commande ?
sudo /home/pi/porte.py >> debug.txt
sudo /home/pi/porte.py >> debug.txt
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.net
Re: lancer un sript python au demarrage
Salut
bien vérifier que les droit d’exécution sont actif pour le groupe autre
bien vérifier que les droit d’exécution sont actif pour le groupe autre
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.
Re: lancer un sript python au demarrage
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
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
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"
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
Pour les droits ça me donne : " -rwxr -xr -x 1 pi pi "