Ajout position GPS pour info de localisation

Bonjour,

Pensez vous envisageable de rajouter un info de localisation autre que la loc jeedom ou le département ?
Type Loc GPS remontée par le tel via le #plugin-jeedomconnect.

Merci

Norbert

1 « J'aime »

Hello
Sans casser le fonctionnement du plugin il serait assez simple, je pense, d’ajouter une commande de type action / message avec comme message la latitude et longitude et qui renvoi un json du résultat qui pourra être interprété facilement par un pti scénario… non ?

En attendant @ngrataloup tu peux faire un scenario qui reprend le code du plugin et qui va chercher la position Jeedom connect du tel que tu veux … après il faut interprété le résultat et stocker dans un virtuel dédié … :slight_smile:

Le scénario peut ressembler à cela

//require_once dirname(__FILE__) . '/../../data/php/commons.function.class.php';

$scenario->setLog('Start scenario recuperation prix carburant en fonction d\'une localisation');

$typecarburant='SP98';
$rayon='10';
$nbstation='5';
$monformatdate='j M Y G:i';

$pathPlugin= '/var/www/html/plugins/prixcarburants/core/class/';

//define custom latitude and longitude
//$coord_gps_actuel = explode(",",commonsFunction::executeCommande('[Infra][Jeeconnect Chris][Position]'));
$coord_gps_actuel = explode(",",cmd::byString('#[Infra][Jeeconnect Chris][Position]#')->execCmd());

$malat=$coord_gps_actuel[0];
$malng=$coord_gps_actuel[1];

$scenario->setLog('	* Latitude : ' . $malat. '| longitude : ' . $malng );

$response = array();
$idx=0;

//Prepare and parse XML file
$scenario->setLog('		-> path fichier xml : ' . $pathPlugin.'/PrixCarburants_instantane.xml');
$reader = XMLReader::open($pathPlugin.'/PrixCarburants_instantane.xml');
$doc = new DOMDocument;
while($reader->read()) {
	if ($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'pdv') {
		$lat = $reader->getAttribute('latitude')/100000;
		$lng = $reader->getAttribute('longitude')/100000;
		$mastationid = $reader->getAttribute('id');
		$MaStationDep = intval(substr($reader->getAttribute('cp'), 0, 2));
		$dist = 0;
		$MonTest = False;
		$EstFavoris = False;
	  
		$dist = prixcarburants::distance($malat,$malng,$lat,$lng);
		
      
      	if($dist > $rayon) {
        	continue;
        }
		
		//Import and review XML file      	
		$unestation = simplexml_import_dom($doc->importNode($reader->expand(), true));
		foreach ($unestation->prix as $prix) {
			if ($prix->attributes()->nom == $typecarburant){ //Filter by fuel type
              	
				$prixlitre = $prix->attributes()->valeur.'';
				$maj = $prix->attributes()->maj.'';
				$marque = prixcarburants::getMarqueStation($mastationid, $MaStationDep);
                
              	$maselection[$idx]['adresse'] = $marque.', '  . $unestation->adresse . ' ' . $reader->getAttribute('id') . ' ' .$unestation->ville;
                $maselection[$idx]['prix'] = $prixlitre;
                $maselection[$idx]['maj']  = date($monformatdate, strtotime($maj));
                //if ($dminus5 >= strtotime($maj)) $maselection[$idx]['maj'] = "<div style='color:red;'>".$maselection[$idx]['maj'].'</div>';

                $maselection[$idx]['distance'] = $dist;
                $maselection[$idx]['id'] = $mastationid;
                $idx++;
			}
		}
	}
}
$reader->close();
usort($maselection, "prixcarburants::custom_sort");

For($i = 1; $i <= $nbstation; $i++) {
  $scenario->setLog(json_encode($maselection[$i-1]));
  array_push($response, $maselection[$i-1]);
}

$scenario->setLog('		=> response (' . sizeof($response) . ') : ' . json_encode($response));
$scenario->setLog('End scenario recuperation prix carburant en fonction d\'une localisation');

Le résultat est tableau classique

