Problème execution .py dans terminal

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
dem86
Messages : 1
Enregistré le : ven. 2 juil. 2021 08:55

Problème execution .py dans terminal

Message par dem86 » ven. 2 juil. 2021 09:32

Bonjour à tous,

Je suis sur un projet de fermeture automatique d'une trappe suivant l'heure de coucher du soleil.

J'ai un programme qui défini l'heure théorique de coucher du soleil. Variable que j'ai appelé "heure_de_fermeture"
Une fois l'heure défini je la compare à l'heure actuelle dans une boucle while, si l'heure_actuelle_new est >= à l'heure_de_fermeture je ferme la trappe.
Dans cette boucle while si la condition est ok, alors je lance un programme de fermeture.

Pour être sur de ne pas louper l'heure de coucher en hiver j’exécute le programme automatiquement avec crontab tout les jours à 16h.

Et c'est la que ça pose problème!
Prenons pour exemple l'heure de fermeture que le programme à calculé il y a quelques jours: 21h53
Le programme est bien exécuté à 16h, il tourne correctement et la trappe se ferme, mais surprise il n'est que 21h00.
Je ré ouvre la trappe, j’exécute le programme dans le terminal et la trappe se ferme de nouveau alors qu'il n'est toujours pas 21h53.
Je ré ouvre la trappe de nouveau

Je décide d'ouvrir le programme avec le logiciel Python du raspberry et je fait "run", la le programme fonctionne et ferme la trappe à 21h53.

Le lendemain même problème ...

Du coup après plusieurs essais le programme fonctionne avec le logiciel Python, mais si il est exécuté dans le terminal ou automatiquement avec crontab la porte se ferme avant l'heure demandée.
Et la je bloque, avez vous des idées?
Ci-dessous une photo du code de la boucle.

Merci d'avance

#Comparaison des heures pour fermeture de la porte
while True:
___date = datetime.datetime.now ()
___heure_actuelle_new = date.hour + (date.minute/60)
___print('Il est:',date.hour,":",date.minute)
___if heure_actuelle_new >= heure_fermeture :
_____print('Fermeture')
_____subprocess.call([sys.executable, "fermeture.py"])
_____sys.exit()
___print('Ce n est pas l heure')
___time.sleep(60)

piper
Raspinaute
Messages : 656
Enregistré le : sam. 5 juin 2021 18:57

Re: Problème execution .py dans terminal

Message par piper » sam. 3 juil. 2021 08:31

Bonjour,
En ce cas de figure, je n'aurai pas utilisé cron mais at (at time).
At lance un script une et une seule fois.
Le script que je lancerai fermerai le volet puis calculerait la date-heure du prochain coucher de soleil pour enregistrer dans at, le prochain passage.

Ceci etant dit, un conseil generique pour debugger un script qui se lance automatiquement :
Loger ce qui se passe dans un fichier en redirigeant la sortie du script.
Ex :
./toto.py > toto.log 2>&1

Avec cette ligne de commande, toto.py n'affiche plus rien a l'ecran.
Ce qu'il devait afficher a l'ecran et toutes erreurs éventuelles seront mises dans log.txt

Ca te permettra en ajoutant l'affichage de l'heure actuelle de comprendre pourquoi tu entres dans le if qui declenche la fermeture.









Envoyé de mon SM-J710F en utilisant Tapatalk

3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

jelopo
Raspinaute
Messages : 310
Enregistré le : mer. 11 oct. 2017 10:23

Re: Problème execution .py dans terminal

Message par jelopo » sam. 3 juil. 2021 09:11

Bonjour,

Je pense que le calcul de la date "heure actuelle new" n'est pas bon. Avec la commande "type" comparer le type des 2 variables "heure_actuelle_new" et "heure_de_fermeture" et vérifier qu'elle sont de même type afin que la comparaison dans le if soit cohérente.

Consulter cette page pour plus d'information :
https://docs.python.org/fr/3/library/datetime.html

A+

Répondre

Retourner vers « Python »