Re: Base RRD

Top Page

Reply to this message
Author: Frédéric
Date:  
To: Guilde
Subject: Re: Base RRD
Le 23/07/2015, Frédéric a écrit :

> Merci pour la proposition ; je vais regarder et ajuster.


Bon, ça fonctionne :o)

Maintenant, j'essaye d'ajuster les paramètres pour obtenir des graphes
intéressants. Mais c'est pô gagné :o/

L'idée est d'avoir 4 graphes :

- jour (30h)
- semaine (8d)
- mois (5w)
- année (57w)

Pour chaque graphe, je veux avoir un lissage (moyenne) correspondant :

- jour -> 5m (pas de moyenne, 5m étant le step)
- semaine -> 30m
- mois -> 2h
- année -> 1d

Mais les graphes que j'obtiens ne correspondent pas à ce que je veux. Par
exemple, sur la courbe annuelle, on voit l'oscillation courte de la
journée, alors qu'il devrait utiliser la moyenne sur la journée comme
résolution.

Inversement, sur la courbe journalière, on ne voit pas la résolution de
5m !

J'ai pourtant (en principe) respecté les recommandations à propos de la
résolution :

    http://oss.oetiker.ch/rrdtool/doc/rrdfetch.en.html


en restant sur des multiples de 300 (je suppose que ça s'applique aux
graphes ?).

J'ai essayé plein de trucs, sans succès. Est-ce que je demande quelque
chose d'impossible ? Ou est-ce juste un problème de paramétrage ?

À noter que la taille de l'image demandée influe sur le lissage ; en
réduisant à 800px de large, ça change totalement le résultat du graphe sur
l'année, qui est en fait ce que je voudrais obtenir, mais quelle que soit
la taille de l'image...

Merci de vos lumières.

PS : je ne peux pas uploader les images, mais le script python permet de
les générer.

-- 
    Frédéric

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
import math

import rrdtool

# Paramètres base RRD
STEP = 300 # 5m
HEART_BEAT = 2 * STEP
XFF = 0.5

# Paramètres données bidons
SHORT_PERIOD = 24 * 3600 # 24h
LONG_PERIOD = 365 * 24 * 3600 # 365d
SHORT_PERIOD_PP = 15.
LONG_PERIOD_PP = 30.
AVERAGE = 15

# Paramètres graphes
W = 1200
H = 500

# Calcul de l'intervalle de temps (57w en arrière à partir de maintenant)
now = int(time.time() / 300) * 300 # rounded on step
start = now - 57 * 7 * 24 * 3600 # 57w

# Création base
rrdtool.create("weather.rrd",
               "--start", "%d" % (start - 1),
               "--step", "%d" % STEP,
               "DS:temp:GAUGE:%d:-30:70" % HEART_BEAT,
               "RRA:AVERAGE:%f:1:360" % XFF,      # 30h@5m
               "RRA:AVERAGE:%f:6:2304" % XFF,     # 8d@30m
               "RRA:AVERAGE:%f:24:10080" % XFF,   # 5w@2h
               "RRA:AVERAGE:%f:288:114912" % XFF  # 57w@1d
              )


# Remplissage base avec données bidons
current = start
while current <= now:
    temp = AVERAGE + \
           -LONG_PERIOD_PP * math.cos(current * 2 * math.pi / LONG_PERIOD) + \
           -SHORT_PERIOD_PP * math.sin(current * 2 * math.pi / SHORT_PERIOD)
    rrdtool.update("weather.rrd", "%d:%d" % (current, temp))


    current += STEP



# Création des graphes
rrdtool.graph("30h.png",
              "--imgformat", "PNG",
              "--width", "%d" % W,
              "--height", "%d" % H,
              "--slope-mode",
              "--dynamic-labels",
              "--start", "end-30h",
              "--title", "Température",
              "--vertical-label", "température (°C)",
              "--base", "1000",
              "DEF:temp_avg=weather.rrd:temp:AVERAGE",
              "LINE2:temp_avg#AA0000"
             )


rrdtool.graph("8d.png",
              "--imgformat", "PNG",
              "--width", "%d" % W,
              "--height", "%d" % H,
              "--slope-mode",
              "--dynamic-labels",
              "--start", "end-8d",
              "--title", "Température",
              "--vertical-label", "température (°C)",
              "--base", "1000",
              "DEF:temp_avg=weather.rrd:temp:AVERAGE",
              "LINE2:temp_avg#AA0000"
             )


rrdtool.graph("5w.png",
              "--imgformat", "PNG",
              "--width", "%d" % W,
              "--height", "%d" % H,
              "--slope-mode",
              "--dynamic-labels",
              "--start", "end-5w",
              "--title", "Température",
              "--vertical-label", "température (°C)",
              "--base", "1000",
              "DEF:temp_avg=weather.rrd:temp:AVERAGE",
              "LINE2:temp_avg#AA0000"
             )


rrdtool.graph("57w.png",
              "--imgformat", "PNG",
              "--width", "%d" % W,
              "--height", "%d" % H,
              "--slope-mode",
              "--dynamic-labels",
              "--start", "end-57w",
              "--title", "Température",
              "--vertical-label", "température (°C)",
              "--base", "1000",
              "DEF:temp_avg=weather.rrd:temp:AVERAGE",
              "LINE2:temp_avg#AA0000"
             )