录音机


录音机集成负责将细节存储在数据库中,然后由历史一体化。

这种集成不断保存数据。如果使用默认配置,则将数据保存在媒体主助手上。必威是什么如果使用SD卡的Raspberry Pi,它可能会影响您系统对存储介质的反应时间和预期寿命(SD卡)。因此,建议设置commit_interval更高的价值,例如30s,限制存储数据的量(例如,排除设备)或将数据存储在其他地方(例如另一个系统)。

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

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

尽管SQLalchemy支持数据库解决方案,除了由家庭助理支持的解决方案外,它在不同的数据库上的行为会有所不同,并且录音机所依赖的功能可能在不同的数据库中以不同的方式工作必威是什么或根本不起作用。

默认和推荐的数据库引擎是sqlite不需要任何配置。数据库存储在您的家庭助手配置目录(’/config/必威体育存款’)中,并必威是什么命名为home-assistant_v2.db

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

#示例Configuration.yaml条目录音机

配置变量

录音机 地图 必需的

启用录音机集成。只允许一次。

db_url 细绳 ((可选的

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

db_max_retries 整数 ((可选的,默认:10

最大次数,录音机会重新验证以连接到数据库。

db_retry_wait 整数 ((可选的,默认:3

在几秒钟内,录音机试图连接到数据库时会睡觉。

auto_purge 布尔 ((可选的,默认:正确

每晚在当地时间04:12自动清除数据库。清除可防止数据库无限期地增长,从而占用磁盘空间,并可以使家庭助理缓慢。必威是什么如果您禁用auto_purge建议您创建一个自动化来调用记录器定期。

auto_repack 布尔 ((可选的,默认:正确

自动清除后的第二个星期日,每隔一个星期日自动重新包装数据库。如果没有重新打包,即使在清除后,数据库也可能不会减小尺寸,从而占用了磁盘空间,并且可以使家庭助理慢慢。必威是什么如果您禁用auto_repack建议您创建一个自动化来调用记录器定期。如果这个标志没有影响auto_purge被禁用。

purge_keep_days 整数 ((可选的,默认:10

清除后,指定保留记录数据库中的历史日数。

commit_interval 整数 ((可选的,默认:1

(几秒钟)将事件和状态变化授予数据库的频率。默认值1当事件暴风雨发生时,允许几乎立即进行事件,而无需丢弃磁盘。增加这将减少磁盘I/O,并可能延长磁盘(SD卡)寿命,而权衡是日志和历史记录将滞后。如果设置为0(零),在处理事件后,尽快进行提交。

排除 地图 ((可选的

配置应排除哪些集成。((配置过滤器

列表 ((可选的

从录音中排除的域列表。

entity_globs 列表 ((可选的

排除所有与录音中列出的模式匹配的实体(例如,传感器。天气_*)。

实体 列表 ((可选的

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

event_types 列表 ((可选的

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

包括 地图 ((可选的

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

列表 ((可选的

录音中包含的域列表。

entity_globs 列表 ((可选的

包括所有与录音中列出的模式匹配的实体(例如,传感器。天气_*)。

实体 列表 ((可选的

录音中包含的实体ID列表。

配置过滤器

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

#示例过滤器要包括指定域并排除指定的实体录音机包括-alarm_control_panel-entity_globs-binary_sensor。*_占用排除实体-light.kitchen_light

过滤器的应用如下:

  1. 否包括或排除 - 通过所有实体
  2. 包括,不排除 - 仅包括指定实体
  3. 排除,否包括 - 仅排除指定实体
  4. 两者都包括和排除:
    • 包括指定的域和/或球形图案
      • 如果包括域,并且不排除或匹配实体,则通过
      • 如果实体匹配包括球形模式,并且实体与任何排除条件(域,全球模式或列出)不匹配,则通过
      • 如果不包括域,则全球模式不匹配,并且不包括实体,则失败
    • 排除指定的域和/或全球模式,包括不列出域或球模式
      • 如果排除域并且不包括实体,则失败
      • 如果实体匹配不包括球模式和未包括的实体,则失败
      • 如果实体与任何排除条件不匹配(域,全球模式或列出),请通过
    • 不包括或排除指定域或球模式
      • 如果包括实体,请通过(如上#2)
      • 如果实体包括和排除实体,则将忽略实体排除

如果您只想隐藏事件,请看一下历史一体化。也是如此日志。但是,如果您对某些事件有隐私问题或在历史记录中都不希望它们,则应使用排除/包括选项录音机一体化。这样,它们甚至不在数据库中,您可以通过排除某些经常播放的事件来减少存储并保持数据库较小(例如传感器。last_boot)。

常见的过滤示例

定义域和实体排除(即区块列表)当您基本上对记录的信息感到满意时,只想删除某些实体或域,就很方便。

#示例configuration.yaml条目录音机purge_keep_days5db_urlsqlite://///home/user/.homeassistant/test排除-自动化-更新者entity_globs-传感器。天气_*实体-太阳#不要记录太阳数据-传感器。last_boot#来自“ SystemMonitor”传感器平台-传感器event_types-call_service#不录制服务电话

定义域和实体以使用包括如果您的系统中有很多实体,则配置(即允许列表)很方便排除列表可能会变得很大,因此最好只是定义要记录的实体或域。

#示例configuration.yaml条目包含录音机包括-传感器-转变-媒体播放器

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

#示例配置录音机包括-传感器-转变-媒体播放器排除实体-传感器。last_boot-传感器entity_globs-传感器。天气_*

服务

服务清除

致电服务记录器启动清除任务,该任务删除事件和陈述以上超过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_ID,,,,entity_globs字段。将所有三个参数留为空将导致所有实体被选中用于清除。

服务数据属性 可选的 描述
ENTITY_ID 是的* 应从录音机数据库清除的Entity_ID列表。
是的 应从录音机数据库清除的域列表。
entity_globs 是的 识别从录音机数据库清除实体的正则表达式列表。

注意:ENTITY_ID仅在使用时可选自动化或者脚本。使用UI调用此服务时,必须至少指定一个ENTITY_ID使用目标选择器或通过YAML模式。

服务禁用

致电服务记录器停止将事件和状态保存到数据库。

服务启用

致电服务记录器开始再次将事件和状态保存到数据库。这是相反的记录器

推荐的引擎和最低版本

当对录音机进行重大更改时,测试了以下数据库引擎。其他数据库引擎目前没有主动核心维护器,可能需要进行其他工作才能维护。

  • sqlite≥3.32.1
  • MariaDB≥10.3
  • mysql≥8.0
  • 后Ql≥12

自定义数据库引擎

这是与db_url配置选项。

sqlite

sqlite:///// path/to/db_name

MariaDB(省略Pymysql)

mysql://用户:[电子邮件保护]_ip/db_name?charset = utf8mb4

MariaDB(使用TLS加密省略PymysQL)

mysql://用户:[电子邮件保护]_ip/db_name?charset = utf8mb4; ssl = true

Mariadb(省略Pymysql,插座)

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&chareet=utf8mb4

玛丽亚德

mysql+pymysql://用户:[电子邮件保护]_ip/db_name?charset = utf8mb4

MariaDB(插座)

mysql+pymysql://用户:[电子邮件保护]/db_name?unix_socket=/var/run/mysqld/mysqld.sock&chareet=utf8mb4

Postgresql

PostgreSQL://用户:[电子邮件保护]_ip/db_name

PostgreSQL(插座)

postgresql://@/db_name

PostgreSQL(自定义套接字Dir)

postgresql://@/db_name?host =/path/to/dir

MariadB/MySQL的某些安装可能需要添加到Server_ip,例如,例如mysql://用户:[电子邮件保护]_ip:备用_port/db_name?charset = utf8mb4

使用MariadB或MySQL Server时,添加+pymysql在URL上将使用纯Python mysql库,该库较慢,但是如果C MySQL库不可用,则可能需要。

使用官方的Docker映像时,C MySQL库将始终可用。pymysql最常用VENV未安装C mySQL库的位置。

如果数据库与与TCP相同的主机,则UNIX插座连接始终带来比TCP的性能优势录音机实例(即Localhost)。

如果要使用UNIX插座进行PostgreSQL,则需要修改pg_hba.conf。看Postgresql

数据库启动

如果您是在与家庭助理的同一服务器上运行数据库服务器实例,则必须确保此服务在家庭助手之前开始。必威是什么对于Linux实例运行SystemD(Raspberry Pi,Debian,Ubuntu等),您应该编辑服务文件。为了促进这一点,已经添加了DB_MAX_RETRY和DB_RETRY_WAIT变量,以确保记录器将连接重新验证到数据库的连接足够的时间,以供数据库启动。

Sudonano/etc/systemd/system/[电子邮件保护]

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

[单位] descript必威是什么

保存文件然后重新加载Systemctl

SudoSystemCtl守护程序重电

安装笔记

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

Mariadb和Mysql

确保数据库服务器的默认字符集设置为UTF8MB4(看Mariadb文档)。如果您在虚拟环境中,请不要忘记在安装之前激活它mysqlclientpython软件包如下所述。

[电子邮件保护]:〜$Sudo-u乡亲-H-s[电子邮件保护]:〜$资源/srv/homeassistant/bin/激活((乡亲[电子邮件保护]:〜$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

Sudoapt-get安装libmariadbclient-dev libssl-dev pip3安装mysqlclient

对于MySQL,您可能必须安装一些依赖项。您可以选择pymysqlmysqlclient

Sudoapt-get安装默认libmysqlclient-dev libssl-dev pip3安装mysqlclient

安装依赖项后,需要手动创建数据库。在启动期间,家庭助理将寻找在此处指定的数必威是什么据库db_url。如果数据库不存在,它将不会自动为您创建它。

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

Postgresql

使用使用PostgreSQL数据库UTF8编码。PostgreSQL默认编码是sql_ascii。来自Postgres用户帐号;

创建B-eUTF8 DB_NAME

在哪里db_name是数据库的名称

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

对于PostgreSQL,您可能必须安装一些依赖项:

Sudoapt-get安装PostgreSQL-Server-Dev-X.y Pip3安装psycopg2

对于使用UNIX插座,首先从Postgres用户帐号;

CreateUser user_name

在哪里用户名是运行家庭助理实例的用户的名称(请参阅必威是什么确保安装)。

然后将以下行添加到您的pg_hba.conf

本地db_name user_name peer

在哪里db_name是数据库的名称,用户名是运行家庭助理实例的用户的名称(请参阅必威是什么确保安装)。

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

$Sudo-一世-uPostgres PSQL-C“选择pg_reload_conf();”PG_RELOAD_CONF------------------------t((1行

服务重新启动也将起作用。

Baidu