SmartHome nel dettaglio – Il Firmware MQTT per ESP8266

SmartHome nel dettaglio – Il Firmware MQTT per ESP8266

Grazie ad Andrea Roncoroni, riportiamo un approfondimento molto dettagliato del suo software SmartHome per ESP8266.

Argomento: Software per ESP8266

Livello: Pro (Novizio,Esperto, Pro)

Difficoltà: Alta (Bassa, Media, Alta)

Introduzione

SmartHome è un firmware per dispositivi basati sul microcontrollore ESP8266 con lo scopo di realizzare moduli domotici a basso costo per rendere “intelligente” la casa.

La logica del progetto è divisa in nodi ed ogni nodo ha la propria logica di funzionamento e gestisce i GPIO (ingressi ed uscite) ad esso collegati.

I nodi sono: nodo tapparella, interruttore, impulso, temporizzatore, sensore, power, termostato e display.

Su ogni singolo ESP8266, si possono caricare più nodi, anche non dello stesso tipo, basta che abbiano tutti un topic diverso (ad esempio: “Tapparella/sala“, “Tapparella/cucina“, “Interruttore/sala“, ecc.).

Ogni nodo comunica attraverso il protocollo MQTT con il broker, che può essere locale (LAN) o remoto (internet).

Per interagire con i singoli nodi (contraddistinti da un topic MQTT univoco), bisogna inviargli specifici comandi. In questo modo gli facciamo compiere operazioni specifiche oppure possiamo interrogarlo per avere informazioni come per esempio lo stato. Il nodo risponderà sul topic “TopicNodo/ack“.

Tutti i nodi sono gestibili attraverso l’app Android dedicata (scaricabile dal Google Play store) oppure attraverso HUB personali come per esempio Home Assistant.

Progetto su GitHub: https://github.com/roncoa/SmartHome
Ultima release: https://github.com/roncoa/SmartHome/Relèases/latest
Wiki: https://github.com/roncoa/SmartHome/wiki
APP Android: https://play.google.com/store/apps/details?id=roncoa.SmartHome
Canale YouTube: https://www.youtube.com/channel/UCH0nHGMIiRXIqrjvXte5OcA
Gruppo Facebook: https://www.facebook.com/groups/SmartHome.roncoa
Gruppo Telegram: https://t.me/joinchat/HDit8BbtVrId4Xh89_gBqw

Forum HassioHelp: https://forum.hassiohelp.eu/t/smarthome-by-at-roncoa

Installazione su ESP8266

Per quanto rigurda l’installazione del software su ESP8266 vi mando alla guida “SmartHome e Home Assistant – Installazione e configurazione iniziale”.

Ora vi riporto la modalità “Advance”, scritta direttamente da Andrea Roncoroni. Tutto ciò che c’é da sapere, nel dettaglio, sulla configurazione del software e i suoi nodi!

Configurazione nel dettaglio

Rete Wi-Fi

SSID e Password: dati della rete Wi-Fi sulla quale funzionerà SmartHome.

Host Name: Nome identificativo del dispositivo all’interno della rete Wi-Fi.
In pratica è l’identificativo che comparirà nella lista delle reti Wi-Fi del vostro router o scanner Wi-Fi.

IP statico: se abilitato, SmartHome non utilizzerà DHCP per l’assegnazione dell’indirizzo IP, ma utilizzerà IP, gateway, subnet e dnsip configurati.
Se ci dovessero essere errori nei valori configurati, SmartHome utilizzerà DHCP.

IP, gateway, subnet e dnsip: Dati utilizzati in caso di IP statico.
Se il campo “subnet” viene lasciato vuoto, verrà utilizzato il valore “255.255.255.0”, se il campo “dnsip” viene lasciato vuoto, verrà utilizzato il valore “8.8.8.8”.

WEB auth. User e Password: Autenticazione a protezione della pagina web del dispositivo (non la pagina di configurazione).

Se il campo “password” viene lasciato vuoto, non verrà utilizzata l’autenticazione.

MQTT:

mqtt server, mqtt user, mqtt password e mqtt port: Dati del broker MQTT utilizzato.
Se il campo “mqtt server” viene lasciato vuoto, non verranno effettuati tentativi di connessione a MQTT.

will topic: Topic sul quale verrà pubblicato lo stato (“online” o “offline”) del dispositivo. Coincide con il LWT.

