Relai WOL avec un Arduino - Programmation/Mise en route

Une moulinette de code qui s'est enrayée, une requête SQL qui ne passe pas ?
tiyifitu
 
Messages: 2
Inscription: 28 Aoû 2013, 08:20

Relai WOL avec un Arduino - Programmation/Mise en route

Messagede tiyifitu » 29 Aoû 2013, 09:05

Salut à tous !

J'ai dernièrement décidé de réaliser un relai Wake On Lan suite à la lecture d'un tutoriel proposé par un shérif local : http://www.finalclap.com/tuto/arduino-wake-on-lan-repeater-80/.
J'ai donc fait l'acquisition d'un Arduino Uno avec son Shield Ethernet, et étant un type bien organisé, j'ai même pensé à l'adaptateur USB pour le réseau électrique. Il est à préciser que je ne m'intéresse qu'à la première partie dudit tutoriel. Voici donc le programme que j'obtiens en copié-collé, tel le gros fainéant que je suis :

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

byte arduinoMAC[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // Adresse MAC inscrite sur l'Arduino
IPAddress arduinoIP(192, 168, 0, 13);
unsigned int arduinoPort = 7;
IPAddress broadcastIP(192, 168, 0, 255);

EthernetUDP udp;

#define MAGIC_PACKET_SIZE 102
byte packetBuffer[MAGIC_PACKET_SIZE];

void setup() {
  // Connexion au réseau local
  Ethernet.begin(arduinoMAC,arduinoIP);
  
  // Ecoute du port redirigé par le routeur
  udp.begin(arduinoPort);
}

void loop() {
  forward_wol_magic_packet(); // Appel du programme "forward_wol_magic_packet"
  delay(100);
}

void forward_wol_magic_packet() {
  int packetSize = udp.parsePacket();
  if(packetSize)
  {
    udp.read(packetBuffer, MAGIC_PACKET_SIZE);
    
    udp.beginPacket(broadcastIP, 9);
    udp.write(packetBuffer, MAGIC_PACKET_SIZE);
    udp.endPacket();
  }
}


Quelques précisions sur le pourquoi de certaines choses que j'ai faites.

J'ai choisi de lui attribuer l'adresse IP : 192.168.0.13, car mon routeur semble manifestement préféré attribuer cette IP là au port ethernet auquel est branché l'Arduino. Par contre, pour une raison que je ne m'explique pas, mon routeur met bien 3 minutes avant de reconnaitre la connexion de mon matériel... Bref, je suppose que tant qu'il est reconnu à un moment ou un autre, tout roule.

Aussi, j'utilise WakeOnLanMonitor (http://www.clubic.com/telecharger-fiche224238-wake-on-lan-monitor-sniffer.html) pour vérifier que le paquet magique parvient bien à mon PC. Lorsque je fait l'envoi du paquet depuis mon téléphone en local, il apparait bien et en effet mon PC démarre lorsque je le fais (NOTA : cela fonctionnait déjà AVANT que j'achète et que j'installe mon Arduino). Toutefois, lorsque je fais l'envoi depuis internet, rien ne me parvient. Et pas de démarrage. (NOTA again: j'ai bien fait l'envoi du paquet magique vers le port 7 de mon routeur.)

Il n'y a qu'une chose que je n'ai pas encore testée, ce serait d'envoi le paquet directement sur l'IP de mon PC (que j'ai fixée, relativement à son adresse MAC, dans le serveur DHCP de mon réseau local). Mais cette solution ne fonctionnera probablement pas, car déjà lorsque j'envoie le paquet en local, il faut que ce soit sur l'adresse IP de broadcast.

Voilà. Qu'ai-je mal fait ??
Merci d'avance !

Bisous à tous,
Tiyifitu

Avatar de l’utilisateur
Galdon
Administrateur du site
Administrateur du site
 
Messages: 2188
Inscription: 06 Sep 2008, 22:05

Re: Relai WOL avec un Arduino - Programmation/Mise en route

Messagede Galdon » 29 Aoû 2013, 21:07

Je ne sais pas, difficile de dire ou ça coince, ça m'est arrivé pas mal de fois d'avoir des galères avec le wake on LAN.
En fait, ce qu'il faut bien garder à l'esprit c'est que c'est une chaine, et il suffit que la chaine soit cassé à un seul endroit pour que ça marche pas.

Donc si je résume, admettons que tu souhaite envoyer un paquet magique depuis ton boulot vers le PC de ta maison, voilà ce qui est sensé se passer :

  1. Tu envoie le paquet magique depuis le PC de ton boulot. Pour que ça marche, il faut déjà que le port UDP auquel tu envoie le paquet ne soit pas bloqué par le firewall de ta machine, ou celui du réseau de l'entreprise.
  2. Admettons qu'il n'y ai pas de problème de firewall, le paquet sort et se promène sur le réseau internet jusqu'à l'IP de destination (l'IP que ton FAI t'a attribué), donc le paquet va arriver sur ton routeur à la maison. Là, il faut que la redirection de port UDP fonctionne et transfert le paquet UDP à l'arduino.
  3. L'arduino reçoit les données, et il envoi le paquet qu'il vient de recevoir à tout le monde grâce à l'adresse de broadcast LAN
  4. Il faut que le PC a qui est destiné le paquet magique soit correctement configuré, et surtout il faut que le paquet magique lui soit adressé (autrement dit : il faut pas se planter dans l'adresse MAC qu'on met dans le paquet magique)

Pour trouver ce qui ne fonctionne pas, il faut tester les différents "maillons" individuellement, sinon tu ne t'en sortira pas :
  • L'émetteur du paquet magique
  • Le routeur (redirection de port)
  • L'arduino
  • Le PC destinataire

Dans ton cas le PC destinataire semble bien configuré puisque tu arrive à le réveiller avec ton téléphone sur le LAN. Concernant l'émetteur, pas la peine de tester, utilise ce service pour envoyer le paquet magique, ça fonctionne très bien je l'utilise presque tous les jours : http://www.depicus.com/wake-on-lan/woli.aspx

Pour tester le routeur et la redirection de port : configure la redirection du port vers ton PC plutôt que vers l'arduino, c'est beaucoup plus facile et pratique pour tester, en utilisant un de ces logiciels de test :
http://www.simplecomtools.com/productca ... category=5
http://www.msigi.net/projects/software/netdebug

En fait l'ID c'est de se mettre à la place de l'arduino (avec le PC) et d'envoyer un paquet magique avec depuis internet avec http://www.depicus.com/wake-on-lan/woli.aspx. Normalement, à chaque fois que tu va envoyer un paquet magique avec depicus tu devrais voir des données (le paquet magique) s'afficher dans le logiciel. Si tu ne voit rien, c'est que le routeur ne fait pas son job, c'est la cause du problème.

Enfin, pour tester l'arduino il te faut 2 PC (tous relié au réseau local, comme l'arduino). Tu installe ce petit logiciel sur les 2 PC : http://magicpacket.free.fr/, il permet à la fois d'envoyer et de recevoir les paquets magiques. Donc sur le premier PC tu le configure en mode récepteur (Receive), et sur l'autre PC tu le met en mode émetteur (Send), et tu envoie un paquet magique à l'arduino. Si l'arduino fonctionne il va transmettre le paquet sur le broadcast, et tu va le voir apparaître sur le PC récepteur.
"Si tu veux me parler, envoie-moi un... FAX !" - George Abitbol

tiyifitu
 
Messages: 2
Inscription: 28 Aoû 2013, 08:20

Re: Relai WOL avec un Arduino - Programmation/Mise en route

Messagede tiyifitu » 01 Sep 2013, 14:04

Salut à tous !

Tout d'abord, merci Galdon pour ton aide. J'ai fait plusieurs tests avec ce que tu m'avais donné qui m'ont permis d'avancer.
Toutefois, j'ai un ami qui touche bien tout ce qui est réseau et m'a donné l'idée de mettre l'adresse IP de mon Arduino en tant qu'hôte DMZ. Du coup, le paquet magique qui n'arrivait jamais à l'Arduino y arrive obligatoirement.
Ca fonctionne désormais.

Encore merci pour ton tuto et ton aide !
A bientot,

Tiyifitu


Retourner vers PHP/MySQL

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron