RaspFR :: Forum

Forum de la communauté francophone de Raspberry PI.

Vous n'êtes pas identifié(e).

Annonce

Attention !!! Le serveur sera migré d'ici la fin de l'année, une coupure du forum est donc à prévoir dans les semaines à venir.

#1 02-11-2016 11:06:54

passemoilaclede12
Membre
Inscription : 19-10-2015
Messages : 16

[résolu] Gpio et crontab

Bonjour,

Mon installation :

Un RPi + une ligne I2C + un mcp23017 pilotant un LCD 20x4 + un mcp23017 pilotant une carte 8 relais.

voici un script python qui récupère des données dans le fichier piscine.txt pour :
1- afficher du texte sur l'afficheur via le mpc avec comme adresse 0x24
2- commander le relais via le mpc avec comme adresse 0x22

Quand j’exécute  ce script avec la console 'putty' le fonctionnement est parfait.

Mon but est de faire exécuter ce script  à intervalle régulier grâce à la crontab du Rpi

Quand la crontab exécute ce script les relais du mpc 0x22 fonctionnent selon le script mais l'afficheur LCD piloté par le mpc 0x24 écrit des caractères bizarres un peu partout sur l’écran.

Quelle différence peut-il y avoir entre la console et la crontab ?
Je sèche complètement...... J'ai besoin d'aide

MERCI

[== Indéfini ==]
#!/usr/bin/python2.7
#-*- coding: utf-8 -*-

import os
import time
from datetime import datetime, timedelta

import Adafruit_GPIO as GPIO
import Adafruit_GPIO.MCP230xx as MCP
import Adafruit_CharLCD as LCD

gpioPIS = MCP.MCP23017(0x22);
gpioLCD  = MCP.MCP23017(0x24);

gpio = MCP.MCP23017(0x24);
lcd = LCD.Adafruit_CharLCD(15,13,12,11,10,9,20,4,14,gpio=gpioLCD)
lcd.set_backlight(1)
lcd.clear()



class Piscine:
	def __init__(self):
		self.OnOff = 0
		self.tab = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]
Piscine = Piscine()

def Initialisation():
	gpioPIS.setup(0,GPIO.OUT)
	
# Fonction lecture fichier piscine
def lirePiscine():
	FichierPiscine = open("/var/www/piscine.txt", "r")
	Piscine.OnOff = int(float(FichierPiscine.readline()))	# On/Off
	i=1
	while i<= 23: 
		Piscine.tab[i]=int(float(FichierPiscine.readline()))
		i=i+1
	FichierPiscine.close
	return
	
Initialisation()
maintenant = datetime.now()
lirePiscine()


if len(str(maintenant.hour))==1 :
	lcd.message("0")
	lcd.message(str(maintenant.hour))
else :
	lcd.message(str(maintenant.hour))
lcd.message(":")
if len(str(maintenant.minute))==1 :
	lcd.message("0")
	lcd.message(str(maintenant.minute))
else :
	lcd.message(str(maintenant.minute))


lcd.set_cursor(6,0)
lcd.message("Piscine : ")
if Piscine.OnOff == 1 :
	lcd.message("Auto")
	i=0
	while i <= 22: 
		if maintenant.hour == i:
			if Piscine.tab[i+1]==1:
				gpioPIS.output(0,1)
				lcd.set_cursor(0,1)
				lcd.message("Filtration ON")
			else :
				gpioPIS.output(0,0)
				lcd.set_cursor(0,1)
				lcd.message("Filtration OFF")
		i=i+1
else :
	lcd.message("Manu")

Dernière modification par passemoilaclede12 (06-11-2016 10:27:22)

Hors ligne

#2 02-11-2016 20:51:33

Claudius
Membre
Lieu : 78 - Yvelines
Inscription : 06-05-2015
Messages : 160
Site Web

Re : [résolu] Gpio et crontab

Bonsoir,

passemoilaclede12 a écrit :

... Quelle différence peut-il y avoir entre la console et la crontab ? ...

Tout simplement parce que sans doute (et sûrement ;-), l'environnement d'exécution d'un crontab est minimaliste...

Cf. Recherche crontab

Hors ligne

#3 03-11-2016 10:09:41

chris57100
Chris
Lieu : Thionville
Inscription : 23-06-2013
Messages : 1 407
Site Web

Re : [résolu] Gpio et crontab

Peut être devrais tu essayer un script basique genre qui affiche l'heure toutes les secondes et ajouter progressivement tes fonctions pour trouver laquelle a besoin d'une initialisation d'environnement. Car comme le dit Claudius, souvent l'erreur est de croire que via crontab c'est comme en ligne de commande sauf qu'il n'y a pas de session, donc pas d'initialisation de variables genre PATH, TTY etc.


Raspberry Pi Home Server : http://www.pihomeserver.fr
Hotspot Wifi avec portail captif pour Raspberry Pi: Kupiki Hotspot

Hors ligne

#4 03-11-2016 21:11:08

Claudius
Membre
Lieu : 78 - Yvelines
Inscription : 06-05-2015
Messages : 160
Site Web

Re : [résolu] Gpio et crontab

Bonsoir,

Effectivement, c'est une piste de recherche du pourquoi du comment...

Une autre piste plus radicale consiste à exécuter la ligne dudit crontab en chargeant au préalable l'environnement souhaité comme celui qui permet d'exécuter correctement le(s)dit(s) script(s).

Cf. How can I run a cron command with existing environmental variables?; ici c'est (à adapter ;-):

0 5 * * * . $HOME/.profile; /path/to/command/to/run

Hors ligne

#5 03-11-2016 23:20:31

FBPY
Membre
Lieu : Nancy
Inscription : 05-09-2013
Messages : 115

Re : [résolu] Gpio et crontab

hello passemoilaclede12

Quand tu veux executer un script avec crontab, tu dois donner pour les commandes, les lib  le chemin absolu.

pour accéder à la lib  "Adafruit_GPIO"  le script doit avoir le chemin complet ex: /root/Adafruit_GPIO
sinon il ne la trouve pas.

@+

Hors ligne

#6 06-11-2016 10:26:51

passemoilaclede12
Membre
Inscription : 19-10-2015
Messages : 16

Re : [résolu] Gpio et crontab

La solution : une histoire de LANG !!!!!

voici la ligne de commande dans la crontab :

* * * * * export LANG=fr_FR.utf8 /usr/bin/python2.7 /var/www/scriptpython/ScriptPiscine.py

Merci

Hors ligne

Pied de page des forums