[AGGIORNAMENTO]
Il progetto in quest'ulitmo anno ha subito diverse modifiche ed alcuni aspetti sono diversi da quanto ipotizzato nella prima parte di questo topic, maggiori informazioni sono disponibili a fine topic oppure sul sito del progetto.
[/AGGIORNAMENTO]
Buongiorno,
vi presento la prima parte di un lavoro iniziato alcuni mesi fa, si tratta di una collezione di librerie orientate alla Domotica. E' un framework composto da tre librerie (Souliss, MaCaco, vNet) con lo scopo di astrarre e rendere semplice lo sviluppo di applicazioni domotiche.
Le librerie sono fornite di alcuni semplici esempi, come la gesitone luci da due Arduino separati o l'implementazione di nodi "monitor" che ricevono lo stato degli altri dispositivi (stato luci, porte, serramenti, ...)
Il framework è stato sviluppato secondo i seguenti obiettivi:
- Versatilità nella struttura della rete di nodi,
- Comunicazione in P2P con esecuzione della logica localmente al modulo (non centralizzata),
- Generalizzazione del concetto di nodo, un nodo può essere un dispositivo Arduino, Android un PC ...
Il primo obiettivo è raggiunto con la libreria vNet, astrae il mezzo di comunicazione e fornisce automaticamente funzionalità di bridging e routing. Non è necessario modificare l'applicazione che utilizza vNet in base al mezzo utilizzato.
Attualmente vNet supporta Freakduino/Chibiduino ed Arduino Ethernet (o Ethernet Shield), nel primo caso è utilizzata la libreria Chibiduino ripulita da alcuni bug; nel secondo caso è utilizzata una nuova libreria basata sulla classica Ethernet.
La differenza principale con Ethernet è nella gestione delle socket, per ottenere una comunicazione P2P si utilizzano due socket contemporaneamente, una Client in scrittura e l'altra Server in ricezione. La connessione resta aperta per il solo tempo di trasmissione, richiesta e risposta utilizzano due connessioni separate, quindi si riesce ad ottenere comunicazioni multiple pur essendo le socket del W5100 disponibili solo 4.
Le operazioni di routing e bridging sono effettuate solo dai SuperNode, si basano sull'indirizzamento (con subnet) e possono essere corredate da tabelle dinamiche per path non risolvibili a partire dal solo indirizzo.
Il secondo obiettivo è ottenuto con la libreria MaCaco, un protocollo simile al Modbus ma con due differenze principali: è un protocollo P2P, supporta il subscribing dei dati. Il subscribing consiste nel registrare in un nodo sorgente la richiesta di dati, sarà cura del nodo sorgente inviare gli stessi solo quando ci sono variazioni, ottenendo una maggiore prontezza e minore traffico su rete (quindi minore carico CPU).
La terza libreria, Souliss, utilizza le due precedenti per fornite logiche "tipiche" come gestione luci e serramenti. Fornisce inoltre metodi per la gestione semplificata dell'I/O locale e di quello remotizzato.
Attualmente il codice è disponibile per Arduino, ma è mia intenzione portare il framework su Android. L'idea è rendere un dispositivo Android nodo della rete, al pari degli altri nodi potrà ricevere gli stati o forzarli, rendendolo di fatto un'interfaccia utente.
Lo stesso può essere applicato per qualsiasi altro dispositivo, ad esempio un PC.
A mio avviso, un limite degli attuali sistemi domotici è l'integrazione. Avere un framework comune può semplificare l'integrazione di dispositivi di diversa natura.
Il codice è disponibile al link Google Code Archive - Long-term storage for Google Code Project Hosting. e rappresenta solo un primo sviluppo, idealmente il programma da seguire per le successive revisioni sarebbe:
- Portare il framework su Android,
- Ridurre l'impatto in RAM (su Arduino) specialmente per vNet,
- Migliorare il supporto broadcast per vNet,
- Supporto RFM22B vNet,
- Documentazione,
- Ampliare la collezione di tipici in Souliss,
- Realizzare una UI Android basata sul framework, con "viste" e personalizzazioni,
- Portare il framework su Windows ed altri sistemi operativi
- Proporre una scheda elettronica dedicata alle applicazioni domotiche (wireless 434/900Mhz con RFM22B, 24V, 16DI isolati, 8 DO, relé off-board).
Ovviamente il vero livello di sviluppo dipenderà dal gradimento di tale framework e dalle eventuali collaborazioni.
Cercherò nel tempo di fornire un minimo di documentazione iniziale, il codice è comunque sufficientemente commentato.
Sono graditi commenti e suggerimenti e sopratutto collaboratori (principalmente lato Android), onestamente, un sistema domotico non può prescindere da una gestione remota su cellulare, tablet o PC.
Saluti,
Dario.