设备查询
设备查询
ThingsCloud 支持将设备属性当前值作为查询条件,对设备进行高级查询。这有助于您对项目中的大量设备进行不同维度的动态查询和归类管理。
什么是设备查询?
设备查询功能是 ThingsCloud 内置的设备查询引擎,支持用 SQL 风格的查询语句来描述设备属性值的匹配条件,从而快速找到符合条件的设备。
设备查询是非常重要的设备管理工具,当您在项目中管理的设备不断增多,用好设备查询,可以大大提升设备管理效率。
如何使用设备查询
在设备列表中使用设备查询
在 ThingsCloud 控制台的设备列表中,打开设备查询对话框,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/articles/2023/20230529212954_a64c341b0c0e38edd37d7020ac96da6a.png)
在查询条件中,可以输入 SQL 风格的条件语句,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/articles/2023/20230529213152_473ecd11eae62beb0bcf5871c9f3ad85.png)
以上查询语句表示查询温度属性 temperature
大于 25 摄氏度,且告警属性 alarm_state
为 ON 的设备。
在设备列表中,设备查询还可以和其它设备筛选条件组合使用,例如:设备在线状态、设备类型、设备组、设备活跃时间等。
保存设备查询
您可以将查询语句保存为设备查询,并管理多个设备查询,在使用的时候直接选择。
![](https://img-1300291923.cos.accelerate.myqcloud.com/articles/2023/20230529213543_b37965bc5d27d8d7a72c73afedec0427.png)
管理设备查询
进入控制台的 设备 > 设备查询,可以看到所有保存的设备查询,如下图:
![](https://img-1300291923.cos.accelerate.myqcloud.com/articles/2023/20230529213607_d2863eea7e5084df6efedf1c0e74789d.png)
点击一个设备查询,便可以进入查看当前符合查询条件的所有设备。
![](https://img-1300291923.cos.accelerate.myqcloud.com/articles/2023/20230529214139_c37b27f094941aefae5f41b3b22f0d7a.png)
查询条件示例
可以说,要想熟练使用设备查询,关键在于能否写出正确的查询语句,好在这并不难,相信您很快就可以掌握。
这一部分我们通过一系列的示例,带您快速熟悉一些常用的查询语句写法。
- 查询温度大于 25 摄氏度的设备。
temperature > 25
- 查询温度大于 25 摄氏度,并且湿度小于 45% 的设备。
temperature > 25 and humidity < 45
- 查询温度大于 25 摄氏度,或者湿度小于 45% 的设备。
temperature > 25 or humidity < 45
- 查询温度大于 25 摄氏度或者湿度小于 45%,同时土壤EC值小于 1.2 的设备。
(temperature > 25 or humidity < 45) and soil_ec < 1.2
- 查询温度大于或等于另一个属性
temp_max
值的设备。
temperature >= temp_max
- 查询温度大于 25 摄氏度,并且温度属性值在今天有更新。
temperature > 25 and temperature.ts > time("day")
- 查询温度大于 25 摄氏度,并且温度属性值在最近 24 小时内有更新。
temperature > 25 and temperature.ts > time() - duration(24, "h")
- 查询继电器闭合,且最后更新为属性下发,且最后更新时间在最近两天以内的设备。
relay = true and relay.type = "push" and relay.ts > time() - duration(2, "d")
查询条件语法参考
提示
设备查询引擎并不支持 SQL 的所有标准语法,请参考以下说明,在我们支持的范围内编写查询语句。
比较运算符
名称 | 说明 |
---|---|
= | 比较属性值是否等于指定的值 |
<> | 比较属性值是否不等于指定的值 |
!= | 比较属性值是否不等于指定的值(同上) |
> | 比较属性值是否大于指定的值 |
>= | 比较属性值是否大于或等于指定的值 |
< | 比较属性值是否小于指定的值 |
<= | 比较属性值是否小于或等于指定的值 |
逻辑运算符
名称 | 说明 |
---|---|
and | 连接两个比较运算,必须同时成立 |
or | 连接两个比较运算,至少有一个成立 |
属性扩展信息
属性扩展信息用于访问属性的相关信息,支持以下信息:
属性最后更新时间
名称 | 值类型 | 举例 |
---|---|---|
<属性>.ts | 数值 | 1328874398806 |
表示属性最后一次更新的时间,使用 Unix Timestamp 毫秒格式。
例如:要查询温度最后上报时间在 5 分钟内,查询条件如下:
temperature.ts > time() - 1000 * 60 * 5
以上的查询语句中,通过 time()
获得当前时间,减去 5 分钟的毫秒数,就是 5 分钟前的时间。也可以使用另一个函数 duration()
,如下:
temperature.ts > time() - duration(5, "m")
内置函数的用法在下边会有介绍。
属性最后更新方式
名称 | 值类型 | 举例 |
---|---|---|
<属性>.type | 文本格式 | report |
表示属性最后一次更新的方式,取值范围如下:
名称 | 说明 |
---|---|
report | 最后一次更新为属性上报 |
push | 最后一次更新为属性下发 |
cloud | 最后一次更新为云端属性更新 |
例如:继电器开关属性 relay 最后一次更新是属性上报,查询条件如下:
relay.type = "report"
内置函数
time()
获得当前时间的 Unix Timestamp 毫秒格式。
time(string)
获得指定时间的 Unix Timestamp 毫秒格式。其中 string
参数的格式说明如下:
参数 | 说明 |
---|---|
YYYY | 指定年, 例如 time("2023") |
YYYY-MM | 指定年、月, 例如 time("2023-01") |
YYYY-MM-DD | 指定年、月、日, 例如 time("2023-01-01") |
YYYY-MM-DD hh | 指定年、月、日、小时, 例如 time("2023-01-01 09") |
YYYY-MM-DD hh:mm | 指定年、月、日、小时、分钟, 例如 time("2023-01-01 09:30") |
YYYY-MM-DD hh:mm:ss | 指定年、月、日、小时、分钟、秒, 例如 time("2023-01-01 09:30:10") |
YYYY-MM-DD hh:mm:ss.SSS | 指定年、月、日、小时、分钟、秒、毫秒, 例如 time("2023-01-01 09:30:10.150") |
year | 当前年的起始时间, 例如 time("year") |
month | 当前月份的起始时间, 例如 time("month") |
week | 本周的起始时间, 例如 time("week") |
day | 今天的起始时间, 例如 time("day") |
hour | 当前小时的起始时间, 例如 time("hour") |
minute | 当前分钟的起始时间, 例如 time("minute") |
second | 当前秒的起始时间, 例如 time("second") |
duration(number, string)
获得指定时间长度的毫秒数,可用在查询条件中的时间运算中。
例如:duration(3, "d")
表示3天的毫秒数,等于 1000*3600*24*3=259200000毫秒
。
这样便可以轻松生成一个 3 天前的时间,用来比较属性最后更新时间。例如:查询温度上报活跃时间在最近 3 天内的设备,如下:
temperature.ts > time() - duration(3, "d")
其中 string
参数的格式说明如下:
参数 | 说明 |
---|---|
y | 年,例如 duration(1, "y") |
M | 月,例如 duration(2, "M") |
w | 星期,例如 duration(1, "w") |
d | 天,例如 duration(3, "d") |
h | 小时,例如 duration(6, "h") |
m | 分钟,例如 duration(30, "m") |