Piloter une entrée ou une sortie virtuelle depuis un script javascript inclus dans widget HTML

Bonjour la communauté,
Dans un widget HTML, je compare 2 valeurs (différence de 2 températures), et je souhaiterai, en fonction du résultat (positif ou négatif) mettre à 1 (ou à 0) une sortie virtuelle.
A priori le comparateur inclus dans l’IPX V4 ne me permets pas de le faire !
Avez-vous des pistes ?
Merci pour vos retours sur le sujet.
Bien cordialement à tous.
jppouma

Bonjour jppouma
un widget HTML ne fonctionnera que pendant son affichage sur un navigateur, il ne peut donc pas être considéré comme un élément d’automatisation, à moins de laisser un PC allumé H24.

Vous pouvez le faire simplement avec un comparateur et une scène émettant un PUSH vers l’ipx elle-même (sur IP Publique avec redirection de port)

Exemple avec Sortiue virtuelle n°1

  • créer un comparateur A1 - A2 <0
  • créer un Preset PUSH
    • ON : http://ip_externe:port/api/xdevices.json?key=apikey&SetVO=001
    • OFF : http://ip_externe:port/api/xdevices.json?key=apikey&ClearVO=001
  • créer une règle :
    NON COMPARATEUR ON/OFF PUSH

Bonne journée

2 « J'aime »

Merci pour la réponse fgtoul.
Mais le comparateur ne me permets pas de comparer mes 2 valeurs !
Une valeur étant sur une extension X400 et l’autre se trouvant sur extension X-THL, le comparateur ne me propose que des valeurs venant de la même extension…
Donc perso, je bug !!!
Une autre solution ???

effectivement, les comparateurs ne fonctionnent qu’avec des capteurs de même type.
En alternative au Javascript, il vaudrait donc mieux passer par un script externe qui s’exécuterait toutes les 5 minutes
(PHP sur NAS en vous inspirant de cet exemple)

1 « J'aime »

Merci beaucoup fgtoul… je vais regarder ça de plus près.

La solution du script est opérationnelle et fonctionne parfaitement ! Merci fgtoul pour l’aide… très précieuse :wink:
jppouma

3 « J'aime »

Bonjour Jppouma
Pouvez vous publier votre script modifié pour les lecteurs débutants ?.
Merci par avance.

Bonne journée

1 « J'aime »

Bonjour à tous,
J’ai remplacé l’adresse IP et mon APIKey par des étoiles, sinon tout le reste est tel quel.
Pour mes besoins, j’ai dû récupérer le fichier XML « io.xml » généré par l’IPX. C’est pour cela qu’il y a 2 URL dans mon code… je pense que pour la plupart des cas, seul l’URL du fichier « status.xml » sera suffisant.
Voici mon code…

<?php
// Variables à modifier dans ce script
$Key = "";
$IPX800_IP = ‘**.**.**.**.** ‘;   // 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<>""){
  $Key = "key=" . $IPX800_APIKEY . "&";
}

// URL résultante d'accès au status de l'IPX800
if ( $IPX800_RESTREINT ) {
    $IPX800_URL1 = "http://{$IPX800_USER}:{$IPX800_PWD}@{$IPX800_IP}:{$IPX800_PORT}/user/status.xml";
    $IPX800_URL2 = "http://{$IPX800_USER}:{$IPX800_PWD}@{$IPX800_IP}:{$IPX800_PORT}/user/io.xml";
} else {
    $IPX800_URL1 = "http://{$IPX800_IP}:{$IPX800_PORT}/user/status.xml";
    $IPX800_URL2 = "http://{$IPX800_IP}:{$IPX800_PORT}/user/io.xml";
}

// Vérification de l'accessibilité de l'IPX800
$ipx800_available = false ;
$ipx800_check = @get_headers($IPX800_URL1);
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_status1 = @simplexml_load_file($IPX800_URL1);
   $ipx800_status2 = @simplexml_load_file($IPX800_URL2);
   
   //Récupération des valeurs brutes
   $IPX800_temp_ext = (($ipx800_status1->analog3  * 0.00421386) - 50 ); 
   $IPX800_temp_cave = ((($ipx800_status2->xths01  * 175.72) / 65535) - 46.85);
   $c=($IPX800_temp_ext - $IPX800_temp_cave);
   echo $IPX800_temp_ext . "<br>";
   echo $IPX800_temp_cave . "<br>";
   echo number_format($c, 2, '.', "") . "<br>";
   if ( $c > 0) { //si la différence entre les 2 températures est positive
      $action = "ClearVI=007";
    } else { //si la différence entre les 2 températures est négative
      $action = "SetVI=007";
    }
  
    //----Envoi des données à l'IPX--------
    $URL_Push="http://" . $IPX800_IP . ":" . $IPX800_PORT . "/api/xdevices.json?" . $Key . $action;
    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);
  }

Bon courage à tous et bonne journée.
jppouma

1 « J'aime »