物联网行业的应用场景虽然千差万别,但是解决的问题其实是类似的,都可以用 前端硬件<=>数据中台<=>应用 来做简单概括。腾讯云的物联网开发套件,等同于提供了前端硬件及数据中台两部分功能,并为应用开发提供了API及SDK,来加速整个开发链路。因此拿到腾讯的物联网开发套件之后,就想评估一下这样一套方案,能够在多大程度上改进实际的开发流程。
因为链路中的两块已经完成,为了尽快打通应用场景,就需要再搭配上一个可面向用户的前端展示工具。由于物联网采集数据是一个标准的时序数据(时间戳 - 数值),搭配Grafana就是个很好的选择。开始动工前预览了腾讯iot的API文档(https://cloud.tencent.com/document/product/634/12056),确定了基本满足需求,就可以开始动工了。
开发套件提供了一份基础的入门文档,拿到手之后把开发板、ESP8266、烟雾探测传感器组装之后,就可以开始进行简易的开发。提供的代码示例里,包括了如何通过ESP8266 连接上平台,如何用ADC读取配套传感器的数值。把两个案例糅合之后,此时已可以在串口中打印出烟雾传感器的数值。
这一步在平台中依次按照流程指引,创建测试产品、添加一个自定烟雾值字段,将产品的productId 跟 secretkey加入到配置文件中,就可以看到数据开始源源不断的上传到平台上了。
如果平台中始终不出现数据
- 首先检查串口中是否能打印出数据
- 串口能打印数据后,检查ESP8266是否已连上网。在实际使用过程中,发现使用华硕路由器的访客网络始终无法连上网,反而是有白名单限制的内网,可以连上wifi。如果不确定是否是网络的问题,可以先用手机开热点,来排除网络设置的影响。
- 确定可联网之后,检查产品的productID, secketKey, deviceName 这三个值是否填入到正确的位置 (这部分在使用说明中的描述跟实际代码实现有些许出入,直接在对应的文件中把所有相关的关键词都替换了,能保证万无一失)
相关链接:
首先在本地安装grafana + simple json 插件,这样就可以直接通过标准的REST API, 给grafana提供后台可视化数据。然而,因为腾讯云IOT的鉴权不是标准的鉴权插件,返回的数据格式也跟grafana需要的有所不同,那么就需要一个proxy server,把鉴权及数据格式做简单的转换。不过还好,腾讯云IOT很贴心的提供了各个编程语言的SDK,及示例代码生成,这让开发一下就加速了很多。
// 从grafana的请求中,获取数据查询的起始timestamp、结束时间timestamp
if (req.body.scopedVars) {
var from = req.body.scopedVars.__from.text;
var to = req.body.scopedVars.__to.text;
}
// 把起始时间、结束时间传入到参数中
let params = '{"MinTime":1548677099000,"MaxTime":1948677099000,"ProductId":"xxx","DeviceName":"dev001","FieldName":"smoke"}'
req.from_json_string(params);
if(from && to) {
req.MinTime = from;
req.MaxTime = to;
console.log(req);
}
// 把api返回的结果转换成grafana接受的
function format_result(response){
timeserie = response['Results']
result = []
_.each(timeserie, function(ts) {
result.push([ts['Value'], ts['Time']]);
});
result = {
"target": response['FieldName'],
"datapoints": result,
}
return result;
}
基本上核心的代码就这三段,三段改完之后,腾讯云就可以源源不断的给grafana喂数据了。
在整个前端硬件<=>数据中台<=>应用 的链路中,非常耗费精力的一块,就是数据的稳定采集及上传。有腾讯云iot平台的存在,等同于提供了一个稳定的数据中台,不需要去考虑负载均衡、数据备份、数据库运维,API实现等各类问题,直接就可以专心构建面向用户的应用。这整个后台的数据开发,耗时两个小时左右,可以说,对于大部分的物联网应用对接来说,都足够了,相当省事。
以一个互联网行业,软件从业人员(硬件爱好者水平)的眼光来看,整体的体验上,软件部分的开发是优于硬件的。整个硬件套件提供的使用说明,只进行到了如何搭建helloworld,能让环境跑起来。但是对于其他的变种,提供的案例就相对不足(跟Ardunio这类硬件套装比起来,笔者想要把ardunio上的应用案例迁移过来,然而因为缺少了相应的示例代码,改动起来非常的艰难,最终放弃了尝试)。当然对于专业的硬件开发人员来说,这应该不是问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。