DomoticHome [Arduino - Android - WebApp]

Ciao ragazzi,
riprendo qui il seguente thread riguardante l'applicazione per Android per pilotare Arduino
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1281726774
abbiamo appena appena messo online questo portale
http://www.domotichome.net
dove è possibile generare automaticamente il codice per arduino ed ho incluso anche l'invio dei dati recuperati dai sensori al server in modo da stilare grafici etc...poi se vedrà che ne esce.
Per ora ho integrato solo un sensore di temperatura e il CT sensor (ho usato il codice dei ragazzi di openenergymonitor).
Ho creato un form per segnalare quali sensori integrare, altrimenti per mail o via forum mi perdo :slight_smile:
http://www.domotichome.net/device_requests/new
Il dominio mi è stato offerto da unbit.it

Se qualcuno vuole fare qualche test è il benvenuto. Spero che il tutto sia gradito!

Ciao e Complimenti per il tuo progetto .. fa invidia :grin:

ma perche' hai optato per Android e non per un server PHP o simile ?
primo .. se non hai il tuo cell. con qualsiasi portatile wireless ti puoi collegare.
Secondo .. penso che come sicurezza offra maggiori garanzie un server PHP.

Cmq. complimenti ancora, ottimo lavoro.

Ciao, ti garantisco che controllare twitter e poter accendere una luce o aprire il cancello intanto che sei in bagno non ha prezzo :slight_smile: idem per quando torni a casa, premi un pulsante e ti si aprono le porte.

Stò lavorando anche ad un app web based.

Mauro_Titan:
...
primo .. se non hai il tuo cell. con qualsiasi portatile wireless ti puoi collegare.
Secondo .. penso che come sicurezza offra maggiori garanzie un server PHP.
...

non sono d'accordo:
sulla prima hai ragione ma sulla seconda per niente.
PHP comunica tramite HTTP e quindi diventa una risorsa disponibile:
il PHP serve per fare siti web in parole povere, applicazioni che comunicano con il server e fin qui ti do ragione, ma mentre in una piattaforma software dedicata tu puoi anche creare un tuo socket e magari passare password che rimarranno cifrate in un server PHP si fanno richieste in HTTP, fin troppo poco sicure per un sistema che ti potrebbe far entrare in casa altrui senza troppi problemi e rubargli qualsiasi cosa abbia. in poche parole un server PHP a mio parere è troppo poco sicuro, mentre con un'applet appositamente scritta puoi fare chiamate su porte non convenzionali (e quindi filtrarle dal router) e passare parametri in una comunicazione che decidi tu.

bl4d3:
Ciao, ti garantisco che controllare twitter e poter accendere una luce o aprire il cancello intanto che sei in bagno non ha prezzo :slight_smile: idem per quando torni a casa, premi un pulsante e ti si aprono le porte.
Stò lavorando anche ad un app web based.

Infatti .. come applicativo e' interessante ..
mi capita spesso di dover saltare il cancello perche' il telcomando e' rimasto sull'altra macchina =(
oppure chiudi .. esci con la macchina .. chiudi il cancello .. attacchi l'allarne e poi ti accorgi che la luce e' rimasta accesa =(

Ma con un Server Web arduino come lo colleghi ?
con la seriale
o sempre con il cavo di rete ? ma si puo' collegare anche in wireless arduino ?
tipo che le chiavette USB ?
e in questo caso come mandi di comandi ? e leggi i risultati ?

Grazie.
Ciao.

L'idea che mi frulla per la testa ora è quella di poter impartire comandi ad arduino dal portale domotichome.net.
Mi loggo -> metto HIGH un out di arduino -> ogni X sec arduino interroga domotichome.net e chiede se ci sono dei comandi per lui -> se si li esegue

L'unico problema è la latenza, un comando gestito in questo modo impiegherà almeno 3/4 sec prima di essere eseguito.
Dal device android la latenza è pari a 0 circa.
Farsi un webserver in casa in php o come vuoi, comporta che un pc sempre acceso il chè non mi piace molto, è dispendioso, ma è sicuramente una strada che tanti hanno adottato.

L'intenzio è quella di fare girare tutto via http, senza seriali o bus vari.

Personalmente nel mio progetto per forza di cose sto integrando sia server LAMP (LinuxApacheMysqlPhp) che Android, ritengo che tutte e due le tecnologie siano ottime, testate e inevitabili al giorno d'oggi.

Teniamo presente che è molto più difficile che un malintenzionato che si introduca nella mia rete da un paese sperduto dell'est (gli attacchi sui server li rilevo sempre da la ]:smiley: ) sia anche interessato a fare indagini su IP, Provider, blabla trovare effettivamente dove abito poi farsi il viaggione fino a casa mia e poi derubarmi "senza che io nel frattempo mi sia accorto che qualcuno ha avuto accesso non autorizzato al mio sistema"!

Ma trovo molto piu semplice e sbrigativo "rubare un cellulare, smanettare nelle app e trovare la nostra bella applicazione di controllo totale della casa" e quindi, dato che sono un ladro che faccio?... bella rigaz... stasera ci facciamo la villa di quello del telefonino!

E non è detto che il telefonino sottratto sia proprio il nostro... magari quello dei nostri genitori, ormai anziani che sono convinti di ritrovarlo in due o tre giorni di ricerche in casa, nel frattempo uno ha tutto il tempo necessario per organizzare il colpaccio... è allettante sapere che ci sono allarmi e dove trovarli... ce lo dice il menu... Perimetro, cancello frontale,cancello secondario, cantina, box auto, porta di ingresso, finestre blablabla...

Ok nel dubbio possiamo mettere mano all'impianto e ai codici in modo da disabilitare temporeneamente i controlli dai terminali Android...ma se noi siamo in vacanza? chi ci mette mano?
(qui torna utile un accesso remoto via web)

Questo solo per dire che entrambe le tecnologie sono valide e si può trovare, con i dovuti accorgimenti, il modo migliore per impiegarle.

Quindi per attivare il cancello di casa col cell... "facciamo in modo che debba essere inserita una password" (ok ci smeniamo in temini di rapidità di accesso ma almeno siamo un po + sicuri)

Magari non mettiamo una password all'index dell'applicazione se proprio ci pesano quei due secondi di interazione e lasciamo liberi il menu Luci, scenari e altre cose che non compromettano la sicurezza

E' già una cosa da fantascienza poter fare queste cose... perdere il tempo di inserire un codice mi sembra il minore dei mali.

P.S.
Teniamo presente che queste cose non le facciamo solo per un monolocale o un piccolo appartamento, un negozio o magazzino, quanto più è grande la proprietà da coprire, più dettagliati saranno anche i menu e le indicazioni di quali e dove siano i sistemi di allarme... mettete queste benedette password :wink:

@ bl4d3
Complimenti per il progetto, continuate cosi!

bl4d3:
L'idea che mi frulla per la testa ora è quella di poter impartire comandi ad arduino dal portale domotichome.net.

Non e' che mi convinca molto questa cosa ... ma forse sbaglio.
Diversamente fosse qualche automazione tipo processo produttivo.
Poterla controllare dall'altra parte del mondo non e' male.

bl4d3:
Farsi un webserver in casa in php o come vuoi, comporta che un pc sempre acceso il chè non mi piace molto, è dispendioso, ma è sicuramente una strada che tanti hanno adottato.
L'intenzio è quella di fare girare tutto via http, senza seriali o bus vari.

Io al contrario .. preferisco il pc acceso che il cel con applicativo .
Anche perche' ormail il 90% delle persone tengono il pc acceso 24h su 24h
il 20 % perde un cell al giorno
il 30 % distrugge un cel al mese
(dati inventati :slight_smile: )

Il mio dubbio nasce proprio dal sistema di comunicazione di Arduino.
Una cosa e' un locale in costruzione , ma su una casa gia' fatta e dove non e' possibile far passare cavi di rete come la gestisci ?
e' impensabile che 1 Arduino possa controllare interamente la casa e pertanto ci vorranno piu' arduino .
Come dialogano tra loro .. la cosa ideale sarebbe in wireless Wpa ma e' possibile ?
in seriale si possono intercettare e si perderebbe la sicurezza.

Ciao.

Se si vuole mirare a un consumo ridotto si puó usare un PC industriale con un consumo di qualche watt e non un PC normale o un notebook.
Ciao Uwe

ma tu l'hai collegato direttamente al router ,
ma come gestisci i comandi ?
come fai a far le richieste ?
ma hai anche le risposte da arduino ?

copio un pezzo del post precendete:
################################################## ###
AS = Arduino Station (raggruppa più sensori/attuatori) è composto da arduino 2009/Mega + ethernet shield

(collegata a router wifi)/wifi shield + RF TX
ASRF = Arduino Station (raggruppa più sensori/attuatori) è composto da arduino 2009/Mega + RF RX (va piazzato dove non arriva il cavo di rete e limita i costi)
M = Master (applicativo su piattaforma android)

Precondizioni: tutti i dispositivi (AS, M) sono sulla stessa subnet e comunicano tra di loro attraverso TCP/IP.

Ogni AS è programmata in modo da comunicare ad M i vari sensori ed attuatori (terminazioni) che sono stati

collegati ad esso ed anche le terminazioni collegati ai vari ARSF (questo va inserito programmato all'interno di AS).

Comunicazione Sync

AS esegue un ipscan sulla subnet specificata quando trova un ip attivo invia la chiamata http:

http://ipttivo/?m=hello

M risponde indicando le sue terminazioni seguendo questo schema JSON:

{"ip" : "192.168.10.15", "devices" : [" +
"{ "type" : "gate", "name" : "cancellino ingresso", "out" : "5"}, " +
"{"type" : "door", "name" : "porta ingresso", "out" : "4"}, " +
"{"type" : "light", "name" : "luce soggiorno", "out" : "6"}, " +
"{"type" : "light", "name" : "luce cucina", "out" : "7"}," +
"{"type" : "temperature", "name" : "camera da letto", "out" : "0"}," +
"{"type" : "temperature", "name" : "camera bimbi", "out" : "9"}," +
"{"type" : "wattmeter", "name" : "consumo energetico casa", "out" : "10"}]}

dove:

  • ip indica l'ip del master
  • out è il pin al quale è collegato l'attuatore
  • name nome dell'oggetto (presa cucina)
  • type tipo dell'oggetto

Tipi disponibili

  • plug (prese)
  • light (luci)
  • door (porte)
  • gate (cancelli)
  • temperature (sensore temperatura)
  • humidity (sensore umidità)
  • wattmeter (sensore corrente o tensione)

Quando M avrà rilevato tutte le terminazioni collegate a ciascun AS verrà mostrata l'interfaccia di figura.

Attivazione/Disattivazione terminazione

AS invierà la chiamata http

http://M/?out=1&status=1

  • M indica l'ip del master recuperato in precedenza
  • status può essere 1/0
  • out indica la terminazione

AS risponderà con l'esito dell'operazione con una stringa JSON del tipo

{"out": "4", "status" , "1"}

################################################## ###

bl4d3:
AS = Arduino Station (raggruppa più sensori/attuatori) è composto da arduino 2009/Mega + ethernet shield

Sono un po' duro di comprendonia =(
Questo e' il principale ..
collegato arduino al router con il :
http://www.robot-italy.com/product_info.php?cPath=1_119_154&products_id=932
e qui e' chiaro.

bl4d3:
(collegata a router wifi)/wifi shield + RF TX
ASRF = Arduino Station (raggruppa più sensori/attuatori) è composto da arduino 2009/Mega + RF RX (va piazzato dove non arriva il cavo di rete e limita i costi)

Questo non e' chiaro .. che hai utilizzato per connetterti in Wifi ?

bl4d3:
M = Master (applicativo su piattaforma android)
Precondizioni: tutti i dispositivi (AS, M) sono sulla stessa subnet e comunicano tra di loro attraverso TCP/IP.

qui devo provare a vedere come funziona .
io ho un IPAQ .. con cosa potrei farlo ?

bl4d3:
AS esegue un ipscan sulla subnet specificata quando trova un ip attivo invia la chiamata http:
http://ipttivo/?m=hello

Conosco poco e con solo la teoria non riesco a capire bene
Mi interessa il fatto di attaccare il cancello al router , cosi lo apro anche senza telecomando con HP Ipaq.

uwefed:
Se si vuole mirare a un consumo ridotto si puó usare un PC industriale con un consumo di qualche watt e non un PC normale o un notebook.
Ciao Uwe

Io sto usando questi due Eee PC

ASUS EeeBox PC B202 consuma circa 40w a pieno regime
http://www.asus.it/product.aspx?P_ID=QUObl5lSRQQ3lSqJ

ACER Revo consuma circa 65w a pieno regime

(scalda un po più dell'Asus ma la ventola all'interno fa il suo lavoro)

Entrambi dotati di prese monitor, ethernet, mouse, tastiera, parecchie USB e Wi-Fi

li uso come serverini per compiti diversi, si può benissimo installare un server LAMP o addirittura Proxmox e smplificarci la vita. (consiglio l'Asus con installazione Proxmox)

Oppure se non si hanno grandi esigenze si può optare per un famigerato NSLU2 (il lumacone)
che se non sbaglio consuma tra i 10w e i 15w ma è un po un casino da impostare, cioè bisogna studiarsi qualche tutorial (ovviamente non ha le prestazioni e le dotazioni dei precedenti ne tantomeno prese hardware a parte 2 sole USB e presa ethernet) ma una volta settato e collegato al router è un bel giocattolino.

KrashNet:
Se si vuole mirare a un consumo ridotto si puó usare un PC industriale con un consumo di qualche watt e non un PC normale o un notebook.
Ciao Uwe

Da quello che ho capito se si collega Arduino al Router il Pc non serve , ma fa da arduino direttamente come server.
Puo' gestire la connessione e sicuramente si potra inserire dei comandi di password e dei semplici Daley per bloccare gli sconosciuti.
Come contro bisogna utilizzare un programma per l'invio dei comandi .
(non conosco nessun programma che gira sotto WinMobile)
Ulteriore problema e' come comunicare con i vari Arduni Wireless.
Che scheda si Usaaa???

KrashNet:
Io sto usando questi due Eee PC

Io uso solo Asus P900 .. piccolo MA FANTASTICO .. poi con Linux la Lamp gira benissimo

aggiungo questo
http://www.koala.it/it/nanopc.htm
6W di consumo

Ciao,

L'idea che mi frulla per la testa ora è quella di poter impartire comandi ad arduino dal portale domotichome.net.
Mi loggo -> metto HIGH un out di arduino -> ogni X sec arduino interroga domotichome.net e chiede se ci sono dei comandi per lui -> se si li esegue

L'unico problema è la latenza, un comando gestito in questo modo impiegherà almeno 3/4 sec prima di essere eseguito.
Dal device android la latenza è pari a 0 circa.

Hai latenza 0 perchè ti connetti direttamente con Android ad Arduino.
La soluzione di webapp ti permette invece di bypassare il limite della distanza e del device.

In specifico:

  1. Distanza - con android interfacciato direttamente con Arduino via wifi, devi essere nei paraggi

A me personalmente è capitato di dover aprire un cancelletto o chiudere il garage dimenticato aperto, quando ormai da casa ero ben distante; con una webapp in housing (quindi che gira a casa mia, accessibile remotamente previa autorizzazione) posso farlo da PC, Symbian, BlackBerry o da Android - insomma, da qualsiasi device che abbia un web browser.

  1. Device - gira solo su Android :slight_smile:
    ok che il mercato sta evolvendo, ma lo possiamo vedere per ora come un limite, per lo stesso motivo di cui sopra..

Riguardo poi a mini-serverini per soluzioni in housing, mi permetto di approfondire:
(in realtà questa è una dritta per chi è interessato ma vuole spendere meno) i thinclient hw i koala son Epatec:
http://store.epatec.net/de/default.php?cPath=1

Sinceramente preferirei uno SheevaPlug:
http://www.plugcomputer.org/
molto più performante e mooolto più economico :slight_smile:

Oppure se non si hanno grandi esigenze si può optare per un famigerato NSLU2 (il lumacone)

In casa ho anche un NSLU2 della Cisco aggiornato con OpenWrt: anche questo si presta moooolto bene a questi scopi.... (oltre che come printer server e media server... ;))
Analogo per l'AGA, o altri device analoghi su cui OpenWrt gira:

http://wiki.openwrt.org/oldwiki/oldtableofhardware

Ho appena trovato in un vecchio armadio un Router Wireless WEP :slight_smile:
ho appena ricevuo email che il corriere e' partito il con modulo
arduino Lan
i sensori di teperatura
e il modulo PIR

se arriva oggi domani si inizia con qualche prova :slight_smile:

Mauro_Titan:
arduino Lan

Intendi l'ethernet shield?

Magari questo micro tutorial ti può tornare utile http://arduino.cc/forum/index.php/topic,50723.msg362043.html#msg362043

KrashNet:
Intendi l'ethernet shield?
Magari questo micro tutorial ti può tornare utile http://arduino.cc/forum/index.php/topic,50723.msg362043.html#msg362043

Si intendevo quello , ma come al solito sono di fretta e non riesco a scrivere.

Cmq. nel frattempo che attendo il corriere ho sacrificato Arduino e il Rele per un'applocazione di Lavoro .. e interessante :slight_smile:
Ho forato un blocco di alluminio e all'interno ho messo una resistenza da 220V
Con arduino accendo la resistenza per 30 Sec. e la spengo per 10 Sec.
FUNZIONA :slight_smile:
Cmq. vado a leggere il link che mi hai dato.

Grazie.
Ciao.

Ho provato a collegarmi al sito e copiare l'esempio , ma qualcosa non funziona.

Ho modificato da 3 Led a 1 Led per semplicita'.
Messo l'indirizzo di Arduino

ma appena collego arduino al router e alla corrente il Led si accende
e quando mi collego alla pagina con IE mi esce :

accendi
spegni

ma se clicco sopra il led si spegne e subito si riaccende.
perche' ?
idem se accendo ..si spegne e poi subito si riaccende.
Perche ?

#include <SPI.h>
#include <Ethernet.h>

int Led = 13;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,3,151 };
Server server(80);
String query;

void setup()
{
  query = String("");
  Ethernet.begin(mac, ip);
  server.begin();
  pinMode(Led,OUTPUT);
}

void loop()
{

  Client client = server.available();
  if (client) {
    while (client.connected()) {
	if (client.available()) {
	  char c = client.read();
	  query.concat(c);
	  if (c == '\n') {
	    client.println("HTTP/1.1 200 OK");
	    client.println("Content-Type: text/html");
	    client.println();
	    if (query.indexOf("GET /accendi HTTP/1.1") > 0) {
		digitalWrite(Led,HIGH);
		client.print("Accendo
");
	    }
	    if (query.indexOf("GET /spegni HTTP/1.1") > 0) {
		digitalWrite(Led,LOW);
		client.print("Spengo
");
	    }
	    client.print("<a href='/accendi'>Accendi LED</a>
<a href='/spegni'>Spegni LED</a>
");
            client.print("<pre>");//DEBUG
	    client.print(query);// DEBUG
	    client.print("</pre>");//DEBUG
	    break;//fermo il ciclo
	  }
	}
    }
    delay(1);
    client.stop();
    query = String("");
  }
}