功能描述

此服务功能开通后,设备每次上传到轻松连大数据平台的空间数据(feeds)都将会完整的转发到指定第三方服务器端接口地址中。 可实现设备与第三方平台业务逻辑无缝连接。

 

开通方式

  • 登录轻松连大数据平台
  • 通过左侧菜单点击进入“数据工厂”->”数据转发服务”
  • 按照页面引导创建数据上传转发服务

 

第三方服务器端接口接收环境要求

  • 当有新的设备数据上传到轻松连大数据平台时,平台将该数据以JSON形式转发到指定的转发服务器URL。
  • 服务器接收到数据后解析并进行二次开发
  • JSON数据中包含channel_id可用于区分不同设备,同时在请求参数中也包含channel_id便于解析。

 

转发数据格式及结构

转发的数据是通过POST请求,以JSON数据作为Request Body, 并且Header中的Content-Type值为”application/json”

具体结构如下:

  • channel_id:  (String) 设备唯一的空间编号
  • feeds: (Array) 数组
    • created_at: ISO 8901形式时间格式
    • field1..field10: 传感器数据
    • status: 状态信息

转发数据举例如下:

{“result”:”success”,”server_time”:”2017-09-04T06:53:34Z”,”timezone”:null,”channel”:{"channel_id":"735","feeds":[{"created_at":"2018-01-05T05:51:52Z","field3":2293.119873},{"created_at":"2018-01-05T05:51:52Z","field1":18.118561},{"created_at":"2018-01-05T05:51:52Z","field2":20},{"created_at":"2018-01-05T05:56:52Z","field3":2180.479980},{"created_at":"2018-01-05T05:56:52Z","field1":18.382927},{"created_at":"2018-01-05T05:56:52Z","field2":20},{"created_at":"2018-01-05T06:01:52Z","field3":2117.760010},{"created_at":"2018-01-05T06:01:52Z","field1":18.738079},{"created_at":"2018-01-05T06:01:52Z","field2":20},{"created_at":"2018-01-05T06:02:09Z","field5":-62}]}

 第三方服务器端接口接收返回规范

  • 请确保业务逻辑在15秒内完成,否则服务器将断开连接
  • 结果内容返回SUCCESS表示成功,ERROR表示失败
  • 返回的结果仅用于后台统计成功及失败次数

 第三方服务器端实例

PHP:

<?php

try{
    $data = file_get_contents('php://input'); //get POST payload, 获取post包文
    $json = json_decode($data, true); //parse input data into json, 解析json,并进行业务逻辑
    //-----------注意: 请确保业务逻辑在15秒之内完成,否则服务器端将做超时处理------------//
    $myfile = file_put_contents('log.txt', $data.PHP_EOL , FILE_APPEND | LOCK_EX);
    echo "SUCCESS"; //成功处理请求
}
catch (Exception $ex)
{
    echo "ERROR";//失败处理请求返回
}

NodeJS:

const http = require('http');
const server = http.createServer(function (req, res) {
    let type = req.headers["content-type"];
    if (req.method.toLowerCase() === 'post' && type === "application/json") {
        try{
            ////get POST payload, 获取post包文
            var jsonData = "";
            req.on("data", function(chunk) {
                jsonData += chunk;
            });
            req.on("end", function() {
                //parse input data into json, 解析json,并进行业务逻辑
                var reqObj = JSON.parse(jsonData);
                
                //-----------注意: 请确保业务逻辑在15秒之内完成,否则服务器端将做超时处理------------//
                var fs = require('fs');
                fs.writeFile("log.txt", JSON.stringify(reqObj), function(err) {
                    if(err) {
                        res.end('ERROR');//失败处理请求返回
                    }
                });
                res.end('SUCCESS');//成功处理请求
            });
        }catch{
            res.end('ERROR');//失败处理请求返回
        }
    }else{
        res.end('ERROR');//失败处理请求返回
    }
});
//设置监听端口
server.listen(8080, "127.0.0.1", function () {
    console.log("server is started listen port 8080");
});

Python:

from http.server import BaseHTTPRequestHandler, HTTPServer
import cgi
import json

class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        try:
            ctype, pdict = cgi.parse_header(self.headers.get('content-type'))
            if ctype == 'application/json':
                #get POST payload, 获取post包文, parse input data into json, 解析json,并进行业务逻辑
                length = int(self.headers['content-length'])
                jsonArray = json.loads(self.rfile.read(length))
                #-----------注意: 请确保业务逻辑在15秒之内完成,否则服务器端将做超时处理------------#
                myfile = open("log.txt",'a')
                myfile.write(json.dumps(jsonArray))
                myfile.write("\n")
                myfile.close()
                #成功处理请求
                self.protocal_version = 'HTTP/1.1'
                self.send_response(200)
                self.send_header("Welcome", "Contect")
                self.end_headers()
                self.wfile.write(bytes("SUCCESS", "utf-8"))
                return
            else:
                #失败处理请求返回
                self.protocal_version = 'HTTP/1.1'  
                self.send_response(300)
                self.send_header("Welcome", "Contect")
                self.end_headers()
                self.wfile.write(bytes("ERROR", "utf-8"))
                return
        except:
            #失败处理请求返回
            self.protocal_version = 'HTTP/1.1'
            self.send_response(300)
            self.send_header("Welcome", "Contect")
            self.end_headers()
            self.wfile.write(bytes("ERROR", "utf-8"))
            return

def run():
    port = 8080
    print('starting server, port', port)
    # Server settings
    server_address = ('', port)
    httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
    print('running server...')
    httpd.serve_forever()

if __name__ == '__main__':
    run()