2016년 3월 29일 화요일

초딩 아들 알림장 텔레그램 알림봇 만들기

Smart Mirror 를 만들고 초딩 아들이 왔을 때 거울에 알림장을 보여 주고 싶어서 간단하게 script 로 긁어 오게 했었는데, 휴대폰에서도 자동으로 알림을 받고 싶어서 telegram bot 을 만들었다.

참조 : 텔레그램 로봇, 공식 API로 만들기 (파이썬, 구글 앱 엔진)

telegram bot 은 위 참조를 보고 쉽게 template 을 만들어 두고 smart mirror 가 돌고 있는 slate 에 5분 마다 알림장 page 를 체크 해서 update 해주는 script 를 돌렸다.

동작 방식은 이렇다.

1. telegram 에 bot 을 추가한다.
2. bot 에서 /notice 를 선택하면 홈페이지에서 알림장을 확인한다.
3. update 되었으면 항목을 알려 준다.

학교 홈페이지에서 알림장을 긁어 오는 것은 python urllib 으로 구현했다.

현재는 수동으로 /notice 를 확인해야 하는데, 자동으로 update 되면 알려주는 방식으로 변경해야 겠다.

[추가 2016/03/30]
자동으로 보내주는 것을 시도하다 보니 굳이 bot 을 쓸 필요 없이 telegram-cli 로 전송하면 간단해 져서 bot 도 지워 버리고 command line 으로 대체 했다.
#!/bin/bash
to=$1
msg=$2
(sleep 1; echo "msg $to $msg"; echo "safe_quit") | telegram-cli -W
위 script 를 /usr/bin/ 에 적당한 이름으로 저장 해 두고 사용하면 된다.
나는 tg-send.sh 이라고 이름을 지었고 사용 예제는 대충 이렇다.

$ tg-send.sh somebody "hello"

여기서 somebody 는 텔레그램 주소록에 있는 이름을 그대로 적으면 되고, 이름의 띄어쓰기가 있을 때에는 '_' 를 꼭 붙여 줘야 한다. 예를 들어 '길동 홍' 이라는 사람이 있다면 '길동_홍' 이라고 써 줘야 한다.

telegram_cli 의 경우 ubuntu 나 raspberry pi 에서도 잘 동작 하기 때문에 활용도가 높다.

참고로 raspberry pi 에서 빌드 할 경우에는 아래 patch 를 적용해야 한다.
diff --git a/mtproto-utils.c b/mtproto-utils.c
index 0948bc8..6eb8612 100644
--- a/mtproto-utils.c
+++ b/mtproto-utils.c
@@ -98,7 +98,7 @@ static unsigned long long BN2ull (TGLC_bn *b) {
   if (sizeof (unsigned long) == 8) {
     return TGLC_bn_get_word (b);
   } else if (sizeof (unsigned long long) == 8) {
-    assert (0); // As long as nobody ever uses this code, assume it is broken.
+    //assert (0); // As long as nobody ever uses this code, assume it is broken.
     unsigned long long tmp;
     /* Here be dragons, but it should be okay due to be64toh */
     TGLC_bn_bn2bin (b, (unsigned char *) &tmp)
이유는 raspberry pi 홈페이지에서 찾아 볼 수 있다.

http://www.raspberry-projects.com/pi/programming-in-c/memory/variables
The Raspberry Pi has a 32-bit microprocessor.
NameC++BytesRange
bool1true or false
signed charint8_t1-128 to 127
unsigned charuint8_t10 to 255
short intint16_t2-32768 to 32767
unsigned short intuint16_t20 to 65535
intint32_t4-2147483648 to 2147483647
unsigned intuint32_t40 to 4294967295
long intint32_t4-2147483648 to 2147483647
unsigned long intuint32_t40 to 4294967295
long longint64_t8−9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
unsigned long longuint64_t80 to 18,446,744,073,709,551,615
float4+/- 3.4e +/- 38 (~7 digits)
double8+/- 1.7e +/- 308 (~15 digits)
long double8+/- 1.7e +/- 308 (~15 digits)
wchar_t2 or 41 wide character

댓글 없음: