Du coup, PB réglé via ce post : Problème affichage sous titre personnalisé + test expression avec collect
(Info pour les suivants)
Le novice remercie @tomitomas
Du coup, PB réglé via ce post : Problème affichage sous titre personnalisé + test expression avec collect
(Info pour les suivants)
Le novice remercie @tomitomas
pour info, je te partage un lien vers les differentes possibilités : Montrez vos créations sur l'appli - #253 par ngrataloup
@Mikael utilise donc un groupe de widgets avec des widgets numériques pour chacun des éléments
Norbert
Est ce qu’il faut créer les variables à ma mano? Car moi cela fait plusieurs jours mais je n’arrrive pas à avoir les données remontées directement dans mes virtuels.
Ai je loupé un truc?
Merci
Mon code:
Mon virtuel:
et mes variables (certaines sont crées pour les coordonnées précédentes):
Non elles sont automatiquement crées.
Tu peux mettre les logs que tu as quand tu sors le chien ?
Ta distance quotidienne est bizarre.
Tu as bien appliqué le point 4 du tuto ?
$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
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
Du coup, y a plus qu’a rentrer les poubelles demain pour s’assurer que distance_jour repart bien à 0
Ah ah, je suis allé chercher les poubelles et pas mieux
Le code est bien éxecuté mais pas de traces du reset alors je pense que mes lignes ne doivent pas être au bon endroit, je vais essayer de les remonter
Meme si les poubelles aiment se balader, je n’ai pas la santé pour leur faire faire 10000 km par jour lol
J’ai remonté d’un cran le code et ça à l’air de s’éxécuter et ça marche! MERCI
ah bah j’aurais aimé tombé sur ce tuto il y a quelques jours…
j’ai fait quelque chose de semblable qui calcule la distance parcourue et la vitesse estimée depuis la dernière actualisation, en utilisant le plugin geoloc…
ça tient dans un virtuel.
à toutes fins utiles, je vous partage également mon code :
$cmd = cmd::byString("#[Maison][XXXX][Position]#");
$value = $cmd->execCmd();
$longueur = strlen($value);
$latitude = floatval(substr($value,0,strripos($value,',')));
$longitude = floatval(substr($value,-($longueur-strripos($value,',')-1)));
$cmd2 = cmd::byString("#[Essence][Distance et vitesse][longitude]#");
$cmd3 = cmd::byString("#[Essence][Distance et vitesse][latitude]#");
$old_long= $cmd2->execCmd();
$old_lat= $cmd3->execCmd();
$collectDate = $cmd2->getCollectDate();
$distance = acos(sin($old_lat)*sin($latitude)+cos($old_lat)*cos($latitude)*cos($longitude-$old_long))*6378.137;
$cmd4 = cmd::byString("#[Essence][Distance et vitesse][Distance]#");
$cmd4->event($distance);
$cmd2->event($longitude);
$cmd3->event($latitude);
$debut = strtotime($collectDate);
$fin = strtotime("Now");
$time = ($fin - $debut)/3600;
$vitesse = $distance/$time;
$cmd5 = cmd::byString("#[Essence][Distance et vitesse][Vitesse]#");
$cmd5->event($vitesse);
Bonjour,
merci beaucoup pour le script.
Comment feriez-vous pour ajouter la notion ‹ en Eloignement › / ‹ en rapprochement › du domicile ?
Cela pourra servir à remettre le chauffage avant le retour
dans mon script, il faudrait ajouter la distance au domicile et pas seulement la distance entre les deux mises à jour de position.
ensuite, si ça diminue alors on pourrait dire que c’est en rapprochement. seul problème : ceux qui traversent la france d’est en ouest ou du nord au sud sans rentrer chez eux pendant les vacances
Il suffit d’historiser la distance au domicile, et ensuite d’utiliser la fonciton tendance
Cette commande peut directement est mise dans le virtuel
tendance(commande,période,seuil) : Donne la tendance de la commande sur la période (period=[month,day,hour,min] ou expression PHP).
ex :
tendance(<distance au domicile>, 10 minutes, 1)
Signifie : Si la distance au domicile augmente (1) ou diminue (-1) d’autres moins 1km dans les 10 dernieres minutes
Norbert