Différences entre les versions de « STATUS.XML et PHP »
Ligne 19 : | Ligne 19 : | ||
}} | }} | ||
==BUT== | ==BUT== | ||
Dans ce tutoriel, nous allons voir comment accéder aux données de l'[[IPX800_V4]]. Ces données pourront être traitées dans un script externe et pourquoi pas, | Dans ce tutoriel, nous allons voir comment accéder aux données de l'[[IPX800_V4]]. Ces données pourront être traitées dans un script externe et pourquoi pas, réinjectées dans l'IPX800 sous une autre forme. | ||
Pour l'exemple, nous utiliserons un cas concret relevé sur le forum. | Pour l'exemple, nous utiliserons un cas concret relevé sur le forum. |
Version actuelle datée du 24 février 2024 à 11:54
| |||
---|---|---|---|
Nom | SCRIPTS EXTERNES PHP | ||
Famille | IPX800 V4 | ||
Wiki créé le | 02/06/2020 | ||
Wiki mis à jour le | 02/06/2020 | ||
Auteur | fgtoul |
BUT
Dans ce tutoriel, nous allons voir comment accéder aux données de l'IPX800_V4. Ces données pourront être traitées dans un script externe et pourquoi pas, réinjectées dans l'IPX800 sous une autre forme.
Pour l'exemple, nous utiliserons un cas concret relevé sur le forum. L'exercice consistait à calculer la puissance thermique d'un chauffage au sol et à réinjecter le résultat dans une analogique virtuelle, afin de permettre l'affichage sur X-DISPLAY. Nous utiliserons un Synology comme serveur web. N'importe quel serveur supportant le PHP fera l'affaire.
Pour votre compréhension, retenez les étapes suivantes
- accès au fichier Status.xml en PHP
- lecture de valeurs dans status.xml en PHP
- accès à l'IPX800 par commande API pour injection de valeurs ou actions.
Le script
<?php
// Variables à modifier dans ce script
$IPX800_IP = 'IP_IPX800' ; // Mettre ici l'adresse IP ou le nom DNS de l'IPX800 V4
$IPX800_PORT = '80' ; // Mettre ici le port d'accès de l'IPX800 - 80 par défaut
$IPX800_USER = 'user' ; // Mettre ici l'utilisateur pour l'accès restreint si activé sur IPX800 V4
$IPX800_PWD = 'MotDePasse' ; // Mettre ici le mot de passe User pour l'accès restreint si activé sur IPX800 V4
$IPX800_RESTREINT = false; //mettre true pour un accès restreint, false si accès non protégé
$IPX800_APIKEY=""; //renseignez la clé API si activée
if ($IPX800_APIKEY<>""){
$API_Key="key=" . $IPX800_APIKEY . "&";
}
// URL résultante d'accès au status de l'IPX800
if ( $IPX800_RESTREINT ) {
$IPX800_URL = "http://{$IPX800_USER}:{$IPX800_PWD}@{$IPX800_IP}:{$IPX800_PORT}/user/status.xml";
} else {
$IPX800_URL = "http://{$IPX800_IP}:{$IPX800_PORT}/user/status.xml";
}
// Vérification de l'accessibilité de l'IPX800
$ipx800_available= false ;
$ipx800_check = @get_headers($IPX800_URL);
if (strpos($ipx800_check[0],'200 OK') !== false ) { $ipx800_available = true ; }
unset ($ipx800_check );
// Si l'IPX800 est accessible on l'interroge et on affiche le contenu "décodé"
if ( $ipx800_available ) {
$ipx800_status = @simplexml_load_file($IPX800_URL);
//Récupération des valeurs brutes
$IPX800_analog2 = ((($ipx800_status->analog2 * 0.000050354)- 0.25) / 0.028 );
$IPX800_analog3 = ((($ipx800_status->analog3 * 0.000050354)- 0.25) / 0.028 );
$c=(($IPX800_analog2-$IPX800_analog3) * 0.8 * 1.16 * 1000);
echo $IPX800_analog2 . "<br>";
echo $IPX800_analog3 . "<br>";
echo number_format($c, 0, '.', "") . "<br>";
//----Envoi des données à l'IPX--------
$URL_Push="http://" . $IPX800_IP . ":" . $IPX800_PORT . "/api/xdevices.json?" . $API_key . "SetVA32=" . number_format($c, 0, '.', "");
echo $URL_Push;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL_Push);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
curl_close($ch);
}
?>
Dans la première partie du script,
- Renseignez l'adresse IP de l'IPX800.
- Si votre interface Utilisateur est protégée par un mot de passe, renseignez les et modifiez le paramètre $IPX800_RESTREINT à la valeur True, comme ceci
$IPX800_RESTREINT = true;
- Renseignez la clé API si vous l'avez activée sur IPX800_V4 :
$IPX800_APIKEY="mon-api-key";
Le script essaie d'accéder au fichier Status.xml sur l'IPX800_V4.
Si l'accès est possible, les valeurs sur les entrées analogiques 3 et 4 (respectivement analog2 et analog3 dans le script) sont lues.
Le fichier Status.xml contient des valeurs brutes, auxquelles il faut appliquer la formule correspondant au capteur afin d'obtenir la valeur analogique.
Supposons que nous utilisons des sondes TC100 vendues par GCE, la formule est du type
((x * 0.000050354) - 0.25) / 0.028
Les variables $IPX800_analog2 et $IPX800_analog3 contiendront donc les valeurs analogiques après application des formules sur les valeurs lues.
Après traitement des données, nous utiliserons les commandes API de l'IPX800 pour modifier l'état d'un périphérique ou une valeur analogique virtuelle.
C'est ce dernier cas que nous traitons dans cet exemple. Pour les autres commandes API, je vous invite à lire l'article consacré à l'API_V4.
La commande SetVA est utilisée afin d'envoyer notre résultat $C dans une entrée analogique virtuelle sur notre IPX800_V4.
Cette entrée analogique virtuelle pourra être exploitée dans le moteur de scénario de l'IPX800_V4 ou affichée sur le dashboard et sur X-DISPLAY.
Sauvegardez le script dans un dossier de votre serveur Web.
EXECUTION DU SCRIPT
Afin que notre calcul soit mis à jour régulièrement sur IPX800_V4, il faut planifier une tâche à intervalle régulier.
Pour notre exemple sur Synology, créons une tâche dans le Planificateur.
Allez dans le Panneau de Configuration et ouvrez le Planificateur
Créez une nouvelle Tâche planifiée
192.168.0.9 est l'adresse de mon Synology
gce est le dossier web dans lequel j'ai déposé mon script
PushVA.php est le nom donné au script
NB : La fonction Curl devra être activée dans vos paramètres PHP.