Nella mia casa sono installati un impianto solare termico, cioè l’impianto solare per scaldare l’acqua, ed un termocamino Vulcano 25-3, cioè un modello di termocamino che funziona in tandem con la caldaia sia per i termosifoni che per l’acqua calda sanitaria.
Sin dal momento dell’installazione del termocamino ho sovrapposto alla centralina di fabbrica una mia centralina con la quale decido se l’acqua calda di casa deve provenire dal termocamino oppure dal boiler solare, e inoltre, nel caso che la temperatura del termocamino diventi troppo alta, allora la centralina apre in automatico le due valvole di zona (piano terra e primo piano) per smaltire più velocemente la temperatura in eccesso.
E’ un nodo costruito con una scheda Chibiduino e due relé, programmata con il framework per la domotica Souliss. Il Chibiduino comunica via radio con un gateway Souliss, che altro non è un secondo Chibiduino che, a sua volta, con una scheda etherner è collegato direttamente al router.
Ho deciso di provare a sostituire il nodo ma programmandolo, questa volta, con il firmware Tasmota ed una “centralina “Sonoff 2ch”. Il nodo comunicherà con il protocollo MQTT ed io lo utilizzerò esclusivamente con il software di domotica open source Openhab.
Passo primo:
Modifico il Sonoff aggiungendo i pin necessari per riprogrammarlo (Vcc – Rx – Tx – GND) con una scheda seriale USB.
Passo secondo:
Seguo le istruzioni per compilare Tasmota. Non le riporto qui perché basta cercarle sul wiki di Tasmota. Io ho usato Visual Code con l’estensione Platformio. Una volta presa la mano non è difficile.
Passo terzo:
Collego due sensori DS18B20. Ho scelto di collegare il contatto data dei sensori (che devono essere collegati in parallelo) al pin Rx della scheda Sonoff, ma nulla vieta di usare il contatto Tx oppure quello Button 1. È buona norma inserire una resistenza di pull-up (da 4.7 kOhm) tra il cavo data e V+, perché non tutti i pin disponibile la hanno interna. Ad esempio i pin tx e ex non ce l’hanno.
Note sulla compilazione del firmware Tasmota:
Il firmware Tasmota deve essere ricompilato perché, nelle compilazioni stock, la funzionalità termostato non è abilitata.
Allora… dobbiamo scaricare il codice di Tasmota dal sito github (cercare su Google Tasmota Github) e modificare il file user_config_override.h.
In questo file bisogna aggiungere le righe seguenti prima dell’ultmo #endif:
#ifndef USE_THERMOSTAT
#define USE_THERMOSTAT
#endif
#define THERMOSTAT_SENSOR_NAME "DS18B20-1"
oppure, come si vedrà più avanti, nel caso il sensore sia invertito e non sia possibile invertire il primo col secondo, allora:
#define THERMOSTAT_SENSOR_NAME "DS18B20-2"
Il sensore che prenderà il nome “DS18B20-1” è quello che, nella mia applicazione, dovrà essere inserito nel vano sensore del termocamino. Per capire quale sensore si chiamerà “DS18B20-1” e quale “DS18B20-2” è necessario qualche test. Io uso il software MQTT-Explorer per vedere in chiaro ciò che il nodo comunica al broker MQTT. Questo è il motivo per cui mi piace usare Tasmota e MQTT. E’ la facilità di fare il debug.
Passo quarto:
Una volta caricato il firmware e fatte le configurazioni di base di Tasmota, come ad esempio l’impostazione del ssid e password della nostra rete WiFi, possiamo passare alla programmazione.
Configurazione modulo:
Tutta la programmazione del nodo avverrà dalla pagina web del nodo Tasmota che abbiamo appena creato.
Il modulo Sonoff Dual R2 funziona perfettamente con le impostazioni di default, ed il pin Rx, che corrisponde al GPIO3 può essere configurato per i sensori DS18B20:
Per il mio scopo userò una configurazione leggermente diversa. Ho bisogno, oltre che dei due pulsanti (non fisici ma presenti solo sulla WebUI) collegati ai Relé 0 e Relé 1, anche di uno switch “virtuale”, nel senso che non è collegato ad alcun relè. Il terzo pulsante (sulla webUI) mi servirà per selezionare la modalità automatica o manuale. Lo imposto sul GPIO14 “sperando” che questo GPIO non sia utilizzato internamente e che magari causi il blocco della scheda:
Impostazione delle regole:
Impostiamo le rules, che saranno il cuore della logica del nodo.
Il mio scopo, e necessità, è di confrontare la temperatura dei due sensori e di attivare il relé 0 quando il sensore 1 ha la temperatura più alta del sensore 2. Viceversa, quando è il sensore 2 a misurare la temperatura più alta allora il relé rimane nello stato OFF.
Per impostare la regola dobbiamo andare nella scheda Console di Tasmota e dare i seguenti comandi. Con questa regola il relè 0 di attiva/disattiva automaticamente (in base alle temperature rilevate dai sensori) solo quando il pulsante 2 è nello stato ON (stato 1):
rule1 ON Power3#State=1 DO rule2 1 ENDON ON Power3#State=0 DO rule2 0 ENDON
rule2 ON tele-DS18B20-1#Temperature DO Var1 %value% ENDON ON tele-DS18B20-2#Temperature < %Var1% DO POWER1 1 ENDON ON tele-DS18B20-2#Temperature > %Var1% DO POWER1 0 ENDON
e poi
rule on
Caso mai vi ritrovaste le sonde invertite e non aveste la possibilità di mettere l’una al posto dell’altra, allora andranno invertiti i riferimenti ai due sensori. Così:
rule2 ON tele-DS18B20-2#Temperature DO Var1 %value% ENDON ON tele-DS18B20-1#Temperature < %Var1% DO POWER1 1 ENDON ON tele-DS18B20-1#Temperature > %Var1% DO POWER1 0 ENDON
Collegamento dei sensori:
I sensori di temperatura devono essere collegati a GND, +3.3V e ed al contatto Rx (GPIO3).
Come da indicazioni che si trovano online io ho aggiunto una resistenza di pullup da 4.7 kΩ tra il contatto GPIO3 e +3.3V.
Adesso spostiamoci nella scheda Console e digitiamo i comandi:
WebButton1 AcquaTermocamino
WebButton2 Allarme
WebButton3 Auto
Impostare il termostato:
Nella scheda Console digitiamo i seguenti comandi.
Impostare l’input. Con il valore 1 diciamo che il valore di input per il termostato viene dal sensore di temperatura:
SensorInputSet 1
Il termostato dovrà funzionare con il secondo relé:
OutputRelaySet 2
Poi abilitiamo la funzione termostato:
ThermostatModeSet 1
Impostiamo la logica di funzionamento del termostato (cooling):
ClimateModeSet 1
e la modalità di funzionamento dell’algoritmo del termostato (0 Hybrid, 1 PI, 2 Ramp-Up):
CONTROLLERMODESET 0
Dal wiki leggo che le impostazioni del termostato vengono memorizzati in ram, quindi perchè rimangano in memoria ad ogni riavvio occorre impostare una regola:
rule3 ON Power1#boot DO Backlog power3 1; sensorinputset 1;controllermodeset 0;climateModeSet 1; OutputRelaySet 2; thermostatmodeset 1;controllermodeset 0; temptargetset 65 ENDON
e poi
rule3 on
Esistono decine di comandi per impostare le logiche di funzionamento del termostato, per i quali si rimanda al wiki. Ne scrivo qui qualcuno perché potrebbe essere utile per i test:
TelePeriod 300 (imposta a 300 secondi la frequenza di aggiornamento dei dati al broker MQTT)
TempMeasuredSet (legge o imposta la temperatura di input della logica del termostato. Funziona solo se SensorInputSet è uguale a 0)
TempTargetSet (imposta il setpoint – noi lo faremo da Openhab, via MQTT, ma può essere utile impostare il setpoint dalla console per i test)
TempHystSet (legge o imposta l’isteresi)
timeMinActionSet (legge o imposta il tempo minito di attivazione. Di default è 4 minuti.)
Nel prossimo articolo mostrerò un esempio di come impostare questo nodo in Openhab.
Ciao Tonino,
ho letto il tuo interessante articolo “Tasmota con due sensori DS18B20 – Confronto tra le temperature – Funzione termostato”.
Secondo te è possibile creare con Tasmota due istanze separate della funzione termostato in modo da controllare in maniera indipendente due zone della casa.
Grazie
Secondo il wiki è possibile controllare più uscite in modo separato ed indipendente modificando un parametro e ricompilando Tasmota.
Il parametro è:
#define THERMOSTAT_CONTROLLER_OUTPUTS 1 // Number of outputs to be controlled independently
e ne parla qui, in fondo alla pagina:
https://tasmota.github.io/docs/Thermostat/#thermostat-persistent-storage-for-configuration