Virtual Clock : Un plug-in « Réveil » pour la Vera sous UI5

Je vous présente mon premier plugin pour la Vera. Celui-ci répond à un besoin assez simple, avoir un module qui fasse office de réveil, c’est à dire qu’il puisse être réglé à une heure donnée, pour que chaque jour à l’heure dite, il déclenche une scène.

Mise à jour :

16 oct. 2012: J’ai fait ma première « release » pour le « MIOS Marketoplace ». Le plugin passe en version 0.6. Téléchargez le directement depuis la Vera…

4 oct. 2012: J’ai mis à jour ce plugin pour le faire fonctionner avec mon interface pour iPad (voir mon article à ce sujet). A cette occasion, je lui ai rajouté quelques fonctionnalités et il a été rebaptisé (en fait le changement de nom à simplifié mes tests comparatifs et je lui ai laissé son nouveau nom)…

Le principe :

J’ai testé d’abord deux solutions :

  • Ajouter un déclencheur horaire dans une scène (en effet comme nous le verrons, mon plugin réagi comme un déclencheur horaire de type programmation basée sur le jour de la semaine). J’y ai trouvé des inconvénients : il n’y a aucune indication directe de cet horaire sauf  dans la partie tableau de bord, vue d’ensemble. Le fait d’aller modifier une scène dès qu’il faut modifier l’horaire est peu convivial. Il n’y a pas la fonction bipasse (il faut donc y ajouter un deuxième module).
  • Utiliser le plugin Google Calendar Switch qui créé un module qui se déclenche en fonction d’évènements dans un agenda Google : Je le trouve très bien mais plutôt pour des déclenchements non répétitifs. En effet si c’est pour une fonction de réveil chaque matin, il faut gérer un événement récurrent sur Google d’un coté (et qui pollue un peu l’agenda) et le bipasse éventuel sur la Vera de l’autre. (Il manquait aussi l’indication de l’heure du prochain réveil sur l’interface mais j’ai modifié le plugin en conséquence…)

Bref, après quelques semaines de tests, ces solutions n’ont pas été certifiées WAF. Je me suis donc tourné vers une solution maison avec comme cahier des charges de faire quelque chose qui ressemble à un réveil classique : L’appareil est réglé à une heure donné et s’il est mis en position réveil, il sonne au moment voulu. Traduction domotique : Il faut avoir une petite interface qui permette de mettre à jour une variable contenant l’heure de réveil d’un module et que ce module puisse déclencher une scène s’il n’est pas en mode bipasse.

Pour aller un peu plus loin, j’ai ajouté quelques fonctions complémentaires: Le module peut servir de déclencheur dans une scène mais il est aussi possible de lui indiquer de lancer une scène. Il a une variable texte qui permet d’avoir un message ou paramétrage utilisable dans une scène. Il est possible d’indiquer des jours de la semaine où le module ne doit pas se déclencher. Enfin, il peut-être mis en mode minuteur (ne se déclencher qu’une fois à un horaire donné et pas tous les jours).

 Mode d’emploi :

 Installation manuelle du plug-in:

obsolète : passez par la Vera… Je laisse néanmoins cette partie qui peut servir de tuto pour d’autres plugins…
Passez directement à la partie réglages…

  • il faut télécharger les fichiers,
  • aller sur la Vera à la page Applications/Développer des application/Fichiers Luup
  • aller chercher chaque fichier avec Parcourir,
  • cliquer sur Redémarrer le moteur du code Luup après le téléchargement
  • et faire Valider

 Création d’un module :

  • Aller à la page Applications/Développer des applications/Créer un module
  • Dans Description indiquer un nom qui sera celui de votre module (qui pourra être modifié)
  • Dans Nom périphérique UPnP mettre D_VClock.xml
  • Cliquer sur Créer un module


 Vous devez maintenant avoir un nouveau module.


Les réglages :

(dans les exemples luup qui suivent, j’ai un module Virutal Clock avec un ID=58, vous devez remplacer cette ID par la votre).

Armé ou bipassé (variable Armed) :

Le module peut être à l’état armé ou bipassé en cliquant sur les boutons Arm ou Bypass.
Une commande luup peut aussi être utilisée (avec 1 pour armer, 0 pour bipasser):
luup.variable_set("urn:micasaverde-com:serviceId:SecuritySensor1", "Armed", "1", 58)

Réglage de l’heure de déclenchement (variable AlarmTime)

Le réglage de l’heure de déclenchement peut se faire de deux manières:

  • Soit depuis l’onglet Control en mettant une heure à Wake-up time puis en cliquant sur Set
  • Soit depuis l’onglet Set Variables (paramètre Wake-up time et bouton SAVE).

L’heure doit être au format hh:mm:ss (par exemple 06:55:00). Attention, je ne fais pas de vérification du format des paramètres (au moins pour l’instant), un mauvais paramétrage pourrait donner un comportement bizarre…

