Hello
@ngrataloup
Suite a nos échanges, je te confirme que tous c’est mis en place une fois que je me suis éloigné de mon domicile.
Hello
@ngrataloup
Suite a nos échanges, je te confirme que tous c’est mis en place une fois que je me suis éloigné de mon domicile.
Bonjour,
Un grand merci pour le partage je viens de le mettre en place.
Par contre j’ai une petite question, lors du calcul de la distance au domicile, pourquoi on utilse la position GPS précédente ?
Il ne faudrait pas calculer la distance via la position actuelle ?
$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);
Un grand merci en tout cas.
Je crois que tu as totalement raison. Sans doute un copier/coller malheureux.
Je regarde ça et corrige le post !
Merci pour le retour
EDIT : correction effectuée dans le post initial (bloc code du scenario principal)
Hello
@ngrataloup , dis moi avec la correction tu as pas de souci de remonté avec
"Distance du jour "
Car moi sur mes trois Gsm il reste bloqué :
------------------------------------
[2022-02-26 16:01:01][SCENARIO] Lancement du scénario en mode synchrone
[2022-02-26 16:01:01][SCENARIO] Start : Scénario exécuté automatiquement sur programmation.
[2022-02-26 16:01:01][SCENARIO] Exécution du sous-élément de type [action] : code
[2022-02-26 16:01:01][SCENARIO] Exécution d'un bloc code
[2022-02-26 16:01:01][SCENARIO] Geolocalisation Aline: Pas de mouvement
[2022-02-26 16:01:01][SCENARIO] Geolocalisation Mikaël:
[2022-02-26 16:01:01][SCENARIO] --> Distance du jour : 10995.6km (still)
[2022-02-26 16:01:01][SCENARIO] --> Vitesse : 0km/h
[2022-02-26 16:01:01][SCENARIO] --> Distance domicile : 4.9km
[2022-02-26 16:01:01][SCENARIO] Fin correcte du scénario
------------------------------------
------------------------------------
[2022-02-26 16:39:01][SCENARIO] Lancement du scénario en mode synchrone
[2022-02-26 16:39:01][SCENARIO] Start : Scénario exécuté automatiquement sur programmation.
[2022-02-26 16:39:01][SCENARIO] Exécution du sous-élément de type [action] : code
[2022-02-26 16:39:01][SCENARIO] Exécution d'un bloc code
[2022-02-26 16:39:01][SCENARIO] Geolocalisation Aline: Pas de mouvement
[2022-02-26 16:39:01][SCENARIO] Geolocalisation Mikaël:
[2022-02-26 16:39:01][SCENARIO] --> Vitesse : 88km/h
[2022-02-26 16:39:01][SCENARIO] --> Distance domicile : 3.1km
[2022-02-26 16:39:01][SCENARIO] Fin correcte du scénario
------------------------------------
------------------------------------
[2022-02-26 16:51:01][SCENARIO] Lancement du scénario en mode synchrone
[2022-02-26 16:51:02][SCENARIO] Start : Scénario exécuté automatiquement sur programmation.
[2022-02-26 16:51:02][SCENARIO] Exécution du sous-élément de type [action] : code
[2022-02-26 16:51:02][SCENARIO] Exécution d'un bloc code
[2022-02-26 16:51:02][SCENARIO] Geolocalisation Aline: Pas de mouvement
[2022-02-26 16:51:02][SCENARIO] Geolocalisation Mikaël:
[2022-02-26 16:51:02][SCENARIO] --> Distance du jour : 10995.6km (still)
[2022-02-26 16:51:02][SCENARIO] --> Vitesse : 1.1km/h
[2022-02-26 16:51:02][SCENARIO] --> Distance domicile : 0km
[2022-02-26 16:51:02][SCENARIO] Geolocalisation AbriSud: Pas de mouvement
[2022-02-26 16:51:02][SCENARIO] Fin correcte du scénario
Comme tu peux le voir (Still) reste bloqué sur 10995Kms
Pas de souci de mon coté
As-tu bien mis en place le scenario de réinitialisation de cet indicateur ?
Comme ca je ne vois pas trop, mets moi en MP le bloc code du scenario et sceenshot des variables + screenshot de la première page du scenario
Ton petit bout de code pour remettre à 0 la variable $var_distance_jour se trouve dans une boucle SI qui n’est utilisée que lorsque les coordonnées GPS changent … Or , à 23h59, sous la couette, ca ne doit pas trop changer
Mets les quelques lignes transmises par @chris94440 tout à la fin, à l’extérieur du SI
//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 suivre demain matin, alors.
Lance éventuellement le scénario manuellement pour t’assurer que tu n’as pas de {} en trop ( c’est toujours ma crainte quand je déplace des bouts de code.
Re,
Ok , par contre bizarre qu’avant cela fonctionné au debut , apres mes quelques souci quand tu m’a aidé.
Car ensuite je n’est plus touché au scénario, si ce n’est qu’une mise jeedom a eu lieu entre temps …
Oui en effet j’avais fait une petite erreur et j’ai oublié de republier…dsl
Bonjour à tous , je viens de tomber sur ce tuto , qui est super je trouve sauf que bizarrement je trouve des données plus que bizarre
Alors que je suis sur que l’on a pas fait 5000 kms dans la journée lol,
Ou est ce que j’ai pu faire une erreur en sachant que j’ai fait un copié collé du code , et que mes données gps sont rentrées dans jeedom ?
Merci pour l’aide
Il me semble que ça fait ça la première fois, les variables ne sont pas créées, et du coup, les résultats aberrants
Norbert
Cest ce que je me suis dit aussi mais ca fait 5 jours que j’ai rentré le code
Ha, ça doit donc pas être ça !
Tu peux faire un screenshot des variables ?
Et Mettre le code du scénario
voila ce que j’ai mis
$noms = array('Delphine','Celya','Cedric');
// variables utilisées plusieurs fois dans le bloc code
// Necessite que la latitude et la longitude du domicile soient integrés dans les paramétrages jeedom
$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) {
// Commande position
$cmd_position = '#['.$nom.'][JC_'.$nom.'][Position]#' ;
$cmd_activite = '#['.$nom.'][JC_'.$nom.'][Activité]#' ;
// Commandes à créer
$cmd_vitesse = '#[Famille][Geolocalisation famille]['.$nom.'_vitesse]#' ;
$cmd_distance_jour_enCours = '#[Famille][Geolocalisation famille]['.$nom.'_distance_jour]#' ;
$cmd_distance_domicile = '#[Famille][Geolocalisation famille]['.$nom.'_distance]#' ;
// 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
// on met juste à jour le timestamps
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 ) ;
//log $scenario->setLog('vitesse '.$nom.' : '.$vitesse.' km/h');
$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
}
}
Bonjour Mikael,
Quelle est la meilleure manière pour mettre en place cet onglet par personne dans JC?
As tu créé un virtuel? J’ai essayé de créer un widget résumé (ou résumé de pièce) pour chaque donnée comme: Distance, Vitesse, Nbre de kms. Et mettre le tout sous un onglet ‹ Menu du haut › mais mes données ne semblent pas évoluer? …
Ex avec la vitesse:
Mais je n’ai pas de bel affichage ni les valeures comme dans tout groupe Activité
Merci d’avance
Avant de regarder côté JC, il faut que ça se mette à jour côté Jeedom.
Est ce que tu as une correspondance entre le bloc code du scénario et tes commandes info ?
Norbert
A priori les données fonctionnent car j’ai:
[2024-03-26 08:18:01][SCENARIO] Start : Scenario execute automatiquement sur programmation.
[2024-03-26 08:18:01][SCENARIO] - Exécution du sous-élément de type [action] : code
[2024-03-26 08:18:01][SCENARIO] Exécution d'un bloc code
[2024-03-26 08:18:01][SCENARIO] Geolocalisation Xavier:
[2024-03-26 08:18:01][SCENARIO] --> Distance du jour : 0.6km (still)
[2024-03-26 08:18:01][SCENARIO] --> Vitesse : 34km/h
[2024-03-26 08:18:01][SCENARIO] --> Distance domicile : 0.6km
[2024-03-26 08:18:01][SCENARIO] Fin correcte du scénario
que je stocke dans un virtuel:
donc la correspondance doit être effective.
Et j’ai l’historique OK:
Merci