지난 몇 년 동안 저는 제 집에 상당한 양의 스마트 홈 기술을 추가했습니다. 무엇보다도 조명과 콘센트를 제어하고, 다양한 가전제품의 상태를 모니터링하고, 사용하는 전기와 물의 양을 측정하고, 누수가 발생할 경우 물 공급을 차단할 수 있습니다. 이 모든 기술은 허브를 통해 조정되며, 저는 원래 기존 브라우저 기반 인터페이스를 통해 액세스했습니다. 하지만 원하는 판독값이나 설정을 찾기 위해 화면을 스크롤하고 클릭하는 것은 a) 느리고 b) 지루합니다. 저는 빠르고 즐거운 인터페이스, 즉 디스플레이와 버튼이 있는 실제 제어판을 원했습니다.
1979년 원자력 발전소의 제어실과 비슷한 곳 중국 증후군. 그 영화를 봤을 때 저는 열 살 정도였고, 잭 레몬이 멜트다운을 피하려고 애쓰는 것을 보면서 압도적인 생각은 “와, 저 패널이 멋지다!”였습니다. 그래서 이 패널이 이 디자인의 북극성이 되었습니다.
그러나 미적 요소에 대해 작업하기 전에 패널이 입력과 출력을 처리하고 집의 시스템과 통신하는 방법을 고려해야 했습니다. 집의 기기는 오픈 소스를 사용하여 서로 연결되어 있습니다. 홈 어시스턴트 플랫폼. 오픈 소스 플랫폼을 사용하면 예를 들어 독점 시스템의 강제 업그레이드로 인해 갑자기 전등을 켤 수 없게 될까봐 걱정할 필요가 없고, 클라우드에 있는 누군가가 내 집의 활동을 모니터링하고 있는지 궁금해할 필요가 없습니다.
내 Home Assistant 설정의 핵심은 Linux를 실행하는 오래된 PC로 구동되는 허브입니다. 이것은 내 센서, 가전제품 및 기타 장치와의 무선 연결을 처리합니다. 에너지 미터와 같은 상용 기성품 장비의 경우 이 통신은 일반적으로 다음을 통해 이루어집니다. 지웨이브. 내 홈브류 장치는 Raspberry Pi의 GPIO 핀에 연결되어 있으며, 이 핀은 Wi-Fi를 통해 상태를 전달합니다. MQTT 표준 프로토콜 사물 인터넷을 위해. 하지만, 제어판과 허브 PC 사이에 유선 이더넷 연결을 하기로 했습니다. 이렇게 하면 Power over Ethernet(PoE)을 사용하여 패널에 전기를 공급할 수 있기 때문입니다.
제어판에 사용되는 다양한 유형의 구성 요소에는 터치스크린 디스플레이가 포함됩니다. [A]LED 디스플레이 [B]라즈베리파이 [C]Power over Ethernet 보드 [D]그리고 비상 정지 버튼 [E]. 제임스 프로보스트
사실, 나는 사용합니다 둘 이더넷 연결은 제어판 기능을 두 개의 모델 3B+ Raspberry Pis로 나누기로 결정했기 때문입니다. 이 모델의 가격은 각각 약 35달러입니다. (전체 재료 목록은 다음에서 확인할 수 있습니다. 내 GitHub 저장소). 한 Pi는 터치스크린 디스플레이를 구동하고 다른 Pi는 버튼과 LED를 처리합니다. 각각 $20 추가 기능이 장착되어 있습니다. PoE “모자” 이더넷 연결을 통해 전원을 공급받습니다.
모든 버튼과 LED를 구동하려면 50개가 넘는 I/O 신호가 필요한데, 이는 Pi에서 찾을 수 있는 GPIO 헤더가 수용할 수 있는 것보다 더 많습니다. 이 헤더에는 40개의 핀이 있지만 실제로 사용할 수 있는 핀은 약 26개뿐입니다. 그래서 저는 $6 I2C 익스팬더각각 16개의 I/O 신호를 처리하고 2선 데이터 버스를 통해 이를 다시 전달할 수 있습니다.
강제 업그레이드로 인해 갑자기 전등을 켤 수 없게 될까봐 걱정할 필요가 없습니다.
각 Pi를 구동하는 소프트웨어도 기능이 분리되어 있습니다. 이는 다음을 사용하여 수행됩니다. 도커 컨테이너: 자체 포함 샌드박스 역할을 하는 소프트웨어 환경. 터치스크린을 담당하는 Pi에는 세 개의 컨테이너가 있습니다. 하나는 키오스크 모드에서 브라우저를 실행하여 Home Assistant 허브에서 그래픽 디스플레이를 가져옵니다. 두 번째 컨테이너는 Python 스크립트를 실행하여 터치스크린 입력(예: 다른 정보 화면의 아이콘을 누르는 것)을 허브에 대한 요청으로 변환합니다. 세 번째 컨테이너는 로컬 웹 서버를 실행합니다. 키오스크 브라우저가 허브 대신 이 로컬 서버를 가리키면 화면에 문제 해결에 유용한 내부 진단 정보가 표시됩니다.
다른 Pi에는 Python 스크립트를 실행하는 두 개의 컨테이너가 있습니다. 하나는 모든 버튼 입력을 처리하고 명령을 허브로 보냅니다. 다른 하나는 허브에서 상태 정보를 요청하고 그에 따라 모든 LED를 업데이트합니다.
입력 및 출력 기능은 패널의 Raspberry Pis에서 실행되는 소프트웨어 컨테이너에 분할됩니다. 이들은 허브와 통신하여 명령을 보내고 상태 업데이트를 받습니다. 제임스 프로보스트
이 컨테이너는 위에서 실행됩니다 발레나OS엣지에서 이러한 샌드박스를 실행하도록 설계된 운영 체제는 물론 Pi와 같은 임베디드 장치도 실행하도록 설계되었습니다. 전체 공개: 저는 엣지 AI 활성화 책임자입니다. 고래BalenaOS를 담당하는 회사이지만 컨테이너 기반 접근 방식 때문에 회사에 합류하기 전에 운영 체제를 사용하기 시작했습니다. Docker 컨테이너를 사용하여 실행할 수 있습니다. 라즈베리파이 OS하지만 BalenaOS를 사용하면 컨테이너를 원격으로 시작, 중지, 업데이트하는 등 컨테이너를 관리하기가 더 쉬워집니다.
일부 버튼의 상태를 읽고 일부 표시등을 켜는 데 이 소프트웨어 인프라가 지나치게 과하다고 생각할 수도 있지만, 저는 컨테이너를 좋아합니다. 컨테이너를 사용하면 나머지 시스템에 어떤 영향을 미칠지 걱정하지 않고 하나의 하위 시스템에서 작업할 수 있기 때문입니다. 터치스크린을 엉망으로 만들지 않고도 버튼 눌림을 허브로 전송하는 방식을 조정할 수 있습니다.
버튼과 다양한 디스플레이는 3D로 인쇄된 패널 세트에 장착됩니다. 저는 먼저 이것들을 종이에 전체 크기로 매핑한 다음 3D 인쇄 파일을 만들었습니다. 팅커캐드. 각 제어장치의 라벨과 집의 수도관 도식도는 각 세그먼트에 홈으로 인쇄한 다음, 대비를 위해 흰색 스패클로 채웠습니다. 그런 다음 패널 배열을 기성품인 45달러짜리 “플로터” 프레임에 장착했습니다.
메이커 정신의 작은 기적 덕분에 패널 세그먼트와 프레임이 첫 시도에서 모두 잘 맞았습니다. 완성된 패널을 집 복도에 설치했는데, 제 가족은 다소 당황했습니다. 하지만 저는 상관없습니다. 물이 새면 잭 레몬이 핵 붕괴를 막으려는 모든 당당함으로 주요 밸브를 닫는 큰 비상 버튼을 누를 수 있으니까요!