Tuto : créer une page météo sur Jeedom Connect

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

1 « J'aime »