Domotica

Oramai quasi tutti, per automatizzare casa, si rivolgono a servizi in cloud. Gli utenti più "avanzati" (e/o che hanno un minimo di considerazione per la propria privacy) preferiscono soluzioni con un hub locale (quasi sempre un broker MQTT) su RPi... Ma tutte queste soluzioni hanno un problema in comune: il malfunzionamento di un unico dispositivo può bloccare tutto. Come fare?

Perché se premo l'interruttore della luce della cucina questo deve mandare un messaggio ad un server che sta in America che poi lo deve rigirare al relè che accende la lampadina a 5m dall'interruttore? Se mi cade la ADSL non posso più andare a prendermi un bicchiere d'acqua a mezzanotte? O sono costretto a rifare l'impianto elettrico di casa perché il produttore dei nodi, magari dopo solo 3 anni, ha deciso che non sono sufficientemente redditizi e chiude il servizio? Non mi pare una cosa molto sensata... Eppure è quanto succede regolarmente, ma gli utenti continuano a non imparare Sad

La mia idea è un sistema a logica distribuita, coi nodi che dialogano direttamente tra di loro senza bisogno ne di "coordinatori" ne di servizi nel cloud: premo l'interruttore e questo manda un messaggio a tutti gli altri nodi; il relè della lampada riceve il messaggio dell'interruttore e cambia il suo stato, accendendo la luce. Il tutto ha coinvolto solo due nodi e l'AP (attualmente mi sto basando su ESP8266 e WiFi).

Su questa logica distribuita è poi possibile aggiungere uno o più nodi di coordinamento, che possono gestire scenari più complessi e/o anche le richieste provenienti da Internet, o esportare (anche solo parzialmente) i dati nel cloud. Il tutto sotto il controllo diretto dell'utente.

È da un po' che ci lavoro (con qualcosa già pubblicato, sia come specifiche e HW che come codice (lib per Arduino IDE). In queste pagine raccolgo un po' di appunti preparatori e di approfondimenti anche su cose che magari non arrivano poi alla pubblicazione.

Non mi dispiacerebbe arrivare ad avere un gateway (ovviamente opzionale) che converta i messaggi dal mio protocollo a MQTT (seguendo le convenzioni di Homie), magari in modo bidirezionale quando possibile/sensato. Questo renderebbe pressoché automatica l'integrazione coi personal hub domotici.

Attenzione: malgrado il codice sia pensato per poter (probabilmente) girare anche su un Arduino Uno, la lib per lo shield Ethernet di default non gestisce il multicast. Andrà usato Arduino FullIP, ArduinoUDPMulticast o un'altra lib che lo supporti.

0
Il tuo voto: Nessuna

Commenti

Opzioni visualizzazione commenti

Seleziona il tuo modo preferito per visualizzare i commenti e premi "Salva impostazioni" per attivare i cambiamenti.

Souliss

Souliss (www.souliss.net) è un framework che fa ciò che dici.
È nato per Arduino ed è, naturalmente, compatibile con ESP8266.

Il tuo voto: Nessuna

Lo conosco e sono anche nel

immagine di NdK

Lo conosco e sono anche nel gruppo Google dove ogni tanto (raramente) intervengo.
Ma per i miei gusti è troppo rigido. Inoltre non prevede nessuna misura di sicurezza sui messaggi: proprio per progettazione, la rete dove girano i suoi messaggi viene considerata fidata. E "incoraggia" all'esposizione ad Internet proprio di quel canale che dovrebbe essere sicuro... Un controsenso, IMVHO.
Un'altra cosa che ho voluto considerare nel mio protocollo: la possibilità intrinseca di essere auto-documentante: se ho una variabile analogica, non devo "tirare a indovinare" il range o la rappresentazione (e per molti tipi neanche la grandezza rappresentata: V, A, W, °C,...). E posso memorizzare (nel nodo, non in una tabella a parte) il nome di ogni linea.

Il tuo voto: Nessuna

È ciò che manca a Souliss

Quelle che hai descritto purtroppo sono proprio le caratteriste che mancano in Souliss. Tra l'altro Souliss è nato per funzionare su Arduino. Le risorse limitate hanno imposto dei freni.

Il tuo voto: Nessuna

Opzioni visualizzazione commenti

Seleziona il tuo modo preferito per visualizzare i commenti e premi "Salva impostazioni" per attivare i cambiamenti.
Realizzato con Drupal, un sistema open source per la gestione dei contenuti