Administrador de dispositivos de Weave

Ver el código fuente en GitHub

La herramienta weave-device-mgr (administrador de dispositivos de Weave) funciona como un dispositivo de asistencia en el ecosistema de Weave. Administra el par de dispositivos, incluido el aprovisionamiento de red y tejido. La funcionalidad que proporciona es análoga a la función que desempeña la app de Nest en el aprovisionamiento, la vinculación y el registro de un dispositivo Nest en el objeto Service.

El administrador de dispositivos de Weave se incluye en la compilación weave-tools. En una compilación de aplicación independiente, se encuentra en /src/device-manager/python.

Ejecutar

El menú de ayuda está disponible durante el funcionamiento de la herramienta. Para iniciar Weave Device Manager y ver el menú de ayuda, sigue estos pasos:

./weave-device-mgr
help

Conectarse a un dispositivo de prueba

Debido a que Weave Device Manager cumple una función de asistencia, primero debes conectarla a un dispositivo. Para probar esta funcionalidad, usa una topología simulada feliz en la que un nodo ejecuta un dispositivo de simulación de Weave y otro ejecuta el Administrador de dispositivos.

1. Crea una topología Happy

En esta topología, node01 ejecutará el dispositivo simulado y node02 ejecutará el administrador de dispositivos. Antes de comenzar, instala Happy y configúralo para que sea compatible con Weave.

Una vez instalada, crea una topología simple de Happy:

weave-state-load <path-to-openweave-core>/src/test-apps/happy/topologies/standalone/three_nodes_on_thread_weave.json

Verifica los estados Happy y Weave para confirmar la topología:

happy-state
State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes
           Home       thread      UP                       2001:0db8:0001:0002/64


NODES      Name    Interface    Type                                          IPs
         node01        wpan0  thread   fd00:0000:fab1:0006:1ab4:3000:0000:0004/64
                                       2001:0db8:0001:0002:0200:00ff:fe00:0001/64

         node02        wpan0  thread   fd00:0000:fab1:0006:1ab4:3000:0000:0005/64
                                       2001:0db8:0001:0002:0200:00ff:fe00:0002/64

         node03        wpan0  thread   2001:0db8:0001:0002:0200:00ff:fe00:0003/64
                                       fd00:0000:fab1:0006:1ab4:3000:0000:000a/64
weave-state
State Name: weave

NODES                Name       Weave Node Id    Pairing Code
                   node01    18B4300000000004          AAA123
                   node02    18B4300000000005          AAA123
                   node03    18B430000000000A          AAA123

FABRIC          Fabric Id           Global Prefix
                     fab1     fd00:0000:fab1::/48

2. Inicia el dispositivo de prueba

Accede a node01:

happy-shell node01

En node01, abre un dispositivo simulado con la dirección IPv6 de Weave de ese nodo y un código de vinculación válido de Weave. Se requiere un código de vinculación para establecer una sesión segura de PASE entre el dispositivo simulado y el Administrador de dispositivos:

./mock-device --node-addr fd00:0:fab1:6:1ab4:3000:0:4 --pairing-code AB713H
WEAVE:ML: Binding IPv6 TCP listen endpoint to [fd00:0:fab1:6:1ab4:3000:0:4]:11095
WEAVE:ML: Listening on IPv6 TCP endpoint
WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
WEAVE:IN: IPV6_PKTINFO: 92
WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:fab1:6:1ab4:3000:0:4]:11095 (wpan0)
WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (wpan0)
WEAVE:ML: Listening on IPv6 multicast receive endpoint
WEAVE:EM: Cannot listen for BLE connections, null BleLayer
Weave Node Configuration:
  Fabric Id: FAB1
  Subnet Number: 6
  Node Id: 18B4300000000004
WEAVE:SD: init()
Weave Node Configuration:
  Fabric Id: FAB1
  Subnet Number: 6
  Node Id: 18B4300000000004
  Listening Addresses:
      fd00:0:fab1:6:1ab4:3000:0:4 (ipv6)
  Pairing Server: fd00:0:fab1:6:1ab4:3000:0:4
Mock Time Sync is disabled and not initialized
Mock System Time Offset initialized to: -4.802583 sec
Listening for requests...
Weave Node ready to service events; PID: 41116; PPID: 40703

3. Iniciar el Administrador de dispositivos

Abre una ventana nueva de terminal y accede a node02

happy-shell node02

En node02, inicia el Administrador de dispositivos:

./weave-device-mgr
WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
WEAVE:IN: IPV6_PKTINFO: 92
WEAVE:ML: Listening on general purpose IPv4 UDP endpoint
WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [::]:11095 ()
WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
WEAVE:ML: Adding wpan0 to interface table
WEAVE:ML: Binding IPv6 UDP interface endpoint to [fd00:0:fab1:6:1ab4:3000:0:5]:11095 (wpan0)
WEAVE:ML: Listening on IPv6 UDP interface endpoint
Weave Device Manager Shell

weave-device-mgr >

4. Conéctate al dispositivo de prueba

En el Administrador de dispositivos (node02), establece una sesión PASE segura con el dispositivo simulado. Usa el dispositivo simulado de la dirección IPv6 de Weave y el ID de nodo del resultado de los comandos happy-state y weave-state, junto con su código de vinculación:

connect fd00:0:fab1:6:1ab4:3000:0:4 18B4300000000004 --pairing-code AB713H
WEAVE:DM: Initiating connection to device
WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
WEAVE:IN: IPV6_PKTINFO: 92
WEAVE:ML: Listening on general purpose IPv4 UDP endpoint
WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [::]:11095 ()
WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
WEAVE:ML: Adding wpan0 to interface table
WEAVE:ML: Binding IPv6 UDP interface endpoint to [fd00:0:fab1:6:1ab4:3000:0:5]:11095 (wpan0)
WEAVE:ML: Listening on IPv6 UDP interface endpoint
WEAVE:EM: ec id: 1, AppState: 0x8d3777e0
WEAVE:DM: Sending IdentifyRequest to locate device
WEAVE:EM: Msg sent 0000000E:1 16 18B4300000000004 0000 986B 0 MsgId:23C64568
WEAVE:EM: Msg rcvd 0000000E:2 104 18B4300000000004 0000 986B 0 MsgId:8F1FC90B
WEAVE:DM: Received identify response from device 18B4300000000004 ([fd00:0:fab1:6:1ab4:3000:0:4]:11095%wpan0)
WEAVE:DM: Initiating weave connection to device 18B4300000000004 (fd00:0:fab1:6:1ab4:3000:0:4)
WEAVE:ML: Con start AFC0 18B4300000000004 0001
WEAVE:ML: TCP con start AFC0 fd00:0:fab1:6:1ab4:3000:0:4 11095
WEAVE:ML: TCP con complete AFC0 0
WEAVE:ML: Con complete AFC0
WEAVE:DM: Connected to device
WEAVE:DM: Initiating PASE session
WEAVE:EM: ec id: 1, AppState: 0x21da95c0
WEAVE:EM: Msg sent 00000004:1 296 18B4300000000004 AFC0 986C 0 MsgId:00000002
WEAVE:SM: StartSessionTimer
WEAVE:EM: Msg rcvd 00000004:2 284 18B4300000000004 AFC0 986C 0 MsgId:00000000
WEAVE:EM: Msg rcvd 00000004:3 144 18B4300000000004 AFC0 986C 0 MsgId:00000001
WEAVE:EM: Msg sent 00000004:4 176 18B4300000000004 AFC0 986C 0 MsgId:00000003
WEAVE:EM: Msg rcvd 00000004:5 32 18B4300000000004 AFC0 986C 0 MsgId:00000002
WEAVE:SM: CancelSessionTimer
WEAVE:DM: Secure session established
Connected to device.
weave-device-mgr (18B4300000000004 @ fd00:0:fab1:6:1ab4:3000:0:4) >

