(tuto) utilisation de la commande php date_sun_info

Certains utilisent divers plugin comme heliotrope ou autre qui donne les mêmes résultats …
la n’est pas le but mais juste de pourvoir récupérer en quelques lignes de script des infos comme les levés couchés de soleils en différents formats. bon assez parler le résultat :

46

bon ca paye pas de mine comme ca

Vous remarquerez que le format des 4 premieres lignes est different
Le 3 ème est souvent demandé dans les sénarios .

Bon sans plus attendre le script lui même :

<?php
// nom du script : date-sun-info.php
  
// separation de la latitude et de la longitude
$latlon = explode(",", $argv[1]);
// utilisationde la commande date_sun_info https://www.php.net/manual/fr/function.date-sun-info.php
$sun_info = date_sun_info(time(),$latlon[0],$latlon[1]);
// type d'affichage 0 H:i:s, 1 H:i, 2 Hi, 3 timestamp
if ($argv[3] == 0 ) {echo date("H:i:s",$sun_info[$argv[2]]);}
if ($argv[3] == 1 ) {echo date("H:i"  ,$sun_info[$argv[2]]);}
if ($argv[3] == 2 ) {echo date("Hi"   ,$sun_info[$argv[2]]);}
if ($argv[3] == 3 ) {echo $sun_info[$argv[2]];}

// PARAMETRES N°1
// latitude,longitude en décimales ex: 48.12345,2.5678

// PARAMETRES N°2
// sunrise
// sunset
// transit
// civil_twilight_begin
// civil_twilight_end
// nautical_twilight_begin
// nautical_twilight_end
// astronomical_twilight_begin
// astronomical_twilight_end

// PARAMETRES N°3
// type d'affichage 
// 0 H:i:s			heures:minutes:secondes
// 1 H:i 			heures:minutes
// 2 Hi				heuresminutes
// 3 timestamp		

Comme vous pouvez le constaté plus de commentaires que de code :wink:

pour facilité le travail dans jeedom j’ai créer une variable latlon (latitude,longitude)
52
Ce qui évite de longues recopies de coordonnées que j’utilise en paramètre.

Si vous cherchez vos coordonnées : https://www.coordonnees-gps.fr/

ne reste plus qu’a créer des commandes de script …

voila mes 4 premieres

pour ma part j’ai choisi un chemin assez court pour loger mon script, libre a vous d’en utiliser un autre.

pour mémoire :

crepuscule26

3 « J'aime »

Salut,
Petite question, je vois que le format horaire rendu est de la forme 08:42:23
Est-il compatible avec le format de #time# pour les comparaison (0842) ou faut-il faire des conversions?

ben il suffit d’indiquer Hi sans : :wink:

if ($argv[3] == 0 ) {echo date(« H:i:s »,$sun_info[$argv[2]]);}
if ($argv[3] == 1 ) {echo date(« H:i » ,$sun_info[$argv[2]]);}
if ($argv[3] == 2 ) {echo date(« Hi » ,$sun_info[$argv[2]]);}
if ($argv[3] == 3 ) {echo $sun_info[$argv[2]];}

C’est le dernier paramètre a 3

j’ai une autre version un peut plus élaboré ou tu donne le format directement dans les paramètres
dans le cas qui t’interesse :
/var/www/html/sh/date-sun-info.php variable(latlon) sunrise Gi

<?php
// nom du script : date-sun-info.php
  
// separation de la latitude et de la longitude
$latlon = explode(",", $argv[1]);
// utilisationde la commande date_sun_info https://www.php.net/manual/fr/function.date-sun-info.php
$sun_info = date_sun_info(time(),$latlon[0],$latlon[1]);

// calcul durée du jour
$jour = $sun_info["sunset"]-$sun_info["sunrise"];
// calcul durée de la nuit
$nuit = 24*60*60-($sun_info["sunset"]-$sun_info["sunrise"]);
$maintenant=time();
//traitement des commandes ne faisant pas partie de date_sun_info
if ($argv[2] == 'jour' ) {echo gmdate("$argv[3]",$jour);exit();}
if ($argv[2] == 'nuit' ) {echo gmdate("$argv[3]",$nuit);exit();}
if ($argv[2] == 'maintenant' ) {echo date("$argv[3]",$maintenant);exit();}
//traitement des commandes faisant partie de date_sun_info
echo date("$argv[3]",$sun_info[$argv[2]]);

// PARAMETRES N°1
// latitude,longitude en décimales ex: 48.12345,2.5678

// PARAMETRES N°2
// sunrise
// sunset
// transit
// civil_twilight_begin
// civil_twilight_end
// nautical_twilight_begin
// nautical_twilight_end
// astronomical_twilight_begin
// astronomical_twilight_end

// jour
// nuit

// PARAMETRES N°3
// type d'affichage 
// H:i:s		heures:minutes:secondes
// H:i 			heures:minutes
// Hi			heuresminutes
// Gi           heuresminutes sans 0 pour les heures
// U 			timestamp
// tout les paramétres ($format) de la fonction date() php sont utilisable

Ca se complique, je crois que je vais rester sur la solution de @kiboost pour le moment.
J’y repenserais lorsque j’aurais besoin des autres paramètres.
Je te remercie.

pour simplifier a l’extrême il te suffit de 2 lignes dans un block de code de senario :

$sun_info = date_sun_info(time(),48.7,2.5);
$scenario->setData(‹ memsunrise ›,date(« Gi »,$sun_info[« sunrise »]));

(dans la suite de ton scenario l’heure de levé se retrouve dans la variable
memsunrise

voila on peut pas faire plus simple :wink:

ps n’oublie pas dans la 1ere ligne de corrigé avec tes coordonnées latitude et longitude!

1 « J'aime »

Oui, beaucoup plus simple.
Est-ce que j’abuserais si je te demandais la suite pour avoir le reste des variables?
:flushed:

ben c’est tout ce qui est avec des //
sunrise levé du soleil
sunset couché
transit c’est le zenith
toute les autres sont les levés et couchés civil,nautique et astronomique
il te suffit donc de remplacé ou ajouter une ligne comme la N°2 avec un des paramètres en lieu et place de sunrise …

Ok, merci.

Je vais mettre ça dans mon scénario d’initialisatiin journalière pour créer toutes ces variables.
A part lever et coucher, je n’en ai pas encore l’usage mais, au cas où.
Tu devrais mettre ça en tuto comme @kiboost, je suis sûr que ça en intéresserait plus d’un.

Bonne journée

Mon post est en tuto si tu regarde bien c’est même dans le titre :wink:

Oups!!
Pas fais attention

Du coup, j’ai fait un mixte entre la solution de @olive et celle de @kiboost et ça donne ça en mettre en bloc code en début de scénario à exécution journalière :

$lat = votre latitude;
$long = votre longitude;
$sun_info = date_sun_info(time(),$lat,$long);
$scenario->setData('leversoleil',date("Hi",$sun_info["sunrise"]));
$scenario->setData('couchersoleil',date("Hi",$sun_info["sunset"]));
$scenario->setData('zenith',date("Hi",$sun_info["transit"]));
$scenario->setData('levercivil',date("Hi",$sun_info["civil_twilight_begin"]));
$scenario->setData('couchercivil',date("Hi",$sun_info["civil_twilight_end"]));
$scenario->setData('levernautique',date("Hi",$sun_info["nautical_twilight_begin"]));
$scenario->setData('couchernautique',date("Hi",$sun_info["nautical_twilight_end"]));
$scenario->setData('leverastro',date("Hi",$sun_info["astronomical_twilight_begin"]));
$scenario->setData('coucherastro',date("Hi",$sun_info["astronomical_twilight_end"]));
$scenario->setData('dureejour',gmdate( "Hi",$sun_info["sunset"]-$sun_info["sunrise"]));
$scenario->setData('dureenuit',gmdate("Hi",24*60*60-($sun_info["sunset"]-$sun_info["sunrise"])));

Liste des variables créées :

Capture

J’ai remplacé le paramètre "GI " par « HI » pour avoir une heure au format HHMM au lieu de HMM.

Merci encore.

Je crois que Gi est plus adapté il me semble que les déclanchement ne se font pas
genre il faut 800 et pas 0800 a toi de bien vérifier

C’est déjà fait.
En fait, j’utilise le même format que #time# afin de faire en sorte que les comparaisons ne posent pas de problème.

oui c’est exactement ce qu’il fallait faire tu aurait pu franciser tes variables :slight_smile:

Oui, enfin ça reste un exemple.
Après chacun peut y mettre ce qu’il veut.
Et puis, je n’ai pas envie de modifier mes scénarios à nouveau.
Mais bon, je vais le faire quand même en modifiant le post mais sans mettre le résultat des variables dans un premier temps.

Tu préfères ?
J’ajouterais une copie d’écran quand je serais sur mon PC.

comme tu veut …
si tu veut pousser le « bouchon » un peut plus loin tu peut encore faire comme il y avait dans le script plus haut,
une variable durée du jour = couché - levé
et
une variable durée de la nuit = 24H00 - durée du jour

amuse toi bien :wink:

Ok je l’intègre.
Je suis sûr que ça peut intéresser du monde.
Bonne soirée