首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点-红色JavaScript布尔切换

节点-红色JavaScript布尔切换
EN

Stack Overflow用户
提问于 2016-01-13 22:19:46
回答 4查看 12.2K关注 0票数 0

我有一个声音传感器,它将一个mqtt消息发送到节点-红色和节点-红色发送一个新的mqtt消息到模块电源或trun关灯。这是相同的红外码电源或关灯。我的目标是知道它什么时候开机什么时候关机。所以我尝试使用一个简单的布尔代码,但是它不能工作,因为它不能保存以前的状态。

我找到了不同的解决方案,但是这些人把新的状态保存在一个"cookie“上,问题是,在Node中,我们找不到这样的东西。我无法安装节点,因为我使用云托管的Node-Red(https://fred.sensetecnic.com/)

我测试了许多不同的代码,我选择了这个代码,因为它很容易理解我想要做的事情:

代码语言:javascript
复制
var value = true;

if (msg.payload === "sensor detection"){
    if (value === true){
        !value;
        msg.payload = "off";
    }else{
        !value;
        msg.payload = "on";
    }
}
return msg;

我在这里发帖是因为我真的不知道怎么做,我尝试了很多不同的代码,现在我在谷歌上找不到更多的代码。我不是很好,也不知道Javascript中所有不同的技巧,所以我希望有经验的人能给我一些有趣的信息来找到解决方案。

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-13 22:26:30

您需要使用上下文对象在函数节点的执行之间存储状态:

代码语言:javascript
复制
context.value = context.value || true;

if (msg.payload === "sensor detection"){
    if (context.value === true){
        !context.value;
        msg.payload = "off";
    }else{
        !context.value;
        msg.payload = "on";
    }
}
return msg;
票数 3
EN

Stack Overflow用户

发布于 2016-01-22 00:59:12

这是我的最后代码:

代码语言:javascript
复制
//i changed "sensor detection" for "input"
if(msg.payload === "input"){

if(context.global.state === false){
  msg.payload = true;  
}else{
  msg.payload = false;
}
context.global.state = msg.payload;
}
return msg;

还有另一个函数用于存储第一个值:

代码语言:javascript
复制
context.global.state = false;

下面是最后一个节点红色代码:

代码语言:javascript
复制
[{"id":"f49168ea.0b6e98","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1175,"y":1664,"z":"a08c8e03.5f737","wires":[]},{"id":"33e86259.cc179e","type":"function","name":"Main function","func":"if(msg.payload === \"input\"){\n\nif(context.global.state === false){\n  msg.payload = true;  \n}else{\n  msg.payload = false;\n}\ncontext.global.state = msg.payload;\n}\nreturn msg;","outputs":1,"noerr":0,"x":883,"y":1712,"z":"a08c8e03.5f737","wires":[["f49168ea.0b6e98"]]},{"id":"9a2c2fc6.65d3d","type":"function","name":"First value","func":"//push \"Start\" only once after deployed.\ncontext.global.state = false;\nreturn msg;","outputs":1,"noerr":0,"x":381,"y":1714,"z":"a08c8e03.5f737","wires":[["33e86259.cc179e"]]},{"id":"b81c9765.47e368","type":"inject","name":"Input(mqtt etc)","topic":"","payload":"input","payloadType":"string","repeat":"","crontab":"","once":false,"x":361,"y":1648,"z":"a08c8e03.5f737","wires":[["33e86259.cc179e"]]},{"id":"c77a0446.3885f8","type":"inject","name":"","topic":"","payload":"Start","payloadType":"string","repeat":"","crontab":"","once":false,"x":146,"y":1714,"z":"a08c8e03.5f737","wires":[["9a2c2fc6.65d3d"]]}]

这些页面也帮助了我:http://noderedguide.com/index.php/2015/11/06/node-red-lecture-6-intermediate-flows-2/和这一页(它对我的个人代码非常有用):lights?lang=en

票数 0
EN

Stack Overflow用户

发布于 2018-10-18 09:33:41

我找了很久了!这事得谢谢你

这是我的贡献,使用一个以上的切换功能:

代码语言:javascript
复制
/* 
To use more toggle functions we give them
a unique name here
*/ 
var fname = "toggle1";

if(msg.payload === "input"){

if(context.get(fname) === false){
  msg.payload = true;  
}else{
  msg.payload = false;
}
context.set(fname, msg.payload);
}
return msg;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34778174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档