Linux轻松接入OneNet,实现智能物联网控制! (linux接入one net)

智能物联网(IoT)正越来越受到人们的关注,它将各种设备连接到互联网上,实现信息共享和互动控制。OneNet是一种开放式的物联网云平台,它提供了丰富的API和SDK,使得开发者可以轻松地将各种设备接入到OneNet平台,实现智能控制。针对Linux系统如何接入OneNet平台的问题,本文将为大家提供详细的解决方案。

1. 概述

在物联网应用系统中,设备端和云端是信息传递的两个端点。设备端不同类型的传感器负责采集数据,通过网关设备传递给云端。云端则负责存储、处理和控制数据,实现数据的共享和互动控制。

OneNet平台提供了完整的API接口,可以帮助开发者轻松实现设备接入、数据上报和控制。而Linux系统则是一种流行的操作系统,具有开源、安全、可靠等特点,适合用在物联网设备上。

如何将Linux系统接入OneNet平台,实现智能控制呢?下面将对此进行详细介绍。

2. OneNet平台接入

OneNet平台提供了多种接入协议,包括HTTP、MQTT、CoAP等。本文以HTTP协议为例,介绍Linux系统接入OneNet平台的步骤。

2.1. 注册账号

需要在OneNet平台注册账号,并创建产品和设备。具体步骤如下:

1)访问OneNet官方网站(https://open.iot.10086.cn),点击“注册账号”,填写相关信息,完成注册。

2)创建产品:在OneNet平台首页,点击“创建产品”,填写产品名称、描述、行业等信息,并保存。

3)创建设备:在产品详情页,点击“添加设备”,输入设备名称、描述等信息,并保存。

2.2. 获取API-key

接下来,需要获取API-key,该key用于在Linux系统上与OneNet平台进行通信。具体方法如下:

1)进入OneNet平台,找到产品详情页。

2)点击“查看API-key”,获取本产品的API-key。

3)将API-key保存到Linux系统的环境变量中。例如,在~/.bashrc文件中添加以下语句:

export ONENET_APIKEY=

其中,为上一步中获取的API-key。

2.3. 报文格式

在连接OneNet平台之前,需要先了解OneNet平台接收的报文格式。在OneNet平台中,设备与服务器之间采用ON格式进行数据交互。

数据上报:

{

“datastreams”:[

{

“id”:”temperature”,

“datapoints”:[

{

“value”:”23.5”,

“at”:”2023-07-31T08:49:23.000000Z”

}

]

}

]

}

控制指令:

{

“cmd_uuid”: ”x”,

“qos”: 1,

“timeout”: 60,

“resp_topic”:”/devices/{device_id}/control/{object_id}”,

“commands”:[

{

“type”:”urn:x:x”,

“desc”:{},

“paras”:[

{

“name”:”xx”,

“value”:”yyyyy”

}

]

}

]

}

其中,“datastreams”为数据流数组,每个数据流包含数据点数组;“id”为数据流名称;“value”为数据点数值;“at”为数据点时间戳。控制指令中,“cmd_uuid”为指令ID,“commands”为指令数组,每个指令有自己的类型(type)、描述(desc)和参数(paras)。

2.4. 接入示例

接下来,将以Linux系统上的C语言程序为例,演示如何将Linux系统接入OneNet平台。

#include

#include

#include

#include

#include

#define ONENET_URL “http://api.heclouds.com”

typedef struct _payload_t {

char* data;

size_t size;

} payload_t;

int mn()

{

CURL* curl;

CURLcode res;

char* url = NULL;

char* api_key = NULL;

char* device_id = NULL;

char* data = NULL;

payload_t response;

// setup curl

curl = curl_easy_init();

if(!curl) {

printf(“curl initialization fled\n”);

return 1;

}

// get environment variables

api_key = getenv(“ONENET_APIKEY”);

device_id = getenv(“ONENET_DEVICEID”);

// generate url

url = (char*) malloc(sizeof(char) * 256);

memset(url, 0, sizeof(char) * 256);

snprintf(url, 256, “%s/devices/%s/datapoints”, ONENET_URL, device_id);

// set headers

struct curl_slist* headers = NULL;

headers = curl_slist_append(headers, “Content-Type: application/json”);

headers = curl_slist_append(headers, “charset:UTF-8”);

headers = curl_slist_append(headers, api_key);

// set data

data = (char*) malloc(sizeof(char) * 256);

memset(data, 0, sizeof(char) * 256);

snprintf(data, 256, “{\”datastreams\”:[{\”id\”:\”temperature\”,\”datapoints\”:[{\”value\”:\”23.5\”,\”at\”:\”2023-07-31T08:49:23.000000Z\”}]}]}”);

// set response callback

memset(&response, 0, sizeof(payload_t));

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback_func);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *) &response);

// set curl options

curl_easy_setopt(curl, CURLOPT_URL, url);

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

curl_easy_setopt(curl, CURLOPT_POST, 1L);

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);

// perform request

res = curl_easy_perform(curl);

if(res != CURLE_OK) {

printf(“http request fled: %s\n”, curl_easy_strerror(res));

return 1;

}

printf(“http response: %s\n”, response.data);

// cleanup

free(url);

free(data);

curl_slist_free_all(headers);

curl_easy_cleanup(curl);

free(response.data);

return 0;

}

其中,ONENET_URL为OneNet平台地址,ONENET_APIKEY和ONENET_DEVICEID为环境变量,分别表示API-key和设备ID。

该示例程序实现了将一组温度数据(23.5度,采集时间为2023年7月31日08:49:23)上传到OneNet平台中的“temperature”数据流中的功能。

3. 结论


数据运维技术 » Linux轻松接入OneNet,实现智能物联网控制! (linux接入one net)