본문 바로가기

IT/IoT

[HA] 센서 값을 시계열 DB(InfluxDB)에 저장하기

반응형

HA에 추가된 다양한 센서의 값들을 시계열 DB(Time Series Database)에 저장할 수 있습니다.

시계열 DB는 시시각각 변하는 센서 값 등을 저장할 때 유용합니다.

InfluxDB나 Prometheus 등이 시계열 DB로 아래와 같이 그래프로 값을 확인할 수 있습니다.

InfluxDB

InfluxDB를 활용해서 HA의 센서들의 값을 저장하는 방법을 알아보겠습니다.

 

1. Docker를 통한 InfluxDB 설치

공식 이미지가 제공되는 Docker를 통해서 InfluxDB를 설치합니다.

먼저 InfluxDB의 설정 파일들을 저장할 디렉터리를 생성합니다.

sudo mkdir -p /data/influxdb

Influx 기본 설정 파일을 생성하기 위해서 아래 명령어를 입력합니다.

sudo bash -c "docker run --rm influxdb influxd config > /data/influxdb/influxdb.conf"

생성한 디렉토리 내에 설정 파일이 생성되어 있는 것을 확인할 수 있습니다.

Docker 명령어를 통해 InfluxDB 컨테이너를 생성합니다.

sudo docker run -d \
--name=influxdb \
--restart=unless-stopped \
-p 8086:8086 \
-v /data/influxdb:/var/lib/influxdb \
-v /data/influxdb/influxdb.conf:/etc/influxdb/influxdb.conf:ro \
influxdb -config /etc/influxdb/influxdb.conf

InfluxDB 컨테이너 생성 이후에 데이터베이스를 추가합니다.

sudo docker exec -it influxdb influx

쉘(Shell)이 아래와 같이 변경되는 것을 확인할 수 있습니다.

InfluxDB Shell

아래 명령어를 순서대로 입력해서 새로운 데이터베이스를 생성하고 빠져나옵니다.

create database home_assistant
exit

이것으로 기본적인 InfluxDB 설정이 완료됩니다.

 

2. HA에 InfluxDB 설정

HA의 configuration.yaml 파일을 수정합니다.

sudo nano /data/homeassistant/config/configuration.yaml

아래와 같은 형태로 내용을 작성하면 됩니다.

influxdb:
  host: 192.168.1.100
  port: 8086
  database: home_assistant
  tags_attributes:
    - friendly_name
  exclude:
    entities:
      - sensor.excluded_id1
      - sensor.excluded_id2
  include:
    domains:
      - sensor
    entities:
      - switch.bedrood_switch
      - switch.living_room_switch

내용의 exclude나 include 하위의 domains에 포함하거나 제외시킬 도메인 리스트를 입력합니다.

include의 domains에 내용을 입력하면 exclude에는 작성하지 않아도 됩니다.

제외된 도메인에서 특별히 추가하고 싶은 엔티티가 있는 경우 include의 entities에 넣으면 됩니다.

include된 도메인에서 제외하고 싶은 엔티티는 반대로 exclude의 entities에 넣으면 됩니다.

파일의 내용을 저장하고 컨테이너를 재시작합니다.

sudo docker restart home-assistant

마지막으로 아래 명령어를 입력하면 추가된 엔티티들을 확인할 수 있습니다.

sudo curl -G 'http://localhost:8086/query?db=home_assistant' --data-urlencode 'q=SHOW SERIES ON home_assistant'

이것으로 InfluxDB 설정이 완료되며 Grafana와의 연동을 통해 그래프로 시각화할 수 있습니다.

반응형