Jarvis vous permet de créer vos propres commandes.
Pour ce faire, sélectionner Commands
dans le menu principal pour ouvrir le fichier des commandes.
Voici à quoi il ressemble:
ANNULE*|TERMINE*==bypass=false; say "Ok"
*MERCI*==say "De rien"
*AIDE*==echo "$commands" | cut -d '=' -f 1 | pr -3 -l1 -t
*COMMENT*APPELLE*==say "Je m'appelle $trigger"
*BONJOUR*|*SALUT*==say "Bonjour $username"
*AU REVOIR*|*BYE*==say "Au revoir $username"; exit
*TEST*==say "Ca fonctionne!"
*VERSION*==say "Je suis en version 0.1"
*REPETE (*) ET (*)==say "(1) (2)"
*SENS*VIE*==say "42"
Initiez-vous à la domotique avec X10 & mochad sur Raspberry Pi ici
Avant le ==
se trouve une expression de l'ordre à reconnaitre:
- Utiliser
*
pour représenter n'importe quel mot - Utiliser
|
pour créer des alternatives - Utiliser
(*)
pour capturer du texte et le réutiliser avec(1)
dans la partie commande- Vous pouvez capturer plusieurs groupes et y faire référence avec
(1)
,(2)
,(3)
...
- Vous pouvez capturer plusieurs groupes et y faire référence avec
- Utiliser
>
pour créer des commandes imbriquées (voir plus bas)
Après le ==
se trouve la commande shell
à exécuter, vous pouvez aussi utiliser les variables et fonctions suivantes:
say
"Je vais dire ceci à voix haute"$trigger
: le nom deJARVIS
tel que défini dans Settings > General > Magic Word$username
: votre nom tel que défini dans Settings > General > Username$order
: l'ordre qui a été reconnu (ex: pour l'envoyer à un moteur de commandes externe)
Conseils
Il est très important de bien choisir les mots et l'emplacement des * dans vos patterns d'ordres.
Voici quelques conseils:
- Utilisez des mots discriminants, évitez les mots trop courts et trop simples
- Utilisez des
*
à la fin des mots afin de matcher leur différents déclinaisons
ex:OUVR* PORTE*
matchera "Ouvrir la porte" et "Ouvrez la porte" et "Ouvre la poste s'il te plait" - Les ordres du fichier de commandes sont évalués de haut en bas, mettez les patterns les moins discriminant en dessous
ex:OUVR*PORTE*GARAGE
doit être placé avantOUVR*PORTE*
dans le fichier de commandes, sinon il sera "masqué" par ce dernier - Enfin, si vous utilisez une commande "forward all" (ex:
*==...
), elle doit être placée tout en bas du fichier, sinon les autres commandes seront "masquées"
Envoyer des requêtes HTTP
*ALLUME*LAMPE*==say "Ok" && jv_curl "http://192.168.1.1/home.php?action=turnon&device=lampe"
Vous pouvez aussi faire dire à Jarvis la réponse d'une requête HTTP:
*QUELLE*TEMPERATURE*==say "La température est de $(curl -s "http://192.168.1.1/home.php?action=get&device=temperature") degrés"
SI vous avez besoin de parser du JSON, vous pouvez le faire grâce à jq qui est une dépendance de Jarvis
*QUELLE*TEMPERATURE*==say "La température est de $(curl -s "http://192.168.1.1/home.php?action=info&device=salon" | jq -r '.result.temp') degrés"
Plus d'information sur jv_curl
et les autres fonctions & variables de Jarvis sont disponible dans la référence API Publique.
Donner plusieurs ordres en une fois
Vous pouvez aussi donner plusieurs ordres en une fois comme par exemple éteindre la lumière et demander l'heure.
Il suffit de configurer votre séparateur de commandes dans:
Settings > General > Multi-command separator
Par défaut il est vide (désactivé), renseignez le par exemple avec puis
ou ensuite
.
Vous pourrez alors:
Alex: allume la lumière puis quelle heure est-il
Jarvis: C'est fait
Jarvis: Il est 21:54
Commandes imbriquées
Jarvis peut répondre à une ordre par une succession de questions, afin de construire et d'exécuter des commandes complexes.
Vous devez pour cela indenter les commandes avec le caractère >
comme s'il s'agissant d'une discussion par email, par exemple:
*CA VA*==say "très bien et toi?"
>*OUI*==say "ravi de l'entendre"
>*NON*==say "j'en suis navré, dois-je te laisser tranquille?"
>>*OUI*==say "Au revoir $username"; exit
>>*NON*==say "Ok je reste"
Vous permettra la discussion suivante:
Alex: ca va
jarvis: très bien et toi?
Alex: pas trop non
jarvis: j'en suis navré, dois-je te laisser tranquille?
Alex: non ça va
jarvis: Ok je reste
Cela peut s'avérer utile pour certaines commandes complexes:
AJOUTE A LA LISTE DE COURSE*==say "que dois-je ajouter à la liste de courses?"
>(*)==./add_to_list "(1)" && say "Ok"
Ce qui donnera:
Alex: Ajoute à la liste de courses
Jarvis: que dois-je ajouter à la liste de courses?
Alex: Du pain
Jarvis: Ok
Quoi-que vous pourriez aussi le faire en une seule commande:
AJOUTE (*) A LA LISTE DE COURSE*==./add_to_list "(1)" && say "Ok"
Ce qui donnera:
Alex: Ajoute du pain à la liste de courses
Jarvis: Ok
Commentaires
Vous pouvez temporairement désactiver une commande en la préfixant du caractère #:
#*TEST*==say "Ca fonctionne"