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
Exemplo n.º 2
0
 def setUp(self):
     self.api = nightscout.Api('http://testns.example.com')
Exemplo n.º 3
0
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"
Exemplo n.º 4
0
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)