Projet xPL-pyHAL, un cerveau xPL, Episode 2 : Alpha Release

Des nouvelles de mon projet de moteur central xPL, xPL-PyHAL dont je vous avez parlé précédemment.

Après plusieurs mois, je suis plutôt pas peu fier de vous présenter la première version Alpha :D

Cette version est dès à présent téléchargeable sur :

http://code.google.com/p/guiguiabloc/downloads/detail?name=xPL-PyHAL-alpha-0.1.tgz

Bien évidemment, comme toute version Alpha, elle doit subir son baptême du feu, et c’est pour cela que je vous la propose.

Je l’utilise au quotidien sans incidents mais forcément, elle est très lié à mon environnement et je ne sais donc pas comment elle se comportera ailleurs, c’est pour cela que vous êtes grandement invité à me remonter tout les bugs/remarques éventuels via la partie « Issues » de GoogleCode (cela me facilitera la tâche ;) )

C’est un premier jet (sans jeu de mot, je vous connais hein !!!), des possibilités que je veux donner a xPL-PyHAL.
Le mieux est donc de le tester et de me faire savoir ce que vous attendez d’un centralisateur xPL de ce type.

Le plus dur dans un développement n’est pas de le réaliser mais plutôt de l’expliquer. Je vais donc, dans ce billet, détailler le fonctionnement d’xPL-PyHAL et de ses classes/modules.

xPL-PyHAL, le centralisateur xPL

xPL-PyHAL est un programme qui se greffe à votre bus xPL et écoute en permanence les messages qui y transitent.

Son rôle est d’éxécuter une action pour un module que vous allez définir dans un fichier texte tout simple quand il verra passer un message xPL lié a ce module.

Les ordres sont à déposer dans le répertoire « yamlrepo » sous la forme de fichier YAML.
Le fichier doit porter l’extension « .yaml ».

Exemple d’application :
Je souhaite allumer le relais 1 du boîtier ipx800 quand j’appuie sur l’interrupteur CHACON.
Il s’agit d’un ordre de type « HomeEasy » (schéma homeeasy.basic) à destination du client xPL-ipx800.

Le fichier YAML aura la forme suivante (interrupteur.yaml) :

ACTION: command
MODULE: "0x4b92ba"
UNIT: "9"
TARGETXPL: "ipx800"
TARGETMODULE: 2

ACTION : c’est une commande à exécuter
MODULE: le module qui initie l’ordre (ici l’adresse de l’interrupteur CHACON)
UNIT : l’unité de l’interrupteur
TARGETXPL : le client xPL qui doit exécuter l’ordre (ici le client xPL-ipx800)
TARGETMODULE: le relais cible a commander sur l’ipx800

Autre exemple, en appuyant sur l’interrupteur, je veux allumer une lampe x10 référencée comme module A2.
Le fichier interrupteur.yaml contiendra les valeurs suivantes:

ACTION: command
MODULE: "0x54cd16"
UNIT: "10"
TARGETXPL: "heyu"
TARGETMODULE: a2

Description  et configuration possible

Une fois le fichier xPL-PyHAL.tgz décompressé, vous trouverez différentes classes et modules python dont je vais détailler le rôle.

  • xPL-PyHAL.py

Il s’agit de l’executable qui lancera le centralisateur xPL-PyHAL.

- Configuration : Aucune

A lancer depuis le répertoire du centralisateur :

python xPL-PyHAL start (lance le démon)

python xPL-PyHAL stop (arrête le démon)

python xPL-PyHAL console (lance le programme dans la console sans le démoniser. CTRL-C pour l’arrêter)

  • BrainPyHAL.py

Le programme principal d’xPL-PyHAL.

- Configuration : Vous pouvez passer en mode debug (sortie dans le fichier logxplhal.log et dans la console si vous l’avez démarré dans ce mode)

# Debug : set True or False
debug = False

  • Daemon.py

Classe permettant de faire tourner xPL-PyHAL en tâche de fond (démon).

- Configuration : Aucune

  • Memcached.py

Classe permettant d’interagir avec un serveur Memcached

- Configuration :  l’adresse IP et le port du serveur Memcached (localhost:11211 par défaut)

def __init__(self, hostname="127.0.0.1", port="11211")
  • PushingBox.py

Classe permettant d’envoyer des notifications vers le service PushingBox

- Configuration : Aucune

  • xPLmessage.py

Classe pemettant de gérer les messages xPL

- Configuration : Aucune

Les fichiers de configuration YAML

Les actions qui doivent être exécutées par xPL-PyHAL doivent être déposées dans le répertoire « yamlrepo ».

Le fichier texte doit avoir l’extension .yaml

Il contient les entrées suivantes :

- L’action à réaliser (au choix)

ACTION : message | store |  command |  log

message : envoie une notification

store : stocke une valeur quelque part

command : execute un ordre xPL

log : écrit dans un fichier log

- l’adresse du module qui déclenchera l’action

MODULE: « xxxxxxx »

- l’unité du module qui déclenchera l’action (si applicable)

UNIT: « x »

- La cible qui doit être commandée

TARGETXPL: « xxxxx »

Vous trouverz des exemples dans le répertoire yamlrepo (extension .sample et dans le fichier YAML.FORMAT)

Quelques exemples :

- Stocker une valeur « alertemode » avec la clé « on » pendant 60 secondes dans un serveur Memcached quand le module « 0x4b99bb », unité 9 se déclenche

ACTION: store
TARGETXPL: memcached
MODULE: "0x4b99bb"
UNIT: "9"
KEY: "alertemode"
VALUE: "on"
TIME: "60" (défaut 900)

