1/ Il vous faut au préalable mettre vos codes API, et modifier le tableau des ouvertures pour chacun des cas de votre habitat
2/ Le script est au format PHP pour serveur classique (testé sur synology), il doit bien y avoir un bon samaritain sur le forum qui doit pouvoir le mettre à jour pour qu'il fonctionne au sein des scripts eedomus directement. A mon avis, il y a peu de changement.
3/ Cela génère un xml, il vous faut donc créer un capteur http, avec l'appel au script http://IP/getOuvertures.php, et le XPATH /OUVERTURES/MESSAGE pour avoir le message donc
4/ Mettez une mise à jour à 0 mn pour ce capteur http (polling)
5/ Créez une règle qui, à chaque fois qu'une de vos ouvertures devient ouverte ou fermée (change de valeur), met à jour le capteur http. Ainsi, à chaque changement d'état, le message indique ce qui est ouvert, précisément.
6/ Pour ceux qui ont un test à faire lors d'un armement alarme ou autre, il suffit de tester si au moins une des ouvertures est ouverte, et si oui, vous pouvez faire lire le message du capteur http.
7/ Si vous utilisez le bloc-notes, pensez à enregistrer le fichier php en encodage UTF-8
Version initiale "Script sur serveur déporté" :
- 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
//*************************************** API eedomus ******************************************************************
$api_user = "XXXXXX";
$api_secret = "xxxxxxxxxxxxxxxx";
//*************************************** Messages personnels***********************************************************
$msg_allclosed = "Apres vérification, tout est bien fermé";
$msg_open = "Je detecte que ";
//*************************************** Tableau des ouvertures *******************************************************
$tabouvertures = array(1 => array("TYPE" => "la porte du garage", "API" => "AAAAAA", "ETAT" => 0),
2 => array("TYPE" => "la fenêtre de la chambre de Louis", "API" => "BBBBBB", "ETAT" => 0));
$nbouvertures = 2;
//**********************************************************************************************************************
$xml .= "<OUVERTURES>";
$idoors = 1;
$nbouvert = 0;
$annonce = $msg_allclosed;
foreach($tabouvertures as $ouvertures) {
$periphid = $ouvertures["API"];
$urlValue = "https://api.eedomus.com/get?action=periph.caract&periph_id=".$periphid."&api_user=".$api_user."&api_secret=".$api_secret;
$arrValue = json_decode(utf8_encode(file_get_contents($urlValue)));
if(array_key_exists("body", $arrValue) && array_key_exists("last_value", $arrValue->body)) {
if ($arrValue->body->last_value == 0) {
$ouvertures["ETAT"] = 0;
}
else {
$ouvertures["ETAT"] = 1;
$nbouvert++;
if ($nbouvert == 1) {
$annonce = $msg_open.$ouvertures["TYPE"];
}
else {
$annonce = $annonce." et ".$ouvertures["TYPE"];
}
}
$xml .= "<OUVERTURE_".$idoors."><TYPE>".$ouvertures["TYPE"]."</TYPE>";
$xml .= "<ETAT>".$ouvertures["ETAT"]."</ETAT></OUVERTURE_".$idoors.">";
}
$idoors++;
}
if ($nbouvert == 1) {
$annonce .= " est ouverte.";
} else if ($nbouvert > 1) {
$annonce .= " sont ouvertes.";
}
$xml .= "<MESSAGE>".$annonce."</MESSAGE>";
$xml .= "</OUVERTURES>";
header("Content-Type: text/xml");
echo $xml;
?>
Nouvelle version de Madoma73 "Script intégrable dans l'eedomus" :
- 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
//*************************************** API eedomus ******************************************************************
//*************************************** Messages personnels***********************************************************
$urlBase="http://api.eedomus.com/get?api_user=API_USER&api_secret=API_SECRET&action=periph.caract&periph_id=";
$msg_allclosed = "Apres vérification, tout est bien fermé";
$msg_open = "Je detecte que ";
$tabouvertures=array();
// recuperation des ID depuis la requete
$periphs=getArg("periphIds", $mandatory = true, $default = '');
$resultPeriphId=getArg("resultPeriphId", $mandatory = false, $default = '');
$tabPeriphs=explode(",", $periphs);
//reset de l'indicateur 'portes ouverte'
if ($resultPeriphId)
{
SetValue($resultPeriphId, 0);
}
// recuperation du nom des peripheriques
foreach($tabPeriphs as $periphId)
{
$urlValue = $urlBase.$periphId;
$arrValue = sdk_json_decode(utf8_encode(httpQuery($urlValue,'GET')));
$name=utf8_decode($arrValue["body"]["name"]);
$lastValue=utf8_decode($arrValue["body"]["last_value"]);
$tabouvertures[]=array("NAME" => $name, "API" => $periphId, "ETAT" => $lastValue);
}
//**********************************************************************************************************************
$xml .= "<OUVERTURES>";
$idoors = 1;
$nbouvert = 0;
$annonce = $msg_allclosed;
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"]."</ETAT></OUVERTURE_".$idoors.">\n";
$idoors++;
}
if ($nbouvert == 1) {
$annonce .= " est ouverte.";
} else if ($nbouvert > 1) {
$annonce .= " sont ouvertes.";
}
if (($nbouvert > 0) && $resultPeriphId)
{
SetValue($resultPeriphId, 100);
}
$xml .= "<MESSAGE>".$annonce."</MESSAGE>";
$xml .= "</OUVERTURES>";
sdk_header('text/xml');
echo $xml;
?>
dans le champ URL, le script peut être appeler de deux manières différentes
soit:
[*]http://localhost/script/?exec=EtatOuverture.php&periphIds=1,2,3
[*]http://localhost/script/?exec=EtatOuverture.php&periphIds=1,2,3&resultPeriphId=4
la deuxième manière nécessitant de créer un nouveau périphérique de type état (usage détecteur d'ouverture) qui permet de faire des règles plus faciles à mon goût, ce périphérique est "ouvert" si au moins des portes déclarées l'est et fermé sinon.
Les deux versions sont récupérables en zip sur le GitHub :
https://github.com/influman/eedomus_getOuvertures
[Store] ************************
Depuis fin septembre 2017, le script est directement accessible en plugin via le store eedomus.
Par défaut, la mise à jour du capteur est automatique toutes les mn (polling = 1).
Pour une mise à jour en temps-réel, il vous faut suivre les étapes 4) et 5) ci-dessus
**********************************