La commande luup correspondante (ici pour un réglage à 14h56):

luup.call_action("urn:upnp-org:serviceId:VClock1", "SetAlarmTime", {newAlarmTimeValue = "14:56:00"}, 58)

(Cette action luup effectue un set sur la variable AlarmTime et réinitialise le timer qui fera se déclencher le réveil.)

Réveil déclenché (variable Tripped):

Lorsque le réveil se déclenche (armé ou pas) la variable Tripped passe à 1 (0 sinon). Le passage d’un état à l’autre de cette variable provoque un événement utilisable comme déclencheur d’une scène.


La valeur de cette variable peut être récupérée par la commande :

luup.variable_get("urn:micasaverde-com:serviceId:SecuritySensor1", "Tripped", 58)

Les boutons Run et Stop Next:

En mode réveil (voir la fonction réveil ou minuteur ci-dessous) :
Si le module est sur Run, le réveil se déclenchera lorsque l’heure demandée sera atteinte. S’il est sur Stop Next, il ne se déclenchera pas mais il serait remet ensuite automatiquement sur Run pour se déclencher la fois suivante. Ceci permet par exemple dans le cas où un réveil serait programmé pour sonner tous les matins, de l’empêcher de sonner le lendemain et qu’il sonne à nouveau les autres jours sans avoir à penser à l’armer de nouveau.

En mode minuteur:  Run et Stop Next lance ou arrête le minuteur.

La commande luup est la suivante (valeur off pour stop ou on pour run) :
luup.call_action("urn:upnp-org:serviceId:VClock1", "SetNext", {newNextValue= "off"}, 58)

Les autres paramètres:

(configurables dans l’onglet Set Variables)

La fonction réveil ou minuteur :

Si le module est en mode Alarm Clock (variable AlarmType), le réveil se déclenche tous les jours à l’heure indiquée sauf s’il est demandé de ne pas le faire certains jours de la semaine :
Dans la partie Days bypassed (variable Weekdays), les jours cochés indiquent les jours de la semaine qui doivent être bipassés (le module reste à l’état Tripped=0).

Le module peut être utilisé en mode minuteur (Single trigger), il ne se déclenchera qu’une fois à l’heure demandée. Lorsque le réveil est programmé, il indique Timer On, une fois arrêté (retour à l’état Tripped=0), il affiche Timer Off (lorsqu’il est déclenché, il indique Timer In).

La durée de l’alarme,  (variable AlarmDuration):

Alarm duration dans l’onglet Set Variables, cette variable (en secondes) indique la durée du déclenchement du réveil (par défaut à 300 s = 5 min. et 10 s. au minimum). Cette durée est paramétrable. La commande luup est (pour par exemple 1 minute) :
luup.variable_set("urn:upnp-org:serviceId:VClock1", "AlarmDuration", "60", 58)
Attention, cette durée ne sera pris en compte que pour le prochain déclenchement (si le module est déjà déclenché, passer par l’onglet « Set Variable » pour que la modification soit prise en compte immédiatement).

Le paramètre Text (Text1)

Il ne fait rien. C’est simplement pour pouvoir récupérer son contenu dans une scène.

Il peut par exemple être récupérer par la commande luup :
luup.variable_get("urn:upnp-org:serviceId:VClock1", "Text1", 58)

Le paramètre Scene to run (ID) (SceneID)  :

Il permet d’indiquer le numéro d’une scène à lancer. Si c’est 0, il ne se passera rien. Sinon, s’il est, par exemple, égal à 15, lorsque le module passe à l’état tripped=1 et s’il est armé, il lance automatiquement la scène dont l’ID est 15 sans que cet événement soit mis comme déclencheur de la scène.

La commande luup pour affecter la valeur 15 à SceneID :

luup.variable_set("urn:upnp-org:serviceId:VClock1", "SceneID", "15", 58)

Des exemples d’utilisation :

Le paramétrage des captures ci-dessus sert à me réveiller tous les matins à 6h 55 sauf le samedi et le week-end. Il déclenche la scène 15 qui allume la lumière dans ma chambre. Si je mets l’ID de la scène 16, il allume la chambre des enfants (ben oui, des fois je dors à coté…). Lorsque je suis en congé, il n’y a pas d’allumage de la chambre mais ceci est géré dans la scène à partir de l’état d’un module Google Calendar Switch.

Un autre Virtual Clock fait parler mon Karotz tous les mardis à 19h30 pour me dire qu’il faut sortir les poubelles (sauf les jours fériés gérés par un module Google Calendar Switch également). Le texte lu par le Karotz est celui du paramètre Text1 de ce module.

Un autre sert de minuteur, je le règle en tant que de besoin pour faire parler mon Karotz qui lit également le texte de mon module (pour me dire par exemple que « les carottes sont cuites » lorsque le dîner est près…).

