你好
我从json格式的MQTT传感器获得消息,这是关于如何提取一个值的提示,以及如何将传感器添加到HA。
这就是信息
电池
{“Batterymeter”:[{“价值”:52229年,”单位 ”, “%”}, { “ 价值”:3388年,“单位”:“伏”}]}
风传感器
{“风速计”:[{“价值”:0.06“单位”,“米/秒”},{“价值”:0.22“单位”:“km / h”}]}

我需要你的提示关于你想要提取的值。例如,如果你想要Battery的第一个值,MQTT Sensor及其模板应该是这样的:

- 平台:MQTT名称:电池态_topic:your_mqtt_topic_goes_here device_class:电池value_template:“{{value_json.batterymeter [0] ['value'] // 1000}}”

该模板获取第一个值(52229)除以1000,然后丢弃剩余的值52.传感器的device_class为电池所以Lovelace UI将使用电池图标显示它,并报告值为52%


编辑

您应该知道您提供的两个示例都不是有效的JSON格式。伟德国际官方app下载苹果版第一个单元后面应该有一个冒号(),而不是逗号(',')

我会相信这样的话:

value_template:'{{value_json [barthymeter“] [”0“]。value}}'#52229 value_template:'{{value_json [”batterymeter“] [”1“]。值}}'#3388 value_template:'{{value_json [“风速计”] [“0”]。值}}'#0.06 value_template:'{{value_json [“风速计”] [“1”]。值}'#0.22

但这是一个部分猜测

不,这样不行。
使用以下格式@ 123.假如。

在你的格式中,“电池表”前面少了一个点。另外,“Batterymeter”不需要在括号和引号内。您还需要删除0和1附近的引号,使用引号它将被解释为一个字符串,但您需要一个int。

我用的格式
@ 123.建议过,但没有用。没有从传感器读取数据。

有效:
value_template:'{{value_json.batterymeter [0] .value}}'
value_template:'{{value_json.batterymeter [1] .value}}'
得到52229%和3388v。我怎么让它得到52%和3。3v?

我没有看到任何问题@ 123.的建议。

我在模板编辑器中测试了它:

什么不起作用?

编辑:仔细检查您的JSON有效载荷,因为您发布的那些没有有效的JSON,@ 123.我已经指出了这一点。

1就像

这:

{{value_json.batterymeter [0] ['值']}}

这:

{{value_json.Batterymeter[0]。值}}

甚至这个:

{{value_json [' Batterymeter '][0](“价值”)}}

在功能上是相等的,并将产生相同的结果。

我不知道你做了什么让它失败了但我可以向你保证它。我现在知道你做了什么让它失败了。你用过batterymeter在模板中代替Batterymeter.接收数据中的键名是Batterymeter这正是您必须在模板中引用它的方式。换句话说,JSON键名是区分大小写的。

结果的原因是52229,我是52,是因为您的模板不执行整数除法1000.如果你回顾我之前的文章,你会看到我解释了这部分。

你给传感器分配的主题是什么endic_topic.

电池水平:

{{value_json value_template:”。batterymeter[0] .value // 1000 }}"

电压:

value_template:“{{(value_json。batterymeter[1] .value / 1000) | round(1) }}"

但它是3。4v,不是3。3v:眨眼:

是吗?
任何截断值总是给出下限
我一直怀疑圆()自从:-
3.1415926536 |圆形(3)没有给我3.142
我现在添加最后一个所需的小数的一半,并使用%3格式进行截断

编辑:epsilon错误(圆形(3))有时会给3.14526(奇怪的呵呵?)

这个设置适合我

  • 平台:mqtt
    名称:WS电池
    state_topic:电池
    device_class:电池
    value_template:“{{value_json.batterymeter [0] .value}}”
    unit_of_measurement:“%”

谢谢你的帮助。

肯定是弄错了,根本就没有点。
{“Batterymeter”:[{“价值”:93.968,”单位 ”, “%”}, { “ 价值”:4.097,“单位”:“伏”}]}

图像

图像

我是不是漏掉了什么?

我也是这么想的。
我第一次在pi 3上安装HA读取cpu温度(需要除以1000,然后四舍五入到2dp,得到45.21度
A1发现,我很高兴

我移动了安装(字面上复制了配置),我的传感器现在读取(说)41.1032度,甚至四角到2dp

我离家的距离传感器(3dp)也显示出奇怪的结果(不一致)

这就是为什么我现在使用格式选项来避免这些“所谓的”epsilon错误
搜索一下,你可能会发现我的帖子和其他一些帖子

这到底“对你有用”吗?

您提供了一个JSON数据的示例,键名是Batterymeterbatterymeter.JSON关键名称区分大小写,但您的模板是指的batterymeter.您发布的数据是否有误?

此外,您需要一个百分比值,但您的模板直接读取5位数字,而不进行转换。这意味着它报告52229%。

没有其中符合您原始要求,也没有符合您提供的信息。那么它怎么可能正常工作?

@ 123.对于困惑,遗憾的是,第一篇文章中存在错误,除非校对在复制期间会这样做。她改变了第一个字母(b到b)并删除了点。我收到此消息:
{“batterymeter”:[{“价值”:93.968,”单位 ”, “%”}, {“ 价值”:4.097,“单位”:“伏”}]}
这就是为什么我不必将结果划分为1000。

我想首先,你应该学习如何正确地格式化代码,这是非常重要的,防止很多混乱。
这里, 11点。

对不起,更多'关闭主题'的东西,但这是我的模板,为我的距离: -

“{{{'%.3f'|格式(距离(距离)(solual.device_tracker.life360_muttley))}”

所以在dp前得到km,在dp后得到米

它曾经是:-

{{distance(states.device_tracker. life360_mutley) | round(3)}}"

Even if you ignore the epsilon errors, ( I’m at home at the moment ) so i get “0.010” from the top one and I get “0.01” from the bottom, so it’s a) aligned b) easier to read and c) avoids those epsilon errors.
正如你发现的,错误是不一致的(不总是显示)所以这是我的皮带。大括号和一些字符串

0。010是10米
0.01是......挂在......我会在一分钟内到达...... errr!...... 0.01的千米如此...... 10米 - 它更容易

1就像

这也不可能是正确的,因为它是无效的JSON。它包含了我在你第一个帖子中发现的相同的错误。后面应该有一个冒号“单元”不是一个逗号。

我不确定复制粘贴错误如何改变大写和删除字符。

对于未来的参考,请尝试发布准确的信息,如果错误,请纠正它。否则它会误导人们试图帮助你(并浪费他们的时间解决错误问题)。

祝你好运。