본문 바로가기

홈어시스턴트 IoT

IoT 미닫이 창문 자동 개폐 실험 - 홈어시스턴트, Tuya, Smart Life

자동 개폐 이유

 

모르는 것이 약이라는 말이 있습니다. 

 

집에 있든 캠핑을 가든 항상 이산화탄소 수치를 관리하다보니 열교환 환기장치가 없는 부모님 구축 주택에서는 주방 뒤쪽 창문을 몇 cm가량 늘 열어 놓습니다. 

 

겨울에는 이 틈으로 칼바람이 들어와서 난방열을 빼앗아 가고 있습니다. 

 

방안 1 - 열교환 환기 장치 

 

우선 아래의 열교환 기능이 조금 있는 환기장치를 고려했는데, 콘크리트 벽을 뚫어야 하는 압박이 있고 용량도 큰 평수는 아니라서 포기했습니다. 

 

작은 공간용 환기장치

 

방안 2 - 벽 환풍기 

 

이산화탄소 수치에 따라 자동으로 가동되는 환풍기를 생각해 볼 수 있는데 설치할 곳이 마땅치 않았습니다. 

 

방안 3 - 자동 창문 개폐 

 

마지막으로 창문을 평소에 닫아 놓고 이산화탄소 수치가 충분히(?) 올라갔을 때 활짝 여는 방법을 고려했는데, 사람은 잊을 수 있으므로 자동화를 해보기로 했습니다. 아래는 여닫이용으로 개발된 제품인데 미닫이 문에 (우격다짐으로) 적용해 봤습니다. 

 

여닫이 창문용으로 판매되는 Tuya 호환 IoT 장치(40cm까지 열림)

 

부엌 창문에 설치해 보았습니다. 작동하는 모습은 다음과 같습니다. 

 

아래 비디오로 볼 때 체인이 아래쪽으로는 휘어지는데 앞뒤로는 휘지 않아서 어쩔 수 없이 창문틀 안쪽에 우격다짐으로 고정 했습니다. 두꺼운 양면 매직 테이프로 나무 판재의 상하와 창문 개폐기를 붙였습니다. => 면이 고르지 못하여 접착력이 약하므로 별도로 나사로 고정해야 했습니다. 

 

IoT 자동 창문 개폐 장치

 

비디오에서 보면 검은 플라스틱이 하나 본체에서 떨어져 나오는데 체인이 수직으로 나오는 것도 방해해서 살짝 아래로 처지게 되어 있어서 나사를 풀어버려서 그렇습니다. 

 

이중창이라서 창문 2개를 연결해야 하는데, 3D 프린팅한 부품을 역시 매직 테이프로 고정했습니다. 

 

ChatGPT에게 설계를 시켜서 인쇄한 부품(OpenSCAD용 스크립트 생성)

 

3D 부품 제작 by ChatGPT

 

아직 3D 설계는 배우는 중이라서 ChatGPT에게 물어봤더니 OpenSCAD용 스크립트를 주더군요. Bard는 .SLT를 줬는데 읽을 수는 없었습니다. ChatGPT는 3D 인쇄 필라멘트를 아껴 달라고 하니까 트러스 구조 패턴을 넣어주기까지 하네요. 

 

OpenSCAD 및 인쇄 중인 모습

 

$fn=100; // Set the resolution for a smoother appearance

module truss_pattern() {
    rotate([90, 0, 0])
        linear_extrude(height = 5)
            rotate([0, 0, 45])
                linear_extrude(height = 10)
                    square([5, 5], center = true);
}

module hexahedron(size_x, size_y, size_z, thickness) {
    difference() {
        cube([size_x, size_y, size_z]);
        translate([thickness, thickness, thickness])
            cube([size_x - 2*thickness, size_y - 2*thickness, size_z - 2*thickness]);
        
        // Truss-like pattern on all sides
        for (i = [0:5]) {
            translate([thickness, size_y/2 - thickness, thickness])
                rotate([0, 0, 60*i])
                    truss_pattern();
        }
    }
}

// Set the dimensions
size_x = 70;
size_y = 30;
size_z = 70;
thickness = 7;

// Generate the hollow hexahedron with truss-like patterns on all sides
hexahedron(size_x, size_y, size_z, thickness);

 

한계와 개선할 점

 

결정적으로 이 창문 개폐기가 Home Assistant와 연동이 안됩니다. Tuya호환 장치 중에 지원이 안되는 장비가 있는데 그런 것들 중의 하나이고, 자동화하려면 Smart Life 앱에서 하는 수 밖에 없겠습니다. 물론, Home Assistant에서 지원되도록 드라이버 같은 것을 직접 개발하면 가능합니다.  => 아래에 추가된 부분 참조

 

Smart Life 앱에서는 열거나 닫는 도중에 Stop버튼을 누를 방법이 없어 보입니다. 완전히 열거나 완전히 닫거나 둘 중 하나인 것입니다. 역시, Home Assistant용으로 뭔가 개발해야 쓸만해질 것 같네요. => 아래 추가 내용 참조 

 

일단 깨어 있는 시간에는 이산화탄소 수치를 보면서 수동으로 조절하고, 자는 동안에는 Smart Life앱의 자동화를 통해서 닫혀 있다가 2~3시간에 한번씩 10분간 열어 놓도록 실험을 해보고 있습니다. 

 

아래는 시간 설정에 의한 자동 환기의 모습입니다. 

  • 취침 중에는 거실의 이산화탄소 수치가 덜 오르는 편입니다. => 자동화 간격을 넓힌 이유
  • 밤에 환기 효과가 높은 것은 외부의 찬 공기가 (기압의 영향으로)  빠르게 유입되었기 때문입니다. => 날씨에 따라 달라질 수 있으므로 시간 설정으로 하면 안되는 이유... 
  • 오전8시30부터는 활동 증가에 따라 높아졌습니다. => 낮에는 수동으로 기존처럼 창문을 조금 열어 두어서 환기 

밤에는 창문을 닫아 두고 자동 환기를 적용한 후 이산화탄소 수치의 변화

 

난방에 어떤 영향을 미칠 지에 대해서 파악하기는 어려울 것 같습니다. 10분간 열어 두면 공기 온도가 내려가서 바닥 온도가 25도가 넘을 때 까지 난방하는 방식이기 때문인데, 약간 여러 두었을 때와 비교할 방법이 생각나지 않네요. 이론적으로는 일시적인 환기가 낫다고 합니다만... 

 

1000ppm에서 창문을 열고 900ppm이 되거나 15분이 경과하면 창문을 닫도록 자동화 적용해 본 결과 아래와 같이 이산화탄소 수치가 변화합니다. 

자동 환기 적용 후 이산화탄소 수치 변화

Home Assistant에 등록 시 로컬 투야로 장치 종류를 특정하면 제어 가능 

HACS에서 Local Tuya를 설치하고, https://github.com/rospogrigio/localtuya/ 를 참조하여 "cover" 장치로 등록을 해 보았습니다. Tuya IoT Platform에 무료 개발자 계정을 만들어야 하므로 과정이 (어려운 것은 아니지만) 복잡합니다.

 

  • 주의할 점 = 홈어시스턴트의 Integration에서 Local Tuya를 추가할 때 입력 항목 중에 User ID가 있는데 Smart Life 앱이나 Tuya 앱의 User ID가 아님에 유의해야 합니다.  Tuya IoT Platform에서 생성한 클라우드 프로젝트에 연결된 App의 UID 값입니다. 보통 Smart Life앱을 등록하게 됩니다.  

이제 Open, Stop, Close 명령을 언제든 사용할 수 있으므로, 자동화나 스크립트의 시간 지연 기능을 이용하면 약간만 열거나 닫는 것을 구현할 수 있게 되었습니다. 

 

창문 닫기와 창문 열기 스크립트를 만들어서 자동화 작업을 편하게 합니다(닫기 및 열기는 여닫이용이라서 미닫이와 반대의 값).  

 

창문을 조금 열기 위해 40초 중 7초간 작동하는 스크립트

 

Local Tuya Integration의 장치로 Smart Windows and Doors를 추가하는 방법은 의외로 간단한 편입니다. 장치의 IP주소를 알아야 하고, Local key는 Tuya IoT Platform에서 얻어야 합니다(가입 및 프로젝트 생성과 앱등록이 미리 필요). 

 

"구성"을 눌러서 장치를 추가

 

목록에서 Smart Windows and doors를 선택합니다. 장치 종류는 Cover로 선택해야 합니다. 

 

Local Key 얻는 방법은 아래 참조

 

위 정보를 입력하고 다음 화면으로 넘어가면 

 

Cover장치로 설정하는 모습

Local Tuya 통합에 필요한 정보 얻기 

Tuya IoT Platform에 가입하고 클라우드 프로젝트를 하나 만들어야 됩니다(Basic 무료). Tuya장치를 등록해서 사용 중인 Smart Life앱이나 Tuya앱도 클라우드에 연결해 놓습니다. 

 

Home Assistant의 HACS에서 Local Tuya Integration을 추가하고 통합구성요소 추가하기에서 LocalTuya Integraion을 선택하고 설정을 하다보면 다음 화면이 나옵니다. 

 

LocalTuya 항목 추가 장면

 

어려운 것은 없지만 참고 삼아 Tuya IoT Platform의 화면을 몇 가지 보여드리겠습니다. 프로젝트가 하나도 없다면 Create Cloud Project를 통해서 만들어야 합니다. 

 

ircontrol이라는 이름으로 프로젝트를 만든 모습입니다.

 

위 화면에서 Open Project ...를 누르면 추가 정보가 나옵니다. 

 

Client ID와 Secret을 얻을 수 있는 화면입니다.

 

위 화면에서 Devices를 누르면 등록된 장치가 나옵니다. 물론 Link Tuya App Account가 이미 되어 있어야 됩니다. 

 

이번에 구입한 장치가 표시되고 있는 화면

 

위 화면에서 Link Tuya App Account를 클릭합니다. 그러면 User ID에 넣을 항목인 UID 값을 얻을 수 있습니다. 

 

LocalTuya Integration 항목 추가 시, User ID에 입력이 필요한 UID값

 

나중에 실제 장치 구성할 때 필요한 Local Key도 미리 알아 둡니다. 

 

Local Key 값은 장치 추가할 때 필요