Nov 172012
 
Artículo Domótica

Una red domótica KNX puede conectarse a una red IP mediante un dispositivo denominado IP Router.

El IP router se comunica con un servidor externo mediante el intercambio de paquetes UDP. Los paquetes intercambiados incluyen un “identificador de sesión” (channelid), y están numerados, de manera que un paquete con un número fuera de secuencia es descartado.

En este artículo analizamos los paquetes intercambiados entre un servidor eibd y un IP router implementado en software ( “tweety”). Además, simulamos el envío de órdenes mediante el comando groupswrite que se incluye en la distribución de eibd.

Para realizar la prueba, ejecutamos en una ventana el servidor eibd:

En otra ventana, ejecutamos el IP router “tweety”:

En una tercera ventana, ejecutamos el comando groupswrite para enviar una orden al bus:

La secuencia de paquetes intercambiados, desde el punto de vista del servidor eibd, es la siguiente:

Num. Sentido Header Data
1 Send 06 10 02 05
=CONN REQ
00 1A 08 01 0A 00 02 0F 0E 58 08 01 0A 00 02 0F 0E 58 04 04 02 00
2 Recv 06 10 02 06
=CONN RES
00 14 65 00 08 01 0A 00 02 0F 00 00 04 04 4C 03
3 Send 06 10 04 20
=TUNNEL REQ
00 15 04 65 00 00 11 00 BC F0 00 00 13 04 01 00 81
4 Recv 06 10 04 21
=TUNNEL RES
00 0A 04 65 00 00
5 Send 06 10 04 20
=TUNNEL REQ
00 15 04 65 01 00 11 00 BC F0 00 00 13 04 01 00 81
6 Recv 06 10 04 21
=TUNNEL RES
00 0A 04 65 01 00
7 Send 06 10 04 20
=TUNNEL REQ
00 15 04 65 02 00 11 00 BC F0 00 00 13 04 01 00 81
8 Recv 06 10 04 21
=TUNNEL RES
00 0A 04 65 02 00
9 Send 06 10 02 07
=CONNECTIONSTATE
REQUEST
00 10 65 00 08 01 0A 00 02 0F 0E 58
10 Recv 06 10 02 08
=CONNECTIONSTATE
RESPONSE
00 08 65 00
11 Send 06 10 02 09
=DISCONNECT REQUEST
00 10 65 00 08 01 0A 00 02 0F 0E 58

Los headers de los paquetes constan de 6 bytes, que contienen:
  • el prefijo “06 10” (longitud del header: 6 bytes, version: 1)
  • el tipo de paquete (dos bytes: CONNECTION REQUEST, CONNECTION RESPONSE, etc.)
  • la longitud total del paquete (dos bytes)

Establecimiento de conexión

Paquete 1: el servidor envía una solicitud de conexión al router IP.

En el paquete indica la direccion IP y puerto en el que escucha, tanto para comandos de control como de datos (IP 0A 00 02 0F hex = 10.0.2.15; puerto 0E 58 hex = 3672)

El contenido del paquete es:

Control endpoint Data endpoint
struct
length
host
protocol
Dir. IP puerto struct
length
host
protocol
Dir. IP puerto struct
length
connection
type
data
08 01 0A 00 02 0F 0E 58 08 01 0A 00 02 0F 0E 58 04 04
= EIBNETIP_TUNNELING
02 00
= TUNNEL_LINKLAYER


Paquete 2
: El router IP responde con un mensaje aceptando la conexión. En la respuesta incluye el número de canal (channelid) que se debe utilizar durante la conexión:

 

channelid struct
length
host
protocol
Dir. IP Reserved struct
length
connection
type
direccion
KNX
65 00 08 01  0A 00 02 0F  00 00 04 04
= EIBNETIP_TUNNELING
4C 03

 

Envío de órdenes al bus

Simulamos el envío de órdenes a la dirección de grupo 2/3/4 del bus, mediante el comando groupswrite que viene como ejemplo en la instalación de eibd:

Paquete 3: Al recibir la orden, el servidor envía al router IP el correspondiente paquete UDP.

En el header, utiliza el mismo channelid recibido durante el establecimiento de la conexión, y el número de secuencia:

 

Header cEMI packet
hdr
length
channelid seq
num
reserved msg
code
add info
length
Ctrl 1 Ctrl 2 source
address
destination
address
data
lengh
APDU
04 65 00 00 11 00  BC F0 00 00  13 04 01  00 81

Paquete 4: El router IP responde con un mensaje de aceptación de la solicitud:

Este mensaje sólamente contiene el header, con el mismo channelid y número de secuencia que los recibidos en la petición:

Header
hdr
length
channelid seq
num
status
04 65 00 00

El status devuelto puede ser:

Paquetes 5,6 y 7,8: Repetimos la ejecución del comando groupswrite dos veces más, y el servidor eibd intercambia con el router IP otros dos pares de paquetes con el mismo contenido que los paquetes 3 y 4, con excepción del número de secuencia, que se incrementa en cada intercambio.

Mantenimiento de la conexión

Paquete 9: Cada 60 segundos, el servidor envía al router IP un paquete CONNECTIONSTATE_REQUEST. El paquete contiene el channel id y la dirección IP y puerto en el que escucha el servidor:

channelid struct
length
host
protocol
Dir. IP puerto
65 00 08 01  0A 00 02 0F 0E 58

Paquete 10: El router IP responde con un paquete que simplemente contiene el channel ID:

channelid status
65 00

Los posibles códigos de status son:

Desconexión

Paquete 11: En la solicitud de desconexión, el servidor envía un paquete igual al que envía en la solicitud CONNECTIONSTATE_REQUEST:

channelid struct
length
host
protocol
Dir. IP puerto
65 00 08 01  0A 00 02 0F 0E 58

—-

 Publicado por en 7:00 pm

 Deja un comentario

(requerido)

(requerido)