[TUTO] Scénarios d'astronomie (lune soleil, etc.)

Voici quelques scénarios en code PHP que j’ai repiqué sur le net et plus ou moins modifiés pour fonctionner sous Jeedom.
Ils concernent l’astronomie (lever et coucher de la lune et du soleil, position dans le ciel, etc.).

Fonctionnement (Jeedom v3.x & v4.x) :

  • vous allez dans le menu des scénarios et vous cliquer sur « Ajouter »,
  • vous lui donnez un nom à votre convenance,
  • sur l’onglet « Général » :
    • vous ajoutez une programmation automatique, ou bien un déclenchement manuel,
  • dans l’onglet « Scénario » :
    • vous ajoutez un bloc « Code »,
    • vous collez dedans le contenu du scénario qui vous intéresse.

Vous verrez qu’à la fin de chaque scénario, j’affecte les résultats souhaités à une variable Jeedom qui est globale. Vous pouvez donc ensuite créer un ou plusieurs virtuels auxquels vous n’avez qu’à affecter lesdites variables.
Par exemple, dans le scénario de la lune, vous voyer à la fin le code :

$scenario->setData('v_lune_age',$age);

Cela veut dire que la variable Jeedom qui est créée s’appelle « v_lune_age » et vous pouvez donc l’affecter à un virtuel en collant « variable(v_lune_age) » dans son champ « Équipement ».

Libre à vous de modifier les codes à votre convenance, je suis loin d’être un expert en programmation, donc c’est très certainement à optimiser…


Lune - Calculs divers :
Scenario - Lune (divers).txt (15,7 Ko)
Programmation idéale : 1 fois par jour devrait suffire :wink:
Les variables créées sont :

$scenario->setData('v_lune_age',$age);								// Age de la lune (le jour du cycle)
$scenario->setData('v_lune_pourcent',round($moon->phase()*100,0));	// Pourcentage du cycle (~29.53 jours)
$scenario->setData('v_lune_phase',$quelle_phase);					// Phase (quartier, pleine, croissant, etc.)
$scenario->setData('v_lune_etat',$stage);							// Etat : montante ou descendante
$scenario->setData('v_lune_visibilite',$illumination);				// Pourcentage de visibilité
$scenario->setData('v_lune_distance',$distance);					// Distance depuis la Terre
$scenario->setData('v_lune_next_pleine',$date_pleine_lune);			// Prochaine pleine lune
$scenario->setData('v_lune_next_nouv',$date_nouvelle_lune);			// Prochaine nouvelle lune

Lune et Soleil - Lever et coucher :
Scenario - Lune et soleil (lever et coucher).txt (13,2 Ko)
Programmation : 1 fois par jour, par exemple peu après minuit.
Les variables créées sont :

$scenario->setData('v_soleil_lever', $sunriseStr);
$scenario->setData('v_soleil_zenith', $sunNoonStr);
$scenario->setData('v_soleil_coucher', $sunsetStr);
$scenario->setData('v_lune_lever', $moonriseStr);
$scenario->setData('v_lune_coucher', $moonsetStr);

N’oubliez pas d’aller saisir vos latitudes et longitudes ici :

// Définitions de variables perso :
$LatObservateur = 50.12345678901234;
$LongObservateur = -1.1234567890123456;

Soleil - Azimuth et élévation :
Scenario - Soleil (azimuth et élévation).txt (3,1 Ko)
Programmation : toutes les 5 minutes par exemple.
Les variables créées sont :

$scenario->setData('v_soleil_azimuth', $Sun[0]);		// Azimuth
$scenario->setData('v_soleil_altitude', $Sun[1]);		// Élévation
$scenario->setData('v_soleil_declinaison', $Sun[2]);	// Déclinaison
$scenario->setData('v_soleil_ra', $Sun[3]);				// Ascension droite

Comme pour le précédent, saisir lat et long ici :

// Définitions de variables perso :
$LatObservateur = 50.12345678901234;
$LongObservateur = -1.1234567890123456;

Voilà, à vos claviers :slight_smile:


Petit exemple de virtuel rapide que j’ai fait avec ces scénarios :
image
Nota : ça me fait remarquer que j’ai du faire une modif qq part, parce que la distance Terre-Lune est en milliers de km et pas en km :laughing:
Edit : Pas de soucis, c’est dans mon virtuel, le code posté ici est OK.


PS : en rédigeant le mien, je suis tombé sur une proposition d’un topic de @kiboost qui est excellent et pourras vous aider si mes maigres explications ne sont pas claires : Jeedom v4 Petits codes entre amis | Jeedom by KiboOst
Merci à lui :wink:

3 « J'aime »

RE
décidément on se croise partout …

Bon pour le soleil, la lune et tout les astres … j’avais fait celà

Capture d’écran du 2020-04-20 09-53-21

Bonjour,
ou alors il y a simplement le #plugin-heliotrope :slight_smile:

Pas sur les phase de la Lune.

Pas sur mars jupiter et neptune …

Infos du Jour pour les phases de lune depuis octobre 2017

Les phase ou mais pas le reste notamment la date de la prochaine nouvelle lune qui permet de planifier mes prochaines soirées d’observation ^^

@olive ha zut, j’ai manqué ton tuto, pourtant ce n’est pas faute d’avoir fouillé dans tout le net lol
Merci pour le lien :wink:

@Mips oui je sais, je l’ai utilisé un temps, mais j’ai voulu chercher à être indépendant des plugins autant que possible d’une part et à pouvoir personnaliser les vues à souhait d’autre part :wink:
Et il me manquait pas mal d’infos dans le plugin, même s’il doit convenir à 99% des gens, j’en souhaitais quelques autres.

@Idaho947 : petit exemple de ce que j’ai fait perso rapidement avec ces scénarios :
image

1 « J'aime »

Parfait, merci pour le partage :slight_smile:

1 « J'aime »

très bon merci.

2 « J'aime »

Salut et merci pour le scénario des phases de la lune :smiley:
pour l’image de la lune, tu as un widget tout prêt à partager? :smiley: j’ai cherché un peu des images « propres » de la lune mais rien trouvé de sympa :frowning:

merci beaucoup!

Hello,

Voici le mien.
Tu crées un widget « info / numérique » et tu copie-colle ce script dedans (juste le chemin des images à adapter à ton cas dans « src= ») :

<div style="padding:0;width: 100px;font-size: 12px;" class="cmd #history# tooltips cmd-widget container-fluid" data-type="info" data-subtype="numeric" data-cmd_id="#id#" title="#collectDate#">
	<!-- MISE EN FORME GLOBALE ET AFFICHAGE DU NOM DE LA DONNÉE -->
	<div class="row">
		<div class="center-block iconCmd#id#"></div>
	</div>
	<!-- AFFICHAGE DE L'IMAGE DE LA DONNÉE -->
	<script>
		$(".iconCmd#id#").empty();
		var jourLune = Math.round('#state#');
		tooltipContent = ' #state# jour(s)';
		$('.iconCmd#id#').append('<img class="img#id#" data-toggle="tooltip" data-placement="center" title="' + tooltipContent +'" src="montheme/icones/lune/'+ jourLune +'.png">');
	</script>
</div>
<style>
  .img#id# {
    height:100px;
    width:100px;
    position:relative;
    top:0px;
    left:0px;
  }
</style>

Nota : il n’y a pas de rafraîchissement automatique, ce serait éventuellement à faire, mais je doute que quelqu’un reste plus de 24h sur la même page Jeedom donc ça devrait aller je pense :laughing:


Et les images en archive que tu décompresses dans un dossier de ton Jeedom :
lune.pdf (322,0 Ko)
Nota : le forum bloque les attachements d’archives, donc je l’ai renommé en PDF. Changes l’extension de .PDF en .RAR :wink:

Je n’ai pas la moindre idée d’où j’avais trouvé les images de la lune par contre …

1 « J'aime »

Génial ça fonctionne nickel :slight_smile: un grand merci !

1 « J'aime »

avec plaisir :slight_smile:

Hello, merci pour tes tutos, je m’amuse bien :slight_smile:

Petite question, comment tu fais pour avoir les infos de la lunes (age, phase, etc) aligné à gauche, chez moi c’est centré et c’est un peu moche pour le coup

Merci :slight_smile:

Je connais deux solutions : soit tu fais un tableau et tu classes tout dedans, mais ça prend pas mal de place, soit tu crées un virtuel pour l’affichage texte et tu associes ta valeur à cet affichage.
En voici un petit en exemple :

<div class="tooltips cmd cmd-widget #history#" data-type="info" data-subtype="string" data-cmd_id="#id#" data-cmd_uid="#uid#" data-version="#version#" style="display: block;">
   <left><span style="font-size : 12px !important;#hideCmdName#" class="cmdName">#name_display#</span> <!-- Affichage ou pas du nom -->
     	  <span style="font-size : 12px;">#state# #unite#</span> <!-- Affichage de la valeur et de l'unité -->
 	</left>
   <script>
   	jeedom.cmd.update['#id#'] = function(_options){
   		$('.cmd[data-cmd_id=#id#]').attr('title','Valeur du '+_options.valueDate+'\nCollectée le '+_options.collectDate)
   		$('.cmd[data-cmd_id=#id#] .state').empty().append(_options.display_value);
   		$('.cmd[data-cmd_id=#id#]').removeClass('label label-warning label-danger')
   		if(_options.alertLevel == 'warning'){
   			$('.cmd[data-cmd_id=#id#]').addClass('label label-warning');
   		}else if(_options.alertLevel == 'danger'){
   			$('.cmd[data-cmd_id=#id#]').addClass('label label-danger');
   		}
   	}
   	jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
   </script>
</div>

Encore une fois, ce n’est certainement pas un exemple parfait de widget car je l’ai créé au moment où je débutais mes recherches de widget, donc je n’y comprenais pas grand chose … et d’ailleurs, encore maintenant, c’est un peu la côté obscur de la force pour moi :laughing:

Merci bcp ! J’ai acheté la station météo Sainlogic et tes tutos me sont super utile !!

1 « J'aime »

Avec plaisir :slight_smile: