如何将设备从阿里云物联网平台迁移至华为云IoT
阿里云Haas100设备迁移到华为云
场景说明
本文以阿里云Haas100为例,介绍华为云平台设备接入的迁移案例。在该文档中,带您体验如何迁移云平台。
代码迁移步骤一 修改域名与端口号
- 获取域名与端口号
登录华为云账号,并进入设备接入控制台,获取域名与端口号。
具体步骤为:①在控制台设置接入地址为北京四 -> ②点击服务列表 -> ③搜索IOTDA -> ④点击进入IOTDA界面图1 获取域名与端口号-> ⑤选择总览 -> ⑥点击平台接入地址 -> ⑦获取平台接入域名与端口号
- 在中代码修改域名与端口号
在阿里云入口函数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
点击这里 ,输入DeviceId与DeviceSecret生成ClientID、Username与Password。
3. 修改阿里云代码
- 把data_model_basic_demo.c文件中的396行,增加下面这行代码:
aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_EXTEND_CLIENTID, (void*)device_secret);
data_model_basic_demo.c文件中的388行删除并添加下面这行代码:
aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_HOST, (void *)url);
- (工程名)\components\linksdk\core\utils\core_auth.c 中,删除35到85行内容,删除这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 */ }
- (工程名)\solutions\test_linksdk_demo\separate_app\data_model_basic_demo.c中,把三元组更改为上面获取到的ClientID、Username与Password。
代码迁移步骤三 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文件中的函数进行测试。
- 点赞
- 收藏
- 关注作者
评论(0)