SQL


sql 센서 플랫폼을 사용하면 sqlalchemy 라이브러리가 지원하는 SQL 데이터베이스의 값을 사용하여 센서 상태(속성 포함)를 채울 수 있습니다. recorder 통합구성요소 데이터베이스와 함께 사용되는 경우 홈어시스턴트 센서에 대한 통계를 제공하는데 사용할 수 있습니다. 외부 데이터 소스와 함께 사용할 수도 있습니다.

설정

이 센서를 설정하려면 센서 연결 변수와 configuration.yaml 파일에 대한 쿼리 목록을 정의해야합니다. 각 쿼리마다 센서가 생성됩니다. :

이를 활성화하려면 configuration.yaml에 다음 줄을 추가하십시오 :

# Example configuration.yaml
sensor:
  - platform: sql
    queries:
      - name: Sun state
        query: "SELECT * FROM states WHERE entity_id = 'sun.sun' ORDER BY state_id DESC LIMIT 1;"
        column: 'state'

Configuration Variables

db_url

(string)(Optional)

The URL which points to your database. See supported engines.

Default value:

Defaults to the default recorder db_url (not the current db_url of recorder).

queries

(map)(Required)

List of your queries.

name

(string)(Required)

The name of the sensor.

query

(string)(Required)

An SQL QUERY string, should return 1 result at most.

column

(string)(Required)

The field name to select.

unit_of_measurement

(string)(Optional)

Defines the units of measurement of the sensor, if any.

value_template

(template)(Optional)

Defines a template to extract a value from the payload.

예시

본 섹션에서는 이 센서를 사용하는 방법에 대한 실제 예를 제공합니다.

엔터티의 현재 상태

이 예제는 센서 sensor.temperature_in의 이전 recorded 상태를 보여줍니다.

sensor:
  - platform: random
    name: Temperature in
    unit_of_measurement: '°C'

쿼리는 다음과 같습니다. :

SELECT * FROM states WHERE entity_id = 'sensor.temperature_in' ORDER BY state_id DESC LIMIT 1;
# Example configuration.yaml
sensor:
  - platform: sql
    queries:
      - name: Temperature in
        query: "SELECT * FROM states WHERE entity_id = 'sensor.temperature_in' ORDER BY state_id DESC LIMIT 1;"
        column: 'state'

SQL 센서 상태는 SQL result set의 마지막 row에 해당합니다.

엔터티의 이전 상태

이 예제는 binary_sensors 에서만 작동합니다.

SELECT * FROM states WHERE entity_id = 'binary_sensor.xyz789' GROUP BY state ORDER BY last_changed DESC LIMIT 1;

데이터베이스 크기

Postgres의 데이터베이스 크기

sensor:
  - platform: sql
    db_url: postgresql://user:password@host/dbname
    queries:
      - name: DB size
        query: "SELECT (pg_database_size('dsmrreader')/1024/1024) as db_size;"
        column: "db_size"
        unit_of_measurement: MB

MariaDB/MySQL

센서가 올바르게 작동하도록 table_schema="hass"를 데이터베이스 이름으로 사용하는 이름으로 변경하십시오.

sensor:
  - platform: sql
    db_url: mysql://user:password@localhost/hass
    queries:
      - name: DB size
        query: 'SELECT table_schema "database", Round(Sum(data_length + index_length) / 1024, 1) "value" FROM information_schema.tables WHERE table_schema="hass" GROUP BY table_schema;'
        column: 'value'
        unit_of_measurement: kB