Plus qu’a appeler ce scenario lors du chargement de l’onglet voulu dans JeedomConnect … pour un rafraichissement du virtuel … :slight_smile:
@chris94440

Ps : il est possible de créer les virtuels à la volée dans ce même script pour éviter de les créer à la main …:slight_smile:

Update du bloc code scenario car il manquait le tri
Update 2 :
j’avais oublié le format de la date … $monformatdate=‹ j M Y G:i ›;

Update 3 :
formatage de l’adresse avec la nomenclature suivante : Marque, adresse code postal nom de la ville
Ce qui donne une adresse du style
image

Bonjour,

C’est déjà le cas (ou je n’ai pas compris la demande …)

moi, je n’ai que Jeedom dans la liste …
Mais il est indiqué dans la doc qu’il y a les lieux du plugin geoloc.

Une recherche autour d’un point gps (Domicile, Travail). Remplisser le champ “Rayon” (par défaut 30km si vide) Remplisser le champ “Chercher autour de “ :
Lieus dans le plugin Geoloc
Le repère GPS dans la configuration de Jeedom (https://adresseipjeedom/index.php?v=d&p=administration#infotab)

Pas de plugin geoloc chez moi mais loc via le plugin #plugin-jeedomconnect (sans doute idem pour les utilisateurs de #plugin-jeemate
D’ailleurs, pourquoi ne pas utiliser le generic type geolocalisation pour ce type d’usage. ca éviterait de gérer ceci en foncitn des plugins

1 « J'aime »

En effet, j’utilise le plugin geoloc et je mets à jour la position via un scénario lorsque je reçois la position de jeedomconnect

nb : il n existe pas, je l ai créé dans le cadre de JC, mais il n est pas (encore?) présent cote core jeedom

1 « J'aime »

OK, c’est pour ca que je l’ai, alors ! mais qu’on ne peut pas affecter ce GT à d’autres commandes !
… Et ben, du coup aux devs de Jeedom de peut-être l’intégrer en base. ca doit pouvoir être utile pour plein de trucs

@tomdom pourquoi ne pas faire la meme chose mais sans dépendance à un autre plugin ?
Et je ne vois pas cette option alors que j’ai un équipement géoloc de défini.

Il faut demander au développeur du plugin :wink:

Lol je pensais que c’était toi … dsl

Au top, merci @chris94440

moyennant le remplacement de la dernière boucle for pour directement renseigner les commandes créées par le plugin

For($i = 1; $i <= $nbstation; $i++) {
  $scenario->setLog(json_encode($maselection[$i-1]));
  array_push($response, $maselection[$i-1]);
  cmd::byString('#[Données Techniques][Prix Gasoil][Top '.$i.' ID]#')->event($maselection[$i-1]['id']);
  cmd::byString('#[Données Techniques][Prix Gasoil][Top '.$i.' Adresse]#')->event($maselection[$i-1]['adresse']);
  cmd::byString('#[Données Techniques][Prix Gasoil][Top '.$i.' Prix]#')->event($maselection[$i-1]['prix']);
  cmd::byString('#[Données Techniques][Prix Gasoil][Top '.$i.' MAJ]#')->event($maselection[$i-1]['maj']);
  cmd::byString('#[Données Techniques][Prix Gasoil][Top '.$i.' Distance]#')->event($maselection[$i-1]['distance']);
}
  • désactivation du cron pour ce plugin

(en attendant d’avoir d’avoir d’autres localisations paramétrables !)

Oui c’est ce que j’ai fait avec la création des virtuels à la volee
Merci pour ton super tuto

Ne pourrais t on pas en profiter pour modifier la valorisation de l’adress par

$maselection[$idx]['adresse'] = $marque.', '  . $unestation->adresse . ' ' . $reader->getAttribute('cp') . ' ' .$unestation->ville;

Ce qui donnerait qq chose du genre
image

Et qui permettrait via copier / coller de mettre ça dans notre appli préféré de navigation mobile et d’aller jusqu’a la station choisie ?

de la même manière une commande coordonnées pourrait également être ajoutée pour faire la même chose mais autrement … :slight_smile: