Arduino nano, Web server e Wake on lan

Ciao a tutti, è il mio primo post su questo forum quindi perdonatemi se ho sbagliato qualcosa.
Da un po' di tempo sono rimasto affascinato dalle potenzialità di Arduino. Tuttavia, non mi sono ancora apprestato a comprare una scheda Arduino, in quanto nella mia mente non si è ancora prefigurato un preciso progetto.
Da qualche giorno, però, sto sistemando la rete informatica di casa per sfruttare la funzionalità Wake on Lan presente sui PC (2 portatili e un fisso). Tutti i PC sono connessi via cavo ad un router Netgear DG834Gv4 (con firmware modificato, ma questo non c'entra niente). Il suddetto router, tuttavia, dopo un po' svuola la ARP cache e non mi è più concesso svegliare i pc da remoto.
Premesso che ho già fatto tutti i possibili tentativi possibili e immaginabili per creare un valore statico nella ARP table, ma ho constatato che tutto ciò non mi è possibile e mi è inoltre vietato fare un port forward sull'indirizzo di broadcast (192.168.0.255). In ogni caso, sfruttando qualsiasi altro software sui pc, mi è permesso di mandare pacchetti UDP verso l'indirizzo di broadcast, i quali raggiungono tutti i PC e svegliano solo i PC interessati.

La mia ultima idea sarebbe quella di dotarmi di un Arduino Nano (con relativo ethernet shield), collegarlo alla rete e usarlo come web server. Tramite un'apposita applicazione per Android (il cui sviluppo non è un problema), vorrei essere in grado di mandare tramite Internet una richiesta alla piattaforma Arduino, la quale si occuperà di far girare, tramite broadcast, un Magic Packet contenente uno specifico indirizzo MAC. Inoltre, non mi dispiacerebbe se Arduino riuscisse anche a comunicare all'applicazione lo stato on/off di un determinato PC.

Dite che si può fare?
Scusate per la lunga spiegazione, ma desidero essere il più chiaro possibile.

Michele

non vedo problemi nel fare quello che chiedi via arduino, il progetto e' interessante. Mi viene in mente un solo problema per ora, che la versione nano non e' compatibile con la ethernet shield meccanicamente. Io prenderei direttamente una Arduino Ethernet, che ingloba su un unica scheda, quindi senza shield, la sezione micro e la sezione ethernet.
mi sono ripromesso piu' volte di affrontare il wake on lan, ma non l'ho mai fatto. Non credevo ci fossero questi problemi. scusa ma quindi normalmente come si gestisce la cosa ? nelle aziende con tanti pc come fanno a non avere problemi con la arp table ?

Ciao Testato, grazie innanzitutto per avermi risposto :slight_smile:
Come progetto avevo preso in considerazione la scheda Arduino Nano perchè su Ebay ho trovato un modulo ethernet fatto apposta per la versione Nano e, a conti fatti, mi converrebbe. Che tu sappia ci sono dei problemi? (Suppongo che questo tipo di ethernet shield non sia ufficiale)
Non so come si comportino le grandi aziende, ma suppongo che prendano dei router che supportino il port forward verso l'ip di broadcast o, altrimenti, permettano di controllare la ARP table. Purtroppo il mio Netgear non permette nessuno dei due..

Già che ci sei potresti darmi una dritta per iniziare ad inquadrare il progetto? Così poi, se tutta la parte teorica fila lascio, posso provare la parte pratica acquistando Arduino :slight_smile:

Grazie in anticipo,
Michele

Tutti i PC sono connessi via cavo ad un router Netgear DG834Gv4 (con firmware modificato, ma questo non c'entra niente). Il suddetto router, tuttavia, dopo un po' svuola la ARP cache e non mi è più concesso svegliare i pc da remoto.

Questo succede perchè il tuo ruter non ti permette di salvare i MAC su eeprom, il router resetta la flash o una mancata alimentazione mentre le macchine sono spente svuotano la lista ARP. Ho avuto tempo fa una necessità come la tua su 4 macchine collegate via cavo ti serve un router che abbia la funzione Bind ovvero salvare i mac e abbinarli ad un indirizzo ip locale.
Quando una delle 4 macchine viene avviata, il router vede il mac e gli assegna l'ip da me stabilito, questo mi serviva perchè col vnc potevo cercare con certezza il pc giusto da remoto conoscendo l'ip (lasciando su windows/rete "ip automatico") e risvegliarlo conoscendo il mac.
Con il forward completi l'operazione quando chiami il pc da ip pubblico:
programmi una porta es 1234 all'ip 192.168.2.100 protocollo da usare ... per WOL
programmi una porta es 5678 all'ip 192.168.2.100 protocollo da usare ... per VNC

lista delle macchine attualmente accese
ARP List
ID MAC Address IP Address Status Configure
1 74-E5-0B-xx-xx-xx 192.168.2.100 Unbound Load Delete
2 BC-AE-C5-xx-xx-xx 192.168.2.112 Unbound Load Delete
3 64-A7-69-xx-xx-xx 192.168.2.180 Unbound Load Delete

lista delle macchine con i rispettivi MAC e gli ip (stabiliti da me) che devono assumere quando si accendono (configurati su eeprom)
ARP Binding: Disable Enable
ID MAC Address IP Address Bind Modify
1 A4-C0-E1-xx-xx-xx 192.168.2.101 y Modify Delete
2 BC-AE-C5-xx-xx-xx 192.168.2.112 y Modify Delete
3 64-A7-69-xx-xx-xx 192.168.2.180 y Modify Delete
4 1C-6F-65-xx-xx-xx 192.168.2.114 y Modify Delete
5 54-9B-12-xx-xx-xx 192.168.2.190 n Modify Delete
6 74-E5-0B-xx-xx-xx 192.168.2.100 n Modify Delete

prendi un router che abbia questa funzione

se poi vuoi sapere quali macchine sono ON da web server allora aggiungi un arduino con 4 ingressi, ma i modi sono molti per saperlo da remoto senza un particolare sistema.

Il primo che mi viene in mente è google drive (se possiedi un account google) inviando gli eventi su un foglio elettronico tipo excel con uno script
il secondo una mail lanciata da ciascuna macchina con un file.bat allo start, magari messo su esecuzione automatica all'avvio

es:
crea un file bach automail.bat modificando i tuoi parametri e mettilo su esecuzione automatica all'accensione del pc
bmail -s smtp.fastwebnet.it -t nomecognome@gmail.com -f nome.cognome@fastwebnet.it -h -a "Da ufficio" -b "Computer N°1 ACCESO"

Ottimo per sapere quando la segretaria arriva in ufficio visto che la prima cosa che fa è accendere il pc e poi togliere la giacca :smiley: :smiley:

bmail -s smtp.fastwebnet.it -t nomecognome@gmail.com -f nome.cognome@fastwebnet.it -h -a "Da casa" -b "Computer moglie ACCESO"

Ottimo per sapere quando la moglie ti dice "amore oggi non ho avuto un minuto libero" ahahahahahha
....

ciao

pablos:
Questo succede perchè il tuo ruter non ti permette di salvare i MAC su eeprom, il router resetta la flash o una mancata alimentazione mentre le macchine sono spente svuotano la lista ARP. Ho avuto tempo fa una necessità come la tua su 4 macchine collegate via cavo ti serve un router che abbia la funzione Bind ovvero salvare i mac e abbinarli ad un indirizzo ip locale.
Quando una delle 4 macchine viene avviata, il router vede il mac e gli assegna l'ip da me stabilito, questo mi serviva perchè col vnc potevo cercare con certezza il pc giusto da remoto conoscendo l'ip (lasciando su windows/rete "ip automatico") e risvegliarlo conoscendo il mac.
Con il forward completi l'operazione quando chiami il pc da ip pubblico:
programmi una porta es 1234 all'ip 192.168.2.100 protocollo da usare ... per WOL
programmi una porta es 5678 all'ip 192.168.2.100 protocollo da usare ... per VNC

lista delle macchine attualmente accese
ARP List
ID MAC Address IP Address Status Configure
1 74-E5-0B-xx-xx-xx 192.168.2.100 Unbound Load Delete
2 BC-AE-C5-xx-xx-xx 192.168.2.112 Unbound Load Delete
3 64-A7-69-xx-xx-xx 192.168.2.180 Unbound Load Delete

lista delle macchine con i rispettivi MAC e gli ip (stabiliti da me) che devono assumere quando si accendono (configurati su eeprom)
ARP Binding: Disable Enable
ID MAC Address IP Address Bind Modify
1 A4-C0-E1-xx-xx-xx 192.168.2.101 y Modify Delete
2 BC-AE-C5-xx-xx-xx 192.168.2.112 y Modify Delete
3 64-A7-69-xx-xx-xx 192.168.2.180 y Modify Delete
4 1C-6F-65-xx-xx-xx 192.168.2.114 y Modify Delete
5 54-9B-12-xx-xx-xx 192.168.2.190 n Modify Delete
6 74-E5-0B-xx-xx-xx 192.168.2.100 n Modify Delete

prendi un router che abbia questa funzione

se poi vuoi sapere quali macchine sono ON da web server allora aggiungi un arduino con 4 ingressi, ma i modi sono molti per saperlo da remoto senza un particolare sistema.

Il primo che mi viene in mente è google drive (se possiedi un account google) inviando gli eventi su un foglio elettronico tipo excel con uno script
il secondo una mail lanciata da ciascuna macchina con un file.bat allo start, magari messo su esecuzione automatica all'avvio

es:
crea un file bach automail.bat modificando i tuoi parametri e mettilo su esecuzione automatica all'accensione del pc
bmail -s smtp.fastwebnet.it -t nomecognome@gmail.com -f nome.cognome@fastwebnet.it -h -a "Da ufficio" -b "Computer N°1 ACCESO"

Ottimo per sapere quando la segretaria arriva in ufficio visto che la prima cosa che fa è accendere il pc e poi togliere la giacca :smiley: :smiley:

bmail -s smtp.fastwebnet.it -t nomecognome@gmail.com -f nome.cognome@fastwebnet.it -h -a "Da casa" -b "Computer moglie ACCESO"

Ottimo per sapere quando la moglie ti dice "amore oggi non ho avuto un minuto libero" ahahahahahha
....

ciao

Ciao, grazie pervla spiegazione, sicuramente mi tornerà utile :slight_smile:
Tuttavia, non vedo perchè dovrei comprare un nuovo router quando potrei fare tutto tramite Arduino. Sostituire il mio Netgear, che funziona perfettamente, potrebbe sì risolvere il problema ARP, ma poi dovrei prendere comunque Arduino per controllare lo stato dei PC. Spesa doppia per lo stesso risultato xD.
Potreste piuttosto darmi qualche dritta per iniziare a progettare il sistema web server-wake on lan? :slight_smile:

Grazie ancora,
Michele

Ahh forse non avevo capito, pensavo che con arduino volevi solo controllare quali pc sono accesi, invece vuoi mandare il packet usando la ethernet shield e controllare lo stato ON/FF delle macchine ..... mmm mi incuriosisce sta cosa, al momento non ho la minima idea di come farlo ci devo pensare.....

ciao

Esatto, io vorrei effettuare il Wake on Lan proprio attraverso Arduino, quando quest'ultimo riceve da internet un determinato segnale da me mandato.
Avevo preso in considerazione la scheda Arduino Nano perchè su Ebay ho trovato un modulo ethernet fatto apposta per la versione Nano e, a conti fatti, mi converrebbe. Che sappiate ci sono dei problemi? (suppongo che questo tipo di ethernet shield non sia ufficiale)

Di quale scheda eth parli? hai un link da farci vedere?

Bisogna usare la libreria UDP e creare il messaggio in base ai parametri prestabiliti

I pacchetti Ethernet che attivano la "sveglia" sono detti Magic Packet ("pacchetti magici"). Il Magic Packet è in sostanza un frame multicast, composto da una prima parte di sincronizzazione costituita da sei bytes di valore FF esadecimale, seguiti dall'Indirizzo MAC del nodo bersaglio ripetuto 16 volte, per un totale di 96 bytes, e da un campo password opzionale che può essere assente, lungo 4 bytes o 6 bytes[1].

non è la soluzione ma un inizio :slight_smile:

guarda qui wake on lan accendere il computer con Arduino

ciao

Sì, ecco qui. Avevo trovato 2 articoli riguardanti l'ethernet shield per Arduino Nano.
http://www.ebay.it/itm/ENC28J60-Webserver-module-Ethernet-Shield-for-Arduino-Nano-/181030427495?pt=LH_DefaultDomain_0&hash=item2a26411b67
http://www.ebay.it/itm/Ethernet-Shield-for-Arduino-Nano-work-as-ENC28J60-RJ45-Webserver-/281006055332?pt=LH_DefaultDomain_0&hash=item416d441fa4
Saranno validi?

Grazie per lo spunto di inizio :slight_smile:
Il punto dolente più che altro riguarda la parte Internet. Come si potrebbe fare ad instaurare una connessione tra Arduino e applicazione Android (da me sviluppata), senza passare per un'interfaccia web? Devo utilizzare i socket? Avete per caso una guida in merito?

Michele

Per il discorso hardware la differenza tra questa ethernet shield e l'originale e' nel chip, l'originale usa un wiz, mentre queste ecnomiche usano un enc.
La libreria ufficiale arduino non funziona e quindi ne devi usare una terze parti, ma la differenza principale e' che queste enc non hanno il tcp-ip integrato e quindi lo si fa via sw, appesantendo il tutto.

Se non hai ancora comprato ne' il nano ne' lo shield io ti riconsiglio sempre l'arduino ethernet, hai tutto in una sola scheda, ed hai anche lo slot per una scheda SD, utile se vuoi aggiungere qualche immagine per il webserver
http://store.arduino.cc/it/index.php?main_page=product_info&cPath=11_12&products_id=197

Ok, grazie. Allora mi prenderò l'Arduino Ethernet così sto tranquillo :). Aspettavo a fare acquisti proprio per sentire la vostra opinione!
Per quanto riguarda la connessione diretta tra Arduino e dispositivo remoto (Android)? Devo usare i socket? Avete qualche piccola guida in merito?

Grazie ancora,
Michele

Per programmare l'Arduino Ethernet ti serve un convertitore seriale-usb. --> http://arduino.cc/en/Main/USBSerial

oppure un programmatore esterno, oppure (non l'ho mai fatto) in TFTP. Ho letto in giro qualcosa, in questo caso non spenderesti altri soldi.

Allora tanto vale che prenda direttamente Arduino uno e poi ci metta sopra lo shield ethernet...
Arduino uno + Ethernet shield (senza PoE) = 49€
Arduino ethernet (senza PoE) + adattatore seriale-usb = 49.9€
Poi, aggiungendo un set di base (senza arduino), giusto per avere qualche dispositivo da controllare e un po' di cavi, raggiungo la bellezza di 78€

Mah... probabilmente rimanderò il progetto. Per ora mi sembra un po' troppo costoso per 2 schede... peccato...

si puo' spendere molto di meno.

innanzi tutto per gestire il Wol si puo' usare una ethernet alternativa, basata sul chip enc28j60
c'e' anche un articolo di Luca Dentella http://www.lucadentella.it/2012/02/22/enc28j60-e-arduino-4/
completo di sketch GitHub - lucadentella/enc28j60_tutorial

per la scheda ethernet, questa funziona benissimo http://www.ebay.it/itm/1pcs-ENC28J60-Network-Module-/261004876528?pt=LH_DefaultDomain_0&hash=item3cc51a5af0 e il fornitore e' affidabile ( se non hai fretta )
Per la Uno, puoi benissimo fare con uno standalone, o se proprio non vuoi saldare e rimanere su prodotti locali, usa una Luigino

brunello:
si puo' spendere molto di meno.

innanzi tutto per gestire il Wol si puo' usare una ethernet alternativa, basata sul chip enc28j60
c'e' anche un articolo di Luca Dentella http://www.lucadentella.it/2012/02/22/enc28j60-e-arduino-4/
completo di sketch GitHub - lucadentella/enc28j60_tutorial

per la scheda ethernet, questa funziona benissimo http://www.ebay.it/itm/1pcs-ENC28J60-Network-Module-/261004876528?pt=LH_DefaultDomain_0&hash=item3cc51a5af0 e il fornitore e' affidabile ( se non hai fretta )
Per la Uno, puoi benissimo fare con uno standalone, o se proprio non vuoi saldare e rimanere su prodotti locali, usa una Luigino

Grazie per i link.
Come Arduino servirebbe sempre la Uno da 20€ o basta anche Arduino Nano?
In alternativa la scheda Luigino dove la posso trovare? Su ebay non ho trovato niente...

La luigino la trovi su robot italy.

Ti va bene qualsiasi schedina, anche la nano.
Ricorda pero' che l'ethernet deve essere alimentata a 3,3V, ma accetta anche segnali 0-5V sui suoi ingressi

Ciao, come molti altri ti hanno detto si può fare, la gestione dei Magic Packet non è in linea generale un problema, mentre per capire se un PC è acceso o meno potresti semplicemente effettuare un PING (se hai gli indirizzi IP statici).

Quello a cui devi fare attenzione è invece la parte Android ed il controller Ethernet utilizzato. Se utilizzi ENC28J60 dovrai utilizzare lo stack IP in software, non è un grosso problema, ma utilizzerai più RAM e di conseguenza potrebbero starci stretti protocolli ASCII per la comunicazione Arduino-Android.
Se scegli questa soluzione, posso consigliarti il porting di uIP per AVR (non ho il link sotto mano) che ho utilizzato con buoni risultati.

Se usi W5100 con stack IP in hardware, avrai più RAM a disposizione e potresti pensare anche all'uso di protocolli ASCII (come HTTP/JSON) per la comunicazione Arduino-Android.

Io ad esempio, visto che utilizzo entrambi le tipologie, taglio la testa al toro utilizzando un protocollo binario.

Saluti,
Dario.

Grazie mille per le risposte. Gli IP sono statici quindi no problem per il ping.
Per la parte Android vedrò a tempo debito. Non sarà una passeggiata, ma sicuramente non sarà da sottovalutare.
Per quanto riguarda il controller ethernet e la board, devono ancora decidere cosa prendere. Arduino uno (+ ethernet shield, quindi W5100) mi garantirebbe la possibilità di ulteriori progetti collegati alla scheda, però il prezzo non è da sottovalutare.
Onestamente, ci devo pensare un po' su... magari mi muoverò con gli acquisti dopo le vacanze natalizie, vista anche l'attuale sospensione delle ordinazioni nello Store.

Grazie ancora, se ci sarà qualche problema mi farò sentire nuovamente in questo topic :slight_smile: