Automatisation de parametrage de cartes electroniques [script shell] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 16-02-2005 à 04:13:21
Gruiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiik !
#!/bin/bash |
Marsh Posté le 16-02-2005 à 17:57:03
Nom d'une pipe !!
Y'a des dieux sur terre !!
Je l'essaye de suite pour voir
Marsh Posté le 16-02-2005 à 22:56:56
J'ai essayé tout a l'heure, visiblement il me manque la commande 'dc'.
A quoi correspond cette commande ?
A+
Marsh Posté le 17-02-2005 à 20:49:57
Bon et bien bravo, j'ai pu tester en reel le script, j'avais 50 appareils a livrer aujourd'hui, ca a fonctionné du 1er coup.
Comme quoi, de petits outils diversifiés, un script et hop, on fait ce qu'on veut ! (enfin, moi pas encore )
Dire que j'en connais qui auraient passé plusieurs jours a developper un logiciel usine a gaz sur une platforme dont je ne citerai pas le nom avec interface graphique et tous les trucs inutiles qui vont bien.....
Amicalement,
Cyril
Marsh Posté le 15-02-2005 à 14:09:46
Bonjour a tous.
Je vais essayer de vous expliquer clairement ma problematique, qui pour moi peut se resoudre facilement par un script shell. Malheureusement je ne n'y connais rien en programmtion shell.
Voila, j'ai developpé un boitier electronique qui integre une interface reseau ethernet. Comme vous le savez, chaque produit reseau possede un N° unique, l'adresse MAC, de la forme 11.22.33.44.55.66, donc 6 champs allant de 0x00 a 0xFF.
Quand mes boitiers sortent de production, ils ont une adresse MAC par defaut. Il me faut donc leur attribuer leur adresse MAC finale. La carte integre un serveur web embarqué, et toutes les configs passent par des requetes http vers un script cgi.
Par exemple, si mon boitier est sur le reseau local avec comme IP 192.168.1.250, et que je veux lui donner comme adresse mac 00.FB.AD.EE.45.34, il suffit de taper dans le navigateur : http://192.168.1.250/cgi/setparame [...] D.EE.45.34
La carte redirige alors vers une page indiquant que la sauvegarde s'est bien deroulée ou non.
Evidemment, ceci est fastidieux dès qu'on commence a avoir un certain nombre de cartes a programmer.
Donc je voudrais ecrire un script capable de :
1) Ouvrir un fichier (mac.txt) et aller a la derniere ligne pour recuperer la derniere adresse MAC utilisée, et la mettre par exemple dans $mac.
2) Incrementer cette adresse MAC
3) Demander a l'utilisateur de brancher un boitier sur le reseau puis de taper ENTER
4) Envoyer la requete de configuration a la carte avec wget
5A) Si wget a retourné une erreur, on indique que ca a merdé et on retourne en 3
5B) On verifie dans le fichier recuperé par wget (reponse du boitier) si la sauvegarde s'est bien passé. Si oui, on passe en 6, sinon, on l'indique et on retourne en 3
6) On rajoute a la fin du fichier mac.txt l'adresse mac qui vient d'etre utilisée
7) On indique a l'utilisateur que tout s'est bien passé, et on retourne en 2
Note 1 :
--------
La commande wget est la suivante (l'adresse IP de la carte est toujours la meme) :
wget -t 1 -O result.txt 192.168.1.250/cgi/setparameters.cgi?mac=xx.xx.xx.xx.xx.xx
En cas de sauvegarde reussie, le fichier result.txt contient ceci :
<html><head><meta http-equiv="refresh" content="0;URL=/sauvegardeok.html">
</head></html>
En cas d'echec de sauvegarde, il contient ceci :
<html><head><meta http-equiv="refresh" content="0;URL=/sauvegardeko.html">
</head></html>
Donc pour verifier si la sauvegarde est OK (point n°5B), un grep 'sauvegardeok' result.txt >> /dev/null devrait marcher (en testant le retour du grep)
Note 2 :
--------
Le point sensible va etre sans doute l'incrementation de l'adresse mac.
Chaque champs vaut entre 0 et FF ( 0 et 255). Le champs de poids faible est a droite.
Par exemple, au demarrage, si l'appli recupere dans mac.txt cette derniere adresse mac :
00.FB.EE.33.00.FD
les prochains boitiers recevront respectivement :
00.FB.EE.33.00.FE
00.FB.EE.33.00.FF
00.FB.EE.33.01.00
00.FB.EE.33.01.01
00.FB.EE.33.01.02
etc, etc...
Je pense qu'il faudrait en fait 6 variables pour simplifier les calculs, genre $mac1, $mac2, $mac3, $mac4, $mac5 et $mac6
Pensez vous que c'est faisable ?
Merci et bonne journée a tous !
Cyril