[Store] Horaires de trains

Discussion et échanges de scripts pour la box eedomus

[Store] Horaires de trains

Messagepar Senateur » 23 Oct 2020 10:31

Bonjour à la communauté,

J'en appelle à la bonne volonté d'un développeur de plugin d'Eedomus pour transformer un vieux script qui est toujours fonctionnel (avec quelques menues adaptations) et qui permet de récupérer les horaires de TER sur un trajet spécifié.

Le problème de ce script, c'est qu'il fait un peu bidouille. Je suis obligé de créer à la main des états actionneur et capteur pour pouvoir lancer le script et récupérer le résultat, créer une règle pour le polling.

De plus, le résultat sous forme de texte n'est pas utilisable dans une règle ce qui en limite l'intérêt. J'ai modifié le script pour obtenir le premier retard dans deux capteurs (l'un avec l'horaire initial et l'autre avec le retard en minutes). Mais le résultat n'est pas très propre je trouve.

Dans l'idéal, ce serait top d'avoir un plugin avec, en variables:
- Clé/token API SCNF
- Id de la gare de départ
- Id de la gare d'arrivée

Et en résultat
- Un état avec le libellé de la gare de départ (pas le code de la gare en paramètre)
- Un état avec le libellé de la gare d'arrivée (pas le code de la gare en paramètre)
- Un état capteur (texte) avec l'heure du prochain départ
- Un état capteur (numérique) avec le nombre de minutes de retard le cas échéant / 0 sinon.

J'imagine qu'on pourrait utiliser des xpath pour récupérer les données plutôt que le procédé du plugin.

Dans l'idéal, le prochain départ devrait se baser sur l'heure de départ mise à jour avec la prise en compte des éventuels retard.

Je vous joins l'article de domo-blog qui en parlait.

https://www.domo-blog.fr/horaires-de-train-leedomus/

Le script n'est plus disponible mais je l'ai conservé. J'essaye de le mettre en PJ. Si une âme charitable veut bien se pencher sur mon besoin, je peux également fournir mon token SNCF.

Mes compétences en programmation s'arrêtent aux bidouilles que j'ai pu apporter au plugin.

gare.zip
Script horaires trains
(2.28 Kio) Téléchargé 341 fois


Merci par avance!
Dernière édition par Senateur le 01 Nov 2020 22:29, édité 2 fois.
Senateur
 
Messages : 90
Inscription : 30 Jan 2018

Re: [suggestion de plugin] Retards TER

Messagepar merguez07 » 26 Oct 2020 21:19

que ça fasse un truc comme ça ?

Capturesncf.PNG
Capturesncf.PNG (17.81 Kio) Consulté 10239 fois
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [suggestion de plugin] Retards TER

Messagepar Senateur » 27 Oct 2020 17:25

Absolument!!
Nickel!
Merci beaucoup d'avoir pris le temps de regarder.
Senateur
 
Messages : 90
Inscription : 30 Jan 2018

Re: [suggestion de plugin] Retards TER

Messagepar merguez07 » 27 Oct 2020 20:36

ok, alors voilà le script

Code : Tout sélectionner
<?

/************************************************************************************/
/*         ### Recuperation des horaires de train de la Gare SNCF ###               */
/*                                                                                  */
/*     Version 2.0   Developpement par eedomusbox@gmail.com                         */
/*     Version 2.1   27/10/20   modification par merguez07                           */
/*                                                                                  */
/************************************************************************************/
/* [VAR1]- Cle API SCNF (https://data.sncf.com/api/fr/documentation)
   [VAR2]- Id de la gare de depart
   [VAR3]- Id de la gare d'arrivee
   lien pour trouver les id:
   https://api.sncf.com/v1/coverage/sncf/places?q=LYON
/*************************************** API eedomus ********************************/


// import des arguments

    $api_sncf_user     =   getArg('token', true  , NULL);    // [VAR1]=cle API
    $id_departure_city =   getArg('dep'  , true  , NULL);    // [VAR2]=id gare depart  ex : 26198 (Montelimar)
    $id_arrival_city   =   getArg('arr'  , true  , NULL);    // [VAR3]=id gare arrivee ex : 38185 (Grenoble)

