『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 6667|回复: 5

[已解决] 请教关于Node-red,function中筛选msg对应信息的问题

[复制链接]

2

主题

34

帖子

179

积分

注册会员

Rank: 2

积分
179
金钱
145
HASS币
0
发表于 2019-12-6 11:46:16 | 显示全部楼层 |阅读模式
本帖最后由 yyxp1989 于 2019-12-7 13:49 编辑

初次接触Nodered,从事件中判断设备id,触发是小米人感,从xiaomi_aqara.motion事件中判断id,if条件是不是格式有问题没写对,反馈false
-------------------------------------------

触发事件:

{"event_type":"xiaomi_aqara.motion","entity_id":"binary_sensor.motion_sensor_158d0001e637b6","event":{"entity_id":"binary_sensor.motion_sensor_158d0001e637b6"}}


function节点:

var a = {payload:msg.payload.entity_id};
if(a == "binary_sensor.motion_sensor_158d0001e637b6")
{
    msg.payload = a ;
   return msg;
}
else
{
   msg.payload = false ;
   return msg;
}


调试窗口输出:
false


-------------

我把条件换成
if(a != -1)
{
    msg.payload = a ;
   return msg;
}

调试窗口输出
payload: "binary_sensor.motion_sensor_158d0001e637b6"

是正常输出设备id的

----------------
刚刚我看了lanhemeng的小米空气净化器接入Homekit的流程
改写为if (msg.payload.entity_id == 'binary_sensor.motion_sensor_158d0001e637b6')  条件成立,可以正常执行了。。。
所以
为什么
var a = {payload:msg.payload.entity_id};
if(a == "binary_sensor.motion_sensor_158d0001e637b6")
这样写条件不成立,还是不明白。。。
1111.jpg
回复

使用道具 举报

27

主题

2143

帖子

8930

积分

论坛元老

Rank: 8Rank: 8

积分
8930
金钱
6782
HASS币
30

论坛元老

发表于 2019-12-6 13:20:37 | 显示全部楼层
本帖最后由 情非殇 于 2019-12-6 13:22 编辑

同一个元素同一时间只会有一个内容,不可能有2个内容
上一个节点的内容是上一个节点的,不会传递到下一个节点之后重复
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2019-12-6 13:52:59 | 显示全部楼层
搞不懂楼主想干嘛?如果单纯想判断过来的事件ID 是不是 binary_sensor.motion_sensor_158d0001e637b6 图片就写对了吧?有什么问题?
Nero
回复

使用道具 举报

2

主题

34

帖子

179

积分

注册会员

Rank: 2

积分
179
金钱
145
HASS币
0
 楼主| 发表于 2019-12-6 18:39:46 | 显示全部楼层
本帖最后由 yyxp1989 于 2019-12-6 18:57 编辑
neroxps 发表于 2019-12-6 13:52
搞不懂楼主想干嘛?如果单纯想判断过来的事件ID 是不是 binary_sensor.motion_sensor_158d0001e637b6 图片 ...

我重新整一下,您看我下面的代码,就想从事件中判断设备id,触发是小米人感,从xiaomi_aqara.motion事件中判断id,if条件是不是格式有问题没写对,反馈false
-------------------------------------------

触发事件:

{"event_type":"xiaomi_aqara.motion","entity_id":"binary_sensor.motion_sensor_158d0001e637b6","event":{"entity_id":"binary_sensor.motion_sensor_158d0001e637b6"}}


function节点:

var a = {payload:msg.payload.entity_id};
if(a == "binary_sensor.motion_sensor_158d0001e637b6")
{
    msg.payload = a ;
   return msg;
}
else
{
   msg.payload = false ;
   return msg;
}


调试窗口输出:
false


-------------

我把条件换成
if(a != -1)
{
    msg.payload = a ;
   return msg;
}

调试窗口输出
payload: "binary_sensor.motion_sensor_158d0001e637b6"

是正常输出设备id的

----------------
刚刚我看了lanhemeng的小米空气净化器接入Homekit的流程
改写为if (msg.payload.entity_id == 'binary_sensor.motion_sensor_158d0001e637b6')  条件成立,可以正常执行了。。。
所以
为什么
var a = {payload:msg.payload.entity_id};
if(a == "binary_sensor.motion_sensor_158d0001e637b6")
这样写条件不成立,还是不明白。。。


回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2019-12-7 08:16:49 | 显示全部楼层
本帖最后由 neroxps 于 2019-12-7 08:23 编辑
yyxp1989 发表于 2019-12-6 18:39
我重新整一下,您看我下面的代码,就想从事件中判断设备id,触发是小米人感,从xiaomi_aqara.motion事件中 ...

var a = {payload:msg.payload.entity_id};
改成 var a = msg.payload.entity_id
{payload:msg.payload.entity_id} 是一个对象,而msg.payload.entity_id 存的是字符串。两个不同的东西不能比较。

或者你比较的时候这样写:
if(a.payload == "binary_sensor.motion_sensor_158d0001e637b6")

你新建一个隐身模式的chrome 页面,把他丢到浏览器 F12 Console 就知道了。

msg={"payload":{"entity_id":"binary_sensor.motion_sensor_158d0001e637b6"}}
var a = {payload:msg.payload.entity_id}
typeof a
typeof msg.payload.entity_id


222.jpg
Nero
回复

使用道具 举报

2

主题

34

帖子

179

积分

注册会员

Rank: 2

积分
179
金钱
145
HASS币
0
 楼主| 发表于 2019-12-7 13:49:19 | 显示全部楼层
neroxps 发表于 2019-12-7 08:16
var a = {payload:msg.payload.entity_id};
改成 var a = msg.payload.entity_id
{payload:msg.payload.e ...

原来如此,搞明白了,谢谢大神!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 17:15 , Processed in 0.058635 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表