Mon terrarium Lowland

Comment faire pour créer, entretenir un terrarium, une tourbière ou encore un serre. N'hésiter pas à poster les photos de vos propres installations.
Avatar du membre
Vince81
Administrateur
Administrateur
Messages : 4147
Enregistré le : 23 sept. 2007 20:16
Localisation : Paris

Re: Mon terrarium Lowland

Message par Vince81 »

Salut, merci pour les infos. J'ai essayé d'intégrer ça au script, on va voir ce que ca donne.

Egalement, je suis en train de tester le script A appelant le script B comme toi Max, ayant aussi observé un phénomène de "pseudo bug" au premier lancement, alors que je ne l'ai pas au second (avec les DS18B20 et le bus 1-wire).
Je voulais faire quelque chose du genre :

Script A:

Code : Tout sélectionner

import ScriptB

try:
***LaunchScriptB
except :
***try :
******LaunchScriptB
***except :
******os.system('sudo reboot')
Le problème, c'est que scriptAl ne récupère pas l'erreur associée au déroulement de scriptB, mais l'erreur potentielle qu'il y aurait à lancer le scriptB.
Du coup, si jamais je veux mettre un try, je dois le mettre au début de scriptB, mais c'est moins cool.

Est-ce qu'il faut passer par un sub.process pour récupérer par le try de scriptA l'erreur générée au milieu de la lecture de scriptB, ou est-ce qu'il y a quelque chose d'autre à faire ?


Vince
Mes plantes
Mon terrarium highland
Liste de culture

"Il n'y a pas de plante difficile, il faut juste trouver les bonnes conditions"

Aide-toi et le ciel forum t'aidera.

Guttata
Messages : 1069
Enregistré le : 23 janv. 2005 19:46
Localisation : 78
Contact :

Re: Mon terrarium Lowland

Message par Guttata »

Est-ce qu'il s'agit d'une sonde I2C ? Possède-t-elle un mode "économie d'énergie" durant laquelle elle se met en standby (telle que l'AM2315).
Si oui je te dirais bien de faire comme j'ai fais :

- J'appelle une fois sensor.temperature() sans récupérer la valeur pour uniquement "réveiller" la sonde

def getTemperature():
"Get the hygrometry and insert in DB"

sensor = AM2315()
sensor.temperature()
temperature = sensor.temperature()
if temperature > 0 and temperature < 100:
insertProbe("Temperature", temperature)
print("Temperature: " + str(temperature) + "C")
return "true"

Avatar du membre
Vince81
Administrateur
Administrateur
Messages : 4147
Enregistré le : 23 sept. 2007 20:16
Localisation : Paris

Re: Mon terrarium Lowland

Message par Vince81 »

Nop, c'est pas I2C, c'est one-wire, sur le gpio #04.

Je n'ai pas toujours ce problème avec lui, et ca ne se passe que la première fois, de temps en temps au démarrage. Alors que l'AM2315, il faut la cliquer systématiquement deux fois pour la voir apparaitre dans le i2cdetect. Du coup, j'aurais bien voulu faire le try sur le script d'appel, et pas le appelé :(.
Vince
Mes plantes
Mon terrarium highland
Liste de culture

"Il n'y a pas de plante difficile, il faut juste trouver les bonnes conditions"

Aide-toi et le ciel forum t'aidera.

Guttata
Messages : 1069
Enregistré le : 23 janv. 2005 19:46
Localisation : 78
Contact :

Re: Mon terrarium Lowland

Message par Guttata »

Voici ce que je ferai, sans parler de ScriptA et de ScriptB.

Dans le même fichier :
def ta_fonction_qui_plante(args):
Si erreur détectée:
raise SomeError("An error occurred")

return "Success!"

--------------------------------------------------
try:
ta_fonction_qui_plante(args)
except SomeError, msg:
#Exception catchée, je rappelle ma fonction
ta_fonction_qui_plante(args)

On peut même essayer la récurcivité pour ce dernier bout de code :

def try_recursively(args)
try:
return ta_fonction_qui_plante(args)
except SomeError, msg:
#Exception catchée, je rappelle ma fonction
return try_recursively(args)

Avatar du membre
Merwnn
Messages : 316
Enregistré le : 13 sept. 2012 15:51
Localisation : Montpellier - 34

Re: Mon terrarium Lowland

Message par Merwnn »

Vince81 a écrit :Nop, c'est pas I2C, c'est one-wire, sur le gpio #04.

Je n'ai pas toujours ce problème avec lui, et ca ne se passe que la première fois, de temps en temps au démarrage. Alors que l'AM2315, il faut la cliquer systématiquement deux fois pour la voir apparaitre dans le i2cdetect. Du coup, j'aurais bien voulu faire le try sur le script d'appel, et pas le appelé :(.
Il y a pas de notion de temps de temps d'initialisation ? Je veux dire par là, ton premier passage crée l'objet mais tente de l'utiliser de suite alors qu'il dépend d'une autre exécution qui elle prend du temps. De ce fait, au 2ème appel, tout a eu le temps d'initialiser correctement.
Juste une idée.

Répondre