Forum eedomus
http://forum.eedomus.fr/

Notification du temps écoulé
http://forum.eedomus.fr/viewtopic.php?f=14&t=3454
« Précédent  Page 2 sur 2
Auteur:  influman [ 13 Jan 2016 22:12 ]
Sujet du message:  Re: Notification du temps écoulé

Tu as un caractère chelou en tête de ta première ligne.
Tu utilises un éditeur de texte particulier ?
Enregistre le dans le bloc-notes de windows avec encodage UTF-8.

J'obtiens bien :
Code : Tout sélectionner
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<ETATS>
<ETAT_1>
<TIMING>3 heures, 51 minutes</TIMING>
<MESSAGE>Fermée depuis 3 heures, 51 minutes</MESSAGE>
</ETAT_1>
<ETAT_2>
<TIMING>29 jours, 22 heures, 11 minutes</TIMING>
<MESSAGE>Ouvert depuis 29 jours, 22 heures, 11 minutes</MESSAGE>
</ETAT_2>
</ETATS>


avec le script :
Code : Tout sélectionner
<?php
   $xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";      
   //**********************************************************************************************************************
   // V1.0 : Script qui fournit le temps passé en j/h/mn dans la dernière valeur des états de la liste définie
   //*************************************** API eedomus ******************************************************************
   $api_user = "XXXXXX";
   $api_secret = "yyyyyyyyyyyyyy";
   //*************************************** Tableau des états *******************************************************
        $tabetats = array(1 => "123456", 2 => "123456");
   //**********************************************************************************************************************
   $xml .= "<ETATS>";
   $ietat = 1;
   foreach($tabetats as $periphid) {
      $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_change", $arrValue->body)) {
         list($an,$mo,$jo,$he,$mi,$se)=sscanf($arrValue->body->last_value_change,"%d-%d-%d %d:%d:%d");
         $timestamp=mktime($he,$mi,$se,$mo,$jo,$an);
         $difference = time()-$timestamp;
         $jour = floor($difference/86400);
          $reste1 = ($difference%86400);
          $heure = floor($reste1/3600);
         $reste2 = ($reste1%3600);
         $minute = floor($reste2/60);
         $xml .= "<ETAT_".$ietat."><TIMING>";
         $timing = "";
         if ($jour > 1) {
            $timing .= $jour." jours, ";
         }
         else if ($jour == 1) {
            $timing .= $jour." jour, ";
         }
         if ($heure > 1) {
            $timing.= $heure." heures, ";
         }
         else if ($heure == 1) {
            $timing .= $heure." heure, ";
         }
         if ($minute > 1) {
            $timing .= $minute." minutes";
         }
         else if ($minute == 1) {
            $timing .= $minute." minute";
         }   
         if ($timing == "") {
                 $timing = "moins d'une minute";
         }
         $xml .= $timing."</TIMING>";
         $xml .= "<MESSAGE>".$arrValue->body->last_value_text." depuis ".$timing."</MESSAGE>";
         $xml .= "</ETAT_".$ietat.">";
      }
      $ietat++;
   }
   $xml .= "</ETATS>";
   header("Content-Type: text/xml");
   echo $xml;
?>
Auteur:  puccin0 [ 14 Jan 2016 11:23 ]
Sujet du message:  Re: Notification du temps écoulé

influman a écrit:Tu as un caractère chelou en tête de ta première ligne.
Tu utilises un éditeur de texte particulier ?
Enregistre le dans le bloc-notes de windows avec encodage UTF-8.

J'obtiens bien :
Code : Tout sélectionner
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<ETATS>
<ETAT_1>
<TIMING>3 heures, 51 minutes</TIMING>
<MESSAGE>Fermée depuis 3 heures, 51 minutes</MESSAGE>
</ETAT_1>
<ETAT_2>
<TIMING>29 jours, 22 heures, 11 minutes</TIMING>
<MESSAGE>Ouvert depuis 29 jours, 22 heures, 11 minutes</MESSAGE>
</ETAT_2>
</ETATS>


avec le script :
Code : Tout sélectionner
<?php
   $xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";      
   //**********************************************************************************************************************
   // V1.0 : Script qui fournit le temps passé en j/h/mn dans la dernière valeur des états de la liste définie
   //*************************************** API eedomus ******************************************************************
   $api_user = "XXXXXX";
   $api_secret = "yyyyyyyyyyyyyy";
   //*************************************** Tableau des états *******************************************************
        $tabetats = array(1 => "123456", 2 => "123456");
   //**********************************************************************************************************************
   $xml .= "<ETATS>";
   $ietat = 1;
   foreach($tabetats as $periphid) {
      $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_change", $arrValue->body)) {
         list($an,$mo,$jo,$he,$mi,$se)=sscanf($arrValue->body->last_value_change,"%d-%d-%d %d:%d:%d");
         $timestamp=mktime($he,$mi,$se,$mo,$jo,$an);
         $difference = time()-$timestamp;
         $jour = floor($difference/86400);
          $reste1 = ($difference%86400);
          $heure = floor($reste1/3600);
         $reste2 = ($reste1%3600);
         $minute = floor($reste2/60);
         $xml .= "<ETAT_".$ietat."><TIMING>";
         $timing = "";
         if ($jour > 1) {
            $timing .= $jour." jours, ";
         }
         else if ($jour == 1) {
            $timing .= $jour." jour, ";
         }
         if ($heure > 1) {
            $timing.= $heure." heures, ";
         }
         else if ($heure == 1) {
            $timing .= $heure." heure, ";
         }
         if ($minute > 1) {
            $timing .= $minute." minutes";
         }
         else if ($minute == 1) {
            $timing .= $minute." minute";
         }   
         if ($timing == "") {
                 $timing = "moins d'une minute";
         }
         $xml .= $timing."</TIMING>";
         $xml .= "<MESSAGE>".$arrValue->body->last_value_text." depuis ".$timing."</MESSAGE>";
         $xml .= "</ETAT_".$ietat.">";
      }
      $ietat++;
   }
   $xml .= "</ETATS>";
   header("Content-Type: text/xml");
   echo $xml;
