手搓一个分布式大气监测系统(五)基于物联网开发平台的云架构延伸
背景
先做个前情回顾:在这个系列的前面几篇文章中,(一)系统功能与架构概述、(二)架构介绍及案例解析 先总体介绍了大气监测系统的总体架构,接着 (三)使用 Nucleo LoRa 开发套件打造 PM2.5 监测终端、(四)基于TencentOS Tiny RISC-V开发板打造PM2.5监测终端 这两篇文章介绍了利用两种开发套件快速打造了端侧的设备,并且在物联网开发平台上已经可以看到大气监测终端的属性数据更新。
那么物联网开发平台又应该如何将数据推送给我们的大气监测系统,大气监测系统又该如何获取设备在物联网开发平台上的数据呢?这篇文章来做个详细的介绍。
1 “数据同步”推送设备上报数据
平台功能介绍
用户的个性化业务需求需要将产品下所有设备上报的数据传输至用户自有的服务器上进行处理,物联网开发平台提供了 HTTP 转发服务,将设备上报数据实时 POST 到用户的 HTTP 服务器的能力。详情可以查看官网文档介绍。
另外开发者基于物联网开发平台完成设备接入与管理,往往需要实时接收设备上报的数据与上下线状态便于闭环开发某个行业的垂直解决方案。平台提供了 CKafka 转发能力,满足需要通过消息队列订阅设备上报数据与状态的场景。
大气监测系统中的应用
大气监测系统采用了数据同步的HTTP转发服务,设备数据通过物联网开发平台规整汇聚之后,将转发到大气系统相应的API网关。
物联网开发平台的数据同步菜单中进行了如下的配置,图中的HTTP服务地址为API网关的URL,API网关接收到物联网开发平台数据之后将会传输给后端的SCF进行逻辑业务处理。
转发的报文示例如下:
{
"payload": "eyJtZXRob2QiOiJyZXBvcnQiLCJjbGllbnRUb2tlbiI6IjIwMjAtMDEtMjBUMTA6NDk6MTAuNzY4WiIsInBhcmFtcyI6eyJQTTFfQ0YxIjo0MiwiUE0yZDVfQ0YxIjo0MiwiUE0xMF9DRjEiOjU1LCJQTTEiOjQxLCJQTTJkNSI6NDEsIlBNMTAiOjQ3LCJwYXJ0aWNsZXNfMGQzIjo5NjAsInBhcnRpY2xlc18wZDUiOjE0NCwicGFydGljbGVzXzEiOjIwLCJwYXJ0aWNsZXNfMmQ1Ijo2LCJwYXJ0aWNsZXNfNSI6MywicGFydGljbGVzXzEwIjoyLCJ2ZXJzaW9uIjowLCJFcnJvciI6MH19",
"seq": 145829,
"timestamp": 1579517350,
"topic": "$thing/up/property/XXXXXXXX/pm25_XXX",
"devicename": "pm25_XXX",
"productid": "XXXXXXXX"
}
其中的payload字段为终端数据,为base64编码,可以使用工具解码,解码后可以看到传输的数据示例。后端的应用服务器按照如下的数据模版协议进行解析即可。
{
"method": "report",
"clientToken": "2020-01-20T10:49:10.768Z",
"params": {
"PM1_CF1": 42,
"PM2d5_CF1": 42,
"PM10_CF1": 55,
"PM1": 41,
"PM2d5": 41,
"PM10": 47,
"particles_0d3": 960,
"particles_0d5": 144,
"particles_1": 20,
"particles_2d5": 6,
"particles_5": 3,
"particles_10": 2,
"version": 0,
"Error": 0
}
}
调试工具分享
大气监测系统中采用的是腾讯云的API网关进行API的托管服务。开发阶段则可以使用一些工具来查看数据包的情况,这里推荐一个工具:https://requestbin.com/,可以收集调试 HTTP 的请求数据。
下图就是一个示例效果,可以非常简单方便地查看到数据详情。
2 “云API”调用
云API介绍
包括腾讯云物联网开发平台在内各种腾讯云产品都是以云API对外提供服务,API 接口比较规范,具有统一的参数风格和公共错误码。
大气监测系统中的应用
大气监测系统除了接收物联网开发平台上的推送数据,还需要向物联网开发平台查询LoRa网关的在线状态。
具体的API接口为 获取 LoRa 网关列表,可以直接使用文档界面上推荐的 API Explorer 工具来调试接口,熟悉接口的字段。
接口回复的 LastSeenAt 字段即为 LoRa 网关的最后在线时间。
同时 API Explorer 工具还提供了多个编程语言的SDK工具,可以直接生成相应的代码,大大提高了应用业务的编码效率。
3 小结
这篇文章里以大气监测系统为例,介绍了业务系统如何与物联网开发平台打交道,业务系统除了可以通过数据同步功能接收物联网开发平台的数据推送,也可以通过云API来调用物联网开发平台的接口服务。
- 包学会之浅入浅出Vue.js:结业篇
- 迈克尔•戴尔:人工智能杀手?技术反乌托邦?不存在的
- 你知道吗?多个类多线程环境下静态构造函数的执行顺序
- 云端架构师养成之三:微信也在用的消息队列服务
- 现在 tensorflow和mxnet 很火,是否还有必要学习 scikit-learn 等框架?
- ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上
- 改进版CodeTimer及XCode性能测试
- 常见测试术语解析
- 秦俊:开放 DevOps 敏捷开发套件,助力开发者驰骋云端
- 开源组件NanUI一周年-使用HTML/CSS/JS来构建.Net Winform应用程序界面
- 邱寒:新零售笔记(四)基于区块链大数据的人工智能
- 腾讯云GAME-TECH沙龙干货回顾:网龙《英魂之刃口袋版》开发经验分享
- ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
- 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络AlexNet
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JAVA三年面试总结,金九银十,你准备好了吗?
- Best Cow Line(POJ 3617)
- Flask单点登录竟然只要几行代码就能搞定!
- 区间调度问题
- 迷宫的最短路径
- Lake Counting (POJ No.2386)
- 部分和问题(DFS)
- 为什么 React Hooks useState 更新不符预期?
- 技术分享 | MySQL 使用 MariaDB 审计插件
- 第12期:压缩表性能监测
- 第05期:使用 prometheus 监控 clickhouse 集群
- 这 6 点知识让我对 JavaScript 的对象有了更进一步的了解
- Linux进程间通信(中)之信号、信号量实践
- Linux进程间通信(下)之共享内存实践
- 手把手教你快速使用Vmware虚拟机安装Linux操作系统实验环境