TASKER + MQTT 无需科学上网实现安卓平台的可互动通知及定位上报

自家NUC虚拟机搭了一套HA+NR做家庭自动化。自己用的话因为家里环境以及自己手机上都是7/24科学上网的,其实直接用HA自带的通知就很好用了。

奈何家里其他人的手机想都保持7/24科学上网太麻烦。在HA的Integration里找了很多通知相关的,要么无法实现互动,要么被墙了。企业微信用来做通知还行,互动也很麻烦,得手动/语音去输入指令,API自带的任务卡片每次ID都得改变,很蛋疼。找来找去,终于找到了TASKER+MQTT这个解决方案,这段时间用下来,非常稳定,还顺便实现了手机定位上报,替代了GPSlogger得功能,且得益于其强大的自定义功能,更加省电。

前提:

已实现内网穿透

用到的软件和APP:

1. HA和NR,这个就不说了,HA或者iob都一样。
2. MQTT broker, HA的Add-on store就有,用来收发MQTT数据。
3. TASKER应用,该解决方案的核心工具,功能及其强大。可以Play商店直接买,很便宜,破解版也很容易找到。
4. MQTT应用,MQTT Client, Play商店可下载,自带TASKER插件。

配置:

1. 首先找到你MQTT broker的用户名密码存下来,HA的话可以在Mosquitto broker这个Add-on的配置页面找到。
2. NR里,左侧network里拖一个mqtt out节点出来,配置Server为你MQTT broker的IP地址加端口,用HA的就是HA的IP加MQTT默认端口(192.168.X.X:1883), Topic自己填一个,比如NR-MQTT。
3. 手机上,打开MQTT Client,点击下方加号新建一个链接。host填写内网穿透的域名,端口填上文MQTT broker的端口,用户名密码填第一步存下来的用户名密码。
4. 现在,退回MQTT Client首页,点击你刚建好的链接,在下方填入你在第二步填写的Topic, 比如NR-MQTT,然后点击最下方SUBSCRIBE。上方应该会显示你刚刚新添加的这个Topic。手机保持该界面不要动,回到NR。
5. 回到NR,在刚才新建的mqtt out节点前新增一个inject节点和一个change节点,把change节点配置为set ”msg.payload" to “你要发送的信息”。 然后连接成flow [inject] -- [change] -- [mqtt out]。然后右上角Deploy。
6. 点一下inject节点前的小按钮,你手机上的MQTT Client应该就可以收到刚刚从NR发来的“你要发送的信息”内容了。

至此,NR和手机的MQTT通讯建立完毕。下一步是利用TASKER,将收到的信息转化为安卓通知,并添加互动按钮。

TASKER部分:

TASKER功能太强大,这里只写和主题相关的内容。
首先理解一下TASKER的几个标签:
配置文件 - 可以理解成自动化里的触发条件。
任务 - 就是你需要执行的一系列指令。
场景 - 如果有一些弹出窗口,可以在这里自定义样式按钮等内容。
变量 - TASKER的核心内容,利用变量可以在不同的程序之间传递数据和信息。

下面就比较简单了:

  1. 新建配置文件(配置文件标签页右下角加号),依次点击 事件 - 插件 - MQTT Client - Message Arrived。
  2. 点击配置右侧的图标,进入配置页面,页面上部有两个空行,灰色显示varmessage和varmqtttopic, 这两处用来自定义收到的MQTT消息的变量名,比如分别填入 mqttmessage和mqtttopic (注意大小写)。右上角存盘图标保存退出。
  3. 切换到任务标签页,新建一个任务,变量 - 变量定义,将名称%TOPIC 发往 %mqtttopic 将名称%TASK 发往 %mqttmessage。 注意这里有一个容易因为翻译而误解的地方,将%TOPIC发往%mqtttopic实际上是将后者的内容复制到前者,而不是反过来。
  4. 回到配置文件标签页,在刚才新建的那个配置文件右侧点击添加任务,选择刚刚新建的任务。

以上配置,简单理解就是让TASKER执行:收到MQTT传来的信息,将topic和message分别存入两个变量。 这样一个过程。

接下来就可以自由发挥了,比如新建一个配置文件,状态 - 变量 - 变量值,用%TOPIC值等于某个值为触发条件,执行任务:警报 - 通知,将%TASK的内容作为手机通知显示出来,还可以添加TTS按钮,点一下将通知播报出来。

最后简单说一下定位上报,
反过来,利用TASKER,以"每隔5分钟" 且 “位置变动了” 或者 “没有连接wifi” 为条件,执行任务,位置 - Get Location V2, 并通过 插件 - MQTT Client - Publish MQTT Message, 将%gl_latitue, %gl_longtitue, %gl_coordinates_accuracy这三个变量发回NR。
到NR里怎么用就看各人了。

内容大概就这么多,有问题可以留言或者私信。
站点上传图片好像有些问题,等正常了我会抽空接一些图发上来方便理解。

大神能不能更加详细一点,帮助一下小白。

mark 一下 慢慢看 顶你

今天突发奇想,试了下利用一个旧手机做中转,通过短信分发给所有其他手机,就可以不需要内网穿透了。如果不需要GPS上报的话,客户机都不需要装Tasker了。
一部旧手机放家里,MQTT直接填局域网IP地址,任务里选择 电话 - 发送短信,家里有多少人就发多少短信就行了。唯一的缺点是发短信要钱 :joy:

标记 下 谢谢分享