// Remanence xml

    $id_query         = $id_departure_city.$id_arrival_city;
    $CACHE_DURATION   = 1; // minutes
    $last_xml_success = loadVariable($id_query.'last_xml_success');
    if ((time() - $last_xml_success) / 60 < $CACHE_DURATION){
        sdk_header('text/xml');
        $cached_xml = loadVariable($id_query.'cached_xml');
        echo $cached_xml;
        die();
    }

// Initialiation des variables

    $api_sncf_pwd =   '';
    $query_date   = date("Ymd\TH:i"); //date de la requête
    $query_time   = date("dmY à H:i");
    $nb_train     = 4;// nombre de train après la date de requête
    $query        = 'https://'.$api_sncf_user.'@api.sncf.com/v1/coverage/sncf/journeys?from=admin:fr:'.$id_departure_city.'&to=admin:fr:'.$id_arrival_city.'&datetime='.$query_date.'&datetime_represents=departure&min_nb_journeys='.$nb_train;

//requête

    $json       = httpQuery($query);
    $Trains     = sdk_json_decode($json, true);


//xml construct

    sdk_header('text/xml');

    foreach($Trains['journeys'] as $key => $trains) // Lecture des trajets
   {     
      $departure_time   = sdk_time($trains['departure_date_time']);        //heure du depart  (ex:18:02)
      $arrival_time     = sdk_time($trains['arrival_date_time']);          //heure d'arrivee  (ex:20:52)
      $duration         = sdk_diff_time($arrival_time,$departure_time);    //durée du trajet (ex:02:50)
        $status           = $trains['status']; //status du trajet (ok,annulé,en retard )
        if ($status=="") $status=" ";
        $status           = sdk_Message_status($status);

        $delay="00:00";    //retard HH:mm
        $nb_of_change=0;   //nombre de changement de train durant le trajet
      
      foreach($trains['sections'] as $section)
      {
          if ($section['type']==='public_transport') {
              $departure_station_name[$nb_of_change] = sdk_station_name($section['from']['name']);   //nom de la gare de depart sur la section (ex:Montelimar)
              $arrival_station_name[$nb_of_change]   = sdk_station_name($section['to']['name']);     //nom de la gare d'arrivee sur la section (ex :valence-ville)
              $time_departure[$nb_of_change]         = sdk_time($section['departure_date_time']);    //heure de depart sur la section (ex:18:02)
              $time_arrival[$nb_of_change]           = sdk_time($section['base_arrival_date_time']); //heure d'arrivee sur la section (ex:18:32)
              $train_number[$nb_of_change]           = $section['display_informations']['headsign']; //numero du train sur la section
              $nb_of_change++;
          }
      }
      $nb_of_change--;
      
      $label_change     =' Direct';
          if ($nb_of_change==1) $label_change  =  ' 1 changement';
          if ($nb_of_change>>1) $label_change  =  ' '.$nb_of_change.' changements';
      
        $departure_name = $departure_station_name[0];           // nom de la gare de depart sur le trajet (ex: Montelimar)
        $arrival_name   = $arrival_station_name[$nb_of_change]; // nom de la gare d'arrivee sur le trajet (ex : Grenoble)
        $number_train="";
            if ($nb_of_change==0) $number_train=" train N°:".$train_number[0];
        $name_trip      ="trajet ".$departure_name." à ".$departure_time."-->".$arrival_name." à ".$arrival_time."(".$duration."/".$label_change.")".$number_train;
        $xml .= "   <result".($key+1).">"                                             ."\n";
        $xml .= "       <libelle>"         .$name_trip         .'</libelle>'       ."\n";
       $xml .= "       <changement>"      .$nb_of_change      .'</changement>'    ."\n";
      $xml .= "       <ville_depart>"    .$departure_name    .'</ville_depart>'  ."\n";
      $xml .= "       <ville_arrive>"    .$arrival_name      .'</ville_arrive>'  ."\n";
      $xml .= "       <heure_depart>"    .$departure_time    .'</heure_depart>'  ."\n";
      
      
        if ( $status != "aucune anomalie" ) { // Cas d'un probleme avec le trajet (retard, annulation,...)
          $retard = '';$text = '';
         $numdisrup = $trains['sections'][1]['display_informations']['links'][0]['id']; //id du retard
         $retards   = $Trains['disruptions'];

         //Recherche des retards
         foreach($retards as $retard) {   
             if ( $retard['disruption_id']== $numdisrup ) {         
               foreach($retard['impacted_objects'][0]['impacted_stops'] as $impactStop) {
                   $scheduled_departure_time=sdk_time("xxxxxxxxx".$impactStop['base_departure_time']);
                   if ( $scheduled_departure_time ==$departure_time ) {  // Recherche du lieu que l'on veut
                     $amended_departure_time = sdk_time("xxxxxxxxx".$impactStop['amended_departure_time']); // Nouvel Horaire
                     $delay = sdk_diff_time($amended_departure_time,$scheduled_departure_time) ;
                     break;
                  }
               }
            }
         }
      }
      $xml .= "       <heure_nouveau_depart>" .$amended_departure_time   .'</heure_nouveau_depart>'  ."\n";
      $xml .= "       <heure_arrive>"         .$arrival_time             .'</heure_arrive>'  ."\n"; 
      $xml .= "       <duree>"                .$duration                 .'</duree>'         ."\n"; 
      $xml .= "       <status>"               .$status                   .'</status>'        ."\n";
      $xml .= "       <retard>"               .$delay                    .'</retard>' ."\n";
        if ($nb_of_change >0) {
            for ($a=0;$a<$nb_of_change+1;$a++) {
              $name_section = $departure_station_name[$a]." à ".$time_departure[$a]."-->".$arrival_station_name[$a]." à ".$time_arrival[$a]." (train N°:".$train_number[$a].")";
              $xml .= "           <section".($a+1).">".$name_section."</section".($a+1).">"    ."\n";
            }
        }
        $xml .= "   </result".($key+1).">"                                          ."\n";
   }

       $cached_xml = '<?xml version="1.0" encoding="utf8" ?>'."\n";
        $cached_xml .= '<result>'."\n";
        $cached_xml .= '<cache>0</cache>'."\n";
        $cached_xml .= '<duree_cache>'.$CACHE_DURATION.'</duree_cache>'."\n";
        $cached_xml .= '<date_requete>'.$query_time.'</date_requete>'."\n";
        $cached_xml .= $xml;
        $cached_xml .= '</result>'."\n";

        echo $cached_xml;

        if ($xml != '') {// non vide
            $cached_xml = str_replace('<cache>0</cache>', '<cache>1</cache>', $cached_xml);
            saveVariable($id_query.'cached_xml', $cached_xml);
            saveVariable($id_query.'last_xml_success', time());
        }
        die;

