def ComprobarVelocidad(client, imeis):
    global imeix
    print("Comprobar Velocidad de comunicacion:")
    dataT = obtenerDataT(imeis)
    for x in range(len(imeis)):
        imeix = imeis[x]
        print(str(x + 1) + ": " + imeis[x] + "....................")
        tiempoAcumulado = 0
        npruebas = 3
        for i in range(npruebas):
            client.publish(
                dataT[x],
                '{"state":{"reported":{}}}')  #publicas y esperas respuesta
            start_time = time.time()
            errCom = EsperaRespuesta("Programming", "", "")
            if errCom == True:
                break
            tiempoEnResponder = time.time() - start_time
            tiempoAcumulado += tiempoEnResponder
            print("tiempo en responder, en el mensaje" + str(i + 1) + ": " +
                  str(tiempoEnResponder) + " segundos")
            time.sleep(1)
        if errCom == False:
            tiempoMedio = tiempoAcumulado / npruebas
            print("tiempo medio en responder: " + str(tiempoMedio) +
                  " segundos")
            time.sleep(3)
        PintaryGuardarResultado(imeis[x], "ComprobarComunicacion", errCom)
def AbrCerrSelenoide(client, imeis):
    global imeix
    eAbrCerr = input(
        "\nPulsa 'a' --> abrir valvula de forma manual, por defecto se mandará orden de cerrar \n> "
    )
    dataT = obtenerDataT(imeis)
    if eAbrCerr == 'a':
        print("Abrir selenoide:")
        for x in range(len(imeis)):
            imeix = imeis[x]
            print(str(x + 1) + ": " + imeis[x] + "....................")
            client.publish(
                dataT[x],
                '{"state":{"reported":{"M":"0","A":"1","GMT":"+01"}}} '
            )  #publish (Se abren en todas las valvulas)
            errCom = EsperaRespuesta("Programming", "Manual: Valve open", "")
            PintaryGuardarResultado(imeis[x], "AbrirSelenoide", errCom)
            time.sleep(1)
    else:
        print("Cerrar selenoide:")
        for x in range(len(imeis)):
            imeix = imeis[x]
            print(str(x + 1) + ": " + imeis[x] + "....................")
            client.publish(
                dataT[x],
                '{"state":{"reported":{"M":"0","A":"0","GMT":"+01"}}} '
            )  #publish (Se abren en todas las valvulas)
            errCom = EsperaRespuesta("Programming", "Manual: Valve closed", "")
            PintaryGuardarResultado(imeis[x], "CerrarSelenoide", errCom)
            time.sleep(1)
def funcionSM(client, imeis, nombre, orden):
    global imeix
    print(nombre + ": ")
    sombraUp = obtenerSombraUp(imeis)
    for x in range(len(imeis)):
        imeix = imeis[x]
        print(str(x + 1) + ": " + imeis[x] + "....................")
        GuardarLogExcel(imeis[x], nombre)
        client.publish(sombraUp[x], '{"state":{"reported":{' + orden +
                       '}}}')  #publish (Se cambia el modo de energía)
        time.sleep(1)
def funcionDT(client, imeis, orden, resp1, resp2, resp3):
    global imeix
    print(orden + ": ")
    dataT = obtenerDataT(imeis)
    for x in range(len(imeis)):
        imeix = imeis[x]
        print(str(x + 1) + ": " + imeis[x] + "....................")
        client.publish(dataT[x],
                       '{"state":{"reported":{"GMT":"+01","Com":"' + orden +
                       '"}}}')  #publish (Se abren en todas las valvulas)
        errCom = EsperaRespuesta(resp1, resp2, resp3)
        PintaryGuardarResultado(imeis[x], orden, errCom)
        time.sleep(1)
def ObtenerSombra(client, imeis, coment):
    global imeix
    print("Obtener Sombra " + coment + ": ")
    sombraGet = obtenerSombraGet(imeis)
    dataT = obtenerDataT(imeis)
    for x in range(len(imeis)):
        imeix = imeis[x]
        print(str(x + 1) + ": " + imeis[x] + "....................")
        GuardarLogExcel(imeis[x], "ObtenerSombra" + coment)
        client.subscribe(dataT[x])
        client.publish(sombraGet[x], "")  #publish (se obtiene valor sombra)
        EsperaRespuesta("", "", "")
        time.sleep(1)
        client.unsubscribe(dataT[x])
def BorraryPonerSombra(client, imeis, soloPonerSombra):
    global imeix
    print("Borrar y poner Sombra nueva:")
    print(
        "Nota: En el caso de existir error de comunicación, se recomienda continuar hasta el final del programa. "
    )
    sombraUp = obtenerSombraUp(imeis)
    sombraDel = obtenerSombraDel(imeis)
    for x in range(len(imeis)):
        imeix = imeis[x]
        print(str(x + 1) + ": " + imeis[x] + "....................")
        #(borrar programas en dispositivo)
        errCom = False
        if soloPonerSombra == False:
            client.publish(
                sombraUp[x],
                '{"state":{"reported":{"P0":"0","P1":"0","P2":"0","P3":"0","P4":"0","P5":"0","P6":"0","P7":"0","P8":"0","P9":"0","GMT":"+01"}}}'
            )
            errCom = EsperaRespuesta("Programming", "", "")
            time.sleep(1)
        client.publish(sombraDel[x], "")  #publish (Borrar Sombra)
        time.sleep(1)
        client.publish(
            sombraUp[x],
            '{"state":{"reported":{"M":"0","A":"0","EMode":"1","TPSM":"16","GMT":"+01"}}}'
        )  #publish (se pone una sombra por defecto)
        time.sleep(1)
        PintaryGuardarResultado(imeis[x], "BorrarSombra", errCom)
def ProbarSelenoide(client, imeis):
    global imeix
    imeisAveriados = []
    eAutoManu = input(
        "\nPulsa 'm' probar de forma manual [Open->Close], por defecto será automatica [Synchro] \n> "
    )
    print("Prueba selenoide:")
    dataT = obtenerDataT(imeis)
    for x in range(len(imeis)):
        imeisAveriados.append(False)
    for x in range(len(imeis)):
        imeix = imeis[x]
        print(str(x + 1) + ": " + imeis[x] + "....................")
        print("Nota:Coloca el selenoide al siguiente dispositivo.")
        CparaContinuar()
        if eAutoManu == "m":
            for n in range(2):
                if n == 0:
                    client.publish(
                        dataT[x],
                        '{"state":{"reported":{"M":"0","A":"1","GMT":"+01"}}}'
                    )  #publish (Se abren en todas las valvulas)
                    imeisAveriados[x] = EsperaRespuesta(
                        "Programming", "Manual: Valve open", "")
                elif n == 1:
                    client.publish(
                        dataT[x],
                        '{"state":{"reported":{"M":"0","A":"0","GMT":"+01"}}}'
                    )  #publish (Se abren en todas las valvulas)
                    imeisAveriados[x] = EsperaRespuesta(
                        "Programming", "Manual: Valve closed", "")
                time.sleep(1)
                if imeisAveriados[x]:
                    break
        else:
            client.publish(
                dataT[x],
                '{"state":{"reported":{"GMT":"+01","Com":"IniSincro"}}}'
            )  #publish (Se abren en todas las valvulas)
            imeisAveriados[x] = EsperaRespuesta("Programming",
                                                "Synchronized valve", "")
            time.sleep(1)
        PintaryGuardarResultado(imeis[x], "PruebaSelenoide", imeisAveriados[x])
    ElimIMEISconError(imeis, imeisAveriados)
def ProbarContador(client, imeis):
    global valorCont, imeix
    contOk, imeisAveriados = [], []
    dataT = obtenerDataT(imeis)
    for x in range(len(imeis)):
        contOk.append(False)
        imeisAveriados.append(False)
    print("Prueba Contador:")
    for n in range(3):
        print("Parte " + str(n + 1) + ":")
        if n == 0 or n == 2:
            for x in range(len(imeis)):
                if imeisAveriados[x] == False:
                    imeix = imeis[x]
                    print(
                        str(x + 1) + ": " + imeis[x] + "....................")
                    client.publish(
                        dataT[x],
                        '{"state":{"reported":{"GMT":"+01","Com":"RESETCOUNTER"}}}'
                    )  #publish (Borra el contador)
                    imeisAveriados[x] = EsperaRespuesta("Programming", "", "")
                    time.sleep(1)
                    if imeisAveriados[x] == False:
                        client.publish(dataT[x], '{"state":{"reported":{}}}'
                                       )  #publish (Actualiza los valores)
                        imeisAveriados[x] = EsperaRespuesta(
                            "Programming", "", "")
                        time.sleep(1)
        elif n == 1:
            algunOk = False
            for x in range(len(imeis)):
                if imeisAveriados[x] == False:
                    algunOk = True
                    break
            if algunOk:
                print("Lista de Imeis:")
                for x in range(len(imeis)):
                    if imeisAveriados[x] == False:
                        print(imeis[x])
                print(
                    "\nNota:Junta 5 veces los cables de caudal de los dispositivos."
                )
                CparaContinuar()
                for x in range(len(imeis)):
                    if imeisAveriados[x] == False:
                        imeix = imeis[x]
                        print(
                            str(x + 1) + ": " + imeis[x] +
                            "....................")
                        client.publish(dataT[x], '{"state":{"reported":{}}}'
                                       )  #publish (Actualiza los valores)
                        imeisAveriados[x] = EsperaRespuesta(
                            "Programming", "", "")
                        if int(valorCont) > 1:
                            contOk[x] = True
                        time.sleep(1)
    print("Resultado de las pruebas__")
    for x in range(len(imeis)):
        if contOk[x] and imeisAveriados[x] == False:
            print(imeis[x] + ": Ok test")
            GuardarLogExcel(imeis[x], "ProbarContador(Ok)")
        else:
            print(imeis[x] + ": Failed test")
            GuardarLogExcel(imeis[x], "ProbarContador(Failed)")
    ElimIMEISconError(imeis, imeisAveriados)