Home Assistant auto discovery: Abilita il riconoscimento automatico dei nodi in Home Assistant.

Configurazione hardware:

GPIO configAP: Se abilitato, collegando a GND il GPIO configurato per almeno 10 secondi, il dispositivo verrà resettato e si avvierà in modalità “configAP”.

GPIO Status led: se abilitato, il GPIO configurato va connesso ad un led che segnala lo stato delle connessioni del dispositivo. A seconda del collegamento si può invertirne la logica di lampeggio.

  • 2 lampeggi – reti (Wi-Fi + MQTT) OK.
  • 3 lampeggi – errore MQTT + Wi-Fi OK.
  • 4 lampeggi – errore Wi-Fi.


Reset:
In assenza di connessioni:
Tempo (in secondo) trascorso il quale, in mancanza di connessioni, il dispositivo viene resettato.
Se il valore viene lasciato a “0”, il dispositivo non viene mai resettato.

Reset giornaliero: Se abilitato, il dispositivo viene resettato ogni 24 ore dall’avvio.

Input/Output:
Abilita la resistenza interna:
Se abilitato, vengono usate le resistenze di PullUp interne all’ESP8266. Per mandare allo stato logico H, l’ingresso va connesso a GND.
Senza le resistenze interne abilitate ed in presenza di switch, agli ingressi vanno collegate delle resistenze esterne.

PullUp

  

PullDown

 

Input invertiti: Inverte la logica di funzionamento degli ingressi.

Output invertiti: Inverte la logica di funzionamento delle uscite.

Abilita expander MCP23017 (I2C): abilita l’utilizzo degli expander per i GPIO.

Per usare i GPIO con l’MCP23017 bisogna inserirli in questo modo:
MCP23017 addr.0x20: inserire nei campi dei GPIO valori da 100 a 115
MCP23017 addr.0x21: inserire nei campi dei GPIO valori da 208 a 215
e cosi’ via, fino ad arrivare al
MCP23017 addr.0x27: inserire nei campi dei GPIO valori da 808 a 815
Addr(hex) GPIO
0x27 PA0-PA7 -> 800-807 – PB0-PB7 -> 808-815
0x26 PA0-PA7 -> 700-707 – PB0-PB7 -> 708-715
0x25 PA0-PA7 -> 600-607 – PB0-PB7 -> 608-615
0x24 PA0-PA7 -> 500-507 – PB0-PB7 -> 508-515
0x23 PA0-PA7 -> 400-407 – PB0-PB7 -> 408-415
0x22 PA0-PA7 -> 300-307 – PB0-PB7 -> 308-315
0x21 PA0-PA7 -> 200-207 – PB0-PB7 -> 208-215
0x20 PA0-PA7 -> 100-107 – PB0-PB7 -> 108-115
ESP8266 I/O ESP -> 0-15

Cambia GPIO I2C: Abilita l’utilizzo di GPIO alternativi a GPIO4 e GPIO5 per SDA e SCL del bus I2C.

Debug Serial, Serial1, Telnet: Indica dove viene pubblicato i debug di funzionamento del dispositivo.

  • Serial – su TXD0 (GPIO1)
  • Serial1 – su TX1 (GPIO2)
  • Telnet – su Telnet (porta 23)

Descrizione bottoni piè pagina: 

Cancel: Ripristina ultimi valori salvati.

RESET configurazione: Cancella EEPROM, cancella file di configurazione e riavvia il dispositivo in modalità “configAP”.

REBOOT dispositivo: Riavvia il dispositivo.

Aggiornamento firmware: Aggiornamento firmware OTA da files .bin o .bin.gz .

Gestione files: Gestione files di configurazione salvati nel filesystem dell’ESP.

SAVE configurazione: Salva la configurazione nel dispositivo.

SAVE configurazione & RUN SmartHome: Salva la configurazione nel dispositivo e lo avvia in modalità “normal”.

Descrizione Nodi

Nodo Tapparella:
Il nodo “tapparella” serve per comandare tapparelle, serrande, tende, ecc.
Ad ogni nodo sono collegati:

  • 2 GPIO usati per comandare 2 relè per il movimento della tapparella (SU/GIU).
  • 2 GPIO (opzionali) usati come ingressi fisici da interruttori interbloccati o pulsanti per comandare direttamente il movimento della tapparella (SU/GIU).
  • 2 GPIO (opzionali) usati come ingressi fisici da finecorsa per arrestare il movimento della tapparella (SU/GIU).

