【问题标题】:How to get data from a especif Time period in InfluxDB Node-RED如何在 InfluxDB Node-RED 中获取特定时间段的数据
【发布时间】:2022-01-01 21:19:09
【问题描述】:

我正在尝试从 InfluxDB v1.x 读取数据,但仅限于特定时间段,示例:

从 2021-11-09/14:00:00 到 2021-11-10/14:00:00 获取 temper01 的值。

我知道这个代码是可能的:

"WHERE time >= '2021-11-09T14:00:00Z' AND time <= '2021-11-10T14:00:00Z'" 但我想知道是否可以使用变量而不是直接时间戳。

我试过这段代码:

msg.query = "SELECT time , Temper01, Temper02, Temper03 FROM "
+  global.get("ID_device1")
+ " WHERE time >= "
+   msg.payload;
+ " AND time <= '2021-11-18T00:00:00.000Z' " ;

但是msg.payload 的值并不重要,它只是从存储的第一个数据中获取数据,当我尝试单引号 msg.payload 时,我收到 invalid operation: time and *influxql.VarRef are not compatible" 错误消息。

【问题讨论】:

  • 是的,就像您的previous 问题一样,诀窍是确保变量格式正确。
  • 我直接声明了一个带有时间戳的字符串进行测试,我现在按部分构建字符串,但这次我收到此错误:`错误:发生 400 错误请求错误:{" error":"错误解析查询:无效持续时间"} `
  • 这是我正在做的声明:timestart = '2021-11-08T14:00:00Z';
  • 添加一些调试节点,直接比较有效和无效
  • 我发现了错误,但我无法得到正确的行为,我先做开始日期,但无论加载多少 var 它只是从一开始就开始获取数据,味精.payload.startdate 它的格式正确,它似乎正常工作

标签: javascript timestamp influxdb


【解决方案1】:

假设msg.paylaod 看起来像2020-11-18T00:00:00.000Z,那么您没有引用要插入查询的时间字符串。

应该是这样的:

msg.query = "SELECT time , Temper01, Temper02, Temper03 FROM "
+  global.get("ID_device1")
+ " WHERE time >= '"
+   msg.payload;
+ "' AND time <= '2021-11-18T00:00:00.000Z' " ;

区别在于'在第3行字符串的末尾和在最后一行字符串的开头。

直接将工作版本与不工作的版本进行比较会显示这一点。

【讨论】:

  • 它有效,对不起,我真的是一个使用 node-red 和 javascript 的完整初学者,在你的帮助下,我发现我使用的节点在 msg.payload 上给出了这个:“1635897600000” .但在调试器中它转换为实际时间戳,所以我认为输出是正确的。我真傻啊
  • 非常感谢,现在我只需要找出如何将此数字转换为时间戳,以便查询可以读取。你帮了我很多,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
  • 2021-12-23
相关资源
最近更新 更多