지난 3년간 개발해온 홈 오토메이션 솔루션으로, 물리적 하드웨어 설치부터 소프트웨어 개발까지 모두 직접 구현했습니다. 2015년 메이커 페어 로마와 마이크로소프트 테크니컬 서밋에서 발표하기도 했습니다.
주요 기능
입력 장치
푸시 버튼 (Busch-Jaeger 2020US)
모션 디텍터 (Abus 360° BW8085)
실내 온도/습도 (DHT22 기반 자체 제작)
창문 상태 (Honeywell Slimline 리드 스위치)
일출/일몰, 외부 온습도 (OpenWeatherMap API)
출력 장치
천장 조명 (릴레이 구동, 디밍 미지원)
콘센트 (릴레이 구동)
롤러 셔터 (업/다운용 2릴레이)
천장 선풍기 (3단 기어용 3릴레이)
욕실 환풍기 (2단 기어용 2릴레이)
기타 기능
크로스 플랫폼 웹 앱 (iOS, Android, Windows, macOS) - 컨트롤러에서 설정 로드
이벤트 로깅: Microsoft Azure Event Hub 및 CSV 파일
UDP 기반 트레이싱으로 디버깅 지원
커스텀 액추에이터 추가 가능
물리 출력을 논리 출력으로 결합
애니메이션 효과 지원
하드웨어 장애에도 부분 동작 보장 (내결함성 설계)
433MHz 무선 릴레이 지원
컨셉: 배전함 중심의 릴레이 제어
리노베이션 시 모든 배선을 배전함으로 끌어와 릴레이로 제어하는 방식입니다. KNX/EIB 같은 버스 시스템 불필요. 모든 버튼, 조명, 콘센트, 셔터가 개별 케이블로 배전함의 액추에이터와 연결됩니다. (독일 230V 환경 기준, 고압 배선은 자격 있는 전기기사가 시공)
하드웨어 상세
신규 배전함
2개 층을 담당하는 새로운 배전함 설치.
최적화된 I²C 버스
I²C 버스는 긴 케이블용으로 설계되지 않았으나, 다음 최적화로 장거리 통신 가능:
5V 구동: 라즈베리 파이는 3.3V이므로 레벨 시프터(P82B96) 필수. 컨트롤러 근처에 배치, 케이블 최소화.
CAT7 트위스트 페어 사용: SDA+GND, SCL+GND 각각 한 쌍씩. 쉴드는 PE 접지.
연선(Stranded cable) 사용으로 신호 품질 향상.
버스 종단에 10kΩ 풀업 저항(SDA, SCL).
속도 100kbit/s(Standard Mode)로 제한.
중간에 I²C 버퍼(P82B96) 배치로 버스 분할 및 신호 증폭.
릴레이 보드 (출력)
독일 CCTools사의 I²C 릴레이 보드 사용. HSRel5: PCF8574 8비트 익스팬더로 5릴레이 + 3GPIO 제어. 릴레이는 12V 구동이 필요해 드라이버(ULN2803)와 인버터 경유. 포트 익스팬더 초기 상태 HIGH이므로 인버터로 LOW 시켜야 릴레이 ON. HSRel8(+8): MAX7311 기반, 8릴레이 + 8GPIO, 인버터 불필요. 두 보드의 활성 로직(HIGH=ON/OFF 차이)은 소프트웨어 드라이버에서 처리.
포트 익스팬더 (입력)
I2C-Port16 HS (MAX7311, 10kΩ 풀업, 100nF 세라믹 커패시터 내장)로 버튼, 모션, 리드 스위치 접점 입력. 각 입력 장치마다 CAT7 실드로 배전함까지 별도 배선. 모든 입력 보드에 공통 인터럽트 라인 연결: 포트 변경 시 인터럽트 라인 LOW로 풀다운 → 라즈베리 파이 GPIO 폴링으로 변경 감지 → 해당 보드만 I²C 폴링 → 이벤트 발생. 불필요한 버스 트래픽 방지.
10개 지점 DHT22 센서 측정. 프로프리어터리 프로토콜이라 주소 지정 불가 → 아두이노 나노를 I²C 슬레이브로 연결. 나노가 2.5초마다 전체 센서 읽어 캐싱, 마스터(파이)가 포트 ID(0-10) 요청 시 값 반환. 웹 앱에서 온도/습도 별도 뷰 제공, 습도 70% 이상 시 곰팡이 위험 경고(빨강).
하드웨어 배치도
433MHz 무선 릴레이
DHT22 브리지용 아두이노 나노에 FS1000A 송신기 추가. 12V로 구동해 범위 확장. 원격 릴레이는 상태 피드백이 없어 5초마다 강제 동기화로 웹 앱 상태 신뢰성 확보. 리모컨 코드는 별도 회로로 학습 후 설정 파일에 등록.
디지털 고양이 화장실
창고방 화장실 → 미사용 연도 연결 → 팬을 릴레이로 제어. 모션 감지 시 팬 자동 가동. 웹 앱에서 수동 제어 및 사용 이력 로그 분석으로 청소 주기 최적화.
소프트웨어 아키텍처
기존 GHI G120(.NET Micro Framework)에서 윈도우 10 IoT 백그라운드 태스크로 마이그레이션. Azure 통합 추가. GitHub 저장소에 전체 솔루션 공개.
프로젝트 구조
App: AngularJS + jQuery + Bootstrap 웹 앱
Controllers: 라즈베리 파이 시작 프로젝트, 홈 구성
SDK: 공유 라이브러리
주요 서브 프로젝트
CK.HomeAutomation.TraceViewer: UDP 브로드캐스트 트레이스 수신 콘솔 앱 (방화벽 포트 19227 개방 필요)
CK.HomeAutomation.Networking: 웹 앱용 HTTP 서버, JSON 상태 제공, 웹 앱 호스팅 (SMB로 수동 배포 필요)
CK.HomeAutomation.Controller.*: IoT 백그라운드 태스크 시작 프로젝트. Controller.Empty가 템플릿. 사전 지식: 파이 2 윈도우 10 IoT 설정, PowerShell 원격 세션, UWP 앱 배포. SetupRaspberryPi.ps1 스크립트 제공.
CK.HomeAutomation.Actuators: 최고 추상화 계층. 홈, 방, 액추에이터(버튼, 조명, 콘센트 등) 구현. 플루언트 API로 방 구성.
액추에이터 종류: MotionDetector(모션 감지/완료 이벤트), Button(짧은/긴 누름 이벤트, VirtualButton 지원), BinaryStateOutput(조명/콘센트 기본), CombinedBinaryStateActuator(여러 물리 출력을 하나의 논리 출력으로 결합, 상태 변경 지연 방지), StateMachine(다중 상태: 선풍기 단수, 무드 조명 등), Temperature/HumiditySensor(10초 주기 폴링).
자동화 규칙
AutomaticTurnOnAndOff: 트리거(버튼/모션) → 지정 시간 ON → 자동 OFF. 시간대 제한(주간/야간) 가능.
AutomaticRollerShutter: 일출/일몰 기준 자동 개폐, 외부 온도 초과 시 닫힘(천창용), 위치 추적(시간 기반).
AutomaticConditionalOn: 조건 만족 시 ON (예: 야간 정원 조명). 다중 OFF 시간대, 일출/일몰 조건 지원.
Generic Automation Framework: 커스텀 액션/조건 정의, 트리거(버튼, 모션, 인터벌 등) 발생 시 평가.
CCTools 릴레이/입력 보드, 433MHz 스위치 드라이버. 아두이노 나노 펌웨어(센서 브리지, 433MHz 송신) 포함. 상위 계층은 인터페이스 기반으로 하드웨어 추상화.
텔레메트리 (CK.HomeAutomation.Telemetry)
CSV 로거: 패키지 LocalState 폴더에 상태 변경 기록. SMB로 다운로드 가능.
Azure Event Hub Publisher: 상태/센서 변경 이벤트 전송. SQL 테이블 생성 스크립트, Stream Analytics 쿼리 제공. Power BI 리포트 예시 포함.
웹 앱
AngularJS + jQuery + Bootstrap. 컨트롤러에서 방 구성 읽어 UI 동적 생성. Configuration.js로 IP, 번역, 아이콘 설정. 로컬 파일로 실행 가능하나 iOS 홈 화면 추가용 웹 서버 호스팅 권장(개인적으로 BananaPi + nginx 사용).