Domotiser la chambre
L’objectif de cet article est de présenter comment connecter et domotiser une chambre à SARAH.
- Philips HUE: luminosité
- Philips HUE: levé de soleil
- Planification: Google Calendar
- Eedomus: détection de présence
- Multiroom: faire parler SARAH dans la chambre
- Message d’accueil
[mom_video type= »youtube » id= »Zas05x9zNMU »]
Ce ne sont que des idées ! Nos besoins domotiques sont tous différents, laissez libre cours à votre imagination en vous inspirant de ce billet.
Plugin HUE: luminosité
La première étape consiste à utiliser le plugin HUE pour piloter les lampes en faisant varier la luminosité.
[crayon]
var timeout = 1000 * 60;
exports.action = function(data, callback, config, SARAH){
sunset(0, SARAH)
callback({});
}
var sunset = function(counter, SARAH){
var bri = counter * 20;
if (bri > 255) return;
SARAH.call(‘hue’, { ‘rgb’: ‘FE7518’, ‘on’: ‘true’, ‘bri’: bri });
setTimeout(function(){ sunset(counter+1, SARAH); }, timeout);
}
[/crayon]
La fonction sunset()
est appelée récursivement en augmentant la luminosité de 20 toutes les 60s jusqu’à dépasser 255.
Philips HUE: levé de soleil
Etape suivante, on modifie la fonction sunset()
pour faire varier les couleurs.
[crayon]
var cc = require(‘../hue/lib/colorconverter’).cc;
var steps = 6;
var timeout = 1000 * 60;
var rainbow = [‘230F51’, ‘FD0E67’, ‘FE5B35’, ‘FE7518’, ‘FFCCAA’];
var sunset = function(counter, SARAH){
var step = Math.floor(counter % steps);
var index = Math.floor(counter / steps);
if (index+1 >= rainbow.length){ return; }
var rgb1 = cc.hexStringToRgb(rainbow[index]);
var rgb2 = cc.hexStringToRgb(rainbow[index+1]);
var rgb = {
r: rgb1.r + (rgb2.r-rgb1.r) / (steps-step),
g: rgb1.g + (rgb2.g-rgb1.g) / (steps-step),
b: rgb1.b + (rgb2.b-rgb1.b) / (steps-step)
}
var total = steps * (rainbow.length-1)
var bri = (255 / total) * (counter+1);
var color = cc.rgbToHexString(rgb);
SARAH.call(‘hue’, { ‘on’: ‘true’, ‘bri’: Math.round(bri), ‘rgb’: color });
setTimeout(function(){ sunset(counter+1, SARAH); }, timeout);
}
[/crayon]
Explication: Le tableau rainbow
contient les couleurs. On calcul step
(6) transition d’une couleur à l’autre. Chaque appel est fait toutes les timeout
(1 minute). Ce qui fait un réveil en 6 x 4 = 24 minutes.
Note: Le code s’applique à toutes les lampes. Pour le restreindre à certaines lampes il faut préciser le numéro.
[crayon]
SARAH.call(‘hue’, { ‘on’: ‘true’, ‘bri’: Math.round(bri), ‘rgb1’: color, ‘rgb3’: color });
[/crayon]
Planification: Google Calendar
Les plugins SARAH peuvent se tester depuis un navigateur web: http://127.0.0.1:8080/sarah/MonPlugin. Le plugin GoogleCalendar permet ensuite de les planifier:
Le champ « Lieu » doit contenir l’URL du plugin (en 127.0.0.1). Indiquer dans le champ rappel « 5 minutes » comme marge de manoeuvre.
Eedomus: détection de présence
Pour allumer les lampes automatiquement il ne faut pas les couper du courant 😉 L’idée est d’utiliser un détecteur de présence pour allumer la lumière en cas de présence.
Eedomus
La première étape consiste à créer un Actionneur HTTP dans la box Eedomus:
Ensuite il faut déclarer le détecteur de mouvement. J’utilise un capteur EZ-Motion 3-1 pour avoir la température et la luminosité.
La box domotique envoie maintenant un requête HTTP à SARAH lors d’un mouvement ou absence de mouvement.
SARAH
Côté SARAH il ne reste plus qu’à piloter les HUE !
[crayon]
exports.action = function(data, callback, config, SARAH){
if (data.move){ movement(data.move, SARAH); }
if (data.sunset){ sunset(0, SARAH); }
callback({});
}
var movement = function(move, SARAH){
if (data.move == 0){
SARAH.speak(‘Plus de mouvements’, function(){
SARAH.call(‘hue’, { ‘on’: ‘false’, ‘rgb’: ‘000000’});
clearTimeout(clear);
});
}
else if (data.move == 1){
SARAH.speak(‘Mouvement détectés’, function(){
SARAH.call(‘hue’, { ‘on’: ‘true’, ‘rgb’: ‘FFCCAA’ });
clearTimeout(clear);
});
}
}
[/crayon]
La fonction clearTimeout()
stop l’appel récursif sunset()
. Penser à modifier le code précédent:
[crayon]
var clear = setTimeout( … )
[/crayon]
Note: Une amélioration possible serait d’ignorer les mouvements la nuit pour ne pas être réveillé en sursaut.
[crayon]
var now = new Date();
if (now.getHours() > 1 && now.getHours() < 8){ return; }
[/crayon]
Multiroom: faire parler SARAH dans la chambre
J’en avait parlé sur la communauté Google+, j’ai simplifié les choses en utilisant AirFoil couplé avec un Airport Express.
L’outil marche super bien, il y a juste un léger décalage ce qui donne l’impression que SARAH est moins réactive.
Message d’accueil
Maintenant que tout marche on peut imaginer jouer une petite musique de réveille tout en indiquant la météo, le trafic, etc … en utilisant les plugins de la communauté !
[crayon]
if (counter > total/2 && !playing){
playing = true;
SARAH.play(‘plugins/41Chambre/medias/02-cloud-surfer.mp3’);
}
[/crayon]
Et la météo:
[crayon]
if (counter > (total/3*2) && !speaking){
speaking = true;
SARAH.call(‘meteo’, { zip : ‘786460’, date : ‘0’ }, function(cb){
var moment = require(‘moment’); moment.lang(‘fr’); var now = moment();
SARAH.speak(‘Bonjour Jean-Philippe, nous sommes le ‘+now.format(‘dddd DD MMMM’)+’. Il est ‘+now.format(‘hh:mm’)+’. ‘+cb.tts+’. Bonne journée.’);
});
}
[/crayon]
Bon c’est fait à l’arrache mais vous comprenez le principe ! On pourrait imaginer décaler l »heure de réveil en fonction du trafic, etc …
Le plugin: http://marketplace.sarah.encausse.net/display?name=41Chambre
Au passage vous remarquerez tous les écrans qu’il faut passer sur la box eedomus pour dire à un capteur de mouvement d’envoyer une requête HTTP.
La box est très puissant et générique, mais effectivement à partir du moment on l’on fait des IHM ça rends les choses compliquées