Enfin, je peux utiliser un module Virtual Clock pour allumer l’éclairage de mon aquarium à 10h et le faire s’éteindre à 19h00 : Avec AlarmTime=10:00:00, AlarmDuration=32400 (soit 9 h) et une scène pour l’éclairage s’allume lors de l’événement Tripped=1 et s’éteigne lorsque Tripped passe à 0…

Voilà. Testez-le et faites-moi vos remarques mais attention, c’est un béta, ne me rendez pas responsable si vous ne vous réveillez pas pour aller au travail ou à l’école…

21 réflexions sur “Virtual Clock : Un plug-in « Réveil » pour la Vera sous UI5

      • Hi sbdomo – I have loaded the files and set the time a few times, but it does not run the scene.?

        The scene ID is 12 and if i run the scene separately it works, but for some reason the Alarm Clock does not trigger it.

        Any ideas ?

      • Hello,
        Does Alarm Clock become tripped (and icon become red) ? The scene would be run when that module become tripped…
        (and the scene is run only if alarm clock is armed, not bypassed)

  1. Hi, thanks again for responding. I had a play with it tonight and 2 things were wrong (both embarrassing) one was not being Armed, and the other was one of terminology under Every Days, I had set the day I wanted it to work, not realising it was the day it should bypass.

    Using it intuitively, my logic suggested I would pick the days I wanted the Alarm to work, rather than select the days i dont want it to.

    Great plug in though..

    • For the days picked to indicate to activate or to bypass the plugin, I don’t know what is the most logical way. It’s just that I have considered that, by default, the plugin must be activated.
      This Way of fonctioning could be inverted…

  2. Bonjour

    Très intéressant, peux-tu aller un peu plus loin dans le partage ton expérience en nous expliquant la méthodologie que tu as utilisé pour créer ton plugin?

    1) le rôle de chaque fichier, ce que chaque fichier doit comporter, sa structuration, …

    2) pour la partie IHM du plugin
    – comment ajouter/gérer des onglets
    – au sein d’un onglet : comment gérer des champs/rubriques, comment associé un contrôle a un champ, comment gérer des listes des valeurs, des cases à cocher, des radio boutons, etc.

    3) les points de vigilance, les pièges à éviter

    4) tout autre information que tu trouverais pertinente

    ton explication pourrait être illustrée à partir de ton plugin

    Par avance merci

    Guy

    • Salut,
      C’est mon premier plugin et je l’ai fait par tatonnement de manière empirique. Je ne suis donc pas le mieux placé pour faire un tuto complet sur la création d’un plugin. Mais je pourrais faire un petit trucs et astuces sur ce que j’ai compris.
      Pour l’instant, je suis concentré sur la création d’une interface pour la Vera sur mon Ipad (en Sencha Touch 2).

  3. Pingback: Virtual Clock : Mise à jour de mon plugin « SB domotique
  4. Again a great piece of code from Your hand!
    I use the VClock plugin to lower the heat in my house at certain times, but I lack the ability to change « AlarmDuration » from MyVera.
    Is it possible it could be a change you might consider implementing in MyVera in future versions?

  5. If I change it to « single trigger (timer) » the device changes to « Timer On » from « Alarm Clock », but I still only see START and BYPASS on the Virtual Clock change screen in MyVera.
    I run version 0.7 from App store and My Vera build130324b15. Do I need to update something?

    • OK,
      I think I have understood. You have to choose « electrical timer » in MyVera to have a start and a end hour (not only in Vera). It’s just that I have put that end hour only for electrical timer.

  6. I am sorry to ask you all these questions🙂, but from were/how do I choose « Electrical Timer » in MyVera or Vera?
    I can only choose « Every days (Alarm Clock) » and « Single trigger (Timer) » in Vera.
    I dont have the Eletrical Timer mode option, as shown here https://sbdomotique.wordpress.com/2012/11/08/myvera-modules/
    Should I try to manually update the plugin? Where can I download the files? Or is there some way to debug on this?

    In the VClock.Xml file it shows version 0.6 in Vera « My Apps » it says version 0.7

    1
    0

    urn:schemas-upnp-org:device:VClock:1
    D_VClock.json
    VirtualClock
    sbdomo
    sbdomotique.wordpress.com
    VirtualClock
    VirtualClock
    0.6
    cr
    0

  7. Ahhhh the first thing you go blind on is the eyes😀 . I did not noticed the subcategory. I only looked at the Category.
    Thank you for your help

  8. Bonjour,
    Un grand merci pour ce module très pratique, je l’utilise pour commander des éclairages (device) toutefois j’ai été contraint de créer 2 modules et 2 scènes : un pour allumer et un pour éteindre !
    Ou j’ai loupé quelque chose ?
    Je compte également m’en servir pour commuter éco/comfort sur mes SmartVirtualThermostat, des économies de modules sur ma VeraLite seraient les bienvenus.
    Encore merci pour votre travail

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s