Identification

 
Login
Mot de passe
Demander une information
Python donne la météo

Le but de cette page est d'expliquer comment dialoguer depuis python avec une station météo WS3500 ou WS3650.

Photo de la station météo WS3500
  • Spécifications
  • Interrogateur
  • Snynchro BDD
  • Graphiques
  • Automatisation
 

préambule :

Tout d'abord je ne souhaite pas remercier La Crosse Technologie qui n'ont pas souhaité communiquer le protocole de communication avec leur station météo.

Ensuite, je ne suis évidemment pas responsable des effets non désirables de l'utilisation de mes programmes... :p

Enfin, heureusement qu'il y a déjà des gens qui se sont penchés sur le problème pour me faciliter grandement la tâche, tout particulièrement les membres du projet open3600.Ce projet a le mérite d'être libre, open source et multi plateforme (linux et windows) mais il a le gros inconvénient d'avoir des exécutables différents et difficilement intégrables dans d'autres applications, sans compter la lisibilité du langage C qui n'a rien à voir avec celle de mon langage fétiche, python !


Description du protocole

La station météo WS3500/WS3650 communique via le port série (RS232 pour les pros) :

  • Vitesse : 300 (c'est un peu lent mais bon...)
  • Bits de données : 8
  • Bits de stop : 1
  • Parité : aucune
  • Protocole : aucun (propriétaire pfff...)
  • Timeout : aucun

Résumé du protocole

Le protocole de communication se résume ainsi :

  1. Initialisation de la communication
  2. Envoi de l'adresse
  3. Envoi de la commande
  4. Lecture de la réponse

Initalisation

L'initialisation se passe ainsi :

  1. On écrit 2000 "U" (va savoir pourquoi mais c'est comme ça...)
  2. DTR = 0
  3. RTS = 0
  4. On attend un laps de temps que le DSR passe à 1
  5. On attend un laps de temps que le DSR passe à 0
  6. RTS = 1
  7. DTR = 1
  8. On écrit 2000 "U" (rebelotte...)

Commandes

De ce qu'on sait, il y a 2 commandes :
a0 - donner l'adresse et écrire les éventuelles données à écrire dans la mémoire, la commande a0 est sur 3 octets + données à écrire + fin
1er octet - le code commande : a0
2e octet - octet fort de l'adresse
3e octet - octet faible de l'adresse
n octets - données à écrire dans la mémoire, après chaque octet écrit, la séquence suivante du signal doit être effectuée
- RTS=0,
- lire l'état de CTS - doit être à 1,
- DTR=0,
- DTR=1
m octets - fin de la séquence : DTR=0, RTS=0, RTS=1, DTR=1, RTS=0

a1 - lire la mémoire interne à partir de l'adresse mise par la commande a0 (même en cas d'écriture par la commande a0), la commande a1 est sur un octet (sans paramètre):
1 octet - le code commande : a1
après chaque octet lu (excepté le dernier) la séquence suivante doit être effectuée :
- envoyer le bit 0 à la station
- RTS=0
après le dernier octet lu, la séquence suivante doit être effectuée (marque de fin de lecture):
- RTS=1,
- DTR=0,
- RTS=0,
- RTS=1,
- DTR=1,
- RTS=0


Structure d'un enregistrement d'historique

Un enregistrement d'historique tient sur 18 octets de la manière suivante :

  1. minute (BCD)
  2. heure (BCD)
  3. jour (BCD)
  4. mois (BCD)
  5. année (BCD)
  6. température intérieure 1s et 0.1s (BCD)
  7. quartet fort de l'octet : température extérieure 0.1s (BCD), quartet faible de l'octet : température intérieure 10s (BCD)
  8. température extérieure 10s et 1s (BCD)
  9. pression absolue 1s et 0.1s (BCD)
  10. pression absolue 100s et 10s (BCD)
  11. quartet fort de l'octet : taux d'humidité intérieure 1s (BCD), quartet faible de l'octet : pression absolue 1000s (BCD)
  12. quartet fort de l'octet : taux d'humidité extérieure 1s (BCD), quartet faible de l'octet : taux d'humidité intérieure 10s (BCD)
  13. quartet fort de l'octet : quartet faible du compteur de précipitation (BIN), quartet faible de l'octet : taux d'humidité extérieure 10s (BCD)
  14. octet fort du compteur de précipitation (BIN)
  15. octet faible de la vitesse du vent (BIN)
  16. quartet fort de l'octet : direction du vent (BIN), quartet faible de l'octet : octet fort de la vitesse du vent (BIN)
  17. octet faible de la rafale (BIN)
  18. quartet fort de l'octet : ? (toujours à 0), quartet faible de l'octet : octet fort de la rafale (BIN)

Les températures sont en Celsius mais il faut ôter 40 (décimal) pour obtenir les bonnes valeurs.

Le nombre de précipitation peut être calculé en soustrayant les valeurs des deux enregistrements et en les multipliant par 0.518.


Description du signal dans la communication

Signal Direction Description
RxD Non utilisé
TxD --> Signal pas clair, on l'utilise seulement à l'initialisation pour envoyer des caractères U (0x55)
DTR --> Données de sortie
RTS --> Horloge
CTS <-- Données en entrée
DSR <-- Utilisé seulement à l'initialisation