domandina preventiva. sto pensando di fare un piccolo progettino per aiutare un amico.
In poche parole mi occorre un metodo per lanciare ad un pc un pacchetto WOL per accenderlo. complicato da spiegare il perche non si può usare il normale pulsante ON!
ho pensato di unire un ATMEGA328 con un ENC28j60, un connettore di rete, qualche componente di contorno e un pulsante. schiaccio, parte il pacchetto WOL diretto al pc all'altro capo del cavo e lui si accende! semplice!
l'unica cosa che non so è, com'è composto il pacchetto WOL? come si dovrebbe includere nel programma da caricare sull' Arduino?
avevo trovato questo script per VBS
forse adattadolo potrebbe fare al caso tuo
Option Explicit
On Error Resume Next
Dim objWOL, answare
answare=MsgBox("Vuoi svegliare il PC remoto?",4,"Wake On Lan")
Set objWOL = _
WScript.CreateObject("UltraWOL.ctlUltraWOL", "objWOL_")
If answare = 6 Then
objWOL.BroadcastAddr = "192.168.0.255"
objWOL.MACAddr = "00-a0-c5-30-30-04"
objWOL.LocalIP = "192.168.0.1"
objWOL.WakeUp
End If
Sub objWOL_WOLError(strError)
MsgBox strError, vbCritical, "UltraWOL Status"
Set objWOL = Nothing
End Sub
Sub objWOL_WOLComplete(strStatus, strMACAddr, _
strBroadcastAddr, strLocalIP)
Dim strMessage
strMessage = "Il Pacchetto WOL è stato spedito:" & vbcrlf & vbcrlf _
& "Stato del Pacchetto:" & vbTab & strStatus & vbcrlf _
& "Indirizzo di Broadcast:" & vbTab & strBroadcastAddr _
& vbcrlf & "Indirizzo MAC: " & vbTab & strMACAddr _
& vbcrlf & "Interfaccia usata: " & vbTab & strLocalIP
MsgBox strMessage, vbInformation, "WOL"
Set objWOL = Nothing
End Sub
In VBS funziona, adattandolo potrebbe andare, che ne pensate?
ma sbaglio o questo usa una qualche libreria o simile che materialmente mandi il WOL? Io intendevo qualcosa a più basso livello. Immagino che si debba scrivere e ricreare proprio il Magic Packet che viene interpretato dalla scheda di rete!
uhm, forse wikipedia dà la risposta. ma non mi è chiara! spiegatemela:
"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"
z3us:
uhm, forse wikipedia dà la risposta. ma non mi è chiara! spiegatemela:
"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"
Ciao
il formato del pacchetto Ethernet da inviare è abbastanza chiaro da quello che ti dice Wikipedia... sto guardando però le librerie per l'Ethernet shield di Arduino e non ti danno direttamente funzionalità di creazione e invio pacchetti ethernet custom. Penso si debba utilizzare qualche funzione diretta della libreria W5100, vedi questo thread: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1233346832/5
però, sto utilizzando una shield ENC28j60. per due motivi: ho questa a disposizione, e il chip DIP è di facile recupero!
ho però confusione con la questione UDP, cito da Wiki:
"Since the magic packet is only scanned for the string above, and not actually parsed by a full protocol stack, it may be sent as any network- and transport-layer protocol, although it is typically sent as a UDP datagram to port 7 or 9, or directly over Ethernet as EtherType 0x0842.[7]"
per spiegarti cosa intendono devi aver presente lo stack protocollare IP:
il tuo obiettivo è mandare un pacchetto ethernet (il livello "link") formato come da indicazioni di Wikipedia.
Tale pacchetto può essere:
directly over Ethernet as EtherType 0x0842 (quindi un pacchetto Ethernet diretto)
typically sent as a UDP datagram to port 7 or 9 (un "finto" pacchetto UDP che in realtà contiene come dati 16 volte il MAC destinazione)
La seconda opzione può essere utile perché ti consente di utilizzare le funzioni di comunicazione UDP della libreria ethernet senza andare a basso livello.
Propongo una soluzione alternativa per accendere il pc, tienila in considerazione se non riesci ad inviare il pacchetto: usa un normale optoisolatore!
Lo colleghi sui pin di accensione della scheda madre e quando devi accendere il pc dallo shield ethernet mandi a high il pin dell'optoisolatore per mezzo secondo (anche meno).
So che va fuori tema ma è sempre una alternativa funzionante e sicuramente più semplice.
Ciao
Pelletta:
So che va fuori tema ma è sempre una alternativa funzionante e sicuramente più semplice.
Forse neanche tanto fuori tema ... anzi .
Il WOL funziona fino a che non spegni il PC
Mi spiego ... il PC per me e' spento quando stacchi la spina dal muro .
Sono coinvolto in un progetto ( http://www.primacapsula.com )in cui una delle problematiche emerse era proprio il WOL
Il tutto e' alimentato con un UPS di discreta autonomia e procede alla sospensione delle operazioni passando in modalita' manuale quando manca la corrente elettrica
Quando arriva l'allarme dall'UPS di batterie prossime alla fine si procede allo spegnimento di tutto "l'ambaradan" , PC compreso
Torniamo al WOL
Se l'UPS e' rimasto "vivo" mandi il MagicPacket ed il PC si riavvia ma se l'UPS e' arrivato al punto di spegnersi e quindi e' sparita completamente la tensione di rete il PC non partira'
Ho provato questa cosa con PC prodotti dal 2000 ad oggi , portatili e fissi ed il risultato e' stato sempre quello descritto
Senza implicare l'uso di Arduino sono reperibili una miriade di circuiti per l'attivazione di rele' anche via GSM
Elettronica IN / Futura Elettronica spopolano su questi circuiti
sto tentando di dare una mano ad un mio amico che si è imbattuto in un'impresa di car pc. usa un portatile messo nel bagagliaio. si era subito pensato di estendere il tasto di accenzione fino al cruscotto. ma l'idea è stata bloccata quando abbiamo scoperto che il tasto di accenzione è iglobato nella tastiera, che per di più è tutta un Flat! insomma, impossibile saldare o attaccarsi al tasto di accenzione!
io ho buttato un'idea, potremmo usare il WOL. Tanto il portatile sarà costantemente attaccato alla batteria dell'auto, quindi il WOL dovbrebbe essere sempre in ascolto!
poi, un'utilizzo parallelo potrebbe essere per accendere il mio computer di casa dal piano di sopra, quando voglio vedermi un film sul lettore HD. ogni volta devo scendere ad accendelo. potrei attaccare quel'aggeggio e schiacciare ON!
vabè, vedimao se riesco, sennò niente! trovo un'altra strada!
Luca non ce ne soluzione, se togli tensione la scheda di rete esce dallo stand-by, anche se sul bios imposti la voce di recuperare lo stato precedente. Non credo che lascino il pc collegato alla batteria quando l'auto è parcheggiata, sarebbero sempre a spingerla per metterla in moto. L'unico modo è usare il tasto di "ACCENZIONE", ma la cosa più difficile è guardare il film mentre si guida :), il pc si trova nel bagagliaio, ma il film lo guardiamo dal cruscotto... con una serie di specchi? Loool
eppure ti posso assicurare: ho preso quel PC di cui ho fatto gli screen, ho spento XP, gli ho tolto il cavo di alimentazione e dopo aver impostato il BIOS come da screen ridando corrente e mandando il magic packet si è acceso... marca HP
Ahh ecco hai sul bios un opzione rara "wol after power loss" qualche marca lo adotta, ma è rara, purtroppo non è una cosa ancora fattibile a tutti, bhe beato te su molti bios trovi solo il recupero dello stato after power loss, se era acceso riaccenditi o viceversa
ciao