Análisis
En esta primera fase del TFG, el objetivo es que el programador se familiarice con toda la teoría de los SMA, del IOT y del IOA. Además, se han investigado diversos frameworks deSMA. Tras realizar un extenso estudio sobre dichos frameworks, se llegó a la conclusión de que ninguno de ellos podía ser utilizado para su funcionamiento en el IOT, por lo que se decidió crear un nuevo framework de agentes. Para ello, en esta primera iteración se comen- zó a desarrollar la primera versión de la librería del framework para la gestión de agentes, empezando así a gestionar la manera por la que los agentes puedan comunicarse con los ele- mentos de la plataforma. Con este fin, también se tuvo que investigar sobre qué protocolo de transporte de mensajes se debía utilizar. Al tratarse de un software que principalmente iba a funcionar en dispositivos delIOT, se decidió utilizar el protocoloMQTT.
Historias de usuario para la iteración
Historia de Usuario 0 Estudio del protocolo MQTT
No de Iteración Prioridad Tiempo estimado
1 Alta 6 días
Descripción Se estudiará el protocolo de comunicación
indirecta MQTT, sus beneficios y sus desventajas.
Criterios de aceptación
Se tendrán los conocimientos necesarios sobre MQTT y se diseñará una primera aplicación de comunicación entre dos computadores situados en distinta red.
Tabla 5.1: Historia de Usuario 0 Historia de Usuario 1
Investigación sobre Frameworks de SMA Node Iteración Prioridad Tiempo estimado
1 Media 7 días
Descripción Investigar frameworks de SMA y su posible despliegue en dispositivos del IoT.
Criterios de aceptación
Tener una lista de plataformas de agentes con sus principales características y la posibilidad
de integración con el IoT.
Tabla 5.2: Historia de Usuario 1
Iteración 1: Configuración inicial de servicios Historia de Usuario 2
Investigación estándar FIPA
Node Iteración Prioridad Tiempo estimado
1 Alta 7 días
Descripción
Estudio del estándar propuesto por FIPA, tanto la arquitectura propuesta para los SMA como el lenguaje ACL propuesto para la comunicación entre agentes.
Criterios de aceptación
Conocimiento sobre la estructura básica de un SMA, y los requisitos para poder gestionar los mensajes ACL.
Tabla 5.3: Historia de Usuario 2 Historia de Usuario 3
Diseñar e implementar el ACC de la plataforma Node Iteración Prioridad Tiempo estimado
1 Alta 4 días
Descripción
Diseñar e implementar el ACC de la nueva plataforma de agentes utilizando el protocolo de MQTT y el estándar FIPA-ACL para los mensajes de la plataforma.
Criterios de aceptación
Implementación del broker de MQTT en la plataforma de IBM, primera versión de la librería de agentes que permita la comunicación de mensajes FIPA-ACL por medio de mensajes MQTT.
Tabla 5.4: Historia de Usuario 3 Desarrollo
En el desarrollo de este sprint se llevaron a cabo las siguientes tareas:
Se identificaron distintos frameworks para SMA que existen actualmente, como JADE, que es el más extendido. Sin embargo, se comprobó que JADE no era una opción válida para el desarrollo de esteTFG, ya que su ejecución resulta ser muy costosa desde el punto de vista computacional y por tanto, su integración no es viable en elIOT. También se encontró el framework SPADE, el cual está escrito usando Python, y que a priori se podía considerar una buena opción pues permite la ejecución de los agentes en varios lenguajes de programación y su control a través de una interfaz gráfica. No obstante, no se consideró tenerla en cuenta ya que no existe soporte para la misma. Finalmente, se decidió crear un framework propio específico para elIOA.
Uno de los principales componentes de unaPAes elACC. Al estar dedicada para dispositi- vos delIOT, dicha plataforma va a utilizar el protocolo de transporteMQTT(Figura 5.2), que puede considerarse como el protocolo más utilizado para este tipo de dispositivos. Se trata de un protocolo de comunicación indirecta. Esto significa que la comunicación se realizará a través de un intermediario y que los emisores y receptores están desacoplados en tiempo y espacio. Para que dos dispositivos puedan mantener una comunicación utilizando el pro- tocolo MQTT, primero deberían subscribirse a un topic. Este topic será donde el dispositivo
5.Resultados
deberá publicar el mensaje para que el otro dispositivo pueda leerlo. También cabe la posi- bilidad de que el dispositivo solo publique y no esté subscrito a ningún topic. En este caso, no podrá recibir ningún mensaje MQTT.
Figura 5.2: Funcionamiento de MQTT
Además, se decidió utilizar los servicios que proporciona IBM para la nube (Bluemix).
Más concretamente el servicio llamado IBM Watson IoT Platform, el cual nos permite ges- tionar dispositivos IoT. Dicho servicio proporciona un broker, que es el intermediario para enviar mensajes MQTT. Esta opción tiene dos principales ventajas con respecto a un ser- vidor Mosquito para MQTT. La primera es que IBM ofrece una conexión segura entre los dispositivos conectados, ya que requiere contraseña y códigos generados en la página web.
En segundo lugar, facilita una dirección para poder conectar nuestros dispositivos usando una librería de MQTT en cualquier lenguaje, sin tener que configurar nuestro servidor con una IP fija o un DNS.
Figura 5.3: Mensajes enviados a través del broker en la plataforma IBM Watson IoT Platform
Iteración 1: Configuración inicial de servicios Para permitir la comunicación entre los agentes y los componentes de la plataforma era necesario establecer un lenguaje de comunicación para ellos. Para este fin, el organismo FIPA (Foundation for Intelligent Physical Agents), el cual es un organismo para el desarrollo y establecimiento de estándares de software para agentes que interactúan en sistemas basados en agentes, creó un estándar llamado FIPA-ACL (Agent Communication Language). Dicho estándar se encarga de los mensajes de comunicación entre los agentes, los protocolos de interacción de intercambio de mensajes y los actos de comunicación basados en la teoría de los actos del habla, entre otros. Debido a la extensa documentación disponible, se decidió implantar dicho estándar en la plataforma de agentes ya que se trata de un estándar que está integrado en la mayoría de plataformas de agentes actuales.
def myAppEventCallback(event):
print("Received live data from %s ( %s) sent at %s: hello= %s x= %s" % (event.deviceId, event.
deviceType, event.timestamp.strftime(" %H: %M: %S"), data[’hello’], data[’x’]))
#####################################
#Proporcionados por IBM Watson Iot, informacion para conectar con el broker
#####################################
organization = deviceType = deviceId =
appId = str(uuid.uuid4()) authMethod = "token"
authToken =
# Inicializar el dispositivo try:
appOptions = {"org": organization, "id": appId,"auth-method": "apikey", "auth-key" : authkey, "
auth-token":authtoken }
appCli = ibmiotf.application.Client(appOptions) appCli.connect()
commandData={’LightON’ : 1}
##Se publica el evento con la informacion
appCli.publishEvent(deviceType, deviceId,"status","json",commandData)
# El manejador de eventos es, el metodo <<myAppEventCallback>>
appCli.deviceEventCallback = myAppEventCallback
#Se subscribe a todos los eventos del tipo <<status>>
appCli.subscribeToDeviceEvents(event="status") except Exception as e:
print ("Connect attempt failed: "+str(e)) sys.exit()
appCli.disconnect()
Listado 5.1: «Hola mundo» de una aplicación MQTT con ibmiotf
Se desarrolló la librería de agentes utilizando el lenguaje de Programación Python. Debi- do a su compatibilidad con varios dispositivos delIOT, la principal funcionalidad que tendrá dicha librería, en su primera versión, será la de proveer los métodos necesarios para realizar la comunicación entre todos los componentes de la plataforma de agentes. Como base, se decidió utilizar la librería desarrollada por IBM, llamada ibmiotf, que permitirá realizar el
5.Resultados
envío y recepción de mensajes a través del broker MQTT (Listado 5.1). Una particularidad que tiene esta librería es que los mensajes se reciben en el agente de manera asíncrona a la ejecución normal del agente, al igual que ocurre en los agentes de JADE. Los mensajes FIPA-ACL están formados por una serie de tuplas de identificador del campo y valor. Dicha estructura se visualiza igual que un diccionario en Python, por eso se ha diseñado una clase especial para controlar la estructura de un mensaje ACL en la plataforma con un diccionario.
Además esto puede ser beneficioso, ya que los mensajes que se deben enviar a través del broker MQTT deben ser mensajes de tipo JSON. Conviene tener en cuenta que el lengua- je utilizado es Python, donde existe una librería de JSON para automatizar el paso de un diccionario a un mensaje JSON y viceversa (Listado 5.2).
Para instalar la libreríaibmiotf se debe ejecutar el siguiente comando:
$ pip install ibmiotf
Finalmente, se configuró un repositorio en la página de GitHub no sólo para llevar un control del código del proyecto, sino también poder utilizar el tablero Kanban que nos ofrece, gestionando así las tareas que se deben realizar en cada iteración.
def asJSON(self):#Diccionario a partir de un mensaje ACL p={}
p["performative"]=str(self.getPerformative()) if self.sender:
p["sender"]=self.sender.asJSON() if self.language:
p["language"]=self.getLanguage() if self.receivers:
v=[]
for i in self.receivers:
v.append(i.asJSON()) p["receivers"]=v
if self.content:
if type(self.content) is dict:
p["content"] = json.dumps(self.content) else:
p["content"] = self.content return p
def loadJSON(self, jsonstring):#Crea un mensaje ACL a partir de un JSON p = json.loads(json.dumps(jsonstring))
if "performative" in p:
self.setPerformative(p[’performative’]) if "language" in p:
self.setLanguage(p["language"]) if "sender" in p:
aid=AID() a=(p["sender"])
Iteración 2: Diseño e implementación del Sistema de Gestión de Agentes (AMS)
aid.loadJSON(a) self.setSender(aid) if "receivers" in p:
for i in p["receivers"]:
s = AID() s.loadJSON(i) self.addReceiver(s) if "content" in p:
self.setContent(json.loads(p["content"]))
Listado 5.2: Código que gestiona los mensajes FIPA-ACL Resultado
Al finalizar esta iteración se obtuvo la implementación del ACCde la PA, generando así la primera versión de la librería de agentes y permitiendo a cada uno de los agentes enviar y recibir mensajes FIPA-ACL. Además, se configuró correctamente la plataforma de IBM Watson IoT para poder utilizar su broker para la comunicación en toda la plataforma.
Figura 5.4: ACC de la plataforma finalizada la Iteracion 1