Exemple d’intégration d'une alarme AJAX dans Jeedom avec le plugin siapro - pour allez plus loin

Exemple d’intégration d’une alarme AJAX dans Jeedom avec le plugin siapro - pour allez plus loin

Ce tutoriel fait suite au premier disponible ici : Exemple d’intégration d'une alarme AJAX dans Jeedom avec le plugin siapro.

Ici nous allons voir comment représenter les appareils AJAX dans Jeedom pour avoir un état de chacun d’entre eux

Représentation des appareils AJAX dans Jeedom

Pour représenter les appareils AJAX, nous allons définir un virtuel qui représentera l’appareil AJAX

On défini un virtuel par appareils AJAX (pensez à cocher la Catégorie Sécurité) :

  • ID_AJAX : Identifiant dans AJAX. Il commence à 0 (le Hub) et est incrémenté d’un à chaque nouvel équipement
  • Code : Dernier code évènement reçu pour cet appareil
  • Statut : Statut de l’équipement. vert : Ok , jaune : malfonction, rouge : alarme. A utiliser avec un widget affichant un indicateur coloré.
  • Batterie : Statut de la batterie. Uniquement 1 ou 0 en fonction des évènements SIA reçu
  • Type : Type de l’appareil. Valeur de 0 à 13 en correspondance avec le widget Equipement AJAX
  • Message : Dernier message associé à l’appareil
  • Reset : Indique si l’appareil a été remis à ces valeurs par défaut
  • Réinit : Permet de remettre l’appareil à ses valeurs par défaut. Dans la configuration de la commande, il faut appeler le scénario RéinitEquipementAjax avec comme Tag l’ID_JAX. A faire une première fois après avoir créé le virtuel de l’équipement.

Les commandes suivantes sont dispensables :

  • Groupe : Groupe AJAX auquel appartient l’appareil
  • Mode nuit : Indique si l’appareil est actif en mode nuit
  • Room : Indique dans quelle pièce est installé l’appareil

Widget du virtuel

Pour la disposition des infos, j’utilise un Tableau de 3x1 :

Ce qui donne le résultat suivant :

widget_appareil

Le Widget Equipement AJAX:

  • Equipement AJAX.json.txt (3,2 Ko)
    une fois téléchargé enlever .txt à la fin du nom du fichier pour récupérer le fichier Equipement AJAX.json et importer le via Outils->Widgets puis bouton ->Importer.

Les images:

  • Télécharger le dossier zipper des images ajax.zip.txt (104,0 Ko)
    une fois téléchargé enlever .txt à la fin du nom du fichier pour récupérer le fichier ajax.zip Le dossier ajax contenu dans le zip est à copier dans le répertoire data/img/ à l’aide du plugin Jeexplorer.

Scénarios associés

  • RéinitEquipementAjax : Permet de réinitialiser l’équipement aux valeurs par défaut.
  • UpdateEquipementAjax : Permet de mettre à jour l’équipement en fonction des évènements reçus

Il faudra aussi modifier le(s) scénario(s) Code Alarme [Groupe] pour ajouter l’appel à la mise à jour de l’appareil concerné

RéinitEquipementAjax

Ce scénario est appelé pour réinialiser les commandes du virtuel de l’appareil AJAX.

Le scénario prend en paramètre l’ID de l’appareil AJAX sous la forme ID_equipment=valeur

 Nom du scénario : RéinitEquipementAjax
