Zibase : gestion des sondes de température par un scénario unique10 minute(s) de lecture

Lors d’une récente mise à jour, la Zibase s’est vu donner la possibilité de déclencher un scénario par plusieurs modules.  Cela est une bonne nouvelle qui permet de ne pas avoir à créer plusieurs fois un même traitement pour effectuer des actions identiques: un scénario par module.  Cela permet également de limiter l’utilisation de la mémoire mise à disposition pour le développement des scénarii.  Je vais donc remplacer mes scenarii de gestion des sondes de température par un scénarii unique.

Présentation

Aujourd’hui j’ai créé un scénario par sonde qui permet d’appeler un script PHP sur mon NAS via une requête HTTP.  Le script à pour but d’enregistrer en base de données le relevé de chaque sonde.

Le script prend en paramètre 3 éléments:

  • la zone de l’habitation dans laquelle se trouve la sonde
  • la température mesurée
  • l’hygrométrie mesurée

Le scénario final fera la même chose… et plus!

Je souhaite :

  • qu’il communique au script les données relevée
  • qu’il surveille le niveau des batteries de la sonde
  • qu’il surveille le bon fonctionnement de la sonde. 

Quitte à faire des modifications autant en profiter!

Mise en place du scénario

Mes scénarii existants pour chaque sonde s’appelaient tous du style “Log T xxxxx” où xxxxx était un mot qualifiant la localisation de la sonde (Extérieur, Salon,…).  Mon nouveau scénario s’appellera simplement “Log T”.

Pour déclencher un scénario il ne faut plus cocher la case “PERIPHERIQUE” en précisant le périphérique qui servira de déclencheur.  Il suffit de cocher “Liste d’IDs de déclenchement” et de renseigner les ID des sondes.

Pour obtenir l’ID des sondes il suffit de consulter son paramétrage et de relever la valeur de son identifiant radio.

Identification de la sonde

Toujours lors de cette récente mise à jour, il est maintenant possible d’identifier le module déclenchant un scénario.  Cela se fait via les variables de “sondes/détecteurs” I7, I8 et I9.

  • I7 représente le type de capteur/détecteur, on le retrouve dans sensors.xml avec 10 ajouté.
  • I8 représente le MSB, soit l’octet de poids fort de l’ID 
  • I9 représente le LSB, soit l’octet de poids faible de l’ID

Variable I7

Elle indique quel type de module à déclenché le scénario.

Concernant I7 c’est le fichier sensors.xml qui vous le donnera.  Ce fichier vous pouvez l’obtenir en vous connectant en local chez vous sur votre Zibase.  Avec  votre  explorateur internet préféré en spécifiant comme adresse du site, l’adresse IP de votre Zibase.

Pour rappel, l’adresse IP de la Zibase est disponible via le configurateur dans l’onglet Système:

Le fichier sensors.xml est alors disponible sur le site de votre Zibase:

Concernant ma sonde de température extérieure au a comme identifiant OS439183364 je peux lire la donnée correspondante dans le fichier sensors.xml du style :

<ev type=”7″ pro=”OS” id=”439183364″ gmt=”1319715771″ v1=”224″ v2=”32″ />

On aura dans la variable I7 la valeur issue de “type =” : 7 +10 = 17

Variable I8

La variable I8 est déterminée à partir de l’ID du module qui déclenche le scénario. I8 représente le MSB (More Significant Bit), soit l’octet de poids fort de l’ID du module. Pour une sonde Oregon, c’est la référence de la sonde.

Variable I9

La variable I9 est déterminée à partir de l’ID du module qui déclenche le scénario.   I9 représente le LSB (Less Significant Bit), soit l’octet de poids faible de l’ID du module.  Pour une sonde Oregon I9 est constitué avec l’adresse en point fort (D15-D8), et le N° canal de sonde en point faible (D7-D0).

Comment obtenir les valeurs de I8 et I9?

Il y a pour cela 2 manières: par test et par le calcul.

Méthode par test :

Il suffit simplement de créer un scénario de test qui sera déclenché par le module pour lequel on souhaite obtenir les valeurs de I7, I8 et I9. 

Le scénario à créer sera le suivant:

