十 Home Assistant 状态

状态
Home Assistant 在状态机中跟踪实体的状态。状态机的要求很少:
每个状态都与一个由实体 ID 标识的实体相关。这个 ID 由一个域和一个对象 ID 组成。例如light.kitchen_ceiling。你可以组成任何域和对象 ID 的组合,甚至覆盖现有状态。
每个状态都有一个主要属性来描述实体的状态。对于灯来说,例如可以是 “开” 和 “关”。只要是字符串(如果不是将被转换),你可以在状态中存储任何你想要的内容。
你可以通过设置属性来存储关于一个实体的更多信息。属性是一个字典,可以包含你想要的任何数据。唯一的要求是它是 JSON 可序列化的,所以你限于数字、字符串、字典和列表。
在你的组件中使用状态
这是一个关于如何创建和设置状态的简单教程 / 示例。我们将在一个名为 “hello_state” 的组件中进行操作。这个组件的目的是在前端显示给定的文本。
首先,创建文件/custom_components/hello_state.py并复制下面的示例代码。

"""
支持在前端显示文本。

有关此组件的更多详细信息,请参阅https://home-assistant.io/cookbook/python_component_basic_state/上的文档。
"""
import logging

_LOGGER = logging.getLogger(__name__)

DOMAIN = 'hello_state'
DEPENDENCIES = []

def setup(hass, config):
    """设置Hello State组件。 """
    _LOGGER.info("'hello state'组件已准备就绪!")

    return True

在文件头我们决定添加一些细节:一个简短的描述和指向文档的链接。
我们想要进行一些日志记录。这意味着我们导入 Python 日志记录模块并创建一个别名。
组件名称等于域名。
目前这个组件没有依赖项。详细信息请查看依赖项部分。
setup函数将负责我们组件的初始化。这个组件只会写入一条日志消息。请记住,稍后你有几种严重级别的选项:
_LOGGER.info(msg)
_LOGGER.warning(msg)
_LOGGER.error(msg)
_LOGGER.critical(msg)
_LOGGER.exception(msg)
如果一切正常,我们返回True。
将组件添加到你的configuration.yaml文件中。

hello_state:

在 Home Assistant 启动或重启后,组件将在日志中创建一个条目。

16-03-12 14:16:42 INFO (MainThread) [custom_components.hello_state] 'hello state'组件已准备就绪!

下一步是引入配置选项。用户可以通过configuration.yaml将配置选项传递给我们的组件。为了使用它们,我们将使用传递给setup方法的config变量。

import logging

_LOGGER = logging.getLogger(__name__)

DOMAIN = 'hello_state'
DEPENDENCIES = []

CONF_TEXT = 'text'
DEFAULT_TEXT = 'No text!'

def setup(hass, config):
    """设置Hello State组件。 """
    # 从配置中获取文本。如果未提供名称,则使用DEFAULT_TEXT。
    text = config[DOMAIN].get(CONF_TEXT, DEFAULT_TEXT)

    # 状态的格式为DOMAIN.OBJECT_ID
    hass.states.set('hello_state.Hello_State', text)

    return True

要使用我们组件的最新功能,更新configuration.yaml文件中的条目。

hello_state:
  text: 'Hello, World!'

由于DEFAULT_TEXT变量,即使configuration.yaml文件中没有使用text:字段,组件也将启动。通常有一些必需的变量。检查是否提供了所有必需的配置变量很重要。如果没有,设置应该失败。我们将使用voluptuous作为助手来实现这一点。下面的代码展示了关键部分。

import voluptuous as vol

import homeassistant.helpers.config_validation as cv

CONFIG_SCHEMA = vol.Schema({
    DOMAIN: vol.Schema({
      vol.Required(CONF_TEXT): cv.string,
    })
}, extra=vol.ALLOW_EXTRA)

现在,当配置中缺少text:时,Home Assistant 将提醒用户并且不会设置你的组件。
在 Home Assistant 启动或重启后,如果configuration.yaml文件是最新的,组件将在前端可见。
在这里插入图片描述

为了公开你的组件的属性,你需要定义一个名为state_attributes的方法,它将返回一个属性字典:

@property
def state_attributes(self):
    """返回实体的属性。"""
    return self._attributes

要使你的组件包含在 Home Assistant 版本中,请遵循提交改进部分中描述的步骤。基本上你只需要将你的组件移动到你的分支的homeassistant/component/目录中并创建一个拉取请求。
总结
主要讲述了在 Home Assistant 开发中如何使用状态。首先介绍了状态机对实体状态的跟踪方式及相关要求,包括实体 ID 组成、状态属性及可存储数据类型等。接着通过 “hello_state” 组件详细展示了在组件中使用状态的步骤,从创建组件文件、添加日志记录和基本初始化,到引入配置选项、处理配置缺失情况,再到设置状态和公开属性,最后提到将组件纳入 Home Assistant 版本的提交步骤。整个过程为开发者提供了全面的状态使用指导,有助于开发者创建功能丰富且规范的组件,实现与 Home Assistant 系统的有效交互和集成,从而更好地满足用户需求并增强系统功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值