jeudi 10 novembre 2011

Nabaztag V2 : Clonage des services Nabizdead


Objectif : Installer très facilement son propre serveur web "myNabizdead" en 5 minutes (une fois bien rôdé) et 10 lignes de php ! Sources Zip

Requis : Un hébergement web supportant le .php et les fichiers .htaccess

Le serveur ainsi cloné sur la base de www.nabizdead.net est entièrement autonome (et totalement ouvert aux dévs...). Il peut aussi être chaîné avec d'autres serveurs ou services web afin de founir un réseau maillé plus important offrant de très nombreux services à la carte.

Le serveur myNabizdead peut aussi être vu comme un proxy qui pourrait s'intercaler entre le lapin et le serveur Nabizdead original (www.nabizdead.net) pour diffuser des informations particulières et redonner la main au serveur suivant.

On peut ainsi imaginer de nombreuses utilisations : personnelle, communautaire, domotique, bureautique voire même industrielle. Il n'y a donc plus de limite pour ce type de serveur, à part votre imagination.

Les commandes interactives envoyées au Tag:tag sont en langage clair (ex: SAY ASK MP3 COLOR SLEEP WAKEUP...) et permettent très facilement le développement de nombreuses applications de type Quizz, Histoires interactives, Flux d'informations, Nabcasts, etc...
 On notera qu'il n'est pas nécessaire de "monter" son serveur myNID pour fournir du contenu aux Nabaztags de la communauté : une simple page web suffit, dès l'instant qu'elle renvoie les commandes dans le format attendu par le lapin en mode texte. On ne peut plus simple. (cf Langage NID)

Sources Zip

On procède en 2 étapes principales :

Installation du "boot_code" chargé par le Nabaztag:tag lors de sa mise sous tension

Modification & Interception des demandes (requêtes) du Nabaztag:tag

1. Installation & paramétrage du Boot

Lorsque le lapin est allumé et connecté au wifi, sa première demande est de récupérer un fichier "boot" par un appel à http://adresse_mon-serveur/bc.jsp (adresse_mon-serveur est/sera défini dans le setup du lapin. Ex: mynid.free.fr).

Installer les 5 fichiers contenus dans Sources Zip sur son serveur web dans le répertoire qui va bien; càd celui qui sera défini dans le setup du lapin : ici adresse_mon-serveur (ex: à la racine de mynid.free.fr).

Le fichier .htaccess associé au répertoire web permet de transformer l'appel initial /bc.jsp en /_bc.php.

Le script _bc.php gère l'envoi du fichier de boot (ici bc.nid-wizz.bin) vers le Nabaztag:tag lors de son démarrage.

Il faut maintenant modifier le setup du Nabaztag:tag pour lui indiquer le nom de son nouveau serveur (adresse_mon-serveur).
 Le lapin doit donc démarrer en chargeant le boot que l'on vient d'installer. Il communique maintenant avec le serveur nabizdead.wizz.cc par défaut.