Il suffira de patienter pour voir afficher les valeurs dans le “Suivi d’activité de la Zibase”:

Méthode par le calcul :

Si vous êtes à l’aise avec les bases numériques continuez à lire.  Si vous ne l’êtes pas trop vous pouvez soit lire le précédent article publié sur Abavala : Partons sur de bonnes bases mathématiques et continuer.  Sinon cette explication théorique ne vous apportera rien de plus que la méthode par l’expérience.  L’exposé suivant n’apporte rien de plus qu’une explication aux calculs des valeurs de I8 et I9.

  • prendre l’ID de la sonde : OS439183364
  • retirer les lettres OS ou OC : 439183364
  • Convertir cet ID en base 10 en base hexadécimale :0x1A2D6804

Pour convertir un nombre en base 10 => base hexadécimale allez simplement sur Google et dans la zone de recherche tapez “439183364 in hex”.  Vous aurez le résultat de la part de la calculatrice Google!

  • prendre ce nombre hexadécimal et séparer le MSB du LSB : c’est tout bête
    • MSB = I8 = 1A2D
    • LSB = I9 = 6804

Ce sont bien les valeurs en hexadécimal que l’on peut lire dans le suivi d’activité de la méthode par expérience ci-dessus.  Par contre on est toujours en hexadécimal et par encore en valeur décimale.  Continuons

  • Pour I8, la donnée est en entiers signés sur 16 bits
  • convertir la valeur I8 en base binaire 16 bits : 0001101000101101
  • Le premier bit étant = 0 on a un entier positif en lecture directe.  On peut convertir I8 en base 10 : I8 = 6701

Là aussi Google est votre ami.  La recherche Google à lancer est “0x1A2D in binary” (faire attention que le résultat Google ne vous donne pas forcément un résultat en 16 bit)  puis “0x1A2D in decimal”

  • Pour I9, la donnée est en entiers signés sur 16 bits
  • convertir la valeur I9 en base binaire (Google : 0x6804 in binary) : 0110100000000100
  • Le premier bit étant = 0 on a un entier positif en lecture directe.  On peut convertir I9 en base 10 : I9 = 26628

Dans le cas où le premier bit du nombre binaire est à 1 il s’agit alors d’un entier négatif.  Il faut le transformer en entier positif en faisant l’inverse de la méthode “Complément à deux” présenté dans l’article Partons sur de bonnes bases mathématiques.

Ex: I9= CE02 en hexadécimal

  • on convertir I9 en binaire (Google: 0xCE02 in binary) : 1100111000000010
  • Le premier bit est à 1 on a donc un entier négatif.  Il faut faire l’inverse de la méthode “Complément à deux”
  • lui soustraire la valeur 1 binaire (Google: 0b1100111000000010 – 0b0000000000000001) : 1100111000000001
  • au nombre binaire trouvé remplacer les 1 en 0 et les 0 en 1 : 0011000111111110
  • convertir en decimal (Google : 0b0011000111111110 in decimal) : 12798
  • comme il s’agit d’un entier négatif I9 = -12798

Utilisation des variables I7, I8, I9 dans le scénario

Comme on vient de la voir les valeurs de I7, I8 et I9 peuvent être soit constatées soit calculées.

Dans mon exemple comme tous les modules sont de sondes de température Oregon du même modèle on aura toujours en I7 et I8 les mêmes valeurs.  Elles ne sont pas discriminantes.  Seule la valeur de I9 nous sera au final utile.

Afin de me simplifier la vie j’ai choisit de considérer les sondes par un numéro qui m’est propre : Sonde 1, sonde 2, sonde 3,…

Dans le scénario de gestion des sondes “Log T” j’effectue le test suivant pour savoir s’il s’agit de la sonde 1.

Si Valeur absolue(I9) ET i9delaSonde1) – i9delaSonde1 +1 >0 alors c’est la sonde 1

ce qui revient à écrire

(ABS(I9)AND12798)-12798+1  avec 12798 la valeur attendue de I9 pour ma sonde “extérieur” ou sonde 1

Cela se traduit  par la mise en place de l’action suivante qui stocke le numéro de la sonde dans la variable V5.

 

Ce test est à mettre en place pour toutes les sondes que l’on souhaite enregistrer en base et surveiller.

Enregistrer en base les températures relevées

Si vous vous souvenez dans mon script la zone était “codée en dur” dans l’appel au script PHP par HTTP.

Il suffit simplement dans le scénario “Log T”  de communiquer au script PHP appelé sur le NAS la valeur de V5 qui fera office d’identifiant de la Zone.

Surveiller le niveau de batteries des sondes

Afin de surveiller le niveau des batteries des sondes et être prévenu une fois par jour de l’état des piles afin de les changer, on utilisera ici le principe décrit dans le chapitre “les mathématiques en domotique” dans l’article Partons sur de bonnes bases mathématiques.

L’état des batteries des sondes sera stocké dans la variable V6 et sera testé tous les jours à midi.  Un avertissement sera alors envoyé.

Pour cela il suffit de rajouter dans le scénario “Log T” l’enregistrement de l’état de la batterie de la sonde lue (ex sonde 1) sur le bit de la variable binaire V6 qui lui est dédiée (ex: sonde 1 => bit 1).  Cela se fait par l’ajout de l’action suivante:

En ce qui concerne les sondes Oregon, si on détecte une batterie faible la valeur de la variable I2 est >0.

La surveillance se fait ensuite par un autre scénario “T Batteries” déclenché tous les jours à midi:

 Il lance le scénario “T Batteries HS” en cas de batteries faibles.

Surveiller le bon fonctionnement des sondes

Afin de surveiller le bon fonctionnement des sondes et être prévenu une fois par heure en cas d’anomalie, on utilisera ici le principe décrit dans le chapitre “les mathématiques en domotique” dans l’article Partons sur de bonnes bases mathématiques.

L’état de fonctionnement des sondes sera stocké dans la variable V7 et sera testé toutes les heures de 8h à 22h.  Un avertissement sera alors envoyé.

Pour cela il suffit de rajouter dans le scénario “Log T” l’enregistrement de la réception de données de la part de la sonde (ex sonde 1) sur le bit de la variable binaire V7 qui lui est dédiée (ex: sonde 1 => bit 1).  Cela se fait par l’ajout de l’action suivante:

A chaque fois que la sonde emet, le scénario “Log T” est executé et donc le bit de la variable V7 associé est positionné à 1.  La remise à 0 de la variable V7 se fait via le scénario de surveillance.

La surveillance se fait ensuite par un autre scénario “T Sondes” déclenché toutes les heures de 8h à 22h.  Dans mon exemple j’ai 3 sondes.  Si toutes les sondes fonctionnent correctement la valeur binaire de V7 sera 111 ce qui équivaut à 7.  Donc si tout va bien V7=7.  Si au moins une des sondes ne répond plus alors V7-7  < 0 ce qui déclenche l’envoi de l’alerte. Ce qui revient à tester V7-7+1 <= 0

 

Il lance le scénario “T Sondes HS” en cas de non fonctionnement d’une sonde.

Ce scénario fait la mise à 0 de la variable V7 contenant l’état de bon fonctionnement des sondes.

Conclusion

C’est très agréable de ne pas avoir à recréer des scenarii pour chaque sonde que l’on souhaite surveiller ou pour lesquelles les relevés doivent être stockés en base.

L’utilisation de variables pour stocker les états des batteries ou bien le bon fonctionnement des sondes est bien utile pour récuperer ces informations en dehors de la Zibase via les API existantes. Elles peuvent ainsi être utilisés dans votre interface HomePress!

Il aurait été plus simple de pouvoir gérer les ID des sondes et autres modules un peu plus intuitivement sans avoir à passer par les variables I8 et I9.  Mais bon si l’on teste la sonde avant afin de connaître ses valeurs de I7, I8, I9 on n’est tout de même pas obligé de les calculer!  Les scénarios perdent quand même en lisibilité mais le gain de place en mémoire est quand même très appréciable.

Faites le test!

