Le Nabaztag, comment ca marche ? Partie 1 : le boot

Etant donné que j'ai décidé de remonter un serveur Nabaztag, je partage avec vous mes découvertes sur le fonctionnement d'un Nabaztag au travers d'une série d'articles (que vous pourrez retrouver dans la catégorie Nabaztag)

Aujourd'hui, la première partie, la séquence de boot du Nabaztag.

Le lapin, une fois raccordé au secteur, allume ses 4 diodes en Orange.
Les diodes passent progressivement du orange au vert, en suivant les étapes suivantes :

  • Détection du réseau WiFi
  • Echange de la clé cryptage
  • Obtention d'une adresse IP
  • Connexion aux serveurs

Je ne reviendrais pas sur les 3 premières étapes, le lapin étant autonome sur cette phase de connexion.

La 4ème phase est, elle, plus intéressante.

A ce moment, le lapin tente une connexion HTTP au serveur défini dans sa configuration. La requête est de la forme :

GET /bc.jsp?v=0.0.0.10&m=00:13:d3:84:53:5a&l=00:00:00:00:00:00&p=00:00:00:00:00:00&h=4 HTTP/1.0
User-Agent: MTL
Pragma: no-cache

Le fichier bc.jsp est utilisé pour renvoyer un bootcode au lapin, qu'il puisse définir son état au démarrage. Les différents paramètres passés sont les suivants :

  • v : la version du Nabaztag
  • m : l'adresse MAC du lapin
  • l et p : deux adresse MAC, utilisation non identifée
  • h : paramètre inconnu

Le serveur contacté renvoie donc un bootcode d'une centaine de Ko au lapin, qui poursuit ainsi sa séquence de boot.

Un deuxième appel HTTP est alors réalisé, toujours vers le même serveur :

GET /locate.jsp?sn=0013d384535a&h=4&v=21029 HTTP/1.0
User-Agent: MTL
Pragma: no-cache
Icy-MetaData:1

Par cette requête, la lapin précise sa configuration en demandant les adresses des différents serveurs nécessaires à son fonctionnement (le seul paramètre intéressant ici est sn, l'adresse MAC ou numéro de série du lapin, sans les : )

Le serveur répond alors :

ping tagtag.nabaztag.objects.violet.net
broad broad.violet.net
xmpp_domain xmpp.nabaztag.com

Ici, on en apprend un peu plus sur la manière de fonctionner du lapin.

ping est un serveur web, utilisé lorsque le lapin détecte un tag RFID (les Ztamp:s) ou lors de la reconnaissance vocale
broad est également un serveur web, utilisé pour les chorégraphies, les sons, etc
xmpp_domain est un serveur XMPP (Jabber) utilisé pour contrôler le lapin.

C'est sur ce serveur XMPP que viendra ensuite se connecter le lapin, et tentera ainsi de s'identifier.

Mais cela fera l'objet d'un nouvel article ;)

Publié le :
08/08/2011
Dans la catégorie :
Auteur :
Mathieu LESNIAK
Mathieu LESNIAK
Commentaires :
juherr
juherr
Bon résumé mais il aurait pu être intéressant de faire la distinction entre le bc-boot et le bc-nominal.

Pour bc.jsp :
l = login
p = password
mais au vu des sources du serveur et du lapin, ces valeurs ne sont pas utilisées (le format "MAC" est la conséquence d'un appel de méthode dans le bc-boot).

Je me permets de reposer la question du post précédent :
* Est-il prévu de rendre le code open-source ?
* Le projet semblant de qualité, pourquoi ne pas communiquer sur le site de la communauté Nabaztag ? (http://nabaztag.forumactif.fr/)
08/08/2011 22:29:04
Mathieu
Mathieu
J'avoue, je n'ai pas approfondi au niveau de bc-boot et bc-nominal, mon but étant de pouvoir refaire fonctionner le lapin à l'identique de l'époque Violet/Mindscape

Quand à rendre le code open source, c'est prévu, quand il sera pleinement fonctionnel.

Communiquer dessus ? Je n'aime pas trop les effets d'annonce. Tant que ça ne fonctionne pas totalement, je ne compte pas faire espérer les gens. Après, si tu veux en parler autour de toi, libre à toi ;)
08/08/2011 22:39:03
RedoX
RedoX
Salut,
En lisant les deux articles, une question me vient a l'esprit...
Tu refais un serveur compatible avec le bootcode Violet from scratch pour la forme, le challenge ? Ou y'a un truc que t'aimes pas dans le projet OpenJabNab (dispo sur Github) ?
Non pas que je critique l'initiative, loin de la. OJN etant looiin d'etre parfait, mais on dirait que t'en a meme pas entendu parler ^^

Bon courage en tout cas, y'a BEAUCOUP de travail :)
10/08/2011 02:19:35
Mathieu
Mathieu
Je refais un serveur pour l'amour, la gloire et la beauté ! :)

Plus sérieusement, je connais déjà bien OJN, mais j'ai envie de comprendre comment tout ça marche, et le meilleur moyen d'y arriver, c'est de coder sa propre solution.

Loin de moi l'envie de vouloir concurrencer ton projet ;)
11/08/2011 13:25:50
RedoX
RedoX
Je ne parlais pas de concurrence ou de compétition, loin de là ^^

J'suis d'accord avec la méthode, faut juste avoir le temps pour ça (que malheureusement, je n'ai pas ^^)

Encore une fois, bon courage :)
11/08/2011 17:21:56