Salut
Suite à un besoin spécifique, sur un petit Jeedom qui n’a pas accès à Internet j’avais besoin de pouvoir déterminer localement
Heure Lever /coucher soleil utilisable dans un scénario Jeedom
Si Weekend ou pas
Si Férié ou pas
J’ai donc créé un virtuel, avec un cron de mise a jour a 00:05 tous les jours.
LeverSoleil cela pour valeur str_replace(":","",date_sunrise(#timestamp# ,1,LONGITUDE,LATITUDE,90+35/60,date("Z",#timestamp#)/3600))
CoucherSoleil str_replace(":","",date_sunset(#timestamp# ,1,LONGITUDE,LATITUDE,90+35/60,date("Z",#timestamp#)/3600))
DuréeJour gmdate("H:i", strtotime(date_sunset(#timestamp# ,1,LONGITUDE,LATITUDE,90+35/60,date("Z",#timestamp#)/3600)) -strtotime(date_sunrise(#timestamp# ,1,LONGITUDE,LATITUDE,90+35/60,date("Z",#timestamp#)/3600)))
WeekEnd #njour#==0 || #njour#==6
Pour les jours fériés je suis passé par un scénario et un bloc code et ce n’est valable que pour la France. Idem ce scénario est en mode programmé tous les jours à 00:05
Le code du bloc code à adapter selon votre nom dans le virtuel
/*
// Dénifit si le jour est férié ou pas
*/
$jour = date("d");
$mois = date("m");
$annee = date("Y");
$EstFerie = 0;
// dates fériées fixes
if($jour == 1 && $mois == 1) $EstFerie = 1; // 1er janvier
if($jour == 1 && $mois == 5) $EstFerie = 1; // 1er mai
if($jour == 8 && $mois == 5) $EstFerie = 1; // 8 mai
if($jour == 14 && $mois == 7) $EstFerie = 1; // 14 juillet
if($jour == 15 && $mois == 8) $EstFerie = 1; // 15 aout
if($jour == 1 && $mois == 11) $EstFerie = 1; // 1 novembre
if($jour == 11 && $mois == 11) $EstFerie = 1; // 11 novembre
if($jour == 25 && $mois == 12) $EstFerie = 1; // 25 décembre
// fetes religieuses mobiles
$pak = easter_date($annee);
$jp = date("d", $pak);
$mp = date("m", $pak);
if($jp == $jour && $mp == $mois){ $EstFerie = 1;} // Pâques
$lpk = mktime(date("H", $pak), date("i", $pak), date("s", $pak), date("m", $pak)
, date("d", $pak) +1, date("Y", $pak) );
$jp = date("d", $lpk);
$mp = date("m", $lpk);
if($jp == $jour && $mp == $mois){ $EstFerie = 1; }// Lundi de Pâques
$asc = mktime(date("H", $pak), date("i", $pak), date("s", $pak), date("m", $pak)
, date("d", $pak) + 39, date("Y", $pak) );
$jp = date("d", $asc);
$mp = date("m", $asc);
if($jp == $jour && $mp == $mois){ $EstFerie = 1;}//ascension
$pe = mktime(date("H", $pak), date("i", $pak), date("s", $pak), date("m", $pak),
date("d", $pak) + 49, date("Y", $pak) );
$jp = date("d", $pe);
$mp = date("m", $pe);
if($jp == $jour && $mp == $mois) {$EstFerie = 1;}// Pentecôte
$lp = mktime(date("H", $asc), date("i", $pak), date("s", $pak), date("m", $pak),
date("d", $pak) + 50, date("Y", $pak) );
$jp = date("d", $lp);
$mp = date("m", $lp);
if($jp == $jour && $mp == $mois) {$EstFerie = 1;}// lundi Pentecôte
// Samedis et dimanches
// $jour_sem = jddayofweek(unixtojd($timestamp), 0);
// if($jour_sem == 0 || $jour_sem == 6) $EstFerie = 1;
// ces deux lignes au dessus sont à retirer si vous désirez faire
// apparaitre les
// samedis et dimanches comme fériés.
// Log vers Jeedom de la valeur calculée de la variable EstFerie
$scenario->setLog('Valeur EstFerie -> ' . $EstFerie);
// Remontée vers Jeedom directement dans le virtuel info binaire
// cmd::byString('#[OBJET][EQUIPEMENT][Férié]#')->event($EstFerie);
// Remontée vers Jeedom via tag !
$tags['#$EstFerie#'] = $EstFerie;
// Necessite dans Jeedom une action event #[OBJET][EQUIPEMENT][Férié]# #EstFerie#
$scenario->setTags($tags);
Il y a donc 2 manières de mettre à jour l’information du virtuel, directement. Mais si vous changez le nom dans le futur cela ne fonctionnera plus sauf si vous mettez le code a jour !
Ou en passant via un tag la si vous changez le nom dans le virtuel cela continuera de fonctionner.
Dans ce cas dans votre scénario, après le bloc code, ajouter une action event puis choisir l’info du virtuel et passé lui le tag