Quantcast
Channel: Mindscape – ..:: Planète-Domotique : Le Blog ::..
Viewing all articles
Browse latest Browse all 4

Mindscape donne une seconde vie à Nabaztag !

$
0
0

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 :

https://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 https://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 !

Cet article Mindscape donne une seconde vie à Nabaztag ! est apparu en premier sur ..:: Planète-Domotique : Le Blog ::...


Viewing all articles
Browse latest Browse all 4

Latest Images

Trending Articles





Latest Images