Tuto : préparer les donnés json MétéoFrance pour JeeConnect

Voici un bloc de code php permettant d’extraire et de formater les données du plugin Meteofrance pour les utiliser dans JeeConnect.
Il traite les commandes info ‹ Moment de la journée 0 - Json › à '‹ Moment de la journée +7 - Json ›, et peut facilement être adapté pour les autre json.
Je ne ssuis pas un expert en php, mais chez moi, sous Jeedom 4.3.18, il fonctionne :hushed:

Quelques étapes pour sa mise en oeuvre :

  1. Créer un virtuel (chez moi [Global][Meteo]) avec les commandes info suivantes

    • Text M0, Text M+1, …, Text M+7 de type Autre
    • Temp M0, Temp M+1, …, Temp M+7 de typé Numérique, unité °C (étonnant, non?)
  2. Créer 7 widgets JeeConnct de type Générique Numérique

    • Nom : la commande Text Mx correspondante (Text M0 pour le 1er widget, Text M+1 pour le suivant,…)
    • Statut : la commande Temp Mx correspondante
    • Image : n’importe laquelle (mais en choisir une), elle sera remplacée par le scénario
  3. Créer un scénario avec le code ci-dessous et l’adapter en fonction de votre installation

    • Nom de votre équipement Météo France au lieu de [Global][MétéoFrance]
    • Nom de votre nouveau virtuel au lieu de Global][Meteo]
    • Remplacer les nombres du tableau $widgets par les ids ‹ Id global › de vos propres widgets
    • Déclencheur du scénario : la commande [Moment de la journée 0 - Json]

Remarque :
- Vérifiez aussi que les icones Météo France sont incluses dans les images JeeConnect

Voilà, je vous souhaite bien du beau temps !

require_once dirname(__FILE__) . '/../../plugins/JeedomConnect/core/class/JeedomConnectWidget.class.php';
// Nom des jours à afficher
$jours_fr = ["Lun","Mar","Mer","Jeu","Ven","Sam","Dim"];
// Liste des 'Id global' des widgets (dans l'ordre d'affichage)
$widgets = [188,189,190,191,192,194,195,196];
           
for ($i = 0; $i <= 7; $i++) {
  if ($i == 0) {
    $j = $i;
  } else {
    $j = '+'.$i;
  }
  $cmdJSON = '#[Global][MétéoFrance][Moment de la journée '.$j.' - Json]#';
  $cmd=cmd::byString($cmdJSON)->execCmd();
  
  // Mise à jour des infos du virtuel
  $timestamp = meteofrance::getJsonInfo($cmdJSON,'dt');
  $jour = date("N",$timestamp);
  $datetime = date('H:i',$timestamp);
  if ($datetime <= '06:00' or $i == 0) {
    $text =  $jours_fr[$jour-1].' '.date('d',$timestamp)."\n".meteofrance::getJsonInfo($cmdJSON,'moment_day').' '.$datetime."\n".meteofrance::getJsonInfo($cmdJSON,'weather > desc');
  } else {
    $text = '    '."\n".meteofrance::getJsonInfo($cmdJSON,'moment_day')." ".$datetime."\n".meteofrance::getJsonInfo($cmdJSON,'weather > desc');
  }
  cmd::byString('#[Global][Meteo][Text M'.$j.']#')->event($text);
  cmd::byString('#[Global][Meteo][Temp M'.$j.']#')->event(round(meteofrance::getJsonInfo($cmdJSON,'T > value')));
  
  // Mise à jour des icones
  $iconFile = meteofrance::getJsonInfo($cmdJSON,'weather > icon').'.png';
  $iconFile = str_replace("bis","",$iconFile);
  $scenario->setLog($iconFile.' '.$temp);
  $widgetId = $widgets[$i];
  $widgetKey='image';
  $widgetValue= array('source' => 'user', 'name' => $iconFile, 'shadow' => false);
  JeedomConnectWidget::updateConfig($widgetId,$widgetKey,$widgetValue);
}

@Dums : on y est !

Super trop fort je vais regarder ça :+1::pray:
Merci

Petit rectificatif concernant l’heure avant laquelle on affiche la date : dans la ligne

if ($datetime <= '03:00' or $i == 0) {

il faut remplacer ‹ 03:00 › par ‹ 06:00 ›
Rectifié dans le code ci-dessus.