实现的功能: 当我离家还有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:打开书房灯