Este tema describe cómo configurar IoT as Bridge SDK para usar las funciones avanzadas. Puede especificar rutas de archivos de configuración y registrar puentes de forma dinámica. También puede invocar las operaciones encapsuladas en IoT as Bridge SDK para enviar datos de Thing Specification Language (TSL), enviar propiedades o eventos, establecer propiedades e invocar servicios.
Especificación de rutas de archivos de configuración
De forma predeterminada, el archivo de configuración de un puente es application.conf, y el archivo de configuración de la asignación de certificados de dispositivos es devices.conf.
IoT as Bridge SDK permite especificar rutas de archivos personalizadas. Antes de llamar al método bootstrap(), llame al método ConfigFactory.init() para especificar la ruta de un archivo de configuración. También puede crear una instancia e implementar los métodos según sus necesidades de negocio.
Código de ejemplo:
private static DeviceConfigManager selfDefineDeviceConfigManager = new DeviceConfigManager() {
@Override
public DeviceIdentity getDeviceIdentity(String originalIdentity) {
return devicesMap.get(originalIdentity);
}
@Override
public String getOriginalIdentity(String productKey, String deviceName) {
return null;
}
};
BridgeBootstrap bridgeBootstrap = new BridgeBootstrap();
ConfigFactory.init(ConfigFactory.getBridgeConfigManager("application-self-define.conf"),selfDefineDeviceConfigManager);
bridgeBootstrap.bootstrap();
Registro dinámico de puentes
Cuando se despliegan puentes en una gran cantidad de servidores, el proceso de despliegue se vuelve complejo si necesita asignar puentes distintos a cada servidor de puente. Configure el archivo de configuración del puente application.conf para registrar puentes de forma dinámica.
Debe especificar los parámetros productKey y popClientProfile del puente en el archivo de configuración. Después, IoT as Bridge SDK llama a una operación de API de IoT Platform para registrar el puente y utiliza la dirección MAC del servidor de puente como DeviceName del puente.
Para registrar puentes de forma dinámica, solo configure el archivo de configuración del puente. Para consultar el código de ejemplo, consulte Use the basic features.
Especifique todos los campos del parámetro popClientprofile. Si ya se usó una dirección MAC como DeviceName de un dispositivo existente, ese dispositivo se utilizará como puente.
Los parámetros deviceName y deviceSecret deben quedar vacíos. Si ya especificó la información de un puente, no podrá registrarlo de forma dinámica.
-
Se recomienda usar dispositivos de prueba dedicados para la depuración. No depure programas en computadoras locales para evitar posibles impactos en el entorno de producción.
Si depura los programas en varias computadoras locales, las direcciones MAC de dichas máquinas se registrarán como nombres de puente. Estos puentes se asociarán con todos los dispositivos especificados en el archivo devices.conf.
<!--@div {"id":"table_e5p_pzi_wuw","data-tag="table"}-->
Tabla 1. Parámetros
Parámetro | Obligatorio | Descripción |
productKey | Sí | El ProductKey del producto al que pertenece el puente. |
subDeviceConnectMode | No | El tipo de puente.
Los puentes de gran tamaño y de tamaño pequeño utilizan políticas distintas para desconectar dispositivos. Para obtener más información, consulte la sección Disconnect a device from IoT Platform del tema "Uso de las funciones básicas". |
http2Endpoint | Sí | El endpoint de la puerta de enlace HTTP/2. Este endpoint se usa para establecer una conexión persistente entre el puente e IoT Platform mediante el protocolo HTTP/2. Formato del endpoint:
|
authEndpoint | Sí | El endpoint del servicio de verificación de dispositivos. Formato del endpoint:
|
popClientProfile | Sí | Si especifica este parámetro, IoT as Bridge SDK llama automáticamente a una operación de IoT Platform para crear un puente. A continuación se describen los campos de popClientProfile. |
<!--@div {"id":"table_byt_tbf_otw","data-tag="table"}-->
Tabla 2. popClientProfile
Campo | Obligatorio | Descripción |
accessKey | Sí | El AccessKey ID de su cuenta de Alibaba Cloud. Inicie sesión en la consola de IoT Platform, coloque el puntero sobre su foto de perfil y haga clic en AccessKey Management. En la página AccessKey Pair, puede crear o consultar pares de AccessKey. |
accessSecret | Sí | El AccessKey secret de su cuenta de Alibaba Cloud. |
name | Sí | El ID de la región a la que pertenece el puente. Para obtener más información sobre los ID de región, consulte Regions and zones. |
region | Sí | |
product | Sí | El nombre del producto. Establezca el valor en Iot. |
endpoint | Sí | El endpoint de la API en la región especificada. El valor debe indicarse con el formato Reemplace ${RegionId} por el ID de la región donde reside su servicio de IoT Platform. Para obtener más información sobre los ID de región, consulte Regions and Zones. Por ejemplo, si su servicio de IoT Platform reside en la región China (Shanghai), el endpoint es |
A continuación se muestra un código de ejemplo para configurar un puente de tamaño pequeño. En este ejemplo se utiliza una instancia Enterprise Edition.
// The sendpoint of services.
http2Endpoint = "https://${IotInstanceId}.http2.iothub.aliyuncs.com:443"
authEndpoint = "https://${IotInstanceId}.auth.iothub.aliyuncs.com/auth/bridge"
// The parameters of the bridge.
productKey = ${YourProductKey}
popClientProfile = {
accessKey = ${YourAliyunAccessKey}
accessSecret = ${YourAliyunAccessSecret}
name = cn-shanghai
region = cn-shanghai
product = Iot
endpoint = iot.cn-shanghai.aliyuncs.com
}
Llamada a operaciones para enviar datos TSL
IoT as Bridge SDK encapsula las operaciones para enviar datos. Llame a la operación reportProperty para enviar propiedades, a la operación fireEvent para enviar eventos y a la operación updateDeviceTag para actualizar etiquetas. Un dispositivo puede usar estas operaciones para notificar propiedades, notificar eventos y actualizar etiquetas de dispositivo.
Antes de llamar a las operaciones reportProperty y fireEvent, defina propiedades y eventos en la consola de IoT Platform. Inicie sesión en la consola de IoT Platform y vaya a la página de detalles de un producto. Luego, defina las propiedades y los eventos en la pestaña Define Feature. Para obtener más información, consulte Add a TSL model manually.
Si una etiqueta ya existe cuando llama a la operación updateDeviceTag, se actualiza el valor de dicha etiqueta. Para consultar las etiquetas existentes, vaya a la página de detalles de un dispositivo en la consola de IoT Platform. Si la etiqueta no existe, IoT Platform la crea automáticamente.
Código de ejemplo:
TslUplinkHandler tslUplinkHandler = new TslUplinkHandler();
// Submit a property.
// The testProp property is defined.
String requestId = String.valueOf(random.nextInt(1000));
// The timestamp is not included in the submitted property data.
tslUplinkHandler.reportProperty(requestId, originalIdentity, "testProp", random.nextInt(100));
// The timestamp is included in the submitted property data.
//tslUplinkHandler.reportProperty(requestId, originalIdentity, "testProp", random.nextInt(100), System.currentTimeMillis());
// Submit an event.
// The testEvent event is defined.
requestId = String.valueOf(random.nextInt(1000));
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("testEventParam", 123);
// The timestamp is not included in the submitted event data.
tslUplinkHandler.fireEvent(originalIdentity, "testEvent", ThingEventTypes.INFO, params);
// The timestamp is included in the submitted event data.
//tslUplinkHandler.fireEvent(originalIdentity, "testEvent", ThingEventTypes.INFO, params, System.currentTimeMillis());
// Update a device tag.
// The key of the tag is set to testDeviceTag.
requestId = String.valueOf(random.nextInt(1000));
tslUplinkHandler.updateDeviceTag(requestId, originalIdentity, "testDeviceTag", String.valueOf(random.nextInt(1000)));
A continuación se describen los parámetros.
Parámetro | Descripción |
requestId | El ID de la solicitud. |
originalIdentity | El identificador original del dispositivo. |
testProp | El identificador de la propiedad. En este ejemplo, el identificador de la propiedad definida es testProp. La propiedad testProp se envía a IoT Platform. |
random.nextInt(100) | El valor de la propiedad. Al definir una propiedad, puede establecer un rango de valores. En este ejemplo, |
testEvent | El identificador del evento. En este ejemplo, el identificador del evento definido es testEvent. El evento testEvent se envía a IoT Platform. |
ThingEventTypes.INFO | El tipo de evento. ThingEventTypes especifica el tipo de evento. El valor INFO indica que el tipo de evento es INFO. En este ejemplo, el tipo de evento se estableció en INFO cuando se definió el evento testEvent en la consola de IoT Platform. Si el tipo de evento es ERROR, establezca este parámetro en |
params | Los parámetros de salida del evento. Los identificadores, tipos de datos y rangos de valores de los parámetros de salida se definen en la consola de IoT Platform. En este ejemplo, el identifier del parámetro de salida es testEventParam, y el valor es 123. |
testDeviceTag | La clave de la etiqueta. El tipo de dato es cadena de texto. En este ejemplo, la clave es testDeviceTag. Establezca la clave de la etiqueta según las reglas de configuración de claves de etiqueta y sus necesidades de negocio. Para obtener más información, consulte Tags. |
String.valueOf(random.nextInt(1000)) | El valor de la etiqueta. El tipo de dato es cadena de texto. En este ejemplo, |
System.currentTimeMillis() | La marca de tiempo del sistema. Especifique una marca de tiempo UNIX que represente el número de milisegundos transcurridos desde el 1 de enero de 1970 a las 00:00:00 en Tiempo Universal Coordinado (UTC). |
Llamada a operaciones para enviar varias propiedades y eventos a la vez
IoT as Bridge SDK encapsula las operaciones para enviar varias propiedades y eventos a la vez. Cree un objeto BatchPostEventPropertyMessage y llame a los métodos addProperty() y addEvent() para agregar los datos de propiedades y eventos. Luego, cree un objeto TslUplinkHandler y llame al método BatchPostEventPropertyMessage() para enviar los datos.
Antes de llamar a las operaciones reportProperty y fireEvent, defina propiedades y eventos en la consola de IoT Platform. Inicie sesión en la consola de IoT Platform y vaya a la página de detalles de un producto. Luego, defina las propiedades y los eventos en la pestaña Define Feature. Para obtener más información, consulte Add a TSL model manually.
Código de ejemplo:
TslUplinkHandler tslUplinkHandler = new TslUplinkHandler();
// Submit multiple properties and events at a time.
String requestId = String.valueOf(random.nextInt(1000));
long startTime = System.currentTimeMillis() - 3000;
// Create a message to submit data.
BatchPostEventPropertyMessage batchPostEventPropertyMessage = new BatchPostEventPropertyMessage();
Map<String, Object> aiEventParams = new HashMap<>();
aiEventParams.put("EventContent", "hello world");
batchPostEventPropertyMessage
.addProperty("PowerConsumption", 1000, startTime)
.addProperty("PowerConsumption", 123, startTime + 1000)
.addProperty("LightAdjustLevel", 23, startTime)
.addProperty("LightAdjustLevel", 44, startTime + 1000)
.addProperty("LightAdjustLevel", 47, startTime + 2000)
.addEvent("AIEvent", aiEventParams, startTime);
batchPostEventPropertyMessage.setId(requestId);
// Submit the data.
tslUplinkHandler.batchPostEventPropertyMessage(originalIdentity, batchPostEventPropertyMessage);
A continuación se describen los parámetros.
Parámetro | Descripción |
requestId | El ID de la solicitud. |
startTime | Las marcas de tiempo de las propiedades y los eventos que se van a enviar. Especifique una marca de tiempo UNIX que represente el número de milisegundos transcurridos desde el 1 de enero de 1970 a las 00:00:00 UTC. Puede especificar un valor personalizado para este parámetro según sus necesidades de negocio. |
aiEventParams | La información del evento. |
PowerConsumption | Los identificadores de las propiedades. En este ejemplo, los identificadores de las propiedades definidas incluyen PowerConsumption y LightAdjustLevel. Se envían los valores de ambas propiedades en distintos momentos. |
LightAdjustLevel | |
AIEvent | El identificador del evento. En este ejemplo, el identificador del evento definido es AIEvent. El evento AIEvent se envía a IoT Platform. |
originalIdentity | El identificador original del dispositivo. |
Llamada a operaciones para establecer propiedades e invocar servicios
IoT as Bridge SDK encapsula la operación PropertySetHandler para establecer propiedades y la operación ServiceInvokeHandler para invocar servicios. Un dispositivo puede usar estas operaciones para recibir comandos de IoT Platform y actualizar datos.
Código de ejemplo:
BridgeBootstrap bridgeBootstrap = new BridgeBootstrap();
// Set properties.
bridgeBootstrap.setPropertySetHandler(new PropertySetHandler() {
@Override
public void onPropertySet(PropertySetMessage msg) {
log.info("on property set, {}", msg.getParams());
// If you call the replySuccess() method, the SDK sends the /property/set_reply message to IoT Platform. The response code is 200.
msg.replySuccess();
// If you call the replyFail() method, the SDK sends the /property/set_reply message to IoT Platform. You can specify the response code based on your business requirements.
//msg.replyFail(400);
}
});
// Call services.
bridgeBootstrap.setServiceInvokeHandler(new ServiceInvokeHandler() {
@Override
public void onServiceInvoke(ServiceInvokeMessage message) {
log.info("on service invoke, {}", message.getParams());
// If you call the replySuccess() method, the SDK sends the /service/{service.identifier}_reply message to IoT Platform. The response code is 200.
message.replySuccess();
// If you call the replyFail() method, the SDK sends the /service/{service.identifier}_reply message to IoT Platform. You can specify the response code based on your business requirements.
//msg.replyFail(400);
}
});