[table=98%]
[tr][td]
这篇帖子教大家如何实现手机上显示设备的在线状态。(大神请自动忽略)
目标设备是BPI-R1(传说中的 Bananapi-R1一款很吊的高性能路由器),监控设备是androd手机。
工作原理
这里网络通讯协议使用的是MQTT通讯协议。手机APP向MQTT服务器注册设备上线通知的主题,设备启动后向MQTT服务器发送上线通知主题手机端就能得到通知,依托MQTT协议当设备关机后也会有相应的通知发出。同时设备也会注册一条被动检查主题,这样就可以在设备先启动而手机后启动的时候也能去获知在线状态。
硬件准备
一台装有 ubuntu 或 debian 系统的 BPI-R1 (其实其他系统也可以,不过我不会用,所以,,,)
一台装有 adt 的 pc(如果你不打算修改android客户端可以不用安装)
程序的开发
为了方便起见在这里就不帖代码了。所有代码都已经托管在git服务器上。
http://git.oschina.net/u2nn/for_52pi/tree/master/bpi_r1_mqtt_online_demo
这里就简单说说两端的代码流程
1)客户端程序
建立与MQTT服务器的连接,并设置遗嘱,遗嘱是MQTT提供的一种功能,当设备掉线后会自动把遗嘱发出,以便于其他设备做一些善后处理的事。这里设置的遗嘱就是一条下线通知的主题。
当与服务器连接成功后,客户端会订阅 check_status 主题,用来接受其他设备的主动在线检查。
同时还发布一条 online_status 在线通知主题,让其他设备知晓本设备已经上线。此外客户端还会每隔一定时间报告自己的在线状态(其实没有必要,不过客户端总要做点啥吧,不然多无聊。可以定期汇报自己的一些情况什么的,比如室内温度,气压等,最近比较懒就没做上)。
2)android客户端程序
在启动程序时会要求进行设备绑定,绑定后就可以针对该设备进行消息的收发。和客户端一样先与MQTT服务器建立连接,连接成功后订阅 online_status 主题,做等设备上下线。并会主动发送一条 check_status 主题,看看设备是不是之前就已经在线了。
部署监控端
这很简单啦,直接安装里面的apk包,启动的时候输入和 online.py 文件中 kDeviceID 变量一样的值就可以了。
部署被控程序
1)安装 git
sudo apt-get install git
2)从git服务器获取源代码
cd /home/
git clone https://git.oschina.net/u2nn/for_52pi.git
所有的相关代码都在 for_52pi/bpi_r1_mqtt_online_demo 中
3)修改设备ID
编辑 online.py 修改最上面的 kDeviceID 为一个你觉得不可能有其他人用的编号,长度大概在 5 < n < 15 之间的英文活数字,千万别输入一些奇怪的符号或者中文。
3)配置运行权限
给程序加上可执行的权限
cd for_52pi/bpi_r1_mqtt_online_demo/
chmod +x online.py
4)配置开机启动
#cd /etc/init.d/
ln -s /home/for_52pi/bpi_r1_mqtt_online_demo/online.py
update-rc.d online.py defaults
5)重启设备准备上线
sudo shutdown -r -h now
结束
到这里设备上下线功能就完成了,很多细节部分还没有处理还需要完善。有了这个作为基础可以再扩展其他的功能,,,
效果图
[/td][/tr]
[/table]
本帖转自树莓派创客社区