C’est un scenario planifié (toutes les 30mins qui recupere via le plugin-meteofrance les dernières images (pas de téléchargement, les fichiers sont récupérés dans le rep data du plugin et copiés dans le rep image de JC)
Ensuite, 2 widgets (pour moi des widgets numériques qui prennent comme statut un virtuel qui me remonte le niveau d’alerte maximum pour mon departement par rapport à toutes les alertes en cours (pluie/inondation, neige, orage, …). Dans ces widgets, il faut initialiser le champ image avec n’importe quoi, puis le bloc code ci-dessous mettra à jour avec la bonne image
// Version du script
$version = '13/06/2023 18:00';
$scenario->setLog('┌──────────── Logs bloc code - version du '.$version);
// classe JeedomConnect
require_once dirname(__FILE__) . '/../../plugins/JeedomConnect/core/class/JeedomConnectWidget.class.php';
// A personnaliser, widgetId JC des 2 tuiles
$J0_widgetId = 186;
$J1_widgetId = 601;
// Chemins des répertoires
$rep_meteofrance = __DIR__.'/../../plugins/meteofrance/data/';
$rep_jeedomconnect = __DIR__.'/../../plugins/JeedomConnect/data/img/user_files/';
// Chemins des fichiers sources et cibles
$J0_source = $rep_meteofrance.'VIGNETTE_NATIONAL_J_500X500.png';
$J1_source = $rep_meteofrance.'VIGNETTE_NATIONAL_J1_500X500.png';
$J0_cible_racine = $rep_jeedomconnect.'carte_vigilance_j0';
$J1_cible_racine = $rep_jeedomconnect.'carte_vigilance_j1';
$timestamp = time();
$J0_cible = $J0_cible_racine.'_'.$timestamp.'.png';
$J1_cible = $J1_cible_racine.'_'.$timestamp.'.png';
/**
* Fonction pour copier une image et mettre à jour le widget
*
* @param string $source Chemin de l'image source
* @param string $cible Chemin de l'image cible
* @param string $cible_old Chemin de l'ancienne image cible
* @return int Résultat de la copie : 0 pour un échec, 1 pour une copie réussie, 2 pour des fichiers identiques
*/
function copy_image_alerte($source, $cible, $cible_old)
{
$cksum_source = md5_file($source);
$cksum_cible = md5_file($cible_old);
if ($cksum_source != $cksum_cible) {
if (copy($source, $cible)) {
unlink($cible_old);
return 1;
} else {
return 0;
}
} else {
return 2;
}
}
// Recherche des anciens fichiers cibles
$files = scandir($rep_jeedomconnect);
foreach ($files as $file) {
if (stristr($file, 'carte_vigilance_j0')) {
$J0_cible_old = $rep_jeedomconnect.$file;
} elseif (stristr($file, 'carte_vigilance_j1')) {
$J1_cible_old = $rep_jeedomconnect.$file;
}
}
// Traitement de J0
if (isset($J0_widgetId)) {
switch (copy_image_alerte($J0_source, $J0_cible, $J0_cible_old)) {
case 0:
$scenario->setLog("| ECHEC copie ".basename($J0_source)." vers ".basename($J0_cible));
break;
case 1:
$scenario->setLog("| Copie ".basename($J0_source)." vers ".basename($J0_cible)." OK");
// Mise à jour du widget alerte
$widgetKey = 'image';
$widgetValue = ['source' => 'user', 'name' => basename($J0_cible), 'shadow' => false];
$scenario->setLog('| Mise à jour de la config du widget JC');
JeedomConnectWidget::updateConfig($J0_widgetId, $widgetKey, $widgetValue, true);
break;
case 2:
$scenario->setLog("| fichiers alerte identiques, pas de copie de ".basename($J0_source)." vers ".basename($J0_cible));
break;
}
}
// Traitement de J1
if (isset($J1_widgetId)) {
switch (copy_image_alerte($J1_source, $J1_cible, $J1_cible_old)) {
case 0:
$scenario->setLog("| ECHEC copie ".basename($J1_source)." vers ".basename($J1_cible));
break;
case 1:
$scenario->setLog("| Copie ".basename($J1_source)." vers ".basename($J1_cible)." OK");
// Mise à jour du widget alerte
$widgetKey = 'image';
$widgetValue = ['source' => 'user', 'name' => basename($J1_cible), 'shadow' => false];
$scenario->setLog('| Mise à jour de la config du widget JC');
JeedomConnectWidget::updateConfig($J1_widgetId, $widgetKey, $widgetValue, true);
break;
case 2:
$scenario->setLog("| fichiers alerte identiques, pas de copie de ".basename($J1_source)." vers ".basename($J1_cible));
break;
}
}
$scenario->setLog('└───────────────────────────');
Norbert