Command line
Command line 集成提供了执行特定命令以获取数据或控制设备的功能。
强烈建议您使用单引号 ' 包裹命令,这样可以确保命令中可使用所有字符,并降低意外转义的风险。如果要在已用单引号包裹的命令中包含单引号,请将其写成两个单引号:''。
对于传感器来说,虽然 value_template 是可选的,但如果因为输出是 JSON 而设置了 json_attributes,建议您同时在 value_template 字段中提供一个模板,以便给传感器提供状态值,否则其状态将始终为 unknown。请参阅下方示例。
故障排除
由于 Command line 集成仅支持 YAML 配置,因此要启用扩展日志,需要在 configuration.yaml 文件中设置日志配置。
在配置中加入以下示例,会将默认日志级别设置为 info,并将 command_line 的日志级别设置为 debug。完成后,重启 Home Assistant 以使其生效。
虽然 sensor 和 binary_sensor 的 command 支持模板,但只有命令参数可以使用模板。这意味着命令名称本身不能由模板生成,而必须直接写出。
Using templates
For incoming data, a value template translates incoming JSON or raw data into a valid payload.
Incoming payloads are rendered with possible JSON values, so when rendering, the value_json variable can be used to access attributes in a JSON-based payload. Otherwise, the value variable can be used for non-JSON payloads.
The this variable can also be used in the template. The this attribute refers to the current entity state of the entity.
Further information about the this variable can be found in the template documentation.
Example value template with JSON:
With the following payload:
Template {{ value_json.temperature | round(1) }} renders to 21.9.
二进制传感器
要在您的安装中使用命令行二进制传感器,请将以下内容添加到 configuration.yaml 文件中:
cover
command_line cover 平台会在 cover 上升、下降和停止时执行特定命令。它允许您将任何能够通过命令行控制的 cover 类型集成到 Home Assistant 中。
要在您的安装中启用命令行 cover,请将以下内容添加到 configuration.yaml 文件中:
通知
command_line 平台允许您使用外部工具从 Home Assistant 发送通知。消息将通过标准输入(STDIN)传入。
要在您的安装中启用这些通知,请将以下内容添加到 configuration.yaml 文件中:
有关如何使用通知,请参阅自动化入门。
传感器
要启用它,请将以下内容添加到 configuration.yaml 中:
开关
command_line 开关平台会在其打开和关闭时执行特定命令。它很可能是最强大的平台之一,因为它允许您将任何可以通过命令行控制的开关类型集成到 Home Assistant 中,甚至包括调用其他脚本!
要启用它,请将以下内容添加到 configuration.yaml 中:
关于 cover 和 switch 的 name,请注意:
friendly_name 和 object_id 的用法已弃用,而 slug 化后的 name 也会被用作标识符。
请使用 unique_id 来支持通过 UI 修改名称;如果需要,也可将 slug 化后的 name 用作标识符。
执行命令
command 会在配置目录中执行。
如果您使用的是 Home Assistant Operating System,这些命令会在 homeassistant 容器环境中执行。因此,如果您要测试或调试脚本,最好也在该容器环境中进行,以获得相同的运行环境。
:::
当命令以退出码 0 结束时,其输出(stdout)会被用作 value。如果命令返回非 0 退出码,或因 command_timeout 而终止,则结果只会记录到 Home Assistant 日志中,传感器值不会更新。
二进制传感器平台示例
本节提供了一些如何使用 command_line 传感器的实际示例。
SickRage
检查 SickRage 实例的状态。
检查 RasPlex
检查 RasPlex 是否 online。
另一种解决方案如下:
也可以考虑使用 ping sensor 作为上述示例的替代方案。
检查系统服务是否正在运行
正在运行的服务会列在 /etc/systemd/system 中,并可通过 systemctl 命令进行检查:
可以使用二进制命令行传感器来检查:
cover 平台示例
传感器平台示例
本节提供了一些如何使用此传感器的实际示例。
CPU 温度
借助 proc 文件系统,您可以获取系统的各种详细信息。这里我们关注的是 CPU 温度。请将类似以下内容添加到 configuration.yaml 文件中:
获取上游 Home Assistant 版本信息
您可以直接在前端(开发者工具 -> 关于)查看当前运行的 Home Assistant 版本。Home Assistant 的发行版本可在 Python Package Index 上获取,因此可以据此查询当前最新版本。
从远程文本文件读取值
如果您的设备会将数值存储在可通过 HTTP 访问的文本文件中,那么您可以采用与上一节相同的方法。不同的是,这里不是读取 JSON 响应,而是直接获取传感器值。
使用外部脚本
此示例与 aREST sensor 实现的功能相同,但使用的是外部 Python 脚本。它可以帮助您了解如何与公开 RESTful API 的设备进行交互。
下面展示了用于获取数值的单行脚本。当然,您也可以直接在 configuration.yaml 文件中使用它,但需要额外注意引号的处理。
实际使用的脚本(保存为 arest-value.py)如下所示。
要使用该脚本,您需要将类似以下内容添加到 configuration.yaml 文件中。
在 command: 中使用模板
command 配置变量支持使用模板。如果您想将某个特定传感器的状态作为参数传递给外部脚本,就可以使用此功能。
在命令输出中使用 JSON 属性
此示例展示了如何通过 value_json 和 json_attributes,使用一个传感器获取多个值(其中附加值作为属性提供)。
JSONPlaceholder 提供了用于测试的示例 JSON 数据。在下面的示例中,JSONPath 用于定位 JSON 文档中的属性。JSONPath Online Evaluator 提供了一个测试 JSONPath 的工具。
开关平台示例
在状态变化时更改图标
此示例演示了如何在状态变化时使用模板更改图标。该图标引用了其自身状态。
aREST 设备
下面的示例与 aREST switch 实现的功能相同。
它使用命令行工具 curl 来切换一个可通过 REST 控制的引脚。
基于此示例,在 UI 中您会看到 friendly_name 为 “Kitchen Light”。不过,其 identifier 是 arest_pin_four,因此 entity_id 会是 switch.arest_pin_four,这也是您在automation或 API 调用中会使用的值。
关闭本地主机
此开关会关闭运行 Home Assistant 的系统。
:::warning 此开关会立即关闭您的主机,不会有确认提示。
控制 VLC 播放器
此开关会控制本地 VLC 媒体播放器(来源)。
控制 Foscam 运动传感器
此开关可控制支持 CGI 命令的 Foscam 网络摄像头的运动传感器(来源)。
此开关支持 statecmd,用于检查当前的运动检测状态。
- 将
admin和password替换为具有 “Admin” 权限的 Foscam 用户账户 - 将
ipaddress替换为您的 Foscam 本地 IP 地址
操作
可用操作:reload。
操作:重新加载
command_line.reload 操作用于重新加载所有 command_line 实体。
此操作不接受任何数据属性。

