Plugin méteofrance basé sur la géoloc

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

1 « J'aime »