Configuración de openthread con la clave SLZB-MR01

Hola,

Estoy tratando de activar Matter con la clave SLZB-MR01, pero hay algunas cosas que no entiendo.

Para empezar, aquí está el procedimiento que he seguido:

El hilo del router de borde no es recomendado con el POE:

Por lo tanto, no quiero usar el router de borde de Thread con la clave SLZB-MR01 ni depender de una Apple TV u otro elemento que no domino.
Para ello, quiero usar openthread.
El SLZB-MR01 se utilizará únicamente para la radio Thread.

Para la instalación de openthread en una VM que tiene su red configurada en IPv4 e IPv6:

Instalación de open thread con docker siguiendo este tutorial:

Para la parte de activar el transferencia IP:
Les recomiendo descargar el archivo y cambiar el nombre de la interfaz (por defecto wlan0) por la interfaz que se utiliza, en mi caso ens18 y ejecutar el comando « bash setup-host »

La imagen openthread no funciona con TCP, pero se ha realizado un fork para ser compatible con el protocolo TCP, ya que se une el SLZB-MR01 a través de la red:

Aquí está el archivo docker-compose.yml que he creado:

services:
  otbr:
    image: bnutzer/otbr-tcp
    network_mode: host
    restart: unless-stopped
    privileged: true
    cap_drop:
      - NET_ADMIN   # Debería evitar actualizaciones de iptables/ipset
      - NET_RAW     # Sin acceso a la red en bruto
    devices:
      - /dev/net/tun
    environment:
      - RCP_HOST=IP_DU_SLZB-MR01
      - OTBR_THREAD_IF=wpan0
      - OTBR_BACKBONE_IF=ens18
      - OTBR_WEB_ENABLE=1
      - OTBR_REST_LISTEN_ADDRESS=127.0.0.1
    volumes:
      - ./otbr-data:/var/lib/thread

Luego pude conectarme a la interfaz web de openthread en el puerto 8080.
Y ahí es donde ya no entiendo :sweat_smile:
Cuando voy a Join, tengo varios redes Thread disponibles:

No sé a qué corresponden estas tres redes, desafortunadamente.
No he podido hacer la conexión con la clave SLZB-MR01 porque no encuentro la dirección de hardware en la interfaz web de la clave y nada coincide en la etiqueta de la clave.

¿Podrían ayudarme a aclarar esto, por favor? :slight_smile:

Hola @prohand,

¡Excelente tu investigación :slight_smile:

No soy experto en el tema, nunca he probado OpenThread, así que estás más avanzado que yo en este tema.

En mi opinión, los 3 redes Thread que ves en la interfaz « Unirse » son probablemente redes Thread existentes detectadas en tu entorno (vecinos, otros dispositivos Thread, etc.).

No necesitas « unirte » a una red existente, quieres crear tu propia red Thread. Ve mejor a la pestaña « Formar » para crear una nueva red Thread.

¿Ves algo en los registros?

No veo mucho en los logs :frowning:
En realidad no quiero que la clave SLZB-MR01 ya tenga una red creada, pero quizá no sea importante ^^
Voy a intentar volver a mirar el tema a principios de la semana que viene
Mientras tanto, si hay alguien que conozca un poco el tema, agradecería un poco de ayuda :slight_smile:
Gracias de antemano

He intentado hacer funcionar openthread con la clave sin éxito hasta ahora.

Tengo la impresión de que openthread no se comunica correctamente con la clave o entonces hay algo que no entiendo :sweat_smile:

He creado una issue en docker-otbr-tcp: RCP:TxPower 0 dBm · Issue #9 · bnutzer/docker-otbr-tcp · GitHub

Para la parte de docker en openthread, tuve que ejecutar los siguientes comandos en el contenedor para resolver los problemas con ipset:

ipset create otbr-ingress-deny-src-swap hash:net family inet6
ipset create otbr-ingress-allow-dst-swap hash:net family inet6
ipset create otbr-ingress-deny-src hash:net family inet6
ipset create otbr-ingress-allow-dst hash:net family inet6

Después de intercambiar con ChatGPT :blush:, resulta que hay que usar chip-tool para facilitar el emparejamiento:

En la máquina anfitriona, hice un snap install chip-tool y luego ejecuté el siguiente comando:

chip-tool pairing code 1 "código_en_dispositivo_a_agregar" --trace_decode 1

Probaré el emparejamiento esta noche, ya que estoy a distancia por el momento.

Vaya, parece más complicado de lo que pensaba :sweat_smile:

No he logrado emparejar mi hardware Thread en OpenThread.
Lo intenté con chip-tool, pero creo que me faltan información/comprensión.
También lo intenté con matter-server de HAOS, pero tampoco logré el emparejamiento.

Logré algo instalando HAOS y todo el paquete matter y openthread directamente en HAOS, escaneando el código QR a través de la aplicación de Home Assistant.

No logro reproducir el funcionamiento de la aplicación Home Assistant, ya sea con chip-tool o directamente con mi teléfono.

Si alguien pasa por aquí y puede ayudar, será con mucho gusto :slight_smile:

Mientras tanto, voy a ver si lo integro directamente a través de la red Thread de Apple Home y lo subo a Gladys, sabiendo que mi red Apple no está en el mismo VLAN que Gladys :slight_smile:

Edición: Creo que he entendido algo :sweat_smile:
Lo probaré esta noche y les cuento :blush:

En realidad, la aparición en la red Thread debe hacerse con un dispositivo que tenga Bluetooth con una aplicación que permita unirse a la red Thread y que permita ingresar el dataset y el payload

En IOS no existe una aplicación que permita hacer esto excepto con la integración de Home Assistant, pero no es posible usarla en nuestro caso porque está dedicada a Home Assistant.

Por lo tanto, se debe tener un dongle o una tarjeta Bluetooth para conectar a la máquina donde se ejecuta chip-tools

En mi caso, se trata de una máquina virtual bajo proxmox, por lo que hice que la tarjeta Bluetooth se remontara directamente a la VM.

Por lo tanto, hice lo siguiente:

snap install chip-tools
apt install bluez

Luego, recuperar con el siguiente comando el dataset en su docker openthread:

sudo docker exec -it openthread-otbr-1 sh -c "sudo ot-ctl dataset active -x"

Luego, recuperar el payload escaneando con una aplicación de código QR la etiqueta de su dispositivo final.
En mi caso, estaba en la forma: MT:XXXXXXXXXXX-XXXXXXX

En la máquina donde instaló chip-tools, ejecutar el siguiente comando:

chip-tool pairing code-thread  <node-id> <operationalDataset> <payload>

Lo que da:

chip-tool pairing code-thread 1 <Payload> <MT:XXXXXXXXXXX-XXXXXXX>

Verá que la aparición comienza.
Desafortunadamente, aún tengo un problema con el siguiente mensaje:

[1768945401.918] [26575:26599] [-] Unable to find PAA, err: src/credentials/attestation_verifier/DeviceAttestationVerifier.h:252: CHIP Error 0x0000004A: CA certificate not found, PAI's AKID: 40:97:46:A4:3D:7E:F1:51:B6:CD:D8:A0:9E:A4:76:FA:9B:DF:75:63
[1768945401.918] [26575:26599] [CTL] Error on commissioning step 'AttestationVerification': 'src/controller/CHIPDeviceController.cpp:1338: CHIP Error 0x00000020: Failed Device Attestation'
[1768945401.918] [26575:26599] [CTL] Failed verifying attestation information. Now checking DAC chain revoked status.

Actualmente estoy buscando cómo resolver este problema :wink:
Les mantendré informados, espero que sea pronto :grinning_face:

Puedo avanzar al siguiente paso con el comando:

chip-tool pairing code-thread <Payload> <MT:XXXXXXXXXXX-XXXXXXX> --bypass-attestation-verifier true --only-allow-trusted-cd-keys false

Pero tengo los siguientes errores:

[1768947207.598] [30741:30765] [CTL] Error en el paso de comisión 'ThreadNetworkSetup': 'src/controller/CHIPDeviceController.cpp:2995: CHIP Error 0x000000AC: Error interno'
[1768947207.719] [30741:30741] [TOO] Error al ejecutar el comando: src/controller/CHIPDeviceController.cpp:2995: CHIP Error 0x000000AC: Error interno

Solución encontrada:

Era necesario añadir hex: antes del payload:

chip-tool pairing code-thread hex:<Payload> <MT:XXXXXXXXXXX-XXXXXXX> --bypass-attestation-verifier true --only-allow-trusted-cd-keys false

