import requests
import json
import time
from boltiot import Bolt
import conf
mybolt = Bolt(conf.bolt_api_key, conf.device_id)
def get_sensor_value_from_pin(pin):
try:
response = mybolt.digitalRead(pin)
data = json.loads(response)
if data["success"] != 1:
print("Request not successful")
print("Response:", data)
return -999
sensor_value = int(data["value"])
return sensor_value
except Exception as e:
print("Error getting sensor value:", e)
return -999
def send_telegram_message(message):
"""텔레그램으로 메시지 전송"""
url = "https://api.telegram.org/" + conf.telegram_bot_id + "/sendMessage"
data = {"chat_id": conf.telegram_chat_id, "text": message}
try:
response = requests.request("GET", url, params=data)
print("Telegram response:", response.text)
telegram_data = json.loads(response.text)
return telegram_data["ok"]
except Exception as e:
print("Telegram alert error:", e)
return False
while True:
# 1단계: 센서 값 읽기
sensor_value = get_sensor_value_from_pin("4")
print("Current sensor value:", sensor_value)
# 2단계: 요청 실패 시 건너뛰기
if sensor_value == -999:
print("Request unsuccessful. Skipping.")
time.sleep(10)
continue
# 3단계: 임계값 초과 시 알림
if sensor_value >= conf.threshold:
print("Current temperature value:")
message = "The moisture value is just greater than threshold"
telegram_status = send_telegram_message(message)
print("Telegram status:", telegram_status)
# 4단계: 대기
time.sleep(100)
conf.py
"""텔레그램 알림 설정"""
bolt_api_key = "XXXX" # 볼트 클라우드 API 키
device_id = "XXXX" # 디바이스 ID (BOLTXXXX 형태)
telegram_chat_id = "@XXXX" # 텔레그램 채널 ID (@ 뒤에 붙여넣기)
telegram_bot_id = "botXXXX" # 텔레그램 봇 ID (bot 뒤에 붙여넣기)
threshold = 0 # 알림 발송 임계값
본인의 봇과 API 값 입력
텔레그램을 이용한 알림 메시징
텔레그램이란?
텔레그램은 왓츠앱과 유사한 메시징 앱입니다. 메시지와 파일 송수신 가능. 무료 사용. 안드로이드/iOS/윈도우 폰, PC, 맥에서 접속 가능.
텔레그램 용어
텔레그램 채널이란?
채널은 텔레그램에서 왓츠앱의 그룹과 같습니다. 대규모 청중에게 메시지 브로드캐스트하는 도구. 무제한 구독자, 영구 URL 공개 가능, 각 게시물별 조회 수 확인 가능.
봇(Bot)이란?
봇은 텔레그램 내부에서 실행되는 서드파티 애플리케이션. 사용자는 메시지, 명령, 요청을 봇에 보낼 수 있습니다. 우리는 봇을 이용해 채널에 알림을 보냅니다.
이 프로젝트에서 배우는 것
센서 값이 설정한 임계값을 초과하면 텔레그램으로 휴대폰에 알림을 보내는 방법을 배웁니다.
필요한 것
인터넷 연결된 안드로이드/iOS/윈도우 폰
텔레그램 계정 (휴대폰 번호 필요)
푸티(PuTTY)나 가상 머신으로 우분투 OS 접속
텔레그램 설정
텔레그램 가입/로그인 단계
플레이스토어/앱스토어에서 텔레그램 검색 후 다운로드 설치
휴대폰 번호로 새 계정 가입 또는 로그인
텔레그램이 전화 또는 SMS로 번호 인증
계정 인증 및 권한 승인
로그인 완료 (아래 화면과 유사)
채널 만들기
텔레그램 채널이란?
채널은 텔레그램에서 왓츠앱의 그룹과 같습니다. 대규모 청중에게 메시지 브로드캐스트하는 도구. 무제한 구독자, 영구 URL 공개 가능, 각 게시물별 조회 수 확인 가능.
채널 생성 단계
텔레그램 앱 홈 화면에서 왼쪽에서 오른쪽으로 스와이프해 메뉴 열기
"새 채널" 클릭
채널 이름과 설명 입력. 사진 추가는 선택사항
다음 화면에서 채널을 공개로 설정
같은 화면에서 채널 영구 링크 입력 (소문자, 숫자 0-9만 가능)
채널 링크 이름은 전역 고유하므로 사용 가능한 이름만 생성 가능. 이메일 주소처럼 하나만 존재 가능.
채널 링크 이름을 temperature_alert_ + 이메일 ID로 설정 권장. 예: developer@boltiot.com이면 temperature_alert_developer_boltiot_com (@와 . 대신 _ 사용). 그냥 제안일 뿐 원하는 유효한 이름 사용 가능.
이 채널 영구 링크 이름 기록해 두세요. 나중에 이 채널에 메시지 보낼 때 필요합니다. 예: 스크린샷의 채널 링크 이름은 "temperature_alert".
축하합니다! 새 채널 생성 완료. 앱 홈 화면에서도 볼 수 있습니다.
상단 채널 이름 클릭하면 상세 정보 확인 가능
이제 앞서 만든 채널에 봇을 추가해 알림을 게시하게 합니다.
봇 만들기
봇이란?
봇은 텔레그램 내부에서 실행되는 서드파티 애플리케이션. 사용자는 메시지, 명령, 요청을 봇에 보낼 수 있습니다. 우리는 봇을 이용해 채널에 알림을 보냅니다.
새 봇 생성
텔레그램은 "봇파더(BotFather)"라는 봇으로 새 봇 생성을 돕습니다. 다른 봇을 생성하고 관리하는 단일 봇입니다.
앱 홈 화면에서 오른쪽 위 검색 아이콘 클릭 후 "botfather" 입력
검색 결과에서 파란 체크 표시된 올바른 "BotFather" 클릭. 봇파더와의 채팅 창으로 이동
채팅에 몇 항목 있고 시작 명령어 목록 표시
새 봇 생성 위해 "/newbot" 입력
봇 이름과 봇 사용자명 등 세부 정보 입력 요청
봇 생성 성공 시 아래와 유사한 화면 표시되며 봇 토큰 포함. 이 토큰은 봇 제어 및 메시지 발송에 사용되니 안전하게 보관하세요. 누구나 봇에 접근 가능해집니다.
telegram_bot_id는 파이썬 코드에서 메시지 발송용. 파이썬 코드는 나중에 학습.
봇 ID 저장 시 0과 O, I와 1 등 비슷해 보이는 문자 주의.
축하합니다, 새 봇 생성 완료. 이제 앞서 만든 채널에 추가해 알림을 보낼 수 있게 합니다.
봇을 채널에 추가
앱 홈 화면에서 앞서 만든 채널 열기
상단 채널 이름 클릭해 채널 정보 열기
"관리자" 버튼 클릭해 새로 만든 봇을 채널에 추가
봇 사용자명으로 검색해 올바른 봇 클릭해 추가. 이전 단계에서 관리자 버튼을 눌렀는지 확인 - 그래야 우리 봇이 채널에 게시 가능.
봇 권한 확인 요청. 오른쪽 위 체크 표시 눌러 계속. "메시지 게시" 권한이 있는지 확인.
이제 채널 관리자 목록에 새로 만든 봇 표시
이제 봇을 통해 채널에 메시지 보내는 코드 작성
이제 트윌리오(Twilio)와 메일건(Mailgun) 네트워크 설정
LM35 온도 센서 값을 구글 어시스턴트로 언제든 SMS와 이메일로 휴대폰에서 수신.
IoT 프로젝트 센서 값을 언제든 확인해야 할 때 뭐하시나요? 클라우드에 로그인해 확인하죠. 간단하죠? 하지만 매시간 또는 몇 분마다, 하루에 여러 번 확인해야 한다면 좀(아주) 번거롭죠? 이제 "센서 값 보내줘"라고 구글 어시스턴트에게 말하면 SMS와 이메일로 센서 값을 받는 세상을 상상해 보세요. 더 이상 상상이 아닙니다. 여러분이 직접 몇 단계로 구현할 수 있습니다. 계속 읽어보세요.
이 프로젝트에서는 LM35 센서의 온도 값을 구글 어시스턴트 명령으로 SMS와 이메일로 받습니다.
1단계: 하드웨어 설정
LM35 센서를 이름이 보이게 손에 쥐세요. 왼쪽부터 세 핀은 VCC, 출력, GND. 세 핀을 암-수 와이어에 연결. 왼쪽부터 세 와이어를 볼트 와이파이 모듈의 5V, A0, GND 핀에 연결. 와이파이 모듈을 5V 전원에 연결. 활성 인터넷 연결 확인.
2단계: 인테그로맷에서 IFTTT 모듈 만들기
인테그로맷 계정 로그인. 가입 안 했다면 여기서 계정 생성. 로그인 후 오른쪽 위 "새 시나리오 만들기" 클릭. IFTTT, HTTP, 메일건, 트윌리오 선택 후 "계속" 클릭. 흰 원 클릭 후 목록에서 IFTTT 선택, 메뉴에서 "데이터 수신" 선택. 이 모듈은 나중에 다룰 IFTTT 애플릿과 연결 필수. "추가" 클릭 후 웹훅 추가, 적절한 이름 주고 "저장". 이제 URL 또는 링크 생성. 저장해 두세요.
3단계: 인테그로맷에서 HTTP 모듈 만들기
모듈에 붙은 "+" 기호 클릭해 새 모듈 추가. "HTTP" 선택 후 "요청하기" 선택. 볼트 IoT 클라우드에서 센서 값 수신용. URL에 https://cloud.boltiot.com/remote/your-bolt-iot-api-key/analogRead?pin=A0&deviceName=BOLTXXXXXXX 붙여넣기. "your-bolt-iot-api-key"와 "BOLTXXXXXXX"를 볼트 IoT 클라우드에서 찾을 수 있는 본인 자격증명으로 교체. 메서드는 "GET"로 두고 "확인".
위 링크로 볼트 IoT 클라우드에서 센서 값 가져옵니다. 출력은 {"value": "XXX", "success": "1"} 형태. XXX가 센서 값.
4단계: 인테그로맷에서 메일건 모듈 만들기
다시 "+" 클릭, "Flow Control" 검색 후 선택, "라우터" 선택. 흰 원 두 개 생성. 첫 번째 흰 원 클릭, "메일건" 선택 후 "이메일 보내기". 여기서는 메일건으로 온도 이메일 수신. 이미 메일건 계정이 있으면 API 키와 도메인 이름을 메일건 계정에서 쉽게 찾기 가능. 계정 없으면 아래 대체 단계 참조. 요청된 세부 정보 입력. 수신자 메일(본인 이메일) 입력. "보낸 사람" 필드에 test@yourdomainname 입력. "내용" 섹션에서 센서 값이 아닌 온도 값 작성 필요. 센서 값을 온도 값으로 변환하려면 10.24로 나눔. XXX 형태 센서 값 얻으려면 다른 문자 제거 위해 "substring" 함수 사용. 대화상자 옆 "A" 기호 클릭 후 "substring" 선택.
첫 번째 괄호 안 공간에 별표 아래 "데이터" 옵션 클릭 후 "11"과 "14"를 두 번째, 세 번째 공간에 입력. 엄밀히 말해 센서 값 가져오는 올바른 방법은 아니지만 핵으로 사용. 올바른 방법 아시는 분은 댓글로 알려주세요.
나중에 "XXX"만 캡처하기 위함. 이 숫자를 10.24로 나눔.
시나리오 저장 전 "스케줄링" 켜기 (화면 하단)하고 "시나리오 실행"을 "즉시"로 선택. 최종 시나리오는 이렇습니다.
6단계: IFTTT에서 새 애플릿 만들기
IFTTT 계정 로그인. 가입 안 했다면 여기서 계정 생성. 로그인 후 "내 애플릿" 섹션에서 "새 애플릿" 클릭. "+this" 클릭 후 검색창에서 "구글 어시스턴트" 검색 선택. 다음 화면에서 "간단한 구문 말하기" 선택. 원하는 동작 트리거할 명령어 입력.
"트리거" 클릭 후 "+that". 검색창에서 "웹훅" 검색 선택, 다음 화면에서 "웹 요청 만들기" 선택. URL 필드에 2단계 인테그로맷 IFTTT 모듈 생성 후 얻은 링크 붙여넣기. 이 단계는 구글 어시스턴트에게 명령 말할 때 인테그로맷 시나리오 실행 위해 필수. 이후 메서드에서 "POST" 선택, "액션 만들기" 클릭. 애플릿 적절한 이름 주고 "마침" 선택.
자, 이제 휴대폰 꺼내 "오케이 구글, 온도 센서 값 보내줘"라고 말해보세요. 마법이 일어납니다.