[resolu]probleme lancement script python
Modérateurs : Francois, Manfraid
-
- Raspinaute
- Messages : 136
- Enregistré le : sam. 18 oct. 2014 19:09
[resolu]probleme lancement script python
Bonjour a tous
J'ai un probleme avec un script python :
Mon script vient verifier si un evenement est present dans un agenda Google et, en fonction, actionne ou non un relais
mon script fonctionne tres bien en ligne de commande (sans erreur)
Comme il a besoin d'etre executer toute les minutes, j'ai ajouté une ligne dans le CRON, et là, ça ne fonctionne plus (mon script n'est pas executé)
Lorsqu'il etait prevu pour l'API google V2, il fonctionnait tres bien, mais depuis que je l'ai modifié pour l'API V3, l ne fonctionne plus
J'ai fait un autre script tout con qui allume et eteint une LED pour voir, et là, cela fonctionne
Comment savoir ce qui peut poser probleme dans mon script?
Si quelqu'un a une idée...
J'ai un probleme avec un script python :
Mon script vient verifier si un evenement est present dans un agenda Google et, en fonction, actionne ou non un relais
mon script fonctionne tres bien en ligne de commande (sans erreur)
Comme il a besoin d'etre executer toute les minutes, j'ai ajouté une ligne dans le CRON, et là, ça ne fonctionne plus (mon script n'est pas executé)
Lorsqu'il etait prevu pour l'API google V2, il fonctionnait tres bien, mais depuis que je l'ai modifié pour l'API V3, l ne fonctionne plus
J'ai fait un autre script tout con qui allume et eteint une LED pour voir, et là, cela fonctionne
Comment savoir ce qui peut poser probleme dans mon script?
Si quelqu'un a une idée...
Modifié en dernier par zeverybest le sam. 27 déc. 2014 09:12, modifié 1 fois.
Re: probleme lancement script python
Pourrais-tu mettre tes sources pour que je puisse t'aider
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.
-
- Raspinaute
- Messages : 136
- Enregistré le : sam. 18 oct. 2014 19:09
Re: probleme lancement script python
Biensur
Ne pas trop critiquer la syntaxe et la presentation, je suis nul la dedans
Les different "PRINT" ne sont la que pour servir de drapeau et analyser le comportement
La seule réelle action de ce script est la commande des GPIO
Merci d'avance
Edit Domi : Je ne sais pas si c'était les vrais identifiants et mot de passe, alors par sécurité je me suis permis d'édité ton message et de cacher tes identifiants et mot de passe affichés.
Ne pas trop critiquer la syntaxe et la presentation, je suis nul la dedans
Les different "PRINT" ne sont la que pour servir de drapeau et analyser le comportement
La seule réelle action de ce script est la commande des GPIO
Merci d'avance
Code : Tout sélectionner
#!/usr/bin/python3.2
import RPi.GPIO as GPIO
import os
import time
#import gdata.calendar.service
#import gdata.calendar
#import atom.service
#import atom
#import gdata.service
import datetime
import MySQLdb
import httplib2
from RPi import GPIO
from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run_flow
from oauth2client.client import flow_from_clientsecrets
GPIO.setmode (GPIO.BOARD)
GPIO.setup(15,GPIO.OUT)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
#parametre de connexion au compte google pour recuperer l'agenda
#cal_client = gdata.calendar.service.CalendarService()
#cal_client.email = "user@gmail.com"
#cal_client.password = "mdp"
#cal_client.source = 'Google-Calendar_Python_Sample-1.0'
#cal_client.ProgrammaticLogin()
#definition de la categorie pour les log
cat='Piscine'
#pompemarche=0
#evenement=0
#connexion a la base SQL
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
#recuperation du mode de fontionnement dans la base SQL
mycursor.execute('SELECT pompe FROM variables WHERE ID=1')
enr=mycursor.fetchall()
for row in enr:
for col in row :
pompe=col
pompe=int(pompe)
print(pompe)
#recuperation de l'etat actuelle de la pompe
mycursor.execute('SELECT pompemarche FROM variables WHERE ID=1')
enr=mycursor.fetchall()
for row in enr:
for col in row :
pompemarche=col
pompemarche=int(pompemarche)
print(pompemarche)
#recuperation de l'etat precedent de la pompe
mycursor.execute('SELECT etatpompe FROM variables WHERE ID=1')
enr=mycursor.fetchall()
for row in enr:
for col in row :
evenement=col
evenement=int(evenement)
print(evenement)
mycursor.close()
mydb.close()
if pompe==1: #si la pompe passe a l'arret, inscription dans les log
pompemarche=0
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET pompemarche=0 WHERE ID=1')
mydb.commit()
mycursor.close()
mydb.close()
GPIO.output (21, True) # et arret de la pompe
GPIO.output (15, True)
GPIO.output (16, False)
GPIO.output (18, False)
elif pompe==2: #si la pompe passe en marche programme
GPIO.output (15, False)
GPIO.output (16, True)
GPIO.output (18, False)
#verification de l'agenda du jour pour voir si il y a des evenements prevus
scope = 'https://www.googleapis.com/auth/calendar'
flow = flow_from_clientsecrets('client_secret.json', scope=scope)
storage = Storage('credentials.dat')
credentials = storage.get()
class fakeargparse(object): # fake argparse.Namespace
noauth_local_webserver = True
logging_level = "ERROR"
flags = fakeargparse()
if credentials is None or credentials.invalid:
credentials = run_flow(flow, storage, flags)
http = httplib2.Http()
http = credentials.authorize(http)
service = build('calendar', 'v3', http=http)
# get the next 12 hours of events
epoch_time = time.time()
print epoch_time
start_time = epoch_time - 3600 # 1 hour ago
end_time = epoch_time + 12 * 3600 # 12 hours in the future
tz_offset = - time.altzone / 3600
if tz_offset < 0:
tz_offset_str = "-%02d00" % abs(tz_offset)
else:
tz_offset_str = "+%02d00" % abs(tz_offset)
start_time = datetime.datetime.fromtimestamp(start_time).strftime("%Y-%m-%dT%H:%M:%S") + tz_offset_str
end_time = datetime.datetime.fromtimestamp(end_time).strftime("%Y-%m-%dT%H:%M:%S") + tz_offset_str
#start_time = datetime.datetime.now()
#end_time = datetime.datetime.now()
print "Getting calendar events between: " + start_time + " and " + end_time
print start_time
print end_time
events = service.events().list(calendarId='id@group.calendar.google.com', timeMin=start_time, timeMax=end_time, singleEvents=True).execute()
#pprint.pprint(events)
for event in events['items']:
print event["summary"]
print event["start"]
str_date_deb=event["start"]
print str_date_deb
print type (str_date_deb)
print event["end"]
str_date_fin=event["end"]
print str_date_fin
str_date_deb=str(str_date_deb)
date_deb = datetime.datetime(int(str_date_deb[16:20]) , int(str_date_deb[21:23]), int(str_date_deb[24:26]), int(str_date_deb[27:29]), int(str_date_deb[30:32]), int(str_date_deb[33:35]))
str_date_fin=str(str_date_fin)
date_fin = datetime.datetime(int(str_date_fin[16:20]) , int(str_date_fin[21:23]), int(str_date_fin[24:26]), int(str_date_fin[27:29]), int(str_date_fin[30:32]), int(str_date_fin[33:35]))
print date_deb
print date_fin
maintenant=datetime.datetime.now()
maintenant=str(maintenant)
print maintenant
la = datetime.datetime(int(maintenant[0:4]) , int(maintenant[5:7]), int(maintenant[8:10]), int(maintenant[11:13]), int(maintenant[14:16]), int(maintenant[17:19]))
#maintenant=maintenant[0:19]
#maintenant=datetime.datetime(int(maintenant))
#print maintenant
print la
#inscription dans les log du la mise en marche programme
evenement=0
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET etatpompe=0 WHERE ID=1')
mydb.commit()
mycursor.close()
print(evenement)
if ((date_deb<=la) and (date_fin>=la)): #si on se trove pendant un evenement
print 'action en cours'
#print ("Cons.:",event.title.text)
print pompemarche
print ('en periode')
#pompemarche=1
evenement=1 #enregistrement de l'etat de la pompe pour le prochain test
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo") #log du demarrage du programme
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET etatpompe=1 WHERE ID=1')
mydb.commit()
mycursor.close()
print(evenement)
#GPIO.output (21, False)
#break
else: # si on est hors periode
print 'pas d action'
print ('hors periode')
#pompemarche=0
#evenement=0
#GPIO.output (21, True)
#break
if evenement==1 : # si la pompe doit marcher
if pompemarche==0 : #mais qu'elle etait arrete jusqu'a maintenant on log le demarrage
print ('demarrage programme')
j= time.strftime('%d-%m-%Y')
h=time.strftime('%H:%M:%S')
m='demarrage programme'
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
mycursor.execute ('INSERT INTO log (jour, heure, categorie, action) VALUES (%s,%s,%s,%s)',(j,h,cat,m))
mydb.commit()
mycursor.close()
pompemarche=1
#print ('arret systeme pompe')
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo") #et on confirme qu'elle est en marche
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET pompemarche=1 WHERE ID=1')
mydb.commit()
mycursor.close()
GPIO.output (21, False) #on met la pompe en marche
elif evenement==0: #si la pompe doit etre a l'arret
if pompemarche==1 : #et qu'elle etait en marche precedemment, on log la mise a l'arret
print ('arret programme')
j= time.strftime('%d-%m-%Y')
h=time.strftime('%H:%M:%S')
m='arret programme'
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
mycursor.execute ('INSERT INTO log (jour, heure, categorie, action) VALUES (%s,%s,%s,%s)',(j,h,cat,m))
mydb.commit()
mycursor.close()
pompemarche=0 #on confirme qu'elle est arrete
#print ('arret systeme pompe')
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo")
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET pompemarche=0 WHERE ID=1')
mydb.commit()
mycursor.close()
GPIO.output (21, True) #on arrete la pompe
elif pompe==3: #si la pompe passe en mode marche forcee
#print ('demarrage marche force')
pompemarche=1
mydb=MySQLdb.connect (host="192.168.1.5",port=3306, user="toto", passwd="mdp", db="logdomo") #on confirme sont etat en marche
mycursor=mydb.cursor()
mycursor.execute ('UPDATE variables SET pompemarche=1 WHERE ID=1')
mydb.commit()
mycursor.close()
GPIO.output (21, False) #on met la pompe en marche
GPIO.output (15, False)
GPIO.output (16, False)
GPIO.output (18, True)
print("pompe 1=" , pompemarche, " ")
#time.sleep(30)
Re: probleme lancement script python
déja attention il y a tes mdp visible sur le script
sinon je vois beaucoup de print effectivement mais attention tu utlise la syntax de python2 pour beaucoup d'entre eux
sinon je vois beaucoup de print effectivement mais attention tu utlise la syntax de python2 pour beaucoup d'entre eux
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.
-
- Raspinaute
- Messages : 136
- Enregistré le : sam. 18 oct. 2014 19:09
Re: probleme lancement script python
Oups, effectivement, j'avai laissé les mots de passe
Au fait, qu'elle est la meilleurs methode pour qu'ils ne soient pas visible dans le script?
les mettre dans un autre fichiers?
Les PRINT sont en syntaxe python2, mais j'utilise Python 2.7
Crois tu que cela soit la cause du probleme? (cela fonctionnait avec les lignes de codes de l'API google V2)
Je me suis contenté de remplacer les lignes utilisés par l'API V2 par celles de l'API V3
Je vais essayer de mettre un # devant les PRINT pour voir, mais j'ai un doute
Au fait, qu'elle est la meilleurs methode pour qu'ils ne soient pas visible dans le script?
les mettre dans un autre fichiers?
Les PRINT sont en syntaxe python2, mais j'utilise Python 2.7
Crois tu que cela soit la cause du probleme? (cela fonctionnait avec les lignes de codes de l'API google V2)
Je me suis contenté de remplacer les lignes utilisés par l'API V2 par celles de l'API V3
Je vais essayer de mettre un # devant les PRINT pour voir, mais j'ai un doute
Re: probleme lancement script python
tu dit que tu utilise python 2.7 alors que dans le début du ficher c'est marquer 3.2 et oui l'idéal est de stoker les mdp en dehors des scripts
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.
-
- Administrateur
- Messages : 3230
- Enregistré le : mer. 17 sept. 2014 18:12
- Localisation : Seine et Marne
Re: probleme lancement script python
Voici un sujet intéressant.Manfraid a écrit :... oui l'idéal est de stoker les mdp en dehors des scripts
Tu pourrais nous donner un petit exemple d'appel de variables stockées dans un autre fichier que le script Python.
est-ce un autre fichier Python ne contenant que les variables ?
un peu à la manière de Php ?
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.
-
- Raspinaute
- Messages : 246
- Enregistré le : mar. 7 oct. 2014 09:46
- Localisation : Morsang / Orge - Essonne
- Contact :
Re: probleme lancement script python
Les fichiers de configuration: exempledomi a écrit :Voici un sujet intéressant.Manfraid a écrit :... oui l'idéal est de stoker les mdp en dehors des scripts
Tu pourrais nous donner un petit exemple d'appel de variables stockées dans un autre fichier que le script Python.
est-ce un autre fichier Python ne contenant que les variables ?
un peu à la manière de Php ?
Test.ini:
Code : Tout sélectionner
[Fichiers]
logs = /var/www/RFX-Meteo/logs/Meteo.txt
status = /var/www/RFX-Meteo/config/Status.txt
meteoxml = nouvelle Valeur
logsxml = /var/www/RFX-Meteo/logs/MeteoXml.txt
[Sql]
password = 'Toto'
user = 'root'
serveur = 'localhost'
base = 'Base'
Code : Tout sélectionner
#!/usr/bin/env python
# coding=UTF-8
# =====================================
# import des modules
import serial
import datetime
import time
import struct
import sys
import os
import ConfigParser
# ----------------------------------------------------------------------------
# Lit la configuration
# ----------------------------------------------------------------------------
def Get_Config(configfile):
cfg = ConfigParser.ConfigParser()
cfg.read(configfile)
return cfg
# ----------------------------------------------------------------------------
# Ecrit dans le fichier de configuration
# ----------------------------------------------------------------------------
def Set_Config(configfile, cfg):
with open(configfile, 'wb') as config:
cfg.write(config)
#-------------------------------------------
# Boucle principale
#-------------------------------------------
cfgConf = Get_Config('Test.ini')
print cfgConf.get('Sql', 'password')
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: probleme lancement script python
Oui domi c'est faisable
par exemple dans un fichier config.py
et dans le script principal
après il y a une multitude de façon de stocker des information de ce genre
comme le décrit mike913 avec un fichier ini et la lib configparser
ou un fichier json et la lib qui va bien avec
ou un xml
dès que j'aurais plus de temps je ferais un petit tuto des différentes façon de le faire
par exemple dans un fichier config.py
Code : Tout sélectionner
user = "toto"
pass = "mdp"
db = "mabase"
Code : Tout sélectionner
import config
print config.user,config.pass,config.db
comme le décrit mike913 avec un fichier ini et la lib configparser
ou un fichier json et la lib qui va bien avec
ou un xml
dès que j'aurais plus de temps je ferais un petit tuto des différentes façon de le faire
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.
-
- Administrateur
- Messages : 3230
- Enregistré le : mer. 17 sept. 2014 18:12
- Localisation : Seine et Marne
Re: probleme lancement script python
Merci à tous les deux pour ces infos qui sont fortes interressantes, aussi bien l'une que l'autre suivant ce que l'on fait, et principalement suivant le nombre de variables à stocker.
Le fichier INI est effectivement intéressant lorsque l'on a beaucoup de variables, cela permet de mieux structurer les données, et moi j'ai bien. C'est propre, bien rangé, et les sections du INI donnent une indication sur l'utilisation de chacune des variables.
Pour le stockage de peu de variables (comme dans le cas de "zeverybest"), le fichier Python semble plus simple d'emploi, et conviendra très bien pour quelques variables.
Merci encore à tout les deux.
Le fichier INI est effectivement intéressant lorsque l'on a beaucoup de variables, cela permet de mieux structurer les données, et moi j'ai bien. C'est propre, bien rangé, et les sections du INI donnent une indication sur l'utilisation de chacune des variables.
Pour le stockage de peu de variables (comme dans le cas de "zeverybest"), le fichier Python semble plus simple d'emploi, et conviendra très bien pour quelques variables.
Merci encore à tout les deux.
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.