Bonjour,
Pas vraiment une évolution du plugin mais un bloc code de scénario permettant de faire varier la localisation et obtenir la météo du lieu à partir de coordonnées GPS.
Il faut bien sur que l’équipement MeteoFrance et sa localisation geotrav soient dédiés à ce fonctionnement. Ils sont modifiés par ce scénario.
Le code est à personnaliser avec l’ID de l’équipement et la commande qui contient les coordonnées GPS
A vous de mettre un déclencheur à ce scénario adapté à vos besoins: Chaque heure, dés que votre position change … Attention à ne pas submerger les serveurs MF !
Le bloc code
// Version initiale: 14/07/2023 08:30
// - 14/07/2023 10:30 Controle si le geotrav est manuel
$eqptMF = "1756"; // ID de l'équipement MF à modifier. Il doit utiliser une localisation geotrav
$posCmd = '#[Test][Tel JP plugin JC][Position]#'; // commande JC contenant la position sous la forme latitude , longitude
$MF = eqLogic::byId($eqptMF);
if(is_object($MF)) {
$geoloc = $MF->getConfiguration('geoloc','none');
if($geoloc == 'none' || $geoloc == 'jeedom')
$scenario->setLog("Unable to change geoloc type: '$geoloc'");
else {
$geotrav = eqLogic::byId($geoloc);
if (is_object($geotrav) && $geotrav->getEqType_name() == 'geotrav' && $geotrav->getConfiguration("typeConfLoc",'') == 'static') {
// récupération latitude et longitude contenues dans la commande
$pos = cmd::byString($posCmd)->execCmd();
$valPos = explode(',', $pos);
$newLat = trim($valPos[0]); $newLon = trim($valPos[1]);
// Interrogation API adresse pour avoir la ville et son code postal
$url = "https://api-adresse.data.gouv.fr/reverse/?lon=$newLon&lat=$newLat";
$json = meteofrance::callURL($url);
$newZip = $json['features'][0]['properties']['postcode'];
$newCity = $json['features'][0]['properties']['city'];
$newInsee = $json['features'][0]['properties']['citycode'];
$context = $json['features'][0]['properties']['context'];
$scenario->setLog("Context $context");
$ctx = explode(',',$context); $newDept = $ctx[0];
$scenario->setLog("$newLat,$newLon ==> $newZip $newCity Insee: $newInsee Dept: $newDept");
// MAJ du geotrav
$scenario->setLog("Geotrav ID : " .$geotrav->getId());
$geotrav->setConfiguration("staticPostal",$newZip);
$geotrav->setConfiguration("staticCity",$newCity);
$geotrav->setConfiguration("staticGps","$newLat,$newLon");
$geotrav->save();
// MAJ de la configuration de l'equipement MF
$MF->setConfiguration('lat', $newLat);
$MF->setConfiguration('lon', $newLon);
$MF->setConfiguration('zip', $newZip);
$MF->setConfiguration('ville', $newCity);
$MF->setConfiguration('insee', $newInsee);
$MF->setConfiguration('numDept', $newDept);
// reset des heures d'appels afin de forcer la MAJ de la météo
$MF->setConfiguration('lastHourlyCall', 0);
$MF->setConfiguration('lastInstantCall', 0);
$MF->setConfiguration('lastTideCall', 0);
$MF->save(true);
$MF->getInformations();
}
else {
if (is_object($geotrav)) $scenario->setLog("Configuration geotrav [" .$geotrav->getName() .'] : Type: ' .$geotrav->getEqType_name() .' Mode: ' .$geotrav->getConfiguration("typeConfLoc",''));
else $scenario->setLog("Geotrav ID $geoloc not found");
}
}
}
Voir aussi la version de @ngrataloup ci-dessous
Bonne utilisation et bons tests.
JP