장치 명령 처리와 메시지 연동 · 학습
실행 조건
기본 활동은 Python만 사용합니다. 실제 메신저·MQTT 연결은 처리 규칙을 확인한 뒤 선택합니다.
이번에 배울 내용
메신저·웹·장치 버스가 달라도 같은 명령 처리 규칙을 재사용할 수 있도록 입력·상태·응답을 나눕니다.
전체 흐름
외부 메시지 → 공통 명령 → 검증·중복 제거 → 상태·응답
메시지와 장치 동작 분리
같은 on 명령은 웹·메신저·장치 버스로 들어올 수 있습니다. 전송 형식을 공통 요청 {request_id,device,command}로 바꾼 뒤 한 처리 함수에 전달합니다.
중복과 잘못된 명령
on처럼 목표 상태를 지정하는 명령과 toggle처럼 현재 상태를 바꾸는 명령은 재전송의 영향이 다릅니다. 요청 ID·장치·명령을 검증한 뒤 중복을 처리하고, 응답과 실제 상태를 함께 남깁니다.
풀이 예제
입력은 /start, /led on, /led off, /led invalid, /unknown입니다. 초기 LED 상태는 off입니다.
def handle(text,state):
if text=='/start':return state,'Commands: /led on, /led off'
if text=='/led on':return True,'LED on'
if text=='/led off':return False,'LED off'
return state,'Usage: /led on | /led off'
state=False
for text in ['/start','/led on','/led off','/led invalid','/unknown']:
next_state,reply=handle(text,state);print(text,state,next_state,reply);state=next_state
/start False False Commands: /led on, /led off /led on False True LED on /led off True False LED off /led invalid False False Usage: /led on | /led off /unknown False False Usage: /led on | /led off