NiceLeeのBlog 用爱发电 bilibili~

一个弱鸡应用的诞生(1)-想法与思路

2019-09-08
nIceLee

阅读:


其实一直都有个想法,人在外面远程控制/监控家里的某些情况,比如开灯、开空调啥的。
最初的想法是DIY路由器,但是电信的路由不敢妄动,再买个路由套路由就没啥意思了。
转又想到搞个ARM板算了,最后灵光一闪,有现成的旧手机为啥不用呢。
配置也不见得低,价钱比较起来也要对得起用户是吧。
关键是裸机开飞行、一直熄屏,耗电量也不见得高到哪里去。
于是就有了这番折腾。

要做什么

  • 先来点简单的,我人在外面,可以获取家里Wifi连接的设备状态。
  • 功能实现的基础上,有以下需求:(尽量靠拢,当然不实现也无所谓)
    • 不要钱,这个没啥好说的
    • 稳定,例如白嫖的云主机就不要说了,指不定哪天就没了
    • 可拓展,方便兼容未来的其它需求,力求在现有基础上增加少些代码工作量。

思路

关于语言/工具

  • 大体实现使用Java,直接运行在dalvikvm环境
  • 可能涉及少许Linux Shell脚本

关于大体的框架架构

  • 想要实现这个想法,粗略涉及有许多主体:
    • Termux:可以看作能通过命令行/脚本实现诸如打电话等功能的主体
    • Tasker app: 由于定时调度引入,能调用Termux的某些脚本,可以看作是Termux定时/条件触发功能的一部分
    • 程序主体: 由Termux调用的子程序,因其重要性单独拉出
    • 旧手机的其它部分: 受Termux监控,可以看作是Termux打电话、收发短信等功能的一部分
    • 云服务器: 限于没有外网IP,用来传递信息的第三方
    • 远在家外的某设备
    • 近在家里的某设备
  • 这些主体之间的沟通交流,应当采用较常用、类型尽可能少的方式。一种常见的场景是:
    • 程序主体通过Runtime.exec调用Termux命令;
    • Termux通过curl http://127.0.0.1:port/path这类http请求的方式调用程序主体;
    • 家里/外的设备通过浏览器以http请求的方式获取或控制云/程序主体

      这样开发的工作量集中在旧手机的程序主体,云端少量,客户端访问控制使用浏览器即可
  • 这样看,要实现的似乎是一个Java Web应用。
    但由于是dalvikvm环境,直接老一套不太行。
    再加上以前实现的服务器Demo基础,可以考虑参考SpringBoot进行实现。
    目标是搭建完成以后,争取所有逻辑都在Controller里面解决,便于拓展。

关于功能实现

  • 获取Wifi连接设备状态
    • 以前写过Android app实现:局域网邻居发现app
    • 大致原理
      • 遍历邻居IP 发送UDP包,触发ARP协议
      • 查询设备的ARP的缓存表,获取在线的Mac地址
  • 关于云端的处理
    • 没有公网IP,外面要和家里相互联系,只能靠云服务器了,但这和不要钱稳定有一定矛盾
    • 想了一下,主要还是在公网要有一个地方,程序主体能够上报状态、获取信息。我觉得Github就不错(薅羊毛…)。
    • 因为有通过http请求方便快速地直接修改Github Repo的经验,感觉可行
      FileUploader4Github
    • 所以,建个Repo,约定好上传、获取状态用的url位置,ok。

内容
隐藏