시놀로지 NAS 를 사용하면서 24시간 사용이 필요치 않기에 

필요시마다 WOL 을 이용하여 부팅을 하고 있다.

구글 홈 미니와 Sonoff 를 연동해서 조명을 켜고 끄는데 컴퓨터도 켤 수 있지 않을까? 해서 생각을 해보니

다음과 같은 방법으로 사용이 가능하다.

1. 준비물

- 구글 홈 또는 구글 홈 미니 기기

- 라즈베리 파이 (Web 요청을 받으면 자신의 네트워크에서 WOL 매직 패킷을 전달하기 위함)

- WOL 이 작동 하는 컴퓨터

 

2. 설계

작동 방식 구성은 다음 처럼..

 - 구글 홈에게 컴퓨터 켜 라고 말하면 IFTTT 에서 구글 홈 명령을 해석하여 특정 URL 을 호출

 - 라즈베리파이 웹 서버에서 해당 요청을 받으면 WOL 매직 패킷 보내기

 

3. 방법

 3-1. 구글 홈 앱에서 루틴 설정 하기.

다음을 말하면 조건에 "컴퓨터 켜", "컴퓨터 켜 줘" 문장을 등록 한다.

필요 하다면 다른 문장을 추가 해도 좋다.

 

"Google 어시스턴트가 할 행동" 에는 IFTTT 가 알아 들어야 할 문장을 등록해야 하는데 영어만 지원 되기 때문에

작업 추가를 클릭 -> "my desktop on" 이라고 등록 한다.

 

한번 더 작업 추가를 눌러-> 인기 있는 작업을 누르고

가장 아래에 말하기 기능에 톱니 모양을 누른다.

 

"내 컴퓨터를 켭니다" 라고 등록한다. (문장을 각자 알아서 수정)

 

3-2. 라즈베리파이에 Web 요청 처리 만들기

라즈베리파이는 WOL 로 켤 컴퓨터와 같은 네트워크상에 존재 해야 한다.

그리고 ngnix 또는 apache 와 같이 WAS 가 설치되어 있고 php 가 연동이 되어 있는 상태여야 한다. (was 및 php 구성은 구글 검색으로 설치)

필자는 nginx 와 php 7.0 이 연동되어 작동 중이므로 해당 환경으로 설명한다.

 

/var/www/html 경로에 wol 이라는 디렉토리를 생성하여 wol.php 코드를 작성 한다.

전체 경로 (/var/www/html/wol/wol.php)

<?php
function wol($broadcast, $mac)
{
    if (strstr($mac, "-"))
    {
        $mac_array = explode('-', $mac);
    }
    else
    {
        $mac_array = explode(':', $mac);
    }
    $hwaddr = '';
 
    foreach($mac_array AS $octet)
    {
        $hwaddr .= chr(hexdec($octet));
    }
 
    // Create Magic Packet
 
    $packet = '';
    for ($i = 1; $i <= 6; $i++)
    {
        $packet .= chr(255);
    }
 
    for ($i = 1; $i <= 16; $i++)
    {
        $packet .= $hwaddr;
    }
 
    $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    if ($sock)
    {
        $options = socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, true);
 
        if ($options >=0) 
        {    
            $e = socket_sendto($sock, $packet, strlen($packet), 0, $broadcast, 7);
            socket_close($sock);
        }    
    }
}


$AUTH_KEY="";
$PC_TYPE="";

$broadcast_ip = "";
$mac_addr = "";


$WOL_KEY="RANDOMKEY";

if( isset($_GET['wolkey']) ){ $AUTH_KEY=$_GET['wolkey']; }

if( isset($_GET['wolpc']) ){
        $PC_TYPE=$_GET['wolpc'];
}
else{
        $res_data = ['result' => 'fail'];
        header('Content-type: application/json');
        echo json_encode($res_data);
        return;
}

if( strcmp($WOL_KEY, $AUTH_KEY) != 0 ) {
        $res_data = ['result' => 'fail'];
        header('Content-type: application/json');
        echo json_encode($res_data);
        return;
}

// PC Type is NAS or PC
if( strcmp($PC_TYPE, "NAS") == 0 ){
    $broadcast_ip = "192.168.0.2";
    $mac_addr = "00-11-22-33-44-55";
    $res_data = ['result' => 'success', 'pctype' => 'NAS'];
}else if( strcmp($PC_TYPE, "PC") == 0){
    $broadcast_ip = "192.168.0.3";
    $mac_addr = "AA-BB-CC-DD-EE-FF";
    $res_data = ['result' => 'success', 'pctype' => 'PC'];
}else{
        $res_data = ['result' => 'fail'];
        header('Content-type: application/json');
        echo json_encode($res_data);
        return;
}

wol($broadcast_ip, $mac_addr);


header('Content-type: application/json');
echo json_encode($res_data);
 
?>

 

위 코드 중$WOL_KEY 에 있는 값은 적당하게 긴 문자열로 만들어 준다. (WOL Url 에 최소한의 보안을 위함)

// PC Type is NAS or PC 주석 아래에 WOL 컴퓨터의 IP 와 MAC 주소 값을 입력해 준다.

필요한 컴퓨터가 많다면 $PC_TYPE 의 문자열과 else if 부분을 복사/붙여넣기 하여 추가 하면 된다.

 

php 가 작성이 완료 되었다면 라즈베리 파이에서 다음 명령으로 시험을 해본다.

curl "http://127.0.0.1/wol/wol.php?wolkey=RANDOMKEY&wolpc=NAS"

RANDOMKEY 와 NAS 는 각자 세팅에 맞게 변경 한다.

 

위 테스트로 WOL 이 작동 하면 이제 외부에서 url 호출만으로 WOL 을 사용 할수 있게 된다.

 

※ IFTTT 와 연동 해야 하므로 공유기를 사용 한다면 라즈베리파이의 WAS 포트를 포트 포워딩 해야 한다.

라즈베리파이의 WAS 포트는 80 이고 포트 포워딩은

외부 포트는 8080 , 내부 포트는 80으로 포트 포워딩을 설정 하였다면

WOL 작동 주소는 다음과 같이 된다.

http://공인IP:8080/wol/wol.php?wolkey=RANDOMKEY&wolpc=NAS

 

 


3-3. IFTTT 에서 구글 홈 문장을 분석하는 애플릿 만들기

IFTTT 에 접속하여 Explore 를 클릭

+ 버튼을 눌러 애플릿 생성으로 들어 간다.

 

+ This 를 클릭한다.

google 을 검색하여 Google Assistant 를 클릭

(Google Assistant 가 나오지 않거나 say a simple phrase 항목이 나오지 않는 다면 IFTTT 와 구글 계정 연동이 먼저 되어 있야 나오게 된다.)

 

Say a simple phrase 를 클릭

 

What do you want to say? 항목에 루틴에서 설정 하였던 "my desktop on" 을 입력

What do you want the Assistant to say in response? 항목에는 해당 애플릿 수행 후 구글 홈에서 말 할 TTS 문장을 입력한다. (TTS 재생이 필요 없다면 굳이 하지 않아도 되며 한국어는 지원하지 않는다.)

 

아래로 내려서 "Create trigger" 버튼을 클릭

 

 

+ That 을 클릭

webhook 을 검색하여 Webhooks 선택

Make a web request 선택

URL 항목에 라즈베리파이의 WOL URL 을 작성하고 Create Action 버튼을 눌러 애플릿 작성을 완료 한다.

 

 

구글 홈에서 "컴퓨터 켜" 라고 명령 하게 되면 다음과 같은 순서로 작동을 한다.

 

구글 홈 -> IFTTT -> 라즈베리 파이 PHP 호출 -> WOL 패킷 송신.

 

 

