Commandes

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)...
  • 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 de JARVIS 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é avant OUVR*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"

Voir aussi: Évènements déclencheurs