Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM,...

19
Pasarela Ingenium Integración de sistema domótico Ingenium bajo el estándar UPnP Página 118 5 Pasarela Ingenium 5.1 Introducción En este capítulo se verá cómo funciona el software que permite controlar el sistema domótico a través del bus de datos y veremos los pasos necesarios para poder trabajar bajo el estándar UPnP. 5.2 Serial Port Terminal Para el manejo del sistema Ingenium disponemos una interfaz RS232 (vista en el 3.1.7 ) que conecta el puerto serie del PC directamente con el bus de datos, lo que nos permitirá, mediante software, leer y enviar datos sobre éste. En capítulos anteriores hemos visto el funcionamiento del sistema Ingenium, su protocolo de comunicaciones, el interfaz necesario para poder comunicarnos con él y un programa que nos facilita el fabricante para poder diseñar, crear y modificar sistemas basado en este protocolo. Todo esto no es suficiente para realizar la pasarela y ahora, en este apartado, veremos esquemáticamente el programa en C# necesario para poder leer y escribir directamente en el puerto serie sobre el bus. Para la creación del programa vamos a partir de uno ya existente, el Serial Port Terminal. Lo hemos elegido porque su código, además de conocerlo y poder modificarlo, es perfecto para lo que necesitamos ya que éste está pensando para poder leer y escribir directamente sobre el puerto serie. Para conocer su funcionamiento sin tener que adentrarnos en su código, veremos el siguiente diagrama de flujo.

Transcript of Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM,...

Page 1: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 118

5 Pasarela Ingenium

5.1 Introducción

En este capítulo se verá cómo funciona el software que permite controlar el sistema domótico a través del bus de datos y veremos los pasos necesarios para poder trabajar bajo el estándar UPnP.

5.2 Serial Port Terminal

Para el manejo del sistema Ingenium disponemos una interfaz RS232 (vista en el 3.1.7 ) que conecta el puerto serie del PC directamente con el bus de datos, lo que nos permitirá, mediante software, leer y enviar datos sobre éste.

En capítulos anteriores hemos visto el funcionamiento del sistema Ingenium, su protocolo de comunicaciones, el interfaz necesario para poder comunicarnos con él y un programa que nos facilita el fabricante para poder diseñar, crear y modificar sistemas basado en este protocolo. Todo esto no es suficiente para realizar la pasarela y ahora, en este apartado, veremos esquemáticamente el programa en C# necesario para poder leer y escribir directamente en el puerto serie sobre el bus.

Para la creación del programa vamos a partir de uno ya existente, el Serial Port Terminal. Lo hemos elegido porque su código, además de conocerlo y poder modificarlo, es perfecto para lo que necesitamos ya que éste está pensando para poder leer y escribir directamente sobre el puerto serie.

Para conocer su funcionamiento sin tener que adentrarnos en su código, veremos el siguiente diagrama de flujo.

Page 2: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 119

Figura 5.1 Diagrama de flujo del Serial Port Terminal

Para poder ver la Figura 5.1 con claridad, la vamos a dividir en cuatro partes, Inicialización, Funcionamiento, Transmisión y Recepción.

La parte de Inicialización corresponde al arranque del programa, donde se inicializarán los diferentes componentes.

El código tiene que generar todos los campos que se ven en la Figura 5.1, botones, etiquetas, el terminal etc. Se establece la configuración predeterminada que engloba a los campos:

• COM Port

• Baud Rate

• Parity

• Data Bits

• Stop Bits

Además se actualiza el estado del puerto, abierto o cerrado.

Page 3: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 120

Figura 5.2 Diagrama de flujo fase Inicio

A continuación podemos decir que se encuentra la fase de Funcionamiento, en la que el programa mantiene su ejecución a la espera de una interrupción. En caso de que no se llegue a producir ésta o que al intentar enviar nosotros datos a través del bus, nos de error, puede deberse a dos motivos principalmente. Que se nos haya olvidado abrir el puerto o que la configuración predeterminada no sea válida. En este caso, habrá que modificarla para el correcto entendimiento entre nuestro programa y el bus. Veamos el diagrama de flujo.

Page 4: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 121

Figura 5.3 Diagrama de flujo de la fase Funcionamiento

A continuación tenemos la fase de Transmisión, que corresponde al momento donde nosotros producimos la interrupción de envío de datos, al pulsar el botón Send. Antes de enviar debemos de comprobar qué modo está activado, que significará qué tipo de datos hemos escrito en Send Data. En cualquier caso el programa envía por el bus una cadena de caracteres, por lo que en caso de tener activado Modo Hex será necesario hacer una conversión de datos.

