Scenario: Snap4Home the case of: Alexa, Philips, Sonoff, TP-link, etc. (Italiano)

Obiettivi

Creare una Dahsboard locale attraverso l’uso di nodi nod-red per la domotica

Creare una dashbord remota integrando l’applicazione con Snap4City

Usare MyKPI e IOT App per l’analisi dei dati e la loro visualizzazione sulla dahboard remota

 

Prerequisiti  e componenti necessari allo sviluppo della soluzione

  • Philips HUE Starter kit E27, contenente due lampadine Philips HUE white luce calda regolabile e un Philips HUE bridge, necessario per il controllo delle lampadine.
  • SONOFF BASICR2, per il controllo di dispositivi non smart.
  • Adattatore USB-TTL, per fleshare i SONOFF
  • Raspberry Pi 4 Model B, per gestire i flussi node-red e controllare i dispositivi.
  • Amazon Alexa, per il controllo vocale dei dispositivi.
  • Servomotori, per alzamento di una serranda, o apertura di un garage, o per finestra lucernario.
  • Servo Driver HAT, per collegare i servomotori al raspberry.
  • Philips Lighting Hue Sensore di Movimento, per un allarme cotrollo accessi.
  • Presa TP-Link HS110, per permettere il monitoraggio dei consumi di alcuni dispositivi e l’accensione/spegnimento degli stessi.
  • Componenti elettronici per Raspberry, in particolare una breadboard, qualche cavetto, led, relay, resistenze, convertitore digitale analogico PCF8591 e un termistore

Snap4City supports a very large number of protocols for collecting data and for exposing data towards other services and tools: https://www.snap4city.org/drupal/node/65

File necessari

  • edge.json, flow dell’edge(Raspberry Pi)
  • iotApp.json, flow IOT App
  • servo.py, controllore sermotori
  • temp.py, controllore per termistore(sensore di temperatura)

get the files from https://www.snap4city.org/download/video/Snap4home-example1-files.zip

Risultati attesi

Cambio di stato dei dispositivi attraverso comandi locali e remoti e visualizzazione dati proveniente dagli stessi.

Storico dei dati su cloud

gestione remota dei dispositivi che sono nella propria abitazione, and da mobile e da fuori casa

gestione della casa ovviamente da casa tramite un device con browser

 

Snap4City support a very large number of protocols for collecting data and for exposing data towards other services and tools: https://www.snap4city.org/drupal/node/65

 

  1. Aprire il terminale, per installare node-red digitare il seguente comando:

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

L’installer provvederà a installare l’ultima versione di node-red e node.js disponibile, compreso npm per la gestione dei pacchetti e i nodi per interagire con i PIN del Raspberry

  1. Digitare il comando: node-red-start per avviare node-red, collegarsi a <IPAdress>:1880 per visualizzare la pagina, dove <IPAdress> è l’idirizzo IP locale del Raspberry.
  2. Attraverso il Manage Palette installare i seguenti nodi:

I nodi presenti nella libreria snap4city(come la dashboard e il MyKPI) verrano trattati alla fine dell’articolo, adesso ci occuperemo di vedere in dettaglio l’installazione di tutti i dispositivi, la loro inizializzazione e la loro integrazione con node-red.

Vi consigliamo di scaricare il file JSON dei nodi e di importarlo in node-red dal menu import, in modo da avere un esempio concreto dove visualizzare i risultati ottenuti alla fine di ogni capitolo.

Alcuni Flow non verranno spiegati nel dettaglio essendo troppi lunghi per poter essere spiegati nodo per nodo, verranno dati invece tutte le informazioni per una corretta inizializzazione e  funzionamento di base degli stessi.

In questa guida non sono spiegati i nodi della dashboard locale di node-red(node-red-dashboard), si assume che il lettore sappia già utilizzarli.

 

