Il progetto prevede la creazione di una o più stazioni di monitoraggio dell’ambiente domestico che eventualmente possono, con le dovute accortezze, essere estese ad ambienti pubblici e/o aziendali. 

architettura del sistema di monitoraggio


L’idea

Il progetto nasce dall’idea di sensibilizzare su temi quali il comfort ambientale e come quest’ultimo influisce sulla salute personale. Durate l’ultimo periodo di pandemia ci siano ritrovati chiusi in casa senza esserne pronti: dalle postazioni di lavoro provvisorie ad ambienti poco illuminati, i problemi possono essere diversi.

Ci sono diversi fattori che contribuiscono al comfort ambientale e la loro ottimizzazione permette di migliorare la propria salute. Su questo ho scritto diversi articoli:

Il progetto nasce anche in rinforzo del progetto @TCS andando a rinforzare alcuni punti progettuali ma espandendosi dalla temperatura/umidità ad altri fattori.

Vengono trattati vari temi come l’importanza dell’illuminazione, la qualità dell’aria, l’insonorizzazione acustica e i problemi legati all’ergonomia degli ambienti di lavoro.

l tutto è sviluppato su una piattaforma open source così da poter essere facilmente replicabile da chiunque. Si utilizza NodeMCU, progettato per l’IoT, che permette di leggere facilmente diversi sensori e di integrarsi con i sistemi web. È presente anche un server dove sono raccolti tutti i dati così da poter avere sempre la storia dei mesi precedenti e poter stimare le correzioni necessarie.

Tutto il software e l’hardware utilizzato è opensource e l’intero progetto è basato sull’ambiente di sviluppo Arduino e NodeMCU. 

server monitoraggio
Webserver del singolo device di monitoraggio

Il sistema si focalizzerà più sul controllo generale e sull’integrazione con la domotica attualmente in commercio facendo anche cenni sulla possibilità di impostare dei controlli base con degli attuatori.

attuatori
Esempio di configurazione per Tasmota

Il progetto di monitoraggio


All’interno del progetto si vuole mostrare l’importante di avere un ambiente confortevole e come il benessere ambientale sia fondamentale per la salute all’interno sia dell’ambiente domestico che di quello lavorativo. Sono presi in considerazioni vari fattori come la temepratura e l’umidità, l’illuminazione, l’inquinamento acustico e la qualità dell’aria, considerandone la presenza di particolato e un ricambio costante.

NodeMCU

NodeMCU è una piattaforma open source sviluppata appositamente per l’IoT. Include un firmware che funziona tramite il modulo wifi ESP8266 e viene fornito con diverse basi hardware. Negli esempi seguenti è stato utilizzato il modulo ESP12E. Il chip è facilmente programmabile con Arduino IDE integrando le librerie necessarie.

Lettura sensori

Tramite questo dispositivo si possono facilmente controllare diversi sensori digitali come il DHT22 per temperatura e umidità o il DS18B20 per la temperatura, anche in immersione.

Banalmente per leggere il sensore è sufficiente fare riferimento alle relative librerie, ad esempio:

#include "DHT.h"
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
Schema di collegamento DHT11 + DS18B20
Applicazione reale – Prototipo no. 6 – Utilizzato per leggere temperatura e umidità in un ambiente domestico. Posizionato all’interno di una scatola elettrica.

Pagina web

Ci si può facilmente connettere ad internet sia utilizzando il dispositivo come access point sia connettendosi ad una rete esistente. Mediante le libreria AsyncWebServer e AsyncTCP si realizza facilmente un web server in cui possono essere integrati i dati dei sensori. Ad esempio si crea una pagina HTLM con i contenitore per i dati:

<p>
  <i class="fas fa-thermometer-half" style="color:#059e8a;"</i> 
  <span class="dht-labels">Temperature</span> 
  <span id="temperature">%TEMPERATURE%</span>
  <sup class="units">°C</sup>
</p>

Poi si aggiunge un algoritmo in Javascript per aggiornare automaticamente i contenitore.

<script>
setInterval(function ( ) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("temperature").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/temperature", true);
  xhttp.send();
}, 10000 ) ;
</script>

Chiaramente è necessario anche utilizzare una funzione che viene richiamata per un intervallo di tempo scelto così da richiedere i dati con l’url /data:

  xhttp.open("GET", "/data", true);
  xhttp.send();
}, 10000 ) ;
if (this.readyState == 4 && this.status == 200) {
  document.getElementById("temperature").innerHTML = this.responseText;
}

Allora si passano i dati ad una funzione che si occupa di aggiornare i contenitori nella pagina HTLM

String processor(const String& var){
  //Serial.println(var);
  if(var == "TEMPERATURE"){
    return String(t);
  }
  else if(var == "DATA"){
    return String(data);
  }
  return String();
}

Per i codici completi fare riferimento alla repository GitHub.

Dark Mode

tempcontrol (this link opens in a new window) by mastroalex (this link opens in a new window)

The purpose of this project is to create a station for monitoring the environmental conditions for home.

Integrazione con Alexa

Per integrare rapidamente il sistema con Alexa è stata utilizzata la piattaforma Sinric Pro. Si utilizza il codice fornito, settando correttamente i parametri e il dispositivo. Poi si aggiunge la skill “SinricPro” su Alexa e dopo il login sarà possibile vedere il sensore di temperatura.

