def getDataFromNightscout(): api = nightscout.Api(nigthscoutURL) if checkDataBeforeRefresh: checkIfNeedsToRun(api.get_sgvs({'count': 1})[0].date) entries = api.get_sgvs({'count': nightscoutDataPoints}) sgvs = [] dates = [] for entry in entries[::-1]: sgvs.append(entry.sgv) dates.append( (entry.date + datetime.timedelta(hours=1)).strftime("%H:%M")) delta = entries[0].delta return sgvs, dates, delta
def setUp(self): self.api = nightscout.Api('http://testns.example.com')
import datetime from dateutil.tz import tzlocal import pytz from socket import gethostname bridge_ip = "192.168.1.213" lightname = "dialys1" nightscout_url = "https://bjorningedia4.herokuapp.com" #sudo pip install phue #sudo pip install git+https://github.com/ps2/python-nightscout.git b = Bridge(bridge_ip) b.connect() all_lights = b.get_light_objects('name') api = nightscout.Api(nightscout_url) COLORS = { "green": [0.1724, 0.7468], "red": [0.6787, 0.3010], "blue": [0.1590, 0.1221], "yellow": [0.4234, 0.4846], "purple": [0.2451, 0.0979], "lavender": [0.3077, 0.3058], } def blink(light, times=1, sleep=3): for i in range(0, times): print("Blinking light {0} times".format(times)) light.alert = "select"
def index(request): tend = None #tendencia de los niveles de glucosa (comparacion actual con previa) diff = None #diferencia entre valores de la lectura actual y anterior last_read = None #valor de la última lectura registrada en el sistema read = None #lectura actual alert = False api = nightscout.Api( 'https://mperezpcgm.herokuapp.com') #nuestra api de nightscout if not request.user.is_authenticated(): return HttpResponseRedirect( '/cgmapp/login') #si no esta logeado, tiene que hacerlo readings_list = User.objects.get(username=request.user).reading_set.all( ) #obtenemos el histórico del usuario try: #obtenemos la última configuración válida, si existe conf = User.objects.get(username=request.user).conf_set.last() except: #si no existe, creamos la configuración por defecto conf = Conf(username=request.user, ming=70, maxg=110, smscheck=False, tgcheck=False, numtlf="637298394", date=datetime.now()) conf.save() if request.POST.has_key('read'): #si queremos realizar una lectura currentsgv = api.getCurrentSgv( ) #obtenemos el SGV (Sensor Glucose Value) actual valorc = int(currentsgv.sgv) #tomamos el campo valor del SGV datec = currentsgv.dateString #tomamos el campo fecha del sgv try: #obtenemos la última lectura registrada en el sistema, si existe last_read = readings_list.last() except: pass if last_read: #si hay lecturas en la lista if last_read.date == datec: #si la fecha de la lectura ya está en la lista, la lectura falló context = { 'readings_list': readings_list, 'read_error': 'yes' } #mostramos un mensaje de error al usuario return render(request, 'cgmapp/index.html', context) if (valorc < conf.ming or valorc > conf.maxg): alert = True read = Reading( username=request.user, date=datec, valor=valorc, is_alert=alert ) #creamos una nueva entrada en el historial del usuario read.save() #guardamos los cambios try: #comprobamos si ya hay algún valor almacenado para comprobar la tendencia if read.valor < last_read.valor: tend = 'desc' diff = last_read.valor - read.valor elif read.valor > last_read.valor: tend = 'asc' diff = read.valor - last_read.valor else: tend = 'norm' diff = 0 except: pass if read.is_alert: #si se detecta que la lectura es anormal, se llama a los servicios externos smscb = conf.smscheck #estado de la opción de SMS telegramcb = conf.tgcheck #estado de la opción de telegram if smscb: alert_sms( request.user, read.date, read.valor, conf.ming, conf.maxg, conf.numtlf ) #si está marcada la opción de alerta por sms, invocamos al servicio if telegramcb: alert_telegram( request.user, read.date, read.valor, conf.ming, conf.maxg ) #si está marcada la opción de telegram, invocamos al servicio elif request.POST.has_key('filter'): day = request.POST[ 'datefilt'] #obtenemos la fecha de filtrado introducida filt_list = [] #lista final filtrada readings_list = User.objects.get( username=request.user).reading_set.all( ) #obtenemos la lista de lecturas de usuario for r in readings_list: #para cada lectura, tendremos que cambiar su formato para comparar con el input f, h = r.date.split(" ") #dividimos por fecha y hora d, m, y = f.split("-") #y la fecha por partes filt = y + "-" + m + "-" + d #obtenemos el formato para comparar con el input if (day <= filt ): #solo añadimos si el input es anterior o igual a la lectura filt_list.append(r) #nueva entrada en la lista filtrada context = {'readings_list': filt_list} return render(request, 'cgmapp/index.html', context) elif request.POST.has_key('delete'): for r in readings_list: #para cada lectura almacenada del usuario r.delete() #la borramos readings_list = User.objects.get( username=request.user).reading_set.all( ) #y obtenemos una nueva lista vacía context = {'readings_list': readings_list} return render(request, 'cgmapp/index.html', context) context = { 'user': request.user, 'readings_list': readings_list, 'tend': tend, 'diff': diff, 'read': read } return render(request, 'cgmapp/index.html', context)