12 Comments

  1. […] modules. Maintenant ils pourront créer un seul scénario et le déclencher par plusieurs modules. Un exemple de mise en œuvre utilisant également les nouvelles variables I7-I8-I9 sera également d…. C'est une nouveauté très puissante.  Les Id sont à spécifier de la manière suivante […]

    4 novembre 2011
    Reply
  2. DjMomo said:

    A partir de la version V672 du firmware de la Zibase, les variables I7, I8 et I9 sont migrées vers les variables I17, I18 et I19.
    –> http://www.zodianet.com/zgeeks.html

    27 avril 2012
    Reply
  3. Mircea said:

    Bonjour,sur la zibase2, dernier fw, l’intitulé de l’action “afficher les variables s des sones et des actionneurs” a perdu la partie “et des actionneurs”, néanmois ca affiche les variables I aussi.juste pour info…Mircea

    20 mai 2012
    Reply
    • Avatar photo Hervé said:

      Avec les avancées de Zodianet il est vrai que le texte et les copies d’écran peuvent ne plus être fidèles aux évolutions. Merci pour cette mise à jour!

      20 mai 2012
      Reply
  4. Mircea said:

    Bonjour,un peu d’aide, stp…Je voudrais appeler un PHP (sur une liste longue d’ID déclencheurs) avec les I17-19 en paramétrés et reconstruire un identificateur lisible, pour pouvoir jouer dans le PHP avec les “if then else” tellement limitées sur la zibase… Comme je vois que tu joues depuis longtemps avec,..Merci d’avance,Mircea

    22 mai 2012
    Reply
  5. Mircea said:

    par exemple I17=11 I18=-3582 I19=21345 se recompose en quoi?Merci d’avance

    22 mai 2012
    Reply
    • Avatar photo Hervé said:

      Bonjour Mircea
      En fait je ne me suis pas embêté à “recomposer” dans mon script PHP l’identifiant de la sonde. Dans l’exemple ci-dessus, dès que le scénario est lancé par une sonde, les variables I17, I18 et I19 m’aident à lui affecter un identifiant de sonde dans la variable V5. C’est cette variable V5 qui est communiquée à mon script.
      On a donc dans la Zibase la sonde OS439183364. Elle est identifiée par le scénario qui lui affecte l’identifiant “1”. Il s’agit de mon identifiant de sonde. Cet identifiant est stocké dans V5 pour pouvoir le communiquer dans mon script PHP via le paramètre “zone”. Dans mon script PHP il me suffit de récupérer la valeur du paramètre “zone” pour savoir de quelle sonde il s’agit.

      25 mai 2012
      Reply
  6. Mircea said:

    J’ai bien compris ce que tu as fait :-)Moi je voulais faire un peu différemment… faire un seul scénario pour toutes mes télécommandes – Chacon, X10RF, X10RF sécurisé – et passer tout ça a un PHP qui décidera quel action/scénario il doit déclencher, en fonction de…

    25 mai 2012
    Reply
    • Avatar photo Hervé said:

      Pourquoi as-tu besoin de reconstruire l’identifiant d’origine? Ne peux-tu pas simplement utiliser I17-I18-I19 directement dans le PHP. Cela te désigne distinctement ta télécommande.

      25 mai 2012
      Reply
  7. Mircea said:

    je pensais que ça serait plus “élégant” de reconstruire l’ID… Mais, finalement, je vais les utiliser tel que.Merci encore!

    28 mai 2012
    Reply
  8. […] Zibase : gestion des sondes de température par un scénario unique Lors d’une récente mise à jour, la Zibase s’est vu donner la possibilité de déclencher un scénario par plusieurs modules . Mise en place d'un systéme d'alarme intégré ZiBASE Une mise à jour récente de la ZiBASE permet de mettre en place un système d’alarme tout simplement avec un seul scénario… Il faut bien sur avoir préalablement installé et configuré une liste de périphériques de détection, de commande et d’alerte sur votre Zibase : Possédant depuis plusieurs années un système d’alarme Delta Dore composé dune central CTX 50, détecteurs de mouvement, détecteurs de porte, deux télécommandes Delta Dore tydom140 (4 touches), une sirene exterieure, j’ai donc créé pour ma part 3 scénarios : ObjetConnecté […]

    1 février 2013
    Reply

Laisser un commentaire

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

Prouvez que vous êtes humain: * Time limit is exhausted. Please reload CAPTCHA.