Microsoft MVP성태의 닷넷 이야기
글쓴 사람
홈페이지
첨부 파일
 

Synology NAS(DS216+II)를 이용한 원격 컴퓨터의 전원 스위치 제어

개발자라면 다들 공감하시겠지만, 사실 업무와 공부의 경계가 많이 모호한 면이 있습니다. 이 때문에 회사 컴퓨터를 켜놓고 집에서 접속해야 할 경우가 종종 있는데요, 그렇다 해도 많지는 않아서 항상 켜놓기에는 전기 사용이 좀 아깝습니다. 하지만, 꺼놓고 퇴근하자니 또 집에서 필요해지면 아쉽기 때문에 그러는 것도 좀 망설여지는데요.

그래서 ^^ 만들었습니다. 회사 컴퓨터의 전원을 원격으로 제어가 가능하도록 하는 것입니다.




이를 구현하기 위해, 6년 전에 구매했던 - 먼지가 내려앉은 넷두이노를 꺼냈습니다. ^^

.NET Micro Framework - 넷두이노 플러스
; https://www.sysnet.pe.kr/2/0/1392

(새 버전의 넷두이노가 나와서 이제는 지원도 끊겨 버렸지만) 마지막 firmware 버전인 4.2.0.1로 업그레이드까지 하고 네트워크 구현까지 완료했지만... 아쉽게도 이더넷 LAN 포트가 접촉 불량 문제가 발생했습니다. 납땜의 문제는 아닌 것 같고 랜 소켓 자체가 내부에 이더넷 케이블과 접촉되는 공간이 유격이 발생한 듯 케이블을 살짝 움직일 때마다 네트워크 접속이 끊어져 버리는 것입니다.

할 수 없이 ^^; 다시 먼지가 쌓이도록 창고에 두고 그다음 제가 가지고 있는 보드 중,


후보로 떠오른 것이 "라즈베리 파이 제로 W"입니다. WiFi를 기본 제공하고 RPi의 특성상 PC 환경에 준하는 개발 환경을 가지고 있기 때문에 프로그램 작성도 매우 용이합니다.

한 가지 아쉬운 것은 제가 가지고 있는 "라즈베리 파이 제로 W"가 Data Pin 쪽에 헤더가 납땜되어 있지 않은 모델이라는 점입니다. (혹시, 제로 W 모델을 구매하시려는 분이 있다면 "with Headers" 모델을 추천합니다.)

[그림 - 출처 http://www.icbanq.com/P008219607]
raspberry_pi_zero_w_with_no_pin_header_1.jpg

그래서 저걸로 Data Pin을 제어하려면 핀 헤더를 납땜해야 하는 불편함이 있습니다.

How to solder header pins to the Raspberry Pi Zero (W) 
; https://www.youtube.com/watch?v=UDdbaMk39tM

그런데, 제가 인두기가 없습니다. ^^




고민하던 차에, 생각난 것이 바로 제 책상에 있는 Synology NAS(DS216+II)입니다. 항상 켜져 있는데다, 리눅스 운영체제가 올라가 있기 때문에 프로그램도 마음대로 올릴 수 있고 게다가 .NET Core 프로그램도 제작할 수 있습니다.

제어 환경이 결정되었으니, 이제 남은 문제는 어떻게 컴퓨터의 전원을 껐다 켰다 할 것이냐입니다. 사실 이것은 매우 간단한데, 컴퓨터 케이스의 전원 스위치 동작을 그대로 따라 해 주기만 하면 되기 때문입니다. 가령, 제가 가지고 있는 "GIGABYTE GA-Z87-HD3" 메인 보드는 다음과 같은 PW+, PW- 핀 배열을 가지고 있습니다.

turn_on_the_device_1.png

PW+와 PW- 간의 전압을 측정해 보면 약 3.347V가 나오는데, 그렇다는 것은 곧 컴퓨터 케이스의 전원 스위치가 말 그대로 "전선을 연결하는" 정도의 역할만 한다는 것이고, 외부에서 이것을 제어하려면 마찬가지로 별도 전원을 인가할 필요 없이 그냥 "연결"만 하면 되는 식입니다. 오호... 그러고 보니 그 용도로 딱인 장치를 전에 살펴본 적이 있습니다.

PC에 연결해 동작하는 자신만의 USB 장치 만들어 보기
; https://www.sysnet.pe.kr/2/0/11606

위의 글에서 설명한 FTDI 장치의 DTR 라인은 아두이노의 데이터 핀처럼 별도의 전원을 제공하는 것이 아닌, 단순히 선을 연결해 주는 동작만 하는 것이기 때문에 컴퓨터 전원 스위치를 켜는 용도로 사용할 수 있습니다.

따라서, FTDI의 GND를 PW-에 연결하고 DTR 선을 PW+에 연결하면 됩니다.

turn_on_the_device_2.png

이제 남은 작업은 NAS 장치에서 DTR 신호를 제어할 소프트웨어를 만드는 것인데 이 방법은 이미 아래의 글에서 모두 설명했습니다. ^^

Synology NAS(DS216+II)에서 FTDI 장치를 C/C++로 제어
; https://www.sysnet.pe.kr/2/0/11733

Synology NAS(DS216+II)에 FTDI 장치 연결 후 C#(.NET Core)으로 DTR 제어
; https://www.sysnet.pe.kr/2/0/11734

저는 docker를 이용해 C#으로 만든 .NET Core 프로그램을 제작해 올렸습니다. docker의 container 관리 덕분에 마치 NT 서비스처럼 재부팅 시에도 container를 자동 실행해 주므로 별도의 관리 절차는 필요하지 않았습니다.




자, 이제 ^^ 컴퓨터의 제어판에서 "Power Options"를 들어가 컴퓨터 전원 스위치가 눌렸을 때 "최대 절전 모드(Hibernation)"로 들어가도록 설정합니다. 그다음, 원하는 시기에 소프트웨어로 "FT_SetDtr/FT_ClrDtr" 신호를 전달하도록 하면 컴퓨터가 켜져 있는 경우 최대 절전 모드로 들어가고, 꺼져 있는 경우에는 컴퓨터가 켜지게 됩니다.

제 경우에는 전에도 다뤘던 Xamarin을 이용해,

Xamarin - 기존 리모컨 기능을 핸드폰의 적외선 송신으로 구현
; https://www.sysnet.pe.kr/2/0/11674

다음과 같이 안드로이드 프로그램을 만들어서,

turn_on_the_device_3.png

원격에서 제어할 수 있도록 했습니다. ^^




몇 가지 더 이야기를 해보면.

우선, 주의할 것이 하나 있습니다. FTDI 장치와 메인보드 간의 선을 연결 시, 반드시 DTR과 PW+를 연결하고 GND와 PW-를 연결해야 합니다. 컴퓨터 케이스의 Power Switch는 물리적으로 접점이 끊긴 것을 연결하는 것이기 때문에 +/- 극을 맞출 필요가 없지만 FTDI 장치는 극이 맞아야 합니다. 저도 내부적인 FTDI 장치의 배선을 몰라 자세하게 설명할 수는 없지만, 현상 자체는 DTR을 PW-, GND를 PW+에 연결하는 경우 그 순간 컴퓨터 전원이 들어오게 됩니다. 계측기로 + 단자를 DTR에 - 단자를 GND에 놓고 측정하면 저항이 무한대가 되지만, 그 반대로 하는 경우에는 약 250K 정도의 저항이 측정되는 걸로 봐서 선이 연결된 것과 유사한 역할을 하는 것 같습니다.

또 다른 이야기가 있다면 바로 "마감"입니다. 대충 해 놓으면 동작은 하겠지만 실 사용 환경에서라면 좀 더 완성도를 높이는 게 좋습니다. 일단 FTDI와 NAS를 연결하는 것은 USB 케이블로 깔끔하게 해결은 됩니다. 하지만 FTDI의 DTR, GND와 메인 보드 간의 연결을 하는 것은 그다지 매끄럽게 해결이 안 됩니다. 우선, 기존의 컴퓨터 케이스에 있는 Power Switch를 안 쓰는 걸로 가정하고 다음의 케이블을 사용할 수 있습니다.

PC 파워 전원 스위치 케이블/메인보드연결
; http://item.gmarket.co.kr/detailview/item.asp?goodscode=995567752

computer_power_cable_1.png

Female Header 부분이 메인 보드의 Power Pin에 정확히 연결할 수 있기 때문에 편리하긴 한데 문제는 반대쪽 스위치를 잘라내고 FTDI의 DTR, GND에 연결하는 것이 불편합니다. 이 케이블의 선은 단선이 아닌 연선인데다 제가 가지고 있는 와이어 스트리퍼 기준으로,

Vessel 3500E-2
; https://www.eleparts.co.kr/goods/view?no=5803

24AWG(0.5mm)로 피복이 벗겨지는데, 단선도 아닌 연선이어서 FTDI의 DTR, GND 소켓에 끼우기에는 너무 얇습니다. (악어 클립으로 집는 것도 그다지 권장할 수 없습니다.)

차라리 그보다는 22AWG 단선으로,

테프론선 0.6T (빨강) 1M 
; http://devicemart.co.kr/goods/view?no=34217

"PC 파워 전원 스위치 케이블"과 납땜으로 연결하거나, 아니면 Female-Female 케이블을 22AWG 단선으로 FTDI와 납땜 없이 연결하는 것이 좋습니다.




위에서 설명한 방법으로는, 아쉽게도 컴퓨터 케이스의 파워 스위치를 사용할 수 없습니다. (아니면 잘라서 납땜을 해야 합니다.) 물론, 그렇게 하면 불편할 것이기 때문에 방법을 좀 더 찾아봤고 그러다 알게 된 것이 바로 "무탈피 커넥터"입니다.

무탈피커넥터 (T-11)
; https://www.eleparts.co.kr/goods/view?no=6508906

T 타입의 커넥터는 기존 선을 (자르지 않으면서) 새로운 선과 연결할 수 있으므로 다음과 같이 납땜 없이도 간편하게 연결할 수 있습니다.

turn_on_the_device_4.jpg

그런데, 이것도 문제가 약간 있습니다. 위의 T 타입 커넥터가 연결할 수 있는 전선이 AWG24 ~ 20규격인데, FTDI 측의 22AWG 단선과는 잘 연결할 수 있지만 컴퓨터 케이스와 메인보드에 연결하는 Power 핀의 전선이 (아마도) 26AWG로 매우 얇아서 커넥터가 잘 잇지 못할 것 같았습니다. 하지만 설령 통전이 안 된다 해도 기존 선을 자르거나 하는 것은 아니기 때문에 밑져야 본전이라는 심정으로 부품 구매를 해서 연결 시도를 해봤는데요.

우선, 집에 있는 컴퓨터부터 테스트를 해봤습니다. 그러니까,,,, 아주 꽉 ^^; 눌러주면 연결이 됩니다. 확인을 위해 멀티미터로 통전 테스트를 하면서 진행했는데 통전이 될 때까지 꽉꽉 눌러주면 ^^; 됩니다. 그리고 회사에 있는 컴퓨터 역시, 그렇게 해서 잘 연결을 했습니다. 참고로, 손으로 누를 수 있는 정도가 아니므로 반드시 펜치 같은 도구가 있어야만 합니다.

암튼, 이렇게 해서 ^^ 그나마 지저분하지 않게 잘 마감을 했습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]