Alexa

  1.  Apri il manage palette, cerca e installa i nodi: node-red-contrib-alexa-smart-home
  2.  Collegarsi al sito https://red.cb-net.co.uk/  e seguire la documentazione per la creazione di un account e per collegarlo al proprio account Amazon.
  3.  Trascinare il nodo alexa smart home v3 all’interno del flow, aprirlo per inserire l’account appena creato e selezionare il dispositivo che si vuole controllare(tale dispositivo deve prima essere creato nel sito sopra riportato)
  4.  Se configurato correttamente ad una qualsiasi richiesta fatta ad alexa dal nodo uscirà un messaggio contenente nel payload l’istruzione impartita(es. nel caso di una lampadina, alla richiesta di accensione verrà generato un messaggio con payload “on”, se è richiesto una variazione di luminosità verrà generato un messaggio con payload il valore della luminosità). Il numero di dispositivi e di istruzioni impartibili è estremamente vario, si consiglia di leggere attentamente la documentazione presente sul sito.
  5.  Se il nostro dispositivo prevede un aggiornamento di stato(lampadina accesa/spenta) si utilizzerà il nodo: alexa smart home v3 state, il messaggio che entra in questo nodo deve essere scritto in un formato ben preciso, vedere la documentazione per ulteriori dettagli.

Da ora in poi in ogni dispositivo vedrete dei nodi alexa, ci risparmiamo la spiegazione nei casi particolari.

Alla fine di questo svilupo si è in grado di utilizzare Alexa con i seguenti comandi/domande:

  • Accendi/Spegni Luce
  • Imposta luminosità al --%
  • Accendi/spegni Presa
  • Accendi/spegni Sonoff
  • Che temperatura è in casa?
  • Imposta il Termostato a -- gradi
  • Aumenta/diminuisci il termostato di – gradi
  • Apri/chiudi tapparella/e
  • Apri tapparelle a metà/al --%

  

Sonoff

Hardware

  1. Per fleshare il sonoff avere bisogno di un convertitore USB-TTL come mostrato in foto.
  2. Aprire il Sonoff e rimuovetelo dalla sua scatolina
  3. ATTENZIONE: Il convertitore TTL-USB potrebbe essere configurato per supportare sia 5v che 3.3v, il Sonoff opera a 3.3v, verificare che il jumper sulla scheda(del TTL) selezioni quel voltaggio, un voltaggio errato potrebbe bruciare il Sonoff!!!!
  4. Collegare il Sonoff al TTL nel seguente modo:
  • Dal TTL al SONOFF devono essere collegati i PIN Vcc e GND agli stessi presenti sul Sonoff
  • Per i PIN TX e RX essi vanno collegati scambiandoli ovvero TX va collegato a RX e RX va collegato a TX. Il tutto è illustrato nella seguente foto.
  1. olelgare il convertitore TTL-USB al computer

