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)
12020정성태9/11/2019393VC++: 134. SYSTEMTIME 값 기준으로 특정 시간이 지났는지를 판단하는 함수
12019정성태9/11/2019347Linux: 23. .NET Core + 리눅스 환경에서 Environment.CurrentDirectory 접근 시 주의 사항
12018정성태9/25/2019318오류 유형: 567. IIS - Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive. (D:\lowSite4\web.config line 11)
12017정성태9/11/2019602오류 유형: 566. 비주얼 스튜디오 - Failed to register URL "http://localhost:6879/" for site "..." application "/". Error description: Access is denied. (0x80070005)
12016정성태9/5/2019757오류 유형: 565. git fetch - warning: 'C:\ProgramData/Git/config' has a dubious owner: '(unknown)'.
12015정성태9/3/2019899개발 환경 구성: 457. 윈도우 응용 프로그램의 Socket 연결 시 time-out 시간 제어
12014정성태9/3/2019716개발 환경 구성: 456. 명령행에서 AWS, Azure 등의 원격 저장소에 파일 관리하는 방법 - cyberduck/duck 소개
12013정성태8/28/2019677개발 환경 구성: 455. 윈도우에서 (테스트) 인증서 파일 만드는 방법
12012정성태8/28/2019703.NET Framework: 859. C# - HttpListener를 이용한 HTTPS 통신 방법
12011정성태8/27/2019627사물인터넷: 57. C# - Rapsberry Pi Zero W와 PC 간 Bluetooth 통신 예제 코드파일 다운로드1
12010정성태8/27/2019530VS.NET IDE: 138. VSIX - DTE.ItemOperations.NewFile 메서드에서 템플릿 이름을 다국어로 설정하는 방법
12009정성태8/26/2019474.NET Framework: 858. C#/Windows - Clipboard(Ctrl+C, Ctrl+V)가 동작하지 않는다면?파일 다운로드1
12008정성태8/26/2019444.NET Framework: 857. UWP 앱에서 SQL Server 데이터베이스 연결 방법
12007정성태8/24/2019535.NET Framework: 856. .NET Framework 버전을 올렸을 때 오류가 발생할 수 있는 상황
12006정성태8/23/2019770디버깅 기술: 129. guidgen - Encountered an improper argument. 오류 해결 방법 (및 windbg 분석)
12005정성태8/13/20191492.NET Framework: 855. 닷넷 (및 VM 계열 언어) 코드의 성능 측정 시 주의할 점 [2]파일 다운로드1
12004정성태8/12/2019983.NET Framework: 854. C# - 32feet.NET을 이용한 PC 간 Bluetooth 통신 예제 코드
12003정성태8/12/2019537오류 유형: 564. Visual C++ 컴파일 오류 - fatal error C1090: PDB API call failed, error code '3'
12002정성태8/12/2019690.NET Framework: 853. Excel Sheet를 WinForm에서 사용하는 방법 - 두 번째 이야기
12001정성태8/10/2019827.NET Framework: 852. WPF/WinForm에서 UWP의 기능을 이용해 Bluetooth 기기와 Pairing하는 방법
12000정성태8/9/2019692.NET Framework: 851. WinForm/WPF에서 Console 창을 띄워 출력하는 방법파일 다운로드1
11999정성태8/1/2019493오류 유형: 563. C# - .NET Core 2.0 이하의 Unix Domain Socket 사용 시 System.IndexOutOfRangeException 오류
11998정성태7/30/2019570오류 유형: 562. .NET Remoting에서 서비스 호출 시 SYN_SENT로 남는 현상파일 다운로드1
11997정성태7/30/2019901.NET Framework: 850. C# - Excel(을 비롯해 Office 제품군) COM 객체를 제어 후 Excel.exe 프로세스가 남아 있는 문제파일 다운로드1
11996정성태7/25/2019732.NET Framework: 849. C# - Socket의 TIME_WAIT 상태를 없애는 방법파일 다운로드1
11995정성태7/23/2019658.NET Framework: 848. C# - smtp.daum.net 서비스(Implicit SSL)를 이용해 메일 보내는 방법
1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...