Ahora tengo mi dispositivo en mi OTBR :grinning_face:

Solo queda ver cómo añadirlo a Gladys :smiling_face_with_three_hearts:

¡Muchas gracias por toda tu investigación @prohand, si alguna vez desarrollamos la integración del router de borde OpenThread en Gladys en algún momento ¡nos ayudará mucho!

Lamentablemente, no he encontrado cómo integrar el dispositivo cuando está integrado en OTBR.

Creo que se necesita otro componente (matter-server) si queremos simular completamente un HomePod mini o un Apple TV 4K, por ejemplo.
Esto integra toda la parte de integración que hice antes con chip-tool y un servidor matter que debería poder permitirme la integración con Gladys Assistant.

He optado por tomar matterjs-server que sucederá a python-matter-server (aún está en alpha/beta), pero es la solución que se utilizará a largo plazo en Home Assistant:

Solo hay un error con el Bluetooth que he reportado y que debería resolverse en la semana:

Cualquier proyecto puede usarlo, pero hay que pasar una certificación matter si se implementa finalmente en Gladys Assistant:

Les mantendré informados cuando haya podido probarlo una vez que se resuelva el error por su parte, espero que sea esta semana :slight_smile:

Si creen que me estoy equivocando, no duden en decírmelo :slight_smile:

Edición:

Tomé la solución Docker para mí, pero habrá que ver si funciona cómo se implementa en Gladys, ya que no es oficialmente soportado:

https://github.com/matter-js/matterjs-server/blob/main/docs/docker.md

Quizás así directamente en el Docker de Gladys:

¡Hola @prohand!

Matter-js-server está basado en Matter.js, ¡ya es el bloque que usamos en Gladys! :slight_smile:

Por lo tanto, ¡todo lo que hace matter-js-server, Gladys puede hacerlo! :smiley:

¿Puedes describirme cómo planeas usar matter-js-server?

Voy a usar el modo de comisión con bluetooth a través de esta opción en la interfaz de matterjs-server:

image

No sé si necesitas más información

Vale, es posible en Matter.js, pero por ahora no he desarrollado esa parte :slight_smile:

¿Sería para conectar qué dispositivo en concreto?

¿Vas a usar OTBR de todos modos? Me cuesta entender cómo se realiza la conexión con un servidor Thread externo.

¡Si puedes describirme el proceso completo!

En resumen, cuando inicias el proceso de comisionado desde el botón que te mostré (Commission new Thread device), pedirá el código inscrito en el end device y pedirá el payload de la red Thread.

El payload de la red Thread se encuentra con este comando en el OTBR:

sudo docker exec -it openthread-otbr-1 sh -c "sudo ot-ctl dataset active -x"

Luego, realizará una conexión en el dispositivo Thread mediante Bluetooth y establecerá la conexión con el OTBR

No sé si es más claro.

Pero creo que lo mejor es cuando corrijan el error, te muestro el proceso completo con capturas de pantalla :slight_smile:

¡Vale, me apunto al proceso completo sí!

He comprado los famosos sensores Ikea Matter, así que hoy he intentado configurar Open Thread Border Router con la red Thread de mi llave SLZB-MR01.

Por ahora, Open Thread Border Router está activo y conectado a mi llave SLZB-MR01.

He realizado pruebas con python-matter-server y un poco con matterjs
Francamente, no es sencillo…

Creo que en el futuro habrá que tener un OTBR en Gladys con una herramienta para hacer el comisionado

Tan pronto como avance un poco y llegue a un resultado concluyente, compartiré lo que he hecho.

Gracias por tu respuesta y confirmo que efectivamente no es fácil :smiling_face_with_tear:
Por ahora no he avanzado mucho por razones personales, pero en una semana podré dar noticias de mi parte :wink:

En todo caso, lo dejo por hoy porque después de varias horas y ningún dispositivo añadido… :sleepy_face: ¡viva Matter!
por ahora no estoy nada convencido con esta tecnología!!!

Con un Apple TV o un HomePod es bastante sencillo, ya que todo está integrado.

Aquí la dificultad es querer integrar y gestionar todo por uno mismo sin pasar por un equipo propietario.

Pero lo lograremos, no perdamos la esperanza :sweat_smile: