Domotica con Souliss

Souliss Home Automation

Souliss è un framework per soluzioni domotiche distribuite basate su schede Arduino con interfaccia Android. Controlla dispostivi elettrici attraverso classici pulsanti o interfacce basate su smartphone e tablet, gestisci in remoto e programma le azioni da effettuare in base alla geolocalizzazione o alla temporizzazione.

Introduzione

Il mondo della domotica open-source è sicuramente vasto e ricco di interessanti soluzioni, le proposte in giro per la rete spesso si concentrano su software centralizzati in grado di interfacciarsi con diverse soluzioni hardware, principalmente di tipo commerciale. L'hardware in commercio, pur offrendo tecnologie relativamente diffuse, è caratterizzato da prezzi elevati e scarsa scalabilità, ciò ha frenato fino ad oggi un largo uso dell'automazione in casa. Si provi, ad esempio, ad automatizzare esclusivamente l'accesso al garage di casa, richiedendo la flessibilità di un sistema domotico completo; il costo non risulterebbe ragionevole, basta considerare i moduli tipicamente necessari: modulo gestione centralizzata, modulo ingressi, modulo uscita, modulo webserver per gestione da smartphone e/o sistema touch screen proprietario. Guardando alle recenti tecnologie ed i loro costi, come i moderni ed economici tablet Android e le schede di prototipazione basate su Arduino, risulta evidente che l'ingresso dell'open source lato hardware renderebbe i costi estremamente competivi, sopratutto per installazioni piccole. Da queste esigenze nasce il progetto Souliss, con l'obiettivo di sviluppare un framework completo in termini di software ed hardware, ma introducendo degli elementi di discontinuità: assenza di nodi centrali, logiche e funzionalità distribuite, comunicazione event-based, supporto di soluzioni di comunicazione multiple e forte integrazione per le piattaforme di interfaccia, come ad esempio Android.

Descrizione Tecnica

Il punto di partenza è stato nella scelta delle piattaforme hardware da utilizzare, decidendo inevitabilmente Arduino, principalmente per la comunità di supporto ed utilizzo molto vasta e la disponibilità di molte schede elettroniche basate su tale piattaforma. Le due schede per elezione sono Freakduino Chibi ed Arduino Ethernet, la prima dispone di una radio integrata a 2.4 GHz con gestione in hardware anche del protocollo MAC, scelta fondamentale per ridurre il carico lato software in termini di acks e gestione del carrier; la seconda include un controller TCP/IP con gestione contemporanea di quattro socket. Il primo nodo da sciogliere è stato l'integrazione di due piattaforme diverse all'interno dello stesso framework, garantendo interoperabililità del codice e virtualizzazione dei nodi. In pratica, rendere il codice utente indipendente dalla piattaforma hardware e dalla tipologia di nodo con cui comunicare; un nodo è raggingibile attraverso il suo indirizzo, senza doversi preoccupare del "percoso" che le informazioni dovranno seguire, introducendo funzionalità automatiche di bridging tra reti diverse e di routing all'interno della stessa rete. Un esempio, un nodo wireless ad uno wired posso comunicare passando attraverso un bridge (Freakduino Chibi + Ethernet Shield) con il codice invariante rispetto alla topologia della rete.

Un secondo aspetto di discontinuità è rappresentato dalla comunicazione basata su eventi, dove un nodo richiedente sottoscrive la richiesta di informazioni, ed il nodo sottoscritto che invia dati solo quando c'è un'effettiva variazione degli stessi; aggiungendo un meccanismo di verifica dell'integrità della comunicazione, al fine di garantire l'allineamento tra i dati nel sottoscritto e nel sottoscrivente. Per rendere il concetto più semplice, un nodo incaricato di rappresentare i dati verso l'applicazione Android, sottoscrive i dati in uno o più nodi nella rete. Il valore di integrità della comunicazione è inizialmente basso ed il nodo sottoscrivente tende ad effettuare richieste paragonabili al polling, il valore di integrità aumenta con l'aumentare del numero di frame ricevuti, rendendo il traferimento tendente al nullo, fino a quando non si verifica un'evento da comunicare al nodo sottoscrivente. Periodicamente, il sottoscrivente rinnova la sottoscrizione se non riceve dati in ingresso, in questo modo si effettua un allineamento in caso di riavvio o problemi di comunicazione sulla rete. Se il nodo sottoscritto non risponde, il valore di integrità si riduce fino a disattivare il canale di comunicazione. Questo meccanismo richiede una comunicazione peer-to-peer, dove ogni nodo può iniziare la comunicazione e sottoscrivere o spedire dati.