- Envoyer une notification PushingBox quand le module « 0x4b99bb’ », unité 9, se déclenche

ACTION: message
TARGETXPL: pushingbox
MODULE: "0x4b99bb"
UNIT: "9"
KEY: "v9999AAAAEEEE4"

J’espère que les exemples fournis vous aideront à créer vos propres fichiers YAML. Bien sûr, il peut y avoir plusieurs fichiers YAML pour un même module.

La prise en compte se fait à chaud, inutile de relancer le démon xPL-PyHAL.

Voila pour une explication succincte d’xPL-PyHAL.

Je n’intercepte pas encore toutes les erreurs possibles, donc n’hésitez pas à me remonter les crashs éventuels avec le maximum d’information possible :)

Amusez-vous bien :D

Ce billet a été posté dans domotique et taggé , , . Bookmark ce permalink.

8 commentaires sur “Projet xPL-pyHAL, un cerveau xPL, Episode 2 : Alpha Release

  1. J’ai posté un lien vers ton site sur le forum xPL, je pense qu’il va falloir penser à traduire en anglais :-)

  2. ahan merci clinique :D
    C’est vrai que la traduction est dans ma TODO list :/ faut que je m’y colle.
    (les grand esprits se rencontrent, je parlais de toi a l’instant sur le fofo toute la domotique :p )

  3. Bonjour,

    Je tiens d’abord à vous féliciter pour ce travail.
    Ensuite j’aimerai vous posez quelques questions, car j’aimerai également me lancer dans l’aventure du développement XPL, cependant après avoir survoler votre code (dans les grandes lignes :p), je ne comprends pas quelque chose :

    Comment contrôle-t-on des périphériques autres que ceux associé aux 2 plugins : heyu et IPX800.

    Typiquement si j’ai un device autre avec interface xpl, comment puis-je faire des scripts (YAML) pour le commander depuis votre application ?

    N’hésitez pas à me corriger si je me trompe, car j’essaye de comprendre le fonctionnement de l’architecture xPL, mais j’ai du mal à saisir le principe d’universalité avec les vendor plugins : http://xplproject.org.uk/plugins.php dont les liens ne marchent plus d’ailleurs …

    Merci d’avance, et bonne soirée

  4. Tout d’abord merci :) C’est toujours très agréable :D
    Je donnais des exemples heyu et ipx800 parce qu’ils sont déjà codés pour l’instant (comme notifry, pushingbox, les scripts).
    Avez-vous un exemple de plugin que vous souhaitez utiliser ? (tout n’est pas encore écrit, c’est pour cela que je demande l’aide de tous pour faire évoluer xPL-PyHAL).

    L’universalité d’xPL vient du fait que les messages sont tous d’un format pré-définis suivant un schéma précis.
    C’est grace a cela que l’on peut interagir avec les différents modules xPL.
    Un message de type « homeeasy.basic » (pour un device CHAON par exemple) contient des champs précis qu’il est possible de traiter.
    N’hésitez pas à me donner un exemple précis de ce que vous souhaitez faire et on trouvera la solution ;)

  5. Bonjour,

    Bravo pour ce développement qui sans fioritures va à l’essentiel. En effet je suis toujours à la recherche du cerveau de mon installation domestique (à base de RFXCOM LAN + Oregon + Chacon). J’ai donc installé votre outil mais je bute tout de suite sur un trigger non reconnu. Il provient d’une télécommande DI-O, voici la ligne vue dans le xpl-logger:
    192.168.0.12:40260 [xpl-trig/ac.basic: rfxcom-lan.0004a31f62aa -> * 0x04fbc12/0/on]

    Et dans le debug de xPL-pyHAL:
    [2012-Jun-03 17:33:53] Unknown xpl-trig schema. Not implemented

    Est-ce que le schéma ac.basic est réellement manquant dans votre outil où est-ce que quelque chose cloche dans ma config ?

    Voici l’action que je tente d’exécuter suite à l’appui sur la télécommande:

    ACTION: script
    MODULE: « 0x04fbc12″
    UNIT: « 0″
    COMMAND: « on »
    SCRIPTNAME : « /opt/local/bin/pushmeto »

    Merci pour votre réponse.
    Marc

  6. Je me réponds à moi même …
    homeasy.basic et ac.basic me semblant extrêmement proches pour ne pas dire identiques, du coup j’ai eu l’idée de remplacer dans BrainPyHAL.py la ligne:
    elif self.schema == « homeeasy.basic »:
    par
    elif self.schema == « homeeasy.basic » or self.schema == « ac.basic »:
    Et ça fonctionne !
    Merci en tout cas pour l’outil, je vais pouvoir tester quelques idées de scénario simples.

  7. Bonjour Marc,
    Merci pour ce retour. Effectivement le remplacement du schéma état la solution ;) .
    Je ne connaissais pas le schéma ac.basic et il ne semble pas être dans la liste du projet xPL :/
    Pouvez vous me donner le format de message envoyé en xPL par votre télécomande (passer BrainPyHAL en mode debug = True et récuperer le fichier logxplhal.log)?
    Je l’implementerais en plus de homeeasy dans ce cas :)

  8. Marrant, votre projet ressemble étrangement au mien, mais plus avancé puisque déjà en alpha, alors que je cache honteusement le mien faute de temps pour le releaser.
    Ça et le fait qu’il soit en Perl :)

    En tout cas bonne continuation, il y a besoin d’avancées en domotique libre simple et efficace, les interfaces graphiques ayant tendance à rendre très lourde la partie configuration finalement.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>