我正在使用我的新Raspberry Pi进行测试,并从Node-red开始,我遇到了一个障碍。
我尝试制作一个循环,当循环触发时结束,但当它进入while循环时,它不会重新读取“alarm”变量并无限循环。
context.data = context.data || {};
switch (msg.topic){
case "alarma":
context.data.alarma = msg.payload;
msg = null;
break;
case "pi/13":
context.data.contacto = msg.payload;
msg = null;
break;
}
if(context.data.alarma === true && context.data.contacto == 1)
{
while(context.data.alarma === true)
{
context.data.alarma = msg.payload;
node.send({payload:true});
}
}
return {payload:"stop"};
我已经尝试将所有代码放在“do-while”循环中但是它失败了,我也尝试将整个开关块放回到while和同样的东西。有什么想法吗?
我正在制作一个报警系统,为此我有一个开关(用于激活和停用报警)和一个门内的触点。如果警报被激活并且触点打开,警报响起(我返回true),如果我再次关闭触点,警报将被断开(这不是我假装的)我希望只有在警报停用开关被激活时才会断开。如果我没有关闭开关,我希望它返回true,这样闹钟就会继续响。我也试图引入一个延迟,所以while循环不是那么快,但仍然无法正常工作。我想要的是知道如何在循环中实际变量。
谢谢!
答案 0 :(得分:0)
那是因为变量可能永远不会真正改变,该循环只会运行得如此严密而且永远不会返回,因此Node-RED将无法处理任何会改变变量的消息。
它还将发送带有payload: true
你根本不应该需要循环,只需{if}返回return {payload: true}
中的{payload: 'stop'}
(这应该是假的而不是停止?)
if(context.data.alarma === true && context.data.contacto == 1)
{
return {payload:true});
} else {
return {payload:"stop"};
}