Home Automation System - MQTT e SONOFF insieme come grandi amici...

in #technology7 years ago

Li abbiamo conosciuti singolarmente...ci sono risultati tutti simpatici...ma il meglio lo danno quando decidono di lavorare in TEAM...

I nostri nuovi amici MQTT e SONOFF, se decidono di collaborare, possono fare tante cose utili e belle...proviamo a sfruttarli a nostro uso e consumo...iniziando da un semplice obiettivo: accendere una luce in giardino.




Beh, direte voi...che ci vuole...basta premere un pulsante...già, come darvi torto!!! A me però (da buon ingegnere e soprattutto informatico) piacciono molto i pulsanti "virtuali"...e soprattutto mi piace averli sempre con me ovunque io sia...E allora, con l'aiuto della tecnologia, cercherò di rendermi felice...😎

Pensieri vari

Allora, ragioniamo...

abbiamo a disposizione il SONOFF con firmware TASMOTA, uno switch wifi che abbiamo visto ci permette facilmente l'accensione / spegnimento di un carico tramite rete locale...

conosciamo un protocollo di comunicazione, MQTT, molto leggero, utilizzabile facilmente in ambito IoT

Bene, sono due cose che ci possono sicuramente servire per raggiungere il nostro obiettivo...l'unico sforzo che dobbiamo fare è farli lavorare insieme...Come spesso accade in ambito tecnologico ed informatico, per raggiungere un obiettivo esistono diverse strade...non ne esiste una giusta o una sbagliata...ma in base alle proprie conoscenze, alla voglia di sperimentare, a cosa si legge in giro e alle esperienze di altri, se ne sceglie una piuttosto che un'altra...

La mia esperienza in ambito IoT è poca, ma quello che ho letto relativamente a MQTT mi ha fatto venire appetito...argomenti interessanti da approfondire...e allora quale miglior approfondimento della sperimentazione???

Al lavoro

Il nostro lampione in giardino è già cablato e collegato ad un interruttore a parete (classico bticino)...perfettamente funzionante...prima cosa da tenere in considerazione è non perdere questa funzionalità...cioè, permettere l'accensione anche tramite pulsante/interruttore standard...altrimenti chi la sente la moglie????
Il SONOFF ha un pulsante fisico che permette di attivare / disattivare il relè...però non è facilmente accessibile, perchè finirà in una scatola di derivazione, non sarà a vista...e allora...per risolvere il problema possiamo comandare il pulsante fisico tramite pulsante a muro...basta saldare due fili di comando al pulsante presente nel SONOFF e collegarli al nostro pulsante...
sulla schedina del SONOFF intercettiamo i contatti del pulsante e saldiamo i due fili (operazione abbastanza facile anche per uno non molto abile a saldare come il sottoscritto...)




Questi due fili dovranno essere collegati al pulsante di comando a muro...in questo modo ogni "click" del pulsante invertirà lo stato del relè...e il gioco è fatto.

Piccola modifica al case del SONOFF per far uscire i cavetti (un bel buchetto sul lato)...




Bene, primo problema risolto...la moglie è tranquilla (e anche io sono più tranquillo perchè in caso di malfunzionamento della mia rete locale, ho la possibilità di comandare comunque il sonoff direttamente)...andiamo avanti...

Colleghiamo l'ingresso del SONOFF alla 220v e l'uscita ai cavi che vanno al lampione...infiliamo poi il SONOFF nella scatola di derivazione e chiudiamo il tutto...tanto tutto il resto sarà da fare tramite rete...fisicamente il SONOFF è a posto (naturalmente prima di chiudere tutto meglio controllare che il SONOFF si accenda e che sia raggiungibile in rete...)!!!

MQTT

Siccome ho deciso di utilizzare il protocollo MQTT per gestire la comunicazione con il dispositivo, ho bisogno di avere un servizio di Broker MQTT in rete...allora utilizzo il famoso mosquitto, installato sul Raspberry PI 3. Giusto per scrupolo configuro l'accesso al broker tramite username e password (consigliabile ma non necessario perchè siamo in rete locale non esposta ad internet...altrimenti l'autenticazione sarebbe necessaria...anche se è sconsigliabile usare un broker MQTT direttamente su internet per gestire la propria casa...vabbè...insomma...mi avete capito no??)

A questo punto devo decidere la base del topic MQTT (vi ricordate???) con cui lavorerà il SONOFF.
Decido di usare questo (scelta prettamente personale...): tasmota/garden/light/sonoffbasic01. Ho seguito una sorta di codifica inserendo la tipologia di software (tasmota), la posizione (garden), cosa comanda (light) e un identificativo univoco del dispositivo (sonoffbasic01). Ripeto, è una scelta personale...volendo si potrebbe anche scegliere 1/2/3, ma come avevamo detto in un post precedente, è meglio mettere un topic parlante, in modo che si capisca per cosa è utilizzato...la cosa invece obbligatoria è che sia univoco tra tutti i dispositivi...

Configurazione del SONOFF

Configuro quindi il SONOFF per l'utilizzo di MQTT, accedendo all'interfaccia grafica di configurazione del firmware TASMOTA che già conosciamo