Il nodo “tapparella” gestisce anche il tempo di salita/discesa e la percentuale.

Nella modalità di configurazione (“config” o “configAP”) completare i campi interessati.
I campi fondamentali sono “Topic” e “GPIO Relè SU e GIU”.
Nel campo “Topic” mettere il topic univoco che contraddistingue la singola tapparella da configurate (es. “Tapparella/1P/cucina”).
Nei 2 campi GPIO Relè (SU e GIU) mettere i gpio assegnati al comando dei relè SU e GIU.

I relè lato software sono interbloccati (non possono essere eccitati contemporaneamente) e hanno un tempo di pausa in caso di inversione di marcia del motore.

Lo schema elettrico consigliato per il collegamento del motore è questo:

Una volta premuto il pulsate  “Save configurazione &RUN Smarthome”, il dispositivo si riavvierà in modalità “normal”.

Pagina web nodi:

In modalità “normal”, si può accedere alla pagina web del dispositivo digitando su un web browser il suo indirizzo IP.

Nodo Interruttore:

Il nodo “interruttore” serve per comandare prese, luci, ecc.
Ad ogni nodo sono collegati:

  • 1 GPIO usato per comandare il relè.
  • 1 GPIO (opzionale) usato come ingresso fisico da pulsante o interruttore (mono/bistabile).
  • 1 GPIO (opzionale) usato come ingresso fisico per la segnalazione dello stato effettivo della presa/luce.
  • 1 GPIO (opzionale) usato per comandare un eventuale secondo relè (per esempio una spia di segnalazione).

Il nodo “ interruttore ” è predisposto a funzionare in qualunque situazione, anche in presenza di deviatori/invertitori, mantenendo la gestione dello stato.

Nella modalità di configurazione (“config” o “configAP”) completare i campi interessati.
I campi fondamentali sono “Topic” e “GPIO Relè”.
Nel campo “Topic” mettere il topic univoco che contraddistingue il singolo interruttore da configurate (es. “Interruttore/1P/cucina”).
Nel campo GPIO Relè mettere il gpio assegnato al comando del relè.

Una volta premuto il pulsate “Save configurazione &RUN Smarthome”, il dispositivo si riavvierà in modalità “normal”.

Pagina web nodi:

In modalità “normal”, si può accedere alla pagina web del dispositivo digitando su un web browser il suo indirizzo IP.

Nodo Impulso:

Il nodo “impulso” serve per comandare portoni, cancelli, ecc.
Ad ogni nodo sono collegati:

  • 1 GPIO usato per comandare il relè.
  • 1 GPIO (opzionale) usato come ingresso fisico da pulsante.

Al nodo “impulso” attiva per 500 millisecondi il relè.
Può essere abbinato anche un lettore di tag NFC e gestisce fino a 25 tag.

Nella modalità di configurazione (“config” o “configAP”) completare i campi interessati.
I campi fondamentali sono “Topic” e “GPIO Relè”.
Nel campo “Topic” mettere il topic univoco che contraddistingue il singolo impulso da configurate (es. “Impulso/cancelletto”).
Nel campo GPIO Relè mettere il gpio assegnato al comando del relè.

Una volta premuto il pulsate “Save configurazione &RUN Smarthome”, il dispositivo si riavvierà in modalità “normal”.

Pagina web nodi:

In modalità “normal”, si può accedere alla pagina web del dispositivo digitando su un web browser il suo indirizzo IP.

Nodo Temporizzatore:

Il nodo “temporizzatore” serve per comandare prese, luci, ecc.
Ad ogni nodo sono collegati:

  • 1 GPIO usato per comandare il relè.
  • 1 GPIO (opzionale) usato come ingresso fisico da pulsante.

Il nodo “temporizzatore” attiva il relè per un tempo impostabile dall’utente.

Nella modalità di configurazione (“config” o “configAP”) completare i campi interessati.
I campi fondamentali sono “Topic” e “GPIO Relè”.
Nel campo “Topic” mettere il topic univoco che contraddistingue il singolo temporizzatore da configurate (es. “Temporizzatore/lucescale”).
Nel campo GPIO Relè mettere il gpio assegnato al comando del relè.

