Créer un virtuel pour avoir heure lever coucher soleil etc... sans dépendre d'internet

Salut :wink:

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.
image

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

4 « J'aime »

Bonjour à toi et merci pour ce tutoriel.

Question : N’est-il pas possible de récupérer les positions de Latitude et Longitude qui sont déjà renseigné dans Jeedom ?

Merci.

1 « J'aime »

Salut :wink:

Ben pas dans le virtuel. OU alors faut tout faire via bloc code dans un scénario.
De plus pour ceux qui sont encore en v3 ça fonctionnerait pas.

J’ai fait au plus simple à maintenir. La position GPS de la maison change pas souvent :joy: :joy:

1 « J'aime »

Bonjour,

Une petite astuce de 2016 …

https://forum.jeedom.com/viewtopic.php?f=30&t=19537&sid=c0e65b4dcd66ca91212d66a6514f4a55

Bonsoir.

Oui et non, car le script PHP bien connu ne fait que le lever ou coucher, la il y a bien plus.

1 « J'aime »

Bonjour
Je commence avec Jeedom et j’ai quelques difficultés pour programmer la commande de mes volets en fonction des heures du lever et du coucher du soleil
J’utilise la formule indiquée pour obtenir les heures du lever et du coucher du soleil mais je n’obtiens que l’heure 7 à la place de 07h26 par exemple !
Je dois louper quelque chose!
Merci pour votre aide
Philippe

Salut,
Il aurait été préférable 2 ans après le dernier message d’ouvrir votre propre sujet .

Ce plugin (gratuit) vous permettra de faire ce dont vous avez besoin.

Jeedom Market

2 « J'aime »

Désolé, j’ai trouvé la solution
Il fallait simplement bien sélectionner le type de donnée (autres à la place de numérique)

Super mais c’était déjà dans le premier post

image

L’important c’est que vous aillez trouvé votre bonheur :wink:

Bonjour,
j’ai ce virtuel depuis 2019 qui fonctionnais a merveille et je ne sais pas pourquoi, je suppose depuis l’installation d’un plugin le 26 /12/2022 le coucher du soleil (cron) fonctionne bien, par contre le lever du soleil ne se lance plus, impossible de comprendre pourquoi le coucher fonctionne et pas le lever, quand je teste les expression tous fonctionne, c’est le cron qui ne s’exécute pas sur le lever
Quelqu’un aurait une idée ?


le coucher fonctionne

le lever ne fonctionne pas

donc en attendant j’ai créé un scenario pour executer les scenarios avec l’evenement
#[terrain][Soleil][Lever_Soleil]#