Go Down

Topic: ...network Arduino domotico...consiglio!!! (Read 978 times) previous topic - next topic

astroz78

...dunque vi faccio una domanda per conoscere una vostra visione della cosa...e basata sulla vostra logica e, ancor di più, basata su eventuali esperienze!

Ho un impianto domotico operativo...formato da 5 nodi Arduino 2009 tutti in rete LAN con, quindi, IP diversi. Ogni nodo gestisce circa 30 attuatori (luci, prese, irrigazione, climatizzazione) e 30 pulsanti. Ogni nodo localmente gestisce l'azione da eseguire al verificarsi di un evento locale (es. pressione di un pulsante x => accensione luce y) ed è in ascolto su una socket TCP per ricevere comandi da eseguire direttamente (es. via TCP posso ricevere il comando di variazione di stato porta di una porta => accensione luce y).

L'interfaccia Web mostra la lista di tutte le possibili "luci" da poter accendere/spegnere e chiaramente deve mostrare lo stato di ogni porta riflettendo lo stato reale fintanto che l'interfaccia è visibile/attiva. Ovviamente questo avverrà nel seguente modo:
a) all'apertura dell'interfaccia essa viene scaricata con lo stato attuale
b) fin tanto che essa è aperta, via AJAX, richiede al server eventuali "aggiornamenti"

La domanda è: come faccio a sapere, sul server, se ci sono aggiornamenti? Ho scritto quella premessa proprio per evidenziare che un cambio di stato ci può essere per n motivi...evento locale o evento remoto (eventualmente ricevuto pure da un altro client...utente).

uwefed

intendi un Server (um PC insomma) che gestische tutto?
2 possibilitá:
Ogni Arduino invia a ogni cambio la variazione e il Server le memorizza in un Database.
Oppure il server fa una richiesta di stato uscite i gli Arduini rispondono.

Puoi implementare anche tutte due le possibilitá.
Ciao Uwe

lestofante

o le pagina quando è richiesta controlla se è trascorso tot tempo e richiede gli stati a tutti gli arduino...
o meglio IMHO ogni cambiamento di un arduino invia un messaggio al server avvisandolo del cambiamento. Il server manterrà un file/db aggiornato di tutti gli stati.

uff uwed mi ha preceduto :)
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

astroz78

Sì il server sarà un PC che farà da supervisore! I nodi hanno un'autonomia limitata: gestiscono la logica locale di accensione/spegnimento di un'utenza, alcuni timer e poco altro...mentre il server/supervisore gestirà logiche più complesse come profili di climatizzazione, accensione spegnimento irrigazione, etc.

In effetti l'idea mia era implementare un po' entrambe le soluzioni, cioè:
1) request: ogni nodo ad un determinato comando risponde con lo stato di quella porta
2) push: ogni nodo è perennemente connesso al supervisore tramite una socket e riporta sempre e comunque a lui il verificarsi di ogni evento

jumpjack


intendi un Server (um PC insomma) che gestische tutto?
2 possibilitá:
Ogni Arduino invia a ogni cambio la variazione e il Server le memorizza in un Database.
Oppure il server fa una richiesta di stato uscite i gli Arduini rispondono.

Puoi implementare anche tutte due le possibilitá.
Ciao Uwe

Le due soluzioni proposte... mi sembrano in realtà un'unica soluzione: dev'essere sempre il server a leggere i dati di arduino; anche se è Arduino a inviarli, se il server non è in ascolto è inutile, no? ;-)
Quindi il server deve fare un polling continuo sulla pagina web creata da Arduino. Oppure basta semplicemente che la pagina creata da Arduino abbia l'autorefresh.

astroz78

@jumpjack...arduino non crea nessuna pagina...forse non mi hai capito...

Il server è in ascolto su una socket TCP...Arduino (che gestisce l'accensione/spegnimento delle utenze) riporta al server tramite quella socket il nuovo stato della porta...è poi il server che deve comunicare al client (browser web) la variazione di stato...e questo lo può fare tramite AJAX...

...mi sto documentando su un sacco di cose carine:
- JSON per il passaggio di dati dal server al client
- AJAX per la richiesta di variazioni di stato
- LongPolling o ReverseAJAX come tecnica per ottenere dati dal server non appena li ha disponibili

Go Up