par opa95 » 24 Juil 2022 17:16
Bonjour eido
La réponse est dans le post du 28 septembre 2021
https://forum.eedomus.com/viewtopic.php?f=50&t=3421&start=140#p100405.
La version 1.11 du script n'a pas été corrigée, je vais le signaler aux auteurs.
En attendant, tu peux utiliser la version ci-jointe, qui va renvoyer 0 ou 100 à ton widget d'état, sans qu'il y ait de problème de passage à 0 temporaire.
Si tu as des problèmes, dis le moi.
- Code : Tout sélectionner
<?php
$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>";
//***********************************************************************************************************************
// V1.0 : Script qui fournit l'etat des ouvertures parametrees et le message vocal associe : Influman & Madoma73
// V1.1 : Version sans appel API à l'utilisation
// V1.11 : enregistrement du tableau des ouvertures en mémoire (4 avril 2019)
// V1.12 : correction bug : lignes 49/55 (double setValue), sortie possible //ALARME et //NBCAPTEURS ouverts Opa95
//*************************************** API eedomus ******************************************************************
//*************************************** Messages personnels***********************************************************
$msg_allclosed = "Apres vérification, tout est bien fermé"; // permet de gérer les traductions dans d'autres langues
$msg_open = "Je detecte que"." "; // permet de gérer les traductions dans d'autres langues
$tabouvertures = array();
$mode = getArg("mode");
if ($mode == 'list')
{
$url = "https://api.eedomus.com/get?api_user=API_USER&api_secret=API_SECRET&action=periph.list";
$periph_list = sdk_json_decode(utf8_encode(httpQuery($url,'GET')));
foreach($periph_list["body"] as $device)
{
if (
$device['usage_id'] == 10 // Porte
|| $device['usage_id'] == 11 // Fenêtre
|| $device['usage_id'] == 12 // Portail
)
{
$device_list .= $device['periph_id'].",";
$devices_names .= $device['periph_id']." = ".utf8_decode($device['name'])."<br>";
}
}
$device_list = trim($device_list, ",");
echo "Votre liste de contacteurs :"."<br>"."<br>";
echo "<input id=\"device_list\" type=\"text\" size=\"100\" name=\"device_list\" value=\"$device_list\" onclick=\"this.select();\" >";
echo "<br>"."<br>";
echo $devices_names;
die();
}
// recuperation des ID depuis la requete
$periphs = getArg("periphIds", $mandatory = true, $default = '');
$resultPeriphId = getArg("resultPeriphId", $mandatory = false, $default = '');
$tabPeriphs = explode(",", $periphs);
$alarme = 0;//Opa95
/* Opa95 eviter le changement d'etat
//reset de l'indicateur 'portes ouverte'
if ($resultPeriphId)
{
setValue($resultPeriphId, 0);
}
*/ //Opa95
// recuperation du nom des peripheriques
foreach($tabPeriphs as $periphId)
{
//$urlValue = $urlBase.$periphId;
$arrValue = getValue($periphId, /*$value_text*/ true);
$tabouvertures[] = array("NAME" => $arrValue["full_name"], "API" => $periphId, "ETAT" => $arrValue["value"], "ETAT_TXT" => $arrValue["value_text"]);
}
//**********************************************************************************************************************
$xml .= "<OUVERTURES>";
$idoors = 1;
$nbouvert = 0;
$annonce = $msg_allclosed;
saveVariable("OUVERTURES", $tabouvertures);
foreach($tabouvertures as $ouvertures) {
$arrValue = $ouvertures["ETAT"];
if ($arrValue <> 0) {
$ouvertures["ETAT"] = 1;
$nbouvert++;
if ($nbouvert == 1) {
$annonce = $msg_open.$ouvertures["NAME"];
}
else {
$annonce = $annonce." "."et"." ".$ouvertures["NAME"];
}
}
$xml .= "<OUVERTURE_".$idoors."><TYPE>".$ouvertures["NAME"]."</TYPE>";
$xml .= "<ETAT>".$ouvertures["ETAT_TXT"]."</ETAT></OUVERTURE_".$idoors.">\n";
$idoors++;
}
if ($nbouvert == 1) {
$annonce .= " "."est ouverte.";
} else if ($nbouvert > 1) {
$annonce .= " "."sont ouvertes.";
}
if (($nbouvert > 0) && $resultPeriphId)
{
$alarme = 100;
}
if ($resultPeriphId) {// Opa95
setValue($resultPeriphId, $alarme);
}
$xml .= "<MESSAGE>".$annonce."</MESSAGE>";
$xml .= PHP_EOL."<NBOUVERT>".$nbouvert."</NBOUVERT>".PHP_EOL; //Opa95
$xml .= "<ALARME>".$alarme."</ALARME>".PHP_EOL; //Opa95
$xml .= "</OUVERTURES>";
sdk_header('text/xml');
echo $xml;
?>
eedomus+, Zibase V1, RFP1000, RFXcom, RadioDriver CPL 630 X2D, capteurs puissance OWL, thermometres Oregon, téléinfo (USB Linky), detecteurs ouverture X2D, pilotage chauffage X2D, Ecoflow River PRO, PAC Shogun (Atlantic-Cozytouch)