회의실 에어컨은 왜 계속 켜져 있는가 — 재실 기반 공간 제어 설계

건물 에너지 데이터를 열어보면 거의 항상 발견되는 것이 있습니다. 아무도 없는 공간에서 냉난방이 돌고 있는 시간입니다.

회의가 끝나고 사람들이 나가면서 에어컨을 끄지 않았거나, 마지막 퇴근자가 자기 자리 조명만 끄고 나갔거나, 주말인데 공조 스케줄이 평일로 설정되어 있는 경우입니다.

해결책은 명확해 보입니다. 사람이 없으면 자동으로 끄면 됩니다.

그런데 이 단순해 보이는 자동화가 현장에서 자주 실패합니다. 회의 중에 조명이 꺼져서 참석자들이 손을 흔드는 상황이 몇 번 반복되면, 관리자는 결국 자동화 규칙을 꺼버립니다. 그리고 시스템은 비싼 모니터링 도구로 남습니다.

이 글은 공간 단위 제어를 설계할 때 실제로 결정해야 하는 것들을 정리한 내용입니다. 저희가 빌딩·시설 대상 공간 제어 시스템을 구축하면서 반복적으로 마주친 지점들입니다.


1. 무엇을 하나의 단위로 볼 것인가

제어 시스템 설계에서 첫 번째 결정은 제어의 최소 단위입니다. 이 결정이 이후 모든 화면과 규칙의 구조를 정합니다.

기기 단위 제어만으로는 운영되지 않습니다

IoT 기기를 연동하면 각 기기를 개별적으로 켜고 끌 수 있게 됩니다. 조명 12개, 에어컨 3대, 환기팬 2대가 목록으로 나열되는 형태입니다.

이 구조는 기기가 늘어나는 순간 쓸 수 없게 됩니다. 건물 하나에 기기가 수백 개가 되면, 목록에서 원하는 것을 찾는 일 자체가 작업이 됩니다.

실제 운영에서 사람이 원하는 것은 대체로 이런 형태입니다.

  • "3층 대회의실 퇴실 처리"
  • "2층 전체 소등"
  • "주말 모드로 전환"

기기가 아니라 공간을 기준으로 생각합니다. 시스템의 구조도 여기에 맞춰야 합니다.

계층 구조를 먼저 정의합니다

저희가 쓰는 구조는 다음과 같습니다.

빌딩(Building)
 └ 층(Floor)
    └ 공간(Space)
       ├ 기기(Device)  — 조명, 스위치, 공조기
       └ 센서(Sensor)  — 온도, 습도, 재실, 조도

각 계층에서 관리하는 정보가 다릅니다.

계층 관리 정보 제어 대상 여부
빌딩 주소, 운영 상태, 계기 설정 전체 일괄 제어
층 층 번호, 소속 공간 목록 층 단위 일괄 제어
공간 유형(사무실/회의실/공용), 면적, 수용 인원, 현재 상태 주 제어 단위
기기 제조사 식별자, 배치 위치, 온라인 상태 개별 제어
센서 측정 항목, 매핑된 공간 제어 대상 아님(입력)

여기서 중요한 설계 결정이 하나 있습니다. 기기와 센서는 공간에 매핑되지 않은 상태로도 존재할 수 있어야 합니다. 신규 설치 직후나 공간 재배치 중에는 소속이 정해지지 않은 기기가 생깁니다. 이 상태를 허용하지 않으면 운영 중에 등록 자체가 막힙니다.

이름 규칙을 먼저 정합니다

기기가 수십 개를 넘어가면 이름이 관리 도구가 됩니다. 규칙 없이 등록하면 나중에 목록에서 원하는 것을 찾을 수 없게 됩니다.

현장에서 자주 보는 상태입니다.

조명1, 조명2, 스위치, 새 기기, test, 에어컨(수정됨)

이렇게 되면 어느 기기가 어디에 있는지 알 방법이 없습니다. 설치 담당자가 바뀌면 더 심해집니다.

권할 만한 규칙은 위치를 앞에 두고 용도를 뒤에 붙이는 방식입니다.

3F-회의실A-조명-01
3F-회의실A-공조-01
B1-기계실-펌프-02

이러면 이름만으로 위치를 알 수 있고, 정렬했을 때 같은 공간의 기기가 모입니다. 다만 이름에 위치를 넣으면 기기를 옮길 때 이름도 바꿔야 하므로, 시스템 내부 식별자와 표시 이름은 분리해두는 편이 안전합니다.

제조사가 부여한 식별자를 그대로 화면에 노출하는 것도 피해야 합니다. 관리자가 읽을 수 없는 문자열은 운영에 도움이 되지 않습니다. 내부적으로는 유지하되 화면에는 사람이 붙인 이름을 보여줍니다.

공간에 '현재 상태'를 둡니다

단순히 기기가 켜져 있는지 여부와 별개로, 공간 자체의 상태를 관리하면 운영이 수월해집니다.

  • 사용 중 / 비어 있음
  • 청소 중
  • 점검 중
  • 예약됨

이 상태가 있으면 자동화 규칙을 더 정확하게 쓸 수 있습니다. "비어 있음 상태인 공간만 절전 적용"처럼 조건을 걸 수 있고, 청소 중인 공간에서 조명이 꺼지는 사고를 막을 수 있습니다.

상태를 누가 바꾸는지도 정해야 합니다. 사람이 직접 바꾸는 경우, 센서가 판단해 바꾸는 경우, 예약 시스템 연동으로 바뀌는 경우가 각각 다르게 동작합니다.


