Zipabox et NodeJS

nodejs-zipabox

08 juin Zipabox et NodeJS

NodeJS est le coeur de ma télécommande multimédia. Il permet de commander les différentes sources vidéo/audio (ampli, vidéoprojecteur, squeezebox, etc…). Afin de gérer l’éclairage, une liaison Zipabox NodeJS est mise en place.

Je ne reviens pas sur la méthode d’installation de nodejs sur un raspberry pi.

Installer le module zipabox pour nodejs

Dans le répertoire du projet :

npm install zipabox

 Connexion avec la Zipabox

var zipabox = require("zipabox");

zipabox.username = "zipaboxlogin";
zipabox.password = "zipaboxpassword";
zipabox.SetLocalIP("zipaboxip");

zipabox.showlog = false;
zipabox.checkforupdate_auto = true;

zipabox.Connect();

ligne 1 : déclaration du module
ligne 3 et 4 : saisie des identifiants Zipabox (email et mot de passe)
ligne 5 : Optionnelle, à utiliser si l’on souhaite une connexion locale à la Zipabox
ligne 7 : affiche les logs
ligne  8 : à redéfinir (pris à l’identique de l’exemple)
ligne 10 : activation de la connection

Les évènements Zipabox dans NodeJS

NodeJS étant asynchrone, tous les événements vont se gérer sous forme de fonction.

Mon objectif n’est pas de reprendre tout les événements, mais d’en comprendre le principe et de détailler ceux m’étant pertinent.

OnBeforeConnect

Cet événement est appelé avant chaque connexion à la Zipabox

zipabox.events.OnBeforeConnect = function(){

}

Dans le cadre de ma télécommande, je souhaite pousser à l’application cliente l’état des connexions (Zipabox, XBMC, SqueezeBox…). Il est donc possible de profiter de cet événement pour indiquer l’absence de connexion à la zipabox.

mysqlobj.query("UPDATE info SET etatinfo='processing' WHERE libinfo='connexion_zipabox'");
etatconnection.zipabox = 'off';
io.sockets.emit('EtatConnection', etatconnection);

Ligne 1 : sauvegarde dans la base MySQL de l’état de la connexion
Ligne 2 : Mise à jour de l’objet global d’état des connexions. (un delta entre la précision de la base de donnée et l’application cliente me pousse pour le moment à cet ordre)
ligne 3 : envoi à tout les applications clientes de l’état de l’ensemble des connexions.

OnAfterConnect

Cet événement est appelé après connexion réussie avec la Zipabox

zipabox.events.OnAfterConnect = function(){
mysqlobj.query("UPDATE info SET etatinfo='true' WHERE libinfo='connexion_zipabox'");
etatconnection.zipabox = 'on';
io.sockets.emit('EtatConnection', etatconnection);
zipabox.LoadDevices();
}

ligne 2 à 4 : même principe que précédemment donc je ne détail pas
ligne 5 : Envoi une demande à la Zipabox de lister l’ensemble de ses devices. Cette fonction est à exécuter à minima une fois avant toute commande de device afin de les référencer.

 Modifier la valeur d’un device

Pour agir sur la valeur d’un device de la Zipabox, il faut utiliser la fonction suivante :

zipabox.SetDeviceValue([uuid],[attribute],[value],[optionnal]ON_SUCCESS,[optionnal]ON_ERROR,[optionnal]ON_AFTERSETDEVICEVALUE);

Attention : l’uuid à renseigner n’est pas celui du device dans l’interface de la Zipabox. Mais celui retourné dans suite à la commande « zipabox.LoadDevices() »

Exemple pratique sur un évènement XBMC d’arrêt de lecture :

 xbmcApi.on('api:playerStopped', function(details) {
   zipabox.SetDeviceValue("808b32cb-bcc3-50b0ad36170b",8,100,
      function(msg){ //ON_SUCCESS
         console.log("stop Allumer lumiere");
},
      function(err){ //ON_ERROR
         console.log("Stop allumer luniere echec");
});
});

Ligne 1 : évènement xbmc d’arrêt de lecture
Ligne 2 : fonction de demande d’allumer la prise  100
Ligne 3 et 4 :  action si la fonction se passe bien (affichage message dans la console
Ligne 6 et 7 :  action si la fonction ne se passe pas bien (affichage message dans la console

Ainsi lorsque l’on arrête la diffusion d’un film, la lumière de la pièce s’allume automatiquement. Fonctionnement possible sur pause, lecture mais cela fera l’objet d’un autre post sur nodejs et xbmc.

Comme à mon habitude, ce post est une note. Il peut évoluer et sera mis à jours en fonction de mes besoins…

Guide d’achat

51TsKlRlZNL._SL110_ ZIPATO Contrôleur domotique Z-Wave ZipaBox
Be Sociable, Share!
No Comments

Sorry, the comment form is closed at this time.