- Objet parent : Sécurité
- Mode du scénario : provoke
    - Evènement : 
    
    CODE
     (code) $tags = $scenario->getTags();
    
    // Équipements catégorie security
    $cat = eqLogic::ByCategorie('security');
    
    //On récupère les équipements de la catégorie security
    foreach($cat as $i)
    {
    	//On récupère les commandes des équipements security (tableau)
    	$cmdtab = cmd::byEqLogicId($i->getId());
      
    	//On cherche les commandes de la catégorie security
    	foreach($cmdtab as $cmd)
       	{
          	if($cmd->getName() == "ID_AJAX")
            {
              //On récupère le nom entier de l'équipement
    			$human = $i->getHumanName();
              //On reconstitue la commande avec le nom entier + l'état
    		 	$cmd = cmd::byString('#' . $human . '[' . $cmd->getName() . ']#');
              //On récupère le statut de la commande.
    			$statut = $cmd->execCmd();
              //On récupère le nom de l'équipement
    			$equipement = $i->getName();          
             
              if ($statut == $tags['#ID_equipment#']) 
              {
              	//Log
              	$scenario->setLog('Réinit ' . $equipement);
     
                $commande_name = '#' . $human . '[Code]#';
                $cmd = cmd::byString($commande_name);
                $cmd->event((""));
                
                $commande_name = '#' . $human . '[Message]#';
                $cmd = cmd::byString($commande_name);
                $cmd->event((""));
    
                $commande_name = '#' . $human . '[Statut]#';
                $cmd = cmd::byString($commande_name);
                $cmd->event(("vert"));
    
                $commande_name = '#' . $human . '[Batterie]#';
                $cmd = cmd::byString($commande_name);
                $cmd->event((1));
                
                break 2;
    
              }
            }
        }
     
    }

UpdateEquipementAjax

Ce scénario est appelé pour réinialiser les commandes du virtuel de l’appareil AJAX.

Le scénario prend en paramètre les tags suivants :

  • l’ID de l’appareil AJAX sous la forme ID_equipment=valeur
  • Le code évènement reçu : code_event=valeur
  • Le message associé au code évènement reçu : message_event=valeur
