Cette rubrique explique comment configurer le kit SDK IoT as Bridge pour utiliser les fonctionnalités avancées. Vous pouvez spécifier les chemins d'accès aux fichiers de configuration et enregistrer dynamiquement les passerelles. Vous pouvez également appeler les opérations encapsulées dans le kit SDK IoT as Bridge pour soumettre des données du langage de spécification des objets (TSL), soumettre des propriétés ou des événements, définir des propriétés et appeler des services.
Spécifier les chemins d'accès aux fichiers de configuration
Par défaut, le fichier de configuration d'une passerelle est application.conf, et le fichier de configuration du mappage des certificats d'appareil est devices.conf.
Le kit SDK IoT as Bridge vous permet de spécifier des chemins d'accès personnalisés. Avant d'appeler la méthode bootstrap(), appelez la méthode ConfigFactory.init() pour spécifier le chemin d'accès à un fichier de configuration. Vous pouvez également créer une instance et implémenter les méthodes en fonction de vos besoins métier.
Exemple de code :
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();
Enregistrer dynamiquement les passerelles
Lorsque vous déployez des passerelles sur un grand nombre de serveurs, le processus de déploiement devient complexe si vous devez spécifier différentes passerelles pour différents serveurs. Vous pouvez configurer le fichier de configuration de passerelle application.conf pour enregistrer dynamiquement les passerelles.
Vous devez spécifier les paramètres productKey et popClientProfile d'une passerelle dans le fichier de configuration. Ensuite, le kit SDK IoT as Bridge appelle une opération API d'IoT Platform pour enregistrer la passerelle et utilise l'adresse MAC du serveur de passerelle comme nom d'appareil (DeviceName) de la passerelle.
Pour enregistrer dynamiquement les passerelles, il suffit de configurer le fichier de configuration de la passerelle. Pour obtenir un exemple de code, consultez Utiliser les fonctionnalités de base.
Tous les champs du paramètre popClientprofile doivent être spécifiés. Si une adresse MAC a déjà été utilisée comme nom d'appareil (DeviceName) d'un appareil existant, cet appareil est utilisé comme passerelle.
Les paramètres deviceName et deviceSecret doivent rester vides. Si vous avez déjà spécifié les informations d'une passerelle, celle-ci ne peut pas être enregistrée dynamiquement.
-
Nous vous recommandons d'utiliser des appareils de test dédiés pour le débogage. Évitez de déboguer les programmes sur des machines locales afin de prévenir tout impact potentiel sur l'environnement de production.
Si vous déboguez les programmes sur plusieurs machines locales, les adresses MAC de ces machines sont enregistrées en tant que noms de passerelle. Les passerelles sont associées à tous les appareils spécifiés dans le fichier devices.conf.
Paramètre | Obligatoire | Description |
productKey | Oui | La clé ProductKey du produit auquel la passerelle appartient. |
subDeviceConnectMode | Non | Le type de la passerelle.
Les passerelles de grande et de petite taille utilisent des politiques différentes pour déconnecter les appareils. Pour plus d'informations, consultez la section Déconnecter un appareil d'IoT Platform de la rubrique « Utiliser les fonctionnalités de base ». |
http2Endpoint | Oui | L'endpoint de la passerelle HTTP/2. L'endpoint est utilisé pour établir une connexion persistante entre la passerelle et IoT Platform via le protocole HTTP/2. Format de l'endpoint :
|
authEndpoint | Oui | L'endpoint du service de vérification des appareils. Format de l'endpoint :
|
popClientProfile | Oui | Si vous spécifiez ce paramètre, le kit SDK IoT as Bridge appelle automatiquement une opération d'IoT Platform pour créer une passerelle. Le tableau suivant décrit les champs de popClientProfile. |
Champ | Obligatoire | Description |
accessKey | Oui | L'ID AccessKey de votre compte Alibaba Cloud. Connectez-vous à la console IoT Platform, placez le pointeur sur votre photo de profil, puis cliquez sur AccessKey Management. Sur la page Paire de clés AccessKey, vous pouvez créer ou afficher des paires de clés AccessKey. |
accessSecret | Oui | Le secret AccessKey de votre compte Alibaba Cloud. |
name | Oui | L'ID de la région à laquelle la passerelle appartient. Pour plus d'informations sur les ID de région, consultez Régions et zones. |
region | Oui | |
product | Oui | Le nom du produit. Définissez la valeur sur Iot. |
endpoint | Oui | L'endpoint de l'API dans la région spécifiée. La valeur doit être spécifiée au format Remplacez ${RegionId} par l'ID de la région dans laquelle réside votre service IoT Platform. Pour plus d'informations sur les ID de région, consultez Régions et zones. Par exemple, si votre service IoT Platform réside dans la région Chine (Shanghai), l'endpoint est |
L'exemple de code suivant montre comment configurer une passerelle de petite taille. Dans cet exemple, une instance Enterprise Edition est utilisée.
// 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
}
Appeler des opérations pour soumettre des données TSL
Le kit SDK IoT as Bridge encapsule les opérations de soumission de données. Appelez l'opération reportProperty pour soumettre des propriétés, l'opération fireEvent pour soumettre des événements et l'opération updateDeviceTag pour mettre à jour des tags. Un appareil peut utiliser ces opérations pour signaler des propriétés, signaler des événements et mettre à jour des tags d'appareil.
Avant d'appeler les opérations reportProperty et fireEvent, vous devez définir des propriétés et des événements dans la console IoT Platform. Connectez-vous à la console IoT Platform et accédez à la page de détails d'un produit. Vous pouvez ensuite définir des propriétés et des événements dans l'onglet Define Feature. Pour plus d'informations, consultez Ajouter manuellement un modèle TSL.
Si un tag existe déjà lorsque vous appelez l'opération updateDeviceTag, la valeur du tag est mise à jour. Pour afficher les tags existants, accédez à la page de détails d'un appareil dans la console IoT Platform. Si un tag n'existe pas, IoT Platform le crée automatiquement.
Exemple de code :
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)));
Le tableau suivant décrit les paramètres.
Paramètre | Description |
requestId | L'ID de la requête. |
originalIdentity | L'identifiant d'origine de l'appareil. |
testProp | L'identifiant de la propriété. Dans cet exemple, l'identifiant de la propriété définie est testProp. La propriété testProp est soumise à IoT Platform. |
random.nextInt(100) | La valeur de la propriété. Lors de la définition d'une propriété, vous pouvez définir une plage de valeurs. Dans cet exemple, |
testEvent | L'identifiant de l'événement. Dans cet exemple, l'identifiant de l'événement défini est testEvent. L'événement testEvent est soumis à IoT Platform. |
ThingEventTypes.INFO | Le type de l'événement. ThingEventTypes spécifie le type d'événement. Une valeur de INFO indique que le type d'événement est INFO. Dans cet exemple, le type d'événement est défini sur INFO lorsque l'événement testEvent est défini dans la console IoT Platform. Si le type d'événement est ERROR, définissez ce paramètre sur |
params | Les paramètres de sortie de l'événement. Les identifiants, les types de données et les plages de valeurs des paramètres de sortie sont définis dans la console IoT Platform. Dans cet exemple, l'identifier du paramètre de sortie est testEventParam, et la valeur est 123. |
testDeviceTag | La clé du tag. Le type de données est une chaîne. Dans cet exemple, la clé est testDeviceTag. Définissez la clé du tag en fonction des règles de configuration des clés de tag et de vos besoins métier. Pour plus d'informations, consultez Tags. |
String.valueOf(random.nextInt(1000)) | La valeur du tag. Le type de données est une chaîne. Dans cet exemple, |
System.currentTimeMillis() | L'horodatage du système. Spécifiez un horodatage UNIX représentant le nombre de millisecondes écoulées depuis le 1er janvier 1970, 00:00:00 UTC (Temps universel coordonné). |
Appeler des opérations pour soumettre plusieurs propriétés et événements à la fois
Le kit SDK IoT as Bridge encapsule les opérations permettant de soumettre plusieurs propriétés et événements simultanément. Créez un objet BatchPostEventPropertyMessage et appelez les méthodes addProperty() et addEvent() pour ajouter des données de propriété et d'événement. Ensuite, créez un objet TslUplinkHandler et appelez la méthode BatchPostEventPropertyMessage() pour soumettre les données.
Avant d'appeler les opérations reportProperty et fireEvent, vous devez définir des propriétés et des événements dans la console IoT Platform. Connectez-vous à la console IoT Platform et accédez à la page de détails d'un produit. Vous pouvez ensuite définir des propriétés et des événements dans l'onglet Define Feature. Pour plus d'informations, consultez Ajouter manuellement un modèle TSL.
Exemple de code :
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);
Le tableau suivant décrit les paramètres.
Paramètre | Description |
requestId | L'ID de la requête. |
startTime | Les horodatages des propriétés et des événements à soumettre. Spécifiez un horodatage UNIX représentant le nombre de millisecondes écoulées depuis le 1er janvier 1970, 00:00:00 UTC. Vous pouvez spécifier une valeur personnalisée pour ce paramètre en fonction de vos besoins métier. |
aiEventParams | Les informations relatives à l'événement. |
PowerConsumption | Les identifiants des propriétés. Dans cet exemple, les identifiants des propriétés définies incluent PowerConsumption et LightAdjustLevel. Les valeurs des deux propriétés à différents moments sont soumises. |
LightAdjustLevel | |
AIEvent | L'identifiant de l'événement. Dans cet exemple, l'identifiant de l'événement défini est AIEvent. L'événement AIEvent est soumis à IoT Platform. |
originalIdentity | L'identifiant d'origine de l'appareil. |
Appeler des opérations pour définir des propriétés et appeler des services
Le kit SDK IoT as Bridge encapsule l'opération PropertySetHandler pour définir des propriétés et l'opération ServiceInvokeHandler pour appeler des services. Un appareil peut utiliser ces opérations pour recevoir des commandes d'IoT Platform afin de mettre à jour les données.
Exemple de code :
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);
}
});