Givelink 接入
接入介紹
針對一些帶網關型或無法直接連接網絡的設備,格物云定義了一套 Givelink 協議。
設備使用透傳型通訊模塊或網關,將基于 Givelink 協議的數據包,通過 TCP/UDP 與格物云進行交互。
接入方案
初始化 Givelink
#include "givelink.h"
char product_key[] = "you_product_key";
char device_token[] = "you_device_token";
givelink_init(product_key, device_token);
givelink_t * data = givelink_new();
uint16_t id = 0;
接收數據包
通過 givelink_recv
來接收來自 uart
/tcp
/udp
/bluetooth
的數據;
uint8_t payload[200];
uint16_t len = 0;
while(true) {
// read from uart or tcp or udp or bluetooth or others
uint8_t c = some_read();
if (givelink_recv(payload, &len, c)) {
break;
} }
處理接收到的數據包
當接收到數據包后,使用 givelink_from_binary
進行處理。
givelink_from_binary(data, payload, len);
注冊設備
SDK 需要注冊來獲取地址碼
發送 AUTHREQ
數據包,成功后接收到 AUTHRES
數據包,失敗接收到 ERROR
數據包。
if (!givelink_authed()) {
givelink_reset(data);
givelink_set_type(data, AUTHREQ);
givelink_to_binary(data, payload);// write to uart or tcp or udp or bluetooth or others
some_write(payload, givelink_get_length(data));
while(true) {
// read from uart or tcp or udp or bluetooth or others
uint8_t c = some_read();
if (givelink_recv(payload, &len, c)) {
givelink_from_binary(data, payload, len);if (data -> type == AUTHRES) {
uint8_t addr = data -> data;
break;
}if (data -> type == ERROR) {
// do error
break;
}
}
} }
處理請求數據包
當接收到 REQUEST
數據包, 必須反饋 RESPONSE
數據包
if (data -> type == REQUEST) {
givelink_reset(data);
givelink_set_type(data, RESPONSE);"{\"\result": \"OK\"}", 16);
givelink_set_data(data,
givelink_to_binary(data, payload);// write to uart or tcp or udp or bluetooth or others
some_write(payload, givelink_get_length(data)); }
發布實時數據
發送 TELEMETRY
數據包,成功后接收到 SUCCESS
數據包,失敗接收到 ERROR
數據包。
id ++;
givelink_reset(data);
givelink_set_id(data, id);
givelink_set_type(data, TELEMETRY);"{\"temperature\": 20.7}", 21);
givelink_set_data(data,
givelink_to_binary(data, payload);// write to uart or tcp or udp or bluetooth or others
some_write(payload, givelink_get_length(data));
發布實時屬性
發送 ATTRIBUTE
數據包,成功后接收到 SUCCESS
數據包,失敗接收到 ERROR
數據包。
id ++;
givelink_reset(data);
givelink_set_id(data, id);
givelink_set_type(data, ATTRIBUTE);"{\"switch_1_state\": true}", 24);
givelink_set_data(data,
givelink_to_binary(data, payload);// write to uart or tcp or udp or bluetooth or others
some_write(payload, givelink_get_length(data));
發布心跳包
發送 PING
數據包,成功后接收到 SUCCESS
數據包,失敗接收到 ERROR
數據包。
id ++;
givelink_reset(data);
givelink_set_id(data, id);
givelink_set_type(data, PING);
givelink_to_binary(data, payload);// write to uart or tcp or udp or bluetooth or others
some_write(payload, givelink_get_length(data));