Jarvis
Jarvis is our IRC bot to handle most of our internal management. Its source code is available on our Git repo or on Github. Please refer to these repos for more infos on the way it works. Since the rest of this page is basically a user manual for our members, it will be written in French.
Jarvis est notre bot IRC pour gérer tout notre fonctionnement interne. Il permet notamment d'ajouter des nouvelles factures au budget, de gérer les emprunts, et de surveiller l'hack'ave. Toutes les infos données à Jarvis sont présentées sur sa visu web.
Le code est disponible sur notre dépôt Git ou Github.
Fonctions
[…] désigne un argument optionnel, (…|…) désigne un choix obligatoire.
Commandes directes
Toutes les commandes doivent être adressées à Jarvis directement, en les préfixant par jarvis:
.
aide
- Usage :
aide [commande]
- Affiche l'aide de Jarvis ou de la commande passée en argument.
alias
- Usage :
alias [categorie]
oualias add type nom valeur
oualias del type nom
. - Liste tous les alias enregistrés (respectivement, ceux de la catégorie passée en argument) ou ajoute un nouvel alias
nom
associé àvaleur
(JSON encoded) pour la catégorietype
ou supprime l'aliasnom
de typetype
.
atx
- Usage :
atx (on|off)
- Contrôle l'ATX de la RepRap.
budget
- Usage :
budget (ajoute|retire) [dépense|crédit] montant [budget=BUDGET] commentaire
. ajoute
ajoute une entrée,retire
retire une entrée.dépense
etcrédit
sont optionnels. S'ils ne sont pas spécifiés, il faut rentrer un montant algébrique.budget=BUDGET
est optionnel. Si non spécifié, l'entrée du budget va sur le budget de l'année en cours. Sinon, elle va sur le budgetBUDGET
.
camera
- Usage :
camera (ALIAS|ANGLE)
- Contrôle la position de la caméra, pour déplacer la caméra à la position définie par l'alias
ALIAS
ou par l'angleANGLE
en dégrés.
courses
- Usage :
courses (acheter|annuler|acheté) item [commentaire]
- Note l'objet
item
comme à acheter/acheté ou le supprime de la liste de courses (annuler
). Possibilité de rajouter un commentaire optionnel.
dis
- Usage :
dis "quelque chose"
- Fait parler Jarvis.
disclaimer
- Usage :
disclaimer
- Affiche un disclaimer.
emprunt
- Usage :
emprunt outil "jj/mm hh" [email]
- Note l'objet
outil
comme emprunté jusqu'à la datejj/mm hh
. Si l'utilisateur n'est pas sur IRC, une adresse e-mail peut être spécifiée, pour lui renvoyer un rappel par email.
historique
- Usage :
historique nb_lignes|(début fin)
- Affiche l'historique des commandes envoyées à Jarvis. Affiche les
nb_lignes
dernière lignes, ou entrestart
etend
.
info
- Usage :
info [atx|camera|leds|stream]
- Affiche le statut de tous les périphériques (respectivement uniquement de l'atx / de la caméra / de la lumière / du stream).
jeu
- Usage :
jeu
- Auto-explicatif…
lien
- Usage :
lien (dernier|((supprime|cache|affiche) [id|permalien])
lien dernier
retourne le dernier lien enregistré.lien (supprime|cache|affiche) [id|permalien]
supprime / marque comme privé / rend public le dernier lien (si pas de paramètre[id|permalien]
spécifié, ou le lien d'idid
(respectivement de permalienpermalien
).
log
- Usage :
log début ... fin #tag
. - Enregistre la section délimitée par
début...fin
dans Jarvis, sous le tagtag
.
lumiere
- Usage :
lumiere ((R G B)|script)
- Contrôle la lumière associée à Jarvis, soit en la mettant à la couleur
(R G B)
, soit en appelant le scriptscript
.
moderation
- Usage :
moderation [liste]
- TODO
retour
- Usage :
retour outil [email]
- Marque l'outil
outil
emprunté comme retourné.
stream
- Usage :
stream (on|off)
- Lance ou arrête la diffusion de la caméra.
update
- Usage :
update
- Met à jour Jarvis.
version
- Usage :
version
- Affiche les notes de version.
Liens
Jarvis surveille le chan #hackens
et ajoute stocke automatiquement tous les liens postés dessus pour les afficher sur sa visu web. Pour ne pas diffuser un lien, il faut alors utiliser la commande lien
.
Maintenance
Jarvis tourne sur un Raspberry Pi en cave. Pour y accéder, il suffit de ssh jarvis@jarvis
sur le réseau de l'hack'ave. La distribution est une Raspbian allégée et modifiée, pour gérer tout ce dont on a besoin, dont Python 3. Toute la configuration de Jarvis se fait dans le fichier ~/Jarvis/config.py
et la documentation sur le dépôt devrait répondre à la plupart des questions.
Caméra
Voir le fichier ~/servo.py
pour un exemple.
Les infos des numéros des pins sont (par exemple) sur http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/turing-machine/two.html
Attention, l'alim de Jarvis n'est pas suffisante pour les servos qu'on a, et il faut donc utiliser une alimentation externe. L'alim ATX n'est probablement pas une bonne idée.
Servos pour Jarvis Celui du haut et celui du bas sont identiques mais ne reagissent pas pareil. Servo du haut : position en angle, entre 40 et 180 exemple : angle = 60 duty = float(angle) / 10.0 + 2.5 pwm.ChangeDutyCycle(duty) Servo du bas : en vitesse ? pour le faire tourner dans un sens : pin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(pin, GPIO.OUT) pwm = GPIO.PWM(pin, 100) pwm.start(50) angle = 43 duty = float(angle) / 10.0 + 2.5 pwm.ChangeDutyCycle(duty) dans l'autre sens : pin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(pin, GPIO.OUT) pwm = GPIO.PWM(pin, 100) pwm.start(50) angle = 43 duty = float(angle) / 10.0 + 2.5 pwm.ChangeDutyCycle(duty) dans l'autre sens : pin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(pin, GPIO.OUT) pwm = GPIO.PWM(pin, 100) pwm.start(50) angle = 86 duty = float(angle) / 10.0 + 2.5 pwm.ChangeDutyCycle(duty)
Flux vidéo
TODO : Ceci est un dump rapide de ce que j'ai fait, à nettoyer !
Je tente de suivre les instructions de http://www.tmplab.org/wiki/index.php/Streaming_Video_With_RaspberryPi . La première étape est de compiler ffmpeg pour le raspi, j'ai suivi les instructions de https://trac.ffmpeg.org/wiki/CompilationGuide/RaspberryPi en adaptant un peu. Quelques points importants : - Raspbian a probablement une vieille version d'eglibc, pensez à vérifier et à ne pas prendre une version plus récente dans ct-ng ! - L'utilisation de l'option pour activer les features expérimentales n'a pas été nécessaire - Je n'ai compilé ffmpeg qu'avec le support x264 (mais pas alsa etc.) car on veut seulement la vidéo et c'était donc plus simple (et plus rapide)
Ensuite on a un sshfs avec autossh (cf http://wiki.gentoo.org/wiki/Autossh) qui synchronise avec hack.ens.fr. On utilise la commande :
raspivid -ih -pf baseline -t 0 -b 1000000 -w 1280 -h 720 -v -o - | ./bin/ffmpeg -i - -strict -2 -codec:v copy -f ssegment -segment_list stream/cave.m3u8 -segment_list_type hls -segment_list_size 10 -segment_list_flags +live -segment_time 6 -segment_wrap 10 stream/cave%03d.ts
pour la segmentation.
Il faudrait avoir des commandes sur le bot IRC pour activer / désactiver tout ça !