服务
这是一个简单的 “Hello World” 示例,用于展示注册服务的基础知识。要使用此示例,请创建文件/custom_components/hello_service.py并复制下面的示例代码。
服务可以从自动化中以及前端的 “开发者工具” 服务中调用。
# 你的组件的域。应该等于你的组件的名称。
DOMAIN = 'hello_service'
ATTR_NAME = 'name'
DEFAULT_NAME = 'World'
def setup(hass, config):
"""当Home Assistant加载我们的组件时调用设置函数。"""
def handle_hello(call):
name = call.data.get(ATTR_NAME, DEFAULT_NAME)
hass.states.set('hello_service.hello', name)
hass.services.register(DOMAIN, 'hello', handle_hello)
# 返回布尔值以指示初始化成功。
return True
通过将以下内容添加到你的configuration.yaml中来加载组件。当你的组件加载时,应该有一个新服务可供调用。
# configuration.yaml条目
hello_service:
打开前端,在侧边栏中,点击开发者工具部分的第一个图标。这将打开 “调用服务” 开发者工具。在右侧,找到你的服务并点击它。这将自动填充正确的值。
点击 “调用服务” 现在将不带任何参数调用你的服务。这将导致你的服务使用默认名称 “World” 创建一个状态。如果你想指定名称,你必须指定参数。添加以下 JSON 作为服务数据,然后再次点击 “调用服务”。
{
"name": "Planet"
}
服务现在将用 “Planet” 覆盖先前的状态。
总结
主要介绍了在 Home Assistant 开发中服务的使用方法,通过一个简单的 “hello_service” 组件示例来阐述。首先明确了服务可从自动化和前端开发者工具调用,接着展示了如何在组件中注册服务,包括定义组件域、服务处理函数,在setup函数中使用hass.services.register注册服务,并在处理函数中根据传入参数设置状态。然后说明了如何在configuration.yaml中加载组件使其服务可用,以及如何在前端开发者工具中找到并调用服务,还演示了如何传递参数来改变服务执行结果,为开发者提供了服务开发与使用的基本流程,有助于开发者在 Home Assistant 项目中实现自定义服务功能,增强系统的可扩展性和交互性。