Questo forum utilizza i cookies
Questo forum fa uso di cookie per migliorare l'esperienza utente. I cookie sono piccoli file di testo memorizzati sul tuo browser. I cookie impostati dal forum possono essere utilizzati solo su questo sito e non costituiscono rischio per la sicurezza, vengono utilizzati unicamente per memorizzare le tue preferenze. Navigando sul sito accetti che RaspberryItaly installi i cookie sul tuo browser.
Per maggiori informazioni consulta l'informativa sui Cookie di RasberryItaly

Un cookie verra memorizzato nel browser indipendentemente dalla scelta per evitare che questa domanda ti venga posta di nuovo. Sarai in grado di modificare le impostazioni dei cookie in qualsiasi momento utilizzando il link nel footer.
  • 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