标签:# <标签:0 x00007fc3e7516500 >

快把我逼疯了……

我一直在努力使您的第二次策略(多路分解器)调整到我的Sonoff RF桥以无济于事。

我的舰桥上闪着埃斯普尔纳坚定,直接攻击选项。https://github.com/xoseperez/espurna/wiki/hardware-itead-onoff-rf-bridge---direct-hack.这是伟大的工作

对于传感器,Espurna可以发布MQTThttps://github.com/xoseperez/espurna/wiki/RFBRIDGE在两个方面。

A-有效载荷字符串Ex: " C001016118005699BB "
B- json有效负载字符串如下:

{“rfin”:“C001016118005699BB”,“时间”:“2020-04-10 11:44:44”,“mac”:“C4:5F: 77: A2:87: C8”,“主机”:“Sonoff-RF-Bridge-1”,“知识产权”:“10.12.16.130”、“id”:8}

我更喜欢A选项,它减少了射频通信。

在HA我设置了一个RF-Bridge Sensor:“Sensor.esprooba_rf_bridge_1”,它使用value_template从传入的rf中取出状态:

value_template:> {%如果不是值%}“无数据”{%endif%} {{value [-6:]}}

因为只有最后6个值不改变每个状态设备。Rest是定时值。

我可以检查传感器。espurna_rf_bridge_1改变状态:5699BB 749D55等。

现在,回到问题。第二次策略集。当MQTT正在传入或传感器时,我可以看到自动化触发。esplesha_rf_bridge_1状态已更改。这两项工作。触发rfbridge_demux.py没问题。如果i从p = data.get('payload')到p = 5699bb,则触发PIR传感器。所以,rfbridge_demux.py也在工作。

要简短地说,我无法实现的是自动化,动作,data_template解析到rfbridge_demux.py的数据。尽管我不熟练在Jinja和Python中,我试过踢掉没有工作船只的船只,包括JSON模板,前:

{% set temp_json = {"data": states('sensor.espurna_rf_bridge_1')} %}

但我真的不能得到它。

我也尝试了B,设置Espurna发布json格式,并使用它解析rfin 3最后字节到脚本,但我不能得到一个data_template。

请,谁能帮我解析rfbridge_demux.py的正确值?

我猜你很难改变rfbridge_demultiplexer.自动化。
如果您使用的是有效负载字符串(您的选项a),则需要从中提取数据有效载荷, 就是这样:

有效载荷:{{触发器。负载[6:]}}’

你好谢谢。
不,行不通。我刚刚试过了。
我认为"data.get(' payload ')应该期望json提取"数据"值。但是完全没有蟒蛇的技巧。

这是什么意思?
顺便说一下,模板周围的引号不是单一的 - 使用单/双引号。

对不起。我的错。
我的意思是,我试了你建议的数据模板,它没有工作。
除此之外,如果您查看rfbridge_demux.py代码,您会发现:
p = data.get(“有效载荷”)
我猜的是将JSON有效载荷解析为rfbridge_demux.py的价值数据,但我根本不确定。

我觉得你不了解我。不存在这样的事情“它不工作”。
想象一下,自己看到一名医生,因为你不适。他问你们各种各样的问题,了解什么原因,但是你对他所说的就是“我不适,请帮我”。
请阅读在我们继续之前。

就一个有效载荷哈的变量放入特殊数据字典,用于传递服务数据python_scripts.那有效载荷变量在HA发现时形成有效载荷:废话内部服务数据(数据data_template.)。

我真的很感激你对我的帮助
我知道我的英语不如我想要的那么好。
我以为我在理解你并尽我所能总结这个问题。
拜托,让我再试一次。

Hassio运行。码头工人。DSM (Synology)
HA 0.108.2

x86_64
dev 错误的
Docker. 真正的
哈西岛 真正的
os_name Linux
os_version. 4.4.59+
Python_version. 3.7.7
时区 欧洲/马德里
版本 0.108.2
virtualenv 错误的

配置:

从我automations.yaml

-  ID:'1586546570081'别名:RF主题MQTTdesMultiplexación说明:'''''''触发器: - 平台:MQTT主题:PISO / SOOFF-RF-Bridge-1 / RFIN条件:[]动作: -  DATA:DATA_TEMPLATE:PAYLOAD:'{{trigger.payload [-6:]}}'服务:python_script.rfbridge_demux

rfbridge_demux.py

d = {'8349aa':['pir_hacia_entrada','开','false']} p = data.get('payload')如果p不是none:如果p在d.keys()中:service_data = {'主题':'home / {}'。格式(d [p] [0]),'有效负载':'{}'。格式(d [p] [1]),'qos':0,'保留':'{}'。格式(d [p] [2])} else:service_data = {主题':'home /未知','payload':'{}'。格式(p),'qos':0,'保留':'false'} logger.warning('收到的未知rf命令:{}'。格式(p))hass.services.call('mqt','publish',service_data,false)

从binary_sensors.yaml

—platform: mqtt name:“PIR_hacia_entrada”state_topic:“home/PIR_hacia_entrada”device_class: motion off_delay: 5

我的尝试:

我发表了MQTT 88888888349aa主题:Piso/Sonoff-RF-Bridge-1/rfin

从UI注册:

16:35:29 ESPURNA RF-Bridge-1-C44F33A287C4 RFIN changed to unknown
16:35:27射频主题MQTT desmultiplexación已被触发
16:34:48射频主题MQTT desmultiplexación关闭

日志上没有错误

如果你需要更多信息,请告诉我。

你的射频主题MQTT desmultiplexación是不正确的:你不应该使用data_template.内部数据
这是正确的

- id: '1586546570081' alias: RF Topic MQTT desmultiplexación description: " trigger: - platform: MQTT Topic: Piso/Sonoff-RF-Bridge-1/rfin condition: [] action: - service: python_script. php . php . php。Rfbridge_demux data_template: payload: '{{触发器。负载[6:]}}’
1像

好主!
傲慢到艾哈迈德克!
它´s工作!

18:00:39.pir_hacia_cocina.清除(未检测到运动)
18:00:35.ESPURNA RF-Bridge-1-C44F33A287C4 RFIN更改为未知
18:00:33pir_hacia_cocina.检测到的运动
18:00:33rf主题mqttdesmultiplexación被触发的
18:00:25rf主题mqttdesmultiplexación关闭

花了5天时间尝试所有类型的数据模板,却从未意识到Jinja是自己添加数据的!

谢谢,谢谢,非常感谢!

对不起。我是新手。
如果我通过UI设置操作,它会在YAML编辑模式下更改。添加数据。行动YAML行动

例如:每张图片两个动作。首先是yaml模式。第二张照片被视为用户UI。
我是在用户界面上做的。在YAML模式下,数据:已添加。

对于未来的参考,它不是“jinja”,它添加了任何东西。这是UI中的编辑器。

你的朋友和“电晕”的家庭时间在教导我们的激烈模式。
请继续工作。

恭喜!
下次请发布您的配置,而不是解释您所做的内容。此外,邮政编码而不是图像。

我和策略2一起玩过,这效果很多。但是,我想知道是否可以修改Python脚本以发布传感器值而不是二进制值,这将显着减少多按钮遥控器所需的实体数量。

我目前有这个:

d = {'9d4899':['level-1','上','false'],'dac012':['dac012',''false','false'],'aaaaaa':[电池-g1','上','false'],'c2c112':['泄漏-g2','上','false'],'bbbbbb':['batter-g2','上','false'],'88C212':['泄漏-G3','ON','FALSE'],'88C22D','88C22D','ON'ON','FALSE'],'25C112':[泄漏-g4','上','false'],'25c12d':['battery-g4','上','false'],'bb5dfd':['bb5dfd':['门铃-1','上','false'],'EBA782':['门铃-2','上','false'],'7de426':['doorswitch-1','开','false'],'ed600e':[运动-1','上','false'],'cef526':['motion-2','上','false'],'df9be1':['remote-1a','上','false'false'],'df9be2':['remote-1b','上','false'],'df9be4':['远程-1c','上','false'],'df9be8':['远程-1d','上','false'],'a051b4':['远程 -  2a','上','false'],'a051b2','a051b2':['remote-2b','上','false'],'a051b1':['remote-2c','上','false'],'a051b8':['remote-2d','开','false'],'e140c8':[远程-3a','上','false'],'e140c4':['remote-3b','上','false'],'e140c2':['远程-3c','上','false'],'e140c1':['remote-3d','上','false'],'e140cc':['远程3e','上','false'],'e140c9':['remote-3f','上','false'],'e140c5':['remote-3g','上','false'],'e140c3':['remote-3h','上','false']}

我想实现如下目标:

E140C8: [' remote-3 ',”按钮”,“假”),“E140C4”:[‘remote-3’,”按钮B”,“假”),“E140C2”:[‘remote-3’,‘按钮C’,'假'],“E140C1”:[‘remote-3’,”按钮D ', '假'],“E140CC”:[‘remote-3’,”按钮E ', '假'],“E140C9”:[‘remote-3’,”按钮F ', '假'],“E140C5”:[‘remote-3’,‘按钮G’,'假'],“E140C3”:[' remote-3 ', '按钮H ', '假']

我当前的代码实现这在一个传感器模板是这样的:

- 平台:MQTT名称:'remote3'#sonoff 8按钮白色远程状态_topic:'tele / rfbridge01 /结果'expire_after:2 value_template:>  -  {%如果value_json.rfreceived.data =='e140c8'%}按钮a {%elif value_json.rfreceived.data =='e140c4'%}按钮b {%elif values_json.rfreceived.data =='e140c2'%}按钮c {%elif value_json.rfreceived.data =='e140c1'%}按钮d {%elif value_json.rfreceived.data =='e140cc'%}按钮e {%elif values_json.rfreceived.data =='e140c9'%}按钮f {%elif value_json.rfreceived.data =='e140c5'%}按钮g{%elif value_json.rfreceived.data =='e140c3'%}按钮h {%else%%}未知{%endif%}

我目前使用两个4键式远程和一个8键式远程,这样的解决方案将减少16到3所需的实体数。

干杯!

也许我误解了你的要求,但你需要做的就是修改字典的内容。例如,更改此项:

'df9be1':['remote-1a','上','false'],'df9be2':['远程-1b','上','false'],'df9be4':['remote-1c','上','false'],'df9be8':['remote-1d','上','false'],

:

“DF9BE1”:[' remote-1 ',”按钮”,“假”),“DF9BE2”:[‘remote-1’,”按钮B”,“假”),“DF9BE4”:[‘remote-1’,‘按钮C’,'假'],“DF9BE8”:[‘remote-1’,”按钮D ', '假'),

然后只需修改现有的MQTT Sensor,以侦听适当的主题(我假设是这样的主题家庭/ remote1),并删除已经存在的value_template。

—平台:mqtt名称:'Remote1' state_topic: 'home/ Remote1' expire_after: 2

你是相当正确的-这确实工作,并大大削减YAML。很多谢谢!

大家好,

即时从许多时间使用这个python脚本,但我不知道我有多少时间errror:

2020-05-07 15:42:52信息(mainthread)[homeassistant.components.automation]执行[sys] demux rf传感器2020-05-07 15:42:52信息(mainthread)[homeassistant.components.automation] [Demux RF传感器:运行脚本2020-05-07 15:42:52信息(Mainthread)[homeassistant.components.automation] [sys] demux rf传感器:执行步骤呼叫服务2020-05-07 15:42:52错误(mainthread)[homeassistant.components.automation] [sys] demux rf传感器:执行脚本错误。POS 1的Call_Service意外错误:错误呈现数据模板:undefinedError:'dict对象'没有属性'rfreceived'回溯(最近调用最后一个):file“/usr/src/homeassistant/homeassistant/helpers/template.py”,第222行,在Async_Render返回编译编译。render(kwargs).strip()文件“/usr/local/lib/python3.7/site-packages/jinja2/environment.py”,line 1090,rense self.environment。hange_exception()文件“/usr/local/lib/python3.7/site-packages/jinja2/environment.py”,第832行,在hange_exception reraise中(* rewrite_traceback_stack(source = source))文件“/ usr / local / lib/ python3.7/site-packages/jinja2/_compat.py“,第28行,在reraise提升值.with_traceback(tb)文件”<模板>“,第1行,顶级模板代码文件”/ usr / local/lib/python3.7/site-packages/jinja2/sandbox.py“,line 407,在getattr value = getattr(obj,属性)jinja2.exceptions.undefindedError:'dict对象'在处理过程中没有属性'rfreceive'以上例外,另一个例外CURRED:回溯(最近调用最后一个电话):文件“/usr/src/homeassistant/homeassistant/helpers/service.py”,第132行,在async_prepare_call_from_config template.render_complex(conf conf [conf_service_data_template],变量)文件“/ usr / src中/homeassistant/homeassistant/helpers/template.py“,第71行,render_complex return {key:render_complex(项目,变量)为key,项目中的项目.Items()}文件”/ usr / src / homeassistant / homeassistant / excomeassistant / expersist/template.py“,第71行,在 return {key:render_complex(项目,变量)for key.items()}文件”/usr/src/homeassistant/homeassistant/helpers/template.py“,第73行,在render_complex返回值中.Async_render(变量)文件”/usr/src/homeassistant/homeassistant/helpers/template.py“,第224行,在Asysync_render raint teptionError(err)homeassistant.exceptions.templateError:undefinedError:'dict对象'没有属性'rfreceived'上述例外是以下例外的直接原因:traceback(最近的呼叫last):文件“/usr/src/homeassistant/homeassistant/helpers/script.py”,第153行,在_async_step self,f“_async_ {cv.determine_script_action(self._action)} _步”文件“/ usr / src /homeassistant/homeassistant/helpers/script.py", line 623, in _async_call_service_step *self._prep_call_service_step(), blocking=True, context=self._context File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 252, in _prep_call_service_step return async_prepare_call_from_config(self._hass, self._action, self._variables) File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 135, in async_prepare_call_from_config raise HomeAssistantError(f"Error rendering data template: {ex}") from ex homeassistant.exceptions.HomeAssistantError: Error rendering data template: UndefinedError: 'dict object' has no attribute 'RfReceived' 2020-05-07 15:42:52 ERROR (MainThread) [homeassistant.helpers.condition] Error during template condition: UndefinedError: 'dict object' has no attribute 'RfReceived' 2020-05-07 15:42:52 ERROR (MainThread) [homeassistant.helpers.condition] Error during template condition: UndefinedError: 'dict object' has no attribute 'RfReceived' 2020-05-07 15:42:52 ERROR (MainThread) [homeassistant.helpers.condition] Error during template condition: UndefinedError: 'dict object' has no attribute 'RfReceived' 2020-05-07 15:42:52 ERROR (MainThread) [homeassistant.helpers.condition] Error during template condition: UndefinedError: 'dict object' has no attribute 'RfReceived' 2020-05-07 15:53:23 INFO (MainThread) [homeassistant.components.automation] Executing [SYS] DEMUX RF Sensor 2020-05-07 15:53:23 INFO (MainThread) [homeassistant.components.automation] [SYS] DEMUX RF Sensor: Running script 2020-05-07 15:53:23 INFO (MainThread) [homeassistant.components.automation] [SYS] DEMUX RF Sensor: Executing step call service 2020-05-07 15:53:23 INFO (SyncWorker_17) [homeassistant.components.python_script] Executing rfbridge_demux.py: {'payload': '0x14000C'}

这是我的自动化:

- alias: '[SYS] DEMUX RF Sensor'触发器:rfbridge_demux data_template: payload: '{{trigger.payload_json.RfReceived.Data}}'

这是我的脚本:

d = {#codici rf每个tasmota每omg #codici sensori eystali per tasmota'0x4ad50a':['portone','上','true'],'0x4ad50e':['portone','关闭','true'],'0x4AD506':['portone_bat','上','false'],#'0x4a820a',#'0x4a820a':['fin_sala','on','true'],'0x4a820e':['fin_sala','Off','真'],'0x4a8206':['fin_sala_bat','上','false'],#'0xd9140a',#'0xd9140a':['fin_bagnop','上','true'],'0xd9140e','0xd9140e':['fin_bagnop','关闭','真'],'0xd91406':['fin_bagnop_bat','上','false'],#'0x5c5a0a',#'0x5c5a0a':['fin_bagnog','上','true'],'0x5c5a0e':['fin_bagnog','关闭','true'],'0x5c5a06':['fin_bagnog_bat','上','false'],#'0x44350a',#'0x44350a':['fin_camera_vale','开','真实'],'0x44350e':['fin_camera_vale','关闭','true'],'0x443506','0x443506','0x443506','fin_camera_vale_bat','上','false'],#'0xd8040a':['fin_camera_cri','On','真实'],'0xd8040e':['fin_camera_cri','off','true'],'0xd80406','0xd80406':['fin_camera_cri_bat','上','false'],#'0x3f7d0a','0x3f7d0a':['fin_cucinap','on','true'],'0x3f7d0e':['fin_cucinap','关闭','true'],'0x3f7d06':['fin_cucinap_bat','上','false'],#'0xd85c0a':['fin_cucinag','开','真实'],'0xd85c0':['fin_cucinag','关闭','true'],'0xd85c06','0xd85c06','fin_cucinag_bat','上','false'],#'0x4aae0a':['fin_camera_letto','On','真'],'0x4aae0e':['fin_camera_letto','关闭','真'],'0x4aae06':['fin_camera_letto_bat','上','false']} p =数据。获取('payload')如果p不是none:如果p在d.keys()中:service_data = {主题':'home / rf433 / {}'。格式(d [p] [0]),'有效载荷':'{}'。格式(d [p] [1]),'qos':0,'保留':'{}'。格式(d [p] [2])} else:service_data = {'主题':'home /未知','payload':'{}'。格式(p),'qos':0,'保留':'false'} logger.warning('收到的未知rf命令:{}'。格式(p))hass.services.call('mqtt','publish',service_data,false)

脚本重新发送MQTT消息也和所有工作良好,但我不想删除这个错误。

有人也有这个错误吗?

下面是经过编辑的日志摘录,显示了自动化的正常执行,其中它接收正确格式的数据,并将接收到的值传递给python_script。

15:53:23执行[sys] demux rf传感器15:53:23 [sys] demux rf传感器:运行脚本15:53:23 [sys] demux rf传感器:执行步骤呼叫服务15:53:23信息执行rfbridge_demux.py:{'payload':'0x14000c'}

这是一项摘录的摘录,显示了自动化的异常执行。

15:42:52 execution [SYS] DEMUX RF Sensor 15:42:52 [SYS] DEMUX RF Sensor: Running script 15:42:52 [SYS] DEMUX RF Sensor: Running script 15:42:52 [SYS] DEMUX RF Sensor: execution step call service 15:42:52 ERROR [SYS] DEMUX RF Sensor: ERROR Executing script。错误渲染数据模板:UndefinedError: 'dict object' has no attribute 'RfReceived'

在自动化过程中出现错误。有时它接收的数据不是所需的格式,也就是说它缺少RfReceived属性。

错误渲染数据模板:UndefinedError: ' dict object '没有属性'RfReceived '

似乎有时代的话题TELE / TEMP /结果正在收到一条不是预期格式的消息(即它缺少RfReceived属性)。它没有这样的格式:

{" RfReceived ":{“同步”:14110年,“低”:480年,“高”:1380年,“数据”:“12345 e”,“RfKey”:“没有一个”}}

我不知道为什么会这样。我所能提供的只是修改自动化,以便它拒绝缺少RfReceived属性的消息。

- 别名:'[sys] demux rf sensor'触发: - 平台:mqtt主题:tele / temp /结果条件: - 条件:模板value_template:> {{trigger.payload_json定义并触发.payload_json.rfreceived是定义和触发的.payload_json.rfreceived.data是定义的}} arction: -  service:python_script.rfbridge_demux data_template:poyload:'{{trigger.payload_json.rfreceived.data}}'

嗨……寻求帮助。我已经配置了脚本,但得到的错误。
找不到错误。

rfbridge_demultiplexer:执行脚本错误。数据模板:UndefinedError: ' trigger '是未定义的