乐视遥控一个按键,控制开关或者灯的开和关的流,mqtt状态获取 求助大佬

好的,我去问问,谢谢啦

global我做出来了 但是不能实时反馈信息 有点麻烦 每次重启机器后 得动作一次开关 才能获取到状态。医生大佬好像说可以直接获取mqtt设备的状态

你的插座如果有反馈,当然就要使用反馈的状态作为判断了。如果没有的话,就只能自己造一个“假”状态了 :smile:
你这个需求,其实非常普遍,也是最简单的自动化,效果也出奇的好。我是特别喜欢“一键控”,20块钱买个433门铃,根据场景自动控制一些设备。好用,简单,家人更喜欢这种摸得到的“自动化”

nr的homeassistant节点里有个状态节点 就可以主动获取设备的状态 但是我想只通过nr和mqtt实现 不想用第3方平台

最后一个节点

这就简单了啊。我估计你那个设备也是通过mqtt和hass交互的。你node-red加上mqtt in节点不就行了 :sweat_smile:

大佬 qq名啥 加你qq 指点下俺

274947104我的qq

我没有测试,需要你自己再加工一下。但基本上应该长成这个样子

[{"id":"927cac2.687f75","type":"mqtt in","z":"59d2d1d3.ac7c2","name":"","topic":"","qos":"2","datatype":"auto","x":260,"y":780,"wires":[["7e050282.30cecc"]]},{"id":"7e050282.30cecc","type":"function","z":"59d2d1d3.ac7c2","name":"设备状态取出并存入“上下文函数”中","func":"/** 取到mqtt的值后\n * 1. 解析mqtt的json,转换为数值\n * 2. 存入flow.set(\"a\",x) ||[]\n * /\nreturn msg;","outputs":1,"noerr":5,"x":530,"y":780,"wires":[[]]},{"id":"12b62799.3276b8","type":"inject","z":"59d2d1d3.ac7c2","name":"遥控器编码","topic":"","payload":"123","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":430,"y":880,"wires":[["41c3616d.9c6c6"]]},{"id":"41c3616d.9c6c6","type":"function","z":"59d2d1d3.ac7c2","name":"","func":"//取出之前存入的设备状态\na = flow.get(\"a\");\n\n//判断是否为开或关\nif(a == \"开的编码\"){\n    c = 4585532   //关机编码\n}esle{\n    c = 3209523235  //开机编码\n}\nmsg.payload = c\nreturn msg;","outputs":1,"noerr":4,"x":610,"y":880,"wires":[["1dd37243.7bedae"]]},{"id":"1dd37243.7bedae","type":"mqtt out","z":"59d2d1d3.ac7c2","name":"","topic":"","qos":"","retain":"","x":780,"y":880,"wires":[]}]

感谢 我好好研究下

大佬你是不是ha论坛发433遥控控制卧室和大厅 阳台灯的那位大佬

我哪有这么厉害。我其实是一个纯小白,恰好前几天学习了大佬企业微信指令识别+多次问答实现将微信打造成有逼格的公众号?–天气(一)这两个帖子,自己搞了一点东西,摸索出一点皮毛

你发我的这个流 我之前搞出来了 就是我上面发的内容里面说的 这个有个缺点 就是不是主动获取设备状态 每次重启服务器后 要手动开关你的设备才会把状态存到全局变量里

我这里一共有两个流程。第一个流程就是通过mqtt获取设备状态,并把存入到flow.get(“a”)中了。这样,第二个流程就可以调用这个上下文,就知道设备状态了

我现在做的起夜的流也是这个问题 ,重启我的服务器后,要手动开关两个卧室的门让全局变量获取状态后 流才能正常工作 设备少固然没多大问题 如果设备多了 你要每个设备都去开关一次 得多坑啊

flows (5).json (5.2 KB)

这个是我现在正常用的流 你看看可以优化下不 也就是重启服务器后会有要手动开关设备获取状态的问题

要么你就把它存到数据库中,这样就和hass完全一样了。我不知道语句是什么样子的,我记得哪位大佬发过一个教程,node-red数据库存取。应该不难。我是从来不停node-red的,所以没考虑过这个问题 :smile:我做的一些自动控制,一般都不太考虑反馈问题,除非它的反馈特别重要。家里面哪个灯亮着,哪个灯关着。看都看到了啊

设备少 没问题 设备多了 比如100来个 你服务器出问题 或者有需要重启服务器的时候 每个设备都要手动开关获取一次状态 得多坑啊

厉害啊,兄弟,这做的多好啊。我不知道我理解的对不对啊,你是有一堆插座或者类似的东西进行控制。我有几个建议供你参考啊

  1. 设备端的主动反馈。如果是sonoff,默认是5分钟刷新一次,我自己的改成了2分钟。所以,如果node-red主机重启,你不用管他,最多5分钟就会刷新过来。
  2. hass的机制。我理解hass也不是通过记录设备端最后一次状态进行控制的,一般是通过mqtt的保留配置进行判断。而且mqtt的保留很绕的,很多逻辑都是超出我们的想象。
  3. node-red重启后如何决定各设备的状态,它需要一套机制,就像mqtt一样。因为所谓的最后状态并不靠谱。
  4. 其实你的这个问题也曾经是困扰我的问题。但最后我“明白了”。是我多虑了,家庭自动化控制也相当于设备级的自动化控制,要想精准,就必须要拿到设备的实时反馈,否则都是不靠谱的;另一方面,现在家电市场上几乎所有的产品,几乎都“没有反馈”,比如315/433类的,红外类的。大多数家电的控制反馈,一旦断电重启,一定会给一个“初始状态。最重要的一点,也是让我最终放弃大多数的反馈方案的原因,就是我们完全可以看见它的状态。从安全角度,一定要谨记一点,设备在控制系统重启后恢复停止服务前的状态,是最危险的,在企业应用中,是绝对被禁止的。至少在家里可能会半夜自己亮灯 :sweat_smile:。我开始的时候经常半夜亮灯。
    所以,建议你
  5. 查查你的设备mqtt多长时间刷新一次,在这个时间内,能不能忍受这个时间的状态与设备不匹配
  6. 制定一个服务器重启策略,比如每周六凌晨5点。主动重启,清理潜在的垃圾

感谢 医生大佬有做一个一键获取所有设备状态的流 你懂代码 估计很快就懂 但是他做的是zigbee网关的 dc1 tc1 还有其他一些灯具设备的状态的原理应该一样 我不懂代码 只能等着大佬门喂招了

学习是一个过程,而不单单只要结果,学习以下医生,半年前他啥也不懂

大佬 教一招呗 nr如何主动获取mqtt设备的状态,好用于控制设备开和关