벤더와 기술에 구애받지 않는 자바 기반 스마트홈 자동화 시스템
개요
OpenHAB(open Home Automation Bus)은 2010년 독일 개발자 Kai Kreuzer가 시작한 오픈소스 홈 오토메이션 플랫폼입니다. Java와 OSGi 기반으로 구축되어 엔터프라이즈급 안정성을 제공하며, 다양한 벤더의 스마트 기기를 하나의 시스템으로 통합할 수 있습니다.
| 항목 | 내용 |
|---|---|
| 공식 사이트 | https://www.openhab.org |
| GitHub | https://github.com/openhab |
| 라이선스 | Eclipse Public License 2.0 |
| 최신 버전 | 5.1 (2026년 1월 기준) |
| Docker 이미지 | openhab/openhab:5.1.1 |
| 기반 기술 | Java 21, Apache Karaf, OSGi |
OpenHAB의 특징
1. 벤더 중립성 (Vendor Agnostic)
특정 제조사에 종속되지 않습니다. Z-Wave, Zigbee, KNX, Modbus, MQTT 등 수백 가지 프로토콜과 기기를 하나의 플랫폼에서 통합 관리할 수 있습니다.
2. 엔터프라이즈급 아키텍처
Java와 OSGi 기반으로 모듈화된 구조를 가집니다. 각 바인딩(Binding)이 독립적으로 로드/언로드되어 시스템 안정성이 높습니다.
3. 텍스트 기반 설정 지원
UI 설정 외에도 .items, .things, .rules 등 텍스트 파일로 전체 시스템을 구성할 수 있어 버전 관리(Git)와 백업이 용이합니다.
4. 강력한 규칙 엔진
JavaScript, Groovy, Python(GraalPy), Blockly 등 다양한 언어로 자동화 규칙을 작성할 수 있습니다.
5. 로컬 우선 (On-Premises)
모든 데이터가 로컬에 저장되고 처리됩니다. 클라우드 의존성이 없어 프라이버시가 보장됩니다.
OpenHAB 5.0 주요 업데이트
Matter 지원 (클라이언트 + 브릿지)
OpenHAB 5.0의 가장 큰 변화는 Matter 프로토콜의 완벽한 지원입니다.
Matter 클라이언트 모드
- Matter 인증 기기(조명, 스위치, 온도조절기 등)를 OpenHAB에 직접 연결
- 30개 이상의 디바이스 타입 지원
- Thread Border Router와 연동하여 Thread 기기도 통합
Matter 브릿지 모드
- OpenHAB에 연결된 기기를 Apple Home, Google Home, Amazon Alexa, Samsung SmartThings에 노출
- 기존 Zigbee/Z-Wave 기기도 Matter 생태계로 확장 가능
┌─────────────────────────────────────────────────┐
│ OpenHAB 5 │
├─────────────────────────────────────────────────┤
│ Matter Client │ Matter Bridge │
│ (Matter 기기 제어) │ (외부 생태계 노출) │
│ │ │
│ ┌─────────────┐ │ ┌─────────────┐ │
│ │ Matter 조명 │ │ │ Apple Home │ │
│ │ Matter 스위치│ │ │ Google Home │ │
│ │ Thread 센서 │ │ │ Alexa │ │
│ └─────────────┘ │ └─────────────┘ │
└─────────────────────────────────────────────────┘
Python 스크립팅 (GraalPy)
기존 Jython 대신 GraalPy 기반 Python 3.11을 지원합니다.
# Python 규칙 예제
from openhab import rule, when, get_item
@rule("모션 감지 조명")
@when("Item Motion_Sensor changed to ON")
def motion_light(event):
light = get_item("Living_Room_Light")
if light.state != "ON":
light.send_command("ON")
Java 21 및 64비트 전용
- Java 21로 업그레이드 (가상 스레드 등 최신 기능 활용)
- 32비트 지원 종료 (보안 및 유지보수 이유)
- 의존성 업데이트로 보안 취약점 해결
OpenHAB vs Home Assistant
| 항목 | OpenHAB | Home Assistant |
|---|---|---|
| 개발 언어 | Java (OSGi) | Python |
| 시작 연도 | 2010 | 2013 |
| 설정 방식 | UI + 텍스트 파일 | UI + YAML |
| 플러그인 | Bindings (~300개) | Integrations (~3000개) |
| 학습 곡선 | 높음 | 중간 |
| 안정성 | 매우 높음 | 높음 |
| 커뮤니티 규모 | 중간 | 매우 큼 |
| Matter 지원 | 5.0부터 완벽 지원 | 2023년부터 지원 |
| 추천 대상 | 엔터프라이즈, 고급 사용자 | 일반 사용자, 빠른 시작 |
OpenHAB 선택이 좋은 경우:
- 텍스트 기반 설정으로 버전 관리가 필요할 때
- 엔터프라이즈급 안정성이 필요할 때
- KNX, Modbus 등 산업용 프로토콜을 사용할 때
- Java 기반 커스터마이징이 필요할 때
Docker Compose로 설치하기
기본 설치
services:
openhab:
container_name: openhab
image: openhab/openhab:5.1.1
restart: unless-stopped
network_mode: host
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./openhab_addons:/openhab/addons
- ./openhab_conf:/openhab/conf
- ./openhab_userdata:/openhab/userdata
environment:
OPENHAB_HTTP_PORT: "8080"
OPENHAB_HTTPS_PORT: "8443"
EXTRA_JAVA_OPTS: "-Duser.timezone=Asia/Seoul"
확장 스택 (InfluxDB, Grafana 포함)
services:
openhab:
container_name: openhab
image: openhab/openhab:5.1.1
restart: unless-stopped
network_mode: host
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./openhab_addons:/openhab/addons
- ./openhab_conf:/openhab/conf
- ./openhab_userdata:/openhab/userdata
environment:
OPENHAB_HTTP_PORT: "8080"
OPENHAB_HTTPS_PORT: "8443"
EXTRA_JAVA_OPTS: "-Duser.timezone=Asia/Seoul"
mosquitto:
container_name: mosquitto
image: eclipse-mosquitto:latest
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
- ./mosquitto/log:/mosquitto/log
ports:
- "1883:1883"
- "9001:9001"
restart: unless-stopped
influxdb:
container_name: influxdb
image: influxdb:2
volumes:
- ./influxdb-data:/var/lib/influxdb2
ports:
- "8086:8086"
restart: unless-stopped
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=admin
- DOCKER_INFLUXDB_INIT_PASSWORD=your_password
- DOCKER_INFLUXDB_INIT_ORG=openhab
- DOCKER_INFLUXDB_INIT_BUCKET=openhab
grafana:
container_name: grafana
image: grafana/grafana:latest
volumes:
- ./grafana-data:/var/lib/grafana
ports:
- "3000:3000"
restart: unless-stopped
depends_on:
- influxdb
설치 및 실행
# 디렉토리 생성
mkdir -p ~/openhab && cd ~/openhab
mkdir -p openhab_addons openhab_conf openhab_userdata
# 권한 설정 (openhab 사용자 ID: 9001)
sudo chown -R 9001:9001 openhab_addons openhab_conf openhab_userdata
# docker-compose.yml 파일 생성 후
docker compose up -d
# 로그 확인
docker logs -f openhab
브라우저에서 http://<서버IP>:8080으로 접속합니다.
핵심 개념
Things (씽)
물리적 기기나 서비스와의 연결 지점입니다. 예를 들어 Zigbee 코디네이터, MQTT 브로커, HTTP 엔드포인트 등이 Thing입니다.
Thing mqtt:broker:mosquitto "Mosquitto Broker" [
host="localhost",
port=1883
]
Channels (채널)
Thing 내의 개별 기능입니다. 조명 Thing에는 on/off 채널, 밝기 채널, 색상 채널 등이 있을 수 있습니다.
Items (아이템)
사용자가 상호작용하는 논리적 엔티티입니다. Channel과 연결(링크)되어 실제 기기를 제어합니다.
// items 파일 예제
Switch Living_Room_Light "거실 조명" <light> (gLiving) ["Lighting"]
Dimmer Living_Room_Light_Brightness "거실 조명 밝기 [%d%%]" <slider>
Number:Temperature Outdoor_Temp "실외 온도 [%.1f °C]" <temperature>
Rules (규칙)
자동화 로직을 정의합니다. UI, JavaScript, Blockly, Python 등으로 작성 가능합니다.
// JavaScript 규칙 예제
rules.when()
.item("Motion_Sensor")
.changed()
.to("ON")
.then(event => {
items.getItem("Living_Room_Light").sendCommand("ON");
})
.build("모션 감지 조명 켜기");
Sitemaps (사이트맵)
Basic UI에서 기기를 어떻게 표시할지 정의합니다.
sitemap home label="우리 집" {
Frame label="거실" {
Switch item=Living_Room_Light
Slider item=Living_Room_Light_Brightness
Text item=Living_Room_Temp
}
Frame label="보안" {
Switch item=Alarm_System
Text item=Front_Door_Status
}
}
주요 Bindings
통신 프로토콜
| Binding | 설명 |
|---|---|
| MQTT | IoT 표준 메시지 프로토콜 |
| HTTP | REST API 연동 |
| Modbus | 산업용 통신 프로토콜 |
| KNX | 빌딩 자동화 표준 |
| Serial | 시리얼 포트 통신 |
스마트홈 프로토콜
| Binding | 설명 |
|---|---|
| Matter | 차세대 스마트홈 표준 (5.0 신규) |
| Z-Wave | 저전력 무선 프로토콜 |
| Zigbee | 메시 네트워크 프로토콜 |
| Bluetooth | 블루투스 기기 연결 |
| Thread | IPv6 기반 저전력 메시 |
제조사별 Bindings
| Binding | 설명 |
|---|---|
| Hue | Philips Hue 조명 |
| Shelly | Shelly 스마트 기기 |
| Tasmota | Tasmota 펌웨어 기기 |
| IKEA TRÅDFRI | IKEA 스마트홈 |
| Samsung SmartThings | 삼성 스마트싱스 |
| Xiaomi Mi | 샤오미 기기 |
유틸리티
| Binding | 설명 |
|---|---|
| Astro | 일출/일몰 계산 |
| Network | 네트워크 기기 감지 |
| Exec | 외부 명령 실행 |
| 이메일 알림 | |
| Telegram | 텔레그램 봇 |
자동화 규칙 예제
1. 일출/일몰 기반 조명 제어
// JavaScript (ECMAScript) 규칙
rules.when()
.channel("astro:sun:home:set#event")
.triggered("START")
.then(event => {
items.getItem("Outdoor_Lights").sendCommand("ON");
console.log("일몰 - 외부 조명 켜짐");
})
.build("일몰 시 외부 조명");
rules.when()
.channel("astro:sun:home:rise#event")
.triggered("START")
.then(event => {
items.getItem("Outdoor_Lights").sendCommand("OFF");
})
.build("일출 시 외부 조명 끄기");
2. 온도 기반 에어컨 제어
rules.when()
.item("Living_Room_Temp")
.changed()
.then(event => {
const temp = parseFloat(event.itemState.toString());
const ac = items.getItem("AC_Power");
if (temp > 26 && ac.state === "OFF") {
ac.sendCommand("ON");
items.getItem("AC_Temp").sendCommand(24);
} else if (temp < 23 && ac.state === "ON") {
ac.sendCommand("OFF");
}
})
.build("온도 기반 에어컨 제어");
3. 재실 감지 (Presence Detection)
rules.when()
.item("Phone_Network_Status")
.changed()
.to("OFFLINE")
.for("PT10M") // 10분 동안 오프라인
.then(event => {
items.getItem("Home_Mode").postUpdate("AWAY");
items.getItem("All_Lights").sendCommand("OFF");
items.getItem("Thermostat").sendCommand(18);
})
.build("외출 감지");
rules.when()
.item("Phone_Network_Status")
.changed()
.to("ONLINE")
.then(event => {
items.getItem("Home_Mode").postUpdate("HOME");
items.getItem("Entrance_Light").sendCommand("ON");
})
.build("귀가 감지");
4. Python 규칙 (GraalPy)
from openhab import rule, when, run
from openhab.items import get_item
@rule("문 열림 알림")
@when("Item Front_Door changed to OPEN")
def door_alert(event):
telegram = get_item("Telegram_Message")
telegram.send_command("현관문이 열렸습니다!")
# 밤에는 조명도 켜기
astro = get_item("Astro_Sun_Phase")
if astro.state == "NIGHT":
get_item("Entrance_Light").send_command("ON")
Matter 브릿지 설정
OpenHAB 5.0에서 Matter 브릿지를 설정하면 기존 기기를 Apple Home, Google Home 등에서 사용할 수 있습니다.
1. Matter Binding 설치
Settings → Add-ons → Bindings → Matter 설치
2. Matter 브릿지 Thing 생성
Thing matter:bridge:home "Matter Bridge" [
// 자동으로 QR 코드 생성
]
3. 기기 노출 설정
UI에서 노출할 Items에 메타데이터 추가:
Switch Living_Room_Light "거실 조명" {
matter="Light" [type="OnOffLight"]
}
Dimmer Kitchen_Light "주방 조명" {
matter="Light" [type="DimmableLight"]
}
4. 외부 플랫폼에 페어링
- OpenHAB UI에서 Matter Bridge의 QR 코드 확인
- Apple Home / Google Home / Alexa 앱에서 “기기 추가”
- QR 코드 스캔하여 페어링
클라우드 연동
myopenhab.org
무료 클라우드 서비스로 원격 접속과 음성 어시스턴트 연동을 지원합니다.
- https://myopenhab.org 에서 계정 생성
- openHAB Cloud Connector 애드온 설치
- UUID와 Secret 입력 (userdata/uuid, userdata/openhabcloud/secret)
Google Assistant / Amazon Alexa
myopenhab.org 연동 후 Google Home 또는 Alexa 앱에서 openHAB 스킬을 활성화하면 됩니다.
백업 및 복구
자동 백업 스크립트
#!/bin/bash
# openhab-backup.sh
BACKUP_DIR="/backup/openhab"
DATE=$(date +%Y%m%d_%H%M%S)
OPENHAB_DIR="/home/docker/openhab"
# 컨테이너 정지 (선택사항)
# docker stop openhab
# 설정 백업
tar -czvf "$BACKUP_DIR/openhab_conf_$DATE.tar.gz" \
"$OPENHAB_DIR/openhab_conf"
# userdata 백업
tar -czvf "$BACKUP_DIR/openhab_userdata_$DATE.tar.gz" \
"$OPENHAB_DIR/openhab_userdata"
# 컨테이너 재시작
# docker start openhab
# 30일 이상 된 백업 삭제
find "$BACKUP_DIR" -name "openhab_*.tar.gz" -mtime +30 -delete
echo "백업 완료: $DATE"
복구
# 컨테이너 정지
docker stop openhab
# 기존 데이터 이동
mv openhab_conf openhab_conf.old
mv openhab_userdata openhab_userdata.old
# 백업 복원
tar -xzvf openhab_conf_20260120.tar.gz
tar -xzvf openhab_userdata_20260120.tar.gz
# 권한 재설정
sudo chown -R 9001:9001 openhab_conf openhab_userdata
# 컨테이너 시작
docker start openhab
openHABian
Raspberry Pi에서 openHAB을 가장 쉽게 시작하는 방법입니다.
- https://www.openhab.org/docs/installation/openhabian.html 에서 이미지 다운로드
- SD 카드에 굽기 (Raspberry Pi Imager 사용)
- 부팅 후 자동 설정 완료 대기 (약 45분)
http://openhabian:8080접속
openHABian은 다음을 자동으로 설정합니다:
- openHAB 최신 버전
- Frontail (로그 뷰어)
- Samba (파일 공유)
- 자동 백업
- 보안 설정
성능 최적화
JVM 메모리 설정
docker-compose.yml에서:
environment:
EXTRA_JAVA_OPTS: "-Xms512m -Xmx2g -Duser.timezone=Asia/Seoul"
지속성(Persistence) 최적화
모든 아이템을 저장하지 말고 필요한 것만 저장:
// persistence/influxdb.persist
Strategies {
everyMinute : "0 * * * * ?"
everyHour : "0 0 * * * ?"
}
Items {
// 온도, 습도만 분당 저장
gTemperature*, gHumidity* : strategy = everyMinute
// 스위치 상태는 변경 시에만
gSwitches* : strategy = everyChange
}
마무리
OpenHAB은 15년 이상의 역사를 가진 검증된 홈 오토메이션 플랫폼입니다. Home Assistant에 비해 학습 곡선이 높지만, 텍스트 기반 설정, 엔터프라이즈급 안정성, 산업용 프로토콜 지원 등 독보적인 장점이 있습니다.
특히 OpenHAB 5.0에서 추가된 Matter 지원으로, 기존 Zigbee/Z-Wave 기기를 Apple Home, Google Home, Alexa에 쉽게 연결할 수 있게 되었습니다. 스마트홈을 장기적으로 운영하고, 버전 관리가 필요하며, 안정성을 최우선으로 생각한다면 OpenHAB이 좋은 선택입니다.