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
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
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é …
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 …
@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 …
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
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
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
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
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']);
}
(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
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 …