이산화탄소 절대음감(?)의 실내공기 관리

이산화탄소 절대음감(?)의 실내공기 관리

가혹한 공기질 환경

쾌적한 실내 공기질을 유지하려 한다면 어떤 변수에 신경써야나? 실내 공기질을 말할 때 많이 언급하는 변수가 5개는 되는 것 같다.

  • 기온
  • 습도
  • 이산화탄소 농도
  • VOC(휘발성 유기화합물) 농도
  • PM (미세먼지) 농도

한국에서 우리 공기질 환경은 충분히 가혹하다. 겨울은 너무 춥고 건조해서 아침마다 코피가 난다. 여름에는 콧속 사이사이를 더운 증기가 채우는 느낌이다. 사시사철 문제도 있다. 대여섯시간 동안 환기를 안하면 끕끕하고 퀘퀘한 느낌을 참기 어렵다. 환기했더니 오히려 미세먼지가 유입되는 경우도 많다.

IoT를 시작하는 이유

여기서 시작된다. 이런 질문을 스스로 하고 있다면 당신은 IoT의 피가 온몸에 흐르고 있다.

  • 덥다는 느낌이 들고서야 사후적으로 에어컨을 켜거나 목표온도를 낮추는 건, 어쩐지 4차 산업혁명 시대에 사는 느낌이 아니다.
  • 리모컨을 찾기 귀찮다!
  • 실내 기온을 느끼고 에어컨을 조작하는 하찮은 행동따위에 내 고도의 지성을 쓸 시간이 아깝다
  • 난 과학을 믿는다, 이 모든 걸 과학적으로 할 수 있다고 생각한다!

NASA는 인간은 비선형처리가 가능한 가장 값싼 컴퓨터 시스템이라고 했다. 우린 온도가 27도가 넘을 때 리모컨으로 에어컨 제습기능을 켜고, 미세먼지 농도가 높으면 공기청정기을 켜면 된다.

그런데 NASA도 인정하는 가장 값싼 비선형처리 컴퓨터 시스템이 이런 선형적이고 일상적인 일을 하고 있는게 이해되지 않을 때 비로소 IoT를 필요로 하게 된다.

그럼 측정과 저장부터…

우리집은 방마다 Awair Element를 설치해놓았다(내돈내산). 출시된지 2년쯤 되었지만 인테리어 템이 될 정도로 만듦새가 좋아서 세간에서 여전히 인기가 많다. 인기만큼 가격은 덤, 현재 가격은 개당 $299달러다. 처음 샀을 때보다 가격이 50% 이상 오른 듯.

거실 Awair Element

서재 Awair Element

이 측정기는 이쁠 뿐만 아니라 플랫폼이 제법 다재다능한데, 측정한 공기질을 서버에 저장하고 모바일앱으로 보여준다. 일반 사용자라면 모바일앱을 쓰면서 손수 환기를 하건, 공기청정기나 에어컨, 제습기 따위를 조작하면 된다.

Awair Mobile App

데이터 수집은 필수적이다. Awair는 친절하게도 API를 제공하기에, 나는 우리집 Home Assistant 플랫폼에 데이터를 끌여들일 수 있었다. 이렇게 간단한 YAML 코드로 Awair Element가 수집하고 있는 데이터를 내 Home Assistant 시스템에도 저장할 수 있다.

sensor:
  - platform: rest
    name: 거실 어웨어
    json_attributes:
      - temp
      - humid
      - co2
      - voc
      - pm25
    resource: Awair의 로컬 IP 주소
    value_template: ''
    scan_interval: 60

데이터는 Home Asssistant의 데이터베이스에 14일간 저장해놓고 있다. 이 데이터는 Home Assistant에서 다양한 방법으로 나타낼 수 있지만, Mini Graph Card를 이용해 현재값과 트렌드를 간략히 보여주도록 했다. 기온과 습도로 불쾌지수 계산도 가능하다.

Awair 측정결과

문제 해결을 위한 자동화…

이 데이터로 실내 이산화탄소 농도가 700ppm보다 높아지면 전열교환기를 작동하도록 하고 있다.

automation:
  - alias: 전열교환기 켜기 자동화
    trigger:
      - platform: numeric_state
        above: '700'
        entity_id: sensor.geosil_co2
    action:
      - service: fan.turn_on
        entity_id: fan.jeonyeolgyohwangi
    mode: single

우리집에서는 집에 사람이 있는지, 겨울철이라 전열교환 기능을 쓸지 말지 등에 따라, 위 스크립트를 변용해서 쓰고 있다.

그럼 전열교환기는 언제 멈추는가? trigger에 따라 다양한 방법으로 구현할 수 있는데, 난 전열교환기가 켜지면 자동화 스크립트가 시작되어 이산화탄소 농도가 600ppm보다 낮아질 때까지 작동하도록 하고 있다.

automation:
  - alias: 전열교환기 끄기 자동화
    trigger:
      - platform: state
        entity_id: fan.jeonyeolgyohwangi
        from: 'off'
        to: 'on'
    action:
      - wait_template: "{{ states('sensor.average_co2') | float < 600 }}"
      - service: fan.turn_off
        entity_id: fan.jeonyeolgyohwangi
    mode: restart

이게 가장 간단한 자동화다. 위 코드 밑에는 RS485로 통신하는 전열교환기의 패킷을 납치하여 조작하는 것, Awair Element의 데이터를 REST로 가져오는 것 등이 숨어있지만, 기본 흐름을 보여주기에는 충분한 것 같다.

그리고 실제로 이 자동화 스크립트는 전열교환기 만으로 이산화탄소 농도 저감이 가능하다는 가정을 하고 있다. 집 안에서 이산화탄소 탄소를 내뿜는 사람이 많다면, 전열교환기로 아무리 환기를 한들, 이산화탄소 평형점은 올라갈 수 밖에 없다.

이러한 평형점이 쾌쾌한 공기라는 게 느껴질 정도인 1,000ppm을 넘는다면? 이 때는 전열교환기가 아니라, 창문 자동개폐기를 써야 한다.