function sdk_time ($heure_sncf){
    $heure=substr($heure_sncf,9,4);
    $heure=substr($heure,0,2).':'.substr($heure,2,2);
    return $heure;
}

function sdk_station_name($nomgare_sncf){
   $nom_gare= sdk_Utf8_ansi($nomgare_sncf);
   $nom_gare=substr( $nom_gare,0,strpos( $nom_gare,'(')-1);
   return $nom_gare;
}

function sdk_Utf8_ansi($valor='') {

    $utf8_ansi2 = array(
    "\u00c0" =>"À",
    "\u00c1" =>"Á",
    "\u00c2" =>"Â",
    "\u00c3" =>"Ã",
    "\u00c4" =>"Ä",
    "\u00c5" =>"Å",
    "\u00c6" =>"Æ",
    "\u00c7" =>"Ç",
    "\u00c8" =>"È",
    "\u00c9" =>"É",
    "\u00ca" =>"Ê",
    "\u00cb" =>"Ë",
    "\u00cc" =>"Ì",
    "\u00cd" =>"Í",
    "\u00ce" =>"Î",
    "\u00cf" =>"Ï",
    "\u00d1" =>"Ñ",
    "\u00d2" =>"Ò",
    "\u00d3" =>"Ó",
    "\u00d4" =>"Ô",
    "\u00d5" =>"Õ",
    "\u00d6" =>"Ö",
    "\u00d8" =>"Ø",
    "\u00d9" =>"Ù",
    "\u00da" =>"Ú",
    "\u00db" =>"Û",
    "\u00dc" =>"Ü",
    "\u00dd" =>"Ý",
    "\u00df" =>"ß",
    "\u00e0" =>"à",
    "\u00e1" =>"á",
    "\u00e2" =>"â",
    "\u00e3" =>"ã",
    "\u00e4" =>"ä",
    "\u00e5" =>"å",
    "\u00e6" =>"æ",
    "\u00e7" =>"ç",
    "\u00e8" =>"è",
    "\u00e9" =>"é",
    "\u00ea" =>"ê",
    "\u00eb" =>"ë",
    "\u00ec" =>"ì",
    "\u00ed" =>"í",
    "\u00ee" =>"î",
    "\u00ef" =>"ï",
    "\u00f0" =>"ð",
    "\u00f1" =>"ñ",
    "\u00f2" =>"ò",
    "\u00f3" =>"ó",
    "\u00f4" =>"ô",
    "\u00f5" =>"õ",
    "\u00f6" =>"ö",
    "\u00f8" =>"ø",
    "\u00f9" =>"ù",
    "\u00fa" =>"ú",
    "\u00fb" =>"û",
    "\u00fc" =>"ü",
    "\u00fd" =>"ý",
    "\u00ff" =>"ÿ");

    return strtr($valor, $utf8_ansi2);     

}

