65 lines
2.0 KiB
Plaintext
65 lines
2.0 KiB
Plaintext
实现的功能:
|
||
|
||
当我离家还有500米的时候,提前打开家里的空调 和 客厅灯 等设备。
|
||
|
||
实现的思路:
|
||
|
||
数据格式:
|
||
|
||
1:客户端 Android App 上报GPS数据格式:
|
||
socketId: clent1
|
||
{
|
||
type: 1, // 表示客户端App1,2 表示客户端App2,3 表示服务器
|
||
data: {
|
||
Longitude: "",
|
||
Latitude: ""
|
||
}
|
||
}
|
||
|
||
2:服务器推送通知给 客户端 Flutter App的数据格式
|
||
socketId: clent2
|
||
{
|
||
type: 3,
|
||
data: "start"
|
||
}
|
||
|
||
|
||
家的经纬度:
|
||
|
||
117.326156
|
||
31.792494
|
||
|
||
需要三个角色:
|
||
|
||
1:clientApp_1(GPS经纬度上报端 Android开发)
|
||
就是我随身用的手机,需要用flutter开发一个app,安装在手机里,运行期间发现GPS位置改变,就通过
|
||
接口 提交最新的经纬度坐标给 服务器
|
||
|
||
问题:App放入后台后,为了防止被手机系统杀掉,需要加入手机白名单,在后台每隔两秒不断请求最新GPS位置上报服务器
|
||
状态:已实现
|
||
|
||
2:服务器(距离判断,消息转发 Node.js + Redis)
|
||
接受 clientApp_1 给的最新坐标,判断离家(家是有固定GPS经纬度的),所以可以计算距离。
|
||
如果小于等于 500 米范围,发送WebSocket 通知给 clientApp_2
|
||
|
||
问题:为家里的路由器,专门编译 Node.js 部署本后端。路由器需要开通公网IP或花生壳
|
||
替代方案:用客户服务器部署后端
|
||
状态:未开始
|
||
|
||
3:clientApp_2(执行端 Flutter)
|
||
固定在小爱音箱附近,常年通电后台运行的手机,主要用来接收 服务器的 通知
|
||
然后播放指定语音唤醒小爱,并播放 小爱 训练计划 中自定义的命令指令!
|
||
|
||
问题:如何系统级保活是个大问题?
|
||
思路:需要加入手机厂商的系统白名单
|
||
状态:未开始
|
||
|
||
自定义的命令指令:
|
||
|
||
命令:我快要到家了
|
||
动作:
|
||
1:打开空调,设置温度 28度,风速最大
|
||
2:打开客厅灯
|
||
3:打开书房灯
|
||
|