Sonde DS18B20 LED et python

Au programme la régulation de température, la climatisation, les chauffe-eau...

Modérateur : Francois

EVOTk

Re: Sonde DS18B20 LED et python

Message par EVOTk » lun. 9 mars 2015 01:54

Salut,

je ne sait pas a quoi servent les autres definition vu que tu ne ten sert pas ?

je débute en python mais Voila comment je voit la chose :

Code : Tout sélectionner

import os
import time

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

CONSIGNE = 20
LEDVERTE = 18
LEDROUGE = 17

def temperature():
     global temp
     tfile = open("/sys/bus/w1/devices/28-000006a3375b/w1_slave")
     text = tfile.read()
     tfile.close()
     temperaturedata = text.split("\n")[1].split(" ")[9]
     temperature = float(temperaturedata[2:])
     temp = round(temperature / 1000, 2)

def froid(): # La Temp est inf a la consigne
 GPIO.output(LEDVERTE,GPIO.LOW)
 GPIO.output(LEDROUGE,GPIO.HIGH)
 print "froid"

def chaud(): # La temp est sup a la consigne
 print "chaud"
 GPIO.output(LEDVERTE,GPIO.HIGH)
 GPIO.output(LEDROUGE,GPIO.LOW)

def panic():
 print "panic" # les deux leds s'allument si anomalie
 GPIO.output(LEDVERTE,GPIO.HIGH)
 GPIO.output(LEDROUGE,GPIO.HIGH)


while True:
 if temp >= CONSIGNE:
  chaud()
 elif temp < CONSIGNE:
  froid()
 else:
  panic()

 time.sleep(30)
Attention, python est sensible aux espaces et au majuscules ( CONSIGNE n'est pas egal a consigne ni meme a Consigne )

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

Re: Sonde DS18B20 LED et python

Message par Manfraid » lun. 9 mars 2015 06:06

Salut juste une petite correction de ton code, je ne l'ai pas étudier juste corriger
pour info le bloc try attend toujours un deuxième bloc avec soit excpet, else ou finnaly

Code : Tout sélectionner

import os
import glob
import time

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28-000006a3375b')[0]
device_file = device_folder + '/w1_slave'

def read_temp_raw():
        f = open(device_file, 'r')
        lines = f.readlines()
        f.close()
        return lines

def read_temp():
    lines = read_temp_raw()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = read_temp_raw()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        temp_f = temp_c * 9.0 / 5.0 + 32.0
        return temp_c, temp_f
while True:
        print(read_temp())
        time.sleep(1)

def temperature():
     global temp
     tfile = open("/sys/bus/w1/devices/28-000006a3375b/w1_slave")
     text = tfile.read()
     tfile.close()
     temperaturedata = text.split("\n")[1].split(" ")[9]
     temperature = float(temperaturedata[2:])
     temp = round(temperature / 1000, 2)

CONSIGNE = 20
LEDVERTE = 18
LEDROUGE = 17

def froid ():
     # GPIO.output(LEDVERTE,GPIO.LOW)
     # GPIO.output(LEDROUGE,GPIO.HIGH)
     print("froid")

def chaud ():
     print ("chaud")
     # GPIO.output(LEDVERTE,GPIO.HIGH)
     # GPIO.output(LEDROUGE,GPIO.LOW)
def panic ():
     print ("panic") # les deux leds s'allument si anomalie
    # GPIO.output(LEDVERTE,GPIO.HIGH)
    # GPIO.output(LEDROUGE,GPIO.HIGH)
    # GPIO.output(LEDVERTE,GPIO.HIGH)
    # GPIO.output(LEDROUGE,GPIO.HIGH)
    #jeu d'essais
    temperaturedata="b:21000" # -> chaud
    temperaturedata="a:12000"
    temperaturedata="t:18000" # froid
    temperaturedata="zzzzzz" # valeur aberrante  -> panic

try :
      temperature=float(temperaturedata[2:])
      print (temperature)
      temp = round(temperature / 1000, 2)
      # while True:
      if temp >= consigne:
        chaud()
      elif temp < consigne:
        froid()
      else :
        panic()
except :
        panic()
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.

Avatar du membre
dbrion0606
Raspinaute
Messages : 164
Enregistré le : ven. 30 janv. 2015 15:51

Re: Sonde DS18B20 LED et python

Message par dbrion0606 » lun. 9 mars 2015 17:25

Code : Tout sélectionner

    temperaturedata="zzzzzz" # valeur aberrante  -> panic

try :
     
Deux points :
a)si ma mémoire est bonne, try doit être aligné avec le code du dessus (et les indentations doivent être propagées):

b)Vous ne pouvez pas prendre un code pour tester sur PC et le copier coller sans adaptation. (l'avantage d'un bloc try est qu'on sépare complètement les erreurs au décodage des tests sur un intervalle). Les jeux d'essai -valables pour un PC sans GPIO) doivent être adaptés (décommenter les appels au GPIO et ... commenter les affichages par print dans les fonctions; commenter le forçage de valeurs -qui sert à indiquer qu'on a testé autant que faire se peut un bout de code, mais qui n'a pas lieu d'être activé dans une version finale ...où il forcera des valeurs fausses, ayant servi aux essais!-)

edité
c) dans le code que j'ai posté, j'avais commenté le while (1== 1) {lire température; coder diodes; dormir 30 secs} -> cela fait un niveau d'indentation en plus si on veut le passer à une scrutation continue...;
le bloc try doit porter sur le décodage de la température (conversion de chaine de cars en float).... qui est plus génant que le fait de ne pas être >= ni < CONSIGNE -rare-

Répondre

Retourner vers « Gestion de la température »