lancer un sript python au demarrage

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Muj
Messages : 11
Enregistré le : lun. 8 févr. 2016 10:34
Localisation : Landes

Re: lancer un sript python au demarrage

Message par Muj » mer. 26 avr. 2017 08:32

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

domi
Administrateur
Messages : 3230
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: lancer un sript python au demarrage

Message par domi » mer. 26 avr. 2017 11:21

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.
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.

Muj
Messages : 11
Enregistré le : lun. 8 févr. 2016 10:34
Localisation : Landes

Re: lancer un sript python au demarrage

Message par Muj » mer. 26 avr. 2017 12:28

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

mike913
Raspinaute
Messages : 246
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: lancer un sript python au demarrage

Message par mike913 » mer. 26 avr. 2017 13:06

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
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

Muj
Messages : 11
Enregistré le : lun. 8 févr. 2016 10:34
Localisation : Landes

Re: lancer un sript python au demarrage

Message par Muj » mer. 26 avr. 2017 13:42

Bonjour,
Le fichier ne se crée pas.

mike913
Raspinaute
Messages : 246
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: lancer un sript python au demarrage

Message par mike913 » mer. 26 avr. 2017 16:55

et si tu le lances directement en ligne de commande ?
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

Avatar du membre
Manfraid
Modérateur
Messages : 1402
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: lancer un sript python au demarrage

Message par Manfraid » mer. 26 avr. 2017 19:26

Salut

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.

Muj
Messages : 11
Enregistré le : lun. 8 févr. 2016 10:34
Localisation : Landes

Re: lancer un sript python au demarrage

Message par Muj » jeu. 27 avr. 2017 07:46

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

gege05
Messages : 27
Enregistré le : mar. 4 août 2015 15:58

Re: lancer un sript python au demarrage

Message par gege05 » jeu. 27 avr. 2017 08:05

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"

Muj
Messages : 11
Enregistré le : lun. 8 févr. 2016 10:34
Localisation : Landes

Re: lancer un sript python au demarrage

Message par Muj » jeu. 27 avr. 2017 08:28

Pour les droits ça me donne : " -rwxr -xr -x 1 pi pi "

Répondre

Retourner vers « Python »