잘 되지 않는 경우 IFTTT 의 로그에서 구글 홈 명령이 전달이 되었는지, 라즈베리파이의 URL 은 정상적으로 호출 되는지 등을 확인 하면 된다.

'강좌 > IoT' 카테고리의 다른 글

구글 홈 - 네스트 미니, 네스트 허브 출시  (0) 2020.06.30
구글 홈 음성 명령으로 컴퓨터 켜기  (0) 2020.02.06

미디어 색인이 작동 안하는 경우 사용 하는 스크립트

 

MediaIndexScript.tgz
0.00MB

 

사용법

 

위 압축 파일을

/volume1/homes/acidpop/MediaScript

경로에 업로드 하여 압축 해제

root 권한으로 ./updateIndexVideo.sh 실행

 

출처 : https://m.blog.naver.com/lastingchild/220763255604

 

위 블로그에서 받은 스크립트 파일이 파일명에 '(작은 따옴표) 가 포함 되어 있는 경우 처리 하지 못하는 부분 수정

 

'강좌 > Synology NAS' 카테고리의 다른 글

synobot 0.10 업데이트  (0) 2020.09.11
DSM 7.0 Preview  (0) 2020.09.10
synobot 0.9 업데이트  (9) 2020.06.02
synobot 0.8 업데이트  (0) 2020.05.22
DSM Media ReIndex Script  (0) 2019.12.30
Synology Audio Station 알송 가사 플러그인 0.6  (7) 2019.11.29
synobot 프로젝트  (0) 2019.05.23
DS718+ 램 업글(8GB)  (0) 2018.07.24
Synology Audio Station 알송 가사 플러그인 0.5  (21) 2018.04.03

하드웨어 : 라즈베리파이 3+

OS : Raspbian 10 (buster)

 

1. 의존성 라이브러리 설치

sudo apt-get update

sudo apt install -y libffi-dev libbz2-dev liblzma-dev \
    libsqlite3-dev libncurses5-dev libgdbm-dev zlib1g-dev \
    libreadline-dev libssl-dev tk-dev build-essential \
    libncursesw5-dev libc6-dev openssl git

2. python 3.8 설치

cd /home/pi

mkdir pkg_install

cd pkg_install

mkdir pkg_python

cd pkg_python

wget "https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz"

tar xvfz ./Python-3.8.0.tgz

cd Python-3.8.0

./configure

make -j 6

sudo make install

 

3. Python 3.8 pip 설치

cd /home/pi/pkg_install/pkg_python

wget https://bootstrap.pypa.io/get-pip.py

sudo python3 ./get-pip.py



4. Chromium Driver 설치

cd /home/pi/pkg_install

mkdir pkg_chromium

cd pkg_chromium

wget "http://ports.ubuntu.com/pool/universe/c/chromium-browser/chromium-codecs-ffmpeg_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb"

wget "http://ports.ubuntu.com/pool/universe/c/chromium-browser/chromium-codecs-ffmpeg-extra_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb"

wget "http://ports.ubuntu.com/pool/universe/c/chromium-browser/chromium-browser_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb"

wget "http://ports.ubuntu.com/pool/universe/c/chromium-browser/chromium-chromedriver_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb"

 

sudo dpkg -i ./chromium-codecs-ffmpeg_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb

sudo dpkg -i ./chromium-codecs-ffmpeg-extra_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb

sudo dpkg -i ./chromium-browser_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb

sudo dpkg -i chromium-chromedriver_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb

 

 

위 명령 중 sudo dpkg 수행시 다음과 같은 오류가 발생 한다면?

sudo dpkg -i ./chromium-browser_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb 
(Reading database ... 45515 files and directories currently installed.)
Preparing to unpack .../chromium-browser_75.0.3770.90-0ubuntu0.18.10.1_armhf.deb ...
Unpacking chromium-browser (75.0.3770.90-0ubuntu0.18.10.1) over (75.0.3770.90-0ubuntu0.18.10.1) ...
dpkg: dependency problems prevent configuration of chromium-browser:
 chromium-browser depends on libatk-bridge2.0-0 (>= 2.5.3); however:
  Package libatk-bridge2.0-0 is not installed.
 chromium-browser depends on libatk1.0-0 (>= 2.2.0); however:
  Package libatk1.0-0 is not installed.
 chromium-browser depends on libatspi2.0-0 (>= 2.9.90); however:
  Package libatspi2.0-0 is not installed.
 chromium-browser depends on libcairo2 (>= 1.6.0); however:
  Package libcairo2 is not installed.
 chromium-browser depends on libcups2 (>= 1.4.0); however:
  Package libcups2 is not installed.
 chromium-browser depends on libgdk-pixbuf2.0-0 (>= 2.22.0); however:
  Package libgdk-pixbuf2.0-0 is not installed.
 chromium-browser depends on libgtk-3-0 (>= 3.9.10); however:
  Package libgtk-3-0 is not installed.
 chromium-browser depends on libnspr4 (>= 2:4.9-2~); however:
  Package libnspr4 is not installed.
 chromium-browser depends on libnss3 (>= 2:3.22); however:
  Package libnss3 is not installed.
 chromium-browser depends on libpango-1.0-0 (>= 1.14.0); however:
  Package libpango-1.0-0 is not installed.
 chromium-browser depends on libxcursor1 (>> 1.1.2); however:
  Package libxcursor1 is not installed.
 chromium-browser depends on xdg-utils; however:
  Package xdg-utils is not installed.

dpkg: error processing package chromium-browser (--install):
 dependency problems - leaving unconfigured
Processing triggers for mime-support (3.62) ...
Processing triggers for man-db (2.8.5-2) ...
Errors were encountered while processing:
 chromium-browser

sudo apt-get -f install

위 명령으로 의존성 오류난 라이브러리를 모두 설치 하기

 

2018년 4월에 공개하였던 알송 가사 플러그인 0.5 버전이 몇 달 전부터 작동이 되지 않음.

 

그동안 시간이 없어 건드릴 여유가 없었지만 다시 시간이 나서 또 분석!!

 

패킷을 캡쳐해보니 구조가 완전히 바뀌었다...

 

 

alsong_lyric_0.6.aum
0.00MB

 

자세한 등록 방법은 아래 링크를 참조.

https://blog.acidpop.kr/286

 

Synology Audio Station 알송 가사 플러그인 0.5

http://blog.acidpop.kr/264 기존에 배포 하였던 0.4 버전이 2018년 초부터 작동을 안하는것을 발견. 한동안 계속 바빠서 살펴볼 틈이 없었지만... 겨우 짬이 나서 소스를 다시 분석. 가사 플러그인 디버깅 환경이..

blog.acidpop.kr

 

혹시라도 분석 했던 패킷 덤프가 필요하신 분은 아래 파일을 다운로드 하여

와이어 샤크에서 사용하시면 됩니다.

alsong_lyric.pcapng
0.89MB

'강좌 > Synology NAS' 카테고리의 다른 글

DSM 7.0 Preview  (0) 2020.09.10
synobot 0.9 업데이트  (9) 2020.06.02
synobot 0.8 업데이트  (0) 2020.05.22
DSM Media ReIndex Script  (0) 2019.12.30
Synology Audio Station 알송 가사 플러그인 0.6  (7) 2019.11.29
synobot 프로젝트  (0) 2019.05.23
DS718+ 램 업글(8GB)  (0) 2018.07.24
Synology Audio Station 알송 가사 플러그인 0.5  (21) 2018.04.03
sudoers: syntax error near line  (0) 2018.01.18
  1. 피피더스 2019.12.16 22:45

    감사합니다

  2. 학생 2020.01.21 12:33

    php 알송가사 검색중에 우연히 들어오게 되었는데, 이파일은 어떻게 사용하는건가요?

  3. 타조 2020.02.14 09:31

    고맙습니다 ^^

  4. 감사하는사람 2020.05.23 07:26

    진심 감사드립니다.

  5. 학생2 2020.09.08 01:41

    설정에서 플러그인 업로드할때 연결에 실패했다는 오류가 뜨는데 수동으로 업로드 하는 방법은 혹시 없을까요?

    • BlogIcon Acidpop acidpop 2020.09.08 09:35 신고

      해당 오류는 무슨 문제인지는 모르겠습니다.

      수동으로 업로드는 정확히는 모르겠지만
      파일도 업로드 하고 오디오 스테이션 db 도 아마 수정해야 될거 같아서 추천드리지는 않습니다

synobot 0.10 업데이트

https://blog.acidpop.kr/331

 

synobot 0.10 업데이트

synobot이 0.10 버전으로 업데이트 되었습니다. DSM 7.0 에서 작동하지 않던 문제를 수정 하였습니다. /task 명령과 /stat 명령이 추가 되었습니다. /task - 다운로드 스테이션의 작업 목록을 조회 합니다.

blog.acidpop.kr


synobot 0.9 업데이트

https://blog.acidpop.kr/320

 


기존 xpebot 이 Synology DSM 이 업데이트 되면서 인증서 관련 오류가 발생.. ㅠㅠ

 

언젠가는 Download Station API 를 이용하도록 바꿔야지 하면서 미루다가 이제서야 작업 진행.

 

 

DSM 의 환경이 워낙 자주 바뀌기 때문에 이번에는 Docker 이미지로 작업을 하였다.

 

1. Synology DSM 에서 Docker 설치

 

2. Docker 실행.

 

레지스트리를 선택하고 검색 창에 synobot 을 검색 하면 acidpop/synobot 이 검색 된다.

 

검색된 synobot 옆의 아이콘을 누르면 설정 방법에 대한 페이지로 링크 된다.

 

아래 링크를 클릭 해도 동일하다.

 

Synobot 링크

 

 

위 링크에도 설정 방법이 설명 되어 있으니 해당 페이지에 있는 설정 방법을 이용하여 설정한다.

 

 





Pi Hole 암호 변경 방법.



sudo pihole -a -p




 

 

1. 라이브러리 설치

 

sudo apt install -y libffi-dev libbz2-dev liblzma-dev \
    libsqlite3-dev libncurses5-dev libgdbm-dev zlib1g-dev \
    libreadline-dev libssl-dev tk-dev build-essential \
    libncursesw5-dev libc6-dev openssl git

 

2. Python 소스 다운로드

 

cd /home/pi

mkdir python_src

cd python_src

wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

tar xvf Python-3.7.0.tgz

cd Python-3.7.0

 

3. Python 소스 컴파일

 

./configure

make -j 4   (이 값은 cpu core 갯수만큼 사용, core 가 2개라면 make -j 2)

sudo make install

 

 

4. pip 설치

 

cd /home/pi/python_src

 

wget https://bootstrap.pypa.io/get-pip.py

 

sudo python3.7 ./get-pip.py 

 

 

 



https://www.synology.com/ko-kr/products/DS718+



시놀로지 공식 홈페이지에서는 DS 718+ 의 최대 허용 램이 6GB.


애매하게 6GB 는 뭔가........



삼성전자 DDR3L 4GB 2개 구매! (삼성전자 4G DDR3L 12800 1.35V RAM (1600Mhz) - 노트북용)



기존에 있던 2GB 램은 빼고 4GB 한개 꽂고 나머지 확장 슬롯에 4GB 꽂고 NAS 부팅.






8GB 인식이 정상적으로 되는것을 확인 할 수 있다.


VMM 에서도 8GB 를 정상적으로 인식 해서 사용 할 수 있다.



+ Recent posts