Stellarium : ajout automatique de télescopes et capteurs

Stellarium est un outil bien connu de « carte du ciel » fort apprécié par les amateurs.

Il dispose de nombreuses extensions ou outils (nommés « plugin ») dont celui nommé « Ocular » sert à présenter le « champ » capturé avec une configuration télescope + capteur donnée sur le ciel courant.

Cette extension est évidemment fort pratique pour gérer ses soirées d’observations, voire choisir son matériel.

Cet affichage se base sur une « liste » de matériels en plusieurs catégories (dont telescopes et capteurs), qui décrits leurs caractéristiques. Cette liste est gérée manuellement via un panneau de contrôle du plugin.

Tout fonctionne, mais cette gestion est fastidieuse avec une longue liste, et si on réinstalle le logiciel ailleurs, on la perd.
Logique, car le contenu affiché se trouve stocké dans un fichier et sous-directory « user local » de l’utilisateur du PC.

  • sur Windows : C:\Users\<user>\AppData\Roaming\Stellarium\modules\Oculars\ocular.ini
  • sur Linux (validé sur Raspberry Debian) : cd /home/<user>/.stellarium/modules/Oculars/ocular.ini

Le contenu de ce fichier est celui d’un fichier « style » configuration classique…

[General]
oculars_version=3.1
use_max_exit_circle=true
ocular_count=18
ccd_count=113
telescope_count=177
enable_control_panel=true
use_decimal_degrees=false
autolimit_stellar_magnitude=true
limit_stellar_magnitude_oculars=true
limit_stellar_magnitude_oculars_val=12.00
lens_count=3
require_selection_to_zoom=true
use_initial_fov=false
use_initial_direction=false
use_semi_transparency=false
transparency_mask=85
hide_grids_and_lines=true

etc

Les télescopes sont logiquement stockés dans la section « Telescope » et les capteurs dans la section « ccd » de ce fichier.
Dans la section « General » on peut voir le nombre de tubes et capteurs que j’ai désormais stocké… (177 tubes et 113 ccd)

Je me propose donc de convertir un tableur d’inventaire (maintenu à part, actuellement la V28) vers ce format et ainsi bénéficier facilement d’un large choix de configuration.

Le fichier source est en format csv classique :

Telescopes :

« Type », »Nom », »Diametre », »Focale », »Poids », »LongueurTube », »f », »F/D »,,
« Telescope », »Bresser 152/1200″,152,1200,,,, »7,9″,,
« Telescope », »Bresser 203/1200″,203,1200,,,, »5,9″,,
« Telescope », »Bresser Newton 150/750″,150,750,,,, »5,0″,,
« Telescope », »Celestron C6 XLT »,150,1500, »4.5″,406,, »10,0″,,
« Telescope », »Celestron C8 XLT »,203,2032, »5.7″,432,, »10,0″,,
« Telescope », »Celestron C9 XLT »,235,2350,9,559,, »10,0″,,
« Telescope », »Celestron C11 XLT »,280,2800, »12.5″,610,, »10,0″,,
« Telescope », »Celestron C14 XLT »,355,3910, »20.4″,787,, »11,0″,,
« Telescope », »Celestron RASA 8″,203,400,,,, »2,0″,,
« Telescope », »Celestron RASA 11″,279,620,,,, »2,2″,,

CCD :
« Type », »Capteur », »Capteur L », »Capteur H », »Taille pixel », »Tailleimage », »Horiz. », »Vert. »
« Altair 296C », »IMX269″, »17,6″, »13,3″, »3,3″, »3956×5280″,3956,5280
« Altair Hypercam 585C », »IMX585″, »11,1″, »6,2″, »2,9″, »3840×2160″,3840,2160
« Altair Hypercam AA24CFX », »IMX410″,36,24, »3,76″, »6064×4040″,6064,4040
« Altair Hypercam AA61CFX », »IMX455″,36,24, »3,76″, »9568×6380″,9568,6380
« Atik 11000″, »KAI 11002″, »36,072″, »24,048″,9, »4008×2672 »,4008,2672
« Atik 314E », »ICX-205AL », »6,4728″, »4,836″, »4,65″, »1392×1040″,1392,1040
« Atik 314L », »ICX-285AL », »8,9784″, »6,708″, »6,45″, »1392×1040″,1392,1040
« Atik 4000″, »KAI 04022″, »15,1552″, »15,1552″, »7,4″, »2048×2048 »,2048,2048
« Atik Horizon II Color CMOS », »MN34230″, »17,7″, »13,4″, »3,8″, »4640×3506″,4640,3506

Le programme Python de conversion est en soi fort simple, car il utilise une librairie « configparser » qui s’occupe de gérer les éléments.