2. 자동화는 '언제 끄느냐'보다 '언제 끄지 않느냐'가 어렵습니다

재실 기반 제어의 핵심 난이도는 감지 자체가 아니라 오판을 막는 데 있습니다.

재실 감지는 생각보다 부정확합니다

흔히 쓰는 감지 방식과 각각의 약점입니다.

방식 원리 약점
PIR 모션 센서 적외선 변화 감지 정지한 사람을 놓침. 회의 중 착석 상태가 대표적
mmWave 레이더(60GHz 등) 전파 반사로 거리·속도·각도 측정 사람이 아닌 움직임(선풍기, 화분, 구역 밖 통행)도 잡음. 구역·거리 필터 설정이 필요
도어 센서 문 개폐 감지 인원 수를 모름. 들어온 사람이 나갔는지 판단 불가
이산화탄소 농도 재실 인원에 따른 농도 상승 반응이 느림. 환기 상태에 영향받음
전력 사용 패턴 기기 사용량으로 추정 간접 지표. 대기전력과 구분이 어려움
예약 시스템 연동 예약 정보 기준 예약하고 안 오거나, 예약 없이 쓰는 경우

어느 하나도 단독으로는 충분하지 않습니다. 특히 PIR 센서만으로 회의실을 제어하면 거의 반드시 문제가 생깁니다. 회의 참석자가 앉아서 화면만 보고 있으면 움직임이 감지되지 않습니다.

이것은 제품 불량이 아니라 방식의 한계입니다. 센서 제조사 문서도 열원이 움직이지 않거나 온도 변화가 없으면 감지하지 못할 수 있다고 명시하고, 여름처럼 체표면 온도와 배경 온도의 차이가 작을 때는 감도가 떨어진다고 설명합니다 (Panasonic PIR Motion Sensors FAQ). 같은 센서, 같은 위치인데 여름에만 미감지가 늘어나는 현상이 여기서 나옵니다.

mmWave 레이더는 이 약점을 보완합니다. 호흡이나 타이핑 같은 미세한 움직임까지 볼 수 있어 앉아 있는 사람을 놓치는 일이 줄어듭니다. 대신 감지 대상이 넓어지는 만큼, 감지 구역(좌표), 거리, 높이 필터로 원하지 않는 움직임을 걸러내는 설정이 전제됩니다 (TI SWRA818). 달기만 하면 정확해지는 센서가 아니라, 공간마다 구역을 잡아줘야 하는 센서입니다.

이산화탄소 농도는 재실 "여부"를 빠르게 판단하는 용도로는 맞지 않습니다. 사람이 들어온 뒤 농도가 안정되기까지 시간이 걸리고, 같은 인원이라도 환기량과 외기 농도에 따라 값이 달라집니다. ASHRAE는 실내 이산화탄소 농도로 의미 있는 판단을 하려면 센서의 성능, 설치 위치, 교정이 모두 중요하다고 밝히고 있습니다 (ASHRAE Position Document on Indoor Carbon Dioxide). 이 값은 조명을 끄는 근거보다는 환기량을 조절하는 입력으로 쓰는 편이 적합합니다.

실무에서는 여러 신호를 조합합니다. 예약 정보가 있으면 그 시간 동안은 비어 있다고 판단하지 않고, 모션이 없더라도 도어 센서상 퇴실 기록이 없으면 유지하는 식입니다.

오탐과 미탐은 원인도 대응도 다릅니다

감지 오류는 두 방향입니다. 사람이 있는데 없다고 판단하는 미탐과, 사람이 없는데 있다고 판단하는 오탐입니다. 미탐은 이용자의 불만으로 바로 드러나지만, 오탐은 아무도 불편하지 않아서 드러나지 않습니다. 빈 회의실에 냉방이 계속 도는 원인이 규칙이 아니라 오탐인 경우가 적지 않습니다.

증상 흔한 원인 대응
회의 중 소등(미탐) PIR 단독 사용, 착석 위치가 감지 범위 밖 레이더 병용, 센서 추가, 유예 시간 연장, 사전 알림
여름철에만 미감지 증가(미탐) 체온과 배경 온도 차이 감소로 PIR 감도 저하 계절별 유예 시간 조정, 다른 방식 센서 병용
유리 칸막이 너머를 못 봄(미탐) 유리·아크릴은 PIR이 보는 적외선을 통과시키지 못함 칸막이 안쪽에 센서 설치
빈 방이 계속 재실(오탐) 냉난방 토출 기류, 직사광선(PIR) / 선풍기·화분·블라인드(레이더) 설치 위치 변경, 레이더 감지 구역에서 해당 영역 제외
복도 통행에 반응(오탐) 감지 범위가 출입구 밖까지 닿음 센서 방향 조정, 레이더 거리 필터로 범위 제한
켜짐과 꺼짐이 짧게 반복 판단 기준 근처에서 값이 흔들림 유지 시간(hold time)과 히스테리시스 적용

PIR 관련 원인은 앞서 인용한 제조사 문서의 사용상 주의 항목에 그대로 나와 있습니다. 냉난방기의 온풍·냉풍이나 가습기 증기가 만드는 급격한 온도 변화를 열원으로 오인할 수 있고, 유리나 아크릴이 사이에 있으면 적외선이 제대로 전달되지 않는다는 내용입니다.

마지막 행의 히스테리시스는 켜는 기준과 끄는 기준을 다르게 두는 것입니다. 이산화탄소 농도처럼 연속된 값을 기준 하나로 자르면, 값이 기준 근처에 머무는 동안 판단이 계속 뒤집힙니다. 재실·공실처럼 켜짐과 꺼짐뿐인 신호는 같은 문제를 시간으로 풉니다. "공실이 일정 시간 이어져야 공실로 인정한다"는 유지 시간이 이 역할을 합니다.

아래는 Home Assistant에서 이산화탄소 농도를 히스테리시스가 있는 이진 신호로 바꾸는 설정입니다. 이 설정에서는 750ppm을 넘어야 켜지고 650ppm 아래로 내려가야 꺼집니다 (Home Assistant Threshold).

# configuration.yaml — 기준값 700, 폭 50은 설명용 예시입니다
binary_sensor:
  - platform: threshold
    name: "회의실A CO2 재실 추정"
    entity_id: sensor.meeting_a_co2
    upper: 700
    hysteresis: 50

기준값은 현장에서 정해야 합니다. 실내 농도의 절댓값은 외기 농도에 따라서도 달라지므로, 비어 있는 시간대의 값을 며칠 기록해 그 건물의 바닥값을 확인한 뒤에 잡는 순서가 맞습니다.

센서 위치가 정확도를 좌우합니다

같은 센서를 써도 어디에 다느냐에 따라 결과가 달라집니다. 설치 위치는 소프트웨어로 보완하기 어려운 부분이라 처음에 결정해야 합니다.

확인할 항목입니다.

  • 감지 범위와 사각지대 — 센서마다 감지 각도와 거리가 정해져 있습니다. 공간이 넓거나 기둥·파티션이 있으면 한 대로 덮이지 않습니다
  • 출입구와의 관계 — 문 바로 위에 달면 지나가는 사람까지 감지합니다. 복도를 지나는 사람 때문에 빈 회의실 조명이 켜지는 현상이 여기서 나옵니다
  • 열원 간섭 — PIR 센서는 온도 변화에 반응하므로 냉난방 토출구나 직사광선 근처를 피해야 합니다
  • 설치 높이 — 천장이 높은 공간에서는 감지 범위가 넓어지는 대신 민감도가 떨어집니다

한 공간에 센서를 여러 개 두는 구성도 고려할 만합니다. 하나라도 감지되면 재실로 보는 방식이면 사각지대 문제가 줄어듭니다. 대신 오탐도 함께 늘어나므로, 뒤에서 다룰 유예 시간과 함께 조정해야 합니다.

설치 후에는 실제 사용 패턴과 센서 기록을 비교해보는 기간이 필요합니다. 회의가 있었던 시간에 재실로 잡혔는지, 빈 시간에 잘못 감지된 구간은 없는지 확인한 뒤에 자동화 규칙을 켜는 순서가 안전합니다.

끄기 전에 알리는 단계를 둡니다

감지를 아무리 정교하게 해도 오판은 남습니다. 그래서 바로 끄지 않는 구조가 필요합니다.

일반적인 순서입니다.

  1. 비어 있음으로 판단됨
  2. 유예 시간 대기 (공간 유형에 따라 다르게 설정)
  3. 사전 알림 — 조명을 잠깐 깜빡이거나, 화면·앱으로 안내
  4. 사람이 반응하면 취소하고 일정 시간 유지
  5. 반응이 없으면 절전 적용

여기서 3번과 4번을 생략하는 설계가 많은데, 이것이 자동화가 꺼지는 가장 흔한 원인입니다. 사람 입장에서는 예고 없이 불이 꺼진 경험 한 번이면 그 시스템을 신뢰하지 않게 됩니다.

규칙으로 옮기면 이런 모양입니다

위 순서를 Home Assistant 자동화로 옮긴 예시입니다. 공실이 15분 이어지면 조명을 30%로 낮춰 예고하고, 2분 안에 재실이 다시 잡히면 밝기를 다시 올리며, 반응이 없으면 조명과 냉난방을 끕니다. 2024.10 이후의 YAML 문법(triggers, actions) 기준이며, 엔티티 이름과 시간 값은 설명용 예시입니다 (Home Assistant 2024.10 릴리스 노트).

# automations.yaml
- alias: "3F 회의실A 공실 절전"
  mode: single
  triggers:
    - trigger: state
      entity_id: binary_sensor.meeting_a_occupancy
      to: "off"
      for: "00:15:00"
    - trigger: time_pattern
      minutes: "/30"
  conditions:
    - condition: state
      entity_id: binary_sensor.meeting_a_occupancy
      state: "off"
      for: "00:15:00"
    - condition: state
      entity_id: light.meeting_a
      state: "on"
    - condition: state
      entity_id: binary_sensor.meeting_a_reserved
      state: "off"
    - condition: state
      entity_id: input_boolean.meeting_a_automation_paused
      state: "off"
  actions:
    - action: light.turn_on
      target:
        entity_id: light.meeting_a
      data:
        brightness_pct: 30
    - wait_for_trigger:
        - trigger: state
          entity_id: binary_sensor.meeting_a_occupancy
          to: "on"
      timeout: "00:02:00"
      continue_on_timeout: true
    - if:
        - condition: template
          value_template: "{{ wait.trigger is none }}"
      then:
        - action: light.turn_off
          target:
            entity_id: light.meeting_a
        - action: climate.turn_off
          target:
            entity_id: climate.meeting_a
      else:
        - action: light.turn_on
          target:
            entity_id: light.meeting_a
          data:
            brightness_pct: 100

이 예시에서 눈여겨볼 부분은 네 가지입니다.

  • for가 유예 시간입니다. 공실 상태가 지정한 시간 동안 바뀌지 않아야 트리거가 발생합니다. 중간에 한 번이라도 재실이 잡히면 처음부터 다시 셉니다
  • 30분 주기 트리거는 보완 장치입니다. for 대기는 Home Assistant가 재시작되거나 자동화를 다시 불러오면 초기화됩니다 (Home Assistant State trigger). 허브를 업데이트한 날 밤에 빈 회의실이 그대로 켜져 있는 원인이 이것입니다. 주기 점검을 함께 걸어두면 놓친 공간을 다음 주기에 정리합니다. 조건의 for도 재시작 후에는 엔티티가 다시 로드된 시점부터 세므로, 재시작 직후에 곧바로 꺼지는 일은 없습니다 (Home Assistant State condition)
  • 대기 결과로 분기합니다. wait_for_trigger가 시간 초과로 끝나면 wait.trigger 값이 none이 됩니다 (Home Assistant Script Syntax). 이 값으로 "반응 없음"과 "사람이 반응함"을 구분합니다
  • 센서가 응답하지 않으면 아무것도 끄지 않습니다. 조건이 상태 off만 인정하므로, 센서가 unavailable이면 규칙이 실행되지 않습니다. 의도한 동작입니다. 센서 장애를 공실로 해석하지 않기 위한 것입니다

binary_sensor.meeting_a_reserved는 예약 시스템이 갱신하는 값, input_boolean.meeting_a_automation_paused는 뒤에서 다룰 수동 조작 후 일시 정지 값이라고 가정했습니다. 밝기 조절이 되지 않는 조명이라면 예고 단계를 입구 단말의 화면 안내나 알림음으로 바꿔야 합니다.

유예 시간은 공간 유형별로 다릅니다

하나의 값을 전 건물에 적용하면 어딘가는 반드시 맞지 않습니다.

  • 화장실·복도 — 짧게 잡아도 문제가 적습니다
  • 개인 사무실 — 자리를 비우는 일이 잦으므로 여유가 필요합니다
  • 회의실 — 정지 상태가 길게 이어지므로 가장 길게 잡습니다
  • 서버실·설비실 — 자동 절전 대상에서 제외하는 편이 안전합니다

공간 유형별 기본값을 두고, 필요한 공간만 개별 조정할 수 있는 구조가 현실적입니다.

절대 끄면 안 되는 것을 먼저 정의합니다

자동화 규칙을 설계할 때 제외 목록을 먼저 만드는 것이 안전합니다.

  • 서버·통신 장비와 그 냉방
  • 냉장·냉동 설비
  • 보안 설비, 비상 조명, 유도등
  • 실험·생산 설비
  • 의료 관련 기기

이 목록은 시스템 설정으로 관리되어야 하고, 실수로 규칙에 포함되지 않도록 잠금이 필요합니다. "끄면 안 되는 것을 껐다"는 사고는 절감 효과와 비교할 수 없는 손실을 만듭니다.

센서가 응답하지 않을 때의 동작을 정합니다

센서는 틀리기도 하지만 멈추기도 합니다. 배터리가 방전되거나, 허브가 재시작되거나, 무선 구간이 끊깁니다. 이때 규칙이 어떻게 동작할지를 정해두지 않으면 장애가 곧 오동작이 됩니다.

원칙은 장애를 공실로 해석하지 않는 것입니다. 값을 모르는 상태에서는 현재 상태를 유지하고, 절전은 스케줄처럼 센서에 의존하지 않는 규칙에 맡깁니다.

상황 방치했을 때 정해둘 동작
센서가 응답 없음으로 표시됨 구현에 따라 공실로 처리되어 소등 재실 판단을 보류하고 현재 상태 유지, 관리자 알림
센서가 멈췄는데 마지막 값이 그대로 남음 마지막 값이 재실이면 계속 가동, 공실이면 사람이 들어와도 켜지지 않음 마지막 보고 시각을 함께 보고, 오래된 값은 신뢰하지 않음
허브·서버 재시작 진행 중이던 유예 시간이 사라짐 주기 점검 규칙으로 보완
절전 명령 실패 화면은 꺼짐, 실제는 켜짐 실패를 기록하고 다음 주기에 재확인

두 번째 행이 가장 찾기 어렵습니다. 배터리로 동작하는 무선 센서는 평소에도 변화가 없으면 조용하기 때문에, 멈춘 것과 조용한 것이 화면에서 구분되지 않습니다. 예를 들어 Home Assistant의 Zigbee 연동(ZHA)은 배터리 기기는 활동이 없는 상태로 6시간(기본값 21600초), 상시 전원 기기는 2시간(기본값 7200초)이 지나야 응답 없음으로 표시합니다 (Home Assistant ZHA). 그 사이에는 죽은 센서의 마지막 값이 정상 값처럼 쓰입니다.

대응은 두 가지입니다. 센서별 마지막 보고 시각을 화면에 표시하는 것, 그리고 배터리 잔량과 장시간 무보고를 알림 대상으로 두는 것입니다. 기기 생존 여부를 판정하는 기준은 현장에 설치된 IoT 시스템을 운영한다는 것 — 단절·상태 불일치·원격 관리에서 따로 다뤘습니다.

센서와 무관하게 동작하는 마지막 방어선도 하나 둡니다. 업무 종료 후 정해진 시각에 층 전체를 점검해 켜져 있는 공간을 정리하는 스케줄 규칙입니다. 재실 감지가 하루 종일 틀렸더라도 낭비가 다음 날까지 이어지지 않습니다. 이 규칙에도 제외 목록과 사전 알림은 똑같이 적용합니다.


3. 사람의 조작을 존중해야 자동화가 살아남습니다

자동화와 사람의 조작이 충돌할 때 어떻게 할지를 정하지 않으면, 현장에서 이상한 현상이 반복됩니다. 껐는데 다시 켜지고, 켰는데 다시 꺼지는 상황입니다.

수동 조작 후 규칙을 일시 정지합니다

사람이 직접 스위치를 조작했다면, 그것은 명시적인 의사 표현입니다. 이 경우 일정 시간 자동화 규칙을 적용하지 않는 것이 일반적입니다.

정해야 할 항목입니다.

  • 수동 조작 후 자동화를 얼마나 멈출 것인가
  • 그 시간이 지나면 어떻게 복귀할 것인가
  • 수동 조작으로 인정할 경로는 무엇인가 (물리 스위치, 앱, 음성)

구현할 때는 "일시 정지 중"이라는 표시만 두지 말고 해제 시각을 공간에 저장하는 편이 낫습니다. 규칙이 실행될 때마다 현재 시각과 비교하면 되고, 서버가 재시작되어도 값이 남습니다. 화면에 "14:30까지 자동 제어 일시 정지"처럼 보여줄 수도 있습니다.

복귀 시점의 동작도 정해야 합니다. 일시 정지가 풀리는 순간 밀려 있던 규칙을 바로 적용하면, 사람 입장에서는 한 시간 뒤에 갑자기 불이 꺼지는 것으로 보입니다. 해제 시점에는 아무것도 하지 않고, 그때부터 재실 판단과 유예 시간을 처음부터 다시 시작하는 방식이 안전합니다.

자동화가 스스로 보낸 명령을 수동 조작으로 오인하지 않게 하는 것도 필요합니다. 규칙이 조명을 끄면 조명 상태가 바뀌고, 그 변화를 "누군가 조작했다"로 받아들이면 규칙이 자기 자신을 일시 정지시킵니다. 상태 변화만 보지 말고, 그 변화를 일으킨 명령의 실행 주체를 함께 확인해야 합니다. 뒤에서 다룰 제어 이력의 실행 주체 구분이 여기서도 쓰입니다.

물리 스위치 조작을 시스템이 인지할 수 있는지는 기기에 따라 다릅니다. 인지하지 못하는 기기라면, 시스템이 알고 있는 상태와 실제 상태가 어긋나게 됩니다. 이 경우 주기적으로 실제 상태를 조회해 맞추는 절차가 필요합니다.

통신 방식에 따라 상태를 아는 시점이 다릅니다

수동 조작을 얼마나 빨리 알 수 있는지는 기기가 쓰는 통신 방식에서 정해집니다. 기기가 변화를 먼저 알려주는 방식과, 시스템이 물어봐야 알 수 있는 방식이 있습니다.

방식 상태를 아는 방법 설계에 미치는 영향
Zigbee 기기가 변화를 보고. 배터리 기기는 평소 절전 상태 변화는 빨리 알지만, 멈춘 기기를 늦게 알게 됨
Matter IP 네트워크(Wi-Fi, 이더넷, Thread) 위에서 로컬로 통신 인터넷 없이 제어 가능. 구내망에서 IPv6와 mDNS가 통해야 함
Modbus 요청·응답 방식. 시스템이 주기적으로 조회 조회 주기만큼 인지가 늦음. 주기를 줄이면 통신량이 늘어남
BACnet 조회, 또는 값 변화 통지(COV) 구독 COV를 지원하는 객체는 변화를 바로 받음. 구독 갱신 관리가 필요

Modbus로 연결된 공조기는 현장 리모컨으로 설정을 바꿔도 다음 조회 전까지는 시스템이 모릅니다. Home Assistant의 Modbus 연동은 엔티티별 조회 주기(scan_interval)의 기본값이 15초입니다 (Home Assistant Modbus). 이 지연을 고려하지 않고 "수동 조작 후 즉시 일시 정지"를 약속하면 지켜지지 않습니다. 규칙이 명령을 보내기 직전에 현재 값을 한 번 더 읽는 절차를 두면 엇갈림이 줄어듭니다.

BACnet의 COV는 클라이언트가 객체에 구독을 걸어두면 값이 바뀔 때 통지를 받는 방식입니다. 구독에는 유효 시간이 있어 만료 전에 다시 구독해야 하고, 모든 객체가 COV를 지원하는 것은 아닙니다 (Chipkin BACnet SubscribeCOV). 구독 갱신이 조용히 실패하면 값이 멈춘 채로 남으므로, COV를 쓰더라도 느린 주기의 조회를 함께 두는 구성이 안전합니다.

Matter 기기는 인터넷이나 클라우드 없이 로컬에서 제어되고, Bluetooth는 처음 등록할 때만 쓰입니다 (Home Assistant Matter). 다만 건물 네트워크는 VLAN으로 나뉘어 있고 멀티캐스트가 막혀 있는 경우가 많아, 기기 선정 전에 네트워크 담당자와 IPv6·mDNS 통과 여부를 확인해야 합니다. Zigbee는 2.4GHz 대역에서 Wi-Fi와 주파수가 겹칠 수 있고, 상시 전원 기기가 중계 역할을 하는 구조이므로 중계 기기의 전원이 자주 꺼지는 배치를 피해야 합니다 (Home Assistant ZHA). 벽 스위치로 전원이 차단되는 조명에 중계를 맡기면 그 뒤의 센서가 함께 끊깁니다.

우선순위를 명시적으로 정합니다

여러 규칙이 같은 기기를 건드릴 때 무엇이 이기는지 정해두어야 합니다.

1순위  안전·설비 보호 규칙 (제외 목록)
2순위  사람의 직접 조작
3순위  예약·스케줄 기반 제어
4순위  센서 기반 자동화
5순위  전체 일괄 제어(퇴근 모드 등)

순위가 정의되어 있지 않으면, 같은 상황에서 실행 순서에 따라 결과가 달라집니다. 재현되지 않는 문제가 되어 원인 파악이 매우 어려워집니다.

누가 무엇을 제어할 수 있는지 정합니다

건물에는 성격이 다른 여러 사람이 있습니다. 모두에게 같은 권한을 주면 사고가 생기고, 지나치게 제한하면 매번 관리자를 찾게 됩니다.

실무에서 쓰는 구분입니다.

역할 제어 범위 설정 변경
시설 관리자 건물 전체 자동화 규칙, 제외 목록, 계층 구조
층·구역 담당자 담당 구역 해당 구역의 스케줄
일반 이용자 현재 사용 중인 공간 불가
외부 방문자 허용된 시나리오만 불가
청소·점검 인력 작업 대상 공간, 작업 시간에만 불가

마지막 행이 자주 빠집니다. 청소 인력은 야간이나 이른 아침에 일하는 경우가 많은데, 그 시간에 자동 절전 규칙이 동작하면 작업이 어려워집니다. 작업 중에는 해당 공간의 자동화를 일시 정지하는 경로를 열어두어야 합니다.

권한 검증은 화면이 아니라 서버에서 이루어져야 합니다. 버튼을 숨기는 것은 편의이고, 실제 차단은 제어 명령을 받는 쪽에서 매번 확인해야 합니다.

무엇이 왜 바뀌었는지 기록합니다

제어 이력은 운영에서 필수입니다. 기록할 항목입니다.

  • 대상 기기와 공간
  • 변경 내용(이전 상태 → 이후 상태)
  • 실행 주체 — 사용자 직접 / 자동화 규칙 / 스케줄 / 외부 연동
  • 실행 결과 — 성공 / 실패, 실패 시 사유
  • 실행 시각

실행 주체 구분이 특히 중요합니다. "왜 꺼졌냐"는 문의가 들어왔을 때, 사람이 껐는지 규칙이 껐는지를 즉시 확인할 수 있어야 합니다. 이 기록이 없으면 대화가 추측으로 흐릅니다.

제어 실패도 기록해야 합니다. 명령은 보냈는데 기기가 응답하지 않은 경우가 성공으로 기록되면, 나중에 데이터를 신뢰할 수 없게 됩니다.


4. 시나리오: 여러 동작을 하나로 묶습니다

공간을 쓰는 사람 입장에서는 기기를 하나씩 조작하는 것이 번거롭습니다. 자주 쓰는 조합을 묶어두면 조작이 한 번으로 줄어듭니다.

시나리오는 상황 이름으로 만듭니다

기기 조합이 아니라 상황을 기준으로 이름을 붙이는 편이 이해가 빠릅니다.

  • 회의 시작 — 조명 밝게, 냉난방 가동, 스크린 내리기
  • 회의 종료 — 전체 소등, 냉난방 정지
  • 청소 모드 — 조명만 점등, 공조 유지
  • 야간 모드 — 최소 조명, 보안 설비 유지
  • 퇴근 — 층 전체 소등 및 절전

순차 실행과 지연이 필요합니다

여러 기기를 동시에 켜면 두 가지 문제가 생깁니다. 하나는 순간 전력 피크이고, 다른 하나는 기기나 통신 장비의 처리 부하입니다. 피크가 요금에 어떻게 반영되는지는 건물 전기요금을 줄이는 순서 — 측정 없이 절감은 시작되지 않습니다에서 다뤘습니다.

시나리오 설계에서 각 동작에 지연 시간을 줄 수 있어야 합니다.

① 조명 점등           (즉시)
② 공조기 A 가동       (+3초)
③ 공조기 B 가동       (+8초)
④ 환기팬 가동         (+15초)

이 간격은 사용자가 체감하기 어려운 수준이지만, 전력 피크와 통신 폭주를 줄이는 데 효과가 있습니다.

지연 값은 코드에 고정하지 않고 시나리오 설정으로 둡니다. 저희가 운영하는 B-Saver에서도 기기에 따라 명령을 연속으로 보내면 뒤 명령이 반영되지 않는 경우가 있었고, 같은 종류의 기기라도 제조사에 따라 반영 시간이 달랐습니다. 이 차이는 현장에서 값을 조정해 맞추는 편이 빠릅니다.

실행 결과를 확인하고 알려줍니다

시나리오를 실행했는데 일부 기기가 응답하지 않는 경우가 있습니다. 이때 "실행 완료"만 표시하면 사용자는 문제를 모릅니다.

  • 각 동작의 성공 여부를 개별적으로 판정합니다
  • 일부 실패 시 무엇이 실패했는지 표시합니다
  • 재시도 여부를 정합니다 — 조명은 재시도해도 되지만, 반복 실행이 위험한 기기도 있습니다

스케줄과 예약 정보를 함께 씁니다

센서만으로 판단하는 것보다, 미리 알 수 있는 정보를 활용하는 편이 정확합니다.

  • 업무 시간 스케줄 — 평일·주말·공휴일을 구분합니다. 공휴일 정보를 매년 갱신하는 절차가 필요합니다
  • 회의실 예약 연동 — 예약이 있으면 시작 전에 미리 가동하고, 종료 후 일정 시간 뒤 정리합니다
  • 계절 전환 — 냉방·난방 모드가 자동으로 바뀌는 기준을 정합니다. 날짜 기준보다 외기 온도 기준이 정확합니다

예약 연동에서는 예약과 실제 사용이 다른 경우를 처리해야 합니다. 예약해놓고 오지 않으면 빈 공간에 냉난방이 도는 것이고, 예약 없이 쓰면 자동화가 절전을 시도합니다.

실무적으로는 예약 시작 후 일정 시간 안에 재실이 감지되지 않으면 예약을 무시하고 절전으로 넘어가는 규칙을 둡니다. 반대로 예약이 없어도 재실이 감지되면 정상 동작하도록 합니다. 예약은 참고 정보이지 결정 근거가 아니라는 관점입니다.

공간 전용과 전역 시나리오를 구분합니다

모든 시나리오가 모든 공간에 적용되지는 않습니다. "회의 시작"은 회의실에만 의미가 있고, "퇴근"은 층이나 건물 단위입니다.

시나리오를 만들 때 적용 범위를 지정하고, 각 공간의 화면에는 해당하는 것만 보이도록 하는 편이 혼란이 적습니다.


5. 현장에서 쓸 수 있는 제어 수단을 함께 설계합니다

관리자용 대시보드만 만들면, 실제로 공간을 쓰는 사람은 제어할 방법이 없습니다.

이용자에게 계정을 요구하지 않는 경로가 필요합니다

회의실을 쓰러 온 외부 방문자나 객실 투숙객에게 계정을 만들라고 할 수는 없습니다. 인증 없이 제한된 제어만 허용하는 경로가 필요합니다.

저희가 쓰는 방식은 공간마다 QR 코드나 짧은 코드를 부여하고, 그것으로 접근하면 허용된 시나리오만 실행할 수 있는 경량 화면을 여는 구조입니다.

설계할 때 정해야 하는 것들입니다.

항목 결정 내용
허용 범위 어떤 시나리오·기기까지 허용할 것인가
유효 기간 무기한인지, 일회성인지, 기간 한정인지
코드 재발급 유출 시 무효화하고 새로 발급하는 절차
접근 기록 누가 언제 실행했는지 남길 것인가
범위 제한 해당 공간의 기기만 제어되도록 보장

마지막 항목이 보안의 핵심입니다. 코드 하나로 다른 공간의 기기까지 제어할 수 있으면 안 됩니다. 요청이 들어올 때마다 해당 코드의 권한 범위를 서버에서 다시 확인해야 합니다. 화면에서 버튼을 숨기는 것만으로는 부족합니다.

현장 단말도 선택지입니다

공간 입구에 태블릿이나 키오스크를 두는 방식도 쓰입니다. QR을 찍는 과정 없이 바로 조작할 수 있고, 현재 공간 상태를 표시하는 안내판 역할도 합니다.

다만 단말이 늘어나면 관리 부담이 생깁니다. 단말 상태 모니터링, 원격 업데이트, 화면 잠금 같은 운영 설계가 함께 필요합니다. 이 부분은 키오스크 프로젝트에서 개발보다 오래 걸리는 것들 — 무인화 시스템 구축 체크리스트에 정리해 두었습니다.


6. 자주 나오는 질문

기존 조명·공조 설비에도 적용할 수 있습니까

설비의 나이보다 제어 접점이 있는지가 관건입니다. 다음 순서로 확인합니다.

  1. 기존 건물자동제어(BAS)가 있고 외부 연동이 가능한가
  2. 개별 기기에 통신 기능이나 접점 제어가 있는가
  3. 없다면 제어 모듈을 추가할 공간과 배선이 확보되는가

1번이 되면 가장 수월합니다. 3번은 전기 공사 범위가 생기므로 현장 조사가 먼저 필요합니다. 조명의 경우 기존 스위치를 스마트 스위치로 교체하는 방식이 비교적 간단하지만, 배선 방식에 따라 불가능한 경우도 있습니다.

인터넷이 끊기면 제어가 안 됩니까

구조에 따라 다릅니다. 모든 제어 명령이 외부 서버를 거치는 구조라면 인터넷 단절 시 제어가 멈춥니다. 현장에 제어 허브를 두고 로컬에서 처리하는 구조라면 인터넷 없이도 기본 동작은 유지됩니다.

건물 제어처럼 중단되면 곤란한 시스템은 로컬 동작이 가능한 구조를 권합니다. 외부 연결은 모니터링과 원격 관리 용도로 두고, 핵심 제어는 현장에서 완결되도록 설계하는 방식입니다.

확인할 것은 허브만이 아닙니다. 제어 경로에 있는 기기 하나라도 제조사 클라우드를 거쳐야만 동작한다면 그 기기는 인터넷이 끊길 때 함께 멈춥니다. 기기를 선정할 때 로컬 제어가 되는지를 기기별로 확인하고, 재실 판단과 절전 규칙 자체도 현장 허브에서 실행되도록 배치합니다. 규칙이 클라우드에서 돌면 센서와 기기가 모두 로컬이어도 자동화는 멈춥니다.

개인정보 문제는 없습니까

사용하는 센서 종류에 따라 달라집니다. 온도·모션·조도 센서는 특정 개인을 식별하지 않으므로 상대적으로 부담이 적습니다.

