Mosquitto client(No-SSL 버전) 설치
다음의 두 명령어를 Kankun wifi plug에 SSH 접속 후 실행하면 MQTT client 중 하나인 mosquitto_pub과 mosquito_sub가 설치된다.
opkg update
opkg install mosquitto-client-nossl
메시지 송수신 테스트
Kankun –> MQTT
- MQTT 서버쪽에서
mosquitto_sub -h localhost -t /testsw/1/state -u user_1 -P password_1
실행해서 메시지 수신 대기 - Kankun 기기에서
mosquitto_pub -h mqtt_server_ip -t /testsw/1/state -m 1 -u user_1 -P password_1
실행해서 메시지 송신해서 MQTT서버측에 잘 송신되는지 확인
MQTT –> Kankun
- Kankun 기기에서
mosquitto_sub -h mqtt_server_ip -t /testsw/1/state -u user_1 -P password_1
실행해서 메시지 수신 대기 - MQTT 서버쪽에서
mosquitto_pub -h localhost -t /testsw/1/state -m 1 -u user_1 -P password_1
실행해서 메시지 송신해서 Kankun 스위치쪽으로 잘 송신되는지 확인
2번의 테스트를 통해 망이나 방화벽 상관없이 외부 MQTT 서버를 통해 메시지가 문제없이 송수신 됨을 확인했다. 즉, 스위치가 어떤 환경에 있던지 상관없이 외부망에 있는 브로커를 통해 어디서든 통신이 가능하다는 점을 확인한 것이다.
Kankun 스위치에서 현재 상태 publish
mkdir /root/scripts
vi /root/scripts/mqtt_publish.sh
해서 다음을 입력# !/bin/sh while true do CURR_STATUS="\`cat /sys/class/leds/tp-link:blue:relay/brightness\`" mosquitto_pub -h mptt_server_ip -t /testsw/1/state -u user_1 -P password_1 -m $CURR_STATUS sleep 5 done
chmod 755 /root/scripts/mqtt_publish.sh
자동 시작되도록 vi /etc/profile
해서 /root/scripts/mqtt_publish.sh &
을 추가한다.
이제 reboot
실행해서 재부팅하고 접속 후에 테스트해보자. * echo "1" > /sys/class/leds/tp-link:blue:relay/brightness
해서 안드로이드앱의 스위치 상태가 ON으로 변경되는지 확인
- echo 0; > /sys/class/leds/tp-link:blue:relay/brightness` 해서 안드로이드앱의 스위치 상태가 OFF으로 변경되는지 확인
MQTT 서버에서 Kankun 스위치 제어
MQTT를 통해 상태를 알 수 있게 되었으니 이제는 제어해보자.
Kankun 기기에서 mkdir /root/work
한 후 vi /root/scripts/mqtt_subscribe.sh
해서 다음을 입력한다.
#!/bin/sh
mosquitto_sub -h mqtt_server_ip-t /testsw/1/command -u user_1-P password_1 >> /root/work/mqtt.dat 2>/dev/null
chmod 755 /root/scripts/mqtt_subscribe.sh
한 다음 vi /etc/profile
해서 /root/scripts/mqtt_subscribe.sh &
을 추가해준다.
제어를 위해서 vi /root/scripts/mqtt_command.sh
해서 다음을 입력한다.
#!/bin/sh
while true
do
if [ -e /root/work/mqtt.dat ]; then
COMMAND="\`tail -1 /root/work/mqtt.dat\`"
fi
if [ "$COMMAND" = "1" ]; then
echo "1" > /sys/class/leds/tp-link:blue:relay/brightness
elif [ "$COMMAND" = "0" ]; then
echo "0" > /sys/class/leds/tp-link:blue:relay/brightness
fi
echo "" > /root/work/mqtt.dat
sleep 5
done
chmod 755 /root/scripts/mqtt_command.sh
후 vi /etc/profile
해서 /root/scripts/mqtt_command.sh &
을 추가해주면 준비가 끝이 난다. reboot
실행해서 재부팅 한 후 기기에 접속해서 테스트해보자.
OpenHAB앱
에서 스위치 ON해보니 대략 5초가 소요된 후 Kankun 기기의 /sys/class/leds/tp-link:blue:relay/brightness가 1로 변경되고 스위치가 ON되었다.
스위치를 추가할 때 변경해야 하는 부분들
- /etc/openhab2/item/switch.items에 스위치별 topic(제어용/모니터링용) 선정 후 스위치 추가
- /etc/openhab2/sitemap/Test.sitemap에 추가된 스위치 추가
- /etc/mosquitto/mosquitto.acl에 추가된 topic을 사용자별로 추가
이제
Kankun 스위치에 위의 스크립트를 복사해 넣고 topic을 변경 기나긴 설정과 테스트의 끝에 드디어 Kankun wifi plug를 OpenHAB2 + MQTT 기반으로 제어 및 모니터링에 성공했다. 전용앱으로 쉽게 갈 수 있는 길을 어렵게 간 듯 하지만, 나중에 구현할 Follow Me 기능(특정 스마트폰이 집안 인터넷에 무선랜 접속시 뭔가를 하거나, 무선랜에서 접속이 사라지면 뭔가를 하거나 하는 등의 기능)을 위해서는 OpenHAB과 MQTT가 꼭 필요했다. 언제 다시 할 수 있을지는 모르겠지만.