El resultado del dispositivo simulado (node01) confirma una conexión exitosa:

WEAVE:EM: Msg rcvd 0000000E:1 16 0000000000000001 0000 986B 0 MsgId:23C64568
WEAVE:EM: ec id: 1, AppState: 0x3aadf480
IdentifyRequest received from node 1 (fd00:0:fab1:6:1ab4:3000:0:5)
  Target Fabric Id: FFFFFFFFFFFFFFFF
  Target Modes: 00000000
  Target Vendor Id: FFFF
  Target Product Id: FFFF
Sending IdentifyResponse
WEAVE:EM: Msg sent 0000000E:2 104 0000000000000001 0000 986B 0 MsgId:8F1FC90B
WEAVE:ML: Con rcvd 3960 fd00:0:fab1:6:1ab4:3000:0:5 38798
Connection received from node 18B4300000000005 (fd00:0:fab1:6:1ab4:3000:0:5)
WEAVE:EM: Msg rcvd 00000004:1 296 0000000000000001 3960 986C 0 MsgId:00000002
WEAVE:EM: ec id: 1, AppState: 0x3aaf1f60
WEAVE:SM: StartSessionTimer
WEAVE:EM: Msg sent 00000004:2 284 0000000000000001 3960 986C 0 MsgId:00000000
WEAVE:EM: Msg sent 00000004:3 144 0000000000000001 3960 986C 0 MsgId:00000001
WEAVE:EM: Msg rcvd 00000004:4 176 0000000000000001 3960 986C 0 MsgId:00000003
WEAVE:EM: Msg sent 00000004:5 32 0000000000000001 3960 986C 0 MsgId:00000002
WEAVE:ML: Message Encryption Key: Id=2C51 Type=SessionKey Peer=0000000000000001 EncType=01 Key=BB00C9BE96F188D7672255A2DC6AC14F,B0615B2BD5F97FC1B7AEC8C6FD59207D3B7CBFE6
WEAVE:SM: CancelSessionTimer
Secure session established with node 1 (fd00:0:fab1:6:1ab4:3000:0:5)
WEAVE:SM: Release session key: Id=2C51 Peer=0000000000000001 Reserve=0

5. Prueba la conexión

Envía una solicitud de Weave Echo desde el administrador de dispositivos (node02) al dispositivo simulado para probar la conexión:

ping
WEAVE:DM: DataLength: 0, payload: 0, next: (nil)
WEAVE:EM: ec id: 1, AppState: 0x8d3777e0
WEAVE:EM: Msg sent 00000001:1 0 18B4300000000004 AFC0 986F 0 MsgId:00000000
WEAVE:EM: Msg rcvd 00000001:2 0 18B4300000000004 AFC0 986F 0 MsgId:00000000
Ping complete

El resultado en el dispositivo simulado (node01) confirma el eco correcto:

WEAVE:EM: Msg rcvd 00000001:1 0 0000000000000001 3960 986F 0 MsgId:00000000
WEAVE:EM: ec id: 1, AppState: 0x3aadfbb0
WEAVE:SM: Reserve session key: Id=2CFF Peer=0000000000000001 Reserve=1
Echo Request from node 1 (fd00:0:fab1:6:1ab4:3000:0:5): len=0 ... sending response.
WEAVE:EM: Msg sent 00000001:2 0 0000000000000001 3960 986F 0 MsgId:00000000
WEAVE:SM: Release session key: Id=2CFF Peer=0000000000000001 Reserve=0

6. Desconectar del dispositivo simulado

Usa el Administrador de dispositivos para desconectarte del dispositivo simulado:

close
WEAVE:DM: Closing connection to device
WEAVE:ML: Con closed 8FC0 4002
WEAVE:ML: Removing session key: Id=2873 Peer=18B4300000000004
WEAVE:ML: Closing endpoints
weave-device-mgr >