samedi 2 juin 2012

Karotz Kmd - Kommand Line Interface


Objectif : Envoyer en direct des ordres simples au Karotz sans passer par la procédure normale de développement et d'installation d'applications (appz) sur le store Violet. Aussi simple que d'imprimer !

Un simple .exe qui s'exécute en mode console (ms-dos) et permet ainsi d'exécuter des tâches automatisées et/ou de lancer des batches (.bat)

Télécharger le Zip - version compilée pour .NET v3.5
Pour la version .NET v4.0 c'est celui-ci

Plateforme : Windows avec .NET v 3.5 installé. Pour vérifier la version du .NET installé sur votre PC, allez dans le répertoire C:\Windows\Microsoft.NET\Framework et vous devriez y découvrir (un ou) plusieurs dossiers nommés v1.0.x v1.1.x v2.0.x v3.0 v3.5 v4.0.x. Le mieux est quand même d'avoir la version v3.5 au minimum. Dans le cas contraire, se rendre sur le site de MS pour télécharger le .NET

  • Installation : Télécharger le zip puis extraire les 4 fichiers (kzkmd.exe + kzkmd.ini + kzkmd.txt + google.protocolbuffers.dll) dans un dossier (nommé ici KzKmd pour le tuto).
  • Configuration
KzKmd.ini à éditer (avec un notepad)
# Karotz Kommander Conf file
# http://Wizz.cc
#
# Find your ip on your Kz account manager.
# Go to http://www.karotz.com

Host=192.168.1.4
# Default Port : always set to 9123
Port=9123
#
Modifier la ligne host avec l'adresse ip lcoale de votre Karotz. Vous pouvez la trouver sur votre compte Karotz. Ensuite cliquer sur le picto réprésentant votre Kz pour y décourvir son IP, Adresse MAC et Pseudo. Le port de communication est toujours le (tcp) 9123.

KzKmd.txt contient les commandes à envoyer au Karotz.
# Commentaire
led 0000ff
play http://mp3.live.tv-radio.com/fip/all/fip-32k.mp3
#
pause 10
#
  • Utilisation 
En ligne de commandes ou en batch.

kzkmd.exe [-conf=file.ini] [-file=kmd.txt] [-host=192....] [-port=9123] [-debug]

Par défaut le fichier de configuration est kzkmd.ini et le fichier de commandes kzkmd.txt

Les paramètres -host et -port passés en ligne de commandes sont alors prioritaires sur ceux définis dans le fichier .ini

Ex: kzkmd.exe -debug -host=192.168.1.110

L'InteractiveId obtenu lors de la connexion au Karotz est sauvegardé dans le fichier KzKmd.pid

Vous pouvez ainsi le récupérer avec un autre programme externe du même genre pour communiquer avec la session active.

On pouvait penser aussi à fermer cette session par l'url fournie par l'Api Violet dans sa section Dév http://api.karotz.com/api/karotz/interactivemode?action=stop&interactiveid=3e910454-xxx mais non trop beau !..

vendredi 1 juin 2012

Nabaztag V2 : Plugs-in Java with Groovy


Objectif : Ecrire ses applications - plugs-in - en langage Groovy (dynamic language for the Java Virtual Machine) pour le nouveau serveur Violet www.nabaztag.com.

Le serveur Violet est écrit en Java et accepte désormais les modules additionnels écrits en Groovy. Cela permet la prolifération rapide d'applications très diverses pour tous les lapins rattachés à ce type de serveur.


  • Ma 1ère Appli : Télécharger l'exemple Radio Fip. Un projet Groovy pour le serveur Violet est un .zip qui contient toujours 3 fichiers : descriptor.json, icon.png et main.groovy.
descriptor.json : - un peu à l'image du descriptor pour le Karotz - contient les paramètres de l'application. A modifier à l'aide d'un simple éditeur de texte.

- La zone 'triggers' contient 'RFID', la seule possibilité de déclenchement de l'appz pour l'instant.
- La zone 'fields' contient des parmètres passés à l'application.
- La zone 'name' contient le nom de l'application et la zone 'description' peut recevoir une partie html qui s'affiche dans l'info-bulle lorsque l'utilisateur la survole.

