j'essaye de coder un truc qui permettrait de déterminer les horaire de transport des prochains train ET d'utiliser une constante qui calcule le temps que tu met pour y aller PUIS d''envoyer une donnée signalant combien de temps il reste avant d’être al a bourre. Vu que c'est plus facile avec une démo je vous en donne 3
horaire de train : 10h10, 10h 20, 10h30
Tp pour aller a la gare : 8 minute
Heure actuelle : 10h09
et que le résultat donne quelque chose comme :
Partir dans
10h09 + 8 Minute = 10h17,premiere horaire 10h10 trop tard pour le premier train je passe a l'heure suivante
-----------------
10h09 + 8 Minute = 10h17. deuxieme horaire 10h20 La date est superieur a la date actuelle, donc calcul :
10h20 - 10h17 = 3 minutes. Stockage de la valeur 3 dans mémoire.
---------------------
10h09 + 8 Minute = 10h17. Troisieme horaire 10h30 La date est superieur a la date actuelle, donc calcul :
10h30 - 10h17 = 13 minutes. Stockage de la valeur 13 dans mémoire.
separateur mémoire ","
affichage du tout : "prochain train dans 3, puis 13 minutes"
update device Idx 999 =>"prochain train dans 3, puis 13 minutes"
----------------------------------------------------------------------------------------------------------------------------------
le problème c'est que je suis une bille en code. J'ai quand mémé creusé la question cet apres midi mais j'ai atteint mes limites. Voici ce que j'ai pu en tirer pour le moment.
le premier script a été trouvé sur ce forum et permet de récupérer les horaire des trains et stock la date dans un idx(dans mon cas le 176)
Code : Tout sélectionner
<?php
/*************************************************************************************/
/* ### Report MAJ information train de la Gare SNCF ### */
/* Adaptation pour domoticz papoo */
/* Développement originel par eedomusbox@gmail.com */
/* */
/*************************************************************************************/
/*-------------------------------------------- */
/*------------ Variables à éditer ------------ */
/*-------------------------------------------- */
$IPdomoticz = "192.168.1.84:8080"; //<username:password@>domoticz-ip<:port>
$periph_id = '176';
// Identifiants de l'API SNCF https://data.sncf.com/api/fr/documentation
$NbJourneys ="2"; //Nb de trains minimum par jour à afficher
$api_sncf_user = '4298c9d8-3291-43b1-96d7-a435499e8d8d';
$api_sncf_mdp = '';
$VilleDepart = 'admin:fr:93053'; //LIMOGES
$VilleArrivee = 'admin:fr:75110'; //ORLEANS
//$VilleArrivee = 'admin:132348extern'; //POITIERS
/*-------------------------------------------- */
/*--------- Fin Variables à éditer ----------- */
/*-------------------------------------------- */
$result = '';
// Récupération des paramètres de la requête : 2 methodes, une Web et une Raspberry
if (isset($_GET['trajet'])) {
$SensTrajet = $_GET['trajet'];
$rChariot = "<BR>"; //Retour à la ligne
} else {
$SensTrajet = $_SERVER['argv'][1];
$rChariot = "\n"; //Retour à la ligne
}
//******************************** Contruction du trajet *****************************/
switch ($SensTrajet) {
case 'a':
$gareDepart = $VilleDepart;
$gareArrive = $VilleArrivee;
break;
case 'r':
$gareDepart = $VilleArrivee;
$gareArrive = $VilleDepart;
break;
default:
$gareDepart = $VilleDepart;
$gareArrive = $VilleArrivee;
break;
}
//******************************** Date de heures d'exection *****************************/
date_default_timezone_set("Europe/Paris");
$date = date("Ymd\TH:i");
echo $rChariot."Date et heure d'execution: ".$date.$rChariot;
//******************************** Récupération des données *****************************/
$query = 'https://'.$api_sncf_user.'@api.sncf.com/v1/coverage/sncf/journeys?from='.$gareDepart.'&to='.$gareArrive.'&datetime='.$date.'&datetime_represents=departure&min_nb_journeys='.$NbJourneys;
echo $rChariot.'Requete: '.$query.$rChariot.$rChariot;
$response=file_get_contents($query);
$json = json_decode($response, true);
// Boucle sur les trajets
echo $rChariot."************TRAINS*************";
foreach($json['journeys'] as $trains) // Lecture des trajets
{
$dateDepart = $trains['departure_date_time']; echo $rChariot.'Heure de depart: '.$dateDepart; // Date de départ
$HeuredeDepart = substr($dateDepart,9,4); // Heure de départ
$dateArrive = $trains['arrival_date_time']; echo $rChariot."Heure d'arrive: ".$dateArrive; // Date d'arrivée
$heuredarrive = substr($dateArrive,9,4); // Heure d'arrivée
$numtrain = $trains['sections'][1]['display_informations']['headsign']; //Numero du train
echo $rChariot.'Numero de train: '.$numtrain;
if ( $trains['status'] != "" ) // Cas du train en retard
{ $retard = '';
$text = '';
echo $rChariot.'Statut du train: '.$trains['status'] ;
if ($trains['status'] == 'NO_SERVICE'){
echo $rChariot."************TRAINS*************";
continue; //Affichage du statut}
}
$numdisrup = $trains['sections'][1]['display_informations']['links'][0]['id']; //Affichage de l'ID de retard
echo $rChariot.'ID de retard: '.$numdisrup;
//Récupération des retards
$retards = $json['disruptions'];
//Recherche des retards
foreach($retards as $retard)
{ echo $rChariot.'ID de retard dans les retards: '.$retard['disruption_id'];
if ( $retard['disruption_id']== $numdisrup )
{ // Boucle sur l'ensemble des impacts du retard
foreach($retard['impacted_objects'][0]['impacted_stops'] as $impactStop)
{ if ( substr($impactStop['base_departure_time'],0,4) == $HeuredeDepart ) // Recherche du lieu que l'on veut
{
$updatetime = $impactStop['amended_departure_time']; // Nouvel Horaire
echo $rChariot.'Nouvelle heure de depart: '; echo substr($updatetime,0,2);echo substr($updatetime,2,2);
// Calcul du retard
$retard = ( substr($updatetime,0,2) * 60 + substr($updatetime,2,2) ) -
( substr($HeuredeDepart,0,2) * 60 + substr($HeuredeDepart,2,2) ); //En minutes
echo $rChariot.'Retard en mn: '.$retard; // Affichage du retard
$text = '-'.$retard.'mn, ';
break;
}
}
}
}
}
else
{ $text = ', ';} // Train est à l'heure
$result = $result.substr($HeuredeDepart,0,2).'h'.substr($HeuredeDepart,2,2).$text;
echo $rChariot."************TRAINS*************";
}
$result = substr($result,0,-2);; // Supprime les deux derniers caractères
echo $rChariot.$rChariot."Resultat: ".$result.$rChariot; // Affichage des résultats
$json_result = maj_periph($periph_id,$result); //Mise à jour Eedomus
// Fonction
function supprimer_accents($str, $encoding='ISO-8859-1')
{
// transformer les caractères accentués en entités HTML
$str = htmlentities($str, ENT_NOQUOTES, $encoding);
// remplacer les entités HTML pour avoir juste le premier caractères non accentués
// Exemple : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ...
$str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);
// Remplacer les ligatures tel que : Œ, Æ ...
// Exemple "Å“" => "oe"
$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
// Supprimer tout le reste
$str = preg_replace('#&[^;]+;#', '', $str);
// Supprimer les espaces
$str = preg_replace('/\s/', '-', $str);
return $str;
}
function maj_periph( $periphID, $val )
{
global $IPdomoticz;
global $rChariot;
// Remplacement des blancs par le code hexa
$val = str_replace(' ', '%20', $val);
// Remplacement des points virgules par le blanc
$val = str_replace(';','%20', $val);
// Remplacement des accents
$val = supprimer_accents($val);
$val = utf8_encode($val);
//Contruction de l'url Local
$url = "http://".$IPdomoticz."/json.htm?type=command";
$url .= "¶m=udevice";
$url .= "&idx=$periphID";
$url .= "&vnalue=0";
$url .= "&svalue=$val";
echo $rChariot."URL locale Mise à jour Domoticz: ".$url.$rChariot;
// Mis à jour du périphérique
$result = @file_get_contents($url);
$pos = strpos($result, '"OK"');
if ($pos === false)
{
echo $rChariot."Une erreur est survenue lors de la mise à jour [".$result."]".$rChariot;//}
}
return $result;
}
/*
/usr/bin/php /home/pi/domoticz/scripts/php/sncf.php a //pour l'aller
/usr/bin/php /home/pi/domoticz/scripts/php/sncf.php r //pour le retour
*/
?>le second est de ma conception et permet de faire un calcul differentiel pour savoir combien de minute entre 2 date puis met le resultat dans un idx.(ici il va chercher la valeur du script precedent sur l'idx 176, fait le calcul entre la date de maintenant et la date du train, puis stocke le resultat "phrasé" dans un autre idx, ici le 177
Code : Tout sélectionner
#!/usr/bin/php
<?php
$json_string = file_get_contents("http://192.168.1.84:8080/json.htm?type=devices&rid=176");
$parsed_json = json_decode($json_string, true);
$parsed_json = $parsed_json['result'][0];
$stat = $parsed_json['Data'];
$date1 = time();
$date2 = strtotime($stat);
function dateDiff($date1, $date2){
$diff = abs($date1 - $date2); // abs pour avoir la valeur absolute, ainsi éviter d'avoir une différence négative
$retour = array();
$tmp = $diff;
$retour['second'] = $tmp % 60;
$tmp = floor( ($tmp - $retour['second']) /60 );
$retour['minute'] = $tmp % 60;
$tmp = floor( ($tmp - $retour['minute'])/60 );
$retour['hour'] = $tmp % 24;
$tmp = floor( ($tmp - $retour['hour']) /24 );
$retour['day'] = $tmp;
$val = $retour['minute'].'%20Minutes%20'.$retour['minute'].'%20Secondes';
$url = "http://192.168.1.84:8080/json.htm?type=command";
$url .= "¶m=udevice";
$url .= "&idx=177";
$url .= "&vnalue=0";
$url .= "&svalue=$val";
$result = @file_get_contents($url);
return $retour;
}
print_r( dateDiff($date1, $date2) );
?>Mon problème est que je n'arrive pas a imbriquer ces deux code pour le mettre en un seul, de maniéré a ce qu'il récupéré toutes les dates que le code 1 peut lui donner.
Et mon second problème est que je ne vois pas comment faire pour lui faire comprendre de prendre seulement les résultat ou le temps est supérieur a une constante "temps de marche"
desolé si je ne suis pas clair mais c'est pas évident a expliquer.
En gros la maintenant j'arrive a le faire marcher si je n'extrait qu'une seule date de train sncf, mais je ne sais pas comment le faire marcher pour plusieurs date, ni lui faire comprendre de ne pas prendre en compte celle ou je n'aurais pas le temps d'aller jusqu’à la gare.
Si jamais vous avez une idée, a votre bon coeur messieurs dames.
Pour mieu imager le besoin, voici un prérendu que j'ai pour le moment.
En jaune , c'est deja bon, le code est ci dessus.
En Orange ce sont des constantes a mettre en debut de fichier
En rouge, ce que je cherche a obtenir.
