diff --git a/.gitignore b/.gitignore index 894a44c..a090d42 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,6 @@ venv.bak/ # mypy .mypy_cache/ + +# config +settings.py \ No newline at end of file diff --git a/settings-example.py b/settings-example.py new file mode 100644 index 0000000..fce22fb --- /dev/null +++ b/settings-example.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +# Nombre de trames a sauter entre deux transmission des mesures (par défaut 0) +# SKIPPED_TRAMES = 0 + +# Configuration influxdb +influxdb = { + 'HOST': '127.0.0.1', + 'PORT': '8086', + 'USER': 'teleinfo', +# 'PASSWORD': 'password', + 'DB_NAME': 'teleinfo', +} diff --git a/teleinfo.py b/teleinfo.py index d3f8a0b..111d5f4 100755 --- a/teleinfo.py +++ b/teleinfo.py @@ -15,8 +15,7 @@ import requests import serial from influxdb import InfluxDBClient -# Nombre de trames a sauter entre deux transmission des mesures (0 = nodelay) -SKIPPED_TRAMES = 4 +import settings as cfg # clés à utiliser - les autres ne seront pas transmises USED_MESURE_KEYS = [ @@ -51,23 +50,31 @@ INT_MESURE_KEYS = [ 'UMOY', ] +if not cfg.SKIPPED_TRAMES: + framescount = 0 +else: + framescount = cfg.SKIPPED_TRAMES + # création du logguer logging.basicConfig(filename='/tmp/teleinfo-releve.log', level=logging.INFO, format='%(asctime)s %(message)s') logging.info("Teleinfo starting..") # connexion a la base de données InfluxDB -client = InfluxDBClient(host='192.168.0.10', port=8086, username='teleinfo', password='CLnXahFiUHjVF8xIjsLS') -DB_NAME = "teleinfo" +if cfg.influxdb["PASSWORD"]: + client = InfluxDBClient(host=cfg.influxdb["HOST"], port=cfg.influxdb["PORT"], username=cfg.influxdb["USER"], password=cfg.influxdb["PASSWORD"]) +else: + client = InfluxDBClient(host=cfg.influxdb["HOST"], port=cfg.influxdb["PORT"], username=cfg.influxdb["USER"]) + connected = False while not connected: try: - logging.info("Database %s exists?" % DB_NAME) - if not {'name': DB_NAME} in client.get_list_database(): - logging.info("Database %s creation.." % DB_NAME) - client.create_database(DB_NAME) - logging.info("Database %s created!" % DB_NAME) - client.switch_database(DB_NAME) - logging.info("Connected to %s!" % DB_NAME) + logging.info("Database %s exists?" % cfg.influxdb["DB_NAME"]) + if not {'name': cfg.influxdb["DB_NAME"]} in client.get_list_database(): + logging.info("Database %s creation.." % cfg.influxdb["DB_NAME"]) + client.create_database(cfg.influxdb["DB_NAME"]) + logging.info("Database %s created!" % cfg.influxdb["DB_NAME"]) + client.switch_database(cfg.influxdb["DB_NAME"]) + logging.info("Connected to %s!" % cfg.influxdb["DB_NAME"]) except requests.exceptions.ConnectionError: logging.info('InfluxDB is not reachable. Waiting 5 seconds to retry.') time.sleep(5) @@ -113,7 +120,7 @@ def main(): while b'\x02' not in line: # recherche du caractère de début de trame line = ser.readline() - delaycounter = SKIPPED_TRAMES + delaycounter = framescount while True: line = ser.readline() logging.debug(line) @@ -140,7 +147,7 @@ def main(): else: logging.debug('Checksum error, aborting frame') if b'\x03' in line: # si caractère de fin dans la ligne, on insère la trame dans influx - if delaycounter >= SKIPPED_TRAMES: + if delaycounter >= framescount: time_measure = time.time() # insertion dans influxdb