icon.png : image qui apparait dans la liste des applications sur le serveur.

main.groovy : le corps de l'application en java.

- Importer les classes NabAlive :
import com.nabalive.application.core.ApplicationBase;
import com.nabalive.data.core.model.ApplicationConfig;
import com.nabalive.data.core.model.Nabaztag;
import com.nabalive.common.server.MessageService;

- Renommez la classe principale de manière unique. Ici public class RadioFIPApplication extends ApplicationBase .../...

- Chaque plug-in est identifié de manière unique par son guid - uuid. Il faut donc en générer un à chaque nouvelle appz - c'est souvent cet oubli qui génère un erreur à l'installion... Se rendre sur http://www.guidgenerator.com/ pour la génération d'un uuid et remplacer la valeur retournée par la fonction getApikey() par celle obtenue sur le site.

  • Mettre en ligne : uploader uniquement le .zip dans le répertoire des applications du serveur Violet.

Un autre exemple de plug-in : Voici.fr

jeudi 31 mai 2012

Nabaztag V1 : Kit serveur


Voici donc un premier kit pour monter un service web (php) de type ping pour les Nabaztag V1 (1ère génération) . Télécharger le Zip

Ce kit me permet de "gérer" actuellement 700 v1.

Pour améliorer le service et créer de nouveaux modules en fonction de vos besoisn, il faudra vous (re)plonger dans l'assembleur pour générer de nouveaux bytecodes. Sur le v1, les bytecodes sont chargeables/déchargeables à la volée pour des besoins ponctuels. Se rapprocher des sources Violet sur le Nabz v2 qui comprennent aussi une partie dédiée aux v1 avec des exemples de fichiers assembleurs (Violet\Serveurs\OS\net\violet\platform\vasm).

La doc d'origine de Violet sur l'assembleur du v1 est incluse dans le zip. Elle est aussi sur Google Drive.

Voir aussi le post sur le Boot du V1.