La logique est évidente :

  1. ouvrir le fichier ocular.ini original et en faire une copie (in cas of… 🙂
  2. lire toutes les sections actuelles
  3. supprimer les sections [telescope] et [ccd]
  4. les recréer sur base des fichiers externes (une simple table Pandas gère parfaitement cela)
  5. sauver le « nouveau » fichier sous le nom ocular_new.ini

Ensuite, c’est à l’utilsiateur de décider quand il veut supprimer le fichier original et le remplacer (sous le nom ocular.ini obligatoire) dans la sub-directory du PC concerné.

Le programme:

# -*- coding: utf-8 -*-
"""
Created on Fri Mar 22 08:33:18 2024

@author: TTF
"""
import configparser
import pandas as pd
import time

rundate = time.strftime('%Y_%m_%d-%H%M%S')

df_telescope = pd.read_csv('V27_telescope.csv',encoding='cp1251')
df_ccd = pd.read_csv('V27_ccd.csv',encoding='cp1251')

df_telescope = df_telescope[df_telescope["Type"]=='Telescope']
df_ccd = df_ccd[df_ccd["Capteur"]!='']
df_ccd = df_ccd.dropna()

current_telescope = 0
current_ccd = 0

count_telescope = df_telescope.shape[0]
count_ccd = df_ccd.shape[0]

config = configparser.ConfigParser()
config.read("C:\\Users\\\\AppData\\Roaming\\Stellarium\\modules\\Oculars\\ocular.ini")

with open("C:\\Users\\\\AppData\\Roaming\\Stellarium\\modules\\Oculars\\ocular.ini","r") as file:
config_in = file.readlines()

with open("C:\\Users\\\\AppData\\Roaming\\Stellarium\\modules\\Oculars\\ocular_"+rundate+".ini","w") as file:
file.writelines(config_in)

config["General"]["telescope_count"]= str(count_telescope)
config["General"]["ccd_count"] = str(count_ccd)

print(config.sections())

config.remove_section("telescope")
config.remove_section("ccd")

print(config.sections())

config.add_section("telescope")

for index, row in df_telescope.iterrows():
name = str(row['Nom'])
name = name.replace('"','')
name = name.replace(',','.')

config["telescope"][str(current_telescope)+"\\name"] = name
config["telescope"][str(current_telescope)+"\\focalLength"] = str(row['Focale'])
config["telescope"][str(current_telescope)+"\\diameter"] = str(row['Diametre'])
config["telescope"][str(current_telescope)+"\\hFlip"] = "false"
config["telescope"][str(current_telescope)+"\\vFlip"] = "false"
config["telescope"][str(current_telescope)+"\\equatorial"] = "false"
current_telescope += 1

print(config.sections())

config.add_section("ccd")

for index, row in df_ccd.iterrows():
name = str(row['Type'])
name = name.replace('"','')
name = name.replace(',','.')

L = row['Capteur L'].replace(',','.')
H = row['Capteur H'].replace(',','.')

config["ccd"][str(current_ccd)+"\\name"] = name
config["ccd"][str(current_ccd)+"\\resolutionX"] = str(int(row['Horiz.']))
config["ccd"][str(current_ccd)+"\\resolutionY"] = str(int(row['Vert.']))
config["ccd"][str(current_ccd)+"\\chip_width"] = str(L)
config["ccd"][str(current_ccd)+"\\chip_height"] = str(H)
config["ccd"][str(current_ccd)+"\\chip_rot_angle"] = "0"
config["ccd"][str(current_ccd)+"\\binningX"] = "1"
config["ccd"][str(current_ccd)+"\\binningY"] = "1"
config["ccd"][str(current_ccd)+"\\has_oag"] = "false"
config["ccd"][str(current_ccd)+"\\prism_height"] = "0"
config["ccd"][str(current_ccd)+"\\prism_width"] = "0"
config["ccd"][str(current_ccd)+"\\prism_distance"] = "0"
config["ccd"][str(current_ccd)+"\\prism_pos_angle"] = "0"
current_ccd += 1

print(config.sections())

with open("C:\\Users\\\\AppData\\Roaming\\Stellarium\\modules\\Oculars\\ocular.ini", 'w') as configfile:
config.write(configfile,space_around_delimiters=False)

Et pour ceux que cela intéresse, voici mon fichier ocular.ini qui contient l’entièreté de ma liste.
On couvre déjà une bonne partie du marché des tubes courants et des CCD du marché.

Il vous suffit de

  • le sauver sous le nom « ocular.ini » quelque part
  • aller dans la sub-dir
    • Windows : C:\Users\<user>\AppData\Roaming\Stellarium\modules\Oculars\ocular.ini
    • Linux :  /home/<user>/.stellarium/modules/Oculars/ocular.ini
  • renommer le fichier ocular.ini vers autre chose (du genre ocular.ini.backup)
  • de copier le fichier ocular.ini déchargé
  • démarrer Stellarium, et vous disposez de toutes les données dans le plugin « ocular »

Je vous engage toujours à faire une copie de votre fichier original AVANT !
J’ai testé ce fichier sur une version récente de Stellarium, peut-être que sous une plus ancienne, il pourrait ne pas fonctionner correctement.
Et donc : je dégage évidemment toute responsabilité en cas de fausse manipulation ou problème…
Au pire : il suffit de dé-installer/réinstaller Stellarium !

Bonne scéance de Stellarium…