Una volta premuto il pulsate “Save configurazione &RUN Smarthome”, il dispositivo si riavvierà in modalità “normal”.

Pagina web nodi:

In modalità “normal”, si può accedere alla pagina web del dispositivo digitando su un web browser il suo indirizzo IP.

Nodo Sensore:

Il nodo “sensore” serve per controllare sensori di presenza, ingressi digitali vari, ecc.
Ad ogni nodo sono collegati:

  • 1 GPIO usato come ingresso fisico.

Il nodo “sensore” monitora l’ingresso e ne invia lo stato tramite MQTT (topic e payload configurabili dall’utente).

Nella modalità di configurazione (“config” o “configAP”) completare i campi interessati.
I campi fondamentali sono “Topic”, “GPIO sensore, “Topic risposta”, “Payload risposta ON” e “Payload risposta OFF”.
Nel campo “Topic” mettere il topic univoco che contraddistingue il singolo sensore da configurate (es. “Sensore/presenza/corridoio”).
Nel campo GPIO sensore mettere il gpio assegnato all’ingresso del sensore.
Nel campo Topic risposta mettere il Topic verso il quale verranno inviati i payload di risposta.
Nel campo Payload risposta ON mettere il payload di risposta in caso che l’ingresso del sensore sia alto.
Nel campo Payload risposta OFF mettere il payload di risposta in caso che l’ingresso del sensore sia basso.

Una volta premuto il pulsate “Save configurazione &RUN Smarthome”, il dispositivo si riavvierà in modalità “normal”.

Pagina web nodi:

In modalità “normal”, si può accedere alla pagina web del dispositivo digitando su un web browser il suo indirizzo IP.

Nodo Power:

Il nodo “power” serve per controllo carichi.
Sono utilizzabili i PZEM004 V1 e V3, prese BlitzWolf e SonoffPOW.

  • 2 GPIO usati dal dispositivo controllo carichi.

Il nodo “power ” invia tramite MQTT i dati istantanei letti e uno storico giornaliero/settimanale/mensile.

Nella modalità di configurazione (“config” o “configAP”) completare i campi interessati.
I campi fondamentali sono “Topic”, “Device” e “GPIO RX-TX” (in caso di PZEM004 o PZEM004 V3).
Nel campo “Topic” mettere il topic univoco che contraddistingue il singolo nodo power da configurate (es. “Power/lavatrice”).
Nel campo Device mettere tipo di dispositivo usato (PZEM004, PZEM004 V3, PZEM016, BlitzWolf o Sonoff POW).
Nel caso di PZEM004, PZEM004 V3o PZEM016 nel campo GPIO RX-TX mettere i gpio interessati.

Una volta premuto il pulsate “Save configurazione &RUN Smarthome”, il dispositivo si riavvierà in modalità “normal”.

Pagina web nodi:

In modalità “normal”, si può accedere alla pagina web del dispositivo digitando su un web browser il suo indirizzo IP.

Nodo Termostato:

Il nodo “termostato” serve per comandare caldaie, stufe, climatizzatori, ecc.
Ad ogni nodo sono collegati:

  • 1 GPIO usato per comandare il relè.
  • 1 GPIO usato come ingresso fisico del sensore (DHT11, DHT22 o DS18B20).
  • 2 GPIO (opzionale) usati per il display OLED SSD1306 i2c.
  • 3 GPIO (opzionali) usati per seleziona le funzioni del termostato.

Il nodo “termostato” può visualizzare la temperatura/umidità e lo stato su un display OLED SSD1306 e può funzionare in modalità manuale, automatico o cronotermostato.

Nella modalità di configurazione (“config” o “configAP”) completare i campi interessati.
I campi fondamentali sono “Topic”, “GPIO Relè”, “GPIO Sensore” e “Tipo Sensore”.
Nel campo “Topic” mettere il topic univoco che contraddistingue il singolo termostato da configurate (es. “Termostato/primopiano”).
Nel campo GPIO Relè mettere il gpio assegnato al comando del relè.
Nel campo GPIO Sensore mettere il gpio assegnato all’ingresso del sensore.
Nel campo Tipo Sensore mettere il tipo di sensore usato (DHT11, DHT22 o ).
I campi Addr. I2C, GPIO SDA e SCL, Più e Meno, servono per configurare un display OLED SDD1306.
I campi GPIO Bottone, Più e Meno, se abilitati pilotano dei pulsanti per il controllo del termostato attraverso il display.

