IoT

아두이노에서 텔레그램 알림 문자 보내기

콩메모 2024. 1. 3. 22:20

아두이노에서 특정 상황에 폰으로 알림을 받고싶은 경우가 있는데, 이걸 처리하려면 직접 PUSH 앱을 만들던지, 범용적인 앱을 이용하던지, 해야 한다.

기존에는 "푸시불릿"이 대안으로 많이 쓰였지만, 푸시불릿이 일부 유료화가 되고 사용법도 불편해 다른 방법을 모색중 카톡이나 텔레그램을 주목하게 되었다.

카톡에서도 회사 홍보용 목적으로 불특정 다수에 알림을 보낼수 있는 기능이 있지만, 건당 비용이 발생하는 유료 상품이고 순수 알림목적으로 사용하기에는 부담이 있다.

다행히 텔레그램에는 봇을 자유롭게 생성할수가 있고, 이 봇을 이용해서 특정 회원에게 알림문자를 보낼수 있는 기능이 있다.

모든 것이 무료이다.

더군다나 라이브러리를 별도로 찾아서 설치할 필요없이, 라이브러리매니저를 이용해서 간단히 설치할 수 있다.


절차는 다음과 같다.

* 봇을 만든 후 봇의 키를 기억한다.

* 알림을 받을 텔레그램아이디의 chat_id를 알아낸다.

* 아두이노에서 봇의 키를 이용해서 chat_id로 알림을 보낸다.

아두이노에서 텔레그램을 위한 라이브러리를 지원해준다.

주의할 점은 그 라이브러리가 또다른 라이브러리를 사용하는데, 그 라이브러리 또한 아두이노에서 제공해주지만, 최신버전이 아닌 그 하위버전의 라이브러리와 호환이 된다.


텔레그램에서 봇 생성

텔레그램의 우측 상단에 있는 검색버튼을 클릭한다.

“BotFather”를 검색하면 채팅창이 열리는데, 기본 사용방법이 나오게 된다.

봇을 만드는게 목적이니 “/newbot”을 입력한다.

그럼 이름을 입력하라는 창이 나오는데, 목적에 맞게 이름을 정해서 입력한다.

예로 “MySampleTalk”를 입력한다.

이번에는 끝부분이 bot으로 끝나도록 이름을 다시 입력하라고 나오게 된다.

“MySampleTalk_bot”을 입력한다. (자기가 입력한 이름 뒤에 _bot 을 입력한다. )

생성이 완료되면 봇의 키를 표시해주는 긴 안내문이 출력된다.

121*******648:AA80SWJ********************2BsB0xcw

위와 같은 형식의 키가 보일 것이다.

이것이 바로 생성된 봇의 유일키가 된다.

이 키는 남에게 오픈되면 안된다.

남이 알게 되면, 이걸로 스팸봇을 만들수 있기 때문이다.

자기의 아두이노에 심어놓어야 한다.


텔레그램의 chat_id 찾기

봇이 텔레그램 문자를 보낼 때 이용하는 식별자는 사용자의 아이디가 아니고 chat_id를 사용한다.

이 chat_id는 바로 알수는 없고 봇과 통신할 때의 Response를 분석해야 알수가 있다.

다행히, 텔레그램에는 chat_id를 알려주는 봇이 많이 존재한다.

텔레그램에서 “chat id echo”를 검색하면 “Chat ID Echo”란 봇을 찾을 수 있다.

이 봇을 선택하면 바로 “/start” 명령이 표시되는데 그걸 터치해주면, 나의 Chat ID를 알수 있다.


아두이노 라이브러리 설치 ( WeMos 기준 )

두가지 라이브러리를 설치해야 한다.

UniversalTelegramBot

ArduinoJson

아두이노 라이브러리 매니저에서 “Telegram”을 검색한다.

몇가지 항목이 검색되는데, 그중 “UniversalTelegramBot” 라이브러리를 설치한다.

이 라이브러리는 내부적으로 “ArduinoJson” 라이브러리를 사용하는데, 이 라이브러리도 설치해야 한다.

라이브러리 매니저에서 “ArduinoJson”을 검색한다.

이때 최신버전으로 설치하게 되면 오류가 나게 된다.

UniversalTelegramBot은 내부적으로 ArduinoJson의 5버전을 사용하고 있다.

그래서, 5버전중 최신버전(5.13.4)으로 설치해준다.


스케치

// 인클루드

#include <UniversalTelegramBot.h>

​

// 와이파이 초기화

WiFi.begin(“ssid”, “passwd”);

​

// 텔레그램 객체생성

WiFiClientSecure client;

UniversalTelegramBot bot(“봇아이디”, client);

client.setInsecure(); // 이 옵션을 해줘야 동작한다.

​

// 메시지전송

bot.sendMessage(“수신할chat_id”, “메시지내용”, “”);

위 방법을 이용해서 아두이노에서 알림을 받을 상황에 메시지를 보내면 폰의 텔레그램으로 알림이 온다.