ma questa volta accediamo alla sezione Configuration => Configure MQTT



Inserisco le informazioni del broker MQTT nei campi Host (indirizzo ip o nome server) e Port (1833 è la porta di default del broker MQTT).
Nel campo Client ID inserisco un identificativo con il quale il dispositivo si presenterà al broker MQTT.
I campi User e Password sono relativi all'autenticazione MQTT della quale abbiamo parlato prima.
I campi Topic e Full Topic sono il cuore della configurazione MQTT. Nella pagina del wiki di TASMOTA trovate i dettagli https://github.com/arendst/Sonoff-Tasmota/wiki/MQTT-Features#mqtt-topic-definition

  • Topic: identificazione del dispositivo; normalmente fa parte del Full Topic MQTT. Importante: dev'essere univoco nel nostro sistema.
  • Full Topic: è il topic MQTT completo utilizzato dal dispositivo
    Se guardate bene, nel Full Topic si possono inserire delle "variabili", racchiuse nei caratteri % e che nel nostro caso sono %topic% e %prefix%.
    Al posto di %topic% TASMOTA andrà ad inserire il contenuto del campo Topic (vedi sopra) in quasi tutte le situazioni. In altri casi assumerà un valore diverso...bisogna leggere la documentazione per capirne qualcosa in più. A noi interessa solo che è un modo per caratterizzare il topic come relativo al nostro dispositivo.
    Con %prefix% invece si identifica il tipo di messaggio; qui TASMOTA può inserire il valore di 3 variabili di sistema chiamate Prefix1, Prefix2 e Prefix3, che normalmente sono configurate come sotto indicato:
    -- Prefix1 = cmnd, per i messaggi di comando
    -- Prefix2 = stat, per i messaggi di stato del dispositivo
    -- Prefix3 = tele, per i messaggi di telemetria del dispositivo

Come detto prima, i valori che vado ad inserire per la gestione del topic sono:
Topic = sonoffbasic01
Full Topic = tasmota/garden/light/%topic%/%prefix%/
A questo punto non mi rimane altro che abilitare la messaggistica MQTT sul SONOFF andando a settare il flag MQTT enable nella pagina Configure Other del menù Configuration

La configurazione del SONOFF dovrebbe quindi essere completa. Adesso testiamo che tutto funzioni e quali sono i messaggi MQTT che transitano da e verso il broker.

La prova del nove

Utilizzando sempre l'interfaccia web del SONOFF, accediamo alla voce di menù CONSOLE, che ci permette di vedere cosa invia e riceve il SONOFF




La prima cosa che si vede sono i messaggi di stato del dispositivo (chiamati telemetria), inviati dal SONOFF con topic tasmota/garden/light/sonoffbasic01/tele/STATE. Il relativo contenuto è un messaggio JSON (per chi non lo sapesse JSON è una notazione per inviare messaggi strutturati sottoforma di semplice stringa di testo) che contiene diverse informazioni...in particolare a noi interessa principalmente la variabile POWER, che contiene lo stato attuale del relè

Nelle righe evidenziate sotto in giallo, si può notare la sequenza di messaggi MQTT scambiati durante la pressione del pulsante fisico:




Alla prima pressione, si attiva il relè e viene inviato un messaggio con topic tasmota/garden/light/sonoffbasic01/stat/RESULT, contenente il valore POWER: ON. Questo è la conferma che il dispositivo ha capito il comando. Quindi il relè si attiva tramite il messaggio con topic tasmota/garden/light/sonoffbasic01/stat/POWER con valore ON.
Il relè è attivo e il lampione è acceso.

Nei dati successivi di telemetria si vede che la variabile POWER ha il valore ON

Alla seconda pressione del pulsante, viene disattivato il relè vengono inviati i messaggi tasmota/garden/light/sonoffbasic01/stat/RESULT {POWER: OFF} e tasmota/garden/light/sonoffbasic01/stat/POWER OFF. Il lampione si è spento.

Se utilizziamo il pulsante TOGGLE presente sull'interfaccia web del SONOFF otteniamo lo stesso comportamento...la cosa è interessante...con un pulsante fisico riusciamo a fare quello che si può fare con un click su una pagina web...e viceversa...abbiamo virtualizzato un pulsante fisico...very powerful




Tramite la console web è anche possibile inviare direttamente dei comandi...scrivendo POWER ON nella casella di testo ad esempio attiviamo il relè, viceversa lo disattiviamo scrivendo POWER OFF



Un'altra cosa da notare e che risulta essere molto interessante è che il SONOFF cambia il proprio stato nel messaggio di telemetria anche se il suo relè viene attivato / disattivato da dispositivi esterni...
Ad esempio, simuliamo che il nostro PC sia un altro dispositivo nel nostro sistema di Home Automation...tramite un software client MQTT (ad esempio io uso MQTT-SPY) invio il messaggio ON con topic tasmota/garden/light/sonoffbasic01/cmnd/POWER...il SONOFF si accende e invia la variazione di stato...
Questo ci fa capire la potenza del sistema...qualunque oggetto in grado di comunicare via MQTT è in grado di comandare il SONOFF!!!
Ecco un video relativo alle prove di accensione del lampione tramite MQTT

Conclusione

Siamo arrivati al punto che il nostro SONOFF è integrato nell'impianto, connesso in rete e gestibile tramite MQTT. Nel prossimo step andremo ad integrarlo in OpenHAB per poterlo comandare tramite l'applicazione nativa su smartphone / tablet e/o tramite interfaccia web BASICUI e/o tramite pannello ottimizzato per tablet HABPanel.

Un mattoncino in più nel nostro sistema di Home Automation

[Tutte le immagini sono dell'autore]

Sort:  

This post has been ranked within the top 25 most undervalued posts in the second half of Dec 03. We estimate that this post is undervalued by $32.91 as compared to a scenario in which every voter had an equal say.

See the full rankings and details in The Daily Tribune: Dec 03 - Part II. You can also read about some of our methodology, data analysis and technical details in our initial post.

If you are the author and would prefer not to receive these comments, simply reply "Stop" to this comment.

Come al solito post interessantissimo :) ma per curiosità, casa tua è già completamente "domotizzata"? Cosa hai reso automatico ed in base a quali "input" da parte di sensori esterni? Perdonami, so che ti sto chiedendo degli spoiler, sei autorizzato a non rispondermi se vuoi!

Ciao, nessun problema, anzi mi fa piacere parlarne e soprattutto sono contento che ci sia qualcuno interessato.

Al momento ho poco di automatizzato perchè sto facendo tutta una serie di esperimenti per poi decidere bene il da farsi...purtroppo quando ho costruito casa non ho pensato di cablare pensando ad un impianto domotico come si deve e quindi mi devo arrangiare così...

Quello che ho attualmente in funzione è il comando luce di un lampione in giardino, un ricevitore wireless rf433 su un arduino (ancora a livello prototipale) per il recupero dei dati di produzione dell'impianto fotovoltaico tramite pinza amperometrica che trasmette in wireless, sensori di temperatura e umidità in cucina e tavernetta, sensore gas in cucina, sensore temperatura in giardino, sensore temperatura, umidità e intensità solare in una piccola serra in giardino (con l'idea di collegare un piccolo motore per aprire/chiudere la porta della serra in base a quanto "fa caldo")...tutti integrati in openhab con visualizzazione dati storici su grafana.

In tavernetta sto usando per testarlo un SONOFF POW (il solito SONOFF che però misura anche la corrente che lo attraversa) collegato ad un deumidificatore in modo tale da verificare quando è in funzione e quando è fermo (controllando il consumo istantaneo)

In cantiere, quasi pronto, c'è un sonoff 4 canali per automatizzare tutte le luci esterne + luce cucina, un'altra pinza amperometrica non wireless da collegare via seriale ad un microcontrollore per la misurazione dei consumi di casa...sono però in attesa di ricevere del materiale che ho acquistato in cina per poter continuare...

Sto anche pensando di sfruttare le canaline della linea telefonica che non uso (togliendo il doppino ed inserendo dei cavi ethernet) per riuscire a portare la bassa tensione un pò in tutta la casa e semplificarmi un pò il lavoro di collegamento e soprattutto il numero di schedine wireless sparse un pò ovunque 😁

Inoltre ho un altro Raspberry con sopra il sistema operativo OSMC che lo trasforma in un vero e proprio Media Center, collegato alla tv per vedere film in streaming, ascoltare musica e vedere foto, tutto comandabile tramite APP (in sostanza per trasformare un TV non SMART in uno SMART...)...tra l'altro anche questo si può integrare in OpenHAB e quindi comandare tramite unica interfaccia (e soprattutto tramite regole di automatizzazione...)

Invece come automatismi implementati ho:

  • tramite una "rule" di OpenHAB, il controllo dei dispositivi di rete, in modo tale che mi venga notificato quando qualche dispositivo (vedi NAS, router, sonoff etc etc) non risulti più raggiungibile via rete, indice di qualche anomalia
  • sempre tramite un'altra "rule" di OpenHAB l'esecuzione ogni due ore del test di velocità della rete di casa per tenerla sotto controllo (più che altro per capire se e per quanto tempo è in gradi di raggiungere i 30Mb che pago ... )

Nel momento in cui avrò anche le luci di casa sotto OpenHAB, inserirò delle regole di accensione e spegnimento automatico durante i periodi di assenza 😉

Di alcune cose ho già parlato di altre parlerò a breve; bisognerebbe avere una giornata di 48 ore per poter riuscire a portare avanti le cose come si deve...ma bisogna pur portare a casa la pagnotta 😎

Scusa, forse mi sono dilungato troppo ... comunque per qualunque necessità o curiosità io sono qui...se posso rispondo ben volentieri...

Si vede che quello che fai ti appassiona 😊 grazie mille per la disponibilità magari prossimamente ci sentiamo via chat!

Coin Marketplace

STEEM 0.20
TRX 0.13
JST 0.030
BTC 65762.16
ETH 3485.95
USDT 1.00
SBD 2.50