Mindscape donne une seconde vie à Nabaztag !

Le titre est volontairement un peu provocateur, mais il est avant tout destiné à montrer mon opinion par rapport à la vague de dénigrement envers Mindscape qui circule sur le web actuellement.

Mindscape est en redressement judiciaire, il faut voir que chaque personne qui s’acharne contre la société sur les forums Internet participe à une fin qui pourrait ne pas être heureuse avec de nombreux emplois en péril derrière…

J’en profite au passage pour dire mon étonnement concernant la virulence des sites des communautés Freenautes, ayant participé depuis longtemps à ces communautés, je suis très étonné de leur antipathie à l’égard de Mindscape !

Mais le but de cet article n’est pas uniquement de me faire l’avocat du « diable », mais de vous expliquer pourquoi selon moi Mindscape donne une seconde vie à Nabaztag 😉

Pour revenir à la source du problème, la société Mindscape étant en grande difficulté financière, elle a du faire des choix pour pouvoir réduire ses couts et ainsi espérer se remettre à flot pour continuer ses activités.

Parmi les décisions pour réduire ses coûts, il y en a une qui a fait couler beaucoup d’encre, et grincer beaucoup de dents : l’arrêt des serveurs Nabaztag.

Ces serveurs avaient été mis en place à l’origine par la société Violet, et Mindscape n’a jamais vraiment su les prendre en mains, cela ayant entrainé entre autre beaucoup de problème technique courant Mai / Juin…

Mindscape aurait pu décider d’arrêter tout simplement les serveurs, suspendre le service ! Mais ils ont préféré laisser une chance à la très grande et active communauté Nabaztag de faire revivre le lapin en libérant les sources (cf. article précédent)

Une semaine après l’arrêt des serveurs, des dizaines de petits serveurs se sont montés pour accueillir les pauvres lapins qui se sont ainsi retrouvés sans terriers.

Et paradoxalement, les serveurs actuellement en place ne sont pas issus des sources qu’a libéré Mindscape, mais de logiciels qui avaient déjà été développés avant l’arrêt des serveurs.

La grande majorité des serveurs tournent en utilisant le logiciel embarqué du lapin d’origine avec le logiciel OpenJabNab, et un seul serveur se différencie, il tourne en utilisant un logiciel embarqué spécifique.

Ce serveur s’appelle Nabizdead. La philosophie de Nabizdead est totalement différente de celle d’origine, et il faut plus le voir comme un Twitter pour lapin 🙂

Vous vous demandez alors pourquoi je pense que « Mindscape donne une seconde vie à Nabaztag » si les développeurs de la communauté ont tout fait tout seul…. Et bien tout simplement, car pour moi ce n’est que le début !!!

Voici une petite explication du fonctionnement du lapin et de l’analyse des sources fournies par Mindscape. Merci au passage à funfoo pour son aide sur certains points, et à Dgi45 pour son analyse.

Il faut noter que toutes ces explications ne s’applique qu’aux Nabaztag v2, le v1 ayant une conception et un logiciel totalement différent.

Le « firmware » du lapin, est le logiciel de plus bas niveau. Il doit être compilé en utilisant les outils de développement AVR-IAR, et il ne peut être mis à jour sur le lapin qu’en utilisant la sonde de programmation adéquat. Le langage utilisé pour le firmware est le C (les sources sont présentes dans Hardware\compilateur\trunk\Projet-IAR).

Le firmware contient:

  • Tous les drivers de chaque élément interne du lapin (wifi, usb, led…)
  • Une sorte d’OS permettant la gestion du multitâche, l’interaction entre les différents drivers.
  • Une machine virtuelle exécutant le code Metal compilé (Metal = Méta langage crée par Sylvain Huet)
  • Le « bc-boot » compilé présent sous forme de tableau (fichier bc.c)

Les différentes contraintes sur le firmware, notamment l’obligation de le mettre à jour de manière physique sur le lapin ne permettent pas d’envisager de modification sur celui-ci.

La machine virtuelle gérant le langage Metal va utiliser 2 fichiers (appelé ByteCode), un premier qui est chargé dès le lancement (boot), et un second qui sera chargé sur le serveur sur lequel se connecte le Nabaztag et qui sera exécuté ensuite (nominal).

Le boot est chargé à chaque lancement du lapin, il peut être mis à jour depuis l’interface de configuration, mais n’a pas vraiment vocation à être modifié, en particulier car une erreur dans la programmation de cette partie pourrait rendre le lapin inutilisable.

Le bytecode bc-boot (source dans Hardware\bytecode\branches\bc-boot) permet :

  • Vérifie au lancement du lapin si l’utilisateur appui sur le bouton (sur la tête), si c’est le cas, il place le lapin en mode serveur web et en mode « maître » wifi. Il sera alors possible de se connecter depuis un PC sur le lapin pour modifier les paramètres
  • En mode serveur web, il permet la configuration des paramètres réseaux ainsi que l’adresse du serveur sur lequel devra se connecter le lapin (htttp://r.nabaztag.fr/vl par défaut)
  • En mode standard, il se connecte sur le serveur qui gère le lapin, et charge le ByteCode Nominal en appelant le fichier bc.jsp. Une fois téléchargé, le nominal est exécuté.

Le fait que le bytecode de boot gère toute la partie configuration me semble assez sensible, et comme je le disais, un mauvais bytecode bc-boot pourrait rendre le lapin inutilisable. Il ne me semble donc pas très intéressant de travailler sur cette partie non plus !

Le ByteCode bc-nominal (source dans Hardware\bytecode\branches\bc-nominal) est donc celui qui est chargé en dernier par le lapin, il permet :

  • De charger un nouveau logiciel sur le lapin à chaque fois qu’il se connecte sur un serveur
  • De gérer entièrement le lapin : réseau, led, oreilles…
  • De gérer les actions sur le lapin : bouton, oreilles, tag rfid…
  • De lire les MP3 directement depuis le lapin

Vous l’aurez compris, étant donné ses fonctions, et sa facilité de mise à jour, c’est sur ce fichier que nous allons travailler !!!!

Par contre, comme indiqué ci-dessus, les bytecodes bc-boot et bc-nominal sont développés en langage Metal. C’est un langage spécifique crée par Sylvain Huet (co-fondateur de Violet) en 2003 (donc avant son arrivé chez Violet), et vous ne trouverez aucune documentation, ni aucun tutorial sur internet concernant celui-ci.

Dans le répertoire Hardware\Outils\Doc vous trouverez un petit document qui décrit la grammaire et les principes du langage.

Pour utiliser ce langage, et donc créer un binaire à partir des sources nominal.mtl, il faut utiliser le compilateur fourni dans les sources.

Il y a deux versions du compilateur, une version Windows (disponible avec un projet sous Visual Studio dans le répertoire Hardware\compilateur\trunk\Projet-VS), et une version Linux (disponible dans le répertoire Hardware\compilateur\trunk\mtl_linux).

A noter qu’il semble que Violet ai modifié le compilateur, entre sa version Windows et Linux. Seul la version Linux sait compiler le nominal.mtl en dernière version (utilisant XMPP), mais la version Windows compile parfaitement le nominal-ping.mtl (fonctionnement du lapin avant l’intégration de XMPP)

N’étant pas un spécialiste Linux, je vous laisse vous reporter aux messages de totol et rpt sur le forum nabaztag.forumactif.fr pour ceux qui utilisent ce système.

Pour ma part, je vais parler du compilateur en version Windows.

Pour ceux qui n’ont pas Visual Studio, vous pouvez télécharger une version exécutable du compilateur/simulateur ici (Ce lien est désormais désactivé).

En gros, ce simple exécutable, vous permet de recréer un bytecode nominal compilé pour votre lapin. Pas besoin de chaine de compilation compliquée, il vous suffit d’avoir le nominal.mtl, le vlispemu.exe ainsi que le fichier de configuration config.txt pour modifier le logiciel embarqué du lapin.

De plus, cerise sur le gâteau, vlispemu.exe intègre un simulateur. Le simulateur va permettre de tester le fonctionnement du soft avant de le télécharger réellement sur le lapin. Cela se traduit par une interface permettant d’afficher des infos de debug (trace), et une interface graphique qui représente les leds du lapin, les oreilles, le bouton, l’interface RFID…

Voici un aperçu de l’interface :

Comment mettre le logiciel du lapin ?

Une fois le vlispemu.exe lancé, il génère deux fichiers : foo.bin et bc.bin

C’est ce deuxième fichier qui devra être utilisé pour le charger sur le lapin.

Le chargement se fait toujours depuis un serveur web sur lequel le lapin ira télécharger un fichier bc.jsp qui devra en fait être le bc.bin généré précédemment.

Si vous voulez simplement que votre lapin télécharge le bytecode, vous pouvez renommer le bc.bin en bc.jsp, mais vous pouvez aussi faire un traitement un peu plus fin de chaque lapin. Le Nabaztag télécharge en fait le fichier :

http://monserver/bc.jsp?v=<firmware_version>&m=<mac_address>&l=<login>&p=<password>&h=<hardware_version>

La variable m permet de récupérer l’adresse mac du lapin et ainsi de l’orienter vers tel ou tel bytecode…

Pour utiliser ça en php, on ferra par exemple un url rewritting grâce à un .htaccess (si l’url rewriting est actif sur votre serveur web bien sur) :

RewriteEngine on
RewriteRule   ^bc.jsp$   bc.php  [L]

Puis un fichier php qui fait le traitement que l’on souhaite, et renvoi le fichier bc.bin :

<?php

echo file_get_contents("bc.bin");

?>
bytecode

Comme je l’indiquais un peu plus haut, la version Windows du compilateur ne sait pas (sans modification du code) compiler la version XMPP du bytecode nominal, par contre, pas de soucis pour la version nominal-ping.mtl.

Le principe de la version ping est d’interroger le serveur régulièrement. C’est l’ancienne version du soft, qui était compatible OpenNab.

Si vous souhaitez tester rapidement la compilation du nominal.mtl, recherchez la fonction fun bottom_led dans le code, et remplacez led 4 par led 0.

fun bottomled=
	if !earDetecting then
	if ((time-lasthttpevent)>LED_TIMEOUT) then led 0 0xff00ff // bloquŽ
	else (let osc time_ms>>4 -> v in led 0 v*0x10001); // pulse violet
	0;;

Lancez vlispemu.exe pour compiler et générer le fichier bc.bin.

Ensuite, renommer le fichier bc.bin en bc.jsp pour le mettre sur un serveur web, puis configurer le lapin pour qu’il communique avec ce serveur.

Pour cela :

  • Débrancher le Nabaztag,
  • Appuyer sur le bouton sur la tête du lapin
  • Le rebrancher, les leds doivent toute s’allumer bleu
  • Avec votre PC wifi, connectez vous sur le Nabaztag (réseau non protégé de la forme NabaztagX)
  • Dans votre navigateur internet, ouvrez la page http://192.168.0.1
  • Vous obtiendrez une page vous indiquant « You are now connected to your Nabaztag« , cliquez alors sur « Click here to start« 
  • Vous arrivez sur la page de configuration, il faut cliquer sur « Advanced configuration« , et vous obtiendrez la page suivante :

Tout au fond de la page, dans le champ Violet Plateform, il faut alors renseigner l’adresse de votre serveur web.

Une fois l’opération faite, cliquez sur Update and Start, et regardez le résultat 😉 … le nabaztag respire par le nez 🙂 !

Voila une petite présentation rapide du fonctionnement du Nabaztag, la modification du logiciel embarqué du lapin permet d’imaginer pas mal de truc pour une utilisation domotique. Pour ma part, j’ai commencé quelques développements dont je vous reparlerais bientôt.

Et n’oubliez pas d’acheter des Karotz 😉 … C’est vraiment un super produit, avec des capacités bien plus évoluées que Nabaztag !

A propos Mickael

Je suis passionné de Domotique depuis des années. J'ai fait du développement en informatique industrielle pendant 12 ans, et un jour ... je me suis lancé ! J'ai créé ma boutique de vente en ligne : https://www.planete-domotique.com

A voir aussi

Yadoms : présentation du site

Découverte de Yadoms, la solution domotique open source

Les solutions domotiques sont nombreuses, avec une bonne proportion entre des systèmes propriétaires et des …

7 commentaires

  1. Merci beaucoup pour cet article très clair !
    J’ai suivi tes avancées sur le forum nabaztag de forumactif, et je vois que tu as bien avancé !

    J’ai un nabaztag:tag, que je souhaitais utilisé principalement en utilisation domotique : tts pour annonces vocales et RFID pour la présence et autre (via envoi de requête http). Est-ce vers cela que tu penses te tourner ?
    Quand je vois le travail que tu as fait sur la zibase et sur l’interaction zibase/Karotz je te fais confiance 😉

    Dernière question, sur le karotz cette fois ci, je suis intéressé pour en prendre un, mais est il toujours aussi dépendant des serveurs, ou pourrait il avoir une partie autonome/sur serveur local (pour la camera/rfid/tts notamment) ?

    Merci encore !

  2. Merci beaucoup pour cet article très clair !
    J’ai suivi tes avancées sur le forum nabaztag de forumactif, et je vois que tu as bien avancé !

    J’ai un nabaztag:tag, que je souhaitais utilisé principalement en utilisation domotique : tts pour annonces vocales et RFID pour la présence et autre (via envoi de requête http). Est-ce vers cela que tu penses te tourner ?

    C’est effectivement vers cela que je me dirige. Un Nabaztag le plus autonome possible, et communiquant sur le réseau local.

    Quand je vois le travail que tu as fait sur la zibase et sur l’interaction zibase/Karotz je te fais confiance

    Merci, ça fait plaisir 😉

    Dernière question, sur le karotz cette fois ci, je suis intéressé pour en prendre un, mais est il toujours aussi dépendant des serveurs, ou pourrait il avoir une partie autonome/sur serveur local (pour la camera/rfid/tts notamment) ?

    En fait, le Karotz utilise le serveur pour installer des applications, et pour le TTS. Pour tout le reste, les applications s’exécute directement sur le Karotz, donc indépendant des serveurs.

    Il n’y a pas de ping ou de communication permanente avec les serveurs, donc ça demande beaucoup moins de ressource que Nabaztag. Pour ce qui est du TTS, ont pourrait aussi se passer des serveurs Karotz. Utiliser par exemple le TTS google, ou d’autres TTS dispo sur le net. Le seul point vraiment critique est l’installation d’application. Si le site Karotz vennait à disparaitre, pour l’instant, il n’y a pas de solution pour installer une application sur le Karotz…

    Merci encore !

    De rien, avec plaisir 🙂 !

  3. Bonjour,

    Je pense que le principal reproche qui est fait à Mindscape n’est pas l’arrêt des serveurs mais bien autre chose :
    – il y avait un plan de continuité de service qui était en train d’être développé, certaines personnes (Nabazland) ont vraiment oeuvré, trouvé des fonds et des solutions… il ne manquait plus qu’une réaction de Mindscape qui avait pourtant était sollicité (avant le mail du forum) … Mais une réponse (non complète) 12h avant la coupure de service c’est trop peu donc nous avons connu la coupure service.
    – La libération des sources c’est bien, 1 semaine avant la coupure : bien trop tard ! Même si les développeurs ne se sont pas basés dessus, ils s’en sont aidés (ou auraient pu) … il aurait au moins fallu, à mon sens, un bon mois (voir 2) de délai entre annonce + libération et coupure de service.

    Voila donc en effet, la libération des sources est plutôt bien, la méthode par contre très limite ! C’est cela que beaucoup de monde reproche à Mindscape.

    Mais ça reste à l’effigie de leur travail et communication sur Krotz ! (Bon travail selon les utilisateurs, communication pas bonne !)

    • Salut Phabbrrysse, et merci d’avoir pris le temps de mettre un petit commentaire sur mon blog.

      Concernant le plan de reprise, effectivement, je pense que la solution était pas mal, mais un peu trop « Free » au gout de Mindscape à mon avis 🙂

      Je suis par contre tout à fait d’accord avec toi sur la durée avant la libération des sources !!! Je n’ai pas compris pourquoi Mindscape a attendu la dernière minute pour libérer le code … Peut être par manque de maitrise, en se disant qu’une publication des sources alors que le service était toujours en cours pourrait entrainer des piratages des serveurs … ?

      En tout cas, j’espère bientôt pouvoir donner plus d’info sur le serveur que je suis en train de mettre en place 😉 …

      A+

  4. Bonjour à tous,

    Je me joins à giantpopples pour te féliciter. 🙂

    Je te félicite pour tout d’ailleurs ! Tout ce que tu as fait concernant la zibase, le nabaztag et le karotz. Et aussi pour tout ce que tu as prévu ou pas encore imaginé.

    Je suis utilisateur de zibase et très récemment de nabaztag que je voulais utiliser avec ma zibase.
    A 25 € d’occasion je trouvais ca vraiment pas chers comme émetteur/récepteur à mettre dans mon entrée pour dire à ma zibase que je partais ou que je rentrai avec un retour d’état visuel ou sonore.
    Je suis visiblement arrivé un poil trop tard 😉

    Du coup, j’ai commandé un karotz à 79 € pour moi et je vais probablement en commander deux autres pour les enfants quand j’aurai testé le premier.

    Ma question est la suivante :
    Es-t-il possible d’utiliser mon lapin ressuscité avec la zibase via une appli ou es ce que tes amis de chez zodianet aurai prévu un petit firmware ou l’on pourrai choisir un serveur alternatif pour nos lapins.

    Vive les petits hommes verts in the dark.

    • Pour l’instant, je ne sais pas si c’est possible avec OpenJabNab, et l’API de wizz.cc (voir le forum nabaztag)

      C’est un des objectifs de la modification de Bytecode que j’ai commencé, mais cela demande pas mal de travail, et je manque de temps 🙁

      Zodianet n’a pas (à ma connaissance) prévu de travailler sur Karotz ou Nabaztag, c’est pour cela que j’ai collaboré avec eux, et que j’ai fait l’application Karotz pour la Zibase.

  5. La page de config de mon lapin est beaucoup plus simple et ne permet pas d’editer l’url du serveur, j’imagine que je dois avoir un vieux firmware 🙁

    Comment ou ou le mettre à jour svp ?

    Merci d’avance…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *