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

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

—platform: mqtt name: Battery state_topic: your_mqtt_topic_goes_here device_class: Battery value_template: "{{value_json. json ";电度表[0]['value'] // 1000}}"

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


编辑

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

我会相信这样的话:

value_template: {{value_json(“Batterymeter”)(“0”)。值}}' # 52229 value_template: '{{ value_json["Batterymeter"]["1"].value }}' # 3388 value_template: '{{ value_json["Anemometer"]["0"].value }}' # 0.06 value_template: '{{ value_json["Anemometer"]["1"].value }}' # 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'] }}

这:

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

甚至是这样的:

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

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

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

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

你给传感器分配的主题是什么state_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 | round(3)没有给我3.142
我现在添加最后一个所需的小数的一半,并使用%3格式进行截断

编辑:如果有误差,(第三轮)有时会得到3.14526(奇怪吧?)

这个设置适合我

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

谢谢你的帮助。

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

图像

图像

我是不是漏掉了什么?

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

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

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

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

这到底“对你有用”吗?

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

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

这些都不符合您最初的要求,也不符合您提供的信息。那么它怎么可能正确地工作呢?

@123很抱歉造成混乱,第一篇文章有一个错误,除非是在抄写的时候校对的。她把第一个字母(b)改成了b,去掉了其中的点。我得到这个信息:
{“batterymeter”:[{“价值”:93.968,”单位 ”, “%”}, {“ 价值”:4.097,“单位”:“伏”}]}
这就是为什么我不用除以1000。

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

对不起,更多的“跑题”的东西,但这是我的模板,我离家很远:

“{{%。3f' | format(distance(states.device_tracker. life360_mutley))}}"

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

它曾经是:-

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

即使你忽略了误差,(我现在在家)所以我从顶部得到“0.010”,从底部得到“0.01”,所以它是a)对齐b)更容易阅读和c)避免这些误差。
正如你发现的,错误是不一致的(不总是显示)所以这是我的皮带。大括号和一些字符串

0。010是10米
0。01是…等一下…我马上就到…呃…0.01公里,所以10米,很简单

1像

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

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

为方便日后参考,请尽量发布准确的信息,如有错误,请及时更正。否则会误导那些试图帮助你的人(并且浪费他们解决错误问题的时间)。

祝你好运。