下面是两种接收Sonoff RF桥发布的有效载荷的策略(与Tasmota固件一起闪过)。
策略1:value_template
在这种策略中,所有传感器都订阅射频桥发布的相同主题。这个主题的结构取决于你在配置射频桥时如何定义它。这个例子将使用' tele/RF_Bridge/RESULT '。将其更改为您为桥设置的任何内容。
因为所有传感器都订阅了相同的主题,所以传感器将接收用于另一个传感器的有效载荷。当这种情况发生时,它value_template
必须产生一个有效的状态.如果没有,Home Assis19463331伟德国际tant将报告以下警告消息:“没有为实体找到匹配的键”。传感器的value_template
必须总是返回一个有效的状态.
对于MQTT二进制传感器,默认为payload_on
是在
和payload_off
这是从
(大写)。另一方面状态binary_sensor可以是在
或从
(小写)。记住这个重要的区别,我们可以用它来构造value_template
这确保有效负载总是匹配的的东西什么也没有。
在下面的例子中,如果有效负载包含既不2 c8d0a
或2 c8d0e
,它报告binary_sensor的当前的状态。换句话说,无论它在有效载荷中接收到什么value_template
总是报告有效状态。
- platform: mqtt name: 'Bathroom Door' state_topic: 'tele/RF_Bridge/RESULT' value_template: >- {% if value_json.RfReceived. state_template: 'tele/RF_Bridge/RESULT' value_template: >Data == '2C8D0A' %} {{'ON'}} {% elif value_json.RfReceived. Data == '2C8D0A' %} {{'ON'}} {% elif value_json.RfReceived。Data == '2C8D0E' %} {{'OFF'}} {% else %} {{states('binary_sensor.浴室门')| upper}} {% endif %} device_class: door
如果你有一个传感器不报告一个从
然后你可以通过使用off_delay
选择。
在这个例子中,Data = E5D30E
表示运动传感器为在
但是没有可用的命令来指示传感器何时启动从
.我已经设置off_delay: 15
所以运动传感器会自动设置为从
经过15秒。
- platform: mqtt name: ' hall Motion' state_topic: 'tele/RF_Bridge/RESULT' value_template: >Data == 'E5D30E' %} {{'ON'}} {% else %} {{states('binary_sensor.hallway_motion') | upper}} {% endif %} off_delay: 15 device_class: motion
这种策略对一些传感器很有效,但伸缩性不好。这有一个潜在的性能损失,因为所有传感器都订阅了相同的主题。如果你有十个传感器,那么RF桥发布的每个有效载荷将由所有十个传感器进行评估。换句话说,每个有效载荷被处理10次。
策略2:信号分离器
与之前的策略相比,解复用提供了性能优势。它使用自动化分离(多路复用)射频桥的单一主题成多个主题,每个传感器一个。每个传感器都订阅了自己的主题,只接收为它准备的有效载荷。
与之前的策略不同,对于10个传感器,每个有效载荷处理10次,此策略只处理每个有效载荷两次。有效载荷首先由自动装置处理,然后由传感器处理。
要做到这一点,您必须配置Home Assistant以使用python_scrip19463331伟德国际t组件。完整的说明可以在www.19463331.compython_script集成的文档.以下是基本步骤:
- 添加
python_script:
到你的configuration.yaml
文件。
- 创建如下子目录:
配置/ python_scripts
- 重新启动家里的助19463331伟德国际理。
创建一个新文件配置/ python_scripts
被称为rfbridge_demux.py
包括以下内容:
d = {2 c8d0a:[“sensor1”,“上”,“真正的”),“2 c8d0e”:[‘sensor1’,‘了’,'真的'],“E5D30E”:[‘sensor2’,‘上’,'假'],“30 d8a0”:[‘sensor3’,‘上’,'假']}p = str (data.get(“有效载荷”)如果p不是没有:如果p在d.keys (): service_data ={“主题”:“home /{}”.format (d [p][0]),“有效载荷”:“{}”.format (d [p][1]),“qos”:0,“保留”:“{}”.format (d [p] [2])}:service_data ={“主题”:“home /未知”,“有效载荷”:“{}”.format (p)、“qos”:0,“保留”:“假”}记录器。warning(' Received unknown RF command: {}'.format(p)) hasss .services. services调用('mqtt', 'publish', service_data, False)
显然你得修改字典。d
)所以它包含你的射频桥的命令。字典中每个条目的格式很简单:
“有效载荷”:[“话题”,“状态”,“保留”)
因为我们使用的是python_script,所以您可以将传感器添加到字典中,而不必重新启动Home Assistant。19463331伟德国际字典的设计使您可以指定传感器的主题是否应该保留其有效负载。
因为门传感器报告了这两个在其状态中,自动化可以使用保留:真
当发布到接触传感器的主题。当Home19463331伟德国际 Assistant重启时,它将重新订阅联系人传感器主题,并从代理接收其当前(保留的)状态。![:+1: : + 1:](//www.sz-tiancheng.com/community/images/emoji/twitter/+1.png?v=9)
另外两个传感器(运动传感器和按钮)没有报告从
状态。我们使用off_delay
选项自动将它们重置为从
.然而,这种技术确实可以不发布从
到它们各自的MQTT主题(即一次设置为在
话题总会出现在
).因此自动化应该发布到他们的主题使用保留:假
.否则,如果使用保留:真
,当你重启Home Assistant19463331伟德国际时,它会错误地将这些传感器设置为在
.![:-1: : 1:](//www.sz-tiancheng.com/community/images/emoji/twitter/-1.png?v=9)
这是必需的自动化。别忘了换衣服主题:
到您为射频桥配置的主题。
—alias: 'rfbridge_demultiplexer'触发器:—platform: mqtt topic: tele/RF_Bridge/RESULT action:—service: python_script。rfbridge_demux data_template: payload: '{{trigger.payload_json.RfReceived.Data}}'
配置二进制传感器变得非常简单。没有value_template
是必要的。
- platform: mqtt name: 'Bathroom Door' state_topic: 'home/sensor1' device_class: Door - platform: mqtt name: '过道运动' state_topic: 'home/sensor2' off_delay: 5
请注意
如果你使用策略2并且有一个以上的RF桥,你可以简单地配置所有它们来发布到相同的主题。或者,给每个人分配一个独特的主题,然后automation.rfbridge_demultiplexer
,为每个主题创建一个MQTT触发器。
编辑
如果您希望使用Node-Red执行多路解复用任务(而不是建议的python_script)这里提供了一个合适的函数节点.
编辑
对配置python_script集成的说明进行了微调。
编辑
在python_script中,修改如下:
p = data.get(“有效载荷”)
:
p = str (data.get(“有效载荷”))
为了适应0.118的自动类型转换,其中数字字符串被自动转换为整数。