def insertar_medida(self, datos, lista_medidas): (db, cursor) = self.iniciar_db() sensores = Sensores() for medida in lista_medidas: cursor.execute( """INSERT INTO medidas (mota, sensor, valor, hora) VALUES (%s,%s,%s,%s)""", ( int(datos['source_id'].encode('hex'), 16), medida['id'], medida['valor'], #int(medida['valor'].encode('hex'), 16), datetime.datetime.fromtimestamp( medida['hora'] - 7200).strftime('%Y-%m-%d %H:%M:%S'))) db.commit() self.cerrar_db(db, cursor)
def __init__(self): self.sensores = Sensores() self.sender = Sender() # self.database = DataBase() self.mqtt = Mqtt() self.Config = ConfigParser.ConfigParser()
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"
GPIO.setmode(GPIO.BCM) GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(14, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) Config = ConfigParser.ConfigParser() Config.read('conf.ini') PORT = str(Config.get('XBEE', 'port')) BAUD_RATE = str(Config.get('XBEE', 'baud_rate')) TIMEOUT = int(Config.get('MOTA', 'timeout')) ser = serial.Serial(PORT, BAUD_RATE, timeout=TIMEOUT) frame_buffer = list() xbee = DigiMesh(ser, escaped=True) sender = Sender() sensores = Sensores() handler = Handler() class Mota: def __init__(self): self.num_sensores = 0 self.num_seq = 1 self.contador = 0 self.contador_interrupciones = 0 self.mensaje = '' self.mensaje_interrupcion = '' def interrupcion_hall(self, channel): print "se ha disparado el gpio: " + str(channel) dt = datetime.datetime.now()
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'
def __init__(self): self.sensores = Sensores() self.sender = Sender() #self.database = DataBase() self.mqtt = Mqtt() self.Config = ConfigParser.ConfigParser()
import json def criandoJson(info): return json.dumps(info) broker = "test.mosquitto.org" topic = "inatel/ICT/horta-inteligente" cliente = mqtt.Client("Cliente") cliente.connect(broker) sensorUmidade = Sensores( name="Umidade", bounds=(0, 1)) #trabalhado em % (considerando status atual) sensorLuminosidade = Sensores(name="Luminosidade", bounds=( 0.5, 1)) #trabalhado em % (considerando últimas 12 horas e 100% como ideal) carteiraDigital = 311.86 while True: info = { "dataHora": datetime.now().strftime("%d/%m/%Y\n\n%H:%M:%S"), "valorUmidade": sensorUmidade.getValor(), "valorIluminacao": sensorLuminosidade.getValor() } #Irrigação