j'ai finalement eu un peu de temps pour développer un script Python qui permet de faire la passerelle entre le format de fichier retourné par l'AAG SOLO sur le réseau et le format reconnu par Prism.
Pour rappel, mon AAG cloudwatcher est raccordé à l'AAG Solo lui-même raccordé au réseau de la box. Sous Prism, il faut configurer le moniteur de nuage sur "Boltwood CloudSensor II ou Sentinel Shelyak" et cocher "Fichier de sortie" en pointant vers le fichier retourné par ce script.
Voici le script en question, à copier dans un fichier ".txt" en renommant l'extension en ".py":
Code : Tout sélectionner
#!/usr/bin/python
# -*- coding: utf8 -*-
# Version du 03/08/17
# Script Python permettant de faire la conversion de fichier entre le fichier fourni par l'aag_solo sur le reseau ("aag_sld.dat) et le format de fichier reconnu par Prism
# Requis: un AAG Cloudwatcher et un AAG Solo, l'AAG Solo est raccorde au reseau de la box
# Version 3 de Python necessaire
# Commande de lancement dans une console python: exec(open('moniteur_nuage.py').read())
# Commande de lancement dans un fichier bat: python moniteur_nuage.py
# Format de donnees gere par Prism: Date       Time        T V  SkyT  AmbT  SenT    Wind   Hum DewPt  Hea R W Since Now()Day's   c w r d  [Mag]  [Windir]
# Configuration sous Prism: configurer le moniteur de nuage sur "Boltwood CloudSensor II ou Sentinel Shelyak" et cocher "Fichier de sortie" en pointant vers le fichier retourne par ce script ('prism_sld.dat')
# Importation des modules
import time
import os
# Variables d'environnement
dossier_aag=r'\\AAGSOLO\\AAGSolo'                                 #Dossier de l'AAG SOLO sur le reseau Windows, ce dossier doit contenir le fichier: 'aag_sld.dat'
dossier_prism='E:\\Bureau\\python_prism\\repertoire_prism'        #Dossier arbitraire sur le PC local, Prism devra pointer vers ce dossier pour la lecture du fichier de sortie: 'prism_sld.dat'
nom_fichier_aag='aag_sld.dat'
nom_fichier_prism='prism_sld.dat'
interval_maj=10                                                   #toutes les 10s
# Fonctions
def lecture(nom,tableau):
    """
    Lecture d'un fichier mono_ligne
    """
    fichier=open(nom)
    table=fichier.readlines()                                    #str (chaine de caracteres)
    fichier.close()
    for config in table:
        ligne=config.split()                                     #liste de str, suppression des espaces et tabulations
        tableau.extend(ligne)
    tableau=tableau[:-1]                                         #enlevement du dernier caracteres, acces au tableau: tableau[i][j]
    del table, ligne
    return
def ecriture(nom,tableau):
      """
      Ecriture d'un tableau dans un fichier
      """
      table=str()
      fichier=open(nom,'w')
      fichier.write(tableau)
      fichier.close()
while True:
  # Attente
  time.sleep(interval_maj)
  # Ouverture du fichier retourne par l'aag_solo
  data_aag_brut=[]
  lecture(os.path.join(dossier_aag, nom_fichier_aag),data_aag_brut)
  # Correction du format des donnees
  nb_donnees=len(data_aag_brut)
  data_aag=[]
  if nb_donnees!=21:
     for donnee in enumerate(data_aag_brut):
         if donnee[0]==0 or donnee[0]==1 or donnee[0]==2 or donnee[0]==3:                  #Pas de probleme avec les quatre premieres donnees (date et temps , T et V)
            data_aag.extend([donnee[1]])
         else:
            try:
               float(donnee[1])
               data_aag.extend([donnee[1]])
            except:                                                                        #Correction si un signe - est accole
               correction=donnee[1].split('-')
               nb_problemes=donnee[1].count('-')
               position_ini=donnee[1].index('-')
               if position_ini==0:
                  localisation=[1]
                  correction=correction[1:]
               else:
                  localisation=[0]
               for i in range(1,len(correction)):
                  localisation.extend([1])
               for i in range(0,len(correction)):
                   if localisation[i]==0:
                      data_aag.extend([correction[i]])
                   else:
                      data_aag.extend([str(-float(correction[i]))])
  else:
     data_aag=data_aag_brut
  # Mise en forme des donnees de l'aag
  Date=data_aag[0]
  Time=data_aag[1]
  T=data_aag[2]
  V=data_aag[3]
  SkyT=data_aag[4]
  AmbT=data_aag[5]
  SenT=data_aag[6]
  Wind=data_aag[7]
  Hum=data_aag[8]
  DewPt=data_aag[9]
  Hea=data_aag[10]
  R=data_aag[11]
  W=data_aag[12]
  Since=data_aag[13]
  Now_day=data_aag[14]
  c=data_aag[15]
  w=data_aag[16]
  r=data_aag[17]
  d=data_aag[18]
  Mag=data_aag[19]
  Windir=data_aag[20]
  # Creation du format reconnu par Prism
  data_prism=Date.ljust(11)+Time+T.rjust(2)+V.rjust(2)+SkyT.rjust(6)+AmbT.rjust(6)+SenT.rjust(6)+Wind.rjust(8)+Hum.rjust(5)
  data_prism+=DewPt.rjust(6)+Hea.rjust(4)+R.rjust(4)+W.rjust(2)+Since.rjust(6)+Now_day.rjust(13)+c.rjust(2)
  data_prism+=w.rjust(2)+r.rjust(2)+d.rjust(2)+Mag.rjust(7)+Windir.rjust(5)
  # Exportation du fichier au format Prism
  ecriture(os.path.join(dossier_prism, nom_fichier_prism),data_prism)
En espérant que cela puisse être utile à quelqu'un.
Cordialement,
David