Software

  1.  Collegarsi al sito https://github.com/letscontrolit/ESPEasy/releases
  2. Scaricare l’ultima versione disponibile ESPEasy-mega-****.zip
  3. Scompattare l’archivio, aprire la cartella bin e cercare il file giusto per il flash, tale file è denominato nel seguente modo: ESP_Easy_mega_*****_normal_ESP82**_1M.bin, dove ** è la versione del chip presente sul vostro sonoff(66 o 85), potete trovarla scritta sul chip principale del vostro dispositivo.
  4. Una volta localizzato il file copiarlo e incollarlo nella cartella principale(quella dove è presente il file FlashESP8266.exe)
  5. Aprire il file FlashESP8266.exe, selezionare la porta COM del vostro dispositivo(dovrebbe esserci solo una porta disponibile, nel caso ce ne fosse più di una, scollegare qualsiasi periferica attaccata al computer tranne il Sonoff), selezionare il file precedentemente copiato (che dovrebbe essere l’unico disponibile nella lista) e cliccare su Flash. Attendere il termine della procedura.
  6.  Scolleghiamo il nostro Sonoff da tutti i cavetti, rimettiamo nella scatola e colleghiamo alla rete elettrica.
  7. Una volta collegato attendere qualche secondo per l’accensione, da un laptop o uno smartphone cercare le reti wifi presenti nell’area, dovrebbe una disponibile una rete wifi denominata esp_0, collegarsi con password “configesp”.
  8. Aprire un browser qualsiasi, dovreste essere indirizzati direttamente al pannello di controllo, selezionare la rete wifi desiderata e inserire la password, il sonoff si riavvierà.
  9. Connettersi alla rete wifi a cui avete connesso il vostro sonoff, per sapere il suo indirizzo ip è bene cercarlo nella pagina di configurazione del vostro router
  10. una volta riestrati nel pannello di controllo andare sul tab “devices”, selezionare nella riga 1 il pulsante edit.
  11. Configurare il dispositivo come da immagine e cliccare su “Submit”.
  12. Per accendere il sonoff basta collegarsi a http://<ip-del-Sonoff>/control?cmd=GPIO,12,1
  13. Per spegnerlo a http://<ip-del-Sonoff>/control?cmd=GPIO,12,0  

 

 Node-red

  1. Per permettere ai nostri Sonoff di accendersi e spegnersi utilizzeremo il nodo “http response” presente in node-red di default.
  2. trascinando tale nodo nel flow, apriamo e nel campo Method selezioniamo “GET”, nel campo url copiamo e incolliamo uno dei link precedenti. In un altro nodo “http response” copiamo l’altro indirizzo.
  3. Abbiamo adesso due nodi, uno per accendere e uno per spegnere il sonoff, in base all’input un nodo “switch” sceglierà quale dei due attivare. Per vedere in dettaglio il funzionamento si guardi direttamente l’esempio(JSON) che è stato allegato.
  4.  

Sensore di movimento(Philips Hue)

  1. Collegare il Philips Hue Bridge alla rete elettrica e al modem tramite il cavo ethernet incluso
  2. Utilizzare l’app Philips Hue su un dispositivo Android/IOS per configurare il sensore di movimento, una volta effettuata la configurazione l’app non è più necessaria
  3. Una volta stabilita la connessione installare su node-red i nodi: node-red-contrib-huemagic e node-red-contrib-telegrambot
  4. Trascinare il nodo “Hue Motion” nel flow, aprirlo, per configurare un nuovo bridge è sufficiente andare nel campo apposto, cliccare l’icona ricerca per cercare il bridge.
  5. Una volta trovato è sufficiente cliccare sull’icona nella riga API Key e successivamente cliccare fisicamente sul pulsante fisico del bridge per ottenere la chiave necessaria, cliccare su update.
  6. A questo punto cliccare sulla lente di ingrandimento nella riga “Sensor” per selezionare il sensore di movimento.
  7. Il sensore restituirà true/false se registra un movimento
  8. Tale dato è salvato sul MyKPI per future analisi(vedesi capitolo MyKPI)
  9. Se è rilevato un movimento viene attivato il nodo telegram sender che provvede a inviare un messaggio di allarme ad un bot presente sulla piattaforma telegram



Nodo Telegram

  1. Collegarsi al seguente sito: https://core.telegram.org/bots e seguire le istruzioni per la creazione di un bot
  2. Aprire il nodo “telegram sender” e inserire i dati che sono stati forniti alla fase precedente
  3. configurare la funzione precedente al nodo telegram come da figura specificando nel campo chat id il valore ritornato dal nodo “receiver”. Collegare quindi il nodo “receiver” a un nodo “debug” e inviare un messaggio tramite lo smartphone al bot precedentemente creato. Otterrete cosi il chatId(visualizzandolo nella parte “debug” del pannello di controllo node-red) della vostra chat telegram.

 

Tapparella

  1. Collegare l’HAT per i servomotori al Raspberry
  2. Collegare il servomotore sui pin 0 dell’HAT
  3. Scaricare il file servo.py,copiarlo nella home del nostro raspberry, tale file accetta in input due valori, il primo è il numero della porta a cui è collegato il servo motore, il secondo l’angolo ai cui il servomotore si deve trovare
  4. si utilizza in questa parte il nodo exec che viene configurato come da immagine

  1. Se il servo non si trova su il pin 0 dell’HAT è sufficiente cambiare il numero dopo “servo.py”
  2. la funzione precedente è scritta come in figura e il suo scopo è quello di trasformare in gradi(0-180) il valore di uno slider(0-100)

 

MyKPI

Verrà mostrato come creare i KPI necessari al funzionamento dell’applicazione, per semplicità verrà mostrato l’invio dei dati a solo uno di essi.

  1. Connettersi al sito https://www.snap4city.org, loggarsi con le credenziali e spostarsi sull’area MyKPI
  2. cliccare su Add MyKPI e creare in 3 KPI come da tabella.
  3. Consideriamo il caso della presa TP-LINK, il goal è quello di inviare i dati di consumo al MyKPI per successi visualizzazioni/analisi
  4. Trascinare il nodo “save my kpidata values” nel flow, aprirlo, inserire le credenziali snap4city se necessario, nel campo SelectKPI selezionare il KPI appena creato(nel nostro caso “Consumo”)
  5. il prossimo passo è inviare i dati al KPI, per fare questo colleghiamo la presa a 3 nodi consecutivi, uno switch che controlla se il dato riguardante il consumo è non nullo, una funzione che arrotonda il dato e trasforma da millliwatt a watt, una seconda funzione che si occupa di incapsulare il dato nel formato comprensibile dal nodo MyKPI. Si consiglia, per il codice, di vedere direttamente l’esempio allegato.
  6. per permettere l’invio dei dati utilizziamo un modo inject configurato come segue, l’obiettivo di questo nodo è di inviare i dati al MyKPI ogni 5 minuti, nel payload inseriamo la funzione “getMeterInfo” richiedere al nodo TP-link di restituire in output il valore del consumo elettrico attuale

 Per i MyKPI “Luce” e “Allarme” sono inseriti solamente valori booleani.

  

Temperatura e termostato



Per l'installazione del sensore di temperatura , si colleghi il sensore nel modo indicato qui sotto:



Per la simulazione dell'attivazione di un termostato, collegare un led al Raspberry come riportato nella figura sottostante, nel caso reale il led viene sostituito da connettori di una caldaia:

 

Spieghiamo adesso come misurare la temperatura:

*I due flow (temperatura e termostato) qui mostrati sono collegati tra di loro, le immagini sono state divise per non confondere il lettore.

  1. Per il nodo “python3 temp.py”, scaricare il file “temp.py” e copiarlo nella home del nostro raspberry;
  2. Si utilizza in questa parte il nodo exec, in cui si configura il nodo per eseguire il file “temp.py”(vedere capitolo Tapparella per dettagli)
  3. Ogni 10 secondi, si invia al sensore di temperatura il comando per raccogliere la temperatura attraverso il nodo “Inject”
  4. La temperatura viene arrotondata all'interno della funzione;
  5. Attraverso il nodo “change” viene create/aggiornata la variabile globale (flow.temperature) per essere successivamente comparata con la temperatura settata nel termostato, tale funzione è svolta dall’ultimo nodo funzione del flow.
     

    Vediamo ora la parte del termostato:

  6.  
  1. L’input proveniente da Alexa/Dashboard Snap4City/Dashboard Locale viene salvato in una variabile globale utilizzando un nodo “change” (set flow.wantedTemperature);
  2. la funzione seguente decide se accendere il termostato (simulato da un led) ed è implementata nel seguente modo:
  3. L’ultimo nodo accende il PIN 11 del Raspberry, al quale è collegato il relay.

 

Presa TP-link con gestione del consumo

  1. Apri il manage palette, cerca e installa i nodi: node-red-contrib-tp-link
  2.  Scaricare l’app Kasa da un dispositivo Android/IOS per la configurazione della presa, una volta effettuata la configurazione l’app non è più necessaria
  3. Una volta che la presa si è collegata alla rete wifi trascinate il nodo “smart plug” all’interno del flow, aprirlo e cercare la presa attraverso il pulsante con la lente di ingrandimento, dovrebbe restituire l’indirizzo IP della presa, selezionatelo e salvate.
  4. La presa si accende/spegne attraverso i vari input mostrati in figura.
  5. Il ramo discendente è spiegato opportunamente nel capitolo MyKPI
  6. Quello ascendente aggiorna solamente lo stato di Alexa
     

 

 

 Lampadina(Philips Hue)

Per configurare la lampadina Philips:

  1. Collegare il Philips Hue Bridge alla rete elettrica e al modem tramite il cavo ethernet incluso;
  2. Utilizzare l’app Philips Hue su un dispositivo Android/IOS per configurare la lampadina, una volta effettuata la configurazione l’app non è più necessaria
  3. Una volta stabilita la connessione installare su node-red il nodo “node-red-contrib-huemagic”;
  4. Trascinare il nodo “Hue white lamp” nel flow, aprirlo, per configurare un nuovo bridge è sufficiente andare nel campo apposito, cliccare l’icona ricerca per cercare il bridge.
  5. Una volta trovato è sufficiente cliccare sull’icona nella riga API Key e successivamente cliccare fisicamente sul pulsante fisico del bridge per ottenere la chiave necessaria, cliccare su update.

 

 

Differenziamo i casi in cui la lampadina è accesa da Dashboard/con Alexa e il caso in cui la sua luminosità è cambiata; nel caso in cui si accenda direttamente (da dashboard o con Alexa), allora si segue il flusso superiore; se accendiamo la lampadina da Dashboard locale:

  • La funzione converte l'uscita del nodo “Lampadina” (1. in alto a destra) da “ON”/”OFF” a “true”/”false” (richiesto dal nodo “Hue white lamp”), il template seguente (2. in alto) inserisce il valore in “msg.payload.on”; il messaggio viene poi inviato alla lampadina;
  • la funzione successiva ha il compito sia di comunicare l'aggiornamento dello stato ad Alexa, sia di inserire lo stato della lampadina in una variabile globale:

  •  
  • Il messaggio è inoltre inviato alla funzione in basso (2.) che controlla se lo stato della lampadina è effettivamente cambiato (confrontando “msg.payload.on” con quello salvato nel flow) e, se questo è diverso, invia il cambiamento a MyKPI (“1” se la lampadina è stata accesa e “0” se è stata spenta) per poter calcolare quanto tempo la lampadina sta accesa ogni giorno (ne riparleremo nella sezione “IOT App”).
    Se accendiamo la lampadina da dashboard Snap4City:
  • Il nodo “Lampadina” (1. a sinistra) invia come payload “on”/”off” che, una volta convertito in “ON”/”OFF” dalla funzione, entra nello switch;
  • Lo switch invia il messaggio in alto se riceve “ON”/”OFF”, lo invia in basso se riceve un valore numerico ( nel caso cambiassimo la luminosità usando alexa).       
    Se cambiamo la luminosità ( o con Alexa o da una delle due dashboard), allora uscirà un valore numerico dal nodo “Luminosità lampadina” (1. centrale):
  • Tramite la funzione compresa tra “Luminosità Lampadina” e lo switch “Lampadina”, si cambia il payload del messaggio per poter cambiare lo stato dello switch nella dashboard locale:



    il flag è usato per evitare che il messaggio continui a transitare oltre lo switch (la funzione in alto a sinistra in 2. non ritorna il messaggio se il “msg.flag” è uguale a “down”);
  • Il nodo template successivo allo slider “Luminosità Lampadina” (2. in basso a sinistra) invia come payload l'intensità luminosa e lo stato di accensione in “msg.payload.on” come “true”.

 

 

IOT App