function sdk_Message_status($message) {
   
    $message_status = array(
        "NO_SERVICE"        =>"train supprimé",
        "REDUCED_SERVICE"   =>"service réduit",
        "SIGNIFICANT_DELAYS"=>"retard",
        "DETOUR"            =>"itinéraire détourné",
        "ADDITIONAL_SERVICE"=>"arrêt supplémentaire",
        "MODIFIED_SERVICE"  =>"trajet modifié",
        "OTHER_EFFECT"      =>"autre",
        "UNKNOWN_EFFECT"    =>"inconnu",
        "STOP_MOVED"        =>"arrêt supprimé",
        " "                  =>"aucune anomalie");
    return strtr($message, $message_status);
}


 function sdk_diff_time($time_arrival, $time_departure){
     //Heures au format (hh:mm) la plus grande puis le plus petite
     
       $tab=explode(":", $time_arrival);
       $tab2=explode(":", $time_departure);
       
       $h=$tab[0];
       $m=$tab[1];
       $h2=$tab2[0];
       $m2=$tab2[1];

       if ($h2>$h) $h=$h+24;
       if ($m2>$m) {
          $m=$m+60;
          $h2++;
       }

       $ht=$h-$h2;
       $mt=$m-$m2;

       if (strlen($ht)==1) $ht="0".$ht;
       if (strlen($mt)==1) $mt="0".$mt;
       
       return $ht.":".$mt; 
     
    }

?>



pour les xpath c'est facile

Capturesncf1.PNG
Capturesncf1.PNG (125.27 Kio) Consulté 10186 fois

et pour les capteurs il faut mettre en VAR1 le token, en var2 l'ID de la gare de départ et en var3 l'ID de la gare d'arrivée

Le script est configuré pour sortir les 4 prochains trains.

Je te laisse tester et voir ce qu'on peut améliorer.
Si ça te convient, on pourra en faire un plugin
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [suggestion de plugin] Retards TER

Messagepar wistealth » 27 Oct 2020 21:25

#troll /on
#ter_name : 8349
#heure théorique :12h40
#heure théorique + random (1-50) min
# =heure d'arrivée
#troll /off
En manque d'inspiration domotique :(
lumières, volets, prises, coupure d'eau, musique, tv, chauffage, climatisation, portails, gâche électrique, imprimante Bambulab X1c, capteurs ect.... me reste pas grand chose.
wistealth
 
Messages : 155
Inscription : 28 Juin 2018

Re: [suggestion de plugin] Retards TER

Messagepar Senateur » 28 Oct 2020 08:19

Bonjour Merguez et un grand merci,

Je ne sais pas comment lier le script à un état avec variables, je l'ai donc lancé dans mon navigateur internet avec l'URL qui va bien. Ca marche très bien en passant les paramètres à l'URL (d'ailleurs, on voit ton token de l'API SNCF dans la capture d'écran en plus de celui que tu as masqué).