App SinricPro (sx) e Alexa (dx)

Database

All’interno della repository è riportato sia il procedimento per costruire un database su Raspberry Pi utilizzabile in LAN sia il procedimento per un host remoto. La procedura è molto simile. Si crea una tabella MySQL associando ad ogni colonna un sensore:

CREATE TABLE SensorData (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    sensor VARCHAR(30) NOT NULL,
    location VARCHAR(30) NOT NULL,
    value1 VARCHAR(10),
    value2 VARCHAR(10),
    value3 VARCHAR(10),
    reading_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

Si crea poi una pagina .php contenente il codice per scrivere i dati nel database ricevuti mediante una richiesta POST dall’ESP.

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $api_key = test_input($_POST["api_key"]);
    if($api_key == $api_key_value) {
        $sensor = test_input($_POST["sensor"]);
        $location = test_input($_POST["location"]);
        $value1 = test_input($_POST["value1"]);
        $value2 = test_input($_POST["value2"]);
        $value3 = test_input($_POST["value3"]);
        
        // Create connection
        $conn = new mysqli($servername, $username, $password, $dbname);
        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        } 
        
        $sql = "INSERT INTO SensorData (sensor, location, value1, value2, value3)
        VALUES ('" . $sensor . "', '" . $location . "', '" . $value1 . "', '" . $value2 . "', '" . $value3 . "')";
        
        if ($conn->query($sql) === TRUE) {
            echo "New record created successfully";
        } 
        else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }
    
        $conn->close();
    }

È necessario configurare l’ESP per fare correttamente la richiesta POST inviando un messaggio contenente i dati dei sensori concatenati nell’ordine corretto.

// Your Domain name with URL path or IP address with path
http.begin(serverName);
// Specify content-type header
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Prepare your HTTP POST request data
String httpRequestData = "api_key=" + apiKeyValue + "&sensor=" + sensorName + "&location=" + sensorLocation + "&value1=" + String(bme.readTemperature()) + "&value2=" + String(bme.readHumidity()) + "&value3=" + String(bme.readPressure()/100.0F) + "";
int httpResponseCode = http.POST(httpRequestData);

C’è poi un’altra pagina php che legge i valori dal database e crea i grafici passando i dati alla libreria Highcharts.

var chartH = new Highcharts.Chart({
  chart:{ renderTo:'chart-humidity' },
  title: { text: 'Humidity' },
  series: [{
    showInLegend: false,
    data: value2
  }],
  plotOptions: {
    line: { animation: false,
      dataLabels: { enabled: true }
    }
  },
  xAxis: {
    type: 'datetime',
    //dateTimeLabelFormats: { second: '%H:%M:%S' },
    categories: reading_time
  },
  yAxis: {
    title: { text: 'Humidity (%)' }
  },
  credits: { enabled: false }
});

Per i codici completi fare riferimento alla repository GitHub.

Dark Mode

tempcontrol (this link opens in a new window) by mastroalex (this link opens in a new window)

The purpose of this project is to create a station for monitoring the environmental conditions for home.

Tasmota e domotica

Può far comodo integrare questi sensori con degli attuatori. Ad esempio può essere utile attivare un ventilatore quando si supera una certa temperatura oppure accendere una luce quando scende l’illuminazione ambientale fino ad arrivare a controllori più sofisticati come termostati, dimmer per l’illuminazioni, ventilazione per la qualità dell’aria, ecc.

Un semplice sistema per integrare la piattaforma ESP con Alexa e il controllo remoto degli attuatori è il firmware offerto da Tasmota. È un firmware alternativo open source che permette di controllare diverse uscite sull’ESP impostando anche uscite intelligenti, condizioni e timer.

È sufficiente installare il software Tasmotizer e caricare il firmware corretto.

Software Tasmotizer
Webserver Tasmota. Configurazione uscite/ingressi

Successivamente ci si può connettere all’indirizzo ip del device e configurare le uscite desiderate.

Il sistema è integrabile con Alexa e accessibile da web server.

Applicazione reale – Prototipo no. 2 – Dispositivo con Tasmota connesso a 3 relè per controllo 220V e dispositivo con DHT11 per rilevamento temperatura e umidità.

Sviluppi futuri

È evidente la possibilità di ottimizzare il tutto trasferendolo su un circuito PCB, eliminando tutto ciò che è inutile e utilizzando solo i dispositivi necessari al funzionamento. Ciò implica sicuramente un aumento dei costi di produzione ma permetterebbe di ridurre di molto le dimensioni. È chiaro che una produzione su larga scala deve essere valutata prima e non certo per la fase di test.

Esempi


Lettura nelle 24 ore di temperatura ed umidità da una stanza nel mese di luglio:

Il grafico contiene una spline sui punti ottenuti da un campionamento ogni 5 minuti.

Lettura in una settimana nel mese di luglio:


Ringraziamenti

  • Termo Clima Service, per aver fornito parte del materiale e l’attrezzatura per la realizzazione dei prototipi
  • Leto Informatics, per aver fornito il server di hosting e parte della configurazione
  • Alina Elena Mihai, per le grafiche

Riferimenti


Leggi di più: https://github.com/mastroalex/tempcontrol