阿里云设备迁移

举报
华为IoT云服务 发表于 2022/10/20 16:25:26 2022/10/20
【摘要】 本文以阿里云Haas100为例,介绍华为云平台设备接入的迁移案例。 在该文档中,带您体验如何迁移云平台。

场景说明

本文以阿里云Haas100为例,介绍华为云平台设备接入的迁移案例。

在该文档中,带您体验如何迁移云平台。

前提条件

  • 已注册华为云官方帐号。未注册可单击注册页面完成注册。
  • 已完成实名制认证。未完成可在华为云上单击实名认证完成认证,否则无法使用设备接入功能。
  • 已开通设备接入服务。未开通则访问设备接入服务,单击管理控制台后开通该服务。

硬件环境

阿里云Haas开发板、Type-C数据线、PC机。

软件环境

这里安装获取软件环境安装方法。推荐使用VSCode IDE进行开发,选择 《WIFI设备连接阿里云试例》。

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

1.获取域名与端口号

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

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

-> ⑤选择总览 -> ⑥点击平台接入地址 -> ⑦获取平台接入域名与端口号。

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

1 获取域名与端口号

1.png

2.png

3.png

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

在阿里云入口函数demo_main函数中,路径为(项目名)\solutions\test_linksdk_demo\separate_app\data_model_basic_demo.c修改域名与端口号:

1 修改域名与端口号

4.png

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

uint16_t port = 1883;

1883时,需要把data_model_basic_demo.c325行的 cred.option = AIOT_SYSDEP_NETWORK_CRED_SVRCERT_CA

改为:cred.option = AIOT_SYSDEP_NETWORK_CRED_NONE;

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

1.创建产品模型(如果已经有产品、请直接跳到 2 )。登录华为云控制台,进入IOTDA界面,选择:产品 -> 创建产品 -> 输入数据 -> 确定 。

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

1 创建产品

5.png

1 定义模型

6.png


1 新增设备

7.png


1 获取DeviceId DeviceSecret

8.png

3.获取ClientID、Username与Password

点击这里,输入DeviceIdDeviceSecret生成ClientIDUsernamePassword

1 获取ClientIDUsernamePassword

9.png

4.修改阿里云代码。

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

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

b:data_model_basic_demo.c文件中的388aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_HOST, (void *)host);删除并添加下面这行代码:

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

1 修改域名输入

10.png

c:(工程名)\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 */

}

d:(工程名)\solutions\test_linksdk_demo\separate_app\data_model_basic_demo.c中,把三元组更改为上面获取到的ClientIDUsernamePassword

1 替换三元组

11.png

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

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

1.获取IOTDA平台根证书

这里下载平台根证书。在这里使用的是C语言.pem文件中的秘钥,也可以替换成自己服务器的证书。

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

1 修改证书

12.png

constchar *ali_ca_cert = \

{

    \

    "-----BEGIN CERTIFICATE-----\r\n"

    "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\r\n"\

    "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\r\n"\

    "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\r\n"\

    "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\r\n"\

    "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\r\n"\

    "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\r\n"\

    "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\r\n"\

    "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\r\n"\

    "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\r\n"\

    "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\r\n"\

    "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\r\n"\

    "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\r\n"\

    "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\r\n"\

    "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\r\n"\

    "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\r\n"\

    "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\r\n"\

    "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\r\n"\

    "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\r\n"\

    "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\r\n"\

    "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\r\n"\

    "-----END CERTIFICATE-----"

};

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

1 华为云支持的TLS套件

13.png

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

1 修改宏定义

14.png

#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

1 修改宏定义

15.png

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

1 Mbedtls加密套件

16.png

6.mbedtls原组件中,在文件mbedtls\include\config.h中增加宏MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED,MBEDTLS_AES_C,MBEDTLS_SHA1_C,MBEDTLS_CIPHER_MODE_CBC。也可以使能该加密组件。

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

1.下载文件并加入到项目中,点击这里下载文件,文件放在项目中的路径如下:

1 文件

17.png

1 工具

18.png

2.修改代码。在 (项目名)\solutions\test_linksdk_demo\separate_app\data_model_basic_demo.c 中:

a:增加头文件

#include <oc_mqtt_profile.h>

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

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

1 配置华为云的数据接收接口

19.png

  //初始化华为云数据

  oc_mqtt_init(NULL, dm_handle);

  SetMyCallbacks();

1 初始化华为云接口

20.png

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

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个月内不可修改。

举报
请填写举报理由
0/200