Note : On peut aussi indiquer dans le setup une adresse de serveur du genre adresse_mon-serveur/dirxxx. En effet si on désire installer plusieurs serveurs myNabizdead sur un même serveur physique, il faut alors les différencier par le nom du répertoire, car le premier appel à la mise sous tension se fait toujours sur le nom du script bc.jsp codé dans le firmware (ici l'appel serait http://adresse_mon-serveur/dirxxx/bc.jsp). Dans ce cas, il faudra bien sûr installer les fichiers dans chaque répertoire dirxxx de son serveur web.

2. Intercepter les requêtes du Nabaztag:tag

A la fin de l'étape 1 précédente, le Nabaztag:tag communique par défaut avec le serveur nabizdead.wizz.cc en lui envoyant des requêtes ("ping"), à intervalles réguliers, sur l'adresse (pour l'instant) http://nabizdead.wizz.cc/p.php.

C'est la fonction principale du script p.php qui est donc le programme central vers lequel convergent toutes les demandes ("ping") du Nabaztag:tag. Le nom de ce script (p.php), ainsi que le nom du serveur, sont inscrits en dur dans le fichier de boot bc.nid-wizz.bin.

Pour communiquer avec votre serveur (et non plus nabizdead.wizz.cc par défaut), voici donc l'ultime et délicate modification à apporter au fichier de boot (bc.nid-wizz.bin) :

Comme la communauté n'a pas (encore) les sources du fichier boot, il faut donc opérer directement dans le binaire avec l'aide d'un éditeur hexadécimal (cf Hex Editor Neo).

En fait, en analysant plus précisément le protocole de communication entre le lapin et le serveur, on s'aperçoit que les requêtes sont envoyées sur une ip figée plutôt que vers un nom de domaine... je ne sais pas trop pourquoi (mais j'ai qd même une petite idée...). Ca peut devenir un tout petit peu embêtant pour certains hébergements. On s'attendait à voir une requête du genre http://www.nabizdead.net/p.php?xxx mais c'est http://213.186.33.17/~nabizdea/p.php?xxx qui apparait ! (l'ip 213.186.33.17 étant un cluster OVH). Il va donc falloir ruser pour rentrer dans le moule...
Charger le fichier boot binaire bc.nid-wizz.bin dans l'éditeur Hex Neo et se rendre directement à l'offset 0x0e5e. C'est le répertoire d'accueil de votre serveur codé sur 10 octets. Ici /~wizzbnpy (anciennement ~nabizdea). Ca tombe bien, mon serveur est aussi chez OVH ! Pour les autres, va falloir faire avec...
 Remplacer /~wizzbnpy par votre répertoire d'accueil sur 10 caractères.

Maintenant, 8 octets avant, on trouve l'ip du serveur distant : offset 0x0e56 à 0x0e59. Ici bc a5 07 13 correspondant à 188.165.7.19 soit le cluster qui héberge nabizdead.wizz.cc (anciennement b5 da 21 11 soit 213.186.33.17 le cluster qui héberge www.nabizdead.net). Rebelote , il faut modifier ces 4 octets avec l'ip de notre serveur en hexa.
Facultatif (?) : Dans le doute, modifier les 17 octets (qui contiennent nabizdead.wizz.cc) situés à l'offset 0x0f9e. Il faut donc trouver un nom de domaine/sous-domaine sur 17 caractères : par exemple mynid0001.ovh.net (l'original était www.nabizdead.net). Je ne sais pas si réellement ce domaine est utilisé quelque part. Pour moi, il aurait dû l'être en lieu et place de l'ip/rép vu plus haut...

Du coup , ne pas oublier de déplacer le fichier p.php vers le bon serveur/répertoire (ou installer une redirection dans un .htaccess à la racine du répertoire d'accueil).
Sauvegarder le fichier .bin ainsi modifié (sa taille doit rester à 22426 octets bruts) et le mettre à jour sur votre serveur web.
Re-demarrez le Nabaztag:tag (débrancher/attendre 20 secondes/rebrancher). Et normalement bingo !

Note : L'emplacement du fichier p.php peut être finalement différent de celui du _bc.php. En effet, ces 2 scripts sont totalement indépendants. On peut charger le boot_code sur un premier serveur (celui indiqué dans le setup du Nabaztag:tag) et répondre aux demandes (ping) sur un second serveur (celui indiqué dans le fichier boot bc.nid-wizz.bin).

Les commandes disponibles sont listées dans le script. Avec un peu de temps et d'exemples, on connaitra la logique de chacune de ces commandes.
ASK
ASKANY
ASKDELAY
DYN
COLOR
CUT
LANG
MP3
MSK
REBOOT
RESET
SAY
SNDTHR
SLEEP
TIME
WAKEUP
WAIT

Voir aussi le post sur le Boot Tag:Tag.

3. Facultatif : interception du TTS Google

La cerise sur le gâteau : intercepter le TTS Google pour le re-diriger vers un tts plus élaboré (type ACapela, VoxCards, etc...) ou carrément ajouter de nouvelles commandes/fonctionalités aux Nabaztag:tag ! A suivre...

Conclusion

A chacun désormais d'enrichir/modifier le script p.php en fonction de ses besoins...
Installation facile sur un réseau local
Beaucoup de possibilités offertes

Pour les discussions, se rendre directement sur le Nabaztag forumactif.