在进行今天的正题前,先举个小例子:

甲和乙是同一公司的同事,两个人办公室离得很远,但可以通过单面窗看到公司大门口,当对方上班和下班时都能看到,只是从大门口看不到办公室内的情况。假如甲先到公司,乙后到公司,甲可以获知乙是否上班的情况,而乙却无法获知甲是否上班了。那么怎么才能让后到的乙一到公司也能知道甲是否已经到了呢?

有人说,这个好办啊,让乙去甲的办公室敲敲门,里边有人就会回应了。你说的这种情况是建立在甲在办公室且会回应,甲乙完成了直接互动,乙才能获得准确信息(这种模式就是微信模式)。我们今天讨论的是在甲乙不直接互动的情况下就能获知对方是否在办公室的方法(也就是QQ模式)。

那么怎么才能实现这种目的呢?那就需要借助第三方。比如在公司大门口处设置一签字表,上班时在自己名字下签“到岗”,下班或外出时签“离开”。后来的人通过查询签字表,就能获取其他人是否在公司的情况。

那么现在回到正题。

目录

一、引出问题

二、解决方案

三、云数据流转解析器配置

1、新建一个数据源

2、新建一个数据目的

3、新创建一个解析器

4、编辑解析器脚本

四、java程序读取TSDB内设备状态

五、测试


一、引出问题

在文章物联网平台搭建的全过程介绍(五)——基于阿里云物联网平台的Android聊天app源码和android聊天app在TextView增加头像功能中,介绍了Android基本聊天工具的实现和头像的添加,今天介绍一下如何实现显示对方在线状态功能。

在文章阿里云物联网Iot设备上下线状态数据流转的设置中介绍了利用数据流转的方式,将设备上线时的状态“online”和下线时的状态“offline”,发送到其他设备,这样就可以实现监测设备上下线状态情况。但这种方法适用于的场景为:监控端需要一直在线,这样设备上下线的状态才能被监控端接收到。假如设备在监控端掉线之后上线,监控端又重新上线,但此时监控端因为没有接收到设备上线的信息,所以无法获知设备是否在线。

而对于聊天工具这类软件,尤其是电脑端的软件(如QQ),两个聊天者是对等的,后上线的那个人在刚上线的时候需要知道对方是否在线。用上述方法,则无法实现这个功能。

上述这两个问题和甲乙公司上班的例子一样,要想让后上线的人也能准确获知先上线的人在线状态,也需要借助第三方,要能把自己上线和离线的状态进行记录,并可供其他人查询。这个第三方就是网络化数据库。

今天介绍一下怎么利用阿里云物联网平台企业版实例自带的Tsdb(时序数据库)结合数据流转来实现这个功能。

二、解决方案

在文章阿里云IoT物模型上报数据流转到实例内TSDB中,介绍了物模型数据流转到企业实列内TSDB的方法。

在文章阿里云物联网Iot设备上下线状态数据流转的设置中,介绍了设备上下线状态数据流转到其他用户的设置的方法。

本例结合上述两种方法,实现把设备上下线状态数据流转到实例内TSDB,用户再通过查询TSDB获取其他设备在线状态。

方案图如下所示:

三、云数据流转解析器配置

1、新建一个数据源

数据源名称为:我的聊聊_设备状态_数据源,添加的topic类型为设备状态变化通知,产品为我的聊聊(之前创建的),设备为全部设备(+)

2、新建一个数据目的

数据目的名称:我的聊聊_设备状态_数据目的,选择操作选“存储到实例内的时序数据存储中”,地域选企业版实例所在服务器,metric数据类型选“字符型”

3、新创建一个解析器

新建解析器名称为:我的聊聊_设备状态_解析器,并且关联数据源:我的聊聊_设备状态_数据源,关联数据目的:我的聊聊_设备状态_数据目的

4、编辑解析器脚本

var data = payload("json");var status = data.status;writeTsdb(1019,timestamp(),"status",status,{"deviceName":deviceName()});//1019为数据目的的id号,以实际创建的数据目的过程中,系统分配的id号为准

四、java程序读取TSDB内设备状态

注意,本例只监测了在自己上线那一瞬时,对方的是否在线,而不是实时监测对方是否在线情况,实时在线的情况,实时状态的监测请参见文章阿里云物联网Iot设备上下线状态数据流转的设置中介绍。实际的聊天软件需要把两种方法结合起来,即可实现检测对方历史在线情况,也可检测实时在线情况。还需要注意,tsdb中存放了流转设备所有上下线状态数据和对应的时间,本例只查询了最近一次的数据。

//tsdb地址
String connectString="ts-2ze************07.hitsdb.rds.aliyuncs.com";
//端口号
String port=32**;
//用户名
String username="iotuser";
//密码
String password="************";
//对方设备id
String devicename="20220002";
//对方设备状态
String status;
//用于显示状态的TextView
TextView tv_title;//tsdb联网操作需要新开线程
new Thread(new Runnable() {@Overridepublic void run() {try {final TSDBConfig config = TSDBConfig.address(connectString, port).basicAuth(username, password)// 网络连接池大小,默认为64。.httpConnectionPool(64)// HTTP 等待时间,单位为秒,默认为90秒。.httpConnectTimeout(90)// IO 线程数,默认为1。.ioThreadCount(1).config();TSDB tsdbClient = TSDBClientFactory.connect(config);//按标签筛选数据。Map<String, String> tags = new HashMap<String, String>();tags.put("deviceName",devicename);String metric = "status";long now = System.currentTimeMillis();LastPointQuery query = LastPointQuery.builder().timestamp(now).backScan(-1).msResolution(true).sub(LastPointSubQuery.builder(metric, tags).build()).build();List<LastDataValue> lastDataValues = tsdbClient.queryLast(query);if (lastDataValues.get(0).getValue() != null) {status=lastDataValues.get(0).getValue().toString();}} catch (Exception e) {e.printStackTrace();}}}).start();tv_title.setText(status);

tsdb的连接地址、端口号、用户名、密码等信息在实例的开发配置/时序存储配置,如下图所示。

五、测试

自己上线瞬时对方处于离线状态

自己上线瞬时对方处于在线状态

利用设备上下线状态数据流转到TSDB的方法实现监测设备历史在线情况相关推荐

  1. 阿里云物联网Iot设备上下线状态数据流转的设置

    要想通过物联网平台实现远程监控设备,那么就要建立监控端设备(比如手机)和被监控端设备的数据交互,在阿里云物联网平台完成这个交互功能的方法就是建立两个设备之间的数据流转,对于设备要流转的物模型数据,阿里 ...

  2. 【阿里云生活物联网架构师专题 ⑧】基于在 SpringBoot Java私有云上接收阿里云物联网设备的各种状态数据,实现m2m流转;

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...

  3. 【阿里云生活物联网架构师专题 ⑨】基于TP6 基于AMPQ协议接收阿里云物联网设备的各种状态数据,实现m2m流转;

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1.esp32接入阿里云物联网平台,实现天猫精灵语音控制: 2.es ...

  4. 互联网服务线上数据迁移的原则和方法

    互联网业务变更非常快,随着业务规模扩大,线上的业务也会涉及重构和迁移.比较难的就是存储迁移,可能从前的存储不适合新的业务模型了,例如从关系型数据库迁移到nosql,或者数据的存储格式发生了巨大的变化. ...

  5. 阿里云IoT物模型上报数据流转到实例内TSDB

    阿里云物联网平台上存储的数据最多为30天,为了能让数据永久保存下来,就需要把物联网平台的数据流转到其他的数据库,对于企业版实例,内部有一个实例内的时空数据库TSDB,正好可以利用.下边就介绍一下物联网 ...

  6. 如何检测设备的联网状态?

    大家好,我是杂烩君. 嵌入式Linux开发中,有时候我们程序需要检测设备的联网状态.这里分享两种方法: 方法一:创建一个socket client尝试去链接一个服务器. 方法二:通过检测sysfs下的 ...

  7. springboot 物联网_【阿里云生活物联网架构师专题】基于在 SpringBoot Java私有云上对接阿里云物联网,实现M2M设备数据流转。...

    - 近处是人生,远处是风景 - 今天与老同学小聚一餐,君子之交淡如水,忆当年青春岁月.年龄越大,志同道合的朋友越来越少了,一声朋友,足以抵过无限岁月! 在儿时,总喜欢做一些天马行空的美梦,想象着可以仗 ...

  8. mqtt 获取 状态_MQTT设备接入及上报数据的命令行模拟器(Java)

    [小宅按]本文提供了两款MQTT模拟器,指导使用模拟器来模拟MQTT设备接入IoT平台及上报数据.附件bmqtt-client.rar为UI版,附件bmqtt-client-shell.rar为命令行 ...

  9. TDengine极简实战:从采集到入库,从前端到后端,体验物联网设备数据流转

    作者:牛晓青 背景 我们的项目涉及物联网相关业务,由于一开始的年少无知,传感器数据采用了 MySQL 进行存储,经过近两年的数据累积,目前几个核心表单表数据已过亿,虽然通过索引优化. SQL 优化以及 ...

最新文章

  1. Win2008远程多用户登陆的配置方法
  2. 交换机自动学习vlan
  3. java项目使用过滤器实例_Java web开发--过滤器篇(详细介绍)
  4. Java线程详解(2)-创建与启动
  5. sql limit不接具体数字_SQL别再秀操作了,这么写吧还是。
  6. 谈谈dpdk应用层包处理程序的多进程和多线程模型选择时的若干考虑
  7. 方法的重载(overload)和重写(override)的区别
  8. Pytorch与tensorflow模型转换
  9. 虚拟化精华问答 | 虚拟化技术分类
  10. hibernate常见错误汇总
  11. CentOS5.5下SVN部署文档
  12. android drawable 对象,Android Drawable开发简介
  13. 矩阵分析 (一) 线性空间和线性变换
  14. java解析多层嵌套json字符串_Redis使用字符串和hash存储JSON,哪个更高效?
  15. 服务器雷达信号处理,雷达信号处理的信息几何方法
  16. python 贴吧小爬虫案例
  17. 12C -- 配置Application Continuity
  18. 神经网络的权重初始化,神经网络的权值和阈值
  19. JAVA基础_IO流_字节流_抽象类OutStreamInputStream
  20. 读史鉴今:女人的12种结局

热门文章

  1. 近期媒体邀约活动总结,注意事项
  2. 《雪国列车》第三季 1月24日回归
  3. Xshell解决中文乱码问题
  4. python如何自动生成流程图
  5. 天津大学计算机科学专业排名,天津大学各专业排名
  6. 学计算机需要培训班吗?我对计算机培训班的浅谈
  7. 通过JAVA编写一个简单的雇员管理系统小项目
  8. C语言实现矿井逃生游戏(附完整源码)
  9. 左连接 ,右连接,内连接和全外连接的4者区别
  10. 我使用的深圳电信ADSL的宽带又要到期了