Page 5: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 122

Figura 5.4 Diagrama de flujo de la fase Transmisión

La última fase corresponde al caso en el que la interrupción producida sea del tipo de recepción de datos, producida cuando el buffer avise de dicha recepción. La recepción siempre se realiza de una cadena de carácteres, por ello, en caso de tener activado el Modo Hex, será necesaria una conversión de tipo de datos para que la representación por pantalla sea correcta.

Figura 5.5 Diagrama de flujo de la fase Recepción

Por último se observa que en caso de haberse obtenido alguna interrupción y que no sea de tipo Transmisión ni Recepción, será debida a una interrupción procedente de algún tipo de error.

Ya conocemos el funcionamiento, veamos ahora la interfaz y cómo se comporta.

Page 6: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 123

Figura 5.6 Interfaz SerialPort Terminal

En la siguiente figura he dividido la interfaz en 5 partes.

1. Terminal que representa tanto la entrada como salida de datos por el puerto serie.

2. Send Data. Aquí podremos escribir los datos que queramos enviar.

3. Settings. Aquí podemos variar la configuración predeterminada.

4. Data Mode. Podemos elegir entre Text y Hex, por comodidad siempre usaremos modo hexadecimal.

5. Open Port. Permite abrir y cerrar el puerto de comunicación.

Figura 5.6 Estructura interfaz SerialPort Terminal

La escritura en hexadecimal a través de Send Data resulta bastante tosca y poco intuitiva para aquellos que no conozcan el protocolo Ingenium en profundidad. Para tener una interfaz más agradable y sencilla he realizado unos cuantos cambios.

Lo primero que hice fue cambiar la representación por pantalla de los datos. En el programa original los datos se iban representando uno tras otro tal como iban llegando al buffer (Figura 5.7). Para una fácil lectura he almacenado los datos en una variable externa y después he ido representando en pantalla los

Page 7: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 124

datos por paquetes, es decir, cada vez que recibía un datagrama lo muestro por pantalla e introduzco un salto de línea.

Figura 5.7 Representación de lectura a través del interfaz

Tras esto, me encontré con el problema de representar los paquetes por el inicio de su cabecera y no por el primer dato recibido. Como se ve en la figura, el paquete en vez de iniciarse por FF o FE, empieza por 04, estando los datos de cabecera en posiciones intermedia.

Figura 5.8 Modificación representación lectura a través del interfaz

Antes de solucionar este problema, habiendo obtenido conocimiento del código y en previsión de más modificaciones, me propuse definir la interfaz que iba a necesitar, sus campos y funciones.

Mi programa debe basarse en el manejo de intercambios de paquetes. Para ello he creado 9 campos correspondientes a los diferentes datos que conforman el datagrama. Además he añadido 4 campos más para poder dejar almacenado los datos de la última lectura, así no los perderemos a medida que se vaya refrescando la pantalla con nuevos datos.

Page 8: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 125

Aunque como se puede comprobar en el capítulo 4 existen muchas configuraciones y por tanto muchas combinaciones de datos a transmitir, la adición de estos botones intenta ayudar a rellenar el datagrama intuitivamente. Los campos son:

• Cabecera: está definida como FF FF y no se puede modificar, ya que es un requisito indispensable en la transmisión.

• Direcc Origen: está definida como PC, es sólo simbólico para saber que la transmisión es desde éste, pero no se envía nada.

• Direcc Destino: a completar.

• Comando: Menú desplegable en el que podemos elegir entre, Inválido, ACK, No ACK, Leer,

Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo.

• Dato1: a completar.

• Dato2: a completar.

Figura 5.9 Mejora del interfaz

Una vez completado todos los campos (en caso contrario se produciría un error) podemos pulsar el botón Send para enviar los datos a través del puerto serie. El funcionamiento es exactamente igual que en el programa original, de hecho, lo que hago es escribir los datos de los campos en Send Data y realizar el envío.

En caso de haber elegido el comando Leer, el resultado del envío de ese paquete se queda almacenado en los campos inferiores precedidos por el texto “Resultados de la última lectura”.

Otra de las mejoras que incluí en el código fue representar los datos por colores en función al tipo que representen.

Page 9: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 126

Figura 5.10 Ejemplo funcionamiento interfaz

Podemos observar 6 tipos de colores.

• Gris: representa la cabecera (2 bytes)

• Marrón: representa dirección origen (2 bytes)

• Rojo: representa dirección destino (2 bytes)

• Amarillo: representa el campo código (1 byte)

• Morado: representa dato 1 (1 byte)

• Celeste: representa dato2 (1 byte)