Esempio di rete con Souliss

Nasce quindi il primo layer del progetto Souliss, chiamato vNet, permette di virtualizzare i nodi rendendo il codice utente indipendente dall'hardware e dall'architettura di rete utilizzata. Per ora sono supportate le comunicazioni via wireless point to point ed ethernet con rispettivi controller Atmel AT86RF230 e Wiznet W5100. Complessivamente vNet è strutturato per gestire fino a 5 interfacce di comunicazione diverse ed è in sviluppo il supporto per Microchip ENC28J60 ed RS485.

Nella figura seguente è mostrata la struttura di Souliss su tre layer: il già citato vNet per la parte di networking; il protocollo MaCaco per la gestione della comunicazione event-based; le librerie utente, racchiuse in Souliss. Nella scrittura del codice, l'utente interagisce esclusivamente con le API di Souliss, che a loro volta sfruttano il framework costituito da MaCaco e vNet. Ciò rende la programmazione dei nodi estremamente semplice, in Souliss sono offerte le comuni logiche in uso per applicazioni domotiche e le astrazioni per la comunicazione, riducendo la scrittura da parte dell'utente a cinquanta o poco più righe di codice, anche per reti complesse.

Layer in Souliss

 

Interfaccia Utente

Se la domotica permette di rendere più comoda l'interazione con la casa e facilita la riduzione degli sprechi energetici, ha tra gli aspetti di interesse anche la gestione remota attraverso smartphone e tablet. La diffusione di Android rende reperibli dispositivi di interazione, come tablet da installare al muro con cifre che partono da cento euro, stesso dicasi per i cellullari di ultima generazione. Nasce dunque l'esigenza di controllare i dispositivi elettrici, non solo tramite pulsanti sparsi per la casa, ma anche attraverso nuove interazioni.

 

L'aspetto fondamentale è nel definire cosa debba essere eseguito nell'interfaccia Android e cosa nelle schede, con l'obiettivo di rendere possibile l'utilizzo di più interfacce contemporanee, senza dover ricorrere a sofisticati meccanismi di sincronizzazione. In Souliss, l'esecuzione delle logiche e lo stato dei comandi è gestito esclusivamente dalla scheda a cui l'oggetto da controllare è collegato. All'applicazione Android è demandata l'interazione utente e la gestione di scenari e programmi, come ad esempio le azioni basate su geolocalizzazione del cellullare o tablet o quelle temporizzate. La comunicazione avviene con meccanismo server/client, dove l'applicazione Android raccoglie via JSON dati da un nodo server, che in peer-to-peer raccoglie i dati da tutta la rete. Allo stesso modo i comandi passano attraverso tale nodo, con la caratteristica che l'azione da intraprendere viene computata nel nodo a cui l'oggetto (per banalità, la lampadina) è effettivamente collegato. Questa struttura rende la rete robusta, la perdita di un nodo affligge solo le funzioni a cui era demandato. Allo stesso modo la perdita del nodo JSON, fa perdere la gestione via Android, ma non inficia quella attraverso le interazioni hardware e l'esecuzione delle logiche. La struttura di base permette anche meccanismi di ridondanza.

Interfaccia Android

Possibilità di interazione

