Detección de Jam

Ver código fuente en GitHub

Para proporcionar un mecanismo configurable para la detección de interferencias de señal en cualquier node de OpenThread, habilita la función de detección de interferencias.

Esta función es útil para las certificaciones de dispositivos que requieren la capacidad de detectar interferencias de señal en un canal específico. Se puede configurar para cumplir con los requisitos de cada tipo de certificación.

Cómo funciona

La detección de interferencias supervisa el RSSI (indicador de intensidad de señal recibida) de un nodo durante períodos especificados para determinar si el canal se vio afectado por interferencias.

Cuando la detección de interferencias está habilitada, sucede lo siguiente:

  1. El estado de detección de interferencias se establece en false.
  2. El nodo toma muestras del RSSI varias veces en cada intervalo de un segundo.
  3. Si el RSSI durante todo ese intervalo de un segundo permanece por encima del umbral de RSSI configurado para cada muestra, ese intervalo de un segundo se considera bloqueado.
  4. Si una cantidad total de intervalos de un segundo con interferencia es mayor o igual a la cantidad total de segundos de período ocupado configurados dentro de los segundos de ventana de detección configurados anteriormente en cualquier momento, el estado de detección de interferencias en ese momento se establece en true.
  5. Si una cantidad total de intervalos de un segundo con interferencia es menor que la cantidad total de segundos de período ocupado configurados dentro de los segundos de ventana de detección configurados anteriores en cualquier momento, el estado de detección de interferencias en ese momento se establece en false.

Mapa de bits del historial

En la API de OpenThread y las propiedades wpantund, hay un bitmap de los 63 segundos anteriores disponible para su recuperación. Este mapa de bits indica si el RSSI superó el umbral de RSSI configurado en cada uno de los 63 segundos anteriores.

Por ejemplo, puedes recuperar el siguiente mapa de bits:

0xC248068C416E7FF0

La conversión a formato binario produce cada instancia en la que el RSSI superó el umbral de RSSI configurado durante los 63 segundos anteriores:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

Si el período de detección se establece en 16 segundos y el período ocupado en 8 segundos, el estado de detección de interferencia se convierte en true a los 51 segundos, ya que esa es la primera instancia en la que se superó el umbral de RSSI durante al menos 8 segundos completos en los 16 segundos anteriores. En este ejemplo, el estado de detección de interrupciones permanece como true durante los siguientes 13 segundos.

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000
                                      [00001 01101110 011] = 8 in 16

Este mapa de bits se puede representar con el siguiente gráfico, si -45 dBm fuera el umbral de RSSI configurado:

Detección de interferencias de OT

Cómo habilitar

Esta función está inhabilitada de forma predeterminada.

Por definición

Para habilitar la detección de interferencias, define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE como 1 en el archivo openthread/src/core/config/openthread-core-default-config.h, antes de compilar OpenThread:

#ifndef OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
#define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 1
#endif

Por opción

Como alternativa, usa la opción de compilación -DOT_JAM_DETECTION=ON cuando compiles OpenThread:

./script/build -DOT_JAM_DETECTION=ON

Parámetros

Los parámetros de detección de interferencias solo se pueden configurar a través de la API de OpenThread, el protocolo Spinel o wpanctl, la herramienta de línea de comandos de wpantund para la administración del coprocesador de red (NCP). Los valores predeterminados se aplican si la función se habilita sin una configuración posterior.

Para personalizar esta función, usa los siguientes parámetros:

Parámetros
Umbral de RSSI
Valor predeterminado
0 dBm
Descripción
Especifica el nivel de RSSI de umbral en dBm por encima del cual se considera que el canal está bloqueado.
Ventana de detección
Valor predeterminado
63 segundos
Descripción
Especifica la ventana en segundos en la que se debe verificar si hay interferencias de señal. Rango: De 1 a 63.
Período ocupado
Valor predeterminado
63 segundos
Descripción
Especifica la cantidad de segundos agregados dentro del período de detección en el que el RSSI debe estar por encima del umbral de RSSI para activar la detección de interferencias. Debe ser menor que la ventana de detección. Rango: De 1 a 63.

API

OpenThread

Usa la API de Jam Detection para gestionar la función de detección de interferencias directamente en tu aplicación de OpenThread. La API de OpenThread proporciona las siguientes funciones:

  • Cómo iniciar y detener la función
  • Cómo ver el estado de detección de interrupciones
  • Administrar todos los parámetros
  • Recupera el mapa de bits del historial de detección de embotellamientos actual
  • Registra una función de devolución de llamada para cuando se detecte un atasco

Spinel

El protocolo Spinel permite que un dispositivo host se comunique directamente con un NCP. Este protocolo expone propiedades de detección de interrupciones en openthread/src/lib/spinel/spinel.h que proporcionan la siguiente funcionalidad:

  • Cómo iniciar y detener la función
  • Cómo ver el estado de detección de interrupciones
  • Administrar todos los parámetros
  • Recupera el mapa de bits del historial de detección de embotellamientos actual

CLI

OpenThread

No hay comandos de CLI de OpenThread relacionados con esta función.

wpantund

Usa la CLI de wpanctl para administrar la función de detección de interferencias en una configuración de NCP de OpenThread. wpantund conserva toda la configuración de detección de interferencias cuando se restablece el NCP.

wpanctl proporciona acceso a las siguientes propiedades wpantund:

Propiedades
JamDetection:Status
Formato
booleano
Descripción
Solo lectura. Estado de detección de interferencia. Indica si se detectó una interferencia de señal en este momento.
JamDetection:Enable
Formato
booleano
Descripción
Habilita o inhabilita la función de detección de interferencias.
JamDetection:RssiThreshold
Formato
dBm
Descripción
Especifica el nivel de RSSI de umbral en dBm por encima del cual se considera que el canal está bloqueado.
JamDetection:Window
Formato
segundos
Descripción
Especifica la ventana en segundos en la que se debe verificar si hay interferencias de señal. Rango: De 1 a 63.
JamDetection:BusyPeriod
Formato
segundos
Descripción
Especifica la cantidad de segundos agregados dentro de JamDetection:Window en los que el RSSI debe ser superior a JamDetection:RssiThreshold para activar la detección de interferencias. Debe ser inferior a JamDetection:Window. Rango: De 1 a 63.
JamDetection:Debug:HistoryBitmap
Formato
Valor de 64 bits
Descripción
Proporciona información sobre el historial del estado de detección de embotellamiento para la supervisión y depuración.

Por ejemplo, para obtener el estado de detección de embotellamiento de un NCP, haz lo siguiente:

sudo wpanctl getprop JamDetection:Status
JamDetection:Status = false

Para establecer el umbral de RSSI de detección de interferencias en -45 dBm en un NCP, haz lo siguiente:

sudo wpanctl setprop JamDetection:RssiThreshold -45
sudo wpanctl getprop JamDetection:RssiThreshold
JamDetection:RssiThreshold = -45

Para obtener más información sobre las propiedades wpantund, consulta el repositorio de GitHub de wpantund.