반면 카메라 영상이나 개인 단말의 위치·연결 정보를 재실 판단에 쓰면 성격이 달라집니다. 이 경우 수집 목적과 범위를 명확히 하고 관련 법령상 요건을 확인해야 합니다. 재실 여부만 필요하다면 개인을 식별하지 않는 방식으로 설계하는 편이 안전합니다.

제어 이력에 사용자 정보가 남는 것도 검토 대상입니다. 누가 언제 무엇을 조작했는지가 근무 감시로 쓰일 수 있기 때문에, 보관 기간과 열람 권한을 미리 정해두는 편이 좋습니다.

효과는 어떻게 확인합니까

공간 제어 자동화의 효과는 두 가지로 나눠 봅니다.

  • 에너지 측면 — 적용 구역과 미적용 구역을 같은 기간에 비교합니다. 전체에 한꺼번에 적용하면 비교 기준이 사라집니다
  • 운영 측면 — 자동화가 실제로 동작한 횟수, 사람이 취소한 횟수, 수동 개입 비율을 봅니다

두 번째 지표가 의외로 중요합니다. 사람이 자동화를 자주 취소하고 있다면 규칙이 현장과 맞지 않는다는 신호입니다. 이 비율이 높은 공간부터 유예 시간이나 조건을 조정하면 됩니다.

절감률을 미리 약속하기는 어렵습니다. 참고할 만한 자료로, 미국 로렌스버클리국립연구소(LBNL)가 상업용 건물의 조명 제어 연구를 모아 분석한 메타분석에서는 재실 기반 제어의 조명 에너지 절감 추정치가 평균 24%였습니다 (LBNL-5095E). 이 수치는 2011년에 발표된 조명 에너지 기준의 평균값이며 냉난방은 포함하지 않습니다. 기존에 얼마나 켜두고 있었는지에 따라 건물마다 결과가 크게 달라지므로, 목표치로 쓰기보다는 자기 건물의 적용 전후 측정값과 견주어 보는 기준 정도로 보는 것이 맞습니다.


7. 착수 전 점검 목록

구조 설계

  • 빌딩·층·공간·기기·센서 계층이 정의되어 있는가
  • 공간에 매핑되지 않은 기기 상태를 허용하는가
  • 공간 유형과 현재 상태 값이 정의되어 있는가
  • 상태를 변경하는 주체(사람·센서·연동)가 구분되어 있는가

자동화 규칙

  • 재실 판단에 사용할 신호를 두 가지 이상 조합했는가
  • 절전 적용 전 유예 시간과 사전 알림 단계가 있는가
  • 유예 시간이 공간 유형별로 구분되어 있는가
  • 자동 제어 제외 목록이 정의되어 있고 잠겨 있는가
  • 규칙 간 우선순위가 명시되어 있는가

센서와 장애 대응

  • 공간별 센서 방식의 한계(정지 재실, 기류, 유리 칸막이)를 설치 전에 검토했는가
  • 자동화를 켜기 전에 센서 기록과 실제 사용을 비교하는 기간을 두었는가
  • 연속 값에는 히스테리시스, 재실 신호에는 유지 시간이 적용되어 있는가
  • 센서 무응답을 공실로 처리하지 않는가
  • 센서별 마지막 보고 시각과 배터리 잔량을 확인할 수 있는가
  • 허브 재시작 후 놓친 공간을 정리하는 주기 점검 규칙이 있는가
  • 인터넷이 끊겨도 재실 판단과 절전 규칙이 현장에서 실행되는가

사람의 조작

  • 수동 조작 후 자동화 일시 정지 시간과 복귀 시 동작이 정해져 있는가
  • 자동화가 보낸 명령과 사람의 조작을 구분하는가
  • 물리 스위치 조작을 인지할 수 있는가, 없다면 상태 동기화 방법이 있는가
  • 통신 방식별 상태 인지 지연(조회 주기)을 확인했는가
  • 제어 이력에 실행 주체와 실패 사유가 기록되는가

시나리오

  • 동작 간 지연 시간을 설정할 수 있는가
  • 부분 실패 시 결과를 표시하는가
  • 적용 범위(공간 전용·전역)가 구분되어 있는가

현장 제어

  • 계정 없이 쓸 수 있는 제어 경로가 있는가
  • 코드의 권한 범위를 서버에서 검증하는가
  • 코드 유효 기간과 무효화 절차가 있는가
  • 접근 기록을 남기는가

마치며

공간 제어 자동화가 현장에서 살아남는지 여부는 기술 수준보다 오판을 어떻게 다루는지에 달려 있습니다.

센서는 틀립니다. 사람은 예외적으로 행동합니다. 이것을 전제로 유예 시간을 두고, 사전에 알리고, 사람의 조작을 우선하고, 무엇이 왜 바뀌었는지 기록해두면 자동화가 신뢰를 잃지 않습니다. 반대로 이 설계가 없으면 아무리 정교한 시스템도 몇 주 안에 꺼집니다.

저희는 공간 단위로 기기를 묶어 제어하고, 센서와 시나리오로 자동화하며, 현장 이용자용 경량 제어까지 연결하는 시스템을 구축해왔습니다. 자체 솔루션인 B-Saver가 이 구조로 운영되고 있습니다. 건물 공간 제어를 검토하고 계시다면 현재 설비의 제어 가능 여부부터 함께 확인해보시면 좋겠습니다.


함께 보면 좋은 글

참고 자료