Notification du temps écoulé

Discussion sur la box eedomus

Re: Notification du temps écoulé

Messagepar influman » 13 Jan 2016 22:12

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;
?>
influman
 
Messages : 2324
Inscription : 30 Oct 2013

Re: Notification du temps écoulé

Messagepar puccin0 » 14 Jan 2016 11:23

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é 6657 fois

Merci de ton aide
puccin0
 
Messages : 343
Inscription : 19 Mars 2013

Re: Notification du temps écoulé

Messagepar influman » 14 Jan 2016 21:59

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
influman
 
Messages : 2324
Inscription : 30 Oct 2013

Re: Notification du temps écoulé

Messagepar puccin0 » 15 Jan 2016 10:35

Ç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 !
puccin0
 
Messages : 343
Inscription : 19 Mars 2013

[Store] Notification du temps écoulé

Messagepar influman » 02 Oct 2017 16:00

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]"
Dernière édition par influman le 02 Oct 2017 17:22, édité 1 fois.
influman
 
Messages : 2324
Inscription : 30 Oct 2013

Re: [Store] Notification du temps écoulé

Messagepar Dominic » 02 Oct 2017 16:09

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
Eedomus+ - RFXcom USB - RFPlayer - Onduleur - Clé4G - NAS Qnap - Caméras Foscam et Réolink - Modules Fibaro - Modules 433Mhz - Prises POPP - Stores orientables Somfy - Pergola bioclimatique moteurs Somfy - Impérihome
Dominic
 
Messages : 310
Inscription : 09 Sep 2016

Re: Notification du temps écoulé

Messagepar influman » 06 Oct 2017 18:44

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)
influman
 
Messages : 2324
Inscription : 30 Oct 2013

Re: Notification du temps écoulé

Messagepar loicdeschamps » 19 Jan 2018 09:49

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é 309 fois
loicdeschamps
 
Messages : 74
Inscription : 05 Avr 2016

Re: Notification du temps écoulé

Messagepar Olivepoilue » 14 Nov 2022 12:40

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 !
Eedomus+ depuis 09/17 + modules Fibaro, Zipato, Aeotec, Qubino, Sensative, Everspring, Netatmo
Olivepoilue
 
Messages : 298
Inscription : 09 Août 2017
Localisation : 77

Re: Notification du temps écoulé

Messagepar krystyan » 22 Juin 2023 11:37

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.
krystyan
 
Messages : 442
Inscription : 28 Nov 2012

Précédent

Retour vers Box eedomus

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 21 invité(s)

cron