Un nouveau thème (ou skin) le Belchertown

février 12, 2021

Depuis quelques semaines , j’ai découvert un nouveau thème pour Weewx : Belchertown :  vous  pouvez le voir en action sur le site de son créateur ici : https://belchertownweather.com/

Ici  pour la station Oregon WMR200 :  https://meteo-pontscorff.fr/station-wmr200-template-belchertown/

et là pour la station WH6000 : https://meteo-pontscorff.fr/station-froggit-template-belchertown/

Ce thème est plutôt (même très) bien fait :

il intègre de :

  • De jolis graphiques ( jour/ semaine / mois et année) 
  • Les enregistrements avec les Max/ Mini  les top/ les Flop au niveau de la météo 
  • Les rapports NOAA 

 

 

Mais ce template en a  beaucoup plus sous le capot  quand on regarde de plus près :

  • Il intègre un système de temps réel : Ca c’est plus qu’intéressant , le template se met à jour en quasi temps réel ( sans refresh de la page) , il est connecté à la base de la station météo à travers le site internet.
  • Il intègre également un éphéméride très complet (on reviendra sur ce paramétrage car , il n’y a pas beaucoup de documentations sur le sujet , enfin si il y en a mais pas comme je voudrais)
  • Il intègre également un rapport de séisme récent (par défaut , on utilise une URL us mais là aussi on verra aussi  que l’on peut modifier et mettre du “local” grâce au site RéNass. ( Pour en savoir plus c’est par ici : https://renass.unistra.fr/
  • Il est complètement multi-langue : en fait vous pouvez entièrement traduire ce template dans votre langue.
  • Il est aussi assez customisable, avec une partie customisable à base de PWS Weather et AERIS.

 

Le système temps réel  : 

 

ce skin est donc doté du système de mqtt websockets  : le websocket est un protocole de communication en full-duplex à travers une connexion tcp/ip , en général associé au protocole http ou https pour initier la connexion.

le client ( le navigateur internet : chrome , firefox etc ..) et le serveur MQTT initie la connexion au travers d’une requête http puis une fois la connexion établie bascule sur le protocole websocket.

Dès lors , le client et le serveur peuvent échanger des données à travers cette connexion.

Il faut donc un serveur MQTT , il en existe des public mais je déconseille car pas forcément sécurisé, on peut utiliser son propre service comme “Mosquitto”, ActiveMQ, RabbitMQ ( je reviendrai sur cette installation plus tard dans un autre article plus complet).

Comme le site utilise le protocole https , il a fallu également sécurisé également cette partie WebSocket en enrôlant le service dans un certificat Lets Encrypt (service de certificat SSL gratuit renouvelable tous les  3 mois).

Il faut aussi une partie “client” entre autre la librairie JS “paho”,  celle-ci et les autres sont déjà intégrées au template du skin de Belchertown.

Du côté paramétrage du template Belchertown  :

sous /etc/weewx/skins/Belchertown le fichier skin.conf  :

 # MQTT Websockets defaults
mqtt_websockets_enabled = 1
mqtt_websockets_host = adresse_ip_serveur_mqtt_ou_url
mqtt_websockets_port = 9001
mqtt_websockets_ssl = 1
mqtt_websockets_topic = "wx-wmr200/#"
disconnect_live_website_visitor = 1800000

Mettre la valeur “1” pour l’activation du temps réel  : mqtt_websockets_enabled

adresse_ip_serveur_mqtt_ou_url : l’adresse ip sur lequel est installé votre broker  si vous le faite fonctionner en local , mettez l’adresse de votre serveur (linux ou rpi).

 

Il faudra également installer un broker du coté de weewx   (une extension avec différents paramétrages) 

le wiki ici : https://github.com/weewx/weewx/wiki/mqtt

l’extension la  : https://github.com/matthewwall/weewx-mqtt

On reviendra sur cette partie dans un autre article egalement ( cf installation du protocole MQTT).

 

L’éphéméride : 

 

C’est le système de lever / coucher du soleil de la lune :

avec plein d’informations toutes aussi importantes les unes que les autres.

Cette partie m’a donné du fil à retordre car en fait il  n’y  a quasi aucun paramétrage  à  effectuer !  J’ai passé du temps à chercher de quelconques paramétrages dans le fichier weewx.conf / dans le skin.conf du template mais rien !  il suffit juste d’installer le package pyephem et le tour est joué  ! 

En fait la réponse était dans les explications concernant l’installation de weewx !  ici  : http://weewx.com/docs/setup.htm

# Optional: for extended almanac information
sudo apt install python3-ephem

Surtout faites bien attention à la version que vous installez,  j’utilise la version python3 donc installez la bonne librairie ! : C ‘est également a cause de cela que ca ne fonctionnait pas , pas la bonne version du package pyephem.

Ensuite , le template Belchertown  s’appuie sur un fichier “celestial.inc” qui récupère toutes les bonnes valeurs dont vous aurez besoin et permettra son affchage sous forme de PopUp.

Attention tout de même aux traductions concernant les différentes phases de la lune , elles sont dans le skin.conf ET dans le weewx.conf ( je les ai traduites dans les 2 , mais est-ce vraiment utile ?) 

je vous donne les valeurs en anglais (en espérant les avoir bien traduites) :

 moon_phases = New, Waxing crescent, First quarter, Waxing gibbous, Full, Waning gibbous, Last quarter, Waning crescent

 

[Almanac]
# The labels to be used for the phases of the moon:
moon_phases = Nouvelle lune, Lune montante, Premier quart, Lune croissante, Pleine lune, Lune décroissante, Dernier quart, Lune descendante

Bien entendu pour activer cette partie il suffit de passer à  “1” la valeur almanac_extras dans le skin.conf  du template.

almanac_extras = 1


Les séismes locaux

 

Là aussi cette partie n’était pas si simple: j’ai utilisé un  fork du template : tout est parti d’un post trouvé sur GitHub  ici : https://github.com/poblabs/weewx-belchertown/issues/561#issuecomment-777441393

(Merci a @ddperso et à @norecords !)

il existe un organisme , Le Réseau National de Surveillance Sismique (RéNaSS) qui permet à travers  un webservice de récupérer certaines data au format JSON.

il suffisait  donc de l’adapter au template à travers la modification d’un fichier “belchertown.py” se trouvant sous  /usr/share/weewx/user/

L’url est assez simple  :

https://renass.unistra.fr/fdsnws/event/1/query?latitude=%s&longitude=%s&maxradius=%.2f&orderby=time&format=json&limit=1&minmagnitude=2&mindepth=-1

  • Latitude et longitude : les coordonnées de votre station , valeurs récupérées dans le weewx.conf 
  • Le maxradius : le rayon 
  • Le minmagnitude : c’est la valeur minimal pour le ressenti d’un séisme (en-dessous “ca ne remue meme pas la queue de la vache” !!!) cf https://www.pyrenees-orientales.gouv.fr/content/download/5746/32255/file/seisme.pdf
  • et le mindepth : si on désire que les séismes mais également les tirs de carrière ( et  oui  !!!)  il suffit de passer la valeur à  1 pour filtrer les tirs de carrières.

 

https://renass.unistra.fr/fdsnws/event/1/query?latitude=42.83&longitude=-3.42&maxradius=5&orderby=time&format=json&limit=1&minmagnitude=2&mindepth=-1
Le résultat dans un navigateur :
// 20210212215452
// https://renass.unistra.fr/fdsnws/event/1/query?latitude=42.83&longitude=-3.42&maxradius=5&orderby=time&format=json&limit=1&minmagnitude=2&mindepth=-1

{
"bbox": [
-0.054,
45.911,
-0.054,
45.911
],
"features": [
{
"geometry": {
"coordinates": [
-0.054,
45.911,
-2
],
"type": "Point"
},
"id": "602417bae810429f221ea64c",
"properties": {
"description": "Séisme de magnitude 2.1 à 33km de Angoulême",
"evaluationMode": "manual",
"mag": 2.1,
"magType": "MLv",
"place": "FRANCE",
"time": "2021-02-10T17:25:51.445000Z",
"type": "earthquake",
"url": "https://renass.unistra.fr/evenements/602417bae810429f221ea64c"
},
"type": "Feature"
}
],
"type": "FeatureCollection"
}

Ces valeurs ne seront mises à  jour que toutes les  3 heures (179 mn pour être exact , valeur que nous utiliserons 10740 (en seconde) ) dans le paramétrage.

Quand on lit les différents échanges ici https://github.com/poblabs/weewx-belchertown/pull/568 début mars (2021) il y aura une nouvelle api avec de nouvelles valeurs

Cette partie sera donc à revoir.

Dans le fichier skin.conf du template : il faudra donc avoir les valeurs suivantes :

 # Earthquake defaults
earthquake_enabled = 1
earthquake_maxradiuskm = 300
earthquake_stale = 10740
earthquake_server = ReNaSS

J’ai eu  un dernier souci : impossible de mettre la distance en km (ca restait en miles)  !  j’ai cherché partout dans le fichier weewx.conf  j’avais bien les bonnes valeurs  :

[[Defaults]]

[[[Units]]]

# The following section sets what unit to use for each unit group.
# NB: The unit is always in the singular. I.e., 'mile_per_hour',
# NOT 'miles_per_hour'
[[[[Groups]]]]

group_altitude = meter # Options are 'foot' or 'meter'
group_degree_day = degree_C_day # Options are 'degree_F_day' or 'degree_C_day'
group_distance = km # Options are 'mile' or 'km'
group_pressure = mbar # Options are 'inHg', 'mmHg', 'mbar', 'hPa', or 'kPa'

 ou dans le fichier skin.conf du template , mais rien à faire! 

J’ai donc modifié le fichier “belchertown.py” et forcé la valeur à “km” :

ligne  1060 :

"""
Earthquake Data
"""
# Only process if Earthquake data is enabled
if self.generator.skin_dict['Extras']['earthquake_enabled'] == "1":
earthquake_file = html_root + "/json/earthquake.json"
earthquake_stale_timer = self.generator.skin_dict['Extras']['earthquake_stale']
latitude = self.generator.config_dict['Station']['latitude']
longitude = self.generator.config_dict['Station']['longitude']
distance_unit = converter.group_unit_dict["group_distance"]
distance_unit = 'km'
eq_distance_label = self.generator.skin_dict['Units']['Labels'].get(distance_unit, "")
eq_distance_round = self.generator.skin_dict['Units']['StringFormats'].get(distance_unit, "%.1f")
earthquake_maxradiuskm = self.generator.skin_dict['Extras']['earthquake_maxradiuskm']

 

 

Customisation 

 

On peut aussi utiliser les prévisions à  7  jours en s’appuyant sur deux services PWS Weather et AERIS.

il faut donc ces 2 pré-requis  :

  1.  Un compte sur PWS Weather disponible ici  : https://www.pwsweather.com/register ensuite une fois votre fichier de configuration effectué dans weewx.conf ET TANT que vous alimenterez les données sur ce site ,
  2.  Il faudra vous inscrire à un autre service , AERIS, qui liera votre compte PWS avec ce dernier  https://www.aerisweather.com/signup/pws/ .

Une fois les inscriptions faites et les comptes liés vous aurez un id et une clef secrète  qui vous permettront de renseigner la partie dans le fichier skin.conf comme ceci  :

 # Forecast defaults
forecast_enabled = 1
forecast_provider = "aeris"
forecast_api_id = "api_key"
forecast_api_secret = "api_secret"
forecast_units = "ca"
forecast_lang = "en"
forecast_stale = 3540
forecast_aeris_use_metar = 1
forecast_alert_enabled = 0
forecast_alert_limit = 1
forecast_show_daily_forecast_link = 0
forecast_daily_forecast_link = ""

 

Attention  pour la valeur “forecast_units” = “ca”

us: Imperial units (the default)
ca: same as si, except that wind speed and wind gust are in kilometers per hour
uk2: same as si, except that visibility is in miles, and wind speed and wind gust in miles per hour
si: SI units
SI units are as follows:

chance of precipitation: Centimeters.
temperature: Degrees Celsius.
temperature min: Degrees Celsius.
temperature max: Degrees Celsius.
wind speed: Meters per second.
wind gust: Meters per second.
visibility: Kilometers.

Par défaut , La  valeur des mesures est “us” ( degré Farenheight , miles etc …)  ne pas oublier de mettre “ca” ou “si”

Les infos ont été trouvées ici  : https://github.com/poblabs/weewx-belchertown#forecast-units

 

Conclusion 

 

J’ai l’impression qu’il y a pas mal d’engouement autour de ce template pour Weewx,  à voir toutes les demandes  sur GitHub.  Pour ma  part, ce qui est intéressant c’est la mise en  place du websockets , donc du temps réel , sa mise en place m’a fait revoir toute ma configuration au  niveau et autour de Weewx  mais ca on en reparlera prochainement.

Ce template est utilisé sur un systeme a base de DEBIAN version 10 , j’ai actuellement  2 stations connectées : une “vieille base” Oregon Scientifics WMR200 (sonde UV Et Pluviometre HS)  et une nouvelle base une FROGGIT WH 6000. J’ai donc modifié quelque peu  ma config  concernant ce template afin que les 2 bases météo puissent utiliser le temps réel et avoir leur propre paramétrage mais là aussi cela fera partie d’un autre article !