-
Notifications
You must be signed in to change notification settings - Fork 0
/
coap_to_influxdb.py
66 lines (57 loc) · 2.19 KB
/
coap_to_influxdb.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#encoding: utf-8
import os
import time
import sys
host = '192.168.1.38'
db = 'tomas_laborde'
ipv6_base = 'aaaa::c30c:0:0:2'
cant_nodos = 3
"""
#Obtener los valores desde parametros
host = sys.argv[1]
db = sys.argv[2]
ipv6_base = sys.argv[3]
cant_nodos = sys.argv[4]
"""
"""
Se podria haber resuelto tambien leyendo del logfile que genera el cliente
y que quede mas prolija la obtencion de datos, pero lo implemente asi para ajustarme al enunciado
4) Escribir un programa que lea mediante su cliente COAP
el valor del sensor de temperatura de las mota cada 10 segundos
y lo inserte en la base de datos creada anteriormente.
Hay un par de cuestiones que podrian haberse resuelto de una mejor forma,
pero involucraba hacer cambios en el cliente ya entregado.
"""
#Asumo que la mota siempre va a estar declarada despues de un border, y que la primera va a tener el id 2
try:
while True:
#No entrego el recurso de temperatura porque implemente uno que solo retorna un par de valores
#Tuve problemas con C y su tipado
salida = os.popen("python client.py -g {} {} temperature".format(ipv6_base, cant_nodos)).read()
if cant_nodos <= 1:
temperatura = salida_seccionada.split('\n')[len(salida_seccionada.split('\n')) - 2]
mota = 2
#Resolvi con curl por conflictos con la libreria de influxdb en la VM
os.system("curl -i -XPOST 'http://{}:8086/write?db={}' --data-binary 'la_plata mota={},temp={}'".format(host,db,mota,int(temperatura)))
else:
salida_seccionada = salida.split('Thread due to request\n')
for i in range(cant_nodos):
print(i)
if i == cant_nodos - 1:
temperatura = salida_seccionada[cant_nodos]
print(temperatura)
else:
temperatura = salida_seccionada[cant_nodos - 1].split('\n')[0]
#print(salida_seccionada[cant_nodos])
print(temperatura)
mota = i + 2
try:
#Me aseguro haber recibido un valor numerico y no un None o vacio
#(En este caso int porque eso retorna mi recurso).
int(temperatura)
os.system("curl -i -XPOST 'http://{}:8086/write?db={}' --data-binary 'la_plata mota={},temp={}'".format(host,db,mota,int(temperatura)))
except:
print('No fue posible obtener valor')
time.sleep(10)
except KeyboardInterrupt:
exit(0)