Hub IOT con un NodeMCU esp8266 (e qualche accenno di storia della domotica)

 Hub IOT con un NodeMCU esp8266 (e qualche accenno di storia della domotica)

Alla data in cui pubblico questo articolo (18.07.2022), mi sorprendo di non trovare la definizione di "hub IOT" oppure "hub domotico" in Wikipedia.
Con il termine anglosassone hub, si intende ormai internazionalmente il mozzo di una ruota, cioè il centro di un sistema dal quale partono gli immaginari raggi verso i sistemi collaterali.
Con il termine IOT si intende il mondo degli Internet Of Things ovvero l'internet delle cose.

Definizione: un hub IOT o hub domotico, è sostanzialmente un software collocato in un adeguato hardware, (ma possono essere anche più software su più hardware in sinergia) che si occupa di interfacciare diversi protocolli di comunicazione di sistemi IOT obsoleti o non standard, ma anche di vecchi sistemi domotici basati sul Bus, che, in questo modo, possono essere convertiti in smart devices, e colloquiare assieme, collegati nell'Internet Of Things.

L'architettura della mia piattaforma domotica, struttura che ho implementato nel lontano 2002, consta di un vecchio sistema bus con diversi PLC (Moduli Logici Programmabili) con 8 ingressi e 8 uscite ognuno, che comunicavano tra loro con un bus seriale rs485.
Questi PLC non erano direttamente collegati ad internet, ma avevano una interfaccia di collegamento ad un PC in cui girava un eseguibile (.exe) che produceva una interfaccia utente (un cartografico dell'appartamento con le icone delle varie utenze). Usando come escamotage un programma VNC (Virtual Network Computing), questa interfaccia cartografica poteva essere visualizzata anche da remoto, mentre per interfacciarsi con i telefoni cellulari, che al tempo non erano sufficientemente smart, c'era un PLC dotato di sim che riceveva e inoltrava sms.

Con questo impianto ho cablato l'intero appartamento: l'illuminazione, le prese di corrente, l'alimentazione degli elettrodomestici, il controllo del carico elettrico, i termostati e la caldaia, i sensori delle porte e delle finetre con integrazione dell'antifurto, gli altri sensori di sicurezza, vari servomotori (porta d'ingresso, persiane, valvole idrauliche).

Sebbene l'acronimo IoT pare sia stato citato per la prima volta nel 1999 dal ricercatore Kevin Ashton, è solo da pochi anni che ha cominciato a diventare un fenomeno di massa. I due protocolli più usati per questi apparecchi sono il classico Http ed il più snello mqtt. Per integrare questi recenti apparecchi dovevo fare un upgrade del mio vecchio sistema che permettesse di mettere in comunicazione il protocollo del bus con quelli degli IoT.

Verso la fine del 2014 è iniziata la commercializzazione del nodeMCU, una piattaforma open source sviluppata specificatamente per l'IoT.
Proprio con questo versatile apparecchio ho implementato un hub per integrare le varie utenze, sia quelle del vecchio sistema sia quelle di recente acquisizione.
Cercando su internet si trovano esempi di programmazione del nodeMCU per interfacciarsi con il web attraverso il protocollo Http ed anche con mqtt, ma non avevo trovato come integrare i due sistemi in contemporanea.

Il 24/10/2018 è iniziata la distribuzione del dispositivo Echo di Amazon che permette di comandare vocalmente i devices IoT.
A questo punto avevo bisogno  di integrare nel hub anche quest'ultimo dispositivo.

Con il piccolo listato che allego, fatto integrando anche programmi di altri autori trovati nel web, in particolare EspAlexa di Aircoookie (che ringrazio), sono riuscito a fare convivere i vari sistemi (vecchia domotica bus, IOT mqtt, IOT http ed Alexa).
Il listato, è ampiamente commentato.
E' chiaro che non può essere utilizzato così com'è, ma può essere utile come spunto, da adattare alle proprie esigenze.

In particolare può essere utile per vedere come si possono inserire, nella void loop, le varie chiamate alle routines principali, e come gestire le secondarie.

Si possono implementare variabili, che vengono viste da Echo come utenze, dove le sub di pertinenza vengono attivate in seguito al comando vocale. In queste sub si possono mettere comandi per accendere/spegnere o dimmerare luci via mqtt o via http (quest'ultimo tramite file.php di un server)
Sarebbe meglio avere un web server con il quale interagire (anche solo un Raspberry). 

Il massimo di utenze per singolo nodeMCU è 15.

Di seguito la spiegazione di alcune variabili ed alcuni punti del programma.
La variabile String _myPathPHP è l'indirizzo http dove risiede il file php che si interfaccia con l'utenza (nel mio caso ho utenze che si accendono/spengono leggendo un file "comanda.txt" che viene scritta sul sever dal file php).
La variabile String _myPathOUT è l'indirizzo dove risiede il file di testo che contiene lo stato delle luci/utenze.

Sotto la riga commentata "Definizione devices e caratteristiche dell'utenza" si possono aggiungere i nomi dei devices che si vogliono simulare per Alexa.
Nell'esempio ho iserito una (luce) sala e una (luce) cucina. Nel nome non ho scritto luce, perché ho notato che Alexa lo accetta nel comando anche se non è scritto, mentre se lo si scrive e non lo si pronuncia, Alexa non capisce il comando.

Sotto la riga commentata "Sub alexa relativi ai devices" si devono aggiungere le Sub relative alle utenze.
Ad esempio da "Sub_utenza1" a "Sub_utenza15"
Nel primo esempio (Sub_utenza1) ho inserito il comando di feedback di Alexa "setValue" che la informano sullo stato di accensione/spegnimento o valore del dimmer di quella utenza; l'altro comando inserito è la chiamata alla sub che gestisce il dialogo con il nostro server che deve contenere almeno un valore che identifichi l'utenza ed il valore generato da Alexa che riguarda l'accensione/spegnimento o dimmeraggio; è un valore da 0 a 255 (0 spento, 255 acceso, valori intermedi sono il dimmeraggio).
Nel secondo esempo (Sub_utenza2) si presuppone di comandare una utenza via mqtt, con un if discriminante se brightness=0 o brightness=255, quindi, in questo esempio, senza dimmeraggio, e con feedback dello stato dell'utenza ad Alexa.
Negli esempi da Sub_utenza3 a Sub_utenza8 si suppone si debba comandare dei condizionatori o dei termostati.
Negli esempi da Sub_utenza9 a Sub_utenza15 non sono stati inseriti comandi particolari.

La SubBlink serve solo a fare lampeggiare il led builtin dell'ESP.

La sub "Subclient" ha come argomenti la String "_indirizzo" che identificherà una utenza tramite un indirizzo, una sigla o un nome, e uint8_t "brightness" che è sempre il valore da 0 a 255 prodotto da Alexa. Questa sub ha 3 discriminanti "if" a seconda che il valore di "brightness" sia 0, 255, o un valore intermedio. Se è un valore intermedio, lo trasforma in un valore da 0 a 100 per interfacciarsi (se necessario) con un sistema che accetti dimmeraggio con questo range. Si connette quindi al server.

 La sub RefreshUtenze, soprattutto nella parte indexOf  ha i parametri che si riferiscono al mio sistema ed è quindi da adattare.

Purtroppo non ho tempo per rispondere ad eventuali domande, spero comunque possa servire da spunto a chi, come me, smanetta in domotica e IOT.

Potete scaricare il listato al seguente indirizzo:

https://drive.google.com/uc?export=download&id=1Sngln1HZZkUJBTIchbrZUMcbZdgQbUdz



Nessun commento:

Posta un commento