Dans mes suggestions pêle-mêle:

- Un bug sur la ville d'arrivée qui n'apparait pas dans le XML

- S'agissant des trains supprimés, ils apparaissent avec la balise <status>NO_SERVICE</status>

Un exemple:

<result3>
<libelle>trajet Grenoble à 09:20--> à 10:07(00:47/ Direct) train N°:17614</libelle>
<changement>0</changement>
<ville_depart>Grenoble</ville_depart>
<ville_arrive/>
<heure_depart>09:20</heure_depart>
<heure_arrive>10:07</heure_arrive>
<duree>00:47</duree>
<status>NO_SERVICE</status>
<retard>0</retard>
</result3>


C'est une information à mon sens qu'il faut pouvoir disposer dans une variable d'un état.
Donc, idéalement il faudrait effectivement disposer en plus de la gare d'arrivée, de la gare de départ, de l'heure de départ, du retard en mn le cas échéant, d'une variable avec le statut du train (à l'heure, en retard ou supprimé).

- Pour mon usage (et probablement celui de ceux qui prennent le train quotidiennement), je prends un train bien précis le matin.
Pourrait-on imaginer indiquer dans les variables du script une variable horaire qui, si elle est renseignée par l'utilisateur eedomus, va rechercher le train dont l'heure de départ correspond à celle indiquée (ou la plus proche)? Cela permettra en plus d'interroger l'API et de retrouver les informations du train en retard alors que l'heure actuelle a dépassé l'heure à laquelle le train devait initialement desservir la gare de départ.

- Cela m'amène à ma dernière remarque. J'utilise le résultat du script que j'envoie en partie à Jeedom pour faire un TTS Google le matin pour me prévenir des retards. Dans ce cas, il est intéressant d'avoir l'heure dans une version hhmm plutôt que hh:mm (pour l'utiliser dans des règles). Il est également intéressant de l'avoir en format hh:mm pour l'afficher sur un périphérique (ce que je fais avec eedomus à la fois pour l'envoi sur mon Lametric Time ou par SMS sur le trajet du soir du retour).

Merci par avance!!!

:D
Senateur
 
Messages : 90
Inscription : 30 Jan 2018

Re: [suggestion de plugin] Retards TER

Messagepar merguez07 » 28 Oct 2020 09:35

Senateur a écrit:Je ne sais pas comment lier le script à un état avec variables, je l'ai donc lancé dans mon navigateur internet avec l'URL qui va bien. Ca marche très bien en passant les paramètres à l'URL


Il ne faut pas utiliser les etats mais des capteurs HTTP

Senateur a écrit:d'ailleurs, on voit ton token de l'API SNCF dans la capture d'écran en plus de celui que tu as masqué

:D ok, j'ai modifié

Senateur a écrit:Un bug sur la ville d'arrivée qui n'apparait pas dans le XML

corrigé

Senateur a écrit:Donc, idéalement il faudrait effectivement disposer en plus de la gare d'arrivée, de la gare de départ, de l'heure de départ, du retard en mn le cas échéant, d'une variable avec le statut du train (à l'heure, en retard ou supprimé).

ben on a tout ça dans le xml, donc je ne comprends pas ta demande

Senateur a écrit:- Pour mon usage (et probablement celui de ceux qui prennent le train quotidiennement), je prends un train bien précis le matin.
Pourrait-on imaginer indiquer dans les variables du script une variable horaire qui, si elle est renseignée par l'utilisateur eedomus, va rechercher le train dont l'heure de départ correspond à celle indiquée (ou la plus proche)? Cela permettra en plus d'interroger l'API et de retrouver les informations du train en retard alors que l'heure actuelle a dépassé l'heure à laquelle le train devait initialement desservir la gare de départ.


là c'est possible mas il faut que je modifie le script afin d'avoir l'heure de depart réactualisé du retard (ce que je n'ai pas en l'état).

Senateur a écrit:J'utilise le résultat du script que j'envoie en partie à Jeedom pour faire un TTS Google le matin pour me prévenir des retards. Dans ce cas, il est intéressant d'avoir l'heure dans une version hhmm plutôt que hh:mm (pour l'utiliser dans des règles). Il est également intéressant de l'avoir en format hh:mm pour l'afficher sur un périphérique (ce que je fais avec eedomus à la fois pour l'envoi sur mon Lametric Time ou par SMS sur le trajet du soir du retour).


