日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

進階用法

本文介紹云云對接SDK中進階功能的使用,包括自定義配置文件路徑、配置動態創建網橋設備、調用SDK中封裝的接口進行物模型數據上報、設備屬性和事件批量上報、屬性設置和服務調用。

自定義配置管理

默認情況下,網橋的配置文件和設備證書的映射關系配置文件,都是從固定路徑的固定文件(分別是application.confdevices.conf)中讀取的。

云云對接SDK提供自定義配置能力,您只需在調用bootstrap方法前,先調用ConfigFactory.init方法,自定義配置文件的路徑,自定義實例實現對應的接口。

重要

使用自定義配置管理,必須實現getDeviceIdentitygetOriginalIdentity方法。

代碼示例:

private static DeviceConfigManager selfDefineDeviceConfigManager = new DeviceConfigManager() {
    @Override
    public DeviceIdentity getDeviceIdentity(String originalIdentity) {
        // 根據originalIdentity返回設備信息
        return devicesMap.get(originalIdentity);
    }

    @Override
    public String getOriginalIdentity(String productKey, String deviceName) {
        // 根據設備信息返回originalIdentity
        return null;
    }
};
BridgeBootstrap bridgeBootstrap = new BridgeBootstrap();
ConfigFactory.init(ConfigFactory.getBridgeConfigManager("application-self-define.conf"),selfDefineDeviceConfigManager);
bridgeBootstrap.bootstrap();

動態創建網橋設備

當在大量的服務器上部署網橋應用,如果為每一個網橋服務器指定不同的網橋設備,信息會比較繁瑣。為解決此問題,您可配置網橋信息文件application.conf,動態創建網橋設備。

您需在配置文件中,傳入參數productKeypopClientProfile,云云對接SDK將調用物聯網平臺開放的API,以服務器MAC地址作為設備名稱,創建一個網橋設備。

說明
  • 動態創建網橋設備,僅需修改網橋配置文件,調用代碼與基礎用法一致。

  • popClientprofile的所有參數必須配置完整。如果當前MAC地址為已有設備名稱,會直接使用該設備作為網橋設備。

  • 參數deviceNamedeviceSecret值必須為空,如果已指定網橋設備信息,不會再動態創建設備。

  • 建議使用專用的調測設備調試程序,不要直接在本地機器上調試,以免影響正式的生產環境。

    在多個本地PC上調試程序,每次都會將當前機器的MAC地址注冊為網橋,并將devices.conf文件中的所有設備與該網橋關聯。

表 1. 配置參數說明

參數

是否必需

說明

productKey

網橋設備所屬產品的ProductKey。

subDeviceConnectMode

網橋掛載設備模式:

  • 大型網橋:傳入3,單網橋下最大支持掛載500,000個設備。

  • 小型網橋:不傳入,單網橋下最大支持掛載1,500個設備。

大型網橋、小型網橋的掛載設備下線策略不同,請參見設備下線

http2Endpoint

HTTP2網關服務地址。網橋設備和物聯網平臺通過HTTP2協議建立長連接通道。

地址結構:

  • 企業版實例:https://${IotInstanceId}.http2.iothub.aliyuncs.com:443

    其中,變量${IotInstanceId}需替換成實例ID。

    例如:某用戶的企業版實例的實例ID為iot-cn-g06kwb****,地址為https://iot-cn-g06kwb****.http2.iothub.aliyuncs.com:443

  • 公共實例:新舊版公共實例的地址填寫格式不同。

    • 新版公共實例:與企業版實例填寫格式一致。

    • 舊版公共實例:https://${productKey}.iot-as-http2.${RegionId}.aliyuncs.com:443

      其中,變量${productKey}需替換成您的網橋設備所屬產品的ProductKey。

      變量${RegionId}需替換成您的服務所在地域代碼。RegionId的表達方法,請參見地域和可用區

      例如:某用戶的網橋設備的productKey為a1abcab****,地域為華東2(上海),地址為https://a1abcab****.iot-as-http2.cn-shanghai.aliyuncs.com:443

    實例的詳細說明,請參見實例概述

authEndpoint

設備認證服務地址。

地址結構:

  • 企業版實例:https://${IotInstanceId}.auth.iothub.aliyuncs.com/auth/bridge

    其中,變量${IotInstanceId}需替換成實例ID。

    例如:某用戶的企業版實例的實例ID為iot-cn-g06kwb****,則地址為 https://iot-cn-g06kwb****.auth.iothub.aliyuncs.com/auth/bridge

  • 公共實例:新舊版公共實例的地址填寫格式不同。

    • 新版公共實例:與企業版實例填寫格式一致。

    • 舊版公共實例:https://iot-auth.${RegionId}.aliyuncs.com/auth/bridge

      其中,變量${RegionId}需替換成您的服務所在地域代碼。RegionId的表達方法,請參見地域和可用區

      例如:地域為華東2(上海),則地址為https://iot-auth.cn-shanghai.aliyuncs.com/auth/bridge

popClientProfile

配置此參數,云云對接SDK將調用阿里云物聯網平臺開放接口自動創建一個網橋設備。

具體參數配置見下表popClientProfile

表 2. popClientProfile

參數

是否必需

描述

accessKey

您的阿里云賬號的AccessKey ID。

物聯網平臺控制臺,鼠標移動到您的賬號頭像上,然后單擊AccessKey管理,創建或查看AccessKey。

accessSecret

您的阿里云賬號的AccessKey Secret。

name

將要創建網橋設備的所在地域ID。

地域的表達方法,請參見地域和可用區

region

product

產品名稱,固定為Iot。

endpoint

調用指定地域API的節點地址。結構為iot.${RegionId}.aliyuncs.com

變量${RegionId}需替換成您的服務所在地域代碼。RegionId的表達方法,請參見地域和可用區

例如:華東2(上海)地域的endpoint為iot.cn-shanghai.aliyuncs.com

以企業版實例為例,動態創建小型網橋設備的配置代碼如下:

// 服務地址
http2Endpoint = "https://${IotInstanceId}.http2.iothub.aliyuncs.com:443"
authEndpoint = "https://${IotInstanceId}.auth.iothub.aliyuncs.com/auth/bridge"

// 網橋設備信息
productKey = ${YourProductKey}

popClientProfile = {
    accessKey = ${YourAliyunAccessKey}
    accessSecret = ${YourAliyunAccessSecret}
    name = cn-shanghai
    region = cn-shanghai
    product = Iot
    endpoint = iot.cn-shanghai.aliyuncs.com
}

調用物模型數據上報接口

云云對接SDK中封裝了部分數據上報接口,包括屬性上報接口 reportProperty、事件上報接口fireEvent和更新設備標簽接口updateDeviceTag。設備可通過以上接口向物聯網平臺上報相應消息。

說明
  • 調用reportPropertyfireEvent上報屬性值和事件前,您需先在物聯網平臺控制臺設備所屬產品的產品詳情頁的功能定義頁簽下,定義屬性和事件。請參見單個添加物模型

  • 調用updateDeviceTag接口上報設備標簽時,如果您已在物聯網平臺控制臺設備對應的設備詳情頁,添加了該標簽,則更新標簽值(value)。否則,新建標簽。

調用示例:

TslUplinkHandler tslUplinkHandler = new TslUplinkHandler();
//上報屬性。
//已定義testProp屬性。
String requestId = String.valueOf(random.nextInt(1000));
//上報屬性時,不攜帶時間戳。
tslUplinkHandler.reportProperty(requestId, originalIdentity, "testProp", random.nextInt(100));
//上報屬性時,攜帶時間戳。
//tslUplinkHandler.reportProperty(requestId, originalIdentity, "testProp", random.nextInt(100), System.currentTimeMillis());

//上報事件。
//已定義testEvent事件。
requestId = String.valueOf(random.nextInt(1000));
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("testEventParam", 123);
//上報事件時,不攜帶時間戳。
tslUplinkHandler.fireEvent(originalIdentity, "testEvent", ThingEventTypes.INFO, params);
//上報事件時,攜帶時間戳
//tslUplinkHandler.fireEvent(originalIdentity, "testEvent", ThingEventTypes.INFO, params, System.currentTimeMillis());

//上報設備標簽。
//已定義設備標簽key為testDeviceTag。
requestId = String.valueOf(random.nextInt(1000));
tslUplinkHandler.updateDeviceTag(requestId, originalIdentity, "testDeviceTag", String.valueOf(random.nextInt(1000)));

以上示例中參數說明如下。

參數

說明

requestId

請求消息ID。

originalIdentity

設備的原始身份標識符。

testProp

屬性的identifier。本示例的產品已定義功能屬性標識符為testProp。本示例上報了該屬性的值。

random.nextInt(100)

上報的屬性值。定義屬性時,可設置其取值范圍。在本示例中,使用random.nextInt(100)表示取小于100的整型隨機值。

testEvent

事件的identifier。本示例的產品已定義功能事件標識符為testEvent。本示例上報了該事件。

ThingEventTypes.INFO

事件類型。ThingEventTypes表示事件類型,INFO表示事件類型值為INFO(信息)。

本示例產品定義事件testEvent時,選擇的事件類型為信息(INFO)。

如果事件類型定義為故障,則該參數為ThingEventTypes.ERROR

params

事件的輸出參數。事件輸出參數的identifier、數據類型、取值范圍等已在定義事件時定義。本示例中,上報事件的出參identifiertestEventParam,參數值是123。

testDeviceTag

設備標簽鍵(key),String類型。本示例中為testDeviceTag。 實際使用時,請根據設備標簽鍵規范和您的需求設置。更多信息,請參見設備標簽

String.valueOf(random.nextInt(1000))

設備標簽值(value),String類型。本示例中,用String.valueOf(random.nextInt(1000))表示取一個小于1000的隨機值。實際使用時,請根據設備標簽值規范和您的需求設置,請參見設備標簽

System.currentTimeMillis()

獲取當前系統時間的毫秒數。

調用設備屬性、事件批量上報接口

云云對接SDK封裝了數據批量上報接口,通過BatchPostEventPropertyMessage 對象實例,鏈式調用addPropertyaddEvent方法,分別添加屬性和事件數據后,再通過TslUplinkHandler調用對象實例BatchPostEventPropertyMessage ,實現設備數據批量上報。

說明

調用reportPropertyfireEvent上報屬性值和事件前,您需先在物聯網平臺控制臺設備所屬產品的產品詳情頁的功能定義頁簽下,定義屬性和事件。請參見單個添加物模型

調用示例:

TslUplinkHandler tslUplinkHandler = new TslUplinkHandler();
//批量上報屬性和事件
String requestId = String.valueOf(random.nextInt(1000));
long startTime = System.currentTimeMillis() - 3000;

//構造批量上報的報文
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);

//發起上報
tslUplinkHandler.batchPostEventPropertyMessage(originalIdentity, batchPostEventPropertyMessage);

以上示例中參數說明如下。

參數

說明

requestId

請求消息ID。

startTime

屬性和事件上報時間戳。類型為UTC毫秒級時間。可根據實際業務自定義。

aiEventParams

上報事件的具體信息。

PowerConsumption

屬性的identifier。本示例的產品已定義功能屬性標識符為PowerConsumptionLightAdjustLevel。本示例上報了兩屬性不同時間點的值。

LightAdjustLevel

AIEvent

事件的identifier。本示例的產品已定義功能事件標識符為AIEvent。本示例上報了該事件。

originalIdentity

設備的原始身份標識符。

調用屬性設置、服務調用接口

云云對接SDK中封裝了屬性設置接口PropertySetHandler和服務調用接口ServiceInvokeHandler。設備端可通過以上接口接收物聯網平臺下發的指令,實現數據更新。

調用示例:

BridgeBootstrap bridgeBootstrap = new BridgeBootstrap();
//屬性設置
bridgeBootstrap.setPropertySetHandler(new PropertySetHandler() {
    @Override
    public void onPropertySet(PropertySetMessage msg) {
        log.info("on property set, {}", msg.getParams());
        //如果調用replySuccess,則SDK會向物聯網平臺發送/property/set_reply消息,code為200
        msg.replySuccess();
        //如果調用replyFail,則SDK會向物聯網平臺發送/property/set_reply消息,code為調用方指定的code
        //msg.replyFail(400);
    }
});

//服務調用
bridgeBootstrap.setServiceInvokeHandler(new ServiceInvokeHandler() {
    @Override
    public void onServiceInvoke(ServiceInvokeMessage message) {
        log.info("on service invoke, {}", message.getParams());
        //如果調用replySuccess,則SDK會向物聯網平臺發送/service/{service.identifier}_reply消息,code為200
        message.replySuccess();
        //如果調用replyFail,則SDK會向物聯網平臺發送/service/{service.identifier}_reply消息,code為調用方指定的code
        //msg.replyFail(400);
    }
});