Tuto rapide :
  • Penser à mettre la redirection /vl/FR/p3.jsp vers le p3.php (dans le setup du v1, la première requête effectuée par le lapin est de la forme GET /vl/FR/p3.jsp?sn=00xxxxxxxxxx&ex=000000000000&v=20&st=00&tc=00000001 HTTP/1.0). La requête se fait sur l'ip du serveur (donc exit les serveurs mutualisés)... Pas de pb pour un serveur local.
  • Dans le fichier config.php, indiquer le chemin du répertoire de base : define('V1_BASE_DIR', '/full_path_to_www_root/');
  • Le coeur du service est le script p3.php (que vous pouvez d'ailleur renommer).
  • Je mets aussi à dispo ma classe php pour v1 qui facilite l'encodage des trames de bytecodes et le chargement à la volée des fichiers sons déjà au format adpcm.
  • Le plus galère, c'est le format des fichiers sons en adpcm (4bits). Je mets à dispo un utilitaire sous Win pour transformer des fichiers wav en adpcm2/4 bits (Convertisseur Wav2Adp). Voir aussi l'article de SpritesMods.com. Les fichiers convertis sont à stocker dans le rép sound. Pour convertir des mp3, les passer d'abord en wav (8ou16khz 8bits) avec un convertisseur standard puis ensuite en adpcm avec le prg joint. Le v1 sait aussi jouer les fichiers midi. On peut aussi se rapprocher de RedoX qui a ré-écrit un convertisseur en C.
  • Dans le rép conf, sont stockés les fichiers de configuration des Lapins, au cas où l'on déciderait de les personnaliser au travers d'un front-office.

Voir aussi le blog sur le boot du v1
Plus d'infos sur le forum Nabaztag.

lundi 2 janvier 2012

Karotz - Tips and Tricks

System

Tools & Links

La procédure d'installtion génère un fichier .zip contenant des fichiers de configuration  en fonction des paramètres suivants :
http://www.karotz.com/usbkey/karotzusb.zip?uuid=xxxx-yyyy-zzzz&installtype=wifi&usedhcp=1&ssid=TEST&password=test&lang=FRA&wifitype=auto&ipself=&netmask=&ipgateway=&ipdns=
http://www.karotz.com/usbkey/karotzusb.zip?uuid=xxxx-yyyy-zzzz&installtype=ethernet&usedhcp=0&lang=FRA&ipself=192.168.1.1&netmask=255.255.255.0&ipgateway=192.168.1.254&ipdns=82.125.42.65

Serial Konsole

  • On accède à la console série en branchant le Karotz au Pc par l'un de ses 2 ports usb - standard et mini - à l'arrière - le driver serial_gadget doit être présent sur le Pc. Le port Usb du Pc est ainsi mappé sur un port COMx en 9600+ bauds 8N1. Pour découvrir quel est le numéro du port com mappé, aller dans la config matérielle du pc pour lister les ports séries.

    Utiliser un émulateur terminal genre PuTTY et ouvrir une session en mode Serial.

    Les applications hébergées peuvent dialoguer avec le port série - cf le sdk javascript.
  • Quelques commandes de configuration - lecture / écriture - sont aussi disponibles. Les taper sous le format json suivant : {"cmd":"get_sys_version"}{"cmd":"get_mac"}{"cmd":"reboot"}. On pourra aisément ajouter de nouvelles commandes au système en modifiant les scripts python. Pour plus d'info voir config.py.

Mp3

  • Serveurs TTS : - method POST
[tts] - sans authentification préalable
fr = http://188.165.228.65/tts/Suzanne
en = http://188.165.228.64/tts/Katherine
de = http://188.165.228.64/tts/Alex
es = http://188.165.228.65/tts/Sara
  • Serveurs ASR
[asr]
server0 = 188.165.228.64
server1 = 188.165.228.65
port = 443
Un répertoire par langue contenant x fichiers mp3 : fr contient 304 fichiers - it 306 - ja-Jp 297 - br 298 - de 292 - es 306 - uk 300 - us 297. Sous dos, les charger avec la commande :
for /L %x in (1,1,304) do wget http://s3.amazonaws.com/karotz/moods/fr/%x.mp3

dimanche 1 janvier 2012

Karotz - Boot Process

Le Karotz est architecturé autour d'une carte Pragmatec ARM9 et d'un module 2440 sur lequel tourne un Linux 2.6.28. Pour le développement croisé voir le pdf ARM9 Dev Starter Kit.

Boot

  • whoami - root
  • mount
    rootfs on / type rootfs (rw)
    /dev/root on / type cramfs (ro)
    proc on /proc type proc (rw)
    none on /sys type sysfs (rw)
    ramfs on /var type ramfs (rw)
    none on /dev type tmpfs (rw,mode=755)
    /dev/uba1 on /mnt/usbkey type vfat
    (rw,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1)
    /dev/mtdblock6 on /usr type yaffs (rw)
    none on /dev/pts type devpts (rw,mode=622)
    tmpfs on /dev/shm type tmpfs (rw)
    usbfs on /proc/bus/usb type usbfs (rw)
  • cat /etc/inittab - ln /karotz/etc/inittab
    # Startup the system
    ::once:/karotz/scripts/karotz_init.sh
    ::respawn:/karotz/bin/power
    # Configuration programm
    ::once:/usr/scripts/miniusb_read.sh
    ::restart:/sbin/init
    #::askfirst:/bin/bash
    # Stuff to do before rebooting
    ::shutdown:/karotz/scripts/karotz_shutdown.sh
    ::shutdown:/bin/umount -a -r
  • ps
    PID USER COMMAND
    1 root /bin/sh /linuxrc
    2 root [kthreadd]
    3 root [ksoftirqd/0]
    4 root [watchdog/0]
    5 root [events/0]
    6 root [khelper]
    155 root [kblockd/0]
    166 root [khubd]
    169 root [kseriod]
    195 root [pdflush]
    196 root [pdflush]
    197 root [kswapd0]
    198 root [aio/0]
    199 root [nfsiod]
    886 root [scsi_tgtd/0]
    892 root [mtdblockd]
    893 root [nftld]
    894 root [inftld]
    923 root [s3c2410-spi.0]
    931 root [uwbd]
    944 root [wusbd]
    979 root [hid_compat]
    1020 root [rpciod/0]
    1067 root [rt73usb]
    1377 root /karotz/bin/led -l FFCFAF -p 000000 -d 1500
    1380 root /sbin/inetd /tmp/wizz_inetd_telnet.conf
    1346 root /sbin/inetd
    1382 root ps
  • cat /etc/group - ln /karotz/etc/group
    root:*:0:
    daemon:*:1:
    bin:*:2:
    sys:*:3:
    adm:*:4:
    tty:*:5:
    disk:*:6:
    lp:*:7:
    mail:*:8:
    news:*:9:
    uucp:*:10:
    kmem:*:15:
    dbus:x:81:
    ppp:x:99:
    nogroup:x:100:
  • cat /etc/passwd - ln /karotz/etc/passwd
    root:*:0:0:root:/usr/karotz:/bin/bash
    bin:*:1:1:bin:/bin:
    daemon:*:2:2:daemon:/sbin:
    nobody:*:99:99:Nobody:/:
    dbus:x:81:81:dbus:/var/run/dbus:/bin/sh
  • /bin/printenv
    KMOD=/lib/modules/
    TERM=linux
    k_nbclick=0
    LD_LIBRARY_PATH=/lib:/usr/lib
    AUTO_UPDATE=yes
    GST_REGISTRY_UPDATE=no
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:./
    GST_REGISTRY=/usr/karotz/registry
    devfs=udev
    PWD=/
    LANG=C
    SHLVL=1
    HOME=/
    WIZZ_HOME=/usr/karotz
    DISPLAY=unix:0.0
    _=/bin/printenv
  • /bin/busybox
    BusyBox v1.17.4 (2012-03-29 10:05:08 CEST) multi-call binary.
    Copyright (C) 1998-2009 Erik Andersen, Rob Landley, Denys Vlasenko
    and others. Licensed under GPLv2.
    See source distribution for full notice.

    Usage: busybox [function] [arguments]...
    or: function [arguments]...


    BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use and BusyBox will act like whatever it was invoked as.

    Currently defined functions: where are chpasswd and ftpd? ;-))...
    [, [[, addgroup, adduser, ar, arping, ash, awk, basename, bootchartd, bunzip2, bzcat, cat, catv, chattr, chgrp, chmod, chown, chroot, chrt, chvt, cksum, clear, cmp, cp, cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, devmem, df, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap, echo, egrep, eject, env, ether-wake, expr, false, fdflush, fdformat, fgconsole, fgrep, find, flock, fold, free, freeramdisk, fsck, fuser, getopt, getty, grep, gunzip, gzip, halt, hdparm, head, hexdump, hostid, hostname, hwclock, id, ifconfig, ifdown, ifup, inetd, init, insmod, install, ip, ipaddr, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kill, killall, killall5, klogd, last, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, losetup, ls, lsattr, lsmod, lspci, lsusb, lzcat, lzma, makedevs, md5sum, mdev, mesg, mkdir, mkfifo, mknod, mkswap, mktemp, modinfo, modprobe, more, mount, mountpoint, mt, mv, nameif, nc, netstat, nice, nohup, nslookup, od, openvt, passwd, patch, pidof, ping, pipe_progress, pivot_root, poweroff, printenv, printf, ps, pwd, rdate, readlink, readprofile, realpath, reboot, renice, reset, resize, rev, rm, rmdir, rmmod, route, run-parts, runlevel, sed, seq, setarch, setconsole, setkeycodes, setlogcons, setsid, sh, sha1sum, sha256sum, sha512sum, sleep, smemcap, sort, start-stop-daemon, strings, stty, su, sulogin, swapoff, swapon, switch_root, sync, sysctl, syslogd, tail, tar, tee, telnet, telnetd, test, tftp, time, top, touch, tr, traceroute, true, tty, udhcpc, umount, uname, uniq, unix2dos, unlzma, unxz, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs, xz, xzcat, yes, zcat