Además, subrayado en verde y encabezado con el número 1 tenemos los campos necesarios para enviar el datagrama por el puerto serie. La cabecera y la dirección origen no son modificables como ya hemos mencionado. En color rosáceo y con el número dos, se pueden ver los campos que almacenan la respuesta a la petición de lectura de algún dispositivo.

Page 10: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 127

Figura 5.11 Modificación final para la representación de datos

A continuación vamos a ver algunos ejemplos de funcionamiento.

5.2.1 Ejemplo 1. Modo recepción

En este primer ejemplo vamos a llevar a la práctica aprendido en la teoría. En este ejemplo estaremos atentos a lo que se lee a través del bus de datos. Para ello pulsaremos un interruptor para ver qué datos transmite para hacer funcionar uno de los dispositivos.

En el panel Ingenium he pulsado un interruptor que ha apagado la bombilla uno del dispositivo 6E6S digitales. Este dispositivo se encuentra configurado en la posición 00 01.

Como vimos en el apartado 3.1.7, en modo recepción el formato del paquete es:

C1, C2, OrgH, OrgL, DirH, DirL, C, D1, D2

Siendo:

C1,C2: Cabecera 2 Bytes de valor 254 en decimal, 0xFE.

OrgH: Dirección de origen Byte alto.

OrgL: Dirección de origen Byte bajo.

DirH: Dirección de destino Byte alto.

DirL: Dirección de destino Byte bajo.

C: Comando del paquete.

D1: Dato 1.

D2: Dato 2.

Figura 5.12 Ejemplo 1

Page 11: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 128

Podemos comprobar que los dos primeros bytes son FE, FE. La dirección origen y destino son equivalentes ya que hemos pulsado el interruptor correspondiente al propio dispositivo. Comando es 04, que corresponde a Escribir, Dato1 es 02, para modificar el estado de la salida y Dato2 es 08, que corresponde a apagar la luz (00+8, si recordamos). En la siguiente volvemos a pulsar sobre el interruptor para encender la luz, la única variación es Dato2, que tiene que ser 00 (encendido de la luz Z0).

5.2.2 Ejemplo 2. Modo transmisión

En este ejemplo comprobaremos el funcionamiento del transceptor en modo transmisión.

En este caso hemos enviado la trama FF FF 00 01 04 03 00, correspondiente a hacer switch (03 en Dato1 y cualquier valor en Dato2) en la posición 00 01. Es decir, en modo transmisión el datagrama se representa por:

C1, C2, OrH, OrL,C, D1, D2, siendo:

C1,C2: Cabecera de 2 Bytes de valor255 FF FF.

DirH: Byte alto de la dirección de destino del paquete.

DirL: Byte bajo de la dirección de destino del paquete .

C: Comando

D1: Dato 1

D2: Dato 2

Figura 5.13 Ejemplo 2

En color verde podemos ver la trama enviada. Cabecera FF, FF. La dirección de destino 00 01 (dispositivo 6E6S). Comando 04, indica escribir. Dato1 03 para hacer switch y Dato2 00, indica la posición donde queremos actuar, en este caso Z0 (posición de memoria 00).

Page 12: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 129

En diferentes colores podemos ver la trama recibida. El resultado del envío del paquete es la recepción de uno que indica ACK (01). Recordar que en este protocolo todo envío de paquete le corresponde una respuesta.

Para este caso, el datagrama está formado de la manera:

C1, C2, C, OrH, OrL, D1, D2, siendo:

C1,C2: Cabecera de 2 Bytes de valor 254, y 255 FE FF.

C: Comando de resultado (C_ACK si todo bien, C_NOACK si error)

OrH: Byte alto de la dirección de origen del paquete (dirección del equipo de destino).

OrL: Byte bajo de la dirección de origen del paquete (dirección del equipo de destino).

D1: Dato 1 devuelto por el equipo de destino.

D2: Dato 2 devuelto por el equipo de destino.

Vemos como tenemos la cabecera FE FF. Cuidado porque la posición de comando varía, estando antes de dirección origen. En este caso tiene como valor 01 para representar ACK. Posteriormente están 00 01 para indicar la dirección origen, Dato1 00 y Dato 2 00, pudiendo tener cualquier valor.

5.2.3 Ejemplo 3. Acción lectura

En este último ejemplo vamos a ver el resultado del envío de un paquete de lectura.

Figura 5.14 Ejemplo 3

El paquete de envío se representa en verde. Corresponde a la cabecera FF FF, dirección destino 00 01, comando 03 que indica lectura, Dato1 01, para leer el estado y Dato2 00, pero podría tener cualquier valor.

El paquete que se recibe como resultado de la petición de lectura se representa en colores. Como acabamos de ver, en este caso la cabecera es diferente, FE FF. Recordar que en este caso la posición Comando está cambiada, a continuación de FE FF, con valor 01 (ACK). Luego se encuentra la dirección de origen 00 01, Dato1 00 (indica que está apagada la luz) y Dato2 00 que podría tomar cualquier valor.

Page 13: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 130

NOTA: Si tiene dificultad para reconocer las diferentes cabeceras recuerde:

• Modo Tx.

FF FF OrH OrL (Trama enviada)

FF FF FE FF (Trama recibida)

• Modo Rx.

FE FE OrH OrL (Trama leída)

Gracias a esta diferencia de cabeceras podremos extraer la información necesaria en función de la acción realizada, sin mayor esfuerzo que leer continuamente el bus. Esto nos ayudará para la programación de eventos necesarios para el funcionamiento sobre UPnP.

5.3 Diseño pasarela UPnP

Una vez creado el código en C# que nos permite la comunicación bidireccional entre el sistema Ingenium y nuestro PC, podemos pasar al diseño de la pasarela UPnP. Para ello disponemos de varias herramientas que nos facilitan este proceso, la Intel Tools for UPnP Technology y la Intel Digital Home

Device Code Wizard.

La creación de la pasarela se puede dividir en cinco etapas.

• Etapa 0: primer paso donde definir la funcionalidad de tu aplicación de cara al resto de dispositivos. Debemos pensar qué es lo que mi dispositivo puede aportar y cuál va a ser la información que voy a necesitar recoger del exterior. De este modo podremos prever las diferentes variables necesarias.

Nuestro dispositivo no es demasiado complejo, por lo que definiendo los 7 posibles valores del datagrama (C1, C2, C, OrH, OrL, D1, D2) podemos controlarlo al completo.

Tendremos dos tipos de variables, las definidas como Evented y las que no. Dentro del primer grupo necesitaremos una por cada variable para poder desarrollar más adelante acciones en función de cambios de valores en éstas. De ese modo, por ejemplo, podremos hacer funcionar un dispositivo cuando Dato1 valgo un valor determinado.

Dentro del segundo grupo solo necesitaremos cuatro, Comando, Dato1, Dato2 y Direcc_Dest, ya que la dirección origen es siempre la misma. Con estas variables podremos almacenar la información que nos proporcione la lectura o escritura en el bus.

• Etapa 1: diseño de los servicios ofrecidos por el dispositivo. Para esta etapa usaremos la Intel

Tools for UPnP Technology, que nos creará el archivo XML de descripción de servicio. Para ello debemos de indicar las variables de estado necesarias y las acciones que proporciona el servicio. Cada acción ira asociada con una o más variable de entrada (valores que se pasan al dispositivo al llamar a la acción) o salida (valores devueltos por el dispositivo tras la ejecución).

En la figura siguiente podemos ver cómo se crean las variables. La venta State Variable nos permite de forma rápida elegir entre los diferentes tipos y la posibilidad de definirla Evented o Multicast.

Page 14: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 131

Figura 5.14 Intel Tools for UPnP Technology

El dispositivo UPnP dispondrá de 10 variables. Cuatro de ellas definida de tipo string y necesarias para la implementación de la función Enviar trama. Las otras seis variables son definidas string y de tipo Evented, necesarias para poder estar al tanto de las variaciones de estos valores. Gracias a estas variables podremos configurar acciones en el punto de control en función a los eventos que esperemos.

En la figura de a continuación se muestra cómo la herramienta Intel Tools for UPnP Technology nos permite de forma intuitiva ir definiendo las acciones. La ventana Action Editor permite ir asignando a una acción determinada las diferentes variables de entrada o de salida, anteriormente definidas.

Page 15: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 132

Figura 5.15 Edición de servicio

• Etapa 2: creación de la pila UPNP para el dispositivo. Para esta etapa usaremos la Intel Digital

Home Device Code Wizard. Partiendo del archivo XML de la etapa anterior permite generar el código de la pila de dispositivo UPnP. Para ello se crea un dispositivo, se definen sus servicios y posteriormente se exporta la pila a la plataforma de desarrollo necesaria, en nuestro caso C#.

Figura 5.16 Intel Digital Home Device Code Wizard

Page 16: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 133

Figura 5.17 Intel Digital Home Device Code Wizard

• Etapa 3: implementación de las acciones del servicio. Esta etapa usaremos el Visual C# para la modificación de código. Se trata de aunar el programa creado al inicio que comunicaba el PC con el bus y el código de la pila de nuestro dispositivo necesario para su funcionamiento sobre UPnP. Además, una vez unificado, se debe de programar en función a los servicios que queramos ofrecer.

