domotique:retro-ingenierie_d_une_station_meteo
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
domotique:retro-ingenierie_d_une_station_meteo [03/08/2019 21:25] – Température antoineve | domotique:retro-ingenierie_d_une_station_meteo [20/10/2019 15:22] (Version actuelle) – Alecto antoineve | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ~~DISCUSSION~~ | ||
+ | |||
+ | {{ : | ||
+ | |||
====== Rétro-ingénierie d'une station météo ====== | ====== Rétro-ingénierie d'une station météo ====== | ||
- | //TL;DR// : Le code est disponible sur GitHub | + | Cette station météo, "Otio WH5100" |
+ | |||
+ | //TL;DR// : Le code est disponible sur mon repo git : https://git.antoineve.me/Otio_WH5100/ | ||
===== Le signal radio ===== | ===== Le signal radio ===== | ||
Ligne 113: | Ligne 119: | ||
</ | </ | ||
- | {{ : | + | {{ : |
J'ai ensuite rapproché les relevés bruts avec les données affichées sur le terminal météo fourni. | J'ai ensuite rapproché les relevés bruts avec les données affichées sur le terminal météo fourni. | ||
Ligne 150: | Ligne 156: | ||
==== Température ==== | ==== Température ==== | ||
Pour la température, | Pour la température, | ||
- | (e.g. *[00] {79}* fe bc **64 74** bc 02 04 21 d4 f2, ici ``0x64`` et ``0x74``). | + | (e.g. '' |
L' | L' | ||
Ligne 182: | Ligne 188: | ||
J'ai également remarqué que l' | J'ai également remarqué que l' | ||
permettant d' | permettant d' | ||
+ | |||
+ | ==== Humidité ==== | ||
+ | |||
+ | Pour l' | ||
+ | On voit bien sur la courbe des relevés la relation qu'ont la température et l' | ||
+ | L' | ||
+ | La relation est donc très simple : y = 0.5 * x. | ||
+ | C'est à dire que la valeur de l' | ||
+ | |||
+ | En python : | ||
+ | |||
+ | <code pycon> | ||
+ | >>> | ||
+ | | ||
+ | ... | ||
+ | >>> | ||
+ | 94 | ||
+ | </ | ||
+ | |||
+ | ==== Anémomètre ==== | ||
+ | |||
+ | La station météo renvoie deux paramètres pour le vent : une moyenne (ou médiane ?) | ||
+ | et le maximum (ce qui correspond aux rafales). | ||
+ | Ceux-ci sont portés sur les octets 6 et 7. | ||
+ | L' | ||
+ | |||
+ | <code pycon> | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | (0.61264343715451175, | ||
+ | >>> | ||
+ | 0.0009343564466014815 | ||
+ | >>> | ||
+ | </ | ||
+ | |||
+ | J'ai essayé avec les différentes configuration : km/h, mph, knots (nœuds), ... | ||
+ | Jamais d' | ||
+ | Certainement une erreur à cause d' | ||
+ | |||
+ | La fonction est donc : | ||
+ | |||
+ | <code pycon> | ||
+ | >>> | ||
+ | ... return round((0.61264343715451175*data-0.018142655636458116), | ||
+ | ... | ||
+ | >>> | ||
+ | 55.1 | ||
+ | </ | ||
+ | |||
+ | ==== Pluviomètre ==== | ||
+ | Pour le pluviomètre, | ||
+ | il faut ajouter 0,3 mm de pluie. La donnée est codée sur 1 octet, le 8ème de la transmission, | ||
+ | Il faut pouvoir gérer cette situation. Pour plus de facilité, je stocke la valeur dans un fichier temporaire. | ||
+ | |||
+ | <code python> | ||
+ | def rain(raw): | ||
+ | | ||
+ | try: | ||
+ | with open("/ | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | if old_rain is None: | ||
+ | with open("/ | ||
+ | | ||
+ | | ||
+ | if current > old_rain: | ||
+ | res = round(float(current-old_rain)*0.3, | ||
+ | with open("/ | ||
+ | | ||
+ | else: | ||
+ | if (current+255)-old_rain < 254: | ||
+ | res = round(float((current+255)-old_rain)*0.3, | ||
+ | with open("/ | ||
+ | | ||
+ | else: | ||
+ | res = 0 | ||
+ | | ||
+ | </ |
domotique/retro-ingenierie_d_une_station_meteo.1564867509.txt · Dernière modification : 03/08/2019 21:25 de antoineve