Una volta premuto il pulsate “Save configurazione &RUN Smarthome”, il dispositivo si riavvierà in modalità “normal”.

Pagina web nodi:

In modalità “normal”, si può accedere alla pagina web del dispositivo digitando su un web browser il suo indirizzo IP.

Nodo Display:

Il nodo “display” serve per comandare un piccolo display.
Ad ogni nodo sono collegati:

  • 2 GPIO usati per il display OLED SSD1306 i2c.

Con il nodo “display” possiamo visualizzare 4 righe a piacere su un display OLED SSD1306.

Nella modalità di configurazione (“config” o “configAP”) completare i campi interessati.
I campi fondamentali sono “Topic”, “Addr. I2C”, “GPIO SDA” e “GPIO SCL”.
Nel campo “Topic” mettere il topic univoco che contraddistingue il singolo display da configurate (es. “Display/info”).
I campi Addr. I2C, GPIO SDA e SCL, Più e Meno, servono per configurare un display OLED SDD1306.
Una volta premuto il pulsate 
“Save configurazione &RUN Smarthome”, il dispositivo si riavvierà in modalità “normal”.

Pagina web nodi:

In modalità “normal”, si può accedere alla pagina web del dispositivo digitando su un web browser il suo indirizzo IP.

Nodo IR:

Il nodo “IR” serve per leggere e/o inviare segnale IR per televisori, condizionatori ecc. ecc..
Ad ogni nodo sono collegati:

  • 2 GPIO usati per il TX e RX IR.

Nella modalità di configurazione (“config” o “configAP”) completare i campi interessati.
I campi fondamentali sono “Topic”, “GPIO TX” e/o “GPIO RX.
Nel campo “Topic” mettere il topic univoco che contraddistingue il singolo IR da configurate (es. “IR/sala”).
Ai campi GPIO TX e GPIO RX, vanno connessi il ricevitore o il trasmettitore.
Una volta premuto il pulsate 
“Save configurazione &RUN Smarthome”, il dispositivo si riavvierà in modalità “normal”.

Pagina web nodi:

In modalità “normal”, si può accedere alla pagina web del dispositivo digitando su un web browser il suo indirizzo IP.

Ogni codice ricevuto verrà visualizzato nei campi superiori.
I campi inferiori vengono utilizzati per l’invio dei codici RAW (FREQ, RAW e RAW SIZE) e codici HEX ( PROTOCOL, HEX e HEX SIZE).

Nodo LED:

Il nodo “LED” serve per gestire singoli led, strisce a led RGB o strisce a led RGBW.

Ad ogni nodo sono collegati (a seconda dei casi):

  • 4 GPIO usati per il RED, GREEN, BLUE, e WHITE.

Nella modalità di configurazione (“config” o “configAP”) completare i campi interessati.
Una volta premuto il pulsate 
“Save configurazione &RUN Smarthome”, il dispositivo si riavvierà in modalità “normal”.

Documentazione MQTT

Nella sezione Doc del suo GitHub troverete i comandi MQTT e qualsiasi aggiornamento di documentazione.

I progetti ESP8266:

Ecco le guide dei miei progetti con ESP8266:

 

4 risposte

  1. francesco ha detto:

    salve, gran bel tutorial, come pochi e soprattutto in italiano, una cosa sola, ho notato che iniziando a configurare il primo sensore di temperatura e umidità con wemos d1 mini, non si collega alla rete, potrebbe essere un bug visto che su altre reti tipo quelle del cellulare in hotspot si collega, il bug lo vedo anche guardando da putty collegato in com, ho la password del wifi con un segno + e sul terminale putty non lo vede proprio, sembra esserci uno spazio al posto del segno +, ora non vorrei risolvere cambiando la password perchè ho una marea di dispositivi da riconfigurare se così mi toccherebbe risolvere il problema, c’è possibilità di ovviare al problema? grazie.

  2. davide ha detto:

    salve, ho un problema, se riavvio home assistant perdo la connessione con il dispositivo e per riagganciarlo devo riavviare anche il wemos, nei dispositivi viene sempre visto nelle entità mqtt ma quello che perde sono l’invio dei dati. Sbaglio qualcosa?
    Sto usando il firmware 7 beta 6
    grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Advertisment ad adsense adlogger