[최초 등록일: ]
[최종 수정일: 10/15/2018 ]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer@outlook.com

비밀번호

댓글 쓴 사람
 




1  2  3  4  5  6  7  8  9  10  [11]  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
11756정성태10/19/20181018오류 유형: 500. Visual Studio Code의 아두이노 프로그램 개발 시 인텔리센스가 안 된다면?
11755정성태10/19/20181775오류 유형: 499. Visual Studio Code extension for Arduino - #include errors detected. [1]
11754정성태10/19/20181196개발 환경 구성: 415. Visual Studio Code를 이용한 아두이노 프로그램 개발 - 새 프로젝트
11753정성태10/19/20183344개발 환경 구성: 414. Visual Studio Code를 이용한 아두이노 프로그램 개발
11752정성태10/18/2018835오류 유형: 498. SQL 서버 - Database source is not a supported version of SQL Server
11751정성태10/18/2018957오류 유형: 497. Visual Studio 실행 시 그래픽이 투명해진다거나, 깨진다면?
11750정성태10/18/2018869오류 유형: 496. 비주얼 스튜디오 - One or more projects in the solution were not loaded correctly.
11749정성태10/18/2018970개발 환경 구성: 413. 비주얼 스튜디오에서 작성한 프로그램을 빌드하는 가장 쉬운 방법
11748정성태10/18/2018769개발 환경 구성: 412. Arduino IDE를 Store App으로 설치한 경우 컴파일만 되고 배포가 안 되는 문제
11747정성태10/17/20181191.NET Framework: 799. C# - DLL에도 EXE처럼 Main 메서드를 넣어 실행할 수 있도록 만드는 방법파일 다운로드1
11746정성태10/15/2018855개발 환경 구성: 411. Bitvise SSH Client의 인증서 모드에서 자동 로그인 방법파일 다운로드1
11745정성태10/15/2018903오류 유형: 495. TFS 파일/폴더 삭제 - The item [...] could not be found in your workspace, or you do not have permission to access it.
11744정성태10/15/2018812개발 환경 구성: 410. msbuild로 .pubxml 설정에 따른 배포 파일을 만드는 방법
11743정성태10/15/2018735웹: 37. Bootstrap의 dl/dt/dd 조합에서 문자열이 잘리지 않도록 CSS 설정
11742정성태10/15/2018880스크립트: 13. 윈도우 배치(Batch) 스크립트에서 날짜/시간 문자열을 구하는 방법
11741정성태10/15/2018716Phone: 13. Android - LinearLayout 간략 설명
11740정성태10/15/20181008사물인터넷: 51. Synology NAS(DS216+II)를 이용한 원격 컴퓨터의 전원 스위치 제어
11739정성태10/15/20181463Windows: 151. 윈도우 10의 전원 관리가 "균형 조정(Balanced)"으로 바뀌는 문제
11738정성태10/15/2018991오류 유형: 494. docker - 윈도우에서 실행 시 "unknown shorthand flag" 오류
11737정성태10/13/2018794오류 유형: 493. Azure Kudu - There are 395 items in this directory, but maxViewItems is set to 299
11736정성태10/12/20181110오류 유형: 492. Visual Studio 로딩 시 오류 - The 'Scc Display Information' package did not load correctly.
11735정성태10/12/2018992VS.NET IDE: 129. Visual Studio - 특정 문자(열)를 개행 문자로 바꾸는 방법
11734정성태10/10/2018959Linux: 4. Synology NAS(DS216+II)에 FTDI 장치 연결 후 C#(.NET Core)으로 DTR 제어파일 다운로드1
11733정성태10/11/20181300Linux: 3. Synology NAS(DS216+II)에서 FTDI 장치를 C/C++로 제어
11732정성태10/10/20181226디버깅 기술: 119. windbg 분석 사례 - 종료자(Finalizer)에서 예외가 발생한 경우 비정상 종료(Crash) 발생파일 다운로드1
11731정성태10/9/2018952개발 환경 구성: 409. C# - REST API를 이용해 Azure Kudu 서비스 이용 - 웹 앱 확장 처리파일 다운로드1
1  2  3  4  5  6  7  8  9  10  [11]  12  13  14  15  ...