Lampone Pi – Termometro e controllo web domestico

In questo documento vedremo i passaggi da seguire per installare i sensori di temperatura su un Raspberry Pi, la creazione di un database per memorizzare le temperature e di uno script che rileva periodicamente la temperatura. Creeremo un sito web che ci permetterà di ottenere la temperatura attuale e un grafico con la cronologia della temperatura. Per arricciare il ricciolo, Metteremo sul sito Web i pulsanti che eseguiranno attività come l'accensione/spegnimento di un termostato!

lampone-DS18B20-bujarra

La prima cosa sarà quella di procurarsi un sensore di temperatura digitale come il DS18B20 che troviamo su eBay per 1€ anche sommergibile per l'acquario, Avremo anche bisogno di una resistenza di 4.7k. Potremmo anche avere un sensore di umidità per ottenere entrambi i grafici =).

Quello che faremo è abilitare i moduli all'uso dei termometri, installeremo MySQL per memorizzare la cronologia dei grafici della temperatura in un database, creeremo uno script in Python per riempire il database con informazioni ogni 2 minuti e per finire installeremo Apache e creeremo un sito web dove possiamo vedere in tempo reale le temperature oltre a un grafico con la cronologia. E se ci colleghiamo al documento precedente dove abbiamo visto come utilizzare un relè con il Raspberry, Possiamo creare pulsanti sullo stesso sito web che ci permettono di accendere o spegnere una luce. Iniziamo abilitando i moduli:

[Codice sorgente]Sudo ModProbe W1-GPIO
Sudo ModProbe W1-Therm[/Codice sorgente]

Quando butto via il lampone dovrei tenerlo:

[Codice sorgente]sudo vim /etc/modules

w1-gpio
W1-THERM[/Codice sorgente]

E proviamo il seguente comando in cui vedremo la temperatura di ciascun sensore:

[Codice sorgente]cat /sys/bus/w1/devices/ID_SENSOR/w1_slave[/Codice sorgente]

 

Installa MySQL, requisiti e creare DB,

Dopo essere usciti i termometri già funzionanti, la prossima cosa sarà installare MySQL e tutti i requisiti per creare un database e memorizzare le temperature di nel mio caso 2 Sensori di temperatura (Ambiente e acquario). L'installazione di MySQL Server ti chiederà di impostare la password di root:

[Codice sorgente]sudo apt-get install python-pip
apt-get installa python-mysqldb
sudo pip richieste di installazione
Sudo Pip Install PyMySQL
Sudo apt-get install MySQL-Server MySQL-Client PHP5-MySQL[/Codice sorgente]

Entriamo in MySQL e creiamo un database chiamato 'Temperature', Una tabella chiamata 'temps’ con 3 Campi 'Temp1', 'Stagione 2’ e "created_at":

[Codice sorgente]mysql -u radice -p

Mysql> CREA DATABASE Temperature;
Mysql> UTILIZZO Temperature;
CREA TABELLA temperature (
temp1 GALLEGGIANTE, temp2 GALLEGGIANTE, created_at CURRENT_TIMESTAMP PREDEFINITO DEL TIMESTAMP
);[/Codice sorgente]

Demone per ottenere la temperatura,
Continuiamo a creare uno script in Python che legge le temperature e le memorizza nel database precedente, Per fare ciò, possiamo utilizzare il seguente script in cui modificheremo con i nostri corrispondenti ID sensore in 'sensorids', Possiamo chiamarlo 'temperatura_demonio.py':

[Codice sorgente]Richieste di importazione
Importa hashlib
tempo di importazione

sensoridi = ["28-00000523E071", "28-0000052391f2"]
temperature medie = []
per sensore nel campo(Len(Sensoridi)):
temperature = []
per il polltime nell'intervallo(0,3):
testo = ”;
while testo.split("n")[0].Trovare("SÌ") == -1:
tfile = aperto("/sys/bus/w1/devices/"+ sensoridi[sensore] +"/w1_slave")
testo = tfile.read()
tfile.close()
tempo.sonno(1)

seconda riga = testo.split("n")[1]
TemperatureData = Seconda Linea.Split(" ")[9]
temperatura = galleggiante(di temperaturadi dati[2:])
temperature.append(temperatura / 1000)

avgtemperature.append(somma(Temperature) / galleggiare(Len(Temperature)))

Acquario = Temperature medie[0]
ambient = temperature medie[1]

importare MySQLdb
db = MySQLdb.connect("ospite locale","radice","CONTRASENA_DE_ROOT","Temperature")
cursore = db.cursore()
cursore.execute("""INSERT INTO temps (Temp1,Temp2) VALORI (%s,%s) """,(Acquario,ambiente))
db.commit()[/Codice sorgente]

 

Eseguiamo lo script un paio di volte per creare un paio di record nel DB con

[Codice sorgente]Python temperatura_demonio.py[/Codice sorgente]

 

E controlliamo semplicemente che il database che contiene dati con:

[Codice sorgente]mysql -u radice -p
utilizzare le temperature;
Selezionare * da temps;[/Codice sorgente]

 

Se tutto è corretto, programmiamo lo script Python in modo che venga eseguito ogni due minuti, Aggiungiamo la seguente riga nel nostro cron con 'crontab -e’

[Codice sorgente]*/2 * * * * /usr/bin/python /home/pi/temperatura_demonio.py[/Codice sorgente]

 

Installazione del server web,
Una volta che abbiamo già un demone che sta catturando la nostra temperatura in un DB, la prossima cosa sarà mettere un sito Web con Apache e mettere un bel portale con alcuni grafici JavaScript. Avviato:

[Codice sorgente]sudo apt-get install apache2 php5 libapache2-mod-php5
WGET HTTP://iada.nl/en/system/files/tempmon_2_0.zip[/Codice sorgente]

Decomprimi il file ZIP su '/var/www/temp/’ e modificheremo nel 'index.php’ Tutti i dati di connessione corretti, così come apporteremo alcune modifiche di base, In questo esempio alcune parole tedesche che portano.

[Codice sorgente]$mysqli = nuovo mysqli("OSPITE", "UTENTE", "PAROLA CHIAVE", "BANCA DATI DI DATI");
Gem laatste 24u –> Calza
Contenitore per sensori –> Acquario
Sensor Buiten –> Ambiente[/Codice sorgente]

Lampone-Domotica-Bujarra

E questo sarebbe l'aspetto del Web una volta riavviato il servizio Apache! Sfruttatore, No?, Accederemo al sito HTTP://IP_RASPBERRY/temperatura

 

Aggiunta di pulsanti aggiuntivi al sito web,

Se vogliamo aggiungere pulsanti al sito web per eseguire qualsiasi azione, In questo esempio metteremo un pulsante per accendere il termostato che è collegato all'altro lato del relè (termostato_enciende.sh) & un altro per spegnerlo (termostato_apaga.sh); più altri due pulsanti per accendere & Spegni la luce del corridoio (pasillo_enciende.sh & pasillo_apaga.sh). Alla fine del file 'index.php', Prima della fine del body abbiamo aggiunto:

[Codice sorgente]

<h1>Riscaldamento</h1>

<form id="relè" action="remote_relay.php" method="OTTIENI">
<input type="pulsante" id="Termostato submitOn" style="bordo:1px solido #000; dimensione-carattere:40Px;" value="Acceso" onClick="TermostatorelayOn()"/>
<input type="pulsante" id="TermostatoinviaSpento" style="bordo:1px solido #000; dimensione-carattere:40Px;" value="Spento" onClick="TermostatorelèOff()"/>

<h1>Corsia</h1>
<input type="pulsante" id="PasillosubmitOn" style="bordo:1px solido #000; dimensione-carattere:40Px;" value="Acceso" onClick="PasillorelayOn()"/>
<input type="pulsante" id="CorridoioinviaOff" style="bordo:1px solido #000; dimensione-carattere:40Px;" value="Spento" onClick="CorridoioreiOff()"/>
</Modulo>

<?PHP $state = $_GET["totale"]; se ($stato == "Thermostatoon"){ Exec("/home/pi/termostato_enciende.sh"); } se ($stato == "Termostatooff"){ Exec("/home/pi/termostato_apaga.sh"); } se ($stato == "Pasilloon"){ Exec("/home/pi/pasillo_enciende.sh"); } se ($stato == "Pasillooff"){ Exec("/home/pi/pasillo_apaga.sh"); } ?>[/Codice sorgente]

 

E modifichiamo lo script Java che carica 'script.js’ Aggiunta delle seguenti modifiche:

[Codice sorgente]window.onload = funzione(){
buttonOn = document.getElementById('ThermostatosubmitOn');
buttonOn.onClick = ThermostatorelayOn;

buttonOff = document.getElementById('ThermostatosubmitOff');
buttonOff.onClick = TermostatorelèOff;

buttonOff = document.getElementById('Invio corridoio');
buttonOff.onClick = PasillorelayOff;

buttonOff = document.getElementById('Invio corridoio');
buttonOff.onClick = PasillorelayOff;
}

funzione TermostatorelayOn(){
nascosto = document.getElementById("totale");
hidden.value="Termostato;
form = document.getElementById("Staffetta");
form.method="OTTIENI";
form.action="index.php";
modulo.invio();
}
funzione TermostatorelayOff(){
nascosto = document.getElementById("totale");
hidden.value="Termostato spento";
form = document.getElementById("Staffetta");
form.method="OTTIENI";
form.action="index.php";
modulo.invio();
}
funzione HallwayrelayOn(){
nascosto = document.getElementById("totale");
hidden.value="Sala";
form = document.getElementById("Staffetta");
form.method="OTTIENI";
form.action="index.php";
modulo.invio();
}
funzione CorridoiorelèOff(){
nascosto = document.getElementById("totale");
hidden.value="Corridoio";
form = document.getElementById("Staffetta");
form.method="OTTIENI";
form.action="index.php";
modulo.invio();
}[/Codice sorgente]

Lampone-Domotica-01-Bujarra

E questo sarebbe il risultato del sito web da un iPad dove vedremo da un lato la temperatura attuale di quei due sensori, Ricorda che se ne possono aggiungere altri, o utilizzare un sensore di umidità, and so on… E in fondo possiamo mettere pulsanti semplici come questi per poter spegnere o accendere un relè e aprire o chiudere un circuito elettrico! O qualsiasi cosa ci venga in mente, andare… per connettersi dall'esterno (Internet) a questo sito web della nostra casa, possiamo utilizzare servizi gratuiti come DynDNS o NO-IP per conoscere in ogni momento l'IP pubblico che abbiamo oltre a configurare una VPN per l'accesso sicuro. Quindi da qualsiasi luogo possiamo accendere il termostato prima di tornare a casa, o qualsiasi altra esigenza che abbiamo, Come un allarme con una telecamera…

Post consigliati

Autore

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Non esitate a contattarmi, Cercherò di aiutarti ogni volta che potrò, Condividere è vivere ;) . Goditi i documenti!!!