- Nom du scénario : UpdateEquipement Ajax
- Objet parent : Sécurité
- Mode du scénario : provoke
    - Evènement : 
    
    CODE
     (code) $tags = $scenario->getTags();
    
    // Équipements catégorie security
    $cat = eqLogic::ByCategorie('security');
    
    //On récupère les équipements de la catégorie security
    foreach($cat as $i)
    {
    	//On récupère les commandes des équipements security (tableau)
    	$cmdtab = cmd::byEqLogicId($i->getId());
      
    	//On cherche les commandes de la catégorie security
    	foreach($cmdtab as $cmd)
       	{
          	if($cmd->getName() == "ID_AJAX")
            {
              //On récupère le nom entier de l'équipement
    			$human = $i->getHumanName();
              //On reconstitue la commande avec le nom entier + l'état
    		 	$cmd = cmd::byString('#' . $human . '[' . $cmd->getName() . ']#');
              //On récupère le nom de la commande.
    			$name = $cmd->execCmd();
              //On récupère le nom de l'équipement
    			$equipement = $i->getName();
              
              // Log
              $scenario->setLog('Evènement pour ' . $equipement . ' => ' . $tags['#code_event#'] . ' :: ' . $tags['#message_event#']);
              
              if ($name == $tags['#ID_event#']) 
              {
                $commande_name = '#' . $human . '[Code]#';
                $cmd = cmd::byString($commande_name);
                $cmd->event(($tags['#code_event#']));
                
                $commande_name = '#' . $human . '[Message]#';
                $cmd = cmd::byString($commande_name);
                $cmd->event(($tags['#message_event#']));
    
                $commande_name = '#' . $human . '[Reset]#';
                $cmd = cmd::byString($commande_name);
                $cmd->event((0));
                
                if ($tags['#code_event#'] == "TA" || $tags['#code_event#'] == "XL" || $tags['#code_event#'] == "QB" || $tags['#code_event#'] == "TB" || $tags['#code_event#'] == "XT" || $tags['#code_event#'] == "AT")
                {
                   // Malfunction            
                  	$commande_name = '#' . $human . '[Statut]#';
                    $cmd = cmd::byString($commande_name);
                	$cmd->event(("jaune"));                
                   
                    if ($tags['#code_event#'] == "XT" || $tags['#code_event#'] == "YT") 
                	{
                      // Malfunction : low battery
                      $commande_name = '#' . $human . '[Batterie]#';	  
                      $cmd = cmd::byString($commande_name);
                      $cmd->event((0));                  
                    }
                   
                }           
                else if ($tags['#code_event#'] == "TR" || $tags['#code_event#'] == "XC" || $tags['#code_event#'] == "QU" || $tags['#code_event#'] == "TB" || $tags['#code_event#'] == "TU" || $tags['#code_event#'] == "XR" || $tags['#code_event#'] == "XR" || $tags['#code_event#'] == "AR") 
                {
    				// Malfunction Restore        
                  	$commande_name = '#' . $human . '[Statut]#';
                    $cmd = cmd::byString($commande_name);
                	$cmd->event(("vert"));  
     
                    if ($tags['#code_event#'] == "XR" || $tags['#code_event#'] == "YR") 
                	{
                      // Malfunction Restore : battery charged
                      $commande_name = '#' . $human . '[Batterie]#';	  
                      $cmd = cmd::byString($commande_name);
                      $cmd->event((1));                  
                    }  
                }
               else if ($tags['#code_event#'] == "BA" || $tags['#code_event#'] == "FA" || $tags['#code_event#'] == "KA" || $tags['#code_event#'] == "WA" || $tags['#code_event#'] == "GA" || $tags['#code_event#'] == "PA" || $tags['#code_event#'] == "JA" || $tags['#code_event#'] == "MA") 
                {
    				// Alarm     
                  	$commande_name = '#' . $human . '[Statut]#';
                    $cmd = cmd::byString($commande_name);
                	$cmd->event(("rouge"));  
                  
                }
                else if ($tags['#code_event#'] == "BR" || $tags['#code_event#'] == "FH" || $tags['#code_event#'] == "KH" || $tags['#code_event#'] == "WH" || $tags['#code_event#'] == "GH" || $tags['#code_event#'] == "PH" || $tags['#code_event#'] == "MR") 
                {
    				// Alarm Restore    
                  	$commande_name = '#' . $human . '[Statut]#';
                    $cmd = cmd::byString($commande_name);
                	$cmd->event(("vert"));  
                  
                }        
               else if ($tags['#code_event#'] == "SM")
               {
                 	// Check AJAX equipment type
                    $commande_name = '#' . $human . '[Type]#';
                    $cmd = cmd::byString($commande_name);
                 	$value = $cmd->execCmd();
                 
                 	// LeakProtect
                 	if ($value == 13)
                    {
                      $commande_name = '#' . $human . '[Statut]#';
                      $cmd = cmd::byString($commande_name);
                      $cmd->event(("jaune"));  
                      
                    }
                 	else 
                    {
                      $commande_name = '#' . $human . '[Statut]#';
                      $cmd = cmd::byString($commande_name);
                      $cmd->event(("rouge"));  
                    }
                 
               }
               else {
                 	break 2;
               }
            }
        	}
        }
    }

Modification des scénarios Code Alarme

Afin de mettre à jour l’appareil, il faut modifier les scénarios Code Alarme que l’on a vu dans la première partie du tutoriel.

Ajax Protection Intérieure est l’équipement SIA Pro correspondant au groupe Nri1
Alarme est le virtuel de l’alarme AJAX

Dans le premier bloc ACTION, ajouter l’action suivante :

Scénario : *UpdateEquipementAjax*
Acion : Démarer
Tags : *ID_event=#[Sécurité][Ajax Protection Intérieure][Utilisateur - Zone]# code_event=#[Sécurité][Ajax Protection Intérieure][Code]# message_event=#[Sécurité][Alarme][Description ZI]#*

Voilà, cette fois ci vous avez tout les informations pour réaliser une intégration aussi poussée que possible de votre alarme AJAX

Bonne lecture.

5 « J'aime »