Il punto di forza in un sistema domotico è nelle possibili interazioni con i dispositivi inseriti all'interno della casa, se per tutti i carichi elettrici gestibili con relé non si pongo problemi, la difficoltà aumenta nell'integrazione con condizionatori d'aria, televisioni, computer ed altri dispositivi che non possono essere semplicemente alimentati. Esistono due possibili strade, entrambe percorribili: la prima è nell'integrazione attraverso infrarossi, pur non essendo ancora disponibile nella versione rilasciata, è in sviluppo un'integrazione per inviare comandi attraverso sistemi ad IrDA; la seconda possibilità è nella gestione attraverso applicazioni dedicate via ethernet. Molti dispositivi offrono applicazioni di gestione remote attraverso connessione ethernet, e in futuro ci sarà un'espansione in tal senso. Un'ulteriore possibilità è nell'integrazione del framework Souliss su piattaforme diverse. Ad esempio, nulla vieta di interagire con i nodi della rete, non attraverso JSON ma direttamente scambiando frame vNet su TCP/IP. La gestione di socket TCP è comune in molti strumenti di programmazione, questo spiega come mai si usi TCP in vNet, forzandolo ad un funzionamento in peer-to-peer. L'alternativa sarebbe stata nell'utilizzo della comuncazione direttamente al livello MAC, come viene fatto per i moduli wireless.

Hardware Supportato

Uno degli obiettivi del progetto è quello di sviluppare e produrre una scheda dedicata, pronta all'uso e tale da permettere installazioni pulite. Attualmente sono iniziate alcune collaborazioni per supportare hardware con tali caratteristiche, anche se non progettato dal team di Souliss. La prima scheda pronta per l'installazione (non di prototipazione) che verrà supportata dal progetto è la DINo di KMTronic, basata su Arduino monta come microcontrollore l'ATmega 328P ed include: il controller ethernet ENC28J60, quattro ingressi optoisolati e quattro relé pilotati da darlington. I driver e l'integrazione in vNet sono in fase di sviluppo.

 

Le schede attualmente supportate e la relativa funzionalità di rete sono riportate di seguito:

Tabella schede supportate nella versione A2.2 di Souliss

Download del codice

Il codice (in versione Alpha) del progetto è rilasciato sotto licenza open-source GNU General Public License version 3 ed è disponibile attraverso SourceForge, seguendo il link è possibile reperire il codice da compilare e caricare sulle schede ed il client Android.

Conclusioni

I margini di sviluppo per Souliss sono ampi, l'obiettivo è quello di offrire nel tempo una soluzione integrata in in termini di hardware e software, sfruttando al massimo il contributo della comunità open-source per ridurre i tempi di sviluppo e migliorare la qualità e le funzionalità complessive. 

 

STAMPA

40 Comments

  1. manuel.teck-eco 17 aprile 2012
  2. Livio Cicala 17 aprile 2012
  3. veseo 17 aprile 2012
  4. veseo 17 aprile 2012
  5. veseo 17 aprile 2012
  6. Livio Cicala 17 aprile 2012
  7. veseo 17 aprile 2012
  8. Livio Cicala 17 aprile 2012
  9. Livio Cicala 17 aprile 2012
  10. Livio Cicala 17 aprile 2012
  11. veseo 17 aprile 2012
  12. Livio Cicala 20 aprile 2012
  13. Livio Cicala 18 aprile 2012
  14. veseo 18 aprile 2012
  15. Livio Cicala 18 aprile 2012
  16. Livio Cicala 18 aprile 2012
  17. Emanuele 18 aprile 2012
  18. Livio Cicala 18 aprile 2012
  19. Emanuele 18 aprile 2012
  20. Livio Cicala 18 aprile 2012
  21. shineangelic 18 aprile 2012
  22. Emanuele 18 aprile 2012
  23. Livio Cicala 18 aprile 2012
  24. veseo 18 aprile 2012
  25. Livio Cicala 20 aprile 2012
  26. veseo 20 aprile 2012
  27. Emanuele 23 aprile 2012
  28. shineangelic 23 aprile 2012
  29. veseo 23 aprile 2012
  30. Emanuele 23 aprile 2012
  31. veseo 23 aprile 2012
  32. veseo 23 aprile 2012
  33. veseo 25 aprile 2012
  34. veseo 26 aprile 2012
  35. Livio Cicala 26 aprile 2012
  36. Emanuele 26 aprile 2012
  37. Livio Cicala 26 aprile 2012
  38. RosarioC 30 aprile 2012
  39. RosarioC 8 maggio 2012
  40. Livio Cicala 9 maggio 2012

Leave a Reply