Prestare sempre attenzione a seguire le indicazioni fornite in questo blog, soprattutto se si tratta di apparecchiature elettriche collegate alla tensione di 220V. Non mi ritengo responsabile di danni causati dall'aver seguito i consigli qui pubblicati.
Nel post precedente avevo introdotto il mio SONOFF 4 channel, descrivendo gli step fisici di installazione nell'impianto.
Questo bel dispositivo mi andrà a pilotare 4 luci: 1 interna e 3 esterne; naturalmente la centralina di controllo sarà sempre il solito OpenHAB con le sue belle e comode sitemap; il protocollo di comunicazione tra SONOFF e OpenHAB sarà, as usual, l'ormai arcinoto MQTT
Come prima cosa andiamo a configurare il SONOFF tramite interfaccia web, raggiungibile attraverso browser utilizzando l'indirizzo ip assegnato al device
Il primo step è settare il tipo di modello nella sezione Configuration -> Configure Module
Successivamente, nella sezione Configuration -> Configure MQTT, oltre alle solite informazioni di connessione al broker MQTT, inseriamo il topic così come lo vuole TASMOTA e cioè separato in TOPIC e FULLTOPIC
In questo caso il dispositivo trasmetterà e sarà in ascolto sul topic smarthome/sonoff4ch14/###
Al posto di ### TASMOTA andrà ad inserire il tipo di messaggio che andrà ad inviare (ad esempio cmnd per i comandi, state per le informazioni di stato, etc etc)
Tralascio il resto della configurazione che è praticamente identico a quanto già fatto sugli altri SONOFF.
Adesso tocca ad OpenHAB...vanno subito aggiunti i 4 item che mapperanno le 4 luci da comandare...
Creiamo quindi un nuovo file, chiamato sonoff4ch.items, nella solita cartella /etc/openhab2/items nel quale andremo ad inserire gli item da creare:
Come si vede, il topic MQTT è identico per tutti e 4 gli items...quello che cambia è il nome della proprietà, indicizzato da un numero con lo scopo di distinguere quale dei 4 relè entra in gioco.
Ultimo step....far vivere i 4 items attraverso una sitemap e prendere così il controllo del sonoff tramite APP OpenHAB (oltre che dai pulsanti a muro, cablati direttamente sui bottoni presenti nel sonoff)
Inseriamo allora i nostri 4 items nella sitemap già attiva per la gestione delle luci
(i 3 items per le luci esterne...)
Ecco il risultato nella sitemap completa:
Non ci resta che premere i pulsanti e vedere come si comportano le luci coinvolte.
Finalmente trovo un pò di tempo per proseguire con la mia "domotizzazione" di casa...
E' già da un pò di tempo che ho in casa il SONOFF 4 channel, il più grande.
Con questo semplice aggeggino sono in grado di pilotare, tramite connessione Wifi, 4 carichi. Nel mio caso lo utilizzerò per comandare 4 luci tra interno ed esterno.
Oltre ai connettori di collegamento di neutro, fase e terra per i 4 canali di uscita più un canale di ingresso per l'alimentazione, sono presenti 4 pulsanti che consentono di comandare le 4 uscite. Fondamentalmente è come se fossero 4 SONOFF Basic in un unico apparecchio e con un'unica connessione Wifi.
Come sempre, non utilizzerò il firmware standard, che permette l'utilizzo del dispositivo solo tramite app proprietaria EWelink, ma andrò a caricare l'ormai famosissimo firmware TASMOTA per una facile integrazione in OpenHAB tramite protocollo MQTT
Ecco il SONOFF durante l'upload del firmware tramite seriale
Come sempre, basta seguire le indicazioni presenti sul Wiki ufficiale di TASMOTA ed il gioco è fatto. In questo caso i connettori seriali sono anche molto comodi...
Ricordarsi che è un'operazione irreversibile, in quanto non è più ripristinabile il firmware originale
Per poter comandare il SONOFF anche tramite pulsante tradizionale ho pensato di rendere disponibili i 4 pulsanti integrati nel dispositivo stesso...collegandoli opportunamente ai pulsanti / interruttori a muro...
Fortunatamente non butto via mai niente ed in questo caso torna molto utile un cavetto seriale maschio/femmina per connettere in maniera comoda e plug and play i pulsanti/interruttori a muro con i pulsanti del SONOFF.
Grazie all'aiuto del solito Piero siamo (anzi è) riusciti a saldare i terminali della femmina ai pin dei 4 pulsanti
facendo uscire il connettore dalla scatola del SONOFF
Dall'altro lato abbiamo un cavo di rete collegato ai pulsanti a muro
al quale è stato saldato il connettore maschio seriale per poter connettersi al SONOFF
Il gioco è fatto...adesso non mi resta che configurare il dispositivo ed integrarlo in OpenHAB tramite MQTT...
Venerdì scorso, il postino ha bussato alla porta e mi ha portato alcuni nuovi giocattolini dalla Cina...
Tra gli altri, abbiamo
- un SONOFF B1, lampada RGB controllata via WiFi;
- un SONOFF 4Ch, 4 relay comandati via WiFi;
- alcuni sensori di temperatura / umidità DHT11
- alcune coppie di trasmettitori / ricevitori RF433
- un paio di ESP8266 NodeMCU
E' passato un pò di tempo dal mio ultimo post...vari impegni lavorativi e familiari mi hanno tenuto un pò lontano dai miei esperimenti...in fondo in fondo è un hobby...e in quanto tale ha "bassa priorità" soprattutto quando il tempo libero è poco...
Come forse vi ricorderete (vedi post http://domoticaduino.blogspot.it/2016/03/acquisizione-dati-produzione-impianto.html), la produzione del mio impianto fotovoltaico veniva acquisita tramite il ricevitore wireless OWL CM160 connesso via USB al Raspberry, che era in grado di ricevere i dati inviati via radio dalla pinza amperometrica collegata all'impianto fotovoltaico, a valle dell'inverter.
Purtroppo con il passare del tempo questo sistema si è rivelato instabile, in quanto spesso il driver di connessione USB del dispositivo al raspberry non funzionava correttamente e necessitava di un riavvio del sistema...non molto comodo...
Facendo diverse ricerche su internet ho capito che è possibile intercettare i segnali trasmessi dalla pinza amperometrica tramite un semplice ricevitore Wireless a 433Mhz, come quello attualmente utilizzato per ricevere i dati del sensore del gas, costruito con Arduino (vedi http://domoticaduino.blogspot.it/2015/08/acquisizione-dati-il-ricevitore.html)
Un articolo in particolare mi ha aperto la strada verso questa soluzione...eccolo
La trasmissione avviene tramite codifica Manchester OOK (on off keying) alla frequenza di 433 Mhz.
Collegato il ricevitore ad un Arduino UNO e scaricato il codice che permette la codifica del protocollo di comunicazione (scriverlo da zero sarebbe stato un pò lunghetto...), i pacchetti iniziano ad essere visualizzati sulla seriale. Tramite alcune "operazioni" sui bit si riesce in maniera abbastanza semplice a recuperare i dati "nascosti" nei pacchetti trasmessi...et voilà, il gioco è fatto: ecco il dato di potenza trasmesso dalla pinza amperometrica.
Esempi di pacchetti "grezzi" ricevuti in esadecimale
2a8081bf01501a011900 ==> valore di potenza rilevato = 434 W 2a81817f02d0fdf71800 ==> valore di potenza rilevato = 627 W 2a81813f0980f3b71300 ==> valore di potenza rilevato = 2366 W
Output sulla seriale
Adesso non mi resta altro che trasmettere il dato al server centrale per la memorizzazione su db e relativa visualizzazione su web.
Sniffando tutti i pacchetti trasmetti in OOK su 433 Mhz, noto che non sono tutti relativi alla pinza amperometrica; tra i pacchetti ricevuti e non riconosciuti come protocollo Oregon Scientific 3 ci saranno sicuramente quelli trasmessi da un sensore di temperatura esterno alla casa che comunica con un orologio che ho sul comodino...il protocollo è di tipo diverso e attualmente non sono in grado di leggerlo...ma non si sa mai...in un futuro più o meno lontano potrei riuscire a intercettare ed acquisire anche questa informazione...
Ne faccio una versione semplificata per la semplice rilevazione di gas metano, utilizzando il sensore MQ-4 [Datasheet]
e il trasmettitore wireless RF-433 per inviare i dati al ricevitore.
Il tutto condito da un pò di collegamenti elettrici, led per indicare lo stato del sistema e pulsantino per annullare le segnalazioni.
HARDWARE
Questo è lo schema disegnato su Fritzing:
Oltre al trasmettitore Wireless RF-433 e al sensore del gas MQ-4, abbiamo anche un led rosso, uno verde e uno RGB; inoltre è presente anche un push-button nella parte sinistra dello schema. Chiaramente il tutto condito dalle resistenze necessarie per non bruciare i led, alimentati dalla linea 5V di Arduino, che, a sua volta, è alimentato, tramite trasformatore, a 12V, per garantire un maggior raggio d'azione del trasmettitore wireless, collegato alla tensione di alimentazione di Arduino e non alla linea dei 5V.
PIN 11: push-button
PIN A1: pin analogico del sensore del GAS
PIN 9: trasmissione dati wireless
PIN 12: led rosso per indicazione di attività di trasmissione wireless PIN 8: led verde per indicazione di attività di campionamento dati dal sensore PIN 3, 5 e 6: led RGB per indicazione sullo stato del sistema secondo la seguente legenda: - spento: valori all'interno della soglia normale;
- giallo: è stato rilevato almeno un valore sopra la soglia normale ma sotto la soglia di pericolo;
- rosso: è stato rilevato almeno un valore sopra la soglia di pericolo;
Eccolo fisicamente montato e collegato:
FUNZIONAMENTO e MESSAGGISTICA
All'accensione del rilevatore, il sistema avvia una fase di riscaldamento del sensore MQ-4, prima di procedere alla campionatura dei dati; questa fase è necessaria per stabilizzare la precisione del sensore...In questa fase il led RGB lampeggia.
Successivamente alla fase di riscaldamento, inizia la raccolta dei dati.
Il campionamento del segnale del sensore avviene ogni secondo (quindi il led verde, a funzionamento normale, dovrebbe lampeggiare ogni secondo); in questo secondo vengono letti 10 campioni e calcolata la media; ogni 5 secondi viene inviato al ricevitore un segnale calcolato come la media dei 5 segnali campionati (quindi il led rosso, a funzionamento normale, dovrebbe lampeggiare ogni 5 secondi).
In caso di segnale fuori soglia, viene acceso il led RGB con il colore che indica il tipo di gravità (vedi sopra).
Il pulsante presente nel circuito serve semplicemente ad azzerare lo stato del sistema...questo perchè una volta che il sensore rileva dei segnali fuori soglia, accende il led e anche se il sistema torna con valori sotto soglia, il led rimane acceso. Il pulsante serve quindi a spegnere il led. In questo modo se avviene una rilevazione fuori soglia, è possibile accorgersene anche se non si è presenti in quel preciso momento.
Il segnale che ogni 5 secondi viene inviato al ricevitore è una stringa di testo composta nel seguente modo
GAS;VALORE;STATO| VALORE è la media dei 5 dati campionati, STATOè un valore numerico ed indica eventuali dati fuori soglia con la seguente codifica:
- 1: ok;
- 2: warning
- 3: danger
SOFTWARE
Lo sketch software di Arduino è scaricabile da questo link
Chiaramente, come per il ricevitore, anche qui ho utilizzato le librerie RADIOHEAD per la gestione della scheda Wireless.
Routine di inizializzazione:
- viene inizializzato il ricevitore wireless RF433
- vengono inizializzati i led di stato;
- viene effettuata la fase di riscaldamento del sensore MQ-4
corpo principale del programma:
- la prima cosa che viene fatta nel loop principale e controllare se il pulsante di reset dell'avviso è stato premuto andando a controllare il relativo ingresso digitale (PIN 11); nel caso sia premuto viene messa ad OFF la variabile che gestisce lo stato del rilevatore;
- viene quindi effettuata la lettura del sensore campionando dieci valori e facendone la media; in questo frangente viene acceso il led di lettura (PIN 8);
- ogni 5 letture, effettuate ogni secondo, viene calcolato il dato media da utilizzare per il controllo dello stato e da inviare al ricevitore tramite la rete Wireless RF-433;
- il led di stato (PIN 3, 5 e 6) si aggiorna di conseguenza ed in caso di valore fuori soglia si accende del colore relativo;
- il dato calcolato viene inviato al ricevitore tramite Wireless RF-433; in questo frangente viene acceso il led di invio dati (PIN 12);
Iniziamo la descrizione dei componenti del sistema: Il Ricevitore.
Eccolo ancora in versione "prototipo"
E' composto da una scheda Arduino Uno, a cui è collegato lo shield ethernet per l'accesso alla rete locale e il ricevitore wireless RF433.
FUNZIONAMENTO e PROTOCOLLO
Il ricevitore wireless riceve i messaggi inviati dai diversi sensori e li rigira al server WEP/APP tramite chiamata HTTP; in sostanza agisce da semplice router.
I protocolli di comunicazione sono molto semplici e attualmente non sicuri, quindi per adesso il sistema non può girare su rete pubblica.
Il messaggio che il sensore invia al ricevitore è una stringa composta nel seguente modo:
SENSORE;VALORE;STATO|
dove SENSORE è il nome del sensore, VALORE è il valore corrente rilevato dal sensore e STATO e una particolare condizione del sensore (ALLARME, WARNING etc etc)
Il ricevitore prende questa stringa e la invia al server WEB/APP tramite la seguente chiamata HTTP GET:
http://NOMESERVER/data.php?u=PASSWORD&d=STRINGA
dove NOMESERVER è il dominio dove gira l'applicazione WEB di acquisizione dati, PASSWORD è una parola segreta conosciuta anche dal server WEB/APP e STRINGA è il dato del sensore.
Come già detto prima, il protocollo di comunicazione è molto banale e non esiste meccanismo di ACK...per adesso è solo un prototipo per verificarne il funzionamento logico...
HARDWARE
Schema Fritzling (approssimato)
PIN 2 in OUTPUT per il led di stato RF (ROSSO), indicante attività su ricevitore Wireless; PIN 3 in OUTPUT per il led di stato ETH (VERDE), indicante attività su scheda di rete; PIN 5V per alimentare il ricevitore Wireless e i led; PIN GND per dare la massa al ricevitore Wireless; PIN 7 in INPUT per i dati del ricevitore;
L'ethernet shield è collegato all'Arduino UNO, il tutto alimentato con 5V esterni.
SOFTWARE
Routine di inizializzazione:
- viene inizializzato il ricevitore wireless RF433 utilizzando la libreria RadioHead;
- viene configurata la scheda di rete utilizzando la libreria standard Ethernet; in questo particolare caso viene assegnato un indirizzo IP statico (ma nulla vieta di usare il DHCP se la rete locale lo prevede);
- vengono inizializzati i led di stato;
corpo principale del programma:
- il processo si mette in attesa di ricevere un segnale sul ricevitore wireless RF433;
- non appena viene ricevuto un messaggio viene acceso il led di stato RF e viene inviato il messaggio al server tramite chiamata HTTP;
- durante l'invio viene acceso il led di stato ETH che si spegne al termine della chiamata HTTP;
Qui potete trovare il codice sorgente dello sketch del ricevitore: DOWNLOAD
Ho iniziato la progettazione del mio primo sistema di acquisizione dati con Raspberry PI e Arduino. L'idea è quella di avere una rete di sensori di acquisizione che trasmettono i dati ad una centrale che tramite rete ethernet comunica con un server per la memorizzazione.
I principali componenti sono:
- uno o più rilevatori
- un ricevitore
- un server DB per la memorizzazione
- un server WEB/APP per l'acquisizione e il monitoraggio in remoto
Ecco lo schema:
Un pò più in dettaglio...
RILEVATORI
Possono comunicare i dati con diverse modalità:
- wireless RF-433 verso il ricevitore
- ethernet verso il ricevitore
- USB verso il server
Possono essere delle schede Arduino, Raspberry o altro..
In funzione del tipo di comunicazione utilizzano ulteriori schedine di interfaccia e/o led di controllo.
RICEVITORE
Riceve i dati via wireless RF-433 o via ethernet.
Tramite ethernet trasmette i dati per la memorizzazione al server WEB/APP
E' costruito con una scheda Arduino, sulla quale è montato lo Shield Ethernet e il ricevitore wireless RF-433.
Sono presenti dei led di controllo.
SERVER WEB/APP
Riceve i dati dal ricevitore tramite ethernet o da eventuali sensori collegati direttamente all'USB.
Memorizza i dati sul server DB
Esegue il software WEB per monitoraggio remoto
Il server WEB/APP scelto è il famoso e comune Apache HTTPD, installato su Raspberry, sul quale gira la distribuzione linux Fedora.
Il software di monitoraggio è scritto in linguaggio PHP con interfaccia Bootstrap / HTML5, fruibile anche da dispositivi mobile.
SERVER DB
Memorizza fisicamente i dati ricevuti dal server WEB/APP.
Il software scelto come motore DB è Mysql Community Edition e verrà installato sullo stesso Raspberry dove risiede il server WEB/APP
E' passato un pò di tempo dal mio ultimo post, ma purtroppo impegni di lavoro e altro mi hanno tenuto un pò lontano dai miei "esperimenti" con Arduino e Raspberry.
Finalmente nell'ultimo periodo ho trovato un pò di tempo a disposizione ed ho continuato la mia sperimentazione.
Se vi ricordate, qualche mese fa mi era arrivato, insieme allo Starter Kit Arduino, anche una coppia di moduli (ricevitore e trasmettitore) per la comunicazione Wireless low cost RF 433 Mhz.
Ho quindi fatto qualche prova di comunicazione tra due Arduino, utilizzando le librerie RadioHead.
Sia al ricevitore che al trasmettitore ho montato una piccola antenna fatta in casa...e per aumentare il raggio d'azione, il trasmettitore è stato alimentato a 12V. I due dispositivi riuscivano a comunicare anche tra due piani diversi della casa...
Ecco il ricevitore:
...e il trasmettitore:
Il test è stato un semplice invio di stringhe di testo tra i due arduino...il ricevitore era collegato al PC in modo tale da poter verificare, stampando su porta seriale le stringhe ricevute, l'effettivo funzionamento della comunicazione.
Esito positivo dei test...è arrivato il momento di mettere in campo tutte le esperienza fatte fin'ora e costruire qualcosa di utile...