MQTT 更新

mqtt 更新平台允许您将可能通过 MQTT 暴露安装的固件/软件及其最新版本的设备集成到 Home Assistant 中,作为一个更新实体。每当接收到配置中的 topic 下的消息时,实体将在 Home Assistant 中更新。

配置

要在您的安装中启用 MQTT 更新,请将以下内容添加到您的 configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件中:

# 示例 configuration.yaml 条目
mqtt:
  - update:
      state_topic: topic-installed
      latest_version_topic: topic-latest

Configuration Variables

availability list (Optional)

订阅以接收可用性 (在线/离线) 更新的 MQTT 主题列表。不得与 availability_topic 一起使用。

payload_available string (Optional, default: online)

表示可用状态的有效负载。

payload_not_available string (Optional, default: offline)

表示不可用状态的有效负载。

topic string Required

订阅以接收可用性 (在线/离线) 更新的 MQTT 主题。

value_template template (Optional)

Defines a template to extract device’s availability from the topic. To determine the devices’s availability result of this template will be compared to payload_available and payload_not_available.

availability_topic string (Optional)

订阅以接收可用性 (在线/离线) 更新的 MQTT 主题。不得与 availability 一起使用。

availability_mode string (Optional, default: latest)

当配置 availability 时,这控制设置实体为 available 所需的条件。有效条目为 allanylatest。如果设置为 all,必须在所有配置的可用性主题上接收到 payload_available,然后实体才会标记为在线。如果设置为 any,则必须在至少一个配置的可用性主题上接收到 payload_available,然后实体才会标记为在线。如果设置为 latest,则最后接收到的在任何配置的可用性主题上的 payload_availablepayload_not_available 控制可用性。

availability_template template (Optional)

Defines a template to extract device’s availability from the availability_topic. To determine the devices’s availability result of this template will be compared to payload_available and payload_not_available.

command_topic string (Optional)

MQTT 主题以发布 payload_install 开始安装过程。

device map (Optional)

关于这个更新所涉及的设备的信息,以将其与 设备注册表 关联。仅在设置了 unique_id 时有效。必须至少提供 identifiers 或 connections 中的一个以识别设备。

configuration_url string (Optional)

可以管理此设备配置的网页链接。可以是 http://https:// 或内部的 homeassistant:// URL。

connections list (Optional)

设备与外界连接的列表,作为元组 [connection_type, connection_identifier] 的列表。例如,网络接口的 MAC 地址: "connections": [["mac", "02:5b:26:a8:dc:12"]]

hw_version string (Optional)

设备的硬件版本。

identifiers list | string (Optional)

唯一标识设备的 ID 列表。例如序列号。

manufacturer string (Optional)

设备的制造商。

model string (Optional)

设备的型号。

model_id string (Optional)

设备的型号标识符。

name string (Optional)

设备的名称。

serial_number string (Optional)

设备的序列号。

suggested_area string (Optional)

如果设备尚未在某个区域,建议一个区域。

sw_version string (Optional)

设备的固件版本。

via_device string (Optional)

在该设备和 Home Assistant 之间路由消息的设备的标识符。此类设备的示例包括集线器或子设备的父设备。用于在 Home Assistant 中显示设备拓扑。

device_class device_class (Optional)

用于在前端设置图标的更新的 类型/类device_class 可以是 null

display_precision integer (Optional, default: 0)

更新进度显示的小数位数。

enabled_by_default boolean (Optional, default: true)

定义实体在首次添加时是否应启用的标志。

encoding string (Optional, default: utf-8)

接收和发布消息的有效负载的编码。设置为 "" 以禁用对传入有效负载的解码。

entity_category string (Optional)

实体的 类别

entity_picture string (Optional)

实体的图片 URL。

icon icon (Optional)

图标 为实体。

json_attributes_template template (Optional)

Defines a template to extract the JSON dictionary from messages received on the json_attributes_topic.

json_attributes_topic string (Optional)

订阅以接收 JSON 字典有效负载的 MQTT 主题,然后将其设置为实体属性。在此主题上接收到消息时隐含 force_update 当前选择状态。

latest_version_template template (Optional)

Defines a template to extract the latest version value. Use state_topic with a value_template if all update state values can be extracted from a single JSON payload.

latest_version_topic string (Optional)

订阅以接收最新版本更新的 MQTT 主题。如果所有更新状态值可以从单个 JSON 有效负载中提取,请使用 state_topicvalue_template

name string (Optional)

更新的名称。如果仅设备名称相关,则可以设置为 null

object_id string (Optional)

用于自动生成 entity_id 的替代 name

payload_install string (Optional)

用于启动安装过程的 MQTT 有效负载。

platform string Required

必须为 update。仅在 MQTT 自动发现设备消息 中允许和必需。

qos integer (Optional, default: 0)

接收和发布消息时使用的最大 QoS 级别。

release_summary string (Optional)

版本说明或变更日志的摘要。这是适合最多 255 个字符的简要更新描述。

release_url string (Optional)

最新版本可用的完整版本说明的 URL。

retain boolean (Optional, default: false)

发布的消息是否应该设置保留标志。

state_topic string (Optional)

订阅以接收状态更新的 MQTT 主题。状态更新可以是 JSON 或一个简单字符串,其值为 installed_version。当检测到 JSON 有效负载时,JSON 有效负载的状态值应提供 installed_version 并可以选择性地提供: latest_versiontitlerelease_summaryrelease_urlentity_picture URL。为了允许进度监控,in_progress (布尔值以指示更新正在进行中),或 update_percentage (浮点值以指示进度百分比) 可能是 JSON 消息的一部分。

title string (Optional)

软件或固件更新的标题。这有助于区分设备或实体名称与已安装软件的标题。

unique_id string (Optional)

唯一标识此更新的 ID。如果两个更新具有相同的唯一 ID,Home Assistant 将引发异常。

value_template template (Optional)

Defines a template to extract the installed_version state value or to render to a valid JSON payload on from the payload received on state_topic.

Important

确保您的主题完全匹配。some-topic/some-topic 是不同的主题。

示例

这是 Shelly Gen1 设备的更新实体配置示例。

# 示例 configuration.yaml 条目
mqtt:
  - update:
      name: "Shelly Plug S 固件更新"
      title: "Shelly Plug S 固件"
      release_url: "https://shelly-api-docs.shelly.cloud/gen1/#changelog"
      entity_picture: "https://brands.home-assistant.io/_/shelly/icon.png"
      state_topic: "shellies/shellyplug-s-112233/info"
      value_template: "{{ value_json['update'].old_version }}"
      latest_version_topic: "shellies/shellyplug-s-112233/info"
      latest_version_template: "{% if value_json['update'].new_version %}{{ value_json['update'].new_version }}{% else %}{{ value_json['update'].old_version }}{% endif %}"
      device_class: "firmware"
      command_topic: "shellies/shellyplug-s-112233/command"
      payload_install: "update_fw"

JSON 也可以作为 state_topic 有效负载使用。请注意,此功能还允许处理和显示实时进度信息。

{
  "installed_version": "1.21.0",
  "latest_version": "1.22.0",
  "title": "设备固件",
  "release_url": "https://example.com/release",
  "release_summary": "我们出色的固件的新版本",
  "entity_picture": "https://example.com/icon.png"
}

简单的进度状态更新示例:

{
  "installed_version": "1.21.0",
  "latest_version": "1.22.0",
  "title": "设备固件",
  "release_url": "https://example.com/release",
  "release_summary": "我们出色的固件的新版本",
  "entity_picture": "https://example.com/icon.png",
  "in_progress": true
}

更新百分比状态更新示例:

{
  "installed_version": "1.21.0",
  "latest_version": "1.22.0",
  "title": "设备固件",
  "release_url": "https://example.com/release",
  "release_summary": "我们出色的固件的新版本",
  "entity_picture": "https://example.com/icon.png",
  "update_percentage": 78
}

发布 null 以重置更新百分比状态更新:

{
  "installed_version": "1.22.0",
  "latest_version": "1.22.0",
  "title": "设备固件",
  "release_url": "https://example.com/release",
  "release_summary": "我们出色的固件的新版本",
  "entity_picture": "https://example.com/icon.png",
  "update_percentage": null
}

JSON 中的值是可选的,但必须在以下模式中有效:

Configuration Variables

installed_version string (Optional)

安装的软件或固件版本。

latest_version string (Optional)

可用的最新软件或固件版本。

title string (Optional)

可用的软件或固件更新的标题。

release_summary string (Optional)

可用的软件或固件更新的摘要。

release_url string (Optional)

指向软件发布说明的 URL。

entity_picture string (Optional)

指向更新的图片 URL,作为实体图片。

in_progress boolean (Optional, default: false)

布尔值用于报告更新是否正在进行。

update_percentage integer | float (Optional)

介于 0 和 100 之间的数字,用于报告更新过程。null 值重置进行中的状态。

对于上述 JSON 有效负载示例,update 实体配置应如下所示:

# 示例 configuration.yaml 条目
mqtt:
  - update:
      name: "神奇设备更新"
      title: "设备固件"
      state_topic: "amazing-device/state-topic"
      device_class: "firmware"
      command_topic: "amazing-device/command"
      payload_install: "install"

如果设备/服务以 JSON 格式发送数据,但模式不同,则可以使用 value_template 对 JSON 进行重新格式化。

{
  "installed_ver": "2022.11",
  "new_ver": "2022.12"
}

对于上述 JSON 有效负载,update 实体配置应如下所示:

# 示例 configuration.yaml 条目
mqtt:
   update:
      name: "神奇设备更新"
      title: "设备固件"
      state_topic: "amazing-device/state-topic"
      value_template: "{{ {'installed_version': value_json.installed_ver, 'latest_version': value_json.new_ver } | to_json }}"
      device_class: "firmware"
      command_topic: "amazing-device/command"
      payload_install: "install"