Lo scopo dell’IOT App è quello di effettuare analisi dati e statistiche che sarebbero proibitive, dal punto di vista computazionale, da parte del dispositivo di controllo, nel nostro caso un Raspberry Pi.

Lo scopo è quello di ottenere dei dati dal MyKPI, effettuare i conti necessari e ricaricarli su un diverso MyKPI per poter essere visualizzati dalla Dashboard Snap4City ed essere sempre disponibili, questo ci permette di non ricalcolare i dati derivati, introducendo una ridondanza, a benificio della potenza computazione del sistema e dei tempi in cui i dati vengono mostrati all’utente finale.

 

  1. Connettersi al sito https://www.snap4city.org, loggarsi con le credenziali e spostarsi sull’area MyKPI
  2. Cliccare su Add MyKPI e creare in 2 KPI come da tabella
  3. Spostarsi nell’area IOT App, creare un IOT App con nome a piacere
  4. La figura successiva mostra due delle possibili analisi che si possono fare su i dati caricati dalla IOT Edge(Node-Red Raspberry).
    • Si usano i dati del consumo istantaneo per calcolare il consumo medio giornaliero
    • Si usano i dati di accensione/spegnimento lampadina per calcolare il tempo di accensione giornaliero della lampadina.

 

Costruire il Flow come da immagine, ogni nodo è configurato come segue:

  • I nodi "Inject” sono programmati per essere eseguiti alle ore 23:55 di ogni giorno
  • la prima funzione è programmata in entrambi i casi come segue, il suo compito è quello di stabilire l’intervallo temporale in cui il nodo successivo deve prelevare i dati dal MyKPI corretto, nel nostro caso tale intervallo è la giornata in cui l’algoritmo viene eseguito.
  • Le seconde funzioni hanno una prima parte che analizza i dati in base al caso specifico in cui si trovano e una seconda per la costruzione del payload per caricare i dati sui MyKPI appena creati(procedura spiegata in dettaglio nel capitolo MyKPI)

  

 

Dashboard Snap4City

In quasi tutte le soluzioni presentate sono presenti i nodi della Dashboard remota Snap4City, questa soluzione permette di controllare la nostra casa domotica e visualizzare i dati di tutte le apparecchiature, comprese i dati analizzati dalle IOT App, senza essere necessariamente collegati alla rete della propria abitazione.

Per creare una Dashboard ed utilizzarla seguire i seguenti passaggi:

  1. Connettersi al sito https://www.snap4city.org, loggarsi con le credenziali e spostarsi sull’area “My Dashboards in My Organitazion”, nella pagina cliccare su “My Own Dashboards
  2. Cliccare su Add Dashboard, dare un nome e selezionare Empty Dashboard, cliccare su Next e successivamente Create Dashboard
  3. Tornare su Node-red e trascinare nel flow il nodo della Dashboard Snap4City desiderata
  4. Aprirlo, loggarsi con le credenziali Snap4City, selezionare la Dashboard appena creata e dare un nome allo widget, cliccare su Done e Deploy. L’elemento verrà creato automaticamente.
  5. Per i nodi input in funzionamento equivale a quello della Dashboard Locale, per i nodi che visualizzano dati e sufficiente leggere le info del nodo per comprenderne l’utilizzo

 

I widget possono essere configurati per visualizzare direttamente i dati presenti sul MyKPI

  1. Dalla pagina delle My Own Dashboard su https://www.snap4city.org, selezionare la dashboard desiderata e cliccare su edit
  2. Cliccare su “Wizard”, nella colonna “High Level Type” selezionare MyKPI, in quella “Ownership” selezionare private, verranno listati sotto i MyKPI da voi creati
  3. In alto selezionare il “Time Trend Graph” e uno dei MyKPI creati
  4. Cliccare su “Next” e infine su Create Widget
  5. Ripetere l’operazione per tutti i MyKPI creati



La Dashboard risulta come segue:

 

Dashboard Locale

Mostriamo a semplice scopo illustrativo la Dashboard Locale finale: