录音机


录音机集成负责将详细信息存储在数据库中,然后由历史集成。

这种集成可以不断地保存数据。如果使用默认配置,数据将保存在Home Assistant安装的媒体上。必威是什么如果树莓派有SD卡,可能会影响系统的反应时间和存储介质(SD卡)的预期寿命。因此,建议设置commit_interval要达到更高的值,例如30s,则限制存储数据的数量(例如,排除设备)或将数据存储在其他地方(例如,另一个系统)。

必威是什么家助理使用SQLAlchemy,它是一个对象关系映射(ORM)。这使得使用多种数据库解决方案成为可能。

支持的数据库解决方案有:

尽管SQLAlchemy支持额外的数据库解决方案,但它在不同的数据库上表现不同,记录器所依赖的特性在不同的数据库中可能会有不同的工作方式,或者根本没有工作方式。

数据库引擎的默认值是SQLite不需要任何配置。数据库存储在Home Assistant配置目录('必威体育存款 /con必威是什么fig/ ')中并命名home-assistant_v2.db

的默认值录音机安装中的集成,请将以下内容添加到您的configuration.yaml文件:

#配置示例。yaml条目记录:

配置变量

录音机 地图 要求

支持记录器集成。只允许一次。

db_url 字符串 可选

指向数据库的URL。可以找到这样的例子在这里

db_max_retries 整数 可选默认值:10

记录器尝试连接数据库的最大次数。

db_retry_wait 整数 可选默认值:3

记录器在试图连接数据库时休眠的时间(以秒为单位)。

auto_purge 布尔 可选默认值:真正的

本地时间每晚04:12自动清理数据库。清除可以防止数据库无限期地增长,这会占用磁盘空间并使Home Assistant变慢。必威是什么如果禁用auto_purge建议您创建一个自动化来调用recorder.purge定期。

purge_keep_days 整数 可选默认值:10

指定清除后要保存在记录器数据库中的历史天数。

commit_interval 整数 可选默认值:1

事件和状态更改提交到数据库的频率(以秒为单位)。默认的1当事件风暴发生时,允许事件几乎立即提交,而不会破坏磁盘。增加这一值将减少磁盘I/O,并可能延长磁盘(SD卡)的寿命,但代价是日志和历史记录将延迟。如果设置为0(0),提交是在事件处理后尽快进行的。

排除 地图 可选

配置哪些集成应该从录音中排除。(配置过滤器

列表 可选

要从录音中排除的域的列表。

entity_globs 列表 可选

从录音中排除所有匹配列表模式的实体(例如,sensor.weather_ *).

实体 列表 可选

要从录音中排除的实体id列表。

event_types 列表 可选

要从记录中排除的事件类型列表。

包括 地图 可选

配置哪些集成应该包含在录音中。如果设置,所有其他实体将不会被记录。(配置过滤器

列表 可选

记录中包含的域的列表。

entity_globs 列表 可选

包括所有与录音中列出的模式匹配的实体(例如,sensor.weather_ *).

实体 列表 可选

要包含在录音中的实体id列表。

配置过滤器

默认情况下,不排除任何实体。以限制将暴露于哪些实体录音机,你可以使用包括排除参数。

记录器:include: domains:—alarm_control_panel—light entity_globs:—binary_sensor。*_occupancy排除:实体:- light.kitchen_light

过滤器的应用如下:

  1. 不包含或排除-传递所有实体
  2. 包括,不排除-只包括指定的实体
  3. 排除,不包括-只排除指定的实体
  4. 包含和排除:
    • 包括指定的域和/或glob模式
      • 如果包含域,且实体未被排除或匹配排除glob模式,则传递
      • 如果实体匹配包含glob模式,而实体不匹配任何排除条件(域、glob模式或列出的),则通过
      • 如果域不包含,则glob模式不匹配,实体不包含,则失败
    • 排除指定的域和/或glob模式,并包含不会列出域或glob模式
      • 如果不包括域和实体,则失败
      • 如果实体匹配排除glob模式和未包含的实体,则失败
      • 如果实体不匹配任何排除条件(域、glob模式或列出的),则传递
    • include或exclude都没有指定域或glob模式
      • 如果包含实体,则传递(如上面的#2)
      • 如果实体包含和排除,则忽略该实体排除

如果你只想在你的历史中隐藏事件,看看历史集成.同样也适用于日志.但是,如果您对某些事件有隐私方面的担忧,或者不希望它们出现在历史记录或日志中,则应该使用排除/包括选项的录音机集成。这样,它们甚至不在您的数据库中,您可以减少存储,并通过排除某些经常记录的事件(如sensor.last_boot).

常见的过滤的例子

定义域和实体排除(即blocklist)是方便的时候,你基本满意的信息记录,但只是想删除一些实体或域。

#配置示例。Yaml条目排除记录器:purge_keep_days: 5 db_url: sqlite:////home/user/。homassist /test排除:domain:—automation—updater entity_globs:—sensor。天气实体:-太阳。不要记录太阳数据-传感器。last_boot #来自“systemmonitor”传感器平台-传感器。call_service #不要记录服务调用

方法定义要记录的域和实体包括配置(如allowlist)是方便的,如果你有很多实体在你的系统和你的排除列表可能会变得非常大,所以只定义要记录的实体或域可能会更好。

#配置示例。Yaml入口包括录音机:包括:域:-传感器-开关-媒体播放器

你也可以使用包括列表中定义要记录的域/实体,并排除其中的一些排除列表。这是有意义的,如果你,例如,包括传感器域,但要排除一些特定的传感器。而不是将每个传感器实体添加到包括实体列表只包含传感器域并排除您不感兴趣的传感器实体。

#配置示例。Yaml条目包含和排除记录器:包括:域:-传感器-开关- media_player排除:实体:-传感器。last_boot——传感器。日期entity_globs: - sensor.weather_*

服务

清洗服务

调用服务recorder.purge启动清除任务,该任务将删除x天以前的事件和状态keep_days服务数据。请注意,清理不会立即减少磁盘空间使用,但会显著降低进一步增长的速度。

服务数据属性 可选 描述
keep_days 是的 记录数据库中保存的历史天数(默认为集成purge_keep_days配置)
重新打包 是的 当使用SQLite或PostgreSQL,这将重写整个数据库。当使用MySQL或MariaDB时,它将优化或重新创建事件和状态表。这是一个繁重的操作,在运行时可能会导致速度降低和磁盘空间使用增加。仅支持SQLite, PostgreSQL, MySQL和MariaDB。
apply_filter 是的 除了基于时间的清除外,还应用entity_id和event_type过滤器。与包括/排除过滤去除错误添加的状态和事件。结合重新打包:真减少数据库大小。

服务purge_entities

调用服务recorder.purge_entities启动从记录器数据库中清除与任何指定项匹配的事件和状态的任务entity_identity_globs字段。注意:让所有三个参数都为空将导致选择所有实体进行清除。

服务数据属性 可选 描述
entity_id 是的 应该从记录器数据库中清除的entity_ids列表。
是的 应该从记录器数据库中清除的域列表。
entity_globs 是的 正则表达式列表,用于标识要从记录器数据库中清除的实体。

服务禁用

调用服务recorder.disable停止将事件和状态保存到数据库。

服务支持

调用服务recorder.enable要重新开始,将事件和状态保存到数据库中。这是相反的recorder.disable

推荐的引擎和最小版本

当对记录器进行重大更改时,将测试以下数据库引擎。其他数据库引擎此时没有活动的核心维护程序,可能需要额外的维护工作。

  • SQLite≥3.32.1
  • MariaDB≥10.3
  • MySQL≥8.0
  • PostgreSQL≥12

自定义数据库引擎

下面是使用的例子db_url配置选项。

SQLite

sqlite: / / / / / / DB_NAME

MariaDB(省略pymysql)

mysql: / /用户:(电子邮件保护)_IP / DB_NAME吗?charset = utf8mb4

MariaDB(省略pymysql,使用TLS加密)

mysql: / /用户:(电子邮件保护)_IP / DB_NAME ? charset = utf8mb4; ssl = true

MariaDB(省略pymysql, Socket)

mysql: / /用户:(电子邮件保护)_IP / DB_NAME ? unix_socket = / var / run / mysqld / mysqld.sock&charset = utf8mb4

MySQL

mysql: / /用户:(电子邮件保护)_IP / DB_NAME吗?charset = utf8mb4

MySQL(使用TLS加密)

mysql: / /用户:(电子邮件保护)_IP / DB_NAME ? charset = utf8mb4; ssl = true

MySQL(插座)

mysql: / /用户:(电子邮件保护)/ DB_NAME ? unix_socket = / var / run / mysqld / mysqld.sock&charset = utf8mb4

MariaDB

mysql + pymysql: / /用户:(电子邮件保护)_IP / DB_NAME吗?charset = utf8mb4

MariaDB(插座)

mysql + pymysql: / /用户:(电子邮件保护)/ DB_NAME ? unix_socket = / var / run / mysqld / mysqld.sock&charset = utf8mb4

PostgreSQL

postgresql: / /用户:(电子邮件保护)_IP / DB_NAME

PostgreSQL(插座)

postgresql: / / @ / DB_NAME

自定义套接字目录

postgresql: / / @ / DB_NAME吗?主机= /道路/ / dir

MariaDB/MySQL的一些安装可能需要在SERVER_IP上添加一个ALTERNATE_PORT(第三方主机提供商或并行安装),例如:mysql: / /用户:(电子邮件保护)_IP: ALTERNATE_PORT / DB_NAME吗?charset = utf8mb4

当使用MariaDB或MySQL服务器时,添加+ pymysql到URL将使用纯Python MySQL库,这是较慢的,但可能需要,如果C MySQL库不可用。

当使用官方的Docker镜像时,C MySQL库总是可用的。pymysql最常用的是什么venv没有安装C MySQL库。

Unix套接字连接总是比TCP带来性能优势,如果数据库和TCP在同一主机上录音机实例(例如,本地主机).

如果你想为PostgreSQL使用Unix套接字,你需要修改pg_hba.conf.看到PostgreSQL

数据库启动

如果在与Home Assistant相同的服务器上运行数据库服务器实例,则必须确保此服务在Home Assistant之前启动。必威是什么对于一个运行Systemd的Linux实例(树莓派,Debian, Ubuntu和其他),你应该编辑服务文件。为了帮助实现这一点,添加了db_max_retry和db_retry_wait变量,以确保记录器重试数据库连接的次数足够多,以便数据库能够启动。

sudo nano /etc/systemd/system/(电子邮件保护)

添加数据库服务,例如PostgreSQL:

[Unit] Description=必威是什么家庭助理After=network。目标postgresql.service

保存文件,然后重新加载systemctl

sudo systemctl daemon-reload

安装说明

并非所选数据库引擎的所有Python绑定都可以直接安装。本节包含其他详细信息,这些信息将帮助您使其正常工作。

MariaDB和MySQL

确保将数据库服务器的默认字符集设置为utf8mb4(见MariaDB文档).如果您在一个虚拟环境中,不要忘记在安装之前激活它mysqlclient下面描述的Python包。

(电子邮件保护):~ $ sudo -u homeassistant -H -s(电子邮件保护):~$ source /srv/homeassistant/bin/activate (homeassistant)(电子邮件保护):~$ pip3安装mysqlclient

对于MariaDB,你可能需要安装一些依赖项。如果你使用的是MariaDB 10.2版本,libmariadbclient-dev被重命名libmariadb-dev.如果您使用的是MariaDB 10.3,则该包libmariadb-dev-compat也必须安装。仅适用于MariaDB v10.0.34libmariadb-dev-compat是必要的。请根据MariaDB版本安装正确的软件包。

在Python方面,我们使用mysqlclient

libssl-dev pip3安装mysqlclient

对于MySQL,你可能需要安装一些依赖项。你可以选择pymysqlmysqlclient

libssl-dev pip3安装mysqlclient

安装依赖项之后,需要手动创建数据库。在启动过程中,Home Assistan必威是什么t将查找在db_url.如果数据库不存在,它将不会自动为您创建它。

一旦Hom必威是什么e Assistant找到具有正确权限级别的数据库,就会自动创建所需的所有表,并相应地填充数据。

PostgreSQL

创建PostgreSQL数据库use utf8编码。PostgreSQL的默认编码为SQL_ASCII.从postgres用户帐户;

createdb -E utf8 DB_NAME

在哪里DB_NAME是数据库的名称吗

如果正在使用的数据库不是use utf8,添加? client_encoding = utf8db_url可以解决任何问题。

对于PostgreSQL,你可能需要安装一些依赖项:

安装postgresql-server-dev-X。Y pip3安装psycopg2

要使用Unix套接字,请首先从postgres用户帐户;

createuser USER_NAME

在哪里USER_NAME是运行Home Assistant实例的用户名(参见必威是什么确保您的安装).

然后把下面这行加到你的pg_hba.conf

local DB_NAME USER_NAME peer

在哪里DB_NAME数据库的名称和USER_NAME是运行Home Assistant实例的用户名(参见必威是什么确保您的安装).

在此之后重新加载PostgreSQL配置:

$ sudo - i - u postgres psql - c”选择pg_reload_conf();“pg_reload_conf  ---------------- t(1行)

服务重启也可以。

Baidu