$noms = array('Xavier','Stephanie'); //,'Jossua','Victorine');
// variables utilisées plusieurs fois dans le bloc code
$heure = time();
$latDom = deg2rad(config::byKey('info::latitude','core')); // coordonnées domicile en rad
$lonDom = deg2rad(config::byKey('info::longitude','core')); // coordonnées domicile en rad
foreach ($noms as $nom) {
$cmd_position = '#[Déplacement][' . $nom . '][Position]#' ;
$cmd_activite = '#[Déplacement][' . $nom . '][Activité]#' ;
$cmd_vitesse = '#[Aucun]['.$nom.']['.$nom.'_Vitesse]#' ;
$cmd_distance_domicile = '#[Aucun]['.$nom.']['.$nom.'_Distance]#' ;
$cmd_distance_jour_enCours = '#[Aucun]['.$nom.']['.$nom.'_Distance_jour]#' ;
// variables necessaires au script
$var_coord_prec = $nom .'_coordonnees_gps_prec' ; // creer automatiquement
$var_time_coord_prec = $nom.'_coordonnees_gps_time_prec' ; // creer automatiquement
$var_distance_jour = $nom.'_distance_jour' ; // creer automatiquement
// recuperation des coordonnées GPS (array[0] pour la longitude, array[1] pour la lattitude
$coord_gps_actuel = explode("," , cmd::byString($cmd_position)->execCmd() ); //coordonnées GPS actuelles
$activite = cmd::byString($cmd_activite)->execCmd(); // activité
$coord_gps_prec = explode("," , $scenario->getData($var_coord_prec) ); // coordonnées GPS precedent calcul
$coord_gps_domicile = explode("," , $scenario->getData($var_coord_domicile) ); // coordonnées GPS domicile
$vitesse_prec = cmd::byString($cmd_vitesse)->execCmd() ; // vitesse precedente
// Si les coordonnées GPS n'ont pas changées - la vitesse et la distance au domicile n'ont pas changé depuis le dernier calcul
if ( $coord_gps_prec[0] == $coord_gps_actuel[0] and $coord_gps_prec[1] == $coord_gps_actuel[1] ) {
$vitesse = 0 ;
if ( $vitesse_prec != 0 ) cmd::byString($cmd_vitesse)->event($vitesse) ;
$scenario->setData($var_time_coord_prec, $heure ) ;
$scenario->setLog('Geolocalisation '.$nom.': Pas de mouvement');
}
else {
$scenario->setLog('Geolocalisation '.$nom.':'); // les coordonnées GPS ont changées, calcul de la vitesse
// Conversion des coordonnées GPS de degrés en radians
$latFrom = deg2rad($coord_gps_prec[0]);
$lonFrom = deg2rad($coord_gps_prec[1]);
$latTo = deg2rad($coord_gps_actuel[0]);
$lonTo = deg2rad($coord_gps_actuel[1]);
$earthRadius = '6371000' ;
// Calcul de la distance entre les 2 points GPS
$lonDelta = $lonTo - $lonFrom ;
$a = pow(cos($latTo) * sin($lonDelta), 2) + pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2);
$b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta);
$angle = atan2(sqrt($a), $b);
// Calcul de la vitesse en km/h
$coord_gps_time_prec = $scenario->getData($var_time_coord_prec) ;
$distance = $angle * $earthRadius ;
$vitesse = $distance / ( $heure - $coord_gps_time_prec) * 3600 / 1000 ;
if ( $vitesse < 0.5 ) $vitesse = 0 ; // Si vitesse < 0.5, vitesse == 0
elseif ( $vitesse >= 10 ) $vitesse = round($vitesse,0) ; // Si vitesse > 10 , Precision sans chiffre après la virgule
else $vitesse = round($vitesse,1) ;
// calcul de la distance faite / jour ==> enregistrement
if ( $activite != 'in_vehicle' ) {
$distance_jour = $scenario->getData($var_distance_jour) ;
$distance_jour = $distance + $distance_jour ;
$scenario->setData($var_distance_jour, $distance_jour ) ;
// enregistrment de la distance réalisée aujourdhui hors voiture
$scenario->setLog(' --> Distance du jour : '.round($distance_jour/1000,1).'km ('.$activite.')');
cmd::byString($cmd_distance_jour_enCours)->event( round($distance_jour/1000,1));
}
// calcul de la distance au domicile
$lonDelta = $lonDom - $lonTo ;
$a = pow(cos($latDom) * sin($lonDelta), 2) + pow(cos($latTo) * sin($latDom) - sin($latTo) * cos($latDom) * cos($lonDelta), 2);
$b = sin($latTo) * sin($latDom) + cos($latTo) * cos($latDom) * cos($lonDelta);
$angle = atan2(sqrt($a), $b);
$distfromdom = $angle * $earthRadius / 1000 ;
if ( $distfromdom <= 10 ) $distfromdom = round($distfromdom,1) ;
else $distfromdom = round($distfromdom,0) ;
$scenario->setLog('vitesse '.$nom.' : '.$vitesse.' km/h');
$scenario->setLog('distance '.$nom.' : '.$distfromdom.' km');
// Renseignement de la commande vitesse et distance au domicile
cmd::byString($cmd_vitesse)->event($vitesse);
cmd::byString($cmd_distance_domicile)->event($distfromdom);
$scenario->setLog(' --> Vitesse : '.$vitesse.'km/h');
$scenario->setLog(' --> Distance domicile : '.$distfromdom.'km');
$scenario->setData($var_time_coord_prec, $heure ) ; // dernier temps
$scenario->setData($var_coord_prec, $coord_gps_actuel[0].','.$coord_gps_actuel[1] ) ; // dernieres coordonnées
}
}
//init variable tous les jours
if ((date('H') == '23') and (date('i') == '59') ) {
$scenario->setLog(' -> init distance jour à 0');
$scenario->setData($var_distance_jour, 0 ) ;
}
J’avais rajouté les lignes dans le code pour raz dans le même scénario:
//init variable tous les jours
- if ((date(‹ H ›) == ‹ 23 ›) and (date(‹ i ›) == ‹ 59 ›) ) {*
- $scenario->setLog(’ → init distance jour à 0’);*
- $scenario->setData($var_distance_jour, 0 ) ;*
A défaut d’avoir un chien, j’ai sorti la poubelle
[2024-03-27 15:46:01][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2024-03-27 15:46:01][SCENARIO] - Exécution du sous-élément de type [action] : code
[2024-03-27 15:46:01][SCENARIO] Exécution d'un bloc code
[2024-03-27 15:46:01][SCENARIO] Geolocalisation Xavier:
[2024-03-27 15:46:01][SCENARIO] --> Distance du jour : 9974.3km (walking)
[2024-03-27 15:46:01][SCENARIO] vitesse Xavier : 2.2 km/h
[2024-03-27 15:46:01][SCENARIO] distance Xavier : 0.1 km
[2024-03-27 15:46:01][SCENARIO] --> Vitesse : 2.2km/h
[2024-03-27 15:46:01][SCENARIO] --> Distance domicile : 0.1km
[2024-03-27 15:46:01][SCENARIO] Geolocalisation Stephanie: Pas de mouvement
[2024-03-27 15:46:01][SCENARIO] Fin correcte du scénario
------------------------------------
[2024-03-27 15:47:01][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2024-03-27 15:47:01][SCENARIO] - Exécution du sous-élément de type [action] : code
[2024-03-27 15:47:01][SCENARIO] Exécution d'un bloc code
[2024-03-27 15:47:01][SCENARIO] Geolocalisation Xavier:
[2024-03-27 15:47:01][SCENARIO] --> Distance du jour : 9974.4km (walking)
[2024-03-27 15:47:01][SCENARIO] vitesse Xavier : 1.8 km/h
[2024-03-27 15:47:01][SCENARIO] distance Xavier : 0 km
[2024-03-27 15:47:01][SCENARIO] --> Vitesse : 1.8km/h
[2024-03-27 15:47:01][SCENARIO] --> Distance domicile : 0km
[2024-03-27 15:47:01][SCENARIO] Geolocalisation Stephanie: Pas de mouvement
[2024-03-27 15:47:01][SCENARIO] Fin correcte du scénario
voici du coup le virtuel après ce ptit tour
Merci