• 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
#11
(09/03/2017, 17:22)Luck798 Ha scritto: Grazie ragazzi per i consigli sono riuscito ad azionare il tutto ma ancora ho un problemino:
questo e' il codice:
<?php
ob_start();
require './DHT.php';  
$output = ob_get_clean();
$var=fopen("/var/www/html/rele/centigradi.txt","r+");
file_put_contents($var,$output);
$output=substr($output, 12, 6);
$file1="17.0 C";
{
 if ($output == $file1) {
   exec("gpio mode 7 out");
   exec("gpio write 7 1");
 } else {
  exec("gpio mode 7 out");
  exec("gpio write 7 0");
 }
}

echo $output;

?>
pero' vorrei un ciclo che mi va' ad eseguire costantemente il confronto tra la temperatura data e quella del sensore
in modo tale che al raggiungimento il rele' va in off e la caldaia si stacca. e magari poter dare la temperatura no come costante all'interno del programma , ma sempre tramite pagina web poterla inserire manualmente.
Grazie mille

potreste aiutarmi? Rolleyes
Risposta
#12
Ciao!
No,
Col php dovevi solo fare la parte di scrittura su txt.
Uno script a parte, in python, con un ciclo a loop infinito confronta reale con quella letta dal txt.
Appena ho un attimo ti invio un abbozzo di script
Il mio software non ha mai bugs. Include soltanto funzionalità casuali.


Risposta
#13
Eccomi,
La bozza della parte "web" è questa

Codice PHP:
<?php
if(isset($_POST['ok'])){
  $input $_POST['inputText'];
  $myfile fopen("temp.txt""w") or die("Errore apertura file!");
  fwrite($myfile$input);
  fclose($myfile);
}
?>

<html>
<body>
<form action="" method="post">
<?php echo $message?>
  <input type="text" name="inputText"/>
  <input type="submit" name="ok"/>
</form>
</body>
</html> 
Lo script in python invece qualcosa del genere

Codice:
#!/usr/bin/python
import time

while True:
       c = open("temp.txt","r")
       tempsoglia = c.read()
       c.close()
       if tempsoglia>TEMPRILEVATA:
               attivacaldaia()
       time.sleep(30)
Dove ogni 30 secondi legge la soglia che hai scritto nel txt, la confronta con quella rilevata (che io ho chiamato TEMPRILEVATA) e, nel caso fosse maggiore esegue la funzione attivacaldaia()
Il mio software non ha mai bugs. Include soltanto funzionalità casuali.


Risposta
#14
Grazie mille
ho fatto il file php che mi hai dato ma quando vado ad inserire il testo, mi da' "errore apertura file!"!! e non mi copia nulla sul file txt che ho creato in una cartella del raspberry cioe' in (/var/www/html/rele/temp.txt)
Risposta
#15
Prova a creare a mano il file temp.txt e poi
Codice:
sudo chmod www-data:www-data temp.txt
Nel caso non dovesse funzionare, postaci l'output di
Codice:
cat /var/log/apache*/error.log
Il mio software non ha mai bugs. Include soltanto funzionalità casuali.


Risposta
#16
Dopo aver creato txt con :
- sudo nano temp.txt
e dando il comando:
-sudo chmod www-data:www-data temp.txt
mi da' il seguente errore:
chmod: modo non valido: "www-data:www-data"

dando:
cat /var/log/apache*/error.log
mi da' il seguente errore
PHP Warning: fopen(/var/www/html/rele/temp.txt): failed to open stream: Permission denied in /var/www /html/temp.php on line 4,
Risposta
#17
Perdonami, ho sbagliato io. Il comando giusto è
Codice:
sudo chown -R www-data:www-data temp.txt
Il mio software non ha mai bugs. Include soltanto funzionalità casuali.


Risposta
#18
OK Ifunziona perfetto Grazie..posso chiederti un'altra cosa?
il ciclo "while" va bene inserito in questo contesto?
:
codice :
import sys
import os
import Adafruit_DHT
import time
import RPi.GPIO as GPIO
import string
# Parse command line parameters.
sensor_args = { '11': Adafruit_DHT.DHT11,
'22': Adafruit_DHT.DHT22,
'2302': Adafruit_DHT.AM2302 }
if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
sensor = sensor_args[sys.argv[1]]
pin = sys.argv[2]
else:
print('usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#')
print('example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4')
sys.exit(1)

# Try to grab a sensor reading. Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

# Un-comment the line below to convert the temperature to Fahrenheit.
# temperature = temperature * 9/5.0 + 32

# Note that sometimes you won't get a reading and
# the results will be null (because Linux can't
# guarantee the timing of calls to read the sensor).
# If this happens try again!
if humidity is not None and temperature is not None:
print('Temperatura={0:0.1f} C Umidita={1:0.1f} %'.format(temperature, humidity))
out_file = open("/var/www/html/rele/centigradi.txt","w")
out_file.write('Temperatura={0:0.1f} C '.format(temperature))
out_file.close()
TEMPRILEVATA = out_file[:-4]

while True:
c = open("var/www/html/temp.txt","r")
tempsoglia = c.read()
c.close()
if tempsoglia > TEMPRILEVATA:
attivacaldaia()
GPIO.setmode(GPIO.BCM)
GPIO.setup(7, GPIO.OUT)
GPIO.setwarnings(False)
GPIO.output(7, True)
Risposta
#19
Vorrei fare anche io un crono termostato, ma partendo da zero, e vedendo voi esperti che ogni tanto vi inceppate...mi prende male!!!! Scusate l OT, ma vi seguo per capirci qualcosa ..

Inviato dal mio ALE-L21 utilizzando Tapatalk
Risposta
#20
(10/03/2017, 20:34)Luck798 Ha scritto: OK Ifunziona perfetto Grazie..posso chiederti un'altra cosa?
il ciclo "while" va bene inserito in questo contesto?
:
codice :
import sys
import os
import Adafruit_DHT
import time
import RPi.GPIO as GPIO
import string
# Parse command line parameters.
sensor_args = { '11': Adafruit_DHT.DHT11,
'22': Adafruit_DHT.DHT22,
'2302': Adafruit_DHT.AM2302 }
if len(sys.argv) == 3 and sys.argv[1] in sensor_args:
sensor = sensor_args[sys.argv[1]]
pin = sys.argv[2]
else:
print('usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#')
print('example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4')
sys.exit(1)

# Try to grab a sensor reading. Use the read_retry method which will retry up
# to 15 times to get a sensor reading (waiting 2 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

# Un-comment the line below to convert the temperature to Fahrenheit.
# temperature = temperature * 9/5.0 + 32

# Note that sometimes you won't get a reading and
# the results will be null (because Linux can't
# guarantee the timing of calls to read the sensor).
# If this happens try again!
if humidity is not None and temperature is not None:
print('Temperatura={0:0.1f} C Umidita={1:0.1f} %'.format(temperature, humidity))
out_file = open("/var/www/html/rele/centigradi.txt","w")
out_file.write('Temperatura={0:0.1f} C '.format(temperature))
out_file.close()
TEMPRILEVATA = out_file[:-4]

while True:
c = open("var/www/html/temp.txt","r")
tempsoglia = c.read()
c.close()
if tempsoglia > TEMPRILEVATA:
attivacaldaia()
GPIO.setmode(GPIO.BCM)
GPIO.setup(7, GPIO.OUT)
GPIO.setwarnings(False)
GPIO.output(7, True)
È un po incasinato. Riesci a postarci SOLO il codice che legge dal sensore?
Il mio software non ha mai bugs. Include soltanto funzionalità casuali.


Risposta
  


Vai al forum:


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