Ejemplo n.º 1
0
 def answer_couter_proposal(self, new_price):
     gr = Graph()
     if self.accept_couterproposal(new_price.toPython()):
         gr = build_message(gr, ACL.agree, sender=self.uri)
         logging.info('Sending counter-proposal for ' + str(new_price))
         return gr
     else:
         logging.info('Rejecting counter-proposal for ' + str(new_price))
         gr = build_message(Graph(), ACL.reject, sender=self.uri)
         return gr
Ejemplo n.º 2
0
 def answer_couter_proposal(self, new_price):
     gr = Graph()
     if self.accept_couterproposal(new_price.toPython()):
         gr = build_message(gr, ACL.agree, sender=self.uri)
         logging.info('Sending counter-proposal for ' + str(new_price))
         return gr
     else:
         logging.info('Rejecting counter-proposal for ' + str(new_price))
         gr = build_message(Graph(), ACL.reject, sender=self.uri)
         return gr
Ejemplo n.º 3
0
 def proposal(self, due_date, weight, city):
     delivery_date = datetime.datetime.now() + datetime.timedelta(days=5)
     if due_date < delivery_date:
         self.reset()
         return build_message(Graph(), ACL.refuse, sender=self.uri)
     gr = Graph()
     gr.bind('ecsdi', ECSDI)
     oferta = ECSDI.Oferta_transporte
     preu = weight * self.random_seed
     self.last_price = preu
     gr.add((oferta, ECSDI.Precio_envio, Literal(preu)))
     gr.add((oferta, ECSDI.Entrega, Literal(dateToMillis(delivery_date))))
     gr = build_message(gr, ACL.propose, sender=self.uri, content=oferta)
     logging.info('Sending proposal for ' + str(preu))
     return gr
Ejemplo n.º 4
0
 def proposal(self, due_date, weight, city):
     delivery_date = datetime.datetime.now() + datetime.timedelta(days=5)
     if due_date < delivery_date:
         self.reset()
         return build_message(Graph(), ACL.refuse, sender=self.uri)
     gr = Graph()
     gr.bind('ecsdi', ECSDI)
     oferta = ECSDI.Oferta_transporte
     preu = weight * self.random_seed
     self.last_price = preu
     gr.add((oferta, ECSDI.Precio_envio, Literal(preu)))
     gr.add((oferta, ECSDI.Entrega, Literal(dateToMillis(delivery_date))))
     gr = build_message(gr, ACL.propose, sender=self.uri, content=oferta)
     logging.info('Sending proposal for ' + str(preu))
     return gr
Ejemplo n.º 5
0
def iniciarConnexioAmbPlataforma():
    conGraph = Graph()
    conGraph.bind('req', REQ)
    con_obj = agn['recomanacio']
    conGraph.add((con_obj, RDF.type, REQ.PeticioIniciarConnexio)) 
    conGraph.add((con_obj, REQ.iniciar, Literal(True)))
        
    missatgeEnviament = build_message(conGraph,perf=ACL.request, sender=Client.uri, msgcnt=0, receiver=PlataformaAgent.uri, content=con_obj)
    response = send_message(missatgeEnviament, PlataformaAgent.address)
Ejemplo n.º 6
0
def obtenirFeedback():
    print("Esperant temps per enviar feedback")
    sleep(20)

    print("Ha passat el temps, preparant peticio feedback...")
    feedGraph = Graph()
    feedGraph.bind('req', REQ)
    feed_obj = agn['feedback']
    feedGraph.add((feed_obj, RDF.type, REQ.PeticioFeedback))
    feedGraph.add((feed_obj, REQ.obtenirFeedcack, Literal(True)))

    missatgeFeedback = build_message(feedGraph,
                                     perf=ACL.request,
                                     sender=PlataformaAgent.uri,
                                     msgcnt=0,
                                     receiver=Client.uri,
                                     content=feed_obj)
    response = send_message(missatgeFeedback, Client.address)

    print("Rebem resposta feedback del client")
    query = """
                      SELECT ?marca ?puntuacio 
                      WHERE {
                      ?a REQ:marca ?marca .
                      ?a REQ:puntuacio ?puntuacio .
                      }
                      """
    qres = response.query(query, initNs={'REQ': REQ})

    marca = ''
    puntuacio = 1

    print("Guardant el feedback per millorar recomanacions...")
    for row in qres:
        marca = marca + str(row['marca'])
        puntuacio = int(row['puntuacio'])

    print("Marca:", marca)
    print("Puntuacio: ", puntuacio)

    feedback = {}
    with open('registreFeedback.txt') as json_file:
        feedback = json.load(json_file)

    print('El feedback guardat es:', feedback)
    feedback[marca] = int(feedback[marca]) + puntuacio

    with open('registreFeedback.txt', 'w') as outfile:
        json.dump(feedback, outfile)
Ejemplo n.º 7
0
def enviarRecomenacio(connexioClientIniciada):
    print('Intent de connexio: ', connexioClientIniciada.value)
    if connexioClientIniciada.value > 0:
        marca = obtenirRecomenacio()

        producteRec = obtenirProducteRandom(marca)

        recGraph = Graph()
        recGraph.bind('req', REQ)
        rec_obj = agn['recomanacio']
        recGraph.add((rec_obj, RDF.type, REQ.PeticioRecomanacio))
        recGraph.add((rec_obj, REQ.prod, Literal(producteRec)))

        missatgeEnviament = build_message(recGraph,
                                          perf=ACL.request,
                                          sender=PlataformaAgent.uri,
                                          msgcnt=0,
                                          receiver=Client.uri,
                                          content=rec_obj)
        response = send_message(missatgeEnviament, Client.address)
    threading.Timer(80.0, enviarRecomenacio,
                    args=(connexioClientIniciada, )).start()
Ejemplo n.º 8
0
def register_message(gmess):
    """
    Envia un mensaje como una performativa FIPA acl

    :param gmess:
    :return:
    """
    global mss_cnt

    servuriprof = URIRef('http://agentes.com/agente1profile')
    gmess.bind('owlsp', OWLSProfile)
    gmess.bind('owlss', OWLSService)
    gmess.add((servuri, RDF.type, OWLSService.Service))
    gmess.add((servuriprof, RDF.type, OWLSProfile.Profile))
    gmess.add((servuri, OWLSService.presents, servuriprof))
    gmess.add((servuri, OWLSProfile.serviceName, Literal(agentname)))
    gmess.bind('foaf', FOAF)

    gmess.add((servuri, FOAF.name, Literal(agentname)))

    gr = build_message(gmess, perf= ACL.request, address=ra_address, sender= servuri)
    mss_cnt += 1

    return gr
Ejemplo n.º 9
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    print('entrypoint comunicacion')
    global dsgraph
    global mss_cnt

    def GetTransports():

        #----------- STUB VERSION -----------#
        transports = Graph()
        #transports.bind('foaf', FOAF)
        transports.bind('via', VIA)

        transport = VIA.transport + '_transport' + str(mss_cnt)
        transports.add((transport, RDF.type, VIA.Transport))

        # Municipi origen i desti del transport
        localitzacio = VIA.Localitzacio + '_localitzacio' + str(mss_cnt)
        municipi = VIA.Municipi + '_municipi' + str(mss_cnt)
        transports.add((localitzacio, RDF.type, VIA.Localitzacio))
        transports.add((localitzacio, VIA.Municipi, municipi))
        transports.add(
            (municipi, VIA.Nom, Literal('NOM MUNICIPI ' + str(mss_cnt))))

        # Data anada i tornada del transport
        temps = VIA.Temps + '_temps' + str(mss_cnt)
        data = VIA.Data + '_data' + str(mss_cnt)
        transports.add((temps, RDF.type, VIA.Temps))
        transports.add((temps, VIA.Data, data))
        transports.add((data, VIA.Data, Literal('DATA ' + str(mss_cnt))))

        # preu del transport
        preu = VIA.Preu + '_preu' + str(mss_cnt)
        transports.add((preu, RDF.type, VIA.Preu))
        transports.add(
            (preu, VIA.Import, Literal('IMPORT PREU ' + str(mss_cnt))))

        # tipus de seient del transport
        seient = VIA.Tipus_seient + '_seient' + str(mss_cnt)
        transports.add((seient, RDF.type, VIA.Tipus_seient))
        transports.add((seient, VIA.Nom, Literal('convencional')))

        # transport dummy de capacitat 10
        transport1 = VIA.Transport + 'transport' + str(mss_cnt)
        transports.add((transport, VIA.Transport, transport1))
        transports.add(
            (transport1, VIA.Nom, Literal("Transport 1 " + str(mss_cnt))))
        transports.add((transport1, VIA.Capacitat, Literal("10")))
        transports.add((transport1, VIA.MitjaTransport, Literal('AVIO')))
        transports.add((transport1, VIA.val, preu))
        transports.add((transport1, VIA.data_anada, data))
        transports.add((transport1, VIA.data_tornada, data))
        transports.add((transport1, VIA.origen, municipi))
        transports.add((transport1, VIA.desti, municipi))
        transports.add((transport1, VIA.ofereix_seients, seient))

        # transport dummy de capacitat 20
        transport2 = VIA.Transport + 'transport' + str(mss_cnt)
        transports.add((transport, VIA.Transport, transport2))
        transports.add(
            (transport2, VIA.Nom, Literal("Transport 2 " + str(mss_cnt))))
        transports.add((transport2, VIA.Capacitat, Literal("20")))
        transports.add((transport2, VIA.MitjaTransport, Literal('AVIO')))
        transports.add((transport2, VIA.val, preu))
        transports.add((transport2, VIA.data_anada, data))
        transports.add((transport2, VIA.data_tornada, data))
        transports.add((transport2, VIA.origen, municipi))
        transports.add((transport2, VIA.desti, municipi))
        transports.add((transport2, VIA.ofereix_seients, seient))

        return transports

    # crear graf amb el missatge que rebem
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    # FIPA ACL message?
    if msgdic is None:  # NO: responem "not understood"
        print('you did not send anything')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentTransport.uri,
                           msgcnt=mss_cnt)
    else:  # SI: mirem que demana
        # Performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            print('did not receive an acl request')
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=AgentTransport.uri,
                               msgcnt=mss_cnt)
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia de acciones del agente
            # de registro

            # Averiguamos el tipo de la accion
            if 'content' in msgdic:
                content = msgdic['content']
                accion = gm.value(
                    subject=content,
                    predicate=RDF.type)  # TODO preguntar com va aixo

                if accion == DEM.Consultar_transports:  #comparar que sigui del tipus d'accio que volem
                    print('getting transports')
                    graph_content = GetTransports()
                    gr = build_message(graph_content,
                                       ACL['inform'],
                                       sender=AgentTransport.uri,
                                       msgcnt=mss_cnt,
                                       content=VIA.Transport)

                else:
                    print('wrong action')
                    gr = build_message(Graph(),
                                       ACL['not-understood'],
                                       sender=AgentTransport.uri,
                                       msgcnt=mss_cnt)

    mss_cnt += 1

    return gr.serialize(format='xml')
Ejemplo n.º 10
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    def addMarca():
        content = msgdic['content']

        properties_obj = gm.value(subject=content, predicate=REQ.Properties)

        nombre = gm.value(subject=properties_obj, predicate=REQ.Nombre)

        g = Graph()
        g.parse("./Ontologies/product.owl", format="xml")
        g.add((PrOntRes[nombre], RDF.type, PrOnt.Marca))

        g.add((PrOntRes[nombre], PrOntPr.nombre, nombre))

        ofile = open('./Ontologies/product.owl', "w")
        encoding = 'iso-8859-1'
        ofile.write(str(g.serialize(), encoding))
        ofile.close()

        return g

    def addProducte():
        global mss_cnt

        content = msgdic['content']

        properties_obj = gm.value(subject=content, predicate=REQ.Properties)

        nombre = gm.value(subject=properties_obj, predicate=REQ.Nombre)
        precio = gm.value(subject=properties_obj, predicate=REQ.Precio)
        peso = gm.value(subject=properties_obj, predicate=REQ.Peso)
        marca = gm.value(subject=properties_obj, predicate=REQ.Marca)
        categoria = gm.value(subject=properties_obj, predicate=REQ.Categoria)

        g = Graph()
        g.parse("./Ontologies/product.owl", format="xml")
        g.add((PrOntRes[nombre], RDF.type, PrOnt[categoria]))

        g.add((PrOntRes[nombre], PrOntPr['nombre'], nombre))
        g.add((PrOntRes[nombre], PrOntPr['precio'], precio))
        g.add((PrOntRes[nombre], PrOntPr['peso'], peso))
        g.add((PrOntRes[nombre], PrOntPr['esExterno'], Literal(1)))
        g.add((PrOntRes[nombre], PrOntPr['tieneMarca'], PrOntRes[marca]))

        g.add((PrOntRes[marca], RDF.type, PrOnt.Marca))

        g.add((PrOntRes[marca], PrOntPr.nombre, marca))

        ofile = open('./Ontologies/product.owl', "w")
        encoding = 'iso-8859-1'
        ofile.write(str(g.serialize(), encoding))
        ofile.close()

        g = Graph()
        g.parse("./Ontologies/centresProd.owl", format="xml")
        g.add(
            (CenOntRes[nombre], RDF.type, CenOnt['Producte_CentreLogistic1']))

        g.add((CenOntRes[nombre], CenOntPr['nombre'], nombre))
        g.add((CenOntRes[nombre], CenOntPr['nombreCentreLogistic'],
               Literal('cl1')))
        g.add((CenOntRes[nombre], CenOntPr['stock'], Literal(5)))

        ofile = open('./Ontologies/centresProd.owl', "w")
        encoding = 'iso-8859-1'
        ofile.write(str(g.serialize(), encoding))
        ofile.close()

        gresult = Graph()
        gresult.bind('req', REQ)
        cerca_obj = agn['cerca']
        xsddatatypes = {'s': XSD.string, 'i': XSD.int, 'f': XSD.float}
        result_properties = {
            'Marca': 's',
            'Precio': 'i',
            'Peso': 'f',
            'Categoria': 's',
            'Nombre': 's'
        }
        for prop in result_properties:
            if result_properties[prop] in ['s', 'i', 'f']:
                gresult.add((REQ[prop], RDF.type, OWL.DatatypeProperty))
                gresult.add((REQ[prop], RDFS.range,
                             xsddatatypes[result_properties[prop]]))
            else:
                gresult.add((REQ[prop], RDF.type, OWL.ObjectProperty))
                gresult.add(
                    (REQ[prop], RDFS.range, REQ[result_properties[prop]]))

        gresult.add((REQ.Result, RDF.type, OWL.Class))

        result_obj = REQ[nombre]
        gresult.add((result_obj, RDF.type, REQ.Result))
        gresult.add((result_obj, REQ['Nombre'], nombre))
        gresult.add((result_obj, REQ['Precio'], precio))
        gresult.add((result_obj, REQ['Peso'], peso))
        gresult.add((result_obj, REQ['esExterno'], Literal(1)))
        gresult.add((result_obj, REQ['Marca'], marca))

        return gresult

    global dsgraph
    global mss_cnt

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)
    msgdic = get_message_properties(gm)

    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentVenedorExtern.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=AgentVenedorExtern.uri,
                               msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)

            #placeholder
            if action == REQ.AfegirProducteExtern:
                logger.info('Processem la peticio')
                gr = addProducte()

            elif action == REQ.AfegirMarca:
                gr = addMarca()
            elif action == REQ.rebreDiners:
                content = msgdic['content']
                diners = gm.value(subject=content, predicate=REQ.diners)

                print("Hem rebut diners: ", diners)

                gr = build_message(Graph(),
                                   ACL['inform-done'],
                                   sender=AgentVenedorExtern.uri,
                                   msgcnt=mss_cnt)
            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=AgentVenedorExtern.uri,
                                   msgcnt=mss_cnt)
    mss_cnt += 1
    return gr.serialize(format='xml')
Ejemplo n.º 11
0
            var_filtre = input("Aquest camp es obligatori: ")
        content.add((product_obj, REQ.Peso, Literal(float(var_filtre))))
        var_filtre = input("Introdueix marca del producte: ")
        while (var_filtre == ""):
            var_filtre = input("Aquest camp es obligatori: ")
        content.add((product_obj, REQ.Marca, Literal(var_filtre)))
        var_filtre = input("Introdueix categoria del producte: ")
        while (var_filtre == ""):
            var_filtre = input("Aquest camp es obligatori: ")
        content.add((product_obj, REQ.Categoria, Literal(var_filtre)))

        g = Graph()
        #construim el missatge com una req al agent cercador
        g = build_message(content,
                          perf=ACL.request,
                          sender=Client.uri,
                          msgcnt=0,
                          receiver=AgentVenedorExtern.uri,
                          content=cerca_obj)
        #enviem el msg
        response = send_message(g, AgentVenedorExtern.address)
        print("Producte afegit correctament")

    if (var_input == "2"):
        content = Graph()
        content.bind('req', REQ)
        cerca_obj = agn['producte']

        product_obj = REQ.Properties + '_properties'

        content.add((cerca_obj, RDF.type, REQ.AfegirMarca))
        content.add((cerca_obj, REQ.Properties, product_obj))
Ejemplo n.º 12
0
def agentbehavior1(q, fileno, consolaEnUs):
    """
    Un comportamiento del agente

    :return:
    """
    sys.stdin = os.fdopen(fileno)
    iniciarConnexioAmbPlataforma()
    print("Instruccions disponibles")
    print("1 - Buscar un producte")
    print("2 - Comprar un producte")
    print("3 - Modificar localitzacio client (Predefinida: 42.2, 2.19)")
    print("4 - Devolucio de un producte")
    print("5 - Eliminar registres de compra, cerca i feedback")

    letters = string.ascii_lowercase
    
    latClient = 42.2
    longClient = 2.19

    while True:
        while consolaEnUs.value > 0:
            asd = 0
        
        var_input = input("Introdueix instruccio: ")
        while(var_input != "1" and var_input != "2" and var_input != "3" and var_input != "4" and var_input != "5"):
            print ("Instruccio desconeguda")
            var_input = input("Introdueix instruccio: ")
        
        if (var_input == "1"):
            content = Graph()
            content.bind('req', REQ)
            cerca_obj = agn['cerca']
            
            filters_obj = REQ.Filters + '_filters'
            
            content.add((cerca_obj, RDF.type, REQ.PeticioCerca))
            content.add((cerca_obj, REQ.Filters, filters_obj))
            
            print("Introdueix els filtres desitjats, apreta enter sense escriure res per no filtrar (Tambe pots escrire un '-' per no filtrar)")
            var_filtre = input("Introdueix categoria del producte: ")
            if (var_filtre != "" and var_filtre != "-"):   
                content.add((filters_obj, REQ.Categoria, Literal(var_filtre)))
            var_filtre = input("Introdueix nom del producte: ")
            if (var_filtre != "" and var_filtre != "-"): 
                content.add((filters_obj, REQ.Nombre, Literal(var_filtre)))
            var_filtre = input("Introdueix preu maxim del producte: ")
            if (var_filtre != "" and var_filtre != "-"): 
                content.add((filters_obj, REQ.Precio, Literal(int(var_filtre))))
            var_filtre = input("Introdueix marca del producte: ")
            if (var_filtre != "" and var_filtre != "-"): 
                content.add((filters_obj, REQ.TieneMarca, Literal(var_filtre)))
            ofile  = open('request.owl', "w")
            encoding = 'iso-8859-1'
            ofile.write(str(content.serialize(), encoding))
            ofile.close()
            
            g = Graph()
            #construim el missatge com una req al agent cercador
            g = build_message(content, perf=ACL.request, sender=Client.uri, msgcnt=0, receiver=AgentCercador.uri, content=cerca_obj)
            #enviem el msg
            response = send_message(g, AgentCercador.address)
            #mirem que hem rebut 
            query = """
            SELECT ?nombre ?precio ?marca ?categoria
            WHERE {
                    ?a REQ:Nombre ?nombre .
                    ?a REQ:Precio ?precio .
                    ?a REQ:Marca ?marca .
                    ?a REQ:Categoria ?categoria .
                    }
            """
            qres = response.query(query, initNs = {'REQ': REQ})  
            for row in qres:
                print("-------------------------------------------")
                print("Nom: " + row['nombre'])
                print("Preu:" + row['precio'])
                print("Marca: " + row['marca'])
                print("Categoria: " + row['categoria'])
            #ho guardem
            ofile  = open('output.owl', "w")
            encoding = 'iso-8859-1'
            ofile.write(str(response.serialize(), encoding))
            ofile.close()
            
        if (var_input == "2"):
            idCompra = ''.join(random.choice(letters) for i in range(32))
            print("Introdueix el nom del producte i la quantitat que vols comprar")
            #enviar peticio compra
        
            contentPeticioCompra = Graph()
            contentPeticioCompra.bind('req', REQ)
            compra_obj = agn['compra']
            contentPeticioCompra.add((compra_obj, RDF.type, REQ.PeticioCompra))
            var_nomP = input("Introdueix el nom del producte: ")
            if (var_nomP != ""):
                contentPeticioCompra.add((compra_obj, REQ.NombreProducte, Literal(str(var_nomP))))
            var_Q = input("Introdueix quantitat del producte (0-5): ")
            if (var_Q != ""):
                contentPeticioCompra.add((compra_obj, REQ.QuantitatProducte, Literal(int(var_Q))))
            contentPeticioCompra.add((compra_obj, REQ.LatitudClient, Literal(float(latClient))))
            contentPeticioCompra.add((compra_obj, REQ.LongitudClient, Literal(float(longClient))))
            contentPeticioCompra.add((compra_obj, REQ.idCompra, Literal(str(idCompra))))
            messageCompra = Graph()
            messageCompra = build_message(contentPeticioCompra, perf=ACL.request, sender=Client.uri, msgcnt=0, receiver=PlataformaAgent.uri, content=compra_obj)
            print('EnviemPeticioCompra')
            response = send_message(messageCompra, PlataformaAgent.address)
            
            query = """
                SELECT ?resposta
                WHERE {
                    ?a REQ:resposta ?resposta
                }
                    """
            qres = response.query(query, initNs = {'REQ': REQ})
            respostaCL = ""
            for row in qres:
                respostaCL = str(row['resposta'])
            print(respostaCL)
        if var_input == "3":
            print("Introdueix la latitud i longitud usant punts i no comes (ex: 40.4555).")
            var_lat = input("Introdueix la latitud: ")
            if var_lat != "":
                latClient = float(var_lat)
            var_long = input("Introdueix la longitud: ")
            if var_long != "":
                longClient = float(var_long)
        if var_input == "4":
            idC = ""
            dies = 0
            print("Introdueix el id de compra, rao de devolucio i quants dies fa que et va arribar el producte")
            var_id = input("Introduir el id de compra:")
            if var_id != "":
                idC = var_id
            var_dies = input("Si la rao de devolucio es un producte defectuos o equivocat, introdueix un 0. Si la rao es que el producte no satisà les vostres espectatives, introdueix el numero de dies que fa des de que us va arribar el producte.")
            if var_dies != "":
                dies = var_dies
            
            contentDevolucio = Graph()
            contentDevolucio.bind('req', REQ)
            dev_obj = agn['devolucio']
            contentDevolucio.add((dev_obj, RDF.type, REQ.PeticioDevolucio))
            contentDevolucio.add((dev_obj, REQ.idCompra, Literal(str(idC))))
            contentDevolucio.add((dev_obj, REQ.dies, Literal(dies)))
            
            messagePeticio = Graph()
            messagePeticio = build_message(contentDevolucio, perf=ACL.request, sender=Client.uri, msgcnt=0, receiver=PlataformaAgent.uri, content=dev_obj)
            print('EnviemPeticioDevolucio')
            response = send_message(messagePeticio, PlataformaAgent.address)
            
            query = """
                          SELECT ?respostaDev
                          WHERE {
                          ?a REQ:respostaDev ?respostaDev .
                          }
                          """
            qres = response.query(query, initNs = {'REQ': REQ})
            
            for row in qres:
                print(row['respostaDev'])
        if var_input == "5":
            eliminarRegistres()
             
    pass
Ejemplo n.º 13
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    def cercaTransports():

        resultat = Graph()
        resultat.bind('via', VIA)
        contingut = Graph()
        global ciutat_origen
        restriccions_transport = gm.value(
            subject=content, predicate=DEM.Restriccions_transports)
        DataF = gm.value(subject=restriccions_transport,
                         predicate=DEM.Data_final)
        DataIni = gm.value(subject=restriccions_transport,
                           predicate=DEM.Data_inici)
        ciutat_desti = gm.value(subject=restriccions_transport,
                                predicate=DEM.Desti)
        NPers = gm.value(subject=restriccions_transport,
                         predicate=DEM.NumPersones)
        ciutat_origen = gm.value(subject=restriccions_transport,
                                 predicate=DEM.Origen)
        Preu = gm.value(subject=restriccions_transport, predicate=DEM.Preu)

        contingut.parse('../../Ontologies/Viatge-RDF.owl', format='xml')
        res_Anada = contingut.query(f"""
                        SELECT ?nm ?mitja ?c ?preu ?se
                        WHERE {{
                            ?t rdf:type via:Transport .
                            ?t via:Nom ?nm .
                            ?t via:MitjaTransport ?mitja .
                            ?t via:Capacitat ?c .
                            ?t via:val ?p .
                            ?t via:data_anada ?da .
                            ?t via:ofereix_seients ?s .
                            ?s via:Nom ?se .
                            ?da via:Data "{DataIni}" .
                            ?t via:data_tornada ?dt .
                            ?dt via:Data "{DataF}" .
                            ?p via:Import ?preu .
                            ?t via:origen ?ciu .
                            ?ciu via:Nom "{ciutat_origen}" .
                            ?t via:desti ?ciu1 .
                            ?ciu1 via:Nom "{ciutat_desti}" .
                        }}""",
                                    initNs={"via": VIA})
        for row in res_Anada:
            if (int(NPers) <= int(row[2])):
                preuTotal = int(NPers) * int(row[3]) * 2
                if (preuTotal <= Preu):
                    Transports = VIA.Transport + "_" + row[0]
                    resultat.add((Transports, RDF.type, VIA.Transport))
                    resultat.add((Transports, VIA.Nom, Literal(row[0])))
                    resultat.add((Transports, VIA.Capacitat, Literal(row[2])))
                    resultat.add(
                        (Transports, VIA.MitjaTransport, Literal(row[1])))
                    resultat.add((Transports, VIA.Preu, Literal(preuTotal)))
                    resultat.add(
                        (Transports, VIA.Tipus_seient, Literal(row[4])))
                    resultat.add(
                        (Transports, VIA.Data + "_anada", Literal(DataIni)))
                    resultat.add(
                        (Transports, VIA.Data + "_tornada", Literal(DataF)))
                    resultat.add((Transports, VIA.Nom + "_origen",
                                  Literal(ciutat_origen)))
                    resultat.add((Transports, VIA.Nom + "_desti",
                                  Literal(ciutat_desti)))

        return resultat

    global dsgraph
    global mss_cnt

    # crear graf amb el missatge que rebem
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    # FIPA ACL message?
    if msgdic is None:  # NO: responem "not understood"
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentTransport.uri,
                           msgcnt=mss_cnt)
    else:  # SI: mirem que demana
        # Performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=AgentTransport.uri,
                               msgcnt=mss_cnt)
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia de acciones del agente
            # de registro

            # Averiguamos el tipo de la accion
            if 'content' in msgdic:
                content = msgdic['content']
                action = gm.value(
                    subject=content,
                    predicate=RDF.type)  # TODO preguntar com va aixo

                if action == DEM.Consultar_transports:  #comparar que sigui del tipus d'accio que volem
                    graf_resposta = cercaTransports()
                    gr = build_message(graf_resposta,
                                       ACL['inform'],
                                       sender=AgentTransport.uri,
                                       msgcnt=mss_cnt,
                                       content=VIA.Viatge)
                else:
                    gr = build_message(Graph(),
                                       ACL['not-understood'],
                                       sender=AgentTransport.uri,
                                       msgcnt=mss_cnt)

    mss_cnt += 1

    return gr.serialize(format='xml')
Ejemplo n.º 14
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """

    global dsgraph
    global mss_cnt

    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)
    msgdic = get_message_properties(gm)

    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=PlataformaAgent.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=PlataformaAgent.uri,
                               msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)
            print('La action es:', action)
            print('La action hauria de ser:', REQ.PeticioCompra)

            #placeholder
            if action == REQ.PeticioCompra:
                logger.info('Processem la compra')
                #agafar el nom del producte i la quantitat, i la localitzacio del client
                content = msgdic['content']
                nombreProd = gm.value(subject=content,
                                      predicate=REQ.NombreProducte)
                quant = gm.value(subject=content,
                                 predicate=REQ.QuantitatProducte)
                latClient = gm.value(subject=content,
                                     predicate=REQ.LatitudClient)
                longClient = gm.value(subject=content,
                                      predicate=REQ.LongitudClient)
                idCompra = gm.value(subject=content, predicate=REQ.idCompra)

                #cercar el millor centre logistic que tingui aquest producte
                cl = buscarCentreLogistic(nombreProd, quant, latClient,
                                          longClient)
                resCL = crearRespostaPeticioCompra(cl)
                if cl is None:
                    logger.info('No hi ha aquest producte en ningun centre')
                    print('No hi ha aquest producte en ningun centre')
                    resGraph = Graph()
                    resGraph.bind('req', REQ)
                    res_obj = agn['factura']
                    resGraph.add(
                        (res_obj, RDF.type, REQ.ConfirmacioAmbResposta))
                    resGraph.add((res_obj, REQ.resposta, Literal(resCL)))
                    gr = build_message(resGraph,
                                       ACL['inform-done'],
                                       sender=PlataformaAgent.uri,
                                       msgcnt=mss_cnt)
                    return gr.serialize(format='xml')
                else:
                    print('El millor centre logistic es:', cl)

                #cl sera el reciever del message
                #fer peticio enviament a centre logistic
                actualitzarStock(cl, nombreProd)

                envGraph = Graph()
                envGraph.bind('req', REQ)
                env_obj = agn['delegarEnviament']
                pes = buscarPesProducte(nombreProd)
                envGraph.add((env_obj, RDF.type, REQ.PeticioEnviament))
                envGraph.add((env_obj, REQ.prod, nombreProd))
                envGraph.add((env_obj, REQ.pes, pes))
                envGraph.add((env_obj, REQ.idCompra, idCompra))
                envGraph.add((env_obj, REQ.quant, quant))

                missatgeEnviament = Graph()
                centreReciever = None
                if str(cl) == 'cl1':
                    centreReciever = CentroLogistico1
                elif str(cl) == 'cl2':
                    centreReciever = CentroLogistico2
                elif str(cl) == 'cl3':
                    centreReciever = CentroLogistico3
                elif str(cl) == 'cl4':
                    centreReciever = CentroLogistico4
                elif str(cl) == 'cl5':
                    centreReciever = CentroLogistico5

                #per ara enviarem sempre al mateix centre (segona entrega)
                #centreReciever = CentroLogistico3

                print('\n')
                print('PREPAREM PER DELEGAR ENVIAMENT')
                print('\n')
                missatgeEnviament = build_message(envGraph,
                                                  perf=ACL.request,
                                                  sender=PlataformaAgent.uri,
                                                  msgcnt=0,
                                                  receiver=centreReciever.uri,
                                                  content=env_obj)
                response = send_message(missatgeEnviament,
                                        centreReciever.address)

                resGraph = Graph()
                resGraph.bind('req', REQ)
                res_obj = agn['factura']
                resGraph.add((res_obj, RDF.type, REQ.ConfirmacioAmbResposta))
                resGraph.add((res_obj, REQ.resposta, Literal(resCL)))
                gr = build_message(resGraph,
                                   ACL['inform-done'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)
                return gr.serialize(format='xml')

            elif action == REQ.IniciarEnviament:
                content = msgdic['content']

                #response = gm.value(subject=content, predicate=REQ.PreuEnviament)

                print('\n')
                print('REBEM PREU ENVIAMENT')
                print('\n')

                nomE = gm.value(subject=content, predicate=REQ.NomEmpresa)
                preuEnv = gm.value(subject=content, predicate=REQ.Preu)
                idCompra = gm.value(subject=content, predicate=REQ.idCompra)
                nombreProd = gm.value(subject=content, predicate=REQ.NomProd)
                quant = gm.value(subject=content, predicate=REQ.quant)

                print('El preu enviament es:', preuEnv)
                print('El nom empresa es:', nomE)
                print('El idCompra es:', idCompra)
                print('El nom prod es:', nombreProd)
                print('La quant del producte es:', quant)

                preuProducte = buscarPreuProducte(nombreProd)

                print('El preu producte es:', preuProducte)

                preuProducte = Literal(int(preuProducte) * int(quant))
                preuTot = Literal(
                    float(preuEnv) + int(preuProducte * int(quant)))

                print('Registrant compra...')
                registrarCompra(idCompra, nombreProd, preuTot)

                print('Preparant factura...')

                contentFactura = Graph()
                contentFactura.bind('req', REQ)
                factura_obj = agn['factura']
                contentFactura.add(
                    (factura_obj, RDF.type, REQ.ConfirmacioAmbFactura))
                contentFactura.add((factura_obj, REQ.nomP, nombreProd))
                contentFactura.add(
                    (factura_obj, REQ.preuEnviament, Literal(preuEnv)))
                contentFactura.add((factura_obj, REQ.preuProd, preuProducte))
                contentFactura.add((factura_obj, REQ.preuTotal, preuTot))
                contentFactura.add((factura_obj, REQ.nomEmpresa, nomE))
                #El centre logistic hauria de passar el idCompra!!!!!!!!!!!!!!
                contentFactura.add(
                    (factura_obj, REQ.idCompra, Literal(idCompra)))

                print('Factura creada')

                missatgeFactura = build_message(contentFactura,
                                                perf=ACL.request,
                                                sender=PlataformaAgent.uri,
                                                msgcnt=0,
                                                receiver=Client.uri,
                                                content=factura_obj)
                response = send_message(missatgeFactura, Client.address)

                print("Cridar obtenir feedback...")
                obtenirFeedback()

                gr = build_message(Graph(),
                                   ACL['inform-done'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)

            elif action == REQ.PeticioDevolucio:
                content = msgdic['content']
                idCompra = gm.value(subject=content, predicate=REQ.idCompra)
                dies = gm.value(subject=content, predicate=REQ.dies)
                print("SENSE TRANSFORMACIO: ", dies)
                print("AMB TRANSFORMACIO: ", int(dies))
                resposta = ""

                print("Preparat per gestionar peticio devolucio")

                if int(dies) >= 0 and int(dies) <= 15:
                    preu = cercarCompra(idCompra)
                    print("Compra cercada")
                    if preu < 0.0:
                        resposta = "NO es possible procedir amb la devolució ja que no existeix un registre d'aquesta compra"
                    else:
                        eliminarRegistreCerca(idCompra)
                        preu = str(preu)
                        resposta = "Peticio ACCEPTADA. L'empresa transportista recollirà el producte en el mateix lloc que l'entrega en un plaç màxim de 3 dies. Es procedirà a fer un reembolsament de " + preu

                        recGraph = Graph()
                        recGraph.bind('req', REQ)
                        rec_obj = agn['recomanacio']
                        recGraph.add((rec_obj, RDF.type,
                                      REQ.PeticioTransferenciaAClient))
                        recGraph.add((rec_obj, REQ.diners, Literal(preu)))

                        print("Preparant comunicacio amb Tresorer...")

                        missatgeEnviament = build_message(
                            recGraph,
                            perf=ACL.request,
                            sender=PlataformaAgent.uri,
                            msgcnt=0,
                            receiver=AgentTesorer.uri,
                            content=rec_obj)
                        response = send_message(missatgeEnviament,
                                                AgentTesorer.address)
                else:
                    resposta = "NO es possible procedir amb la devolució, el període màxim per a la devolució és de 15 dies."

                contentDev = Graph()
                contentDev.bind('req', REQ)
                devo_obj = agn['dev']
                contentDev.add((devo_obj, RDF.type, REQ.RespostaDevolucio))
                contentDev.add((devo_obj, REQ.respostaDev, Literal(resposta)))

                print('Resposta devolucio preparada per enviar')

                gr = build_message(contentDev,
                                   ACL['inform-done'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)
            elif action == REQ.PeticioIniciarConnexio:
                iniC = gm.value(subject=content, predicate=REQ.iniciar)

                #                global connexiolientIniciada
                if iniC:
                    connexioClientIniciada.value = 1
                print('ESTAT DE CONNEXIO: ', connexioClientIniciada.value)

                gr = build_message(Graph(),
                                   ACL['inform-done'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)

            elif action == REQ.rebreDiners:
                content = msgdic['content']
                diners = gm.value(subject=content, predicate=REQ.diners)

                print("Hem rebut diners: ", diners)

                gr = build_message(Graph(),
                                   ACL['inform-done'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)
            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=PlataformaAgent.uri,
                                   msgcnt=mss_cnt)
    mss_cnt += 1
    return gr.serialize(format='xml')
Ejemplo n.º 15
0
def comunicacion():
    
    """
    Entrypoint de comunicacion
    """
    def getProductes():
        global mss_cnt
        #Obtenir parametres de cerca (filtre + keyword)
        content = msgdic['content']
        print(content)
        filters_obj = gm.value(subject=content, predicate=REQ.Filters)
        print(filters_obj)
        categoria_filter = gm.value(subject=filters_obj, predicate=REQ.Categoria)
        nombre_filter = gm.value(subject=filters_obj, predicate=REQ.Nombre)
        precio_filter = gm.value(subject=filters_obj, predicate=REQ.Precio)
        marca_filter = gm.value(subject=filters_obj, predicate=REQ.TieneMarca)
        
        g=Graph()
        g.parse("./Ontologies/product.owl", format="xml")
        query = """
              SELECT ?nombre ?precio ?nombreMarca ?categoria
              WHERE {
              ?a rdf:type ?categoria .
              ?a PrOntPr:nombre ?nombre .
              ?a PrOntPr:precio ?precio .
              ?a PrOntPr:tieneMarca ?b .
              ?b PrOntPr:nombre ?nombreMarca .
              }
              """
        qres = g.query(query, initNs = {'PrOnt': PrOnt, 'PrOntPr': PrOntPr, 'PrOntRes' : PrOntRes})  
            
        
        gresult = Graph()
        gresult.bind('req', REQ)
        cerca_obj = agn['cerca']
        xsddatatypes = {'s': XSD.string, 'i': XSD.int, 'f': XSD.float}
        result_properties = {'Marca': 's',
                          'Precio': 'i',
                          'Peso': 'f',
                          'Categoria': 's',
                          'Nombre': 's'}
        for prop in result_properties:
            if result_properties[prop] in ['s', 'i', 'f']:
                gresult.add((REQ[prop], RDF.type, OWL.DatatypeProperty))
                gresult.add((REQ[prop], RDFS.range, xsddatatypes[result_properties[prop]]))
            else:
                gresult.add((REQ[prop], RDF.type, OWL.ObjectProperty))
                gresult.add((REQ[prop], RDFS.range, REQ[result_properties[prop]]))
        
        gresult.add((REQ.Result, RDF.type, OWL.Class))
        for row in qres:
            result_obj = REQ[row['nombre']]
            count = 0
            i = 0
            while(i < 4):
                product_pr = row[i]
                if (i == 0):
                    if (nombre_filter != None):
                        if (nombre_filter.lower() in product_pr.lower()):
                            count += 1
                    else:
                        count += 1
                if (i == 1):
                    if (precio_filter != None):
                        if (product_pr <= precio_filter):
                            count += 1
                    else:
                        count += 1
                if (i == 2):
                    if (marca_filter != None):
                        if (marca_filter.lower() in product_pr.lower()):
                            count += 1
                    else:
                        count += 1
                if (i == 3):
                    if (categoria_filter != None):
                        categoriaURI = urlparse(row['categoria']).path
                        categoria = PurePosixPath(categoriaURI).parts[2]
                        if (categoria_filter.lower() in categoria.lower()):
                            count += 1
                    else:
                        count += 1
                        
                i += 1
            
            if (count == 4):
                #print(row[0], row[1], row[2], row[3])
                #t = term.URIRef(PrOntPr.nombre + "_" + row[0])
                #gresult.add((cerca_obj, REQ.Results, result_obj))
                gresult.add((result_obj, RDF.type, REQ.Result))
                gresult.add((result_obj, REQ['Nombre'], row[0]))
                gresult.add((result_obj, REQ['Precio'], row[1]))
                gresult.add((result_obj, REQ['Marca'], row[2]))
                gresult.add((result_obj, REQ['Categoria'], Literal(PurePosixPath(urlparse(row[3]).path).parts[2])))
            
                registrarCerca(row[0], row[2])
        
        return gresult
    
    global dsgraph
    global mss_cnt
        
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)
    msgdic = get_message_properties(gm)
    
    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentCercador.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentCercador.uri,
                           msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)
            
            #placeholder
            if action == REQ.PeticioCerca:
                logger.info('Processem la cerca')
                gr = getProductes()
            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentCercador.uri,
                           msgcnt=mss_cnt)
    mss_cnt += 1
    return gr.serialize(format='xml')
Ejemplo n.º 16
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """    
    global dsgraph
    global mss_cnt
    
    
    # Extraemos el mensaje y creamos un grafo con el
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentTesorer.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentTesorer.uri,
                           msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)
            
            if action == REQ.PeticioTransferenciaAPlataforma:
                content = msgdic['content']
                diners = gm.value(subject=content, predicate=REQ.diners)
                compte = gm.value(subject=content, predicate=REQ.compte)
                nombreProd = gm.value(subject=content, predicate=REQ.np)
                
                esExtern = esProducteExtern(nombreProd)
                
                if esExtern == False:
                
                    print("El client paga a la plataforma ", diners, " usant el compte ", compte)
                    
                    conGraph = Graph()
                    conGraph.bind('req', REQ)
                    con_obj = agn['transferencia']
                    conGraph.add((con_obj, RDF.type, REQ.rebreDiners)) 
                    conGraph.add((con_obj, REQ.diners, Literal(diners)))
                    conGraph.add((con_obj, REQ.compte, Literal(compte)))
            
                    missatgeEnviament = build_message(conGraph,perf=ACL.request, sender=AgentTesorer.uri, msgcnt=0, receiver=PlataformaAgent.uri, content=con_obj)
                    response = send_message(missatgeEnviament, PlataformaAgent.address)
                else:
                    
                    print("El client paga al agent extern")
                    
                    tGraph = Graph()
                    tGraph.bind('req', REQ)
                    t_obj = agn['transferencia']
                    tGraph.add((t_obj, RDF.type, REQ.rebreDiners)) 
                    tGraph.add((t_obj, REQ.diners, Literal(diners)))
                    tGraph.add((t_obj, REQ.compte, Literal(compte)))
            
                    missatgeEnviament2 = build_message(tGraph,perf=ACL.request, sender=AgentTesorer.uri, msgcnt=0, receiver=AgentVenedorExtern.uri, content=t_obj)
                    response = send_message(missatgeEnviament2, AgentVenedorExtern.address)
                
                gr = build_message(Graph(),
                           ACL['inform-done'],
                           sender=AgentTesorer.uri,
                           msgcnt=mss_cnt)
            elif action == REQ.PeticioTransferenciaAClient:
                content = msgdic['content']
                diners = gm.value(subject=content, predicate=REQ.diners)
                print("La plataforma retorna al client els diners:", diners)
                
                transGraph = Graph()
                transGraph.bind('req', REQ)
                trans_obj = agn['transferencia2']
                transGraph.add((trans_obj, RDF.type, REQ.rebreDiners)) 
                transGraph.add((trans_obj, REQ.diners, Literal(diners)))
        
                print("Preparat per enviar a client")
                
                missatgeEnviament2 = build_message(transGraph,perf=ACL.request, sender=AgentTesorer.uri, msgcnt=0, receiver=Client.uri, content=trans_obj)
                response = send_message(missatgeEnviament2, Client.address)
                
                gr = build_message(Graph(),
                           ACL['inform-done'],
                           sender=AgentTesorer.uri,
                           msgcnt=mss_cnt)
            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentTesorer.uri,
                           msgcnt=mss_cnt)
                
        mss_cnt += 1
        return gr.serialize(format='xml')

    pass
Ejemplo n.º 17
0
content_graph.add(
    (pref_transport_obj, DEM.Tipus_seient, Literal(tipus_seient)))

content_graph.add(
    (pref_allotjament_obj, DEM.Localitzacio, Literal(localitzacio)))
content_graph.add(
    (pref_allotjament_obj, DEM.Tipus_estada, Literal(tipus_estada)))

content_graph.add((pref_obj, DEM.Tipus_activitat, Literal(tipus_activitats)))
content_graph.add((pref_obj, DEM.Preu, Literal(activities_budget)))

gr = Graph()
# building an ACL message
gr = build_message(content_graph,
                   perf=ACL.request,
                   sender=Client.uri,
                   msgcnt=0,
                   receiver=AgentePlanificador.uri,
                   content=viatge_obj)

# sending the message to the agent
res = send_message(gr, AgentePlanificador.address)

# decoding the ACL return message
viatge = res.value(predicate=RDF.type, object=VIA.Viatge)

# print transport info:
transport = res.value(predicate=RDF.type,
                      object=VIA.Transport)  # objecte transport

nom_transport = res.value(subject=transport,
                          predicate=VIA.Nom)  # nom del transport
Ejemplo n.º 18
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    global dsgraph
    global mss_cnt

    # Extraemos el mensaje y creamos un grafo con el
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=EmpresaTransportista.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=EmpresaTransportista.uri,
                               msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)
            print('La action es:', action)
            print('La action hauria de ser:', REQ.PeticioEmpresa)

            if action == REQ.PeticioEmpresa:
                logger.info('Es demana preu')
                print(
                    '------------------------Rebem peticio------------------------'
                )

                #obté pes, ciutat desti i plaç màxim d'entrega per ara HARDCODED

                pes = gm.value(subject=content, predicate=REQ.QuantProductes)
                #pes = 2
                ciutatDesti = 'Barcelona'
                diaMaxim = '15/10/2021'
                #conjuntEmpreses = ['empresa_1', 'empresa_2', 'empresa_3', 'empresa_4', 'empresa_5']
                conjuntEmpreses = []
                conjuntEmpreses.append(
                    str(gm.value(subject=content, predicate=REQ.CJE1)))
                conjuntEmpreses.append(
                    str(gm.value(subject=content, predicate=REQ.CJE2)))
                conjuntEmpreses.append(
                    str(gm.value(subject=content, predicate=REQ.CJE3)))
                conjuntEmpreses.append(
                    str(gm.value(subject=content, predicate=REQ.CJE4)))
                conjuntEmpreses.append(
                    str(gm.value(subject=content, predicate=REQ.CJE5)))

                gResposta = Graph()
                gResposta.bind('req', REQ)
                resposta_empresa = agn['resposta']

                xsddatatypes = {'s': XSD.string, 'i': XSD.int, 'f': XSD.float}
                result_properties = {'Nombre': 's', 'Precio': 'f'}

                print('HOLA1')

                for prop in result_properties:
                    if result_properties[prop] in ['s', 'i', 'f']:
                        gResposta.add(
                            (REQ[prop], RDF.type, OWL.DatatypeProperty))
                        gResposta.add((REQ[prop], RDFS.range,
                                       xsddatatypes[result_properties[prop]]))
                    else:
                        gResposta.add(
                            (REQ[prop], RDF.type, OWL.ObjectProperty))
                        gResposta.add((REQ[prop], RDFS.range,
                                       REQ[result_properties[prop]]))

                gResposta.add((REQ.RespostaEmpresa, RDF.type, OWL.Class))

                print('HOLA2')
                print('Conjunt empreses:', conjuntEmpreses)
                print('Tamany empreses:', len(conjuntEmpreses))

                for i in range(0, len(conjuntEmpreses)):
                    result_obj = REQ[conjuntEmpreses[i]]
                    print('Estic dins: ', i)
                    preu = float(pes) * random.uniform(limR[0], limR[1])
                    print('PES CALCULAT')
                    gResposta.add((result_obj, RDF.type, REQ.RespostaEmpresa))
                    print('Estic a dins del bucle:', conjuntEmpreses[i])
                    gResposta.add((result_obj, REQ['Nombre'],
                                   Literal(conjuntEmpreses[i])))
                    print('Estic a dins del bucle2:', conjuntEmpreses[i])
                    gResposta.add((result_obj, REQ['Precio'], Literal(preu)))
                    print(preu)


#                for row in conjuntEmpreses:
#                    print('Estic dins bucle:', row)
#                    preu = pes * random.uniform(limR[0], limR[1])
#                    gResposta.add((resposta_empresa, RDF.type, REQ.RespostaEmpresa))
#                    gResposta.add((resposta_empresa, REQ['Nombre'], row))
#                    gResposta.add((resposta_empresa, REQ['Precio'], preu))

                print(
                    '------------------------Preparat per retornar resposta------------------------'
                )

                gr = build_message(gResposta,
                                   ACL['inform-done'],
                                   sender=EmpresaTransportista.uri,
                                   msgcnt=mss_cnt)

            elif action == REQ.EmpresaGuanyadora:
                print(
                    '------------------------Rebem Resposta Millor Empresa------------------------'
                )

                empresaEscollida = gm.value(subject=content,
                                            predicate=REQ.NomEmpresa)
                print('La empresa escollida és: ', empresaEscollida)

                gr = build_message(Graph(),
                                   ACL['inform-done'],
                                   sender=EmpresaTransportista.uri,
                                   msgcnt=mss_cnt)

            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                                   ACL['not-understood'],
                                   sender=EmpresaTransportista.uri,
                                   msgcnt=mss_cnt)

        mss_cnt += 1
        return gr.serialize(format='xml')

    pass
Ejemplo n.º 19
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    global dsgraph
    global mss_cnt
    global i

    def buscaActivitats():
        global i
        
        activitats = Graph()
        activitats.bind('via', VIA)
        contingut = Graph()
        ciutat = gm.value(subject=content, predicate=DEM.Ciutat)
        cost_max = gm.value(subject=content, predicate=DEM.Cost)
        data_act = gm.value(subject=content, predicate=DEM.Data_activitat)        
        franja = gm.value(subject=content, predicate=DEM.Horari)
        tipus_activitat = gm.value(subject=content, predicate=DEM.Tipus_activitat)
        if (Literal(tipus_activitat).eq('LUDICA')):
            tipus_activitat = "Ludica"
        elif (Literal(tipus_activitat).eq('CULTURAL')):
            tipus_activitat = "Cultural"
        else:
            tipus_activitat = "Festiva"

        contingut.parse('../../Ontologies/Viatge-RDF.owl', format='xml')

        for x in range (3):
            res = contingut.query(f"""
                            SELECT ?nm ?id ?preu ?dat ?franja ?ciu ?rec
                            WHERE {{
                                ?a rdf:type via:{tipus_activitat} .
                                ?a via:val ?p .
                                ?p via:Import ?preu .
    			                FILTER (?preu <= {cost_max}) .
                                ?a via:se_celebra_de ?franja .
                                ?franja via:Nom "{franja}" .
                                ?a via:se_celebra_el ?dat .
                                ?dat via:Data "{data_act}" .
                                ?a via:se_celebra_a ?rec .
                                ?rec via:es_troba_a ?ciu .
                                ?ciu via:Nom "{ciutat}" .
    			    			?a via:Nom ?nm .
    			    			?a via:IDAct ?id .
                            }}
                            LIMIT 1
                            """, initNs={"via":VIA})
            if (len(res) == 0):
                if (Literal(tipus_activitat).eq('Ludica')):
                    tipus_activitat = "Cultural"
                elif (Literal(tipus_activitat).eq('Cultural')):
                    tipus_activitat = "Festiva"
                else:
                    tipus_activitat = "Ludica"
            else: break

        if (len(res) == 0):
        	print("BUIT------------------------------------------")

        for row in res:
            Activitat= VIA.Activitat + "_" + tipus_activitat + str(i)
            i += 1
            activitats.add((Activitat, RDF.type, VIA.Activitat))
            activitats.add((Activitat, VIA.Nom , Literal(row[0])))
            activitats.add((Activitat, VIA.IDAct, Literal(row[1])))
            activitats.add((Activitat, VIA.Preu, Literal(row[2])))
            activitats.add((Activitat, VIA.Data, Literal(row[3])))
            activitats.add((Activitat, VIA.Nom + "_Franja", Literal(row[4])))
            activitats.add((Activitat, VIA.Nom + "_Ciutat", Literal(row[5])))
            activitats.add((Activitat, VIA.Nom + "_Recinte", Literal(row[6])))

        return activitats

    # crear graf amb el missatge que rebem
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    gr = Graph()

    # FIPA ACL message?
    if msgdic is None:      # NO: responem "not understood"
        print('msg dic is empty')
        gr = build_message(Graph(), ACL['not-understood'], sender=AgentActivitats.uri, msgcnt=mss_cnt)
    else:                   # SI: mirem que demana
        # Performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            print('not an acl request')
            gr = build_message(Graph(), ACL['not-understood'], sender=AgentActivitats.uri, msgcnt=mss_cnt)
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia de acciones del agente
            # de registro

            # Averiguamos el tipo de la accion
            if 'content' in msgdic:
                content = msgdic['content']
                accion = gm.value(subject=content, predicate=RDF.type)
                if accion == DEM.Demanar_activitat : #comparar que sigui del tipus d'accio que volem
                    graph_content = buscaActivitats()
                    gr = build_message(graph_content, ACL['inform'], sender=AgentActivitats.uri, msgcnt=mss_cnt, content = VIA.Activitat)
                else:
                    print('action not understood')
                    gr = build_message(Graph(), ACL['not-understood'], sender=AgentActivitats.uri, msgcnt=mss_cnt)

    mss_cnt += 1

    return gr.serialize(format='xml')
Ejemplo n.º 20
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """
    def cercaHotels():

        resultat = Graph()
        resultat.bind('via', VIA)
        contingut = Graph()
        obj_restriccions = gm.value(subject=content,
                                    predicate=DEM.Restriccions_hotels)
        ciutat = gm.value(subject=obj_restriccions, predicate=DEM.Ciutat)
        dataI = gm.value(subject=obj_restriccions, predicate=DEM.Data_inici)
        dataF = gm.value(subject=obj_restriccions, predicate=DEM.Data_final)
        NumPer = gm.value(subject=obj_restriccions, predicate=DEM.NumPersones)
        preuAllot = gm.value(subject=obj_restriccions, predicate=DEM.Preu)
        data_ini = stringToDate(dataI)
        data_fi = stringToDate(dataF)
        contingut.parse('../../Ontologies/Viatge-RDF.owl', format='xml')
        res = contingut.query(f"""
                        SELECT ?nm ?c ?ta ?preu ?sit ?t ?testn ?ppn
                        WHERE {{
                            ?a rdf:type via:Allotjament .
                            ?a via:Nom ?nm .
                            ?a via:Capacitat ?c .
                            ?a via:TipusAllotjament ?ta .
                            ?a via:val ?p .
                            ?p via:Import ?preu .
                            ?a via:es_troba_a ?ciu .
                            ?ciu via:Nom "{ciutat}" .
                            ?a via:se_situa_a ?s .
                            ?s via:Nom ?sit .
                            ?a via:te_habitacions ?th .
                            ?th via:Nom ?t .
                            ?a via:ofereix ?test .
                            ?test via:Nom ?testn .
                            ?a via:es_popular ?pp .
                            ?pp via:Nom ?ppn .
                        }}""",
                              initNs={"via": VIA})

        dies = data_fi - data_ini
        for row in res:
            if (int(row[1]) >= int(NumPer)):
                print(row[3])
                preuTotal = int(NumPer) * int(row[3]) * (dies.days)
                print(preuTotal)
                if (preuTotal <= preuAllot):
                    Allotjaments = VIA.Allotjament + "_" + row[0]
                    resultat.add((Allotjaments, RDF.type, VIA.Allotjament))
                    resultat.add((Allotjaments, VIA.Nom, Literal(row[0])))
                    resultat.add(
                        (Allotjaments, VIA.Capacitat, Literal(row[1])))
                    resultat.add(
                        (Allotjaments, VIA.TipusAllotjament, Literal(row[2])))
                    resultat.add((Allotjaments, VIA.Preu, Literal(preuTotal)))
                    resultat.add(
                        (Allotjaments, VIA.Nom + "_Situacio", Literal(row[4])))
                    resultat.add((Allotjaments, VIA.Nom + "_TipusHabitacio",
                                  Literal(row[5])))
                    resultat.add((Allotjaments, VIA.Nom + "_TipusEstada",
                                  Literal(row[6])))
                    resultat.add((Allotjaments, VIA.Nom + "_Popularitat",
                                  Literal(row[7])))
                    resultat.add(
                        (Allotjaments, VIA.Data + "_anada", Literal(dataI)))
                    resultat.add(
                        (Allotjaments, VIA.Data + "_tornada", Literal(dataF)))

        return resultat

    global dsgraph
    global mss_cnt

    # crear graf amb el missatge que rebem
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    # FIPA ACL message?
    if msgdic is None:  # NO: responem "not understood" i un graph de contingut buit
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=AgentAllotjament.uri,
                           msgcnt=mss_cnt)
    else:  # SI: mirem que demana
        # Performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            # SI NO ENS FAN UN REQUEST
            gr = build_message(Graph(),
                               ACL['not-understood'],
                               sender=AgentAllotjament.uri,
                               msgcnt=mss_cnt)
        else:
            # AQUI HI ARRIBEM QUAN HEM ENTES EL MISSATGE I ES DEL TIPUS QUE VOLIEM

            # Averiguamos el tipo de la accion
            if 'content' in msgdic:
                content = msgdic['content']
                action = gm.value(subject=content, predicate=RDF.type)

                if action == DEM.Consultar_hotels:  #comparar que sigui del tipus d'accio que volem
                    graf_resposta = cercaHotels()
                    gr = build_message(graf_resposta,
                                       ACL['inform'],
                                       sender=AgentAllotjament.uri,
                                       msgcnt=mss_cnt,
                                       content=VIA.Viatge)
                else:
                    gr = build_message(Graph(),
                                       ACL['not-understood'],
                                       sender=AgentAllotjament.uri,
                                       msgcnt=mss_cnt)

    mss_cnt += 1

    return gr.serialize(format='xml')
Ejemplo n.º 21
0
def comunicacion():
    """
    Entrypoint de comunicacion
    """

    global dsgraph
    global mss_cnt

    def getAllotjaments():
    #----------- STUB VERSION -----------#
        allotjaments = Graph()
        #allotjaments.bind('foaf', FOAF)
        allotjaments.bind('via', VIA)

        allotjament = VIA.allotjament + '_allotjament' + str(mss_cnt)
        allotjaments.add((allotjament, RDF.type, VIA.Allotjament))

        # localització de l'allotjament
        localitzacio = VIA.Localitzacio + '_localitzacio' + str(mss_cnt)
        allotjaments.add((localitzacio, RDF.type, VIA.Localitzacio))
        allotjaments.add((localitzacio, VIA.Nom, Literal('NOM LOCALITZACIO ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.es_troba_a, localitzacio))

        # popularitat de l'allotjament
        popularitat = VIA.Popularitat + '_popularitat' + str(mss_cnt)
        allotjaments.add((popularitat, RDF.type, VIA.Popularitat))
        allotjaments.add((popularitat, VIA.Nom, Literal('NOM POPULARITAT ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.es_popular, popularitat))

        # preu de l'allotjament
        preu = VIA.Preu + '_preu' + str(mss_cnt)
        allotjaments.add((preu, RDF.type, VIA.Preu))
        allotjaments.add((preu, VIA.Import, Literal('IMPORT PREU ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.val, preu))

        # situacio de l'allotjament
        situacio = VIA.Situacio + '_situacio' + str(mss_cnt)
        allotjaments.add((situacio, RDF.type, VIA.Situacio))
        allotjaments.add((situacio, VIA.Nom, Literal('NOM SITUACIO ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.es_troba_a, situacio))

        # tipus d'estada de l'allotjament
        estada = VIA.Tipus_estada + '_estada' + str(mss_cnt)
        allotjaments.add((estada, RDF.type, VIA.Tipus_estada))
        allotjaments.add((estada, VIA.Nom, Literal('NOM TIPUS ESTADA ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.ofereix, estada))

        # tipus d'habitacio de l'allotjament
        habitacio = VIA.Tipus_habitacio + '_habitacio' + str(mss_cnt)
        allotjaments.add((habitacio, RDF.type, VIA.Tipus_habitacio))
        allotjaments.add((habitacio, VIA.Nom, Literal('NOM TIPUS HABITACIO ' + str(mss_cnt))))
        allotjaments.add((allotjament, VIA.te_habitacions, habitacio))


        # allotjament dummy de capacitat 10
        allotjament1 = VIA.Allotjament + 'allotjament1' + str(mss_cnt)
        allotjaments.add((allotjament, VIA.Allotjament, allotjament1))
        allotjaments.add((allotjament1, VIA.Nom, Literal("Apartament 1 " + str(mss_cnt))))
        allotjaments.add((allotjament1, VIA.Capacitat, Literal("10 " + str(mss_cnt))))

        # allotjament dummy de capacitat 20
        allotjament2 = VIA.Allotjament + 'allotjament2' + str(mss_cnt)
        allotjaments.add((allotjament, VIA.Allotjament, allotjament2))
        allotjaments.add((allotjament2, VIA.Nom, Literal("Apartament 2 " + str(mss_cnt))))
        allotjaments.add((allotjament2, VIA.Capacitat, Literal("20 " + str(mss_cnt))))

        return allotjaments
    # crear graf amb el missatge que rebem
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)

    msgdic = get_message_properties(gm)

    gr = Graph()

    # FIPA ACL message?
    if msgdic is None:      # NO: responem "not understood" i un graph de contingut buit
        gr = build_message(Graph(), ACL['not-understood'], sender=AgentAllotjament.uri, msgcnt=mss_cnt)
    else:                   # SI: mirem que demana
        # Performativa
        perf = msgdic['performative']

        if perf != ACL.request:
            # Si no es un request, respondemos que no hemos entendido el mensaje
            gr = build_message(Graph(), ACL['not-understood'], sender=AgentAllotjament.uri, msgcnt=mss_cnt)
        else:
            # Extraemos el objeto del contenido que ha de ser una accion de la ontologia de acciones del agente
            # de registro

            # Averiguamos el tipo de la accion
            if 'content' in msgdic:
                content = msgdic['content']
                accion = gm.value(subject=content, predicate=RDF.type)

                if accion == DEM.Consultar_hotels: #comparar que sigui del tipus d'accio que volem
                    graph_content = getAllotjaments()
                    gr = build_message(graph_content, ACL['inform'], sender=AgentAllotjament.uri, msgcnt=mss_cnt, content = VIA.Allotjament)

                else:
                    gr = build_message(Graph(), ACL['not-understood'], sender=AgentAllotjament.uri, msgcnt=mss_cnt)

    mss_cnt += 1

    return gr.serialize(format='xml')
Ejemplo n.º 22
0
def comunicacion():
    
    """
    Entrypoint de comunicacion
    """
    
    global dsgraph
    global mss_cnt
        
    message = request.args['content']
    gm = Graph()
    gm.parse(data=message)
    msgdic = get_message_properties(gm)
    
    #Mirem si es un msg FIPA ACL
    if not msgdic:
        #Si no ho es, responem not understood
        logger.info('Msg no es FIPA ACL')
        gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=Client.uri,
                           msgcnt=mss_cnt)
    else:
        #Si ho es obtenim la performativa
        if msgdic['performative'] != ACL.request:
            #No es un request, not understood
            logger.info('Msg no es una request')
            gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=Client.uri,
                           msgcnt=mss_cnt)
        else:
            #Mirem tipus request
            content = msgdic['content']
            action = gm.value(subject=content, predicate=RDF.type)
            print('-------------------La action es:', action)
#            print('La action hauria de ser:', REQ.PeticioCompra)
            
            #placeholder
            if action == REQ.ConfirmacioAmbFactura:
                content = msgdic['content']
                print('-------------------FACTURA--------------------')
                nombreProd = gm.value(subject=content, predicate=REQ.nomP)
                preuProd = gm.value(subject=content, predicate=REQ.preuProd)
                preuEnv = gm.value(subject=content, predicate=REQ.preuEnviament)
                preuTotal = gm.value(subject=content, predicate=REQ.preuTotal)
                nomEmpresa = gm.value(subject=content, predicate=REQ.nomEmpresa)
                idCompra = gm.value(subject=content, predicate=REQ.idCompra)
                print('NomProducte:',nombreProd)
                print('PreuEnviament:',preuEnv)
                print('PreuProducte:',preuProd)
                print('PreuTotal:',preuTotal)
                print('NomEmpresa:',nomEmpresa)
                print('idCompra:', idCompra)
                print('FinalitzemPeticioCompra')
                
                print("Proces pagament")
                consolaEnUs.value = 1
                compte = ""
                compte = input("Introdueix el teu compte")
                while compte == "":
                    compte = input("Introdueix un compte vàlid")
                
                consolaEnUs.value = 0
                
                conGraph = Graph()
                conGraph.bind('req', REQ)
                con_obj = agn['transferencia']
                conGraph.add((con_obj, RDF.type, REQ.PeticioTransferenciaAPlataforma)) 
                conGraph.add((con_obj, REQ.diners, Literal(preuTotal)))
                conGraph.add((con_obj, REQ.compte, Literal(compte)))
                conGraph.add((con_obj, REQ.np, Literal(nombreProd)))
        
                missatgeEnviament = build_message(conGraph,perf=ACL.request, sender=Client.uri, msgcnt=0, receiver=AgentTesorer.uri, content=con_obj)
                response = send_message(missatgeEnviament, AgentTesorer.address)
                
                gr = build_message(Graph(),
                           ACL['inform-done'],
                           sender=PlataformaAgent.uri,
                           msgcnt=mss_cnt)
                
            elif action == REQ.PeticioRecomanacio:
                content = msgdic['content']
                consolaEnUs.value = 1
                print('-------------------RECOMANACIO--------------------')
                nombreProd = gm.value(subject=content, predicate=REQ.prod)
                print("Potser t'interessa el producte " + str(nombreProd))
                consolaEnUs.value = 0
                
                gr = build_message(Graph(),
                           ACL['inform-done'],
                           sender=Client.uri,
                           msgcnt=mss_cnt)
            
            elif action == REQ.PeticioFeedback:
                content = msgdic['content']
                pucObtenirFeedback = gm.value(subject=content, predicate=REQ.obtenirFeedcack)
                pucObtenirFeedback = bool(pucObtenirFeedback)
                
                if pucObtenirFeedback == True:
                    print('-------------------FEEDBACK D\'USUARI--------------------')
                    print("p - Phone")
                    print("v - Blender")
                    print("c - Computer")
                    
                    consolaEnUs.value = 1
                    
                    var_marca = input("Introdueix la categoria que has comprat recentment")
                    while var_marca != "p" and var_marca != "v" and var_marca != "c":
                        var_marca = input("No es una marca. Introdueix una marca:")
                    
                    var_puntuacio = input("Introdueix una valoracio s, a, b")
                    while var_puntuacio != "s" and var_puntuacio != "a" and var_puntuacio != "b":
                        var_puntuacio = input("Valor invalid: Introdueix la puntuacio una altre vegada:")
                    
                    consolaEnUs.value = 0
                    
                    if var_marca == "p":
                        var_marca = "Phone"
                    elif var_marca == "v":
                        var_marca = "Blender"
                    else:
                        var_marca = "Computer"
                        
                    punts = 0
                        
                    if var_puntuacio == "s":
                        punts = 10
                    elif var_puntuacio == "a":
                        punts = 5
                    else:
                        punts = 0
                        
                    contentFeed = Graph()
                    contentFeed.bind('req', REQ)
                    feed_obj = agn['feed']
                    contentFeed.add((feed_obj, RDF.type, REQ.RespostaFeedback))
                    contentFeed.add((feed_obj, REQ.marca, Literal(var_marca)))
                    contentFeed.add((feed_obj, REQ.puntuacio, Literal(punts)))
                    
                    gr = build_message(contentFeed,
                           ACL['inform-done'],
                           sender=PlataformaAgent.uri,
                           msgcnt=mss_cnt)
                    
            elif action == REQ.rebreDiners:
                content = msgdic['content']
                diners = gm.value(subject=content, predicate=REQ.diners)
                        
                print("Hem rebut diners: ", diners)
    
                gr = build_message(Graph(),
                       ACL['inform-done'],
                       sender=Client.uri,
                       msgcnt=mss_cnt)
            else:
                logger.info('Es una request que no entenem')
                gr = build_message(Graph(),
                           ACL['not-understood'],
                           sender=Client.uri,
                           msgcnt=mss_cnt)
#                return gr.serialize(format='xml')
    mss_cnt += 1
    return gr.serialize(format='xml')