la mise en forme hhmm peut se faire au niveau de l'xpath, exemple :
concat(substring-before(//result1/heure_depart, ':'),substring-after(//result1/heure_depart, ':'))
ou (encore plus simple
translate(//result1/heure_depart,':','')
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [suggestion de plugin] Retards TER

Messagepar Senateur » 28 Oct 2020 09:43

Pour le train supprimé, au temps pour moi, c'est moi qui ai la détente un peu lente mais j'ai bien compris pour le coup. Idem pour le capteur HTTP.

Je me pose une dernière question. Si je multiplie les capteurs, je multiplie les appels à l'API SNCF (bon on est tout de même limités à 5000 requêtes par jour). Est-ce que cela est possible de stocker en mémoire interne le xml pour renvoyer les valeurs de ce XML, lorsque le dernier appel de l'API est récent?

Bon ben ça me semble nickel pour moi. Je vais déjà fonctionner sur la base de ton script remanié, mais effectivement, je pense que ça pourrait servir à d'autres que moi.

Merci beaucoup

;)
Senateur
 
Messages : 90
Inscription : 30 Jan 2018

Re: [suggestion de plugin] Retards TER

Messagepar merguez07 » 28 Oct 2020 10:05

Senateur a écrit:Je me pose une dernière question. Si je multiplie les capteurs, je multiplie les appels à l'API SNCF (bon on est tout de même limités à 5000 requêtes par jour). Est-ce que cela est possible de stocker en mémoire interne le xml pour renvoyer les valeurs de ce XML, lorsque le dernier appel de l'API est récent?



c'est une bonne remarque et je prevoyais de rajouter effectivement une "remanence xml".
Je m'en occupe

Pour le plugin il faudra que je complète le code pour permettre à l'installation de choisir les gares de manière plus conviviale. Donc il y a encore du boulot
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [suggestion de plugin] Retards TER

Messagepar merguez07 » 28 Oct 2020 10:47

Senateur a écrit:
Je me pose une dernière question. Si je multiplie les capteurs, je multiplie les appels à l'API SNCF (bon on est tout de même limités à 5000 requêtes par jour). Est-ce que cela est possible de stocker en mémoire interne le xml pour renvoyer les valeurs de ce XML, lorsque le dernier appel de l'API est récent?



merguez07 a écrit:
c'est une bonne remarque et je prevoyais de rajouter effectivement une "remanence xml".
Je m'en occupe


fait
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [suggestion de plugin] Retards TER

Messagepar Senateur » 28 Oct 2020 11:31

Ca tourne, nickel!

J'ai regardé un peu le code. De ce que je comprends, le cache est de 5 minutes.

En revanche, si j'ai plusieurs trajets implémentés avec différents capteurs HTTP comprenant des gare d'arrivées et de départs différentes, le script risque de retourner les informations de l'autre trajet.

Ce n'est pas un cas d'école, puisque je prévois pour ma part d'avoir le trajet aller et le trajet retour.

Pour éviter ça, on pourrait peut être ajouter dans le XML mis en cache, les VAR2 et VAR3 pour pouvoir les comparer avec la VAR2 et VAR3 de la requête actualisée ?

Si VAR2 et VAR3 sont différents, alors on fait une nouvelle requête de l'API.

Qu'est-ce que tu en penses ?

Sinon, j'ai trouvé quelques icônes libres de droit qui pourraient être utiles (PJ).



:?:
Pièces jointes
Icônes train.zip
(194.91 Kio) Téléchargé 314 fois
Senateur
 
Messages : 90
Inscription : 30 Jan 2018

Re: [suggestion de plugin] Retards TER

Messagepar merguez07 » 28 Oct 2020 13:17

Senateur a écrit:J'ai regardé un peu le code. De ce que je comprends, le cache est de 5 minutes.


oui

Senateur a écrit:En revanche, si j'ai plusieurs trajets implémentés avec différents capteurs HTTP comprenant des gare d'arrivées et de départs différentes, le script risque de retourner les informations de l'autre trajet.


bien vu. J'ai corrigé

Merci pour les icones. Je vais voir comment mettre tout ça en musique :D
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [suggestion de plugin] Retards TER

Messagepar Senateur » 28 Oct 2020 13:24

Merci à toi :D :)

C'est super sympa venant d'un résidant du seul département français où ne circule aucun train (hors les petits trains touristiques).

Je complète la collection d'icônes.

S'agissant de la balise status qui identifie les anomalies sur le trains, les différentes valeurs sont en anglais. Serait-il possible des les transcoder en fonction de la table de correspondance jointe ?

NO_SERVICE : train supprimé
REDUCED_SERVICE : service réduit
SIGNIFICANT_DELAYS : retard
DETOUR : itinéraire détourné
ADDITIONAL_SERVICE : arrêt supplémentaire
MODIFIED_SERVICE : trajet modifié
OTHER_EFFECT : autre
UNKNOWN_EFFECT : inconnu
STOP_MOVED : arrêt supprimé
Et si la balise est vide : aucune anomalie

(L'API SNCF se base sur l'API Natia.io https://doc.navitia.io/#journeys)
Pièces jointes
icônes trains.zip
Icônes trains
(273.68 Kio) Téléchargé 313 fois
Senateur
 
Messages : 90
Inscription : 30 Jan 2018

Re: [suggestion de plugin] Retards TER

Messagepar merguez07 » 28 Oct 2020 15:11

Senateur a écrit:NO_SERVICE : train supprimé
REDUCED_SERVICE : service réduit
SIGNIFICANT_DELAYS : retard
DETOUR : itinéraire détourné
ADDITIONAL_SERVICE : arrêt supplémentaire
MODIFIED_SERVICE : trajet modifié
OTHER_EFFECT : autre
UNKNOWN_EFFECT : inconnu
STOP_MOVED : arrêt supprimé
Et si la balise est vide : aucune anomalie


c'est bon, j'ai intégré
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [suggestion de plugin] Retards TER

Messagepar Senateur » 28 Oct 2020 15:15

;)
Senateur
 
Messages : 90
Inscription : 30 Jan 2018

Re: [suggestion de plugin] Retards TER

Messagepar merguez07 » 01 Nov 2020 10:21

j'ai crée le plugin "trains" dans le store

Bon c'est un premier jet. Les icones sont perfectibles mais pour le 1.0 ça ira bien

il permet :
-de donner l'heure du prochain train du trajet choisi,
-en temps réel,
-ou selon un horaire de départ choisit
- ou selon un jour choisit
-de donner les retard au départ et à l'arrivée
-de donner le temps total du trajet

On pourra y associer des règles pour informer par exemple l'utilisateur d'un retard

A tester sans modération
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [suggestion de plugin] Retards TER

Messagepar Senateur » 01 Nov 2020 11:33

Bonjour Merguez,

C'est installé et paramétré pour mes horaires de train habituels.

Merci beaucoup d'avoir ajouté l'horaire souhaité. Je testerai ça en situation réelle à partir de demain.

Dans les options pour la journée souhaitée, il est peut être possible de choisir semaine / we en plus du jour de la semaine ?
Senateur
 
Messages : 90
Inscription : 30 Jan 2018

Re: [suggestion de plugin] Retards TER

Messagepar merguez07 » 01 Nov 2020 11:50

Senateur a écrit:Dans les options pour la journée souhaitée, il est peut être possible de choisir semaine / we en plus du jour de la semaine ?


tout est possible. peut être que 7 cases à cocher pour chaque jour désiré serait plus judicieux ?
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2351
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: [Store] Horaires de trains

Messagepar Senateur » 01 Nov 2020 12:44

En effet!
Senateur
 
Messages : 90
Inscription : 30 Jan 2018

Re: [Store] Horaires de trains

Messagepar galaksy2001 » 06 Nov 2020 22:47

Merci beaucoup ! Je teste ce weekend ;)
galaksy2001
 
Messages : 727
Inscription : 06 Jan 2014

Suivant

Retour vers Scripts & Périphériques du store

Qui est en ligne ?

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