?>


J'utilise l'éditeur de texte du Syno...
J'ai changé l'encodage et je n'ai plus le signe chelou du début
<?xml version="1.0" encoding="UTF-8" ?><ETATS></ETATS>
En revanche je n'ai pas de résultat...

Dans ton php ici:
$tabetats = array(1 => "123456", 2 => "123456");
c'est bien le n°du périphérique à renseigner?
Sans titre.jpg
Sans titre.jpg (57.53 Kio) Consulté 6752 fois

Merci de ton aide
Auteur:  influman [ 14 Jan 2016 21:59 ]
Sujet du message:  Re: Notification du temps écoulé

ton code fonctionne, c'est juste que le résultat est vide parce qu'aucun périphérique n'est sélectionné.
Oui, tu mets dans le tableau la liste des codes api des périphériques pour lesquels tu voudras récupérer le temps écoulé depuis la dernière valeur.

Si tu en as qu'un seul à récupérer, d'API 123456 tu mets :
$tabetats = array(1 => "123456");

et le xpath /ETATS/ETAT_1/MESSAGE
Auteur:  puccin0 [ 15 Jan 2016 10:35 ]
Sujet du message:  Re: Notification du temps écoulé

Ça marche super! Merci beaucoup :-)

Une chose bizarre, pour mon essai le code de mon périphérique était bon mais je n'ai pas de retour dans le xml.

Avec un autre périphérique c'est tout bon ;-)

Merci à toi influman !
Auteur:  influman [ 02 Oct 2017 16:00 ]
Sujet du message:  [Store] Notification du temps écoulé

Le plugin est dans le store : "Délai écoulé depuis..."

A l'installation, vous sélectionnez le périphérique à mesurer, et cela crée :
- un périphérique capteur qui donne le temps écoulé en littéral : Fermé depuis 5 heures, 10 minutes
- un périphérique capteur qui donne le temps écoulé en mn : 310

Les deux capteurs se mettent à jour toutes les mn.

L'usage pourrait être le suivant dans une règle :
- Si portail EST ouvert
- ET délai écoulé portail devient maintenant égal = 10 mn
- Alors fermer le portail
- Notification : "Le portail est [LAST_VALUE_ID=API du délai en littéral]"
Auteur:  Dominic [ 02 Oct 2017 16:09 ]
Sujet du message:  Re: [Store] Notification du temps écoulé

influman a écrit:Le plugin est dans le store : "Délai écoulé depuis..."

A l'installation, vous sélectionnez le périphérique à mesurer, et cela crée :
- un périphérique capteur qui donne le temps écoulé en littéral : Fermé depuis 5 heures, 10 minutes
- un périphérique capteur qui donne le temps écoulé en mn : 310

Les deux capteurs se mettent à jour toutes les mn.

L'usage pourrait être le suivant dans une règle :
- Si portail EST ouvert
- ET délai écoulé portail >= 10 mn
- Alors fermer le portail
- Notification : "Le portail est [LAST_VALUE_ID=API du délai en littéral]"


Bonjour,

Merci Influman pour ce plugin !! Il ouvre plein de nouvelles possibilités de gestions et en domotique, c'est particulièrement utile :P .

Merci
Dominic
Auteur:  influman [ 06 Oct 2017 18:44 ]
Sujet du message:  Re: Notification du temps écoulé

Le Plugin vient d'être mis à jour pour éviter les appels API.
Ceux qui l'ont déjà téléchargé doivent le réinstaller (s'ils veulent éviter la surcharge API)
Auteur:  loicdeschamps [ 19 Jan 2018 09:49 ]
Sujet du message:  Re: Notification du temps écoulé

Bonjour

voici la version corrigée, elle permet d'afficher correctement les accents

Loïc

Pièces jointes:
gettiming.zip
(1.06 Kio) Téléchargé 314 fois
Auteur:  Olivepoilue [ 14 Nov 2022 12:40 ]
Sujet du message:  Re: Notification du temps écoulé

salut à tous
estce qu'il existe un moyen de déclencher une alerte lorsque la consommation d'un périphérique est inférieure à une certaine valeur (mais pas 0 car appareil en veille), et de depuis 2 minutes ?

j'ai une règle qui se déclenche quand la conso devient inférieure à une valeur mais comme mon appareil fait des minipauses de 5 secondes, la règle se déclenche tout le temps et je ne veux être prévenu qu'une fois, en fin de cycle.
merci d'avance !
Auteur:  krystyan [ 22 Juin 2023 11:37 ]
Sujet du message:  Re: Notification du temps écoulé

Bonjour
J'ai crée il y a un certain temps deux périphériques réseaux à l'aide du script gettiming.
Aujourd'hui je voudrais les supprimer mais ils n’apparaissent pas dans la liste configuration.
J'ai recrée aujourd'hui un nouveau périphérique réseau avec gettiming et il apparait bien dans la liste configuration à la rubrique périphérique réseau.
Comment se fait-il que les deux premiers périphériques n’apparaissent pas et comment les supprimer ?
Merci de votre aide.
Page 2 sur 2 Le fuseau horaire est UTC+1 heure