-
Notifications
You must be signed in to change notification settings - Fork 7
New Module French
Ce document explique comment créer et configurer dans un système Pollux’NZ City en version beta 2.0, un nouveau module d’envoi des données vers des silos de données, quels qu’ils soient. Afin de simplifier au maximum la tâche de conversion et de traitement des données avant envoi, ce module est à programmer en python et sera exécuter par la passerelle Pollux’NZ City à chaque envoi de données.
Ainsi, pour créer un module d’envoi de données, 2 éléments sont absoluments nécessaires : d’une part la chaîne « DEFAULT_CONFIG » qui défini les éléments de configurations accessibles par le module et configurables à travers l’interface « Datastores » de la passerelle, et la fonction « push_to_datastore() », qui effectue l’envoi des données. Seule la clef « activated »
doit être absolument déclarée, ou il ne sera pas possible d’activer le module une fois chargé dans la passerelle Pollux’NZ City.
"""
Contains the default configuration to be included in the
config json file. This will be done by the PolluxConfig
interface at load.
Only the 'activated' key is mandatory for the plugin to
be activated.
"""
DEFAULT_CONFIG = {
"activated": False,
}
def push_to_datastore(values_list, config):
"""
This method processes the measured values from values_list
with all the parameters set in config.
@param values_list list of values, each value being a dict
with "k"ey, "v"alue, "u"nit, "p"recision.
@param config dict containing all the parameters for the plugin.
@return >0 if success, <0 if failure, ==0 if loading error
"""
return 1
def test():
"""
This is a test run to verify the validity of the plugin.
"""
c = DEFAULT_CONFIG[DEFAULT_CONFIG.keys()[0]]
l = [{'p': '0.1', 'k': 'temp', 'u': 'degre celcius', 'v': '42'},
{'p': '0.0001', 'k': 'dust', 'u': 'ppm', 'v': '0.001'}]
exit(push_to_datastore(l,c))
Ci-dessus, vous trouverez le squelette de base d’un module d’envoi des données. On y retrouve deux méthodes :
- push_to_datastore(values_list, config) a pour rôle de transformer la liste des valeurs dans un format correct pour le destinataire des mesures, et les y envoyer ; cette fonction prend en paramètre
- la liste de valeurs values_list, qui est une liste de dictionnaires sous la forme
- ‘k’ pour le nom de la mesure,
- ‘u’ pour l’unite,
- ‘v’ pour la ’valeur,
- ‘p’ pour la precision
- et la configuration config, sous la même forme que « DEFAULT_CONFIG ».
- la valeur de retour positive indique un succès de l’opération, négative indique une erreur d’envoi, et 0 pour une erreur de chargement (notamment des dépendances…).
- la liste de valeurs values_list, qui est une liste de dictionnaires sous la forme
- test() : qui permet de vérifier le plugin python, notamment via la ligne de commande suivante :
python monmodule.py -c "monmodule.setup()"
Ainsi, pour l’aggrégateur « Cosm », voici un module de récupération des données :
import json
import urllib2
DEFAULT_CONFIG = \
{
"activated": False,
"post_url": "http://api.pachube.com/v2/feeds/",
"feed_id" : "",
"api_key": ""
}
def push_to_pachube(url, key, content):
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request(url, data=content)
request.add_header('Content-Type', 'application/json')
request.add_header('X-PachubeApiKey', key)
request.get_method = lambda: 'PUT'
try:
opener.open(request, timeout=5)
except urllib2.URLError,e:
print "[Error pushing data in pachube.py: ", e, "]",
return -1
def push_to_datastore(values_list, config):
data_str = dict(version="1.0.0",datastreams=[])
for v in values_list:
data_str["datastreams"].append(dict(id=v["k"], current_value=v["v"]))
return push_to_pachube(config["post_url"]+config["feed_id"], config["api_key"],json.dumps(data_str))
def test():
l = [{'p': '0.1', 'k': 'temp', 'u': 'degre celcius', 'v': '42'},
{'p': '0.0001', 'k': 'dust', 'u': 'ppm', 'v': '0.001'}]
exit(push_to_datastore(l,DEFAULT_CONFIG))
Y est effectué la transformation de la liste de valeurs en données JSON telles que souhaitées pour le silo Cosm, suivi d’un envoi des données
à l’aide de la bibliothèque « urllib2 » de python sur la plateforme Cosm.
Pour installer le module, il suffit de se connecter à l’interface web de Pollux’NZ City (en trouvant
son adresse IP attribuée par le réseau local).
A partir de cette interface, cliquez sur « Advanced », pour accèder aux options de configuration avancé. Sur cette interface, entrez le nom du module à ajouter (qui sera le nom final du module dans l’interface de la passerelle. Attention, le nom du module doit commencer par une lettre et ne contenir que des caractères alphanumériques.
Une fois terminé, cliquer sur « Submit Query » dans la section en « Datastore plugin uploader ». Ensuite, vous pouvez modifier les paramètres dans l’onglet « Datastores ». Notamment, bien penser à cocher « activated » pour prendre en compte le module au prochain lancement du service.
Une fois les modifications terminées, bien penser à cliquer sur le bouton « Restart Gateway » pour relancer le service d’interrogation du capteur.
Connectez vous en « SSH » à la passerelle Pollux’NZ City (le mot de passe pourra être donné indépendament de cette documentation).
Copier le module python dans :
/usr/lib/pollux/extensions/datastores/
ajouter la partie dictionaire dans :
/etc/pollux/config.json
sous la clef « datastores » et avec comme clef racine le nom du module python ajouté. i.e. pour pachube:
{
"configuration": {
"tty_port": "/dev/ttyO2",
"wud_sleep_time": "900"
},
"datastores": {
//...other datastores here...,
"pachube": {
"activated": false,
"api_key": "",
"feed_id": "",
"post_url": "http://api.pachube.com/v2/feeds/"
}
},
"geolocalisation": {
"address": "CKAB",
"latitude": "48.8706573",
"longitude": "2.3413066"
}
}