Base de données basé sur des marqueur temporel

InfluxDb est une base de données open source basé sur des marqueur de temps. N’avez-vous jamais eu besoin de garder une trace de mesures périodiques? Si oui InfluxDb est fait pour vous. Installation facile sous Linux/MacOs 64bits comme indiqué sur cette page web. Une fois installé vous pouvez vérifier si cela fonctionne correctement à travers une interface web comme illustré ci-dessous.

Exemple de l'interface web pour InfluxDb

Exemple de l’interface web pour InfluxDb

La magie arrive, il existe un module python influxdb-python pour interagir avec cette base de données. L’installation est expliqué dans le lien précédent.

Maintenant c’est parti. Ouvrir un éditeur de texte et écrire un script python pour créer votre base de donnée et commencer à la remplir. Ci-dessous un exemple pour enregistrer dans une table nommé Hasard un nombre aléatoire dont l’intervalle temporel entre deux écriture est défini par le précédent nombre aléatoire.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from influxdb import InfluxDBClient #, exceptions
import os.path
import cProfile, pstats
from random import uniform
from datetime import *
import time

HOST = « debian8 »
DATABASE = « Hasard »
separator= », »;
tags = {}
tags[‘location’]= »Ma maison »
tags[‘object’]= »Python nombre aleatoire »
dateMeasurement=None

def addMeasure(value,valueDescriptor,dateMeasurement,tags):
  point=[];
 point = {
  « measurement »: valueDescriptor,
  « tags »: tags,
  « time »: dateMeasurement.strftime(« %Y-%m-%dT%H:%M:%S.%fZ »),
  « fields »: {
   « value »: value,
  }
 }
 return point

def main():
  profile = cProfile.Profile(subcalls=False)
 profile.enable()
 client = InfluxDBClient(host = HOST, database = DATABASE)
 if not {‘name’: DATABASE} in client.get_list_database():
  client.create_database(DATABASE)
 while(1):
  points=[]
  nombre=uniform(0,1)
  points.append(addMeasure(nombre, »nombre aleatoire »,datetime.now(),tags))
  client.write_points(points)
  time.sleep(nombre)

if __name__ == ‘__main__’:
  main()

Première et deuxième ligne non obligatoire, juste pour dire à bash que c’est du python et qu’il faut l’encoder en utf8.
Les trois lignes d’après sont l’importation des modules pour travailler avec influxdb. Ensuite on importe les modules pour les nombre aléatoires, manipuler les dates sous forme de chaîne de caractères et pour finir les outils pour gérer le temps.

On définit quelques variables et définition une variable « tag » qui permet d’ajouter des champs personnels à vos données. Ici la position et le type d’objet.

Une fonction pour définir un point de mesure sous le format défini.

Pour finir la fonction main qui se connecte à influxdb, créer une table nommé Hasard si elle n’existe pas déjà. Une loupe infini où l’on crée un nombre aléatoire entre 0 et 1, puis on l’écrit dans la base de donnée avec tous les attributs définie comme le temps de la mesure (requis), la position (facultatif), …

Maintenant que l’on a rempli notre base de donnée de nombre aléatoire comment les visualiser simplement nos données. La solution Grafana un autre serveur qui permet de configurer par une interface web l’affichage de données. Pour l’installation vous devez en gros avoir un serveur apache sous la main ensuite allez sous http://grafana.org/ et suivre les instructions.

Une fois installé, vous pouvez vous connecter à votre base de données. Un bouton « vérifier » permet de contrôler que Grafana arrive bien a se connecter à votre base de donnée InfluxDb.

Grafana database setup exemple

Grafana database setup exemple

Une fois la connexion vérifié, il ne vous reste plus qu’à créer une vue appelé dashboard. Reste plus qu’à vous occuper de configurer votre visualisation des données.Ensuite vous pourrez vous balader en zoomant, définissant une période précise comme aujourd’hui, la semaine dernière, etc.Ci-dessous un exemple avec deux représentation différentes des même données.

Nombre aléatoire représenter de deux manière différente.

Nombre aléatoire représenter de deux manière différente.

Autre exemple dans un projet de domotique :

Panneau d'exemple Grafana

Panneau d’exemple Grafana avec visualisation de diverses grandeurs physique comme la température l’humidité et la pression.

Laisser un commentaire