我与COSM的第一个项目是记录我的电表的数据点。当我查看graph of the feed时,即使数据点似乎被正确接收,它仍然为零。
知道什么是错的,或者我应该寻找的东西来调试它?
当我调试我的Feed时,我发现它每分钟会收到大约8个API请求。
这是COSM的“调试源”界面查看的接收数据点的实例。请特别注意响应是200 [ok],并且请求正文具有合理的时间戳和非零值:
200 POST /api/v2/feeds/129722/datastreams/1/datapoints 06-05-2013 | 08:16:54 +0000
Request Headers
Version HTTP/1.0
Host api.cosm.com
X-Request-Start 1367828214422267
X-Apikey <expunged>
Accept-Encoding gzip, deflate, compress
Accept */*
User-Agent python-requests/1.2.0 CPython/2.7.3 Linux/3.6.11+
Origin
Request Body
{"at": "2013-05-06T08:16:57", "value": 164.0}
Response Headers
X-Request-Id 245ee3ca6bd99efd156bff2416404c33f4bb7f0f
Cache-Control max-age=0
Content-Type application/json; charset=utf-8
Content-Length 0
Response Body
[No Body]
即使文档指定JSON是默认值,我也明确地将“.json”添加到POST URL(/api/v2/feeds/129722/datastreams/1/datapoints.json
),但这似乎没有任何区别。
我在字符串中附加了“value”值,因此请求正文现在读取(例如):
{"at": "2013-05-06T15:37:06", "value": "187.0"}
仍然表现相同:我在调试视图中看到了更新,但在图表视图中只报告了零。
我尝试使用API而不是COSM提供的图表来查看数据。我的猜测是数据点由于某种原因没有被存储(尽管200 OK返回状态)。如果我将此URL放在Web浏览器中:
http://api.cosm.com/v2/feeds/129722.json?interval=0
我得到了回应:
{"id":129722,
"title":"Rainforest Automation RAVEn",
"private":"false",
"tags":["power"],
"feed":"https://api.cosm.com/v2/feeds/129722.json",
"status":"frozen",
"updated":"2013-05-06T05:07:30.169344Z",
"created":"2013-05-06T00:16:56.701456Z",
"creator":"https://cosm.com/users/fearless_fool",
"version":"1.0.0",
"datastreams":[{"id":"1",
"current_value":"0",
"at":"2013-05-06T05:07:29.982986Z",
"max_value":"0.0",
"min_value":"0.0",
"unit":{"type":"derivedSI","symbol":"W","label":"watt"}}],
"location":{"disposition":"fixed","exposure":"indoor","domain":"physical"}
}
请注意,尽管调试工具每分钟显示七次或八次更新,但状态仍列为“已冻结”(最后一次更新时间> 15分钟前)。我的数据点在哪里?
答案 0 :(得分:2)
解决。正如cosm.com支持的@Calum亲切地指出的那样,我没有发送一个正确形成的请求。我发送了以下JSON:
{"at": "2013-05-06T08:16:57", "value": 164.0}
当我应该发送时:
{
"datapoints":[
{"at": "2013-05-06T08:16:57", "value": 164.0}
]
}
Calum还指出,我可以一次批量累积几个点来减少交易数量。我会谈到这一点,但就目前来说,只要说修复请求的主体就可以使一切开始工作了。
答案 1 :(得分:0)
这听起来像图中的一个错误,我已经看过几次非常相似的东西了。
我经常使用Cosm Feed Viewer Chrome扩展程序,它使用WebSocket endpoint实时显示最新值。