如何将设备从阿里云物联网平台迁移至华为云IoT

举报
yd_246268034 发表于 2022/10/12 10:25:28 2022/10/12
【摘要】 本文以阿里云Haas100为例,介绍华为云平台设备接入的迁移案例。

阿里云Haas100设备迁移到华为云

场景说明

本文以阿里云Haas100为例,介绍华为云平台设备接入的迁移案例。在该文档中,带您体验如何迁移云平台。

代码迁移步骤一 修改域名与端口号

  1. 获取域名与端口号

    登录华为云账号,并进入设备接入控制台,获取域名与端口号。

        具体步骤为:①在控制台设置接入地址为北京四 -> ②点击服务列表 -> ③搜索IOTDA -> ④点击进入IOTDA界面图1 获取域名与端口号-> ⑤选择总览 -> ⑥点击平台接入地址 -> ⑦获取平台接入域名与端口号


  2. 在中代码修改域名与端口号

    在阿里云入口函数demo_main函数中,路径为

    (项目名)\solutions\test_linksdk_demo\separate_app\data_model_basic_demo.c

    修改域名与端口号:

    char *url= "xxxxxx.iot-mqtts.cn-north-4.myhuaweicloud.com";

    uint16_t port = 1883;

    为1883时,需要把data_model_basic_demo.c中325行的 cred.option = AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA改为:cred.option = AIOT_SYSDEP_NETWORK_CRED_NONE;

代码迁移步骤二 修改MQTT连接三元组ClientID、Username、Password

1. 创建产品模型(如果已经有产品、请直接跳到 2

    1)登录华为云控制台,进入IOTDA界面,选择:产品 -> 创建产品 -> 输入数据 -> 确定

       

    2)打开刚创建的产品 选择:模型定义 -> 上传模型文件 -> 添加模型 -> 确定, 添加模型。 模型文件点击这里 下载。

       

    3)模型添加成功后 点击 在线调试 -> 新增测试设备 -> 输入设备名称 -> 确定, 新增测试设备。可以得到DeviceId 和DeviceSecret(后面会用到)。

       

       

2. 获取ClientID、Username与Password

点击这里 ,输入DeviceIdDeviceSecret生成ClientIDUsernamePassword

   

3. 修改阿里云代码

  1.  data_model_basic_demo.c文件中的396行,增加下面这行代码:

    aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_EXTEND_CLIENTID, (void*)device_secret);

  2. data_model_basic_demo.c文件中的388行删除并添加下面这行代码:

    aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_HOST, (void *)url);

  3. (工程名)\components\linksdk\core\utils\core_auth.c 中,删除3585行内容,删除这3个函数后,把下面代码复制到35行。
    int32_tcore_auth_mqtt_username(aiot_sysdep_portfile_t *sysdep, char **dest, char *product_key, char *device_name, char *module_name) { 
        char *src[] = { device_name };
        returncore_sprintf(sysdep, dest, "%s", src, sizeof(src)/sizeof(char *), module_name);
    }
    
    int32_tcore_auth_mqtt_password(aiot_sysdep_portfile_t *sysdep, char **dest, char *product_key, char *device_name, char *device_secret, uint8_tassigned_clientid, char *module_name)  {
        char *src[] = { product_key }; 
        returncore_sprintf(sysdep, dest, "%s", src, sizeof(src)/sizeof(char *), module_name);
    }
    
    int32_tcore_auth_mqtt_clientid(aiot_sysdep_portfile_t *sysdep, char **dest, char *product_key, char *device_name, char *secure_mode, char *extend_clientid, uint8_tassigned_clientid, char *module_name)  { 
        char *src[] = { extend_clientid };
        returncore_sprintf(sysdep, dest, "%s", src, sizeof(src)/sizeof(char *), module_name); /* ext bitmap: bit0-rrpc, bit1-ext_notify */
    }
    
  4. (工程名)\solutions\test_linksdk_demo\separate_app\data_model_basic_demo.c中,把三元组更改为上面获取到的ClientIDUsernamePassword

代码迁移步骤三 SSL/TLS接入切换

SSL/TLS接入切换主要分为两步骤,分别为:修改服务器根证书与更变TLS接入的加密套件。

1. 获取IOTDA平台根证书

    点击这里 下载平台根证书。在这里使用的是C语言.pem文件中的秘钥。

    也可以替换成自己服务器的证书。

2. 在中代码中替换/加入证书

    在阿里云Haas100中,存放证书的位置为 (项目名)\components\linksdk\external\ali_ca_cert.c 中,修改字符串 ali_ca_cert 中数据。

   

3. 增加华为云支持的TLS加密套件(如不使用MQTTS,不用配置该步骤)

    华为云支持的套件如下:

     

    在阿里云Haas100中,(项目名)\components\mbedtls\platform\include\config_aos_base.h,增加宏定义:

   

    #define MBEDTLS_ECDH_C

    #ifndef MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED

    #define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED 1

    #endif

    并把MBEDTLS_CONFIG_CRYPTO_ECP设定为 1

   

    TLS的加密套件设置完成。打开文件(文件名)\components\mbedtls\library\ssl_ciphersuites.c,若下图所在位置成功编译(VScode中高亮),则设置成功。 

   

代码迁移步骤四 修改上传的数据格式

1. 下载文件并加入到项目中

    点击这里 下载文件,文件放在项目中的路径如下:

   

   

2. 修改代码

1)在 (项目名)\solutions\test_linksdk_demo\separate_app\data_model_basic_demo.c 中:

    增加头文件

    #include <oc_mqtt_profile.h>

2)在353行增加一行代码, 并在391行while前面增加初始化函数的调用。

    aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_RECV_HANDLER, (void *)app_mag_deal_init);

   

    // 初始化华为云数据

    oc_mqtt_init(NULL, dm_handle);

    SetMyCallbacks();

   

    o 该文件中粘贴下面的函数。

static void app_mag_deal_init(void *handle, const aiot_mqtt_recv_t *packet, void *userdata) {

    if(packet->data.pub.topic != NULL) {

        oc_mqtt_profile_msg_t msg = {packet->data.pub.topic, packet->data.pub.topic_len, packet->data.pub.payload, packet->data.pub.payload_len};

        app_msg_deal(NULL, &msg);

     }
} 

    验证:可以通过调用huawei_mqtt_demo.c文件中的函数进行测试。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。