首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将主向导数据上载到cosm

将主向导数据上载到cosm
EN

Stack Overflow用户
提问于 2013-04-28 19:12:37
回答 1查看 537关注 0票数 2

今天我发现了Cosm,我正在尝试上传一些数据作为测试。

我有一个设备(叫做http://www.homewizard.nl/),我用它来远程控制开关,读取天气和能源数据。

从设备读取数据是使用HTTP和JSON完成的。

我想阅读这些数据并将其发送到cosm。

如果我查询设备的风速表数据,我收到:

代码语言:javascript
复制
{"status": "ok",
 "version": "2.352",
 "request": {"route": "/wind" },
 "response": [
   { "t": "2013-04-27 00:10", "ws": 0.8, "gu": 1.6, "dir": 157},
   { "t": "2013-04-27 00:25", "ws": 0.8, "gu": 1.6, "dir": 112},
   { "t": "2013-04-27 00:40", "ws": 0.9, "gu": 3.0, "dir": 112},
   { "t": "2013-04-27 00:55", "ws": 1.7, "gu": 2.7, "dir": 90},
   { "t": "2013-04-27 01:10", "ws": 1.1, "gu": 0.0, "dir": 90},
   { "t": "2013-04-27 01:25", "ws": 1.9, "gu": 0.0, "dir": 180},
   { "t": "2013-04-27 01:40", "ws": 2.2, "gu": 0.0, "dir": 45},
   { "t": "2013-04-27 01:55", "ws": 2.0, "gu": 3.0, "dir": 112},
   { "t": "2013-04-27 02:10", "ws": 2.0, "gu": 0.0, "dir": 90},
   { "t": "2013-04-27 02:25", "ws": 2.0, "gu": 3.0, "dir": 135},
   { "t": "2013-04-27 02:40", "ws": 2.4, "gu": 2.0, "dir": 67}
  ]
}

我知道我必须使用ID来上传这些数据,但是这个输出中没有ID。我如何上传和使用上述数据给Cosm?

EN

回答 1

Stack Overflow用户

发布于 2013-04-28 21:04:33

简单方法

从给定的JSON数据中,获取response数组的一个元素:

代码语言:javascript
复制
{ "t": "2013-04-27 01:40", "ws": 2.2, "gu": 0.0, "dir": 45}

将此数据映射到Cosm数据模型意味着采用以下格式的http://cosm.com/docs/v2/feed/update.html

代码语言:javascript
复制
{
  "version":"1.0.0",
  "datastreams" : [
  {
    "current_value" : "2.2",
    "at": "2013-04-27 01:40",
    "id" : "ws"
  },
  {
    "current_value" : "2.2",
    "at": "2013-04-27 01:40",
    "id" : "gu"
  },
  {
    "current_value" : "45",
    "at": "2013-04-27 01:40",
    "id" : "dir"
  }
 ]
}

这可以在PUT请求中发送到http://api.cosm.com/v2/feeds/:feed_id (用通过Cosm网站创建的提要的ID替换:feed_id )。

您可以用几种稍微不同的方式实现重新映射,但这似乎是最简单的方法。我已经测试了JSON的示例片段,尽管时间戳不是完全相同的格式,但Cosm仍然正确地解析了它。

因此,您需要对response数组中的每个项进行迭代,并按照上述方式重新映射。首先你应该试试这个。

更有效的方法

上面描述的简单方法可能会导致向Cosm发送太多的请求。这些请求将更新3个数据流,因此只需3个请求即可完成:

代码语言:javascript
复制
{
  "version":"1.0.0",
   "datapoints" : [
    { "value" : "-3.33", "at": "2013-04-28 21:40" },
    { "value" : "-3.31", "at": "2013-04-28 21:41" },
    { "value" : "-3.29", "at": "2013-04-28 21:42" },
    { "value" : "-3.27", "at": "2013-04-28 21:43" },
    { "value" : "-3.25", "at": "2013-04-28 21:44" },
    { "value" : "-3.23", "at": "2013-04-28 21:45" },
    { "value" : "-3.25", "at": "2013-04-28 21:46" },
    { "value" : "-3.27", "at": "2013-04-28 21:47" },
    { "value" : "-3.29", "at": "2013-04-28 21:48" },
    { "value" : "-3.33", "at": "2013-04-28 21:49" }
  ]
}

您需要在PUT请求中向http://cosm.com/docs/v2/datastream/发送此请求,最后只对问题中给出的数据发出3次请求:

  • PUT http://api.cosm.com/v2/feeds/:feed_id/datastreams/ws
  • PUT http://api.cosm.com/v2/feeds/:feed_id/datastreams/gu
  • PUT http://api.cosm.com/v2/feeds/:feed_id/datastreams/dir

JavaScript实例

您可以实现类似于此的内容:

代码语言:javascript
复制
var data_from_homewizard = {
 "status": "ok",
 "version": "2.352",
 "request": {"route": "/wind" },
 "response": [
   { "t": "2013-04-27 00:10", "ws": 0.8, "gu": 1.6, "dir": 157},
   { "t": "2013-04-27 00:25", "ws": 0.8, "gu": 1.6, "dir": 112},
   { "t": "2013-04-27 00:40", "ws": 0.9, "gu": 3.0, "dir": 112},
   { "t": "2013-04-27 00:55", "ws": 1.7, "gu": 2.7, "dir": 90},
   { "t": "2013-04-27 01:10", "ws": 1.1, "gu": 0.0, "dir": 90},
   { "t": "2013-04-27 01:25", "ws": 1.9, "gu": 0.0, "dir": 180},
   { "t": "2013-04-27 01:40", "ws": 2.2, "gu": 0.0, "dir": 45},
   { "t": "2013-04-27 01:55", "ws": 2.0, "gu": 3.0, "dir": 112},
   { "t": "2013-04-27 02:10", "ws": 2.0, "gu": 0.0, "dir": 90},
   { "t": "2013-04-27 02:25", "ws": 2.0, "gu": 3.0, "dir": 135},
   { "t": "2013-04-27 02:40", "ws": 2.4, "gu": 2.0, "dir": 67}
  ]
}

var ws_datapoints = [];
data_from_homewizard.response.forEach(function (i) {
  ws_datapoints.push({ at: i.t, value: i.ws });
});

var gu_datapoints = [];
data_from_homewizard.response.forEach(function (i) {
  gu_datapoints.push({ at: i.t, value: i.gu });
});

var dir_datapoints = [];
data_from_homewizard.response.forEach(function (i) {
  dir_datapoints.push({ at: i.t, value: i.dir });
});

它应该相当容易阅读,但您可能希望编写一个嵌套循环。而且,我猜,在这种情况下,您可能不想在浏览器中运行它。我使用了JavaScript,因为它似乎是最容易描述算法的,而不是伪代码(所以您也可以尝试它)。

您还应该考虑将时间戳格式调整为ISO 8601,因为这是Cosm需要的格式,以确保正确存储数据点的时间戳(例如,如果HomeWizard设备时间是本地的,则设置时区可能很重要)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16266687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档