• Etapa 4: compilación del código. En esta etapa obtendremos el ejecutable del dispositivo. Además usaremos el Device Spy (punto de control para UPnP) para comprobar que la pasarela funciona correctamente.

Vamos a ver algunas capturas de pantalla par a ver el funcionamiento de la pasarela.

Figura 5.17 Device Spy

Page 17: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 134

En la figura 5.17 se pueden ver los dispositivos UPnP conectados a la red. Por un lado esta nuestra Pasarela UPnP Ingenium y otro dispositivo que no nos interesa, el Residential Gateway Device.

Desplegando el menú de nuestro dispositivo podemos encontrar las variables definidas y el servicio prestado. Se comprueba que aparecen las 4 variables (Comando, Dato1, Dato2, Direcc_Dest) necesarias para el envío de la trama y las 6 variables de tipo Evented (eCabecera, eComando, eDato1, eDato2, eDirecc_Dest, eDirecc_Orig) necesarias para conocer constantemente las variaciones de estos datos, lo que equivale a conocer la actividad en el bus de datos.

Figura 5.18 Pasarela. Envío trama

En la figura 5.18 se puede observar cómo se realiza la acción EnviarTrama desde UPnP. Realizando click sobre el servicio nos aparece la ventana Invoke-EnviarTrama, en ella nos aparecen 4 campos a completar. El primero, Comando, es un menú desplegable ya que tiene acotado los valores que puede tomar. Los 3 siguientes, Dato1, Dato2 y Direcc_Dest son más difíciles de introducir, ya que debemos de recordar el valor de cada campo en función a la acción que queramos realizar. Por ejemplo, para hacer switch sobre la bombilla Z1 del 6E6S, deberíamos de elegir, Comando= Escribir, Dato1= 03, Dato2= 01(no importa), Direcc_Dest 01.

NOTA: Aunque la Direcc_Dest debería de ser 00 01, solo es necesario especificar 01, ya que 00 se añade de forma automática.

Además, en esta versión del código del SerialPortTerminal había algunas correcciones hechas, y una de ellas fue el cambio de colores al representar por pantalla. Solo destacar que se ha intercambiado el color rojo por el marrón.

Page 18: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 135

Figura 5.19 Ejemplo funcionamiento pasarela

En la figura 5.19, además del Device Spy, he puesto en pantalla el SerialPortTerminal para que se pueda comprobar el funcionamiento. Una vez que en UPnP ejecutamos la acción EnviarTrama, el software realiza las acciones que tengamos programadas. En este caso, se ejecuta la función SendData, a esta función se le pasa los valores almacenados en las variables usadas en UPnP y realiza la función tal y como si hubiéramos usados la interfaz del SerialPortTerminal. Es por ello que, en UPnP, no necesitamos especificar los campos Cabecera y Direcc_Oirg.

Se puede comprobar que en el Campo SendData aparece la trama correctamente enviada;

Envío-> FF FF 00 01 04 03 00 (Cabecera Direc_Dest Comando Dato1 Dato2).

Respuesta-> FF FF FE FF 01 00 01 00 00 (Cabecera FE FF ACK Direcc_Orig Dato1 Dato2).

Page 19: Pasarela Ingeniumbibing.us.es/proyectos/abreproy/11977/fichero/Memoria%2F7...Escribir, Leer EEPROM, Escribir EEPROM y Leer Tipo. • Dato1: a completar. • Dato2: a completar. Figura

Pasarela Ingenium

Integración de sistema domótico Ingenium bajo el estándar UPnP

Página 136

Figura 5.20 Suscripción a eventos

Por último podemos ver en la figura 5.20 la subscripción a eventos de nuestro dispositivo. Las variables que aparecerán son las que hemos definidos de tipo Evented, y solo aparecen modificaciones en su valor, es decir, si enviamos dos veces la misma trama y produce el mismo resultado, no tendremos constancia de que haya ocurrido ya que no produciría variación alguna. Si observamos la figura, vemos que las últimas actualizaciones solo son de eDato2, esto es debido a que he ido enviando paquetes consecutivos que hacían variar solamente Dato2.

Paquete 1. FE FE 00 01 04 02 04

Paquete 2. FE FE 00 01 04 02 02

Paquete 3. FE FE 00 01 04 02 04

NOTA: En este caso, el envío de paquetes se ha realizado pulsando los interruptores del Panel Ingneium y lo recogido corresponde a una trama leída en modo recepción, por ello la cabecera es FE FE y Direc_Oirg = Direc_DEst= 00 01.