[TUTORIEL] Soleil Lune Astre ... Azimut et Elévation ... Python

Le soleil oui on a son élévation et son azimuth dans certains plugin …
Je vous propose ici a l’aide d’un petit script en Python de trouver ces valeurs
pour le soleil, la lune … et vous verrez qui est assez simple de trouver d’autres planettes ou astres.

voici le rendu brut qui peut bien sur être amélioré et ou exploité.

le script :

#!/usr/bin/python
# -*- coding: utf-8 -*-
import math, random
import datetime 
import ephem # librairie Astro
from sys import argv
global obs, latitude, longitude # objet observateur
############################# ENTREZ ICI VOS COORDONNEES
longitude="2:35:33.623" # -W / +E
latitude="48:53:45.48" # +N / -S
###################################
obs=ephem.Observer() # objet global désigant l'observateur local
dt=datetime.datetime.now() # date/heure locale

#print dt.strftime("%d %B %Y - %H:%M:%S")

dt=datetime.datetime.utcnow() # date/heure utc 
dt.strftime("%d %B %Y - %I:%M:%S")
obs.date=datetime.date.today() # date courante
obs.date=dt

#print (obs.date)

obs.lat=str(latitude) 
obs.long=str(longitude)

sun=ephem.Sun(obs) # objet représentant le soleil basé sur paramètres observateur
moon=ephem.Moon(obs) # objet représentant la Lune basé sur paramètres observateur

if argv[1] == '1':
    print  str(math.degrees(sun.alt)) # elevation

if argv[1] == '2':
    print str(math.degrees(sun.az)) # azimut
    
if argv[1] == '3':
    print  str(math.degrees(moon.alt)) # elevation

if argv[1] == '4':
    print str(math.degrees(moon.az)) # azimut  

Ce script accepte 4 paramètres 1 2 3 4 qui donnent respectivement
1 elevation soleil
2 azimuth soleil
3 elevation lune
4 azimuth lune
Libre a vous d’ajouter mars jupiter ou d’autres objets dans les dernières lignes du script.

Attention les prés requis sont :
connaitre votre position et les inscrire au debut du script au format
degrés:minutes:secondes.décimaldesecondes

vérifier que Python soit installé et la librairie ephem
dans le cas contraire en console suivez les instructions suivantes :

# pour installer pyEphem sous Gnu/Linux
# sudo apt-get install python-dev
# sudo apt-get install python-pip
# sudo pip install pyephem

voila il ne vous reste plus qu’a créer un ou plusieurs équipement de type script.

exemple pour la Lune :

attention le chemin que j’ai utiliser pour le script n’est pas obligatoire, a vous de mettre celui de votre choix.

sources de mon inspiration :

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.PythonScriptsAstroSunElevation

https://rhodesmill.org/pyephem/tutorial

3 « J'aime »

Vraiment très joli!!!

Merci, il y a encore un peut de nettoyage dans le code a faire et aussi mettre en paramètres les coordonnées en décimale.

Je ne sais pas si ce serait utile mais tu devrais penser à en faire un plugin.
Le passage de paramètres serait simplifié et tu pourrais proposer aux utilisateurs de faire autant d’équipements que de planètes souhaitées.

Non pas de plugin pour ça c’est trop lourd .

1 « J'aime »

Même juste pour le fun?

Non mes tutoriels sont de l’initiation çà doit être abordable … un plugin c’est du clef en main pour ceux qui ne savent et ne veulent rien faire.

2 « J'aime »

Salut super le scripts.je vais me planché dessus. Ca me fait pense a d…cz

1 « J'aime »

Merci amuse toi bien c’est fait pour ca :wink:

1 « J'aime »

Super juste ce que je cherchais pour piloter précisément mes volets coté sud :grinning:

1 « J'aime »

Une question sur le plugin script et la programmation python. Si on a un dispositif avec plusieurs commandes misent à jour par la même source. Est-ce que les requêtes sont envoyées en même temps pour toutes les commandes ou les unes après les autres.
Je veux transférer le modbus rtu de ma vmc que j’ai programmé sous python dans domoticz. J’ai une dizaine de commande à créer mais je dois avoir au moins 0.1 s entre chaque requête sur un registre. Sinon ça plante. En m’inspirant de ce programme et de ce que j’ai déjà, je peux bidouiller un truc si c’est sérkel. Si paralléle, je suis plus circonspect sur comment le faire.

Merci

Antoine

Le mieux pour une meilleur maîtrise dans ce cas c’est de passer par un bloc code de scenario
sans le plugin-script …

et d’appeler ton script avec un shell_exec

voila un exemple

A toi de temporiser quand il le faut !

Tu peut aussi tout écrire en PHP attention au droits …

