Coin web de Frédéric Péters

Munin multigraphe et Ă©metteur FM

Avec un parfait sens du timing l’émetteur de la radio a commencé une panne ce week-end, diagnostic pas vraiment évident, on n’a jamais à y toucher et du coup les paramètres d’un fonctionnement normal ne sont pas parfaitement connus, on a donc un peu tâtonné avant d’avoir une intervention d’un technicien du revendeur confirmant un réel soucis de puissance d’émission. Émetteur rapidement remplacé mardi, tout rentré dans l’ordre. (même si nouvelle intervention sur le site de l’émetteur nécessaire le lendemain parce que là aussi parfait sens du timing, il y avait installation d’un nouveau générateur dans l’immeuble avec coupure bien trop longue pour l’onduleur).

Mais histoire d’avoir une vue sur ces paramètres et être meilleurs au diagnostic une prochaine fois, j’ai enfin profité du fait que notre nouveau (depuis quelques années quand même) modèle d’émetteur se branche sur le réseau et propose une API pour l’exploiter et produire quelques graphes.

Dans la série des fidèles outils lowtech, il y a munin, depuis  bien longtemps au poste pour fournir des graphes de monitoring et conçu tel qu’il est super facile de lui faire avaler de nouvelles données : très basiquement il y a juste à écrire un script qui va afficher la valeur de l’élément mesuré, et voilà, c’est fait, peu importe le langage. C’est ainsi très basique, même si ça a gagné des sophistications au fil du temps, pour définir le type des données, pour se configurer automatiquement, etc.

Jusqu’à présent j’avais toujours créé des scripts pour grapher une donnée, ou plusieurs du même type tenant avec un certain sens ensemble sur le même graphe, mais avec l’émetteur il y avait des données d’unités et de grandeurs toutes différentes, peu de sens à avoir sur le même graphique les 40°C de la température et les 140 watts de la puissance d’émission. Classiquement dans cette situation j’aurais fait n variations pour produire n graphes mais c’était sans compter une nouvelle possibilité de munin (nouvelle pour moi, ça fait quand même des années), il est désormais possible pour un seul script de produire plusieurs graphes. Il y a des exemples plutôt avancés fournis avec munin mais in fine l’affaire reste très simple, il suffit d’écrire multigraph whatever_foo pour délimiter les graphes.

Au final ça donne :

#! /usr/bin/env python3
#%# capabilities=autoconf

import requests
import sys
import xml.etree.ElementTree as ET

if len(sys.argv) == 2 and sys.argv[1] == 'autoconf':
    print('yes')
    sys.exit(0)

if len(sys.argv) == 2 and sys.argv[1] == 'config':
    print('''
multigraph bwbroadcast_fwd_power
graph_title Watts FWD
graph_category transmitter
fwd_power.label Value

multigraph bwbroadcast_rev_power
graph_title Watts REV
graph_category transmitter
rev_power.label Value

[...]
''')
    sys.exit(0)

session = requests.Session()
session.get('http://emetteur/api/auth?password=XXX', timeout=5)
for parameter in ('fwd_power', 'rev_power', 'pa_voltage',
                  'aux_voltage', 'pa_temp', 'peak_deviation'):
    resp = session.get('http://emetteur/api/getParameter?id=meters.' + parameter,
                       timeout=5)
    print('multigraph bwbroadcast_%s' % parameter)
    print('%s.value %s' % parameter, end=' ')
    print(ET.fromstring(resp.content).find('parameter').attrib['value'])

session.get('http://emetteur/api/logout', timeout=5)

Ça produit par exemple ceci :

Et le lecteur curieux qui sera allé consulter frequency deviation sur Wikipedia trouvera ces valeurs un peu élevées par rapport à la norme, c’est la vie™ (mais oui ça doit sans doute être ajusté, quand on récupérera notre émetteur réparé).

9 avril 2020, 17:40