Ir al contenido

CNX Software analiza los primeros pasos con el kit de router de borde Thread GL-S200

La semana pasada probamos el hardware del kit de router de borde Thread GL.iNet GL-S200 con tres placas de desarrollo Thread nRF52840, y ahora he tenido tiempo de trabajar con el kit, así que contaré mi experiencia inicial en la segunda parte de la reseña.

Configuración inicial de GL-S200

Conecté el puerto WAN a mi conmutador Ethernet, que a su vez estaba conectado al módem router, y el puerto LAN a mi ordenador portátil, para poder acceder a la interfaz web mediante la dirección IP predeterminada (192.168.8.1). El GL-S200 utiliza el mismo panel de administración que otros routers GL.iNet, como el router Beryl AX que analizamos a principios de año.

Panel de control de GL-200

Un asistente te permitirá seleccionar el idioma y establecer una nueva contraseña para el panel de administración; al terminar, tendrás acceso al conocido panel de administración GL.iNet 4.x.x.

GL-S200  Panel de administración

Tras completar el asistente, el sistema debería conectarse automáticamente a Internet y el LED RGB central del dispositivo se pondrá verde.

Red Thread

El primer paso es ir a MALLA THREAD en el panel izquierdo para activar la red Thread.

Configurar la red Thread de GL-S200
Dirección IPv6 habilitada para la red Thread

Al hacer clic en Activar, obtendrá tres direcciones IPv6:

  • Dirección de enlace local – Todas las interfaces accesibles mediante una única transmisión de radio

  • Dirección local – Todas las interfaces accesibles desde fuera de una red Thread (Parece que se denomina Dirección global en Documentación de OpenThread)

    Actualización de GL-iNet: OT/OTBR aún no admite el acceso a Internet IPv6 global.

    Puedes consultar la respuesta oficial de Openthread: https://github.com/openthread/openthread/discussions/8794

    La dirección local es una dirección OMR(enrutable fuera de la malla), con la que puedes acceder a dispositivos Thread desde el lado wifi/ethernet.

  • Mesh-Local EID – Todas las interfaces accesibles dentro de la misma red Thread

Si dispone de tus propios dispositivos Thread, puedes acceder al menú de puesta en servicio de Thread e introducir el EUI64 de tus dispositivos y la clave precompartida, pero GL.iNet ha creado una sección más sencilla en la interfaz web para gestionar sus placas de desarrollo Thread, o TBD para abreviar.

Añadir dispositivos a GL Dev Board

En el PLACA DE DESARROLLO GL->Dispositivos sección, podemos hacer clic en el Añadir dispositivos botón y, a continuación, Aplicar. Si pulsamos el interruptor SW2 de una placa, esta se añadirá automáticamente al router de borde Thread GL-S200.

Thread Dev Board de tipo A0 A1

Debemos seleccionar el tipo A0+A1 y asignar un nombre a la placa. Podemos repetir lo mismo con las otras dos placas; así aparecerán en el panel de administración los valores de temperatura, presión, humedad e iluminancia de las tres placas.

Panel de administración GL S200 Sensores de dispositivos GL DEV BOARD

Actualización del firmware GL-S200

En ese momento recordé que había olvidado algo… GL.iNet me informó de que tenían un nuevo firmware para GL-S200 que debía instalar manualmente. Así que vamos a hacerlo ahora, entrando en «SISTEMA->Actualizar».

Actualización del firmware de GL-S200

El panel de administración indica que el firmware 4.1.3, versión 5, está actualizado porque el nuevo firmware no se envió al servidor OTA. Pero me proporcionaron un enlace de descarga con un firmware más reciente que se compiló el 6 de marzo de 2023.

Descarga del firmware GL-S200

Descargué el archivo, fui a la sección de actualización local y cargué el archivo en el router de borde Thread GL-S200.

Actualización local del firmware del router de borde Thread GL-S200

La verificación se completó correctamente, así que hice clic en Instalar, y finalmente conseguí la versión de firmware 4.1.37 instalado en mi dispositivo.

Panel de administración GL-S200, firmware 4.1.3 Release7

Actualización del firmware de las placas de desarrollo Thread

Mientras realizaba esa actualización de firmware, también observé que las placas de desarrollo Thread podían actualizar su firmware de la versión 1.1.5 a la 1.1.9, así que lo hice y funcionó a la perfección.

Actualización del firmware de Thread Dev Board 1.1.9

Topología Thread

Thread utiliza redes de malla, de modo que, cuando los nodos están cerca del router, se conectan directamente a él y, cuando están fuera de su alcance o la señal es débil, pueden actuar como routers. Con todos los dispositivos sobre mi escritorio…

Primeros pasos con el router de borde Thread GL-S200

… la red tenía una topología en estrella, como se esperaba.

Topología Thread en estrella de GL-S200

Así que intenté separar las placas y colocarlas en línea recta, incluso situando una en el exterior.

Placas de desarrollo Thread para interiores y exteriores

Podemos identificar fácilmente el que está al aire libre por su mayor temperatura e iluminancia.

Intensidad de la señal Thread

Si hacemos clic en “Sí mismo” en el diagrama de topología, también podemos ver la intensidad de la señal del nodo conectado al router de borde Thread. Sin embargo, en ningún momento pude utilizar Thread Dev Board como router. Incluso salimos a caminar para intentar quedar fuera de alcance o, al menos, obtener una señal más débil, pero la red de malla simplemente no funcionaba como esperaba. Así que pregunté a los ingenieros de GL.iNet y me respondieron que se necesitaba un firmware de router Thread para que funcionara:

Actualmente, nuestro firmware TBD predeterminado es de dispositivo final Thread y no se pueden conectar directamente entre sí. Le proporcionaremos el router thread firmware y la correspondiente guía de instalación TBD más tarde hoy.

Me enviaron el firmware del router, así como el mcumgr utilidad para Linux y Windows.

Utilidad mcumgr de nRF52 para linux y windows

Conecté una de las placas Thread Dev Board a un PC Linux (Ubuntu 22.04):

print(“Hello World”)se mostrará comoprint(“Hello World”)`.

$ bt -l
 port |  age (sec) | device     | driver           | description
------+------------+------------+------------------+----------------------
 *  0 |       1137 | ttyUSB0    | ch341-uart       | USB Serial

El puerto serie se detecta, así que puedo ejecutar el comando para comprobar el estado actual del firmware:

$ sudo ./mcumgr --conntype serial --connstring=/dev/ttyUSB0,baud=460800 image list
Error: NMP timeout
jaufranc@cnx-laptop-4:~/edev/GL-S200/TBD upgrade$ sudo ./mcumgr --conntype serial --connstring=/dev/ttyUSB0,baud=460800 image list
Images:
 image=0 slot=0
    version: 1.1.9
    bootable: true
    flags: active confirmed
    hash: 88b4725af7975e0b60915c320a82082bb2dda923b736f0e31d2c7d4d67cac3d3
 image=0 slot=1
    version: 1.1.5
    bootable: true
    flags:
    hash: 4d8548e6910e7214d8325a7d1a49a8390fb25cce983bdb0b15bfecc657f7860b
Split status: N/A (0)

Falló la primera vez con el error «NMP timeout», pero funcionó la segunda. Podemos ver que el firmware 1.1.9 que actualicé en el panel de administración está en la ranura 0, y el firmware anterior 1.1.5 está en la ranura 1. Ahora puedo intentar instalar el firmware del router:

$ sudo ./mcumgr --conntype serial --connstring=/dev/ttyUSB0,baud=460800 image upload GL-Thread-Dev-Board-FTD-OTA-v1.1.9.bin
 426.58 KiB / 426.58 KiB [========================] 100.00% 8.93 KiB/s 47s
Done

Veámoslo de nuevo:

$ sudo ./mcumgr --conntype serial --connstring=/dev/ttyUSB0,baud=460800 image list
Images:
 image=0 slot=0
    version: 1.1.9
    bootable: true
    flags: active confirmed
    hash: 88b4725af7975e0b60915c320a82082bb2dda923b736f0e31d2c7d4d67cac3d3
 image=0 slot=1
    version: 1.1.9
    bootable: true
    flags:
    hash: 7dbb8a9867a000bb968099593bc1f6c2c7bb28ab458719f499364c4a77feca9f
Split status: N/A (0)
Done

El firmware de la ranura 0 es el que se está ejecutando actualmente, mientras que el firmware de la ranura 1 es la versión de router que acabamos de instalar. Podemos cambiar al nuevo firmware de la siguiente manera:

sudo ./mcumgr --conntype serial --connstring=/dev/ttyUSB0,baud=460800 image test 7dbb8a9867a000bb968

Después podemos reiniciar la placa y comprobar que el nuevo firmware cuyo hash comienza por 7dbb está en la ranura 0:

$ sudo ./mcumgr --conntype serial --connstring=/dev/ttyUSB0,baud=460800 image list
Images:
 image=0 slot=0
    version: 1.1.9
    bootable: true
    flags: active confirmed
    hash: 7dbb8a9867a000bb968099593bc1f6c2c7bb28ab458719f499364c4a77feca9f
 image=0 slot=1
    version: 1.1.9
    bootable: true
    flags:
    hash: 88b4725af7975e0b60915c320a82082bb2dda923b736f0e31d2c7d4d67cac3d3
Split status: N/A (0)

Tras añadir de nuevo la placa al panel de administración, podemos ver el líder Thread (GL-S200), dos dispositivos finales y un router (la placa en la que acabamos de instalar el firmware de router).

Topología Thread: líder Thread, router y dispositivo final

Ninguno de los dispositivos finales está conectado al router Board 1 porque todos están en mi escritorio y conectados al GL-S200. Así que traslado Board 1 junto con uno de los dispositivos finales a otra habitación, a 12 metros del router de borde Thread GL-S200. Pero la topología no cambió. Parece que la conexión es «persistente» y que un nodo Thread solo se vuelve a conectar a otro router si queda fuera de su alcance, y no únicamente en función de la intensidad de la señal.

Pero, al apagar y reiniciar el GL-S200, los dos dispositivos finales se habían vuelto a conectar al router de la placa 1, que ahora era el “Líder Thread” de la red.

Placa de desarrollo Thread con firmware de router, líder Thread

Así que sí funciona. No esperaba que funcionara exactamente así porque la placa 2 está a 10 centímetros del router de borde Thread GL-S200 (el propio dispositivo) y la placa 1 está a 12 metros, pero la placa 2 no volvió a conectarse al GL-S200, ni siquiera después de un tiempo. En otras palabras, mientras la conexión siga activa, un nodo Thread no volverá a conectarse a otro router aunque esté más cerca y tenga una señal más fuerte, y supongo que eso tiene sentido para ahorrar batería.

Red de malla con el router de borde Thread GL-S200

Así que llevé la placa 2 (dispositivo final) y la placa 1 (router) a dar un pequeño paseo fuera del alcance del GL-S200. Después, encendí la placa 1 y luego la placa 2 para asegurarme de que se asociaran, y volví caminando a casa. Y funcionó: como muestra el diagrama anterior, la placa 2 se conecta al GL-S200, el «líder Thread», a través de la placa 1, que actúa como router.

Información de la placa de desarrollo Thread de GL

Acción de dispositivos GL S200

Si hacemos clic en los tres puntos de la columna Acción de un dispositivo concreto, accederemos a más opciones: Detalles del dispositivo, Ver registros, Editar dispositivo, Obtener código y Restablecer dispositivo.

Información del dispositivo

Detalles del dispositivo de nodo IoT Thread

Obtendremos el EUI-64, el nombre, la dirección IPv6, la dirección MAC extendida (64-bit en lugar de los habituales 48-bit), la versión del firmware y los datos del sensor.

Ver registros

Tras dejar las placas funcionando durante más de 24 horas, consulté el menú “Ver registros” para ver gráficos de los valores de los sensores de una placa concreta.

Gl S200 GL DEV BOARD: vista diaria de registros

En general parece correcto, pero, como puedes ver abajo a la izquierda, hay valores a las 9 pm y el gráfico empieza a las 11 pm por algún motivo. Ocurre lo mismo con todas las placas.

GL DEV BOARD Ver registros por hora

Se ve aún peor en el gráfico por horas. Parece un fallo de visualización más que una falta de puntos de datos, ya que siempre podemos obtener un punto de datos en el lado izquierdo.

Ejemplos de código

La sección “Obtener código” puede ser la parte más importante si va a supervisar y controlar tus propios dispositivos Thread con los cinco ejemplos de código proporcionados.

Ejemplo de código para dispositivos Thread

Tendremos que conectarnos al router de borde Thread GL-S200 mediante SSH para ejecutar los ejemplos. Empecemos por el código para leer los datos de los sensores.

root@GL-S200:~# /usr/bin/demo_get_sensor_data
1 dev_id=9483c44004df0679 connected=1 temperature=31.300811 humidity=43.409729 brightness=0 pressure=97.817392
2 dev_id=9483c47d79c19475 connected=1 temperature=32.742767 humidity=53.620910 brightness=0 pressure=97.814472
3 dev_id=9483c4ec736c4f68 connected=1 temperature=31.292800 humidity=42.652893 brightness=0 press

También podemos seleccionar un dispositivo concreto mediante su EUI-64:

root@GL-S200:~# /usr/bin/demo_get_sensor_data 9483c44004df0679
dev_id=9483c44004df0679 connected=1 temperature=31.300811 humidity=43.409729 brightness=0 pre

Este es el código fuente como referencia:

#!/bin/sh
# Note, this file is stored in /usr/bin/demo_get_sensor_data
# Usage: demo_get_sensor_data <dev_id>
# It will print all sensor data if <dev_id> is null, and the <dev_id> is the EUI64 of the device, which saved in /etc/config/thread_devices

. /usr/share/libubox/jshn.sh

dev_id=$1
if [ -z "$dev_id" ]; then
    res=$(curl -s localhost/rpc -d '{"jsonrpc":"2.0","id":"0","method":"call","params":["","gw","get_device_list",{}]}')

    json_init
    json_load "$res"
    json_select result
    json_select device_list
    idx=1
    while json_is_a ${idx} object; do
        json_select ${idx}
        json_get_var dev_id dev_id
        json_get_var connected connected

        json_select dev_data
        json_get_var val_temp temperature
        json_get_var val_humi humidity
        json_get_var val_brightness brightness
        json_get_var val_pressure pressure
        echo "$idx dev_id=$dev_id connected=$connected temperature=$val_temp humidity=$val_humi brightness=$val_brightness pressure=$val_pressure"

        json_select ..
        json_select ..

        idx=$((idx + 1))
    done
else
    res=$(curl -s localhost/rpc -d "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"call\",\"params\":[\"\",\"gw\",\"get_device_status\",{\"dev_id\":\"$dev_id\"}]}")

    json_init
    json_load "$res"
    json_select result
    json_get_var dev_id dev_id
    json_get_var connected connected
    json_select dev_data
    json_get_var val_temp temperature
    json_get_var val_humi humidity
    json_get_var val_brightness brightness
    json_get_var val_pressure pressure
    echo "dev_id=$dev_id connected=$connected temperature=$val_temp humidity=$val_humi brightness=$val_brightness pressure=$val_pressure"
fi

Probemos los otros ejemplos.

ls  /usr/bin/demo*
/usr/bin/demo_control_gpio         /usr/bin/demo_sensor_trigger
/usr/bin/demo_control_led          /usr/bin/demo_user_action_trigger
/usr/bin/demo_get_sensor_data

El segundo ejemplo controla los dos LED RGB de la placa seleccionada mediante su ID de dispositivo EUI-64:

root@GL-S200:~#  /usr/bin/demo_control_led 9483c44004df0679
LED OFF
LED ON
LED OFF
LED TOGGLE
Changle LED Color to Red light
Changle LED Color to Orange light
Changle LED Color to Yellow light
Changle LED Color to Green light
Changle LED Color to Blue light
Changle LED Color to Indigo light
Changle LED Color to Purple light
Changle LED Color to White light

Aquí tiene una breve demostración en vídeo para ver cómo es.

El ejemplo de control GPIO configura algunas I/O en modo de salida y después en nivel bajo y alto, de nuevo para una placa específica:

root@GL-S200:~#  /usr/bin/demo_control_gpio 9483c44004df0679
Get GPIO Status
GPIO 0.15: 0
GPIO 0.16: 0
GPIO 0.17: 0
GPIO 0.20: 0
Set GPIO 0.15/0.16/0.17/0.20 to output low level
Get GPIO Status
GPIO 0.15: 0
GPIO 0.16: 0
GPIO 0.17: 0
GPIO 0.20: 0
Set GPIO 0.15/0.16/0.17/0.20 to output high level
Get GPIO Status
GPIO 0.15: 1
GPIO 0.16: 1
GPIO 0.17: 1
GPIO 0.20: 1

Los dos últimos ejemplos para controlar los LED y los GPIO utilizan el comando coap_cli, una «pequeña implementación de CoAP», por ejemplo, para apagar los LED:

coap_cli -B 2 -N -e "$ctl_cmd_led_off" -m put coap://[$addr]/cmd 1>/dev/null 2>/

Uso de coap_cli:

root@GL-S200:~# coap_cli
coap_cli v4.2.1 -- a small CoAP implementation
Copyright (C) 2010-2019 Olaf Bergmann <bergmann@tzi.org> and others

TLS Library: None

Usage: coap_cli [-a addr] [-b [num,]size] [-e text] [-f file] [-l loss]
		[-m method] [-o file] [-p port] [-r] [-s duration] [-t type]
		[-v num] [-A type] [-B seconds] [-K interval] [-N] [-O num,text]
		[-P addr[:port]] [-T token] [-U]
		[[-k key] [-u user]]
		[[-c certfile] [-C cafile] [-R root_cafile]] URI

	URI can be an absolute URI or a URI prefixed with scheme and host

General Options
	-a addr		The local interface address to use
	-b [num,]size	Block size to be used in GET/PUT/POST requests
	       		(value must be a multiple of 16 not larger than 1024)
	       		If num is present, the request chain will start at
	       		block num
	-e text		Include text as payload (use percent-encoding for
	       		non-ASCII characters)
	-f file		File to send with PUT/POST (use '-' for STDIN)
	-l list		Fail to send some datagrams specified by a comma
	       		separated list of numbers or number ranges
	       		(for debugging only)
	-l loss%	Randomly fail to send datagrams with the specified
	       		probability - 100% all datagrams, 0% no datagrams
	-m method	Request method (get|put|post|delete|fetch|patch|ipatch),
	       		default is 'get'
	-o file		Output received data to this file (use '-' for STDOUT)
	-p port		Listen on specified port
	-r     		Use reliable protocol (TCP or TLS)
	-s duration	Subscribe to / Observe resource for given duration
	       		in seconds
	-t type		Content format for given resource for PUT/POST
	-v num 		Verbosity level (default 3, maximum is 9). Above 7,
	       		there is increased verbosity in GnuTLS logging
	-A type		Accepted media type
	-B seconds	Break operation after waiting given seconds
	       		(default is 90)
	-K interval	send a ping after interval seconds of inactivity
	-N     		Send NON-confirmable message
	-O num,text	Add option num with contents text to request. If the
	       		text begins with 0x, then the hex text is converted to
	       		binary data
	-P addr[:port]	Use proxy (automatically adds Proxy-Uri option to
	       		request)
	-T token	Include specified token
	-U     		Never include Uri-Host or Uri-Port options
PSK Options (if supported by underlying (D)TLS library)
	-k key 		Pre-shared key for the specified user
	-u user		User identity for pre-shared key mode
PKI Options (if supported by underlying (D)TLS library)
	-c certfile	PEM file containing both CERTIFICATE and PRIVATE KEY
	       		This argument requires (D)TLS with PKI to be available
	-C cafile	PEM file containing the CA Certificate that was used to
	       		sign the certfile. This will trigger the validation of
	       		the server certificate.  If certfile is self-signed (as
	       		defined by '-c certfile'), then you need to have on the
	       		command line the same filename for both the certfile and
	       		cafile (as in '-c certfile -C certfile') to trigger
	       		validation
	-R root_cafile	PEM file containing the set of trusted root CAs that
	       		are to be used to validate the server certificate.
	       		The '-C cafile' does not have to be in this list and is
	       		'trusted' for the verification.
	       		Alternatively, this can point to a directory containing
	       		a set of CA PEM files

Examples:
	coap-client -m get coap://[::1]/
	coap-client -m get coap://[::1]/.well-known/core
	coap-client -m get coap+tcp://[::1]/.well-known/core
	coap-client -m get coaps://[::1]/.well-known/core
	coap-client -m get coaps+tcp://[::1]/.well-known/core
	coap-client -m get -T cafe coap://[::1]/time
	echo -n 1000 | coap-client -m put -T cafe coap://[::1]/time -f -

La demostración de activación por acciones informa del estado del mando:

root@GL-S200:~#  /usr/bin/demo_user_action_trigger 9483c44004df0679
2023/03/19 17:38:14 info (/usr/bin/demo_user_action_trigger:34) 9483c44004df0679: Press the knob.
2023/03/19 17:38:16 info (/usr/bin/demo_user_action_trigger:34) 9483c44004df0679: Press the knob.
2023/03/19 17:38:18 info (/usr/bin/demo_user_action_trigger:32) 9483c44004df0679: Turn the knob forward
2023/03/19 17:38:19 info (/usr/bin/demo_user_action_trigger:32) 9483c44004df0679: Turn the knob forward
2023/03/19 17:38:20 info (/usr/bin/demo_user_action_trigger:32) 9483c44004df0679: Turn the knob forward
2023/03/19 17:38:20 info (/usr/bin/demo_user_action_trigger:32) 9483c44004df0679: Turn the knob reverse
2023/03/19 17:38:21 info (/usr/bin/demo_user_action_trigger:32) 9483c44004df0679: Turn the knob reverse
2023/03/19 17:38:21 info (/usr/bin/demo_user_action_trigger:32) 9483c44004df0679: Turn the knob reverse
2023/03/19 17:38:23 info (/usr/bin/demo_user_action_trigger:34) 9483c44004df0679: Press the knob.
2023/03/19 17:38:25 info (/usr/bin/demo_user_action_trigger:32) 9483c44004df0679: Turn the

El código depende del ejecutable /usr/bin/eco [Actualización: parece que es el eco-lua Lua proyecto del intérprete; consulta la sección de comentarios]:

#!/usr/bin/env eco

-- Note, this file is stored in /usr/bin/demo_user_action_trigger, It listens for events reported when the user operates the knob.
-- Usage: demo_sensor_trigger

local ubus = require 'eco.ubus'
local sys = require 'eco.sys'
local cjson = require 'cjson'
local log = require "glog"

local OPT_TURNING_THE_KNOB = 1
local OPT_PRESS_THE_KNOB = 2

log.level(log.LOG_INFO)

sys.signal(sys.SIGINT, function()
    print('
Got SIGINT, now quit')
    eco.unloop()
end)

local con, err = ubus.connect()
if not con then
    error(err)
end

con:listen('user_active_trigger', function(ev, msg)
    local event_data = cjson.encode(msg)
    log.debug('Recievd user active trigger ' .. ev .. ' ' .. event_data)

    local trigger, operation, direction = msg.trigger, msg.operation, msg.direction
    if operation == OPT_TURNING_THE_KNOB then
        log.info(trigger .. ': Turn the knob ' .. direction)
    elseif operation == OPT_PRESS_THE_KNOB then
        log.info(trigger .. ': Press the knob.')
    else
        log.err('Unknown operation!')
    end
end)

Lo mismo ocurre con el ejemplo de activación por sensor, que supervisa el sensor PIR de todas las placas de desarrollo Thread conectadas al router de borde Thread GL-S200:

root@GL-S200:~#  /usr/bin/demo_sensor_trigger
2023/03/19 17:47:46 info (/usr/bin/demo_sensor_trigger:31) 9483c44004df0679: Human body detected.
2023/03/19 17:47:46 info (/usr/bin/demo_sensor_trigger:31) 9483c4ec736c4f68: Human body detected.
2023/03/19 17:47:49 info (/usr/bin/demo_sensor_trigger:31) 9483c4ec736c4f68: Human body detected.
2023/03/19 17:47:52 info (/usr/bin/demo_sensor_trigger:31) 9483c44004df0679: Human body detected.
2023/03/19 17:48:15 info (/usr/bin/demo_sensor_trigger:31) 9483c47d79c19475: Human body detected.

Todos esos ejemplos pueden ayudarte a empezar a crear tus propios scripts.

«Automatizaciones» de GL-S200

La sección GL DEV BOARDS también incluye una sección de «Automatizaciones».

Crear automatizaciones con el router de borde Thread GL-S200

Intentaré controlar los LEDS RGB de dos Thread Dev Boards utilizando el mando de la tercera placa restante.

Acción del usuario en la automatización

Una vez que hemos dado un nombre a la automatización, podemos seleccionar la acción del usuario y después la placa que utilizaremos como mando: “Placa 2”.

Placa de activación
Activar la automatización al girar el mando

Seleccioné “Girar la perilla” y después “Acción de los dispositivos”.

Acción del dispositivo de automatización

Como quiero controlar las otras dos placas, seleccioné “Placa 1” y “Placa 2”.

Crear actuadores de automatización

La única opción es “Cambiar color”, así que seleccionémosla y hagamos clic en Aplicar.

Cambio de color mediante automatización

Pero no funciona, y los LEDs RGB permanecen apagados sin importar en qué dirección gire la perilla. Finalmente descubrí que había que encender los LEDs RGB antes de poder cambiar los colores, así que creé otra automatización para encender y apagar los LEDs al presionar la perilla.

Control de LED mediante automatizaciones de GL-S200

Y ahora funciona.

La sección de automatización también admite webhooks, así que decidí crear una automatización para recibir una alerta en Discord cuando se detecte movimiento. Para ello, creé un servidor de Discord y obtuve una URL de Webhook(https://discord.com/api/webhooks/xxxx) siguiendo las instrucciones en Discord.

Servidor de Discord de CNX Software

Después creé otra automatización seleccionando Activación por sensor…

Activación por sensor de automatizaciones de GL-S200

… «Cuerpo humano detectado» (lo que simplemente significa que se ha activado el sensor de movimiento PIR)

Automatizaciones GL-S200: presencia humana detectada

… y «Webhook».

Webhook de automatizaciones de GL-S200

Allí añadí mi URL de Webhook, seleccioné Json y añadí contenido como:

{"content":"OMG! Somebody has just entered the bedroom!"}
Webhook de Discord para GL-S200

Por último, hice clic en Aplicar y repitió el mismo procedimiento para detectar movimiento en la cocina y la oficina.

Automatizaciones de detección de movimiento con placas de desarrollo Thread GL-S200

Ahora puedo abrir Discord y caminar por la casa para activar los sensores de movimiento PIR de las tres placas.

Notificaciones en Discord del router de borde Thread GL-S200

¡Funcionó! La sección de automatización está bastante bien, pero parece que solo funciona con las placas de desarrollo Thread de GL.iNet. Por eso pregunté si se compartiría el código fuente para que los usuarios pudieran adaptar la solución a sus propios dispositivos Thread, pero no obtuve respuesta a esa pregunta concreta.

Varios

Al igual que otros dispositivos de red GL.iNet, el GL-S200 admite GoodCloud para el acceso remoto, pero su uso es limitado porque las partes Thread y Bluetooth no son compatibles.

GoodCloud GL-S200

Al principio pensé que el botón de cambio de modo podía servir para alternar entre BLE y Thread, pero, como en routers anteriores, puede configurarse para activar o desactivar WireGuard u OpenVPN.

Botón de modo del GL S200

Por falta de tiempo, no he probado la parte de Bluetooth, pero espero que la interfaz y la experiencia sean similares a las de Puente de BLE a MQTT GL-S10 que analicé el año pasado.

Ha sido una experiencia interesante y quisiera agradecer a GL.iNet el envío del kit de router de borde Thread GL-S200 para evaluación/pruebas beta. El kit que he recibido está disponible en preventa por $154.00 más gastos de envío, pero si ya tienes tus propios nodos Thread, entonces solo el GL-S200 es a la venta por $79 durante el periodo de reserva, tras lo cual costará $99.

Jean-Luc Aufranc (CNXSoft)

Jean-Luc creó CNX Software en 2010 como una actividad a tiempo parcial, antes de dejar su puesto como responsable de ingeniería de software y empezar a escribir noticias y reseñas diarias a tiempo completo en 2011.

Leer esta reseña en CNX Software

Acerca de GL.iNet

Fundada en 2010, GL.iNet es un proveedor líder de routers innovadores y soluciones de red. Desde routers de viaje compactos hasta dispositivos KVM remotos de última generación, GL.iNet ofrece tecnología de red galardonada, diseñada para brindar rendimiento y seguridad.

GL.iNet permite a personas y organizaciones conectarse con confianza. Al poner el control en manos de los usuarios, GL.iNet impulsa la productividad y la colaboración que contribuyen a una buena vida.

Artículo anterior Spitz AX en la carretera
Artículo siguiente Resuelva de una vez por todas los problemas de Internet de tu madre

Comparar productos

{"one"=>"Selecciona 2 o 3 artículos para comparar", "other"=>"{{ count }} de 3 artículos seleccionados"}

Selecciona el primer artículo para comparar

Selecciona el segundo artículo para comparar

Selecciona el tercer elemento para comparar

Comparar