https://silanus.fr/sin/?page_id=172

1 « J'aime »

Merci Olive. J’ai une bonne base avec ce post.

Pour le PHP, je vais pas tenter. Je galère déjà avec le python…

Antoine

bonjour @olive,
Je viens de migrer vers l’Atlas V4.2.20 a partir de mon bon vieux RPI3b+ V3.59 qui arrivait a bout de souffle.
Depuis ton tuto, j’utilise elevsol pour piloter mes volets. Ca m’a été très utile avec la canicule !
Problème je n’ai pas pu réinstaller la librairie ephem, erreur sur l’Atlas
je me suis loger ssh en user jeedom, erreur de droit sur sudo pip install pyephem, je suis très mauvais sur Linux…
Sous jeedom message d’erreur a l’activation du script.


Je suppose que ephem devrais s’installer dans « usr »
NB je crois que les chaleurs reviennent la semaine prochaine…

Bonjour @olive, j’ai le meme pb que mick37 je lui demande si il a la soluce
en faisant en ssh python j’ai Python 2.7.16 (default, Sep 20 2023, 07:59:17) peut etre que c’est parceque j’ai deux version de python 2.7 et 3.7 ?
Bien que n’étant pas du tout spécialiste je pense que c’est parceque ephem se trouve dans /usr/local/lib/python3.7 et non danq /usr/local/lib/python2.7.
J’ai essayé de mettre au début du script #!/usr/bin/python3.7 ou #!/usr/bin/python3 mais ça ne résout rien

Bonjour @mick37, j’ai le même message, as tu résolu le pb ?

Perso je veux m’en servir avec son azimut pour descendre des stores la nuit quand la lune est pleine et dans l’axe de mes très grandes baies vitrées (>6m) et il paraitrai que la lumière réfléchie par la lune décolore les tissus (bon danger extrème si je discute ce sujet ) waf préconisation :grinning: donc j’éxécute !! :heart_eyes:

En plus de ça, il faut que l’extension du nom du fichier python ne soit pas .py. .PY conseillé.
Si l’extension est .py Jeedom lance python qui peut être associé à python2 ou python3 suivant votre installation. La directive sur la première ligne du fichier est ignorée dans ce cas.

La lib pyephem est maintenant supportée par python 3.12 PyEphem CHANGELOG — PyEphem home page
Il y a peut-être d’autres pbs dus à la version de python inférieure à 3.12 dans Buster et Bullseye

Ci-dessous le script du 1er post corrigé pour python 3. Nom du fichier avec extension .PY impératif

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import math, random
import datetime 
import ephem # librairie Astro
from sys import argv
global obs, latitude, longitude # objet observateur
############################# ENTREZ ICI VOS COORDONNEES
longitude="2:35:33.623" # -W / +E
latitude="48:53:45.48" # +N / -S
###################################
obs=ephem.Observer() # objet global désigant l'observateur local
dt=datetime.datetime.now() # date/heure locale

#print dt.strftime("%d %B %Y - %H:%M:%S")

dt=datetime.datetime.utcnow() # date/heure utc 
dt.strftime("%d %B %Y - %I:%M:%S")
obs.date=datetime.date.today() # date courante
obs.date=dt

#print (obs.date)

obs.lat=str(latitude) 
obs.long=str(longitude)

sun=ephem.Sun(obs) # objet représentant le soleil basé sur paramètres observateur
moon=ephem.Moon(obs) # objet représentant la Lune basé sur paramètres observateur

if argv[1] == '1':
    print(str(math.degrees(sun.alt))) # elevation

if argv[1] == '2':
    print(str(math.degrees(sun.az))) # azimut
    
if argv[1] == '3':
    print(str(math.degrees(moon.alt))) # elevation

if argv[1] == '4':
    print(str(math.degrees(moon.az))) # azimut  

Fonctionne avec python 3.9 et Bullseye chez moi

2 « J'aime »

Bonjour, et merci infiniment @jpty,
J’ai appliqué tes rtecommendations et ça fonctionne parfaitement sans aucune erreure.
Je suis toujours sous Buster/jeedom 4.3.2 (j’attends la version suivante de Jeedom pour passer à la version Linux qui sera alors recommandée) et en allant fouiller les répertoire je vois que j’ai trois python qui se sont installés sans doute avec la commande PIP :
Python 2, python2.7 et Python 3.7
étant tres très loin d’être un spécialiste de Linux (google m’accompagne TRES souvent :smile:) je me garderai bien de toucher à quoique ce soit.
Toujours est-il que maintenant ça fonctionne impec je vais gagner des points waf :blush:

1 « J'aime »

Actuellement ce n’est plus buster mais bullseye (11) qui est recommandé.
https://doc.jeedom.com/fr_FR/installation/