Exemplo n.º 1
0
class Handler:
    def __init__(self):
        self.sensores = Sensores()
        self.sender = Sender()
        #self.database = DataBase()
        self.mqtt = Mqtt()
        self.Config = ConfigParser.ConfigParser()

    def manejar_10(self, datos):
        #try:
        time = datos['data'].split('/')[2]
        cfgfile = open("gateway.ini", 'w')
        self.Config.add_section('Router-Params')
        self.Config.set('Router-Params', 'mac', datos['data'].split('/')[0])
        self.Config.set('Router-Params', 'source', datos['data'].split('/')[1])
        self.Config.set('Router-Params', 'refresco',
                        datos['data'].split('/')[3])
        self.Config.write(cfgfile)
        cfgfile.close()

    def manejar_20(self, datos):
        numero_sensores = 0
        pointer = 0
        lista_sensores = []
        numero_sensores = int(datos['data'][pointer].encode('hex'))
        pointer += 1
        j = 0
        while (j < numero_sensores):
            (pointer, sensores_valores) = self.sensores.descomponer(
                datos['data'], pointer)
            sensores_valores['sensor'] = self.sensores.get_sensor(
                sensores_valores['sensor'])
            lista_sensores.append(sensores_valores)
            j = j + 1

        resultado = self.database.comprobar_mota(
            "00" + datos['source_addr'].encode('hex'))

        if (resultado == None):
            resultado = self.database.get_highest()
            if (resultado[0] == None):
                source = 1
            else:
                source = resultado[0] + 1
            self.database.insertar_mota(datos, source, numero_sensores,
                                        datetime.datetime.now())
            self.database.insertar_sensores(source, lista_sensores)
        else:
            source = resultado[0]
            self.database.update_mota(datetime.datetime.now(), source, 0)

        source = str(source)

        if len(source) == 1:
            source = "000" + source
        elif len(source) == 2:
            source = "00" + source
        elif len(source) == 3:
            source = "0" + source

        self.sender.send_10(source, datos['source_addr'])

        ##
        print lista_sensores
        ##

    def manejar_30(self, datos):
        numero_sensores = 0
        pointer = 0
        lista_medidas = []
        numero_sensores = int(datos['data'][pointer].encode('hex'), 16)
        num_seq = int(datos['frag_num'].encode('hex'), 16)
        pointer += 1
        guardar = False

        resultado = self.database.comprobar_mota(
            "00" + datos['source_addr'].encode('hex'))
        # mensaje consecutivo
        if ((num_seq == resultado[1] + 1)
                or ((num_seq == 1) and (resultado[1] == 255))):
            guardar = True
            self.sender.send_ack(datos['source_addr'], datos['frag_num'], 1)
        # mensaje no consecutivo
        elif (num_seq > resultado[1] + 1):
            print("Se han perdido mensajes... Habra que recuperarlos.")
            guardar = True
            self.sender.send_ack(datos['source_addr'], datos['frag_num'], 2)
            self.database.insertar_retrasos(datos['source_id'].encode('hex'),
                                            resultado[1], num_seq)
        # mensaje repetido
        else:
            self.sender.send_ack(datos['source_addr'], datos['frag_num'], 3)

        if guardar:
            j = 0
            while (j < 3):
                hora = datos['data'][pointer:pointer + 4]
                pointer += 4
                hora = int(hora.encode('hex'), 16)
                i = 0
                while (i < (numero_sensores / 3) - 1):
                    (pointer, sensores_valores) = self.sensores.descomponer(
                        datos['data'], pointer)
                    sensores_valores.update({'hora': hora})
                    lista_medidas.append(sensores_valores)
                    i += 1
                j += 1

            ## Transformar medidas ##
            for medida in lista_medidas:
                #print medida
                medida = self.sensores.transformar(medida)
                #print medida

            ## DATABASE ##
            self.database.insertar_medida(datos, lista_medidas)
            self.database.update_mota(datetime.datetime.now(),
                                      datos['source_id'].encode('hex'),
                                      num_seq)

            ## MQTT ##
            self.Config.read('conf.ini')
            if self.Config.get('MQTT', 'activado') == 'True':
                self.mqtt.send(lista_medidas, datos['source_id'].encode('hex'))

    def manejar_40(self, datos):
        numero_sensores = 0
        pointer = 0
        lista_medidas = []
        numero_sensores = int(datos['data'][pointer].encode('hex'), 16)
        pointer += 1
        j = 0
        while (j < numero_sensores / 2):
            (pointer, sensores_valores) = self.sensores.descomponer(
                datos['data'], pointer)
            sensores_valores['hora'] = int(
                sensores_valores['hora'].encode('hex'), 16)
            sensores_valores['id'] = sensores_valores[
                'id'] + '-' + sensores_valores['id2'].encode('hex')
            lista_medidas.append(sensores_valores)
            j += 1

        ##
        print lista_medidas
        ##
        self.database.insertar_medida(datos, lista_medidas)

    def comprobar(self, datos):
        if datos['application_id'] == '\x10':
            self.manejar_10(datos)
        elif datos['application_id'] == '\x20':
            self.manejar_20(datos)
        elif datos['application_id'] == '\x30':  #mensajes sincronos
            self.manejar_30(datos)
        elif datos['application_id'] == '\x40':
            self.manejar_40(datos)
        else:
            print 'mensaje no reconocido'
Exemplo n.º 2
0
class Handler:
    def __init__(self):
        self.sensores = Sensores()
        self.sender = Sender()
        # self.database = DataBase()
        self.mqtt = Mqtt()
        self.Config = ConfigParser.ConfigParser()

    def manejar_10(self, datos):
        # try:
        time = datos["data"].split("/")[2]
        cfgfile = open("gateway.ini", "w")
        self.Config.add_section("Router-Params")
        self.Config.set("Router-Params", "mac", datos["data"].split("/")[0])
        self.Config.set("Router-Params", "source", datos["data"].split("/")[1])
        self.Config.set("Router-Params", "refresco", datos["data"].split("/")[3])
        self.Config.write(cfgfile)
        cfgfile.close()

    def manejar_20(self, datos):
        numero_sensores = 0
        pointer = 0
        lista_sensores = []
        numero_sensores = int(datos["data"][pointer].encode("hex"))
        pointer += 1
        j = 0
        while j < numero_sensores:
            (pointer, sensores_valores) = self.sensores.descomponer(datos["data"], pointer)
            sensores_valores["sensor"] = self.sensores.get_sensor(sensores_valores["sensor"])
            lista_sensores.append(sensores_valores)
            j = j + 1

        resultado = self.database.comprobar_mota("00" + datos["source_addr"].encode("hex"))

        if resultado == None:
            resultado = self.database.get_highest()
            if resultado[0] == None:
                source = 1
            else:
                source = resultado[0] + 1
            self.database.insertar_mota(datos, source, numero_sensores, datetime.datetime.now())
            self.database.insertar_sensores(source, lista_sensores)
        else:
            source = resultado[0]
            self.database.update_mota(datetime.datetime.now(), source, 0)

        source = str(source)

        if len(source) == 1:
            source = "000" + source
        elif len(source) == 2:
            source = "00" + source
        elif len(source) == 3:
            source = "0" + source

        self.sender.send_10(source, datos["source_addr"])

        ##
        print lista_sensores
        ##

    def manejar_30(self, datos):
        numero_sensores = 0
        pointer = 0
        lista_medidas = []
        numero_sensores = int(datos["data"][pointer].encode("hex"), 16)
        num_seq = int(datos["frag_num"].encode("hex"), 16)
        pointer += 1
        guardar = False

        resultado = self.database.comprobar_mota("00" + datos["source_addr"].encode("hex"))
        # mensaje consecutivo
        if (num_seq == resultado[1] + 1) or ((num_seq == 1) and (resultado[1] == 255)):
            guardar = True
            self.sender.send_ack(datos["source_addr"], datos["frag_num"], 1)
            # mensaje no consecutivo
        elif num_seq > resultado[1] + 1:
            print ("Se han perdido mensajes... Habra que recuperarlos.")
            guardar = True
            self.sender.send_ack(datos["source_addr"], datos["frag_num"], 2)
            self.database.insertar_retrasos(datos["source_id"].encode("hex"), resultado[1], num_seq)
            # mensaje repetido
        else:
            self.sender.send_ack(datos["source_addr"], datos["frag_num"], 3)

        if guardar:
            j = 0
            while j < 3:
                hora = datos["data"][pointer : pointer + 4]
                pointer += 4
                hora = int(hora.encode("hex"), 16)
                i = 0
                while i < (numero_sensores / 3) - 1:
                    (pointer, sensores_valores) = self.sensores.descomponer(datos["data"], pointer)
                    sensores_valores.update({"hora": hora})
                    lista_medidas.append(sensores_valores)
                    i += 1
                j += 1

                ## Transformar medidas ##
            for medida in lista_medidas:
                # print medida
                medida = self.sensores.transformar(medida)
                # print medida

                ## DATABASE ##
            self.database.insertar_medida(datos, lista_medidas)
            self.database.update_mota(datetime.datetime.now(), datos["source_id"].encode("hex"), num_seq)

            ## MQTT ##
            self.Config.read("conf.ini")
            if self.Config.get("MQTT", "activado") == "True":
                self.mqtt.send(lista_medidas, datos["source_id"].encode("hex"))

    def manejar_40(self, datos):
        numero_sensores = 0
        pointer = 0
        lista_medidas = []
        numero_sensores = int(datos["data"][pointer].encode("hex"), 16)
        pointer += 1
        j = 0
        while j < numero_sensores / 2:
            (pointer, sensores_valores) = self.sensores.descomponer(datos["data"], pointer)
            sensores_valores["hora"] = int(sensores_valores["hora"].encode("hex"), 16)
            sensores_valores["id"] = sensores_valores["id"] + "-" + sensores_valores["id2"].encode("hex")
            lista_medidas.append(sensores_valores)
            j += 1

            ##
        print lista_medidas
        ##
        self.database.insertar_medida(datos, lista_medidas)

    def comprobar(self, datos):
        if datos["application_id"] == "\x10":
            self.manejar_10(datos)
        elif datos["application_id"] == "\x20":
            self.manejar_20(datos)
        elif datos["application_id"] == "\x30":  # mensajes sincronos
            self.manejar_30(datos)
        elif datos["application_id"] == "\x40":
            self.manejar_40(datos)
        else:
            print "mensaje no reconocido"
Exemplo n.º 3
0
      stream.seek(0)
    mqtt.send('Resuming record on:'+outfile.name)
    # print('writing video :', outfile.name)
    # while True:
    #     byte = stream.read1()
    #     if not byte : break
    #     outfile.write(byte)
    outfile.write(stream.read())
    stream.seek(0)
    stream.truncate() #wipe circular buffer
    #last_pos = stream.frames[-1].position

  with picamera.PiCamera() as cam:
    cam.resolution = (1920//2, 1080//2) # pi is not powerful enough for full HD record
    stream = picamera.PiCameraCircularIO(cam, seconds=5)
    with DetectMotion(cam) as motion:
      try:
        cam.start_recording(stream, format='h264', motion_output=motion)
        time.sleep(2)
        while True:
          cam.wait_recording(2)
          if detected:
            # cam.split_recording(outfile)
            cam.wait_recording(3)
            write_video()
            detected = False
          elif outfile is not None and not outfile.closed:
            mqtt.send('Done recording:'+outfile.name)
            outfile.close()
      finally:
        cam.stop_recording()