---
title: BSBtManager
slug: develop/es/bsbtmanager
docTags: 
createdAt: 2025-03-11T07:07:17.199Z
---

Use el objeto *BSBtManager* para descubrir si hay adaptadores BLE presentes y para recibir eventos (por ejemplo, cuando se agregan o eliminan adaptadores). También puede usarse para recuperar y modificar la publicidad Bluetooth.

## Atributos

El objeto *BSBtManager* tiene el siguiente atributo:

`atributo de solo lectura Adaptadores de matriz`: Una lista de todos los adaptadores Bluetooth disponibles. Si esta lista está vacía, no hay adaptadores presentes.

## Eventos

Use el callback `onBtEvent()` para recibir eventos:

- `"add-adapter"`: Se ha agregado un adaptador. El valor informa el nombre del adaptador.
- `"startup-complete"`: Se ha creado la lista inicial de publicidad. Este evento se envía después de cualquier evento inicial "add-adapter". Las aplicaciones deben esperar este evento antes de detectar un adaptador faltante.
- `"remove-adapter"`: Se ha eliminado un adaptador. El valor informa el nombre del adaptador.
- `"update-advertising"`: La publicidad Bluetooth ha cambiado. El valor identifica la fuente del cambio (desde "brightscript" o "javascript"). Si su script mantiene una variable que contiene la lista de publicidad, este evento indica que puede necesitar actualizarse.

:::hint{type="info"}
Dado que pueden agregarse eventos adicionales en el futuro, su script debe tener la capacidad de manejar eventos no reconocidos.
:::

### Ejemplo

`btm.onbtevent = function (ev) { console.log("Event " + ev.name + "; parameter " + ev.parameter); }`

## Métodos

El objeto *BSBtManager* tiene los siguientes métodos:

- `objeto GetCurrentAdvertising()`: Devuelve un objeto *BSBtAdvertisementList* que contiene los parámetros actuales de publicidad.
- `boolean StartAdvertising(in object advertisement_list)`: Comienza a enviar anuncios BLE utilizando el objeto *BSBtAdvertisementList* especificado. Llamar a este método reemplazará todos los anuncios anteriores, incluidos los anuncios persistentes, independientemente de si fueron configurados desde JavaScript o BrightScript. Para conservar los anuncios, recupere el objeto *BSBtAdvertisementList* actual y realice los cambios necesarios antes de pasarlo a `StartAdvertising()`.
- `StopAdvertising(new BSBtAdvertisementList())`: Detiene todos los anuncios.
- `void Close()`: Cierra la instancia, evitando que siga consumiendo recursos. Si no se llama a este método, la recolección de basura determina cuándo se destruirá la instancia.
- `BSBtAdvertisementList`: El objeto *BSBtAdvertisementList* es un contenedor para objetos *BSBtAdvertisement* . Los elementos pueden agregarse al final de la lista usando `push()` o eliminarse usando `pop()`. Puede accederse a los elementos existentes mediante índices.
- `BSBtAdvertisement`: El objeto *BSBtAdvertisement* representa un único anuncio BLE. Admite datos de publicidad en formatos estándar o valores personalizados arbitrarios. Los valores de formato estándar pueden inicializarse durante la construcción usando un diccionario, pero los campos personalizados avanzados deben establecerse en el objeto. Los modos compatibles se describen a continuación.

### Formato Beacon

Este modo utiliza un formato simple de beaconing:

`mode:"beacon"` 

- `beaconUUID`: Una representación en cadena de un UUID, que puede estar en formato de 16 bits, 32 bits o 128 bits. Un UUID de 16 bits debe tener exactamente cuatro dígitos hexadecimales sin puntuación; un UUID de 32 bits debe tener exactamente ocho dígitos hexadecimales sin puntuación; y un UUID de 128 bits debe tener puntuación exactamente de la siguiente manera: "cd7b6f81-f738-4cad-aebf-d2a2ea36d996".
- `beaconMajor`: Un entero que especifica el valor Major de 2 bytes (0 a 65535)
- `beaconMinor`: Un entero que especifica el valor Minor de 2 bytes (0 a 65535)
- `beacon_level`:(opcional) Un entero con signo de 8 bits (-127 a 128) que corresponde a la medición del nivel de potencia Tx (en dBm) a 1 metro. El nivel predeterminado es -60.
- `beaconManufacturer`:(opcional) Un valor entero de 2 bytes (0 a 65535) que especifica el fabricante del beacon. El valor predeterminado es 76 (\&H4C).
- `conectable`:(opcional) Un valor Boolean que indica si el anuncio debe permitir conexión (para GATT u otros servicios). Los anuncios no permiten conexión de manera predeterminada.
- `persistente`:(opcional) Un valor Boolean que indica si el anuncio debe persistir después de cada reinicio. Los anuncios beacon no son persistentes de manera predeterminada.

### Formato Eddystone-URL

Este modo utiliza el formato [Eddystone-URL](https://github.com/google/eddystone/tree/master/eddystone-url):

`mode:"eddystone-url"` 

- `url`: La URL que se encapsulará en el paquete de anuncio. Si la URL es demasiado larga para caber en el paquete, la llamada StartAdvertising() devolverá una excepción AbortError que incluye la descripción "Compressed URL is too long".
- `tx_power`:(opcional) Un valor entero que especifica el nivel de potencia Tx en dBm a 0 metros. El valor predeterminado es -19, que corresponde a un nivel de -60dBm a 1 metro. La práctica de calibración recomendada es medir a 1 metro y sumar 41: por ejemplo, un RSSI de -65dBm da como resultado un valor de -24.
- `conectable`:(opcional) Un valor Boolean que indica si el anuncio debe permitir conexión (para GATT u otros servicios). Los anuncios no permiten conexión de manera predeterminada.
- `persistente`:(opcional) Un valor Boolean que indica si el anuncio debe persistir después de cada reinicio. Los anuncios Eddystone-URL no son persistentes de manera predeterminada.

### Formato Eddystone-UID

Este modo utiliza el formato [Eddystone-UID](https://github.com/google/eddystone/tree/master/eddystone-uid):

`modo`:"eddystone-uid"

- `nameSpace`: Un valor de 10 bytes expresado como 20 dígitos hexadecimales
- `instancia`: Un valor de 6 bytes expresado como 12 dígitos hexadecimales
- `tx_power`:(opcional) Un valor entero que especifica el nivel de potencia Tx en dBm a 0 metros. El valor predeterminado es -19, que corresponde a un nivel de -60dBm a 1 metro. La práctica de calibración recomendada es medir a 1 metro y sumar 41: por ejemplo, un RSSI de -65dBm da como resultado un valor de -24.
- `conectable`:(opcional) Un valor Boolean que indica si el anuncio debe permitir conexión (para GATT u otros servicios). Los anuncios no permiten conexión de manera predeterminada.
- `persistente`:(opcional) Un valor Boolean que indica si el anuncio debe persistir después de cada reinicio. Los anuncios Eddystone-URL no son persistentes de manera predeterminada.

### Formato personalizado

Este modo admite datos personalizados arbitrarios. Los campos binarios se especifican como cadenas codificadas en hexadecimal (p. ej., los valores decimales 12, 128 se especificarían como "0C80"). Todas las listas admiten llamadas `push()`/`pop()` e indexación. No se deben incluir valores duplicados.

- `modo:"personalizado"`
- `manufacturerData`:(opcional) Un objeto *BSBtManufacturerData* que contiene los siguientes campos:
  - `fabricante`: Un valor entero sin signo de 16 bits
  - `datos`: Datos binarios
- `serviceUUID`:(opcional) Una lista de cadenas UUID.
- `serviceData`:(opcional) Un objeto *BSBtUUIDData* que contiene los siguientes campos:
  - `uuid`: La cadena UUID
  - `datos`: Datos binarios
- `soliciitUUID`:(opcional) Una lista de cadenas UUID.
  - connectable:(opcional) Un valor Boolean que indica si el anuncio debe poder conectarse (para GATT u otros servicios). Los anuncios no permiten conexión de forma predeterminada.
- `persistente`:(opcional) Un valor Boolean que indica si el anuncio debe persistir después de cada reinicio. Los anuncios personalizados no son persistentes de forma predeterminada.

## Ejemplos

Este script configura un anuncio simple y un anuncio Eddystone-URL, y luego comienza la publicación del anuncio:

```text
ads = new BSBtAdvertisementList();
ad1 = new BSBtAdvertisement({ mode: "beacon", beaconUUID: "41fac221-c8cb-41e7-b011-12d1016dd39e", beaconMajor: 400, beaconMinor: 123});
ads.push(ad1);
ad2 = new BSBtAdvertisement({ mode:"eddystone-url", url: "http://www.brightsign.biz"})
ads.push(ad2);

btm.StartAdvertising(ads);
```

Este script encuentra balizas que coinciden con un UUID y forma una cadena con códigos Major/Minor:

```text
s = "";
for(i = 0; i < adList.length; i++) {
	if (adList[i].mode == "beacon"
		&& adList[i].beaconUUID == "434b2eb8-c28f-4089-8e7a-1e644bb13b9f") {
			s = s + "Beacon: " +  adList[i].beaconMajor + "," + adList[i].beaconMinor + " "
		}
}
```

Este script busca balizas Eddystone-URL y envía actualizaciones basadas en la URL actual:

```text
btm = new BSBtManager()
adList = btm.GetCurrentAdvertising()
for(i = 0; i < adList.length; i++) {
	// Brightsign.biz is now https
		if (adList[i].mode == "eddystone-url" && adList[i].url == "http://www.brightsign.biz")      {
			adList[i].url = "https://www.brightsign.biz"
		}
}
btm.StartAdvertising(adList)
```

Este script produce una excepción porque la URL comprimida es demasiado larga:

```text
al = new BSBtAdvertisementList()
ad4 = new BSBtAdvertisement( { mode: "eddystone-url", url:"http://www.brightsign.biz/thisistoolong"} )
al.push(ad4)
b.StartAdvertising(al)
```

