SARAH: modules avancés
Cet article fait suite à « Mon premier module » pour préciser des points de développement avancés.
Persister des données
S.A.R.A.H. utilise différentes mécaniques pour persister ses propres données ou les données fournies par les plugins.
Voici un article décrivant la persistance des données du framework.
Installer des librairies
Les NodeJS, PhantomJS, et ExpressJS installés sont complètement standard. Des librairies supplémentaires sont installées dans script/vendor/
:
cheerio
(pour parser du HTML)moment
(pour manipuler des dates)request
(pour envoyer des requêtes)
Ainsi que plusieurs librairies bas niveau pour envoyer des mails, parser du RSS, etc,…
Ajouter une librairie
- Créer un répertoire
plugins/{monplugin}/lib
- Ouvrir une commande DOS dans la release
- Faire
NodeJSnpm install {librarie}
- Copier le contenu du répertoire créé
node_modules
dansplugins/{monplugin}/lib
- Dans un plugin.js la librairie est maintenant dispo via require(‘./lib/{librarie}’)
Lancer un plugin
Une bonne pratique est de créer un plugin perso qui va utiliser et appeler des modules génériques: box domotique, service web, …
Cet appel pourra se faire via le moteur de règles ou directement depuis le code:
[crayon]
var lights = function(id, on, SARAH){
SARAH.run(‘eedomus’, { ‘periphId’ : id , ‘periphValue’ : (on?100:0), ‘quiet’ : true });
}
var scenario = function(state, callback, SARAH){
var tts = »;
if (state == 1){
lights(BUREAU, true, SARAH);
lights(SALON, true, SARAH);
tts = ‘Bonjour’;
}
else {
lights(BUREAU, false, SARAH);
lights(SALON, false, SARAH);
tts = ‘Aurevoir’;
}
callback({‘tts’: tts});
}
[/crayon]
Ces appels vont déclencher toute la mécanique du moteur de règles. Dans la version 2.9 il est possible de n’appeler QUE le script et récupérer sa réponse:
[crayon]
SARAH.call(‘eedomus’, { ‘periphId’ : LUMENS}, function(options){
var lum = options.json.last_value;
scenario(lum>50?1:0, callback, SARAH);
});
[/crayon]
Dans cet exemple le code appel le plugin Eedomus v2.0 pour obtenir l’état d’un capteur de luminosité afin de décider si il faut allumer ou éteindre les lampes.
Un peu d’IA
Voici deux articles expliquant comment utiliser les réseaux de neurones de la librairie brain.js
pour apprendre à SARAH des comportements.
Ouvrir une commande DOS dans la release (c’est quoi le release ?)
Faire NodeJSnpm install {librarie} (librarie correspond à quoi ?)
un exemple me sert fort utile je pense
Oh, au vu de ta question je crois que tu t’embarque dans une aventure compliquée…
– Le terme release désigne le dossier de l’application sarah
– En faisant Shift + Click Droit on peut ouvrir une fenêtre DOS directement à cet endroit
– Ce qui permet l’execution du programme NPM
– NPM est un outil de NodeJS en ligne de commande et un service qui permet d’aller chercher des librarie sur GitHub
– NodeJS est un serveur JavaScript qui permet d’exécuter du code, et donc ce code a parfois besoin de librairies « standard » que l’on va chercher via NPM
– Typiquement dans la v2.9 de SARAH j’ai rajouté xml2js une librairie permettant de parser du XML. Cela évite aux développeurs de plugins d’aller chercher cette libraries quand ils ont besoin de parser du XML
Bonjour !! Tout d’abord merci pour S.A.R.A.H !! Les capacités sont étonnantes !!!
Je cherche à créer un réveil intelligent à savoir :
Sarah me réveille, me donne l’état du trafic ferroviaire et allume une lampe branchée sur une prise télécommandé, via un raspberry.
j’ai déjà réalisé les scripts indépendants.
Un script « CRON » permet le réveil.
Un script « Phantom » permet de récupérer le trafic via commande vocale (plugin téléchargé).
Un script « module » permet de commander la lampe via une commande vocale.
J’ai cependant du mal à « mixer » les trois, en gros, un Cron qui récupère la météo et envoie une commande SSH.
Auriez-vous été confronté à une situation similaire ?
Cordialement,
Alors j’avais fais ça:
http://blog.encausse.net/2014/01/19/tutoriel-domotiser-la-chambre/
J’utilisais Google Calendar pour me réveiller a un temps T et ensuite explicitement SARAH.call(‘meteo’) ou via une règle IFTTT.
La fonction call prends un callback dans lequel il y a ce qu’a mis la meteo le tts et autre trucs
Super j’essaie ça dans la journée. Merci beaucoup pour votre réponse rapide !!!
Super, merci pour les explications.
J’aimerais juste savoir, comment ajouter un module NodeJS à SARAH?
J’ai rien dit, je suis étourdi c’est marqué en toutes lettres…