라즈베리파이(송신) ---> 아두이노 프로 미니로(수신) RF 통신을 이용하여 LED 를 켜보자


1. 준비물


  - 라즈베리파이( 2 또는 3) 1개


  - 아두이노 프로 미니 1개

  - Usb to TTL(아두이노 프로 미니에 프로그램 업로드 하기 위해 사용) 1개

    https://goo.gl/TJTMGo  (Usb To TTL + 아두이노 프로 미니 묶음 판매)


  - RF 433 Emmiter 1개

  - RF 433 Receiver 1개

    https://goo.gl/4KMIdi    (5쌍 묶음 판매)


  - LED 1개




2. 회로 구성 하기.


  2.1 라즈베리파이 회로 구성








RF 송신모듈에 각각 위와 같이 연결합니다.


 Raspberry pi

 RF Emitter

5V

Vcc 

GPIO 21

Data 

GND

GND 




  2.2 아두이노 프로 미니 회로 구성하기







Arduino Pro Mini

 RF Receiver

Vcc

Vcc 

PIN 2

Data 

GND

GND 


3. 라즈베리 파이 RC-Switch 라이브러리 준비

 

cd /home/pi

git clone https://github.com/acidpop/433Utils

cd 433Utils

cd rc-switch

make



4. Source Coding

  4.1. 라즈베리파이

 

다음 경로로 이동

cd /home/pi/433Utils/RPi_utils 

 

codesend.cpp 파일을 열어

 

int PIN =0;

위 코드를

int PIN = 21;

로 변경

 

또는 아래와 같이 소스 작성 후 컴파일



rftest.cpp 


/* Code Send */

#include "RCSwitch.h"

#include 
#include 
 
int main(int argc, char *argv[]) {
 
    // This pin is not the first pin on the RPi GPIO header!
    // Consult https://projects.drogon.net/raspberry-pi/wiringpi/pins/
    // for more information.
    int PIN = 21;
 
    // Parse the firt parameter to this command as an integer
    int code = atoi(argv[1]);
 
    if (wiringPiSetup () == -1) return 1;
    printf("sending code[%i]\n", code);
    RCSwitch mySwitch = RCSwitch();
    mySwitch.enableTransmit(PIN);
 
    mySwitch.send(code, 24);
 
    return 0;
 
}


 

위 코드를 컴파일 시에는 다음과 같이 진행한다.

 

g++ rftest.cpp -DRPI ../rc-switch/RCSwitch.cpp rftest.cpp -lwiringPi

 


  4.2 아두이노 프로 미니

 

        RCSwitch 라이브러리를 포함시켜야 한다. 


#include "RCSwitch.h"
#include 
#include 
RCSwitch mySwitch = RCSwitch();
 
void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2
}
 
void loop() {
  if (mySwitch.available()) {
 
    int value = mySwitch.getReceivedValue();
 
    if (value == 0) {
      Serial.print("Unknown encoding");
    } else {
 
     Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );

      switch(value):{
        case 1001:{
           digitalWrite(LED_BUILTIN, HIGH);
        }break;
        case 1002:{
           digitalWrite(LED_BUILTIN, LOW);
        }break;
      }
    }
 
    mySwitch.resetAvailable();
 
  }
}


 

 

 

 

아두이노에 프로그램을 컴파일 -> 업로드 하고

 

툴 -> 시리얼 모니터를 선택하여 시리얼 모니터 창이 보이도록 한다.

 

 

라즈베리파이에서 컴파일 해둔 rftest 를 시험해보자.

 

sudo rftest 12345

 

 

RF 송신기로 12345 라는 값을 보내면

 

아두이노의 시리얼 모니터로 12345 라는 값을 받았다는 메시지가 보이면 성공이다.

 

RF 송신기로 1001 을 보내면 아두이노에 연결된 LED 가 켜지고

 

1002 를 보내면 연결된 LED 가 꺼진다.

 

 

 

위 예제를 이용하면 라즈베리 파이 1대와

 

아주 값싼 아두이노 프로 미니를 원격으로 컨트롤 할 수 있다.

 

릴레이를 컨트롤 하면 원격으로 조정 할수 있는 멀티탭도 만들수 있다.

 

테스트 해본 결과 집 내부 가장 끝 방에서 끝방까지 (콘크리트 벽 2, 나무 방문 2개) RF 안테나 없이 송수신이 되는것을 확인 하였다.

 

 

  1. 김종현 2017.04.27 17:14

    너무 신기하네요. 이러면 올려주신 텔레그램강좌와 조합하면 텔레그램으로 아두이노도 어느정도 컨트롤 할 수 있게 되는건가요?

    • BlogIcon Acidpop acidpop 2017.04.28 09:33 신고

      가능합니다.
      라즈베리파이에 텔레그램 봇을 개발 하고
      메시지 수신 받으면 라즈베리파이에서 아두이노로 RF 통신을 보내는 방식으로 하면 컨트롤도 할수 있죠

  2. 2017.05.22 18:37

    비밀댓글입니다

    • BlogIcon Acidpop acidpop 2017.05.22 22:26 신고

      저같은 경우는
      센서와 rf 송신기를 아두이노 프로 미니 같은 작은 칩을 이용해서 사용합니다
      아두이노에서 주기적으로 센서값을 읽어와서 값을 rf 송신기로 보내는 역할을 하고
      라즈베리에서 rf 를 수신하여 데이터를 처리 하도록 하면 됩니다
      다만, 저 같은 경우는 라즈베리파이에서 rf 수신기가 작동을 안하더군요..

 

라즈베리파이 공식 7인치 터치 스크린

 

사용을 안하면 화면이 꺼지는데

 

화면을 터치 하거나, 마우스를 움직이거나, 키보드를 누르면 화면이 다시 보인다.

 

하지만 원격에서 SSH 로 접속해서 화면을 켜지게 하고 싶다면??

 

 

다음 방법으로 가능하다.

 

echo 0 >sudo /sys/class/graphics/fb0/blank

 

 

Synology SurveillanceStation 은 각종 cctv 등을 추가 할 수 있다.

 

라즈베리 파이에 카메라가 있는데 이 카메라도 추가 할수 있을까 해서 구글을 검색 해보니 방법이 있다.

 

다음 순서대로 해보자.

 






 

준비물

- Raspberry pi

- Raspberry pi 전용 Camera

- Synology NAS DSM 5.2

 



1. VLC 설치.

 

sudo apt-get install vlc


 

2. RTSP Streaming 실행


 raspivid -o - -t 9999999 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264


  

RTSP Streaming 까지 실행 되었다면 Raspberry pi 의 RTSP 주소는 다음과 같다.

 

rtsp://<RaspberryPi-IP>:8554


 

 

3. DSM 의 SSH 로 접속 (putty 또는 xshell 등의 접속 툴 이용)

 

root 로 접속 한 뒤에 다음 경로로 이동 한다.


cd /volume1/@appstore/SurveillanceStation/device_pack/camera_support

 

 

volume뒤 숫자는 사용자마다 환경이 다르니 적절하게 변경해서 사용 한다.

 


4. Raspberry Pi Camera 환경 설정 파일 추가.

 

nano RaspberryPiCam.conf


 

편집기가 실행 되었다면 다음 내용을 붙여넣기 한다.

[RaspberrIPCam*RaspberrIPCam]
api = custom
channel_list = 1
default_channel = 1
resolutions_h264 = 1280x720
default_resolution_h264 = 1280x720
fps_h264_1280_720 = 30
default_fps_h264_1280_720 = 30
default_image_quality = 5
h264 = rtsp
mjpeg = rtsp
rtsp_protocol = udp

 



5. Synology DSM 관리자 페이지 접속


패키지 센터를 실행 하여 Surveillance Station 항목 클릭.




작업 택을 클릭하여 중지 한번 클릭 하고


중지가 완료 된 다음 다시 작업 택을 클릭 하여 실행을 클릭한다.





6. IP Camera 추가


Surveillance Station 의 관리 페이지로 들어 가서


IP Camera 추가 버튼을 클릭한다.



브랜드 에서 RaspberrIPCam 을 선택 하고


이름에는 적당한 이름을 입력


IP 주소에는 Raspberry PI 의 IP

포트는 8554 를 입력한다.


사용자 이름, 패드워드는 입력하지 않아도 된다.


다음 버튼을 눌러 IP Camera 추가를 완료 한다.



7. 확인


Raspberry PI 카메라로 화면에 보이는지 확인해본다.




Tip.


Raspberry Pi 카메라를 SSH 접속을 종료 해도 사용하고 싶다면


vi stream.sh

위 명령으로 stream.sh 파일을 생성하고 아래 내용을 붙여 넣기 한다.


raspivid -o - -t 9999999 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264


편집기를 저장 후 닫기 한 다음


nohup stream.sh &


위와 같이 실행한다.




  1. min 2017.09.20 17:52

    RTSP Streaming 실행에서 에러가 나네요.
    라즈비안 설치하고서 바로 깔았는데 안되요. ㅠ.ㅠ

    • min 2017.09.20 17:54

      카메라 enable 설정 다 했고, 카메라 테스트하면 정상 인식되고 촬영도 되는데, 저 설정이 안되네요.

    • BlogIcon Acidpop acidpop 2017.09.22 09:54 신고

      안녕하세요 답글이 늦었습니다.

      실행 할 때 어떤 에러가 나는지 알려주셔야 제가 답을 해드릴수 있어요..
      그렇지 않으면 저는 수많은 케이스를 다 찾아 봐야 하는데 불가능하겠죠?


 

Raspbian 에서 apt-get 으로 설치 할 수 있는 python 버전은 3.4 이다.

 

현재(2016/10/11 일 기준) python 버전은 3.5.2 이다.

 

python 소스를 받아서 3.5 버전을 설치 하는 방법을 포스팅 한다.

 

1. raspbian 업데이트

 

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade   <-- 이 명령은 굳이 안해도 된다.

 

2. 컴파일에 필요한 라이브러리 설치.

 

 

sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl

 

 

3. Python 소스 다운로드 및 컴파일, 설치.

 

 

 

cd /home/pi/

mkdir temppython

cd temppython

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

tar xvf Python-3.5.2.tgz

cd Python-3.5.2

./configure

make

sudo make install

 

 

4. pip 설치.

 

 

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

sudo python3.5 get-pip.py

pip3.5 --version

  1. 라즙이 2017.07.23 12:33

    이 방법으로 설치를 했는데 python3 -V를 해도 3.4.2로 나오네요. 기존 버전을 따로 처리하거나, 3.5.2로 컴파일 하기 위해선 다른 명령어를 써야 하는 건가요?

  2. 감사 2017.10.30 16:31

    감사합니다 덕분에 쉽게 설치했어요!!

  3. 라즈베리파이입문생 2017.11.20 23:03

    작성자님
    sudo python3.5 get-pip.py부분을 입력하면 오류가 뜨는데 이건 뭐가 잘못된 건가요??

  4. 라즈베리파이입문생 2017.11.20 23:38

    Could not find a version that satisfies the requirement pip (from versions:)
    No matching distribution found for pip 라고 뜹니다...

    • 라즈베리파이입문생 2017.11.20 23:41

      그 전에
      Could not fetch URL https://pypi.python.org/simple/pip/:
      There was a problem confirming the ssl certificate:
      Can't connect to HTTPS URL because the SSL module is not available. - skipping
      Could not fetch URL https://www.piwheels.hostedpi.com/simple/pip/:
      There was a problem confirming the ssl certificate:
      Can't connect to HTTPS URL because the SSL module is not available. - skipping
      Could not find a version that satisfies the requirement pip (from versions: )
      No matching distribution found for pip 라고뜹니다......

    • BlogIcon Acidpop acidpop 2017.11.21 10:15 신고

      sudo python3.5 get-pip.py --trusted-host pypi.python.org

      이렇게 뒤쪽에 옵션을 붙여줘보세요

  5. 라즈베리파이입문생 2017.11.21 10:55

    작성자님 sudo python3.5 get-pip.py --trusted-host pypi.python.org
    라고 입력하였는데 똑같은 오류가 발생하였습니다...

    • BlogIcon Acidpop acidpop 2017.11.21 11:06 신고

      흠.. 글쎄요.

      혹시 제가 터미널에 접속 해 볼수 있을까요?

      비밀 댓글로 남겨주실수 있으시면 확인 하고 댓글은 바로 삭제 하겠습니다.

  6. 2017.11.21 21:39

    비밀댓글입니다

    • BlogIcon Acidpop acidpop 2017.11.21 21:48 신고

      pip가 환경 변수경로에 등록이 안되어 있을수도 있습니다

      sudo find / -name “pip”

      위 명령으로 pip 가 실제로 있는지 확인 해보시고 있다면 전체 경로로 실행해보세요

Hyper-V 에 XPEnology 를 설치 해서 사용을 하고

 

xpebot 을 개발하여 사용 하던 중 불편한 사항이 있어서 만들어 본 스크립트이다.

 

필자는 Windows 에 일정 시간이 되면 절전 모드로 진입 하도록 작업 스케쥴러에 등록을 해놓은 상태 이다.

 

그리고 집에 있는 라즈베리파이를 활용해서 필요할때 WOL 패킷을 보내 서버를 다시 시작 하도록 하여 사용을 한다.

 

문제는 절전모드에서 다시 시작 될때 Hyper-V 역시 VM 들을 저장된 상태에서 시작 하도록 한다는 점이다.

 

이렇게 시작된 VM 들 중 XPEnology 의 xpebot 은 네트워크 재연결을 시도하지 않는다.

 

telepot 라이브러리 단에서도 네트워크 연결이 끊겼다는 이벤트도 없다..

 

즉, ssh 로 접속해서 수동으로 bot.sh restart 를 해줘야 한다는것인데 여간 귀찮은 일이 아니다.

 

Telegram 의 경우 특정 포트로 연결을 하기 때문에 다음 스크립트를 이용해서 해당 포트가 Established 되어 있는지 체크 하고

 

없다면 bot 을 재시작 하도록 하는 스크립트를 만들어 보았다.

 

DSM 5.x 사용자는 아래의 스크립트를 사용.

 

#! /volume1/homes/admin/xpebot/bash
# bash 경로는 각각 bash 가 존재 하는 디렉토리 경로로 변경 하여 준다.

echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram bot monitor script"
  
PID=($(ps w | grep xpebot| grep -v "grep" | awk '{print $1}'))
echo $(date +"%Y-%m-%d %H:%M:%S") "PID : " $PID
if [ -z $PID ]
then
	echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram Bot is not connect, trying restart bot."
	# 아래 코드는 필히 xpebot 이 설치된 경로로 변경해 주어야 한다.
	/volume1/homes/admin/xpebot/bot.sh restart
	echo "restart"
	exit 0
fi
COUNT=($(netstat -nap | grep $PID | grep "ESTA" | wc -l))
echo $(date +"%Y-%m-%d %H:%M:%S") "COUNT : " $COUNT

if [ $COUNT -le 0 ]
then
	echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram Bot is not connect, trying restart bot."
	# 아래 코드는 필히 xpebot 이 설치된 경로로 변경해 주어야 한다.
	/volume1/homes/admin/xpebot/bot.sh restart
fi

 

 

DSM 6.0 사용자는 아래의 스크립트를 사용.

 

#! /usr/bin/bash

echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram bot monitor script"
  
PID=($(ps -ef | grep xpebot| grep -v "grep" | awk '{print $1}'))
echo $(date +"%Y-%m-%d %H:%M:%S") "PID : " $PID
if [ -z $PID ]
then
	echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram Bot is not connect, trying restart bot."
	# 아래 코드는 필히 xpebot 이 설치된 경로로 변경해 주어야 한다.
	/volume1/homes/admin/xpebot/bot.sh restart
	echo "restart"
	exit 0
fi
COUNT=($(netstat -nap | grep $PID | grep "ESTA" | wc -l))
echo $(date +"%Y-%m-%d %H:%M:%S") "COUNT : " $COUNT

if [ $COUNT -le 0 ]
then
	echo $(date +"%Y-%m-%d %H:%M:%S") "Telegram Bot is not connect, trying restart bot."
	# 아래 코드는 필히 xpebot 이 설치된 경로로 변경해 주어야 한다.
	/volume1/homes/admin/xpebot/bot.sh restart
	echo "restart"
fi

 

 

위 코드를 복사하여 xpebot 이 설치된 경로에 botmonitor.sh 로 저장하자.

 

당연히 12번쨰와 23번째 줄에 있는 /volume1/homes/admin/xpebot/bot.sh 이 부분은

 

xpebot 이 설치된 경로로 바꿔주어야 한다.

 

저장을 하고 해당 파일에 실행 권한을 주어야 한다.

 

chmod 755 botmonitor.sh

 

 

----------- 2016.11.29 추가 ---------

 

DSM 5.2 에서 아래의 작업 스케쥴러가 제대로 작동하지 않는 경우가 있다.

 

crontab 에 직접 등록하는 방법을 이용하자.

 

vi /etc/crontab

 

위 명령을 이용하여 crontab 파일을 연다.

 

가장 마지막 줄에 다음과 같이 추가 하여 준다.

 

*       *       *       *       *       root    /volume1/homes/admin/xpebot/botmon.sh >> /var/log/botmon.log

 

botmon.sh 경로는 각각 개인의 경로에 맞게 수정하여 준다.

 

넓은 간격은 탭으로 띄워준다.

 

모두 * 로 표기 하면 1분에 한번씩 작동 한다.

 

 

해당 파일을 저장(esc 키 한번 누르고 : (콜론)키 한번 누르고 wq 를 입력하고 엔터)

 

DSM 관리 페이지에서 DSM 을 재시작 하면 해당 스크립트가 1분에 한번씩 작동할 것이다.

 

------------------------------------

 

 

 

 

권한이 주어 졌다면 해당 스크립트를 1분에 한번씩 실행 되도록 해보자.

 

DSM 에 접속 하여 제어판 -> 작업 스케쥴러로 이동한다.

 

 



생성 -> 사용자 정의 스크립트를 클릭한다.




일반 탭에서는 위와 같이 설정해준다.


작업명은 xpebot monitor 라고 하자 (아무렇게나 써도 된다.)


사용자는 root


사용자 정의 스크립트는 위에서 저장했던 botmonitor.sh 파일의 전체 경로를 써준다.





 스케쥴 탭으로 이동 하여 위와 같이 설정 한다.


다음 일수 후 실행 -> 매일


첫 실행시간 -> 00:00

주기 : 매 1분마다


마지막 실행 시간 -> 23:59



위와 같이 설정 후 확인 버튼을 클릭한다.



여기까지 설정 되었다면 끝이다.



이 스크립트는 1분에 한번씩 xpebot 이 실제로 네트워크에 연결 되어 있는지 체크를 하고


연결이 끊어졌다면 xpebot 을 재시작 하도록 만들어 놓은 스크립트이다.


필자와 같이 Hypver-V 를 이용해서 xpenology 를 사용하고 xpebot 을 사용하는 사용자라면 유용한 팁이 될것이라 생각된다.



  1. prop 2016.09.19 21:53

    wol을 사용중이라 껐다키면 작동을 안하길래 해당페이지 방버을 쓰려고 했으나..이상하게 작업스케쥴러에서 작동을 안하네요.
    /volume2/homes/admin/xpebot/botmonitor.sh
    이렇게 작성했는데 putty로 명령어를 치면 처음에는 파일없다고 나오다가 cd로 경로 들어가서 실행시킨 후 다시 위 명령어를 치면 인식해서 가져오네요. 권한도 줬는데 이유를 모르겠어요 ㅠ
    그래서 그냥.. '1. bash 파일을 복사' 방법으로 쓰고 있습니다. 이건 또 되긴하네요 ㅎ

    • BlogIcon Acidpop acidpop 2016.09.20 10:33 신고

      botmonitor.sh 에서 11 번째 줄에 있는 경로는 바꾸셨나요?

    • prop 2016.09.20 15:37

      네 botmonitor.sh
      11번째줄

      /volume2/homes/admin/xpebot/bot.sh restart 로 해놨어요.

      근데 1. bash파일 복사 방법대로 해놓은 다음에

      bot.sh 파일의 #!/usr/bin/bash 로 되어있는 상태에서
      스케쥴러를 작동시키면 또 동작하더라구요.

    • BlogIcon Acidpop acidpop 2016.09.21 09:36 신고

      prop 님의 시스템이 제가 구축한 xpenology 랑 좀 달라서 그런것 같습니다.

      제가 만들어 놓은 스크립트는
      /bin/sh 실행 파일을 가지고 작동하도록 되어 있는데 이게 없던지 버전이 다른던지 할것 같네요.

      #! /usr/bin/bash 이렇게 바꿔서 사용하셔도 됩니다.

    • prop 2016.09.21 15:43

      넵 그렇게 쓰도록 하겠습니다~

  2. shekinah 2017.01.23 22:15

    강좌 남겨주신대로 해봤는데 자동으로 되지 않아서 질문 드립니다..

    그대로 했는데 도저히 자동으로 되지 않아서...

    일단 crontab은
    ------------------------------------------------------------------------------------------------------------------------
    #minute hour mday month wday who command
    * * * * * root /volume1/homes/Noel/xpebot/Botmonitor.sh
    0 0 1 * * root /usr/syno/bin/syno_disk_health_record
    22 10 * * 4 root /usr/syno/bin/synomyds --report_info
    0,5,10,15,20,25,30,35,40,45,50,55 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * * root /tmp/synoschedtask --run id=1
    ------------------------------------------------------------------------------------------------------------------------
    이렇게 등록되어있고, 권한은 0775로 주었습니다.

    xpebot 폴더 안에 Botmonitor.sh 파일은
    ------------------------------------------------------------------------------------------------------------------------
    #! /volume1/homes/Noel/xpebot/bash
    # bash 경로는 각각 bash 가 존재 하는 디렉토리 경로로 변경 하여 준다.

    echo $(date +"%Y-%m-%d %H:%M:%S";) "Telegram bot monitor script"

    PID=($(ps w | grep xpebot| grep -v "grep" | awk '{print $1}'))
    echo $(date +"%Y-%m-%d %H:%M:%S";) "PID : " $PID
    if [ -z $PID ]
    then
    echo $(date +"%Y-%m-%d %H:%M:%S";) "Telegram Bot is not connect, trying restart bot."
    # 아래 코드는 필히 xpebot 이 설치된 경로로 변경해 주어야 한다.
    /volume1/homes/Noel/xpebot/bot.sh restart
    echo "restart"
    exit 0
    fi
    COUNT=($(netstat -nap | grep $PID | grep "ESTA" | wc -l))
    echo $(date +"%Y-%m-%d %H:%M:%S";) "COUNT : " $COUNT

    if [ $COUNT -le 0 ]
    then
    echo $(date +"%Y-%m-%d %H:%M:%S";) "Telegram Bot is not connect, trying restart bot."
    # 아래 코드는 필히 xpebot 이 설치된 경로로 변경해 주어야 한다.
    /volume1/homes/Noel/xpebot/bot.sh restart
    fi
    ------------------------------------------------------------------------------------------------------------------------

    이렇게 해두었습니다. 그런데 아무리 살펴봐도 잘못된 것이 없는 것 같은데 작동이 안됩니다..

    bash 부분은

    /usr/bin/bash로 해도, ./bash로 해도 작동이 되지 않네요~ 도움 부탁드립니다~

    • BlogIcon Acidpop acidpop 2017.01.24 10:48 신고

      사용하시는 NAS 모델이
      XPEnology 인가요? 아니면 Synology 정식 NAS 인가요?

  3. Shekinah 2017.01.24 17:14

    XPEnology 모델입니다~ !

    • BlogIcon Acidpop acidpop 2017.01.24 17:49 신고

      텔레그램 아이디 하나만 남겨 주세요
      댓글은 확인 하고 바로 삭제 할께요

  4. 2017.01.24 21:06

    비밀댓글입니다

  5. Shekinah 2017.01.25 20:27

    리붓 후 다시 작동이 안됩니다...
    ---------------------------------------
    Noelesther> /volume1/homes/Noel/xpebot/Botmonitor.sh
    2017-01-25 20:22:36 Telegram bot monitor script
    2017-01-25 20:22:36 PID : 22391
    2017-01-25 20:22:36 COUNT : 0
    2017-01-25 20:22:36 Telegram Bot is not connect, trying restart bot.
    /volume1/homes/Noel/xpebot/Botmonitor.sh: /volume1/homes/Noel/xpebot/bot.sh: ./bash: bad interpreter: No such file or directory
    ---------------
    이렇게 뜨네요~ 직접 xpebot 폴더에 들어가서 ./Botmonitor.sh 하면 실행되지만... bash의 문제일까요~ 자동 작동이 안되네요 ㅠ

    • shekinah 2017.01.25 21:25

      해결한 것 같은데~
      bot.sh 파일의 맨 첫째줄을
      ./bash로 했던 것을 Botmonitor.sh와 같은 경로로 /volume1/homes/Noel/xpebot/bash로 하니깐 에러 없이 잘 작동하는 것 같습니다.
      많은 도움 주셔서 감사합니다~

    • BlogIcon Acidpop acidpop 2017.01.26 09:00 신고

      Botmonitor.sh 를 제가 그렇게 변경 해놨었나요? ㅠㅠ
      일단 bash 파일은 전체 경로를 지정해주는게 좋습니다.

xpebot 프로젝트가 중단 되었습니다.

 

synobot 프로젝트로 다시 시작 합니다.

 

https://blog.acidpop.kr/305

 

synobot 프로젝트

기존 xpebot 이 Synology DSM 이 업데이트 되면서 인증서 관련 오류가 발생.. ㅠㅠ 언젠가는 Download Station API 를 이용하도록 바꿔야지 하면서 미루다가 이제서야 작업 진행. DSM 의 환경이 워낙 자주 바뀌기..

blog.acidpop.kr

 

DSM 의 Database 를 변경 하는것이기 때문에 꼭 중요한 자료를 백업 하고 진행하세요.

데이터 손실에 대해 책임지지 않습니다.

 

 

 

DSM 6.0 이상 버전에서 xpebot (https://github.com/acidpop/xpebot) 을 적용하게 되면

 

다운로드 완료 시점에서 상태 정보가 "에러" 로 표시 되는걸 확인 할 수 있었다.

 

DSM 6.0 시스템이 없어서 무슨 문제인지 알수가 없었으나

 

최근 Hyper-V 에서 XPEnology 의 DSM 6.0 버전을 설치 할 수 있게 되어 디버깅을 시작.

 

 

몇번의 삽질 결과 DSM 6 버전부터는 각 Application 별로 계정이 따로 존재하고 postgresql DB 에서도 계정별로 권한이 주어져 있는것을 알게 되었다.

 

이 문제로 인해서 기존 Trigger 와 sql function 이 내부적으로 permission denied 오류가 발생하게 되었던걸로 확인 된다.

 

 


 

DSM 6.0 에서는 xpebot 만 git으로 받고 실행 한다고 해서 알림을 받을수는 없다.

 

아래의 조금 복잡(?)한 과정이 필요하지만 이 글을 천천히 따라한다면 가능할 것이라 생각된다.

 

1. Download Staion 설치 및 설정하기

 

먼저 DSM 에 Download Station 이 설치되어 있어야 한다. 당연한 이야기이지만 설치를 안하고 텔레그램 알림 받기 글을 따라 하다가는 막히는 부분이 많다.

 

DownloadStation 을 설치 하고 다운로드 받을 대상 폴더와 감시 폴더를 각각 설정한다.

 

 

 

 

주의 : 다른 시스템의 디스크를 Mount 한 디렉토리는 감시 폴더 작동이 제대로 안된다.

 

2. GitServer 설치 하기

 

패키지 센터를 열고 GitServer 를 설치 한다.

 

3. Python 설치 하기

 

패키지 센터를 열고 개발자 도구 메뉴를 클릭한 다음 Python3 와 Python Module 을 설치 한다.

 

4. 사용자 설정

 

제어판 -> 사용자 메뉴를 클릭한 다음

 

고급 탭으로 이동한다.

 

그후 스크롤을 가장 아래로 내려보면 사용자 홈 서비스 활성화 버튼이 있는데 해당 부분을 체크 하고 확인 버튼을 누른다.

 

 

5. SSH 서비스 활성화

 

제어판 -> 터미널 및 SNMP 메뉴를 클릭한 다음

 

SSH 서비스 활성화 버튼을 체크하고 "적용" 버튼을 클릭한다.

 

 

 

6. SSH 접속하기.

 

SSH 에 접속 할 수 있는 툴을 실행한다.

(없다면 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 이곳에서 putty.exe 를 다운로드 받는다.)

 

필자는 XShell 을 사용한다. 혹여 SSH 접속할 일이 많다면 XShell 을 설치 하자 (http://www.netsarang.co.kr/download/down_xsh5.html) 개인 사용자 무료

 

 

putty 또는 ssh 접속 툴을 이용하여 NAS 의 ip 를 적고 port 는 22 번으로 접속한다. (5번에서 port 를 변경 하였다면 변경한 port 로 접속)

 

ID : DSM 로그인 ID (Admin Group 에 속해 있어야 함)

 

PW : DSM 로그인 ID 의 Password

 

 

7. Download Station 계정 변경하기

 

ssh 접속된 상태에서 다음 명령으로 root 계정으로 전환 할 수 있다.

 

sudo -i

 

위 명령을 실행 하면 Password 를 물어 보는데

 

DSM 로그인 ID 의 Password 를 입력 하면 된다.

 

whoami 명령을 이용해서 root 라고 표시 된다면 root 로 로그인 된것이다.

 

다음 명령으로 계정 정보를 변경 해야 한다.

 

vim /etc/passwd

 

위 명령을 수행하면 아래와 같은 화면을 볼수 있다.

 

anonymous:x:21:21::/nonexist:/usr/bin/nologin
avahi:x:84:84::/:/bin/false
dbus:x:81:81::/:/usr/bin/nologin
dovecot:x:143:143::/dev/null:/usr/bin/nologin
DownloadStation:x:125560:125560::/var/packages/DownloadStation/target:/usr/bin/nologin
ftp:x:21:21::/nonexist:/usr/bin/nologin
guest:x:1025:100:Guest:/nonexist:/usr/bin/nologin
http:x:1023:1023::/var/services/web:/bin/false
ldap:x:439:439::/var/lib/openldap:/usr/bin/nologin

 

수 많은 계정들 중 DownloadStation 이라는 계정을 보면 가장 끝에 /usr/bin/nologin 뭐 이런식으로 되어 있는걸 볼 수 있다.

 

이 부분을 다음과 같은 변경 한다.

 

커서를 수정 하려는 곳으로 이동 후에 i 키를 누르고 /bin/sh 를 입력한다.

 

필요 없는 부분은 delete 키를 이용해서 지운다.

 

anonymous:x:21:21::/nonexist:/usr/bin/nologin
avahi:x:84:84::/:/bin/false
dbus:x:81:81::/:/usr/bin/nologin
dovecot:x:143:143::/dev/null:/usr/bin/nologin
DownloadStation:x:125560:125560::/var/packages/DownloadStation/target:/bin/sh
ftp:x:21:21::/nonexist:/usr/bin/nologin
guest:x:1025:100:Guest:/nonexist:/usr/bin/nologin
http:x:1023:1023::/var/services/web:/bin/false
ldap:x:439:439::/var/lib/openldap:/usr/bin/nologin

 

/usr/bin/nologin 에서 /bin/sh 로 변경 하였다.

 

수정 완료 후 ESC 키를 한번 누르고

 

:wq  (콜론 wq) 명령을 입력하고 엔터를 치면 수정 된다.

 

 

8. DownloadStation 계정으로 로그인하기

 

/etc/passwd 수정이 끝났다면 다음 명령으로 DownloadStation 계정으로 로그인 할 수 있다.

 

su - DownloadStation

 

 

위 명령을 수행 하고 whoami 명령을 이용해서 DownloadStation 계정으로 로그인 되었는지 확인 한다.

 

 

 

9. 알림을 받을 Table 및 트리거 생성하기.

 

DownloadStation 계정으로 로그인 되었다면 아래 명령을 이용해서 postgresql 에 접속 한다.

 

psql -U DownloadStation -d download

 

명령을 수행 하면 다음과 같은 화면을 볼 수 있다.

 

psql (9.3.6)

 

Type "help" for help.

download=# 

 

 

위 상태에서 다음 Query 문을 이용하여 Table, Function, Trigger 를 생성한다.

 

다음 순서 대로 Query 문을 복사/붙여넣기 한다.

 

 

 

1. Create Table.

CREATE TABLE btdownload_event(
    task_id           integer   NOT NULL,
    username          character varying(128),
    filename          text,
    status            integer,
    total_size        bigint,
    isread            integer,
    create_time       date
);


 

2. Create OR Replace function

CREATE OR REPLACE FUNCTION process_btdownload_event() RETURNS TRIGGER AS $btdownload_event$
    DECLARE
        rec_count integer;
    BEGIN
        IF (TG_OP = 'INSERT') THEN
            RETURN NEW;
        ELSIF (TG_OP = 'UPDATE') THEN
            IF (NEW.status = 2 AND NEW.current_size > 0 AND NEW.total_size > 0 AND NEW.current_rate > 0 ) THEN
                SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 2;
                IF ( rec_count = 0 ) THEN
                    INSERT INTO btdownload_event VALUES(NEW.task_id, NEW.username, NEW.filename, NEW.status, NEW.total_size, 0, now());
                END IF;
            ELSIF (NEW.status = 5 ) THEN
                SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 5;
                IF ( rec_count = 0 ) THEN
                    INSERT INTO btdownload_event VALUES(NEW.task_id, NEW.username, NEW.filename, NEW.status, NEW.total_size, 0, now());
                END IF;
            ELSIF (NEW.status = 118) THEN
                UPDATE download_queue SET status = 5, extra_info = '' WHERE task_id = NEW.task_id;
                DELETE FROM task_plugin WHERE task_id = NEW.task_id;
                DELETE FROM thumbnail WHERE task_id = NEW.task_id;
            ELSIF (NEW.status = 123) THEN
                SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 123;
                IF ( rec_count = 0 ) THEN
                    INSERT INTO btdownload_event VALUES(NEW.task_id, NEW.username, NEW.filename, NEW.status, NEW.total_size, 0, now());
                END IF;
            END IF;
            RETURN NEW;
        ELSIF (TG_OP = 'DELETE') THEN
            IF (OLD.status = 2) THEN
                INSERT INTO btdownload_event VALUES(OLD.task_id, OLD.username, OLD.filename, 999, OLD.total_size, 0, now());
            ELSE
                DELETE FROM btdownload_event WHERE task_id = OLD.task_id;
            END IF;
            RETURN OLD;
        END IF;
        RETURN NULL;
    END;
$btdownload_event$ LANGUAGE plpgsql;

 

3. Create Trigger

CREATE TRIGGER btdownload_event
AFTER INSERT OR UPDATE OR DELETE ON download_queue
    FOR EACH ROW EXECUTE PROCEDURE process_btdownload_event();


 

Query 가 성공적으로 끝났다면 \q 를 입력하면 psql 이 종료 된다.

 

10. root 계정으로 전환 후 xpebot 설치 하기

 

exit 명령을 이용해서 root 계정으로 다시 돌아온다.

 

혹시 root 계정으로 돌아오지 않는다면 ssh 접속을 종료하고 다시 접속하여

 

sudo -i 명령을 이용해 root 계정으로 로그인한다.

 

 

다음 명령을 이용해서 사용자 홈 경로로 이동한다.

 

volume 은 사용자 환경에 맞게 volume1, volume2 등으로 구성 되므로 자신의 홈 디렉토리가 어디에 설치 되어 있는지는 알아야 한다.

 

cd /volume1/homes/admin

 

 

위 명령에서 admin 은 자신의 dsm 로그인 ID 이다. 각자 ID에 맞게 수정해서 수행한다.

 

 

xpebot 설치는 다음 명령을 차례대로 수행한다.

 

기존 5.2 버전과는 다르게 bot6.sh.ori 파일을 복사해서 사용하여야 한다.

 

 

git clone "https://github.com/acidpop/xpebot"

wget "https://bootstrap.pypa.io/get-pip.py"
   
python ./get-pip.py
   
pip install telepot
   
pip install BeautifulSoup
   
pip install psycopg2
    
pip install Pillow
    
pip install psutil
   
cd xpebot
    
cp bot6.sh.ori bot.sh
    
cp xpebot.cfg.ori xpebot.cfg

 

 

bot.sh 파일을 열어 3번째 줄의 admin 부분을 자신의 계정으로 변경한다.

 

xpebot.cfg 파일을 열어 각각의 정보를 변경한다.

 

1) NOTY_CHAT_ID 는 Downlaod Staion 에서 다운로드 진행 현황 알림을 받을 사용자의 Chat ID 값을 입력한다.

2) DSM_ID 는 자신의 DSM ID 를 입력한다.

3) BOT_TOKEN 은 Telegram 의 Bot Father 에서 /newbot 을 요청하여 BOT 생성 후 자신의 BOT TOKEN 값을 입력한다.

4) VALID_USER 는 인증된 사용자의 chat_id 값을 입력한다. 여러명일 경우 ,(콤마)를 이용해 구분한다.

5) NAVER_API 섹션에 발급 받은 CLIENT_ID_KEY 값과 CLIENT_SECRET_KEY 값을 입력한다.

6) RSS_NEWS 섹션에 보고 싶은 뉴스의 RSS 주소를 입력한다.

7) DATA 섹션에 data.go.kr 에서 발급 받은 서비스 키를 입력한다

 

수정이 완료 되었다면 다음 명령어로 bot 을 실행 하거나 중지 시킬 수 있다.

 

./bot.sh start

./bot.sh stop

./bot.sh restart

./bot.sh chk

 

 


Download Station 계정으로 로그인 하고 Table, Function , Trigger 까지만 생성이 되었다면 https://github.com/acidpop/xpebot

 

github 에 있는 내용대로 하면 된다.

 

 

  1. 이전 댓글 더보기
  2. 감사합니다! 2017.02.07 10:21

    안녕하세요 우선 자세한 설명덕분에 텔레그램으로 알림을 받는데 까지는 성공을 하였습니다.
    신기하여 이것저것 눌러보다가 명령어 중에 토렌트서치가 있어 검색한뒤에 다운을 받고 다시 다른명령을 준뒤로 알림이 먹통이 되었습니다.
    https://github.com/acidpop/xpebot 에서 보면 캔슬하지 않고 실행하는 오류를 수정했다는데 적용이 안된건지. 아니면 다른 원인이 있는건지 알고싶습니다.

    • BlogIcon Acidpop acidpop 2017.02.07 10:44 신고

      안녕하세요
      말씀하신 내용만으로는 원인 분석이 어렵습니다.
      /var/log/xpebot.log 내용을 같이 올려주세요

    • 감사합니다! 2017.02.08 09:59

      로그내용을 복사해서 올리니까 자꾸 댓글이 사라지네요..
      우선 재시작해서 사용하면 이상이 없긴하였습니다. 근데 또다른 문제가 나스를 재시작 했을경우 실행이 안되는것 같은데 원래그러는건가요...?

    • BlogIcon Acidpop acidpop 2017.02.08 10:01 신고

      티스토리 측 댓글 시스템에서 뭔가 스팸 처리가 되는모양입니다.ㅠㅠ
      github 이슈 게시판에 올려주시겠어요?
      그리고 나스 재시작시에 시작 하도록 하는건 수동으로 등록해주셔야 합니다.

    • 감사합니다! 2017.02.08 10:11

      그렇군요 수동으로 등록하는 방법도 여쭤볼수 있을까요?
      스케쥴러에 /volume1/homes/계정/xpebot/bot.sh start 이렇게 사용자 정의를 했는데도 실행이 안되는것같습니다

      초보자라 따라하기만 할줄알뿐 아는게 없어서 뭔가 답답하네요.

    • BlogIcon Acidpop acidpop 2017.02.08 10:17 신고

      http://blog.acidpop.kr/241

      이글을 참고 하셔서 해보세요

      그리고 시스템 시작시 봇이 시작 되도록 하고 싶으시다면

      /etc/rc.local 파일에
      /volume1/homes/계정/xpebot/bot.sh start

      가장 아래줄에 추가해주시면 됩니다.
      혹시 rc.local 파일이 없다면 하나 만드셔서

      #! /bin/sh

      /volume1/homes/계정/xpebot/bot.sh start

      이렇게 작성 하시면 됩니다.

    • 감사합니다! 2017.02.08 10:23

      네 감사합니다. 한번 해보겠습니다!

    • 감사합니다! 2017.02.08 11:47

      알려주신 페이지대로 해도 안되고 rc.local 파일을 만들어서 해봐도 전혀 안되네요.. ssh로 접속해서 재시작하면 정상작동하니 우선 그렇게 사용해야겠네요.

    • BlogIcon Acidpop acidpop 2017.02.08 17:30 신고

      xpenology 가 사용자마다 간혹 환경이 다른 경우가 있더라구요.
      도움이 되지 못해 죄송합니다.

  3. nanpuhaha 2017.02.19 11:35

    안녕하세요? 덕분에 신기한 경험을 했습니다.

    다만, 한 가지 아쉬운 점이 명령 한번 하면 Stopped가 되는데,
    원래 명령 한번 수행하면 바로 Running 에서 Stopped가 되나요?

    어딜 손봐주면 수행한 뒤 Stopped 되자마자 다시 start할 수 있도록 할 수 있나요?

    • BlogIcon Acidpop acidpop 2017.02.19 11:57 신고

      명령을 수행할때 stop 되게 설계 되어있지는 않습니다만
      torrentsearch 명령이나 magnet 등록과 같이 downloadstation 에 db insert 구문을 수행하게 되면 dsm 측에서 해당 프로세스를 강제로 종료하는 현상이 있습니다
      torkim 명령을 사용하시는걸 추천드려여

  4. nanpuhaha 2017.02.19 13:08

    오옷 빠른 답변 감사합니다!
    torkim 명령을 사용하도록 하겠습니다!

    지금까지 http://blog.acidpop.kr/241 의 xpebot monitor 를 활용해보려 했는데
    제가 bash shell을 잘 몰라서 그런지... 설치된 경로를 제대로 변경했는데도 작동을 안하더라고요...
    혹시 xpebotmonitor.sh와 작업 스케쥴러를 이용하여 ./bot.sh start를 해주게 할 순 없을까요?

    • BlogIcon Acidpop acidpop 2017.02.20 09:09 신고

      bot monitor 스크립트와 bot.sh 스크립트에서

      가장 첫번째 줄의

      #! ./bash 로 되어 있다면

      전체 경로로 변경해주세요

      예를 들면

      #! /volume1/homes/admin/xpebot/bash

      이런식으로 bash 가 있는 경로의 절대 경로로 바꿔서 한번 테스트해보세요

  5. dung 2017.03.14 10:45

    안녕하세요. xpebot 으로 시놀로지에서 다운로드스테이션과 연결해서 잘 사용중인데요,

    어느순간부터 텔레그램 알림이 여러개가 뜨네요.. 예를들어 다운로드 완료 알림이 같은게 7개씩 뜬다던가 하는데

    혹시 원인이 뭘가요?

  6. dung 2017.03.14 11:15

    시놀로지 알림에 "아이디"의 주소 [아이피]가 SSH에 의해 차단되었습니다. 라는 메세지가 너무 많이 나오는데 이것도 해결할 수 있을까요?

    • BlogIcon Acidpop acidpop 2017.03.14 11:17 신고

      ssh 포트를 22 기본값으로 사용 하시면 그렇습니다 잘 사용하지 않는 포트로 바꿔주세요

  7. dung 2017.03.14 11:17

    만들어놓은 봇 하나로 2개의 텔레그램 아이디가 사용중입니다. 다운로드 스테이션은 여러명이 쓰고 있긴 한데, 텔레그렘은 2명만 사용해요.

  8. dung 2017.03.14 11:22

    텔레그램 봇은 테스트용하나 만들었다가 사용안하고 사용중인 봇은 1개입니다.
    위 명령어 실행하니 아래와 같이 나옵니다.
    11742 pts/13 S+ 0:00 grep --color=auto python

    • BlogIcon Acidpop acidpop 2017.03.14 11:24 신고

      괜찮으시다면 텔레그램 아이디 하나 알려주실수 았을까요
      바밀댓글로 남겨주세요

  9. 2017.03.14 11:25

    비밀댓글입니다

  10. yhchoi 2017.03.18 00:34

    저도 luna1474 님과 동일한 증상이 발생했네요 chk 해보면 stopped 라고 뜨는데 메신저에서 말을걸면 대답을 하네요..

    2017-03-18 00:21:15 [ERROR] download_db_timer Exception : Traceback (most recent call last):
    File "/volume1/homes/yhchoi/xpebot/dsdownload.py", line 399, in download_db_timer
    self.curs.execute(query)
    OperationalError: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.


    2017-03-18 00:21:15 [ERROR] error ---- server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
    , -1
    2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
    2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
    2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
    2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
    2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
    2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
    2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
    2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
    2017-03-18 00:21:19 [INFO] recv signal : SIGTERM[15]
    2017-03-18 00:21:19 [INFO] SIGTERM signal ignore
    2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
    2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
    2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
    2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
    2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
    2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
    2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
    2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
    2017-03-18 00:21:20 [INFO] recv signal : SIGTERM[15]
    2017-03-18 00:21:20 [INFO] SIGTERM signal ignore
    2017-03-18 00:21:21 [ERROR] dsdownload db_connect error
    2017-03-18 00:21:21 [ERROR] could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/run/postgresql/.s.PGSQL.5432"?

    log보면 이런 메세지들이 있네요
    -------------------------------------------
    DSM 6.1 사용 중인데

    원인은 작업스케줄러에 시작시 bot start를 넣었더니 그런것 같습니다.
    재시작해보니까 bot은 다시 시작되서 대답을 하는게 확인되었는데.. chk해보면 stop으로 나오네요..

    작업스케줄러에서 실행한게 chk가 안되는 문제인것 같습니다.

    • BlogIcon Acidpop acidpop 2017.03.18 00:37 신고

      dsm 6.x 를 사용하시나요?
      bot.sh.ori 가 아닌 bot6.sh.ori 를 bot.sh로 복사하셔서 사용 하셔야 합니다
      지금 봇이 여러개 실행 되서 그런거에요

  11. yhchoi 2017.03.18 00:54

    그리고 help 명령어 치면 tfreeca 는 없네요..
    그리고 똑같이 따라했는데 다운로드완료시점에 에러라고 뜨네요..

    • BlogIcon Acidpop acidpop 2017.03.18 00:58 신고

      help에는 tfreeca 가 빠져있나봅니다

      혹시 http://blog.acidpop.kr/240
      이 dsm 6.0 일때 xpebot 설정도 다 하신건가요?
      xpebot 이 5.2기준이라 불안정할수 있습니다

  12. yhchoi 2017.03.18 01:06

    링크에 게시글에 중간에 bot.sh.ori라고 되어있네요^^;;이것만 수정해주시면 그대로 따라해도 아무런 문제가 없겠네요
    감사합니다!!
    ---------------------------------------------
    지금 bot6.sh.ori로 변경해서 진행결과
    작업스케줄러에 bot start 를 넣은거는 문제없이 running으로 표시되고 있습니다.
    그런데 여전히 다운로드 완료 후 에러는 뜨네요 큰 문제는 아니니 그냥 써도 될것 같네요 감사합니다~!!!
    -----------------------------------------------
    마지막으로 다운로드 완료 후에 에러라고 뜨는건 다운로드 폴더를 mount 폴더로 지정해놨더니 그러네요
    이거는 download station 문제로 생각되네요^^
    덕분에 정말 편하게 사용할 수 있어서 감사합니다!!수고하세요~

  13. Jo 2017.05.26 19:03

    덕분에 편하게 텔레그렘으로 알림이오네요.

    혹시 다운로드 스테이션에서 다운로드가 완료 되었을 경우에만 텔레그렘으로 알림이 전송되는 방법 혹시 아시나요?

    • BlogIcon Acidpop acidpop 2017.05.29 12:04 신고

      그렇게 하시려면
      DB Trigger 만드는 코드를 수정 하시면 됩니다.

      IF (NEW.status = 2 AND NEW.total_size > 0 ) THEN
      SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 2;
      IF ( rec_count = 0 ) THEN
      INSERT INTO btdownload_event VALUES(NEW.task_id, NEW.username, NEW.filename, NEW.status, NEW.total_size, 0, now());
      END IF;
      ELSIF (NEW.status = 5 ) THEN
      SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 5;
      IF ( rec_count = 0 ) THEN
      INSERT INTO btdownload_event VALUES(NEW.task_id, NEW.username, NEW.filename, NEW.status, NEW.total_size, 0, now());
      END IF;

      이 부분을 아래와 같이 수정 하셔서
      적용 하시면

      완료 일때에만 알람이 옵니다.

      IF (NEW.status = 5 ) THEN
      SELECT COUNT(*) into rec_count FROM btdownload_event WHERE task_id = NEW.task_id AND status = 5;
      IF ( rec_count = 0 ) THEN
      INSERT INTO btdownload_event VALUES(NEW.task_id, NEW.username, NEW.filename, NEW.status, NEW.total_size, 0, now());
      END IF;

  14. Jo 2017.05.30 00:37

    답변 감사합니다.

    한가지 피드백을 하자면

    현제 토렌트킴으로 토렌트를 받을시 봇이 꺼지는 현상이있는데(위에 꺼지는 현상의 이유도 읽어 보았습니다.)

    만약 꺼지는 서비스(토렌트서치, 토렌트킴, 겟토렌트킴 등...)를 실행 시 토렌트 받는 명령 전에 Restart 라는 py 혹은 쉘 스크립트를 만들어

    일정시간(약 10초)뒤에 다시 bot.sh start를 자동으로 해주는거죠.

    요약) 꺼지는 서비스 실행시 실제 토렌트서비스 실행 전 Restart.sh 등 스크립트 파일을 실행

    스크립트 파일 안에는 약 10초 뒤쯤 ./bot.sh start 를 해주는 명령어가 존재

    • BlogIcon Acidpop acidpop 2017.06.07 16:31 신고

      현재 XPEnology 6.1 에서는 그런 현상은 사라진것 같습니다.
      제안하신 방법도 우회 할 수 있는 방법이긴 합니다면 이것 외의 예외 상황일떄도 사용할수 있는 모니터링 쉘을 수행하는 방법이 나을것 같습니다. ^^;

  15. Jo 2017.07.29 21:28

    DSM 6.1.3 이후 파이썬등등 패키지 업데이트 이후 봇.sh이 실행되지 않습니다.

    • BlogIcon Acidpop acidpop 2017.07.31 09:38 신고

      안녕하세요
      제가 DSM 6.1.3 을 테스트 해 볼수가 없습니다.

      ./bot.sh start 실행 하면
      뭐라고 나오나요?

    • Jo 2017.08.01 19:38

      ./bot.sh start

      ===============
      Traceback (most recent call last):
      File "/var/services/homes/whwhdtk5689/xpebot/main.py", line 10, in <module>
      import telepot
      ImportError: No module named telepot
      XPEnology Telegram BOT : Stopped
      ===============

      이러한 에러가 나오네요.

      telepot을 import못했다고나옵니다.

    • Jo 2017.08.01 19:39

      곰곰히 생각해보니 얼마전에 한번 초기화한적이있었네요...

      pip로 설치후 다시 테스트해보겠습니다.

    • Jo 2017.08.01 19:56

      다시 설치하니 파이썬모듈들이 설치가 안되어있었네요.

      감사합니다.

    • BlogIcon Acidpop acidpop 2017.08.02 09:52 신고

      원인을 찾게 되서 다행이네요

  16. 사천탕수육 2017.08.25 11:43

    토렌트 검색을 한다음 다운로드를 하려고 누르면 "Torrent File 다운로드 시도"에서 더이상 진행이 안되는데 왜그럴까요...?

    • BlogIcon Acidpop acidpop 2017.08.25 12:21 신고

      어떤 명령을 쓰셨는지도 봐야 하고..
      토렌트 다운로드 누른 시점에서의
      /var/log/xpebot.log 내용도 있어야 합니다.

  17. 사천탕수육 2017.08.25 13:19

    말씀하신대로 log를 확인하니 원인이 나오는듯 하네요. 감사합니다!!
    [ERROR] File Move Exception, '[Errno 2] No such file or directory: 'Download Station Watch Directory Path (ex : /volmue1/download/watch/ )''

    덕분에 잘 해결했습니다 감사합니다!

    • BlogIcon Acidpop acidpop 2017.08.28 09:42 신고

      해결 되셨다니 다행입니다

      왠만한 예외 사항은 로그기록 하도록 처리를 해놓은 편이라 로그 확인이 가장 빠르긴 합니다.

  18. 에드빈 2017.12.14 16:07

    바쁘실텐데 죄송합니다.
    위에 적어주신 대로 했는데도 여전히 완료 시점에 에러가 뜨는데, Download Station으로 들어가서 정지를 시키면 완료는 되는군요.
    너무 막연한 질문인 것 같아 죄송합니다.
    /var/log/xpebot.log 파일은 어떻게 보여 드려야 할까요?

    • BlogIcon Acidpop acidpop 2017.12.14 18:15 신고

      기존에 DB에 작업한 table, trigger 를 삭제 하신 다음에 진행 하셔야 할것으로 보입니다.

  19. 에드빈 2017.12.19 14:00

    답변 감사합니다. 하지만 테이블과 트리거를 삭제하였다가 다시 위에 나온대로 만들어 보아도 역시 완료 시점에 에러가 발생하네요

    • BlogIcon Acidpop acidpop 2017.12.19 14:01 신고

      downloadstation 계정으로 하신건가요?
      실례가 안된다면 비밀댓글로 텔레그램 ID 알려 주시면 연락 드리겠습니다.

  20. 2017.12.19 14:46

    비밀댓글입니다

  21. 거다 2018.10.08 16:21

    좋은정보 감사합니다. 덕분에 알람 설정 잘하고 편하게 쓰고 있습니다 중간에 문제가 생겨서 댓글로 다량의 글을 남겼다가 해결하게 되어 지웠습니다...ㅎㅎ 아 한간지 궁금한게 있는데요 다운로드 스테이션 다른 사람도 추가 하려고 다른 사람의 텔레그램 chat id 을 알아내고 xpebot.cfg 파일에 chat_id 와 valid user? 여기에다가도 chat _id를 입력하였는데 다른사람이 알람이 오질 않네요.. 혹시 제가 빼먹은게 있을까요? 그냥 간단하게 chat_id 만 입력하면 끝인지도 궁금합니다.

    마지막으로 완료되었을시 알람만 울리게 하는 댓글이 위에 써있는데 db 트리거는 어느 파일에서 수정 하는 것인가요?

    • BlogIcon Acidpop acidpop 2018.10.12 10:54 신고

      안녕하세요 답변이 늦었습니다.

      xpebot.cfg 에 보시면 NOTY_CHAT_ID 와 VALID_USER에 각각 쉼표로 구분해서 chat_id 를 추가 해주시면 작동합니다.

      cfg 에 추가 하시고 bot 을 재시작 해야만 적용 됩니다.

      완료일때만 알람을 설정 하시려면
      DSM 6.0 설정 글 중 두번째 항목의 CREATE OR REPLACE FUNCTION 으로 시작 하는 코드를 수정 하시면 됩니다.

    • 거다 2018.10.13 16:11

      귀찮으실텐데 일일히 답변해 주셔서 정말 감사합니다.

    • 거다 2018.10.13 20:39

      답변 정말 감사합니다. 텔레그램은 계속 해결이 되지 않네요.. 2군데 모두다 입력 했는데.. restart 도 해보고 아예 멈췄다가 다시 켜보고 해도 알람이 오질않네요.. 제꺼는 잘오는데 상대방 께 안오네요..chat_id 좀 다시 확인해보고 해야 할것 같습니다. 상대방은 가만히 있어도 그냥 자동으로 대화창이 열리는 시스템인거 맞지요?

    • BlogIcon Acidpop acidpop 2018.10.15 15:36 신고

      안녕하세요

      가장 의심 되는 부분은 chat_id 인거 같습니다.

      일단 터미널에서

      curl -s -k -d "chat_id=12345678" --data-urlencode "text=TestMessage" https://api.telegram.org/bot123456789:TOKEN/SendMessage

      위와 같이 chat_id 뒤에 값과 .org/bot 으로 시작 하는 부분의 Bot 토큰값을 바꿔서 한번 실행해 보신 다음
      메시지가 가는지 부터 확인을 해보시면 됩니다.

    • 거다 2018.10.18 21:37

      안녕하세요 써주신 방법대로 시험 메세지를 보내본 결과 상대방이 수신합니다. 그런데 다운로드 스테이션만 계속해서 수신이 되지않네요. 일단 xpebot.cfg 에 써있는 글을 복사하자면

      [TELEGRAM]
      # Download Station 에서 작업 완료시 알림 메시지를 받을 사용자의 Chat ID 목록(, 로 구분하여 여러명 등록, EX: NOTY_CHAT_ID = 12345,98765)
      NOTY_CHAT_ID = 현재수신되는챗아이디, 상대방 챗아이디
      # Telegrem BOT을 이용하려는 DSM 사용자 ID
      DSM_ID = admin 계정
      # Telegram BOT 의 Token ID
      BOT_TOKEN = admin 계정의 봇토큰

      # 등록된 사용자 목록(, 로 구분하여 여러명 등록)
      VALID_USER = 현재수신되는챗아이디, 상대방 챗아이디

      # Torrent Watch Directory Path
      WATCH_DIR = /volume1/6_Torrent seed

      이렇게 되있는데 봇토큰은 1개만 입력하는 것이 맞지요? 잘모르지만 봇토큰이 2개가 입력되어야 할것만 같아 본인봇토큰입력,(한칸띄고)상대방봇토큰 으로 시험 해봤더니 bad request 400 에러만 뜨네요

      현재상황
      1. 첫번째의 챗아이디로 알림이 잘옴
      2. 혹시나 해서 챗아이디 순서를 바꿨지만 admin 계정의 아이디만 알림이옴
      3. 대댓글에 알려주신대로 TEST 메세지를 보내면 상대방은 수신함
      4. 다운로드 스테이션 알람만 상대방에게 가지않음
      5. 챗아이디 입력할때
      1235,(한칸띄고)34723 이런식으로 입력
      붙여서도 해봤으나 실패
      6. 이상입니다. 감사합니다.

    • BlogIcon Acidpop acidpop 2018.10.18 21:40 신고

      안녕하세요
      텔레그램 ID 비밀 댓글로 남겨 주시면 도와드릴께요~

    • 2018.10.18 23:28

      비밀댓글입니다

 

 


 

systemctl 로 telegram service 를 시작 하면 봇이 응답을 받지 않는 문제가 있네요...ㅠㅠ

 

해결 방법을 찾아 보고 있습니다.

 

혹여 잘 아시는 분은 댓글로 도움 부탁드립니다.


 

 

 

기존에 Telegram CLI 데몬을 등록하는 글을 작성한게 있는데 최근(?) Raspbian Wheez 에서 Raspbian Jessie 로 업데이트가 되면서

 

서비스를 관리하는 프로세스가 변경이 되었다. 리눅스의 커널이 올라가면서 init 프로세스에서 systemd 로 변경이 되었는데

 

사용법이 많이 달라져있다.

 

init 과 systemd 차이 또는 사용법은 구글링 해보면 많이 나오니 이 블로그에서는 Telegram CLI 를 어떻게 등록 하는지에 대해서만 포스팅 한다.

 

 

이 글의 라즈베리 파이 시작 프로그램 작성 방법은 Raspbian Jessie 버전에서 작동합니다.

 


 

 

기존에는 /etc/init.d/telegramd  라는 파일 이름으로 스크립트를 등록해서 사용 했었으나 이젠 해당 스크립트는 필요 없고 다음 순서대로 하면 된다.

 

1. telegram.service 파일 작성하기.

 

일단 Telegram CLI 를 pi 계정에서 사용하는 가정하에 다음과 같이 디렉토리를 생성한다.

 

 

[pi@/home/pi]$ mkdir -p /home/pi/.config/systemd/user

[pi@/home/pi]$ cd /home/pi/.config/systemd/user

 

디렉토리를 생성 하고 해당 경로로 이동한다.

 

vi 또는 nano 에디터를 이용해서 다음 내용의 파일을 telegram.service 파일로 생성한다.

 

[Unit]
Description=Telegram CLI Daemon

 

[Service]
Type=forking
ExecStart=/home/pi/tg/tg.sh start
ExecStop=/home/pi/tg/tg.sh stop

 

[Install]
WantedBy=default.target

 

빨간색 글씨로 표시된 부분은

 

2015/07/21 - [강좌/RaspberryPI 활용] - 라즈베리파이 Telegram BOT 만들기 4부 - Telegram CLI 데몬 실행 및 서비스 등록

 

이 링크에서 4. Telegram CLI 서비스 등록하기

 

에서 설명한 셀 스크립트를 그대로 활용 하는 부분이므로 해당 링크 글을 참조 한다.

 

위 내용을 저장하면 telegram.service 라는 파일이

 

/home/pi/.config/systemd/user/telegram.service 경로에 저장 된다.

 

이제 systemd 에 등록할 차례 이다.

 

2. 서비스 등록 하기

 

[pi@/home/pi]$ systemctl --user enable telegram.service

 

 

3. 서비스 시작 하기

 

[pi@/home/pi]$ systemctl --user start telegram.service

 

 

4. 서비스 상태 확인 하기

 

[pi@/home/pi]$ systemctl --user status telegram.service

 

 

 

 

[pi@/home/pi]$ systemctl --user status telegram.service

● telegram.service - Telegram CLI Daemon
   Loaded: loaded (/home/pi/.config/systemd/user/telegram.service; enabled)
   Active: active (running) since Mon 2016-07-25 15:03:26 KST; 18min ago
  Process: 702 ExecStart=/home/pi/tg/tg.sh start (code=exited, status=0/SUCCESS)
 Main PID: 707 (telegram-cli)
 

 

active(running) 이 되어 있는지 확인 한다.

 

 

[pi@/home/pi]$ ps -ef | grep telegram

pi         707   697  0 15:03 ?        00:00:00 /home/pi/tg/bin/telegram-cli -s /home/pi/tg/bot/basicbot.lua -L/var/log/telegram-cli.log -P 8080 -e contact_list -d
pi         885   716  0 15:24 pts/0    00:00:00 grep --color=auto telegram

 

위 명령어를 이용해서 Telegram CLI 프로세스가 실행 되고 있는지도 확인한다.

 

 

모든 과정이 끝났다.

 

이젠 라즈베리파이를 재부팅 해보고 Telegram CLI 가 부팅시 시작 되는지 확인해 본다.

  1. seohyeon 2016.11.27 16:20

    systemctl로 telegram service를 실행할 경우 telegram 봇은 인증부터 들어갑니다. 왜냐하면 systemctl이 찾고 있는 ~/.telegram-cli/는 저희가 위차가 /home/pi가 아닌 /root/.telegram-cli를 주목하고 있습니다. 그렇게 되면 telegram-cli.log는 사용자에게 [인증된 파일이 없습니다!]를 요청하게 되는거죠. 권한을 조금씩 수정하면 되긴 하지만 저 같은 경우에는 ~/tg 디렉토리와 ~/.telegram-cli 디렉토리를 /root 밑에 두고 tg.sh의 변수에서 설정한 경로와 telegram.service의 절대경로를 변경하여 해결하였습니다! 저보다 더 좋은 해결 방법을 알고 계시다면 댓글을 써주세요!

    • BlogIcon Acidpop acidpop 2016.12.05 09:20 신고

      제가 systemctl 을 제대로 이해하지 못하고 사용을 해서 그랬었군요.

      정말 좋은 정보 감사합니다.

    • BlogIcon xoskd 2017.03.25 21:48 신고

      root 폴더 접근이 허가가 안되는대 접근을 어떻게 해야되나여?

  2. bestbefore 2017.02.11 08:31

    라즈베리파이 3 Jessie 사용중입니다.

    자꾸 daemon 이 stopped 되어 작동을 안하는 문제가 있습니다.

    해당 글에 댓글대로 , ~/tg 폴더와 ~/.telegram-cli 폴더를 전부 /root 폴더 아래에 복사시켰습니다.

    tg.sh 같은 경우도

    ExecStart=/root/tg/tg.sh start
    ExecStop=/root/tg/tg.sh stop

    로 경로를 변경시켰습니다.

    telegram.service 역시

    [Service]
    Type=forking
    ExecStart=/root/tg/tg.sh start
    ExecStop=/root/tg/tg.sh stop

    로 경로를 변경시켰습니다.

    문제는 터미널에서 systemctl --user start telegram.service 를 실행시켰을때 에러가납니다

    Active: failed (Result: exit-code)
    Process: 1548 ExecStart= /root/tg/tg.sh start (code=exited, status=203/EXEC)

    라고 합니다.

    root 폴더가 일반적으로 접근허용이 안되있어서 그런가보다 하고 LXTerminal 에서 실행시켰는데 그래도 결국 실패했습니다;;

    systemctl --user enable telegram.service 라는 명령을 내렸을 때,

    Failed to get D-Bus connection: 명령을 허용하지 않음 이라고하네요

    혹시 이런 문제들에 대한 해결방법이나 조언 부탁드립니다.

    • BlogIcon Acidpop acidpop 2017.02.13 10:36 신고

      systemctl 명령을 사용하실때
      pi 계정에서 사용을 하셨나요?
      맨 앞에 sudo 명령을 붙여서 실행해보세요

  3. bestbefore 2017.02.14 05:13

    따로 계정을 생성하거나 추가/변경 시킨것은 없습니다.

    뭔가 꼬인거같아서 전부 지우고, 시작부터 /root 폴더에 전부 생성하였습니다.

    daemon 은 Running 상태이며, 8888포트로 메시지도 전달이 가능합니다.

    문제는 systemctl --user enable telegram.service 명령어가 여전히 먹히지 않습니다.

    LXTerminal 에서 sudo systemctl --user enable telegram.service 를 입력시 이번에는
    Failed to get D-Bus connection: 연결이 거부됨 이라고 합니다.

    일반 Terminal 에서 systemctl --user enable telegram.service 를 실행해보니 뭔가 telegram.service가 실행되었다고는 합니다.
    문제는, systemctl -- user start telegram.service 입력시 에러가 납니다.
    에러 내용은 :

    Job for telegram.service failed. See 'systemctl status telegram.service' and 'journalctl -xn' for details. 라고 하며

    systemctl --user enable telegram.service 입력시

    Loaded : loaded
    Active : failed (Result : exit-code)
    Process : 1647 ExecStart =/root/tg/tg.sh start( code =excited, status=203/EXEC)
    라고 합니다.


    telegram.service 를 라즈베리파이에 기본 설치되어있는 Text Editor로 만들었는데, 혹시 nano 에디터로 파일을 생성해야하는가요?
    아니면 chmod 로 실행권한을 줘야하나요?

    • BlogIcon Acidpop acidpop 2017.02.14 09:37 신고

      글쎄요...
      저도 systemctl 을 사용하고 있지 않아서
      정확한 답변을 드리기가 어렵습니다. ㅠㅠ

  4. BlogIcon xoskd 2017.03.25 22:16 신고

    Active: inactive (dead) 서비스 상태확인을하면 이글이 나옵니다

  5. xoskd 2017.04.10 13:37

    systemctl --user start telegram.service 실행시
    Job for telegram.service failed. See 'systemctl status telegram.service' and 'journalctl -xn' for details. 이렇게 뜨고
    앞에 sudo를 넣고 실행시에는
    Failed to get D-Bus connection: 연결이 거부됨
    연결이 거부됫다고 뜨네여

    • BlogIcon Acidpop acidpop 2017.04.10 13:53 신고

      일단
      /home/pi/.config/systemd/user/telegram.service

      이 파일이 정확히 있는지 확인해주시고
      이 파일 내용이

      [Unit]
      Description=Telegram CLI Daemon

      [Service]
      Type=forking
      ExecStart=/home/pi/tg/tg.sh start
      ExecStop=/home/pi/tg/tg.sh stop

      [Install]
      WantedBy=default.target


      위와 같이 되어 있는지 확인 하신 다음

      /home/pi/tg/tg.sh 파일이 있는지
      그리고 tg.sh start 또는 stop 이 제대로 작동하는지 확인 해주세요

      제 라즈베리파이에 설치된 버전은
      4.4.38-v7+ #938

      Raspbian GNU/Linux 8 (jessie)

      버전입니다.

      현재 제 시스템에서는

      systemctl --user start telegram.service

      위 명령 실행시 아무 메시지도 나오지 않고
      정상적으로 실행이 되어 있습니다.

      systemctl --user status

      위 명령을 실행 하면 아래와 같이 나옵니다.

      telegram.service
      ● telegram.service - Telegram CLI Daemon
      Loaded: loaded (/home/pi/.config/systemd/user/telegram.service; disabled)
      Active: active (running) since Mon 2017-04-10 13:45:41 KST; 5s ago
      Process: 23150 ExecStart=/home/pi/tg/tg.sh start (code=exited, status=0/SUCCESS)
      Main PID: 23156 (telegram-cli)
      CGroup: /user.slice/user-1000.slice/user@1000.service/telegram.service
      └─23156 /home/pi/tg/bin/telegram-cli -s /home/pi/tg/bot/acidpopbot.lua -L/var/log/telegram-cli.log -P 8888 -e contact_list -d


      혹시 user 디렉토리를 본인 ID 로 만드신건 아니신지요

  6. BlogIcon xoskd 2017.04.10 23:10 신고

    pi@raspberrypi:~ $ systemctl --user status telegram.service
    ● telegram.service - Telegram CLI Daemon
    Loaded: loaded (/home/pi/.config/systemd/user/telegram.service; enabled)
    Active: inactive (dead) since 월 2017-04-10 22:18:09 KST; 40s ago
    Process: 8743 ExecStop=/home/pi/tg/tg.sh stop (code=exited, status=0/SUCCESS)
    Process: 8738 ExecStart=/home/pi/tg/tg.sh start (code=exited, status=0/SUCCESS)

    Warning: Unit file changed on disk, 'systemctl --user daemon-reload' recommended.
    실행시 이렇게 뜹니다
    파일다 제대로있고 경로도 같습니다

    • BlogIcon xoskd 2017.04.10 23:11 신고

      user 디텍토리 본인 ID라는건 뭔지 잘 모르겠네여
      Linux raspberrypi 4.4.50-v7+ #970
      라즈베리 설치버전입니다

    • BlogIcon xoskd 2017.04.10 23:15 신고

      혹시 라즈베리파이 설정에
      boot 값을 To Desktop 에서
      To CLI로 변경해야되나여?

    • BlogIcon Acidpop acidpop 2017.04.10 23:39 신고

      일단 systemctl 을 꼭 사용하셔야 할 이유가 있나요?
      굳이 필요 없으시다면
      /etc/rc.local

      을 vim 등의 편집기를 이용해 수정해주세요

      sudo vim /etc/rc.local

      exit 0 바로 윗 라인에

      su - pi -c "/home/pi/tg/tg.sh start"

      이 명령을 추가해 주시면
      부팅시 telegram-cli 가 실행 됩니다.


      그리고 실행 상태 여부는
      /home/pi/tg/tg.sh chk

      이 명령으로 체크하세요

      systemctl 쓰지 않으시는걸 추천드려요

    • BlogIcon xoskd 2017.04.10 23:42 신고

      #Make sure that the script will "exit 0" on success or any other
      이 문장 위에다가
      su - pi -c "/home/pi/tg/tg.sh start"
      이줄을 추가시키면되나여??

    • BlogIcon Acidpop acidpop 2017.04.10 23:54 신고

      맨 아래에 보시면 exit 0 가 있습니다

      그거 바로 위에 써주시면 되요

  7. gawoon 2017.10.02 21:04

    위와 같이 해도 안되어서 raspberrypi.org에서 해답을 찾았습니다.
    파이가 너무 빨라져서 생기는 문제인것 같습니다. ^^;
    /etc/rc.local 파일에 아래 두 줄을 삽입해서 해결했습니다.
    sleep 15
    su - pi -c "/home/pi/tg/tg.sh start"

http://blog.acidpop.kr/191


예전에 제로보드 새글 또는 새 댓글을 텔레그램으로 받는 글을 포스팅 한적이 있다.


해당 글은 제로보드의 Core 파일(?) 을 수정해서 작동 하도록 만든 글이기에 일반 사용자가 접근 하기에는 어려운 점이 좀 있었다.






제로보드 문서를 좀 살펴 보다 보니 애드온을 이용해서 새 게시물이나 댓글이 등록 되는 시점에

 

특정 동작을 할 수 있도록 되어 있는걸 알게 되었다.

 

XE 애드온 문서를 참고 하여 대충 만들어 본 애드온이다.


제로보드를 설치 하고 해당 애드온만 설치 하면 바로 텔레그램으로 새글, 새 댓글 알림을 받을 수 있다.


SMS 나 이메일 알림 애드온은 꽤 많은것 같은데 Telegram 알림은 없는 것 같아서 만들어 보았다.






pushTelegram.zip



위 파일을 다운로드 받아서


/xe/addons 경로 아래에 압축을 풀면

 

pushTelegram 이란 디렉토리가 생성이 된다.


 



XE 설정 메뉴에 가서 설치된 애드온 메뉴가 이동 해 보면


pushTelegram 애드온이 설치 된 것을 확인 할 수 있다.


PC와 모바일 모두 체크 하고 저장 버튼을 누른다.


설정을 눌러 다음 화면으로 이동한다.



Telegram Bot Token 값은 다음 링크를 이용해서 생성된 Token 값을 입력한다.


http://blog.acidpop.kr/215



Telegarm 사용자 ID 는 다음 링크를 이용해서 알아 올 수 있다.


http://blog.acidpop.kr/216


보낼 대상의 숫자로 이루어진 사용자 ID를 입력한다.


해당 애드온이 작동할 게시판을 선택하고 저장 버튼을 누른다.




게시물을 작성 해 본다.



텔레그램으로 메시지가 잘 오는지 확인한다.


참고로 필자는 stop_spambot_xe 라는 애드온과 함께 사용중이다





왜 이 애드온을 아직까지 아무도 만든사람이 없는지는 잘 모르겠지만......


일단 제가 필요해서 만든 애드온이기에 필요한 사람들도 함께 쓸 수 있도록 블로그에 포스팅합니다.



다른곳에 퍼가실때는 꼭 출처를 남겨주세요.



 


 

휴리파파님께서 XE 텔레그램 애드온의 기능을 수정하여 더 좋은 애드온으로 개발하여 주셨습니다.

 

https://www.xetown.com/rxe_point/808690

 

위 링크를 참고하여 사용하시면 됩니다.

  1. 안창덕 2016.06.30 09:27

    감사합니다 정말 찾고 계속 찾고 있었던 건데 이제야 찾았네요
    잘 사용하겠습니다.
    아그리고 여러사람에게 보낼수 있는 방법은 없나요?

    • BlogIcon Acidpop acidpop 2016.06.30 11:11 신고

      안녕하세요
      여러 사람에게 보내는 기능은 추가 될 예정이 없습니다.

      그룹 채팅방을 만들어서 해당 그룹 채팅방 ID를 넣으시는것도 괜찮은 방법일것 같습니다.

  2. 초보 2016.07.17 23:08

    잘쓰겠습니다.

  3. 초보 2016.07.18 00:45

    여러명에게 보내는건 봇이 읽어 들인걸 채널로 보내면 되네요..

    • BlogIcon Acidpop acidpop 2016.07.20 13:48 신고

      채널로 보내셔도 되고 그룹채팅방으로 보내 셔도 됩니다.

      BotFatehr 에게 /setjoingroups 명령 보내고 봇 선택한 다음
      enable
      하시면 봇도 그룹 채팅방에 들어 가게 할 수 있습니다.

  4. BlogIcon Dear Memory 2016.12.12 00:26 신고

    카톡으로 오게는 못하나요?

  5. 수화 2017.01.22 21:58

    좋은 자료를 공개해주셔서 감사합니다. 게시글을 작성할 때에 정상적으로 텔레그램에 메시지가 오는데, 게시글을 수정할 때에도 동일하게 메시지를 보내네요. 혹시 글 수정하는 때엔 (&act=dispBoardWrite 이긴 하지만 이미 document_srl이 존재할 때) 예외 처리를 할 수 있을까요?

    • BlogIcon Acidpop acidpop 2017.01.23 09:45 신고

      죄송하지만 요즘은 xe 를 운영하고 있지 않아서 개발이나 테스트가 불가능합니다.

      애드온 압축 해제 하셔서 직접 변경해보셔도 될것 같아요

    • 도리 2017.08.04 10:59

      작년 자료이지만 Acidpop님 항상 좋은 자료 감사합니다.

      수화님 혹시 예외처리는 성공하셨는지요?

      지금은 이상하게 db에서 nick_name 항목을 가져오지도 못하는군요.

  6. 2017.08.06 15:56

    비밀댓글입니다

  7. rodney 2017.08.12 11:38

    그대로 따라 했는데.. 안되네요. 혹시 다른 설정도 필요한가요?

    • BlogIcon Acidpop acidpop 2017.08.14 10:57 신고

      제가 요즘은 제로보드를 사용하고 있지 않아서 작동 여부는 정확히 확인하기 어렵구요.

      안된다고 하시면 어떻게 안되는지를 자세하게 설명 해주셔야 도움을 드릴수 있습니다.

  8. rodney 2017.08.17 11:34

    $query_array = array(
    'chat_id' => $chat_id,
    'text' => $newtgmsg,
    );
    $request_url = "https://api.telegram.org/bot{$token}/sendMessage?" . http_build_query($query_array);

    // curl로 접속
    $curl_opt = array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_URL => $request_url,
    );
    $curl = curl_init();
    curl_setopt_array($curl, $curl_opt);

    // 응답결과는 알아서 처리.
    var_dump(curl_exec($curl));

    죄송해요~ 자세하게 알려드려야 했는데..

    위부분을 추가해서 해결 했습니다^^

  9. lee 2017.09.16 13:24

    아이폰 유저는 받을 수 없나요?

  10. BlogIcon 2017.09.22 13:44

    봇을 채널로 보내는건 어떻게 할 수 있나요 ? ㅠ

    • BlogIcon Acidpop acidpop 2017.09.25 12:07 신고

      안녕하세요

      생성하신 봇을 채널에 초대 하신 다음 사용하시면 됩니다.

      자세한 사항은 포스팅 한 글을 참고 바랍니다.

      http://blog.acidpop.kr/274

  11. 2017.11.28 13:26

    비밀댓글입니다

  12. 2017.11.28 13:27

    비밀댓글입니다

  13. 휴리파파 2017.11.29 01:43

    안녕하세요. 하루 전 비밀글로 문의 남겼던 휴리파파입니다.
    https://www.xetown.com/rxe_point/808690 에 자료를 올렸습니다.(무료 다운로드)
    이름을 Board Activity Notification 이라 하였고,
    게시글 등록 수정 삭제 / 댓글 등록 수정 삭제에 대한 알림을 구분하여 푸쉬하도록 하였습니다.
    감사합니다.

+ Recent posts