阿里云设备迁移
场景说明
本文以阿里云Haas100为例,介绍华为云平台设备接入的迁移案例。
在该文档中,带您体验如何迁移云平台。
前提条件
- 已注册华为云官方帐号。未注册可单击注册页面完成注册。
硬件环境
阿里云Haas开发板、Type-C数据线、PC机。
软件环境
这里安装获取软件环境安装方法。推荐使用VSCode IDE进行开发,选择 《WIFI设备连接阿里云试例》。
代码迁移步骤一 修改域名与端口号
1.获取域名与端口号
登录华为云账号,并进入设备接入控制台,获取域名与端口号。
具体步骤为:①在控制台设置接入地址为北京四 -> ②点击服务列表 -> ③搜索IOTDA -> ④点击进入IOTDA界面图1 获取域名与端口号
-> ⑤选择总览 -> ⑥点击平台接入地址 -> ⑦获取平台接入域名与端口号。
2.打开刚创建的产品 选择:模型定义 -> 上传模型文件 -> 添加模型 -> 确定, 添加模型。 模型文件点击这里下载。
图1 获取域名与端口号
3.在中代码修改域名与端口号
在阿里云入口函数demo_main函数中,路径为(项目名)\solutions\test_linksdk_demo\separate_app\data_model_basic_demo.c修改域名与端口号:
图1 修改域名与端口号
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 )。登录华为云控制台,进入IOTDA界面,选择:产品 -> 创建产品 -> 输入数据 -> 确定 。
2.模型添加成功后 点击 在线调试 -> 新增测试设备 -> 输入设备名称 -> 确定, 新增测试设备,并得到DeviceId 和DeviceSecret(后面会用到)。
图1 创建产品
图1 定义模型
图1 新增设备
图1 获取DeviceId 和DeviceSecret
3.获取ClientID、Username与Password
点击这里,输入DeviceId与DeviceSecret生成ClientID、Username与Password。
图1 获取ClientID、Username与Password
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文件中的388行aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_HOST, (void *)host);删除并添加下面这行代码:
aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_HOST, (void *)url);
图1 修改域名输入
c:(工程名)\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 */
}
d:(工程名)\solutions\test_linksdk_demo\separate_app\data_model_basic_demo.c中,把三元组更改为上面获取到的ClientID、Username与Password。
图1 替换三元组
代码迁移步骤三 SSL/TLS接入切换
SSL/TLS接入切换主要分为两步骤,分别为:修改服务器根证书与更变TLS接入的加密套件。
1.获取IOTDA平台根证书
这里下载平台根证书。在这里使用的是C语言.pem文件中的秘钥,也可以替换成自己服务器的证书。
2.在中代码中替换/加入证书,在阿里云Haas100中,存放证书的位置为 (项目名)\components\linksdk\external\ali_ca_cert.c 中,修改字符串 ali_ca_cert 中数据。
图1 修改证书
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套件
4.在阿里云Haas100中,(项目名)\components\mbedtls\platform\include\config_aos_base.h,增加宏定义:
图1 修改宏定义
#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 修改宏定义
5.TLS的加密套件设置完成。打开文件(文件名)\components\mbedtls\library\ssl_ciphersuites.c,若下图所在位置成功编译(VScode中高亮),则设置成功。
图1 Mbedtls加密套件
6.mbedtls原组件中,在文件mbedtls\include\config.h中增加宏MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED,MBEDTLS_AES_C,MBEDTLS_SHA1_C,MBEDTLS_CIPHER_MODE_CBC。也可以使能该加密组件。
代码迁移步骤四 修改上传的数据格式
1.下载文件并加入到项目中,点击这里下载文件,文件放在项目中的路径如下:
图1 文件
图1 工具
2.修改代码。在 (项目名)\solutions\test_linksdk_demo\separate_app\data_model_basic_demo.c 中:
a:增加头文件
#include <oc_mqtt_profile.h>
b:在353行增加一行代码, 并在391行while前面增加初始化函数的调用。
aiot_mqtt_setopt(mqtt_handle, AIOT_MQTTOPT_RECV_HANDLER, (void *)app_mag_deal_init);
图1 配置华为云的数据接收接口
//初始化华为云数据
oc_mqtt_init(NULL, dm_handle);
SetMyCallbacks();
图1 初始化华为云接口
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文件中的函数进行测试。
- 点赞
- 收藏
- 关注作者
评论(0)