• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
programma aiuto cronotermostato

Aiuto programma cronotermostato
#21
Ecco il codice di lettura sensore che scrive il tutto su un file centigradi.txt
Codice:
#!/usr/bin/python
import Adafruit_DHT
import os
sensor = Adafruit_DHT.DHT11
pin = 26
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
if humidity is not None and temperature is not None:
print 'Temp={0:0.1f}*C  Humidity={1:0.1f}%'.format(temperature, humidity)
     
out_file = open("/var/www/html/centigradi.txt","w")
out_file.write('Temperatura={0:0.1f} C  Umidita={1:0.1f} %'.format(temperature, humidity))
out_file.close()
else:
print 'Failed to get reading. Try again!'
Risposta
#22
Ciao, puoi iniziare a provare così:
Codice:
#!/usr/bin/python
import time as t
import Adafruit_DHT
import os
def t_rilevata():
   sensor = Adafruit_DHT.DHT11
   pin = 26
   humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
   temp='{0:0.1f}'.format(temperature)
   print "Debug: Temperatura rilevata: " + + str(temp)
   return temp
def t_soglia():
   in_file = open("temp.txt","r")
   soglia = in_file.read()
   in_file.close()
   print "Debug: Temperatura soglia: "+ str(soglia)
   return int(soglia)
while True:
   if t_rilevata()<t_soglia():
       print 'Minore di soglia - Accendo la caldaia'
   else:
       print 'Maggiore di soglia - Spengo la caldaia'
   t.sleep(30)
In questo caso, ogni caso misura la temperatura e legge la soglia (in caso fosse cambiata)
  • Se la temperatura rilevata è minore della soglia dice "Accendo la caldaia"
  • Se la temperatura rilevata è maggiore della soglia dice "Spengo la caldaia"
Per ora, non attiva nessun relè. 
L'unica cosa che devi verificare è che nell'output "Debug: Temperatura soglia: TOT" TOT sia solo un numero. (senza simbolo del grado o la scritta "gradi").
Piazza lo script nella cartella dove scrivi dal file php e prova ad esegurlo.
Facci sapere!
Il mio software non ha mai bugs. Include soltanto funzionalità casuali.


Risposta
#23
Ciao Gabb
ho scritto il codice ma esenguendo il file mi da'


Traceback (most recent call last):
File "dht11.py", line 20, in <module>
if t_rilevata()<t_soglia():
File "dht11.py", line 11, in t_rilevata
print "Debug: Temperatura rilevata: " + + str(temp)
TypeError: bad operand type for unary +: 'str'

quale potrebbe essere l'errore?
Risposta
#24
Prova a sostituire "return temp" con "return int(temp)".
Il mio software non ha mai bugs. Include soltanto funzionalità casuali.


Risposta
#25
corretto ora mi da':

File "dht11.py", line 23
print 'Minore di soglia - Accendo la caldaia'
^
IndentationError: expected an indented block
Risposta
#26
Hai fatto casini con gli spazi. Incollalo direttamente da questo
Codice:
#!/usr/bin/python
import time as t
import Adafruit_DHT
import os
def t_rilevata():
   sensor = Adafruit_DHT.DHT11
   pin = 26
   humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
   temp='{0:0.1f}'.format(temperature)
   print "Debug: Temperatura rilevata: " + str(temp)
   return int(temp)
def t_soglia():
   in_file = open("temp.txt","r")
   soglia = in_file.read()
   in_file.close()
   print "Debug: Temperatura soglia: "+ str(soglia)
   return int(soglia)
while True:
   if t_rilevata()<t_soglia():
       print 'Minore di soglia - Accendo la caldaia'
   else:
       print 'Maggiore di soglia - Spengo la caldaia'
   t.sleep(30)
Il mio software non ha mai bugs. Include soltanto funzionalità casuali.


Risposta
#27
Fatto pero' mi da':
Traceback (most recent call last):
File "dht11.py", line 20, in <module>
if t_rilevata()<t_soglia():
File "dht11.py", line 10, in t_rilevata
temp='{0:0.1f}'.format(temperature)
ValueError: Unknown format code 'f' for object of type 'str'
Risposta
#28
Quella era parte del codice che mi diedi tu... Vedi com'era nell'originale
Il mio software non ha mai bugs. Include soltanto funzionalità casuali.


Risposta
#29
A mio avviso c'è un piccolo problema di logica sul controllo della temperatura e precisamente qui:

while True:
   if t_rilevata()<t_soglia():
       print 'Minore di soglia - Accendo la caldaia'
   else:
       print 'Maggiore di soglia - Spengo la caldaia'
   t.sleep(30)

Mi spiego, al minimo variare di un decimo di grado il relè comuta, effetto che in questo codice è parzialmente attenuato dal time.sleep(30).
La logica, di solito, applicata nei termostati è l'utilizzo di un delta-t, cioè un range di temperature di non intervento. Ipotizziamo una temperatura di soglia (per usare i termini del codice) di 20,0 °c ed un delta-t di 1 °c si deve accendere a 19,5 e spegnere a 20,5.
Il codice dovrebbe diventare una cosa tipo:
delta_t = 1.0
while True:
  if t_rilevata()<(t_soglia()-delta_t/2):
      print 'Minore di soglia - Accendo la caldaia'
  elif t_rilevata()>(t_soglia()+delta_t/2):
      print 'Maggiore di soglia - Spengo la caldaia'
  t.sleep(30)

Il delta lo si puo portare tranquillamente a che valore si preferisce, ma con sensori così non scenderei sotto il mezzo grado.

Mandi

Barbezuan
Risposta
#30
Quello che ho postato qui è un test. È ovvio che ogni 30 secondi la caldaia non può accendersi-spegnersi.
Non ho assolutamente idea di come funzioni la lettura da quel sensore e che valori restituisca. Ho scritto questo miniscript per verificare queste cose.
Il mio software non ha mai bugs. Include soltanto funzionalità casuali.


Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect