『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 6666|回复: 11

[经验分享] 监控互联网连接状态的最为敏捷的方案,智能路由器的智能

[复制链接]

103

主题

2899

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11635
金钱
8671
HASS币
460

教程狂人突出贡献

发表于 2020-5-19 20:03:31 | 显示全部楼层 |阅读模式

                               
登录/注册后可看大图

现在的智能家居,对互联网连接的依赖是非常强的。我们知道,估计越来越多的小偷也会知道。
如果有那么几个了解智能家居的小偷,在撬门之前把你家的光纤给咔嚓了,会怎么样?
那么你家里没人的时候,又如何在互联网连接断开的第一时间就得到通知呢?
不要说这个通知没用,至少可以让你通知物业或邻居或近处的亲朋好友,帮你看看是咋回事。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
问题和需求就是这样,解决方案呢?
之前我发过帖子,说了我的智能家居系统的整体思路和折腾历程。前几天又发过一个帖子,专门讨论短信收发功能的实现以及与 hass 的集成。

这个帖子,就专门来说说如何在第一时间就发现互联网断开这一事件。
发现了这个事件,剩下的也就顺理成章、水到渠成、理所当然啦。
-------------------------------------------------------
智能路由器的智能两个字,不是白来的,这是无数科技工作者脑细胞的结晶。
这几年间,我尝试过几种监测互联网连接状态的方案,负责程度和灵敏度不一。最终选择的、也是最灵敏、最敏捷、最科学、最简单的方案——智能路由器的“智能”。

欲知详情,下回分解
之前在别的地方发过文章叙述这个方案,github,着急的朋友先看看吧:

这个是现在用的OpenWRT路由器的方案:
https://github.com/xcray/openwrt-WAN-Connection-Monitor-for-hass
这个是以前用的苹果路由器的方案:
https://github.com/xcray/Apple_Airport_hass_devicetracker_and_Internet_Connection_Sensor

对了,顺便说一句,作为处女座的理工男,我对基于路由器的 presence 检测 或 设备跟踪非常不认可,虽然很多人在用。
我发现过一个非常棒的方案,我发现之后就一直在用的,一位大神的作品,shell 里跑的, monitor,以后专门发帖子给大家介绍。心急的朋友自己找来看吧。
回复

使用道具 举报

103

主题

2899

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11635
金钱
8671
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-19 20:04:41 | 显示全部楼层
本帖最后由 XCray 于 2020-5-20 14:50 编辑

原理OpenWRT有一个很棒的特性,叫hotplug,没错,就是那个热插拔,老掉牙的技术?
具体来说呢,就是当网络接口发生变化时,自动执行/etc/hotplug.d/iface目录下的所有可执行文件。
这样,我们就可以在这个目录下存放一个我们制作的脚本、完成我们想让它在发生网络接口变化时去完成的任务。
当然,hass那边还是需要做相应的配合的。

hass方面的准备工作
1. 配置mqtt broker。
   使用hass自带的也行,或者自己安装一个更好(著名的mosquitto)。我自己的做法是在路由器上安装了mosquitto,反正路由器是开机时间最长的那个,顺便跑个mosquitto根本不算啥。在hass的configuration.yaml文件中配上就行。都是内网,我也懒得设置用户名密码了。
mqtt:
  broker: x.x.x.x #你自己的broker地址

2. 配置传感器
  增加一个手动的基于mqtt协议的二进制传感器:
binary_sensor:
  - platform: mqtt
    state_topic: "openwrt/pppoe-wan"
    name: internet
    device_class: connectivity
    json_attributes_topic: "openwrt/wan-ip"
后面两行不是必须的内容,只是为了看起来更好看、更方便

3. 在路由器的/etc/hotplug.d/iface下面保存一个脚本,名字随便起,比如01wanmon.sh,内容:
#!/bin/sh
date >> /tmp/hotp.log
[ "$INTERFACE" = "wan_6" ] && [ "$ACTION" = "ifupdate" ] && (
   wanip=$(ifconfig pppoe-wan | awk '/inet addr/{print substr($2,6)}')
   lan6ip=$(ifconfig eth0 | grep Scope:Global | awk '{print $3}' | cut -d'/' -f1)
   mosquitto_pub -h 10.0.1.1 -t openwrt/pppoe-wan -m ON
   mosquitto_pub -h 10.0.1.1 -t openwrt/wan-ip -m "{"wan-ip":""$wanip"","lan-ip6":""$lan6ip""}"
   echo "ipv6 updated: $wan6ip" >>/tmp/hotp.log )

[ "$INTERFACE" = "wan" ] || exit 0
[ "$ACTION" = "ifdown" ] && ( mosquitto_pub -h 10.0.1.1 -t openwrt/pppoe-wan -m OFF;echo 'wan down'>>/tmp/hotp.log )
[ "$ACTION" = "ifup" ] && ( mosquitto_pub -h 10.0.1.1 -t openwrt/pppoe-wan -m ON;echo 'wan up'>>/tmp/hotp.log )
[ "$ACTION" = "ifupdate" ] && (
   wanip=$(ifconfig pppoe-wan | awk '/inet addr/{print substr($2,6)}')
   lan6ip=$(ifconfig eth0 | grep Scope:Global | awk '{print $3}' | cut -d'/' -f1)
   mosquitto_pub -h 10.0.1.1 -t openwrt/pppoe-wan -m ON
   mosquitto_pub -h 10.0.1.1 -t openwrt/wan-ip -m "{"wan-ip":""$wanip"","lan-ip6":""$lan6ip""}"
   echo "ip updated: $wanip" >>/tmp/hotp.log )
配合上面说的二进制传感器的配置,这个脚本可以在网络接口有任何变化时通过mqtt协议向hass更新名为“internet”的这个二进制传感器的属性,包括连接状态、IPv4和IPv6的地址。如果你不想要地址,有几行可以删掉。

4. 剩下的,就是在hass上定制自动化条目了,相信看到这个帖子的朋友都不陌生,我就不啰嗦了。


回复

使用道具 举报

103

主题

2899

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11635
金钱
8671
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-19 20:08:03 | 显示全部楼层

弃用了MQTT,改为Rest API,更简洁、更优雅

本帖最后由 XCray 于 2022-7-9 19:54 编辑

做一个脚本(这个是获取CPU温度):
#!/bin/sh
temp=`cat /sys/class/thermal/thermal_zone0/temp`
json="{"state":"$temp", "attributes": {"unit_of_measurement": "°C"}}"
curl -X POST -H "Authorization: Bearer XXXXXXX" -H "Content-Type: application/json" -d "$json" http://homeassistant:8123/api/states/sensor.rttemp
根据需要事件触发(如hotplug)或定时触发(crontab)。
此例在/etc/crontabs/root里增加一行,每15分钟执行一次:
*/15 * * * * /root/temprpt >/dev/null 2>&1


回复

使用道具 举报

9

主题

171

帖子

868

积分

论坛积极会员

积分
868
金钱
697
HASS币
0
发表于 2020-5-19 22:05:46 | 显示全部楼层
加个华为4G路由器+OPWRT整合下。家里再来个后备电源。
回复

使用道具 举报

123

主题

4630

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16087
金钱
11372
HASS币
45
发表于 2020-5-20 08:20:54 | 显示全部楼层
洗耳恭听

                               
登录/注册后可看大图
回复

使用道具 举报

20

主题

459

帖子

2819

积分

金牌会员

Rank: 6Rank: 6

积分
2819
金钱
2360
HASS币
0
发表于 2020-5-20 09:02:22 | 显示全部楼层
我希望有一个值得这么高智商小偷来偷的豪宅。。。
回复

使用道具 举报

6

主题

167

帖子

2068

积分

金牌会员

Rank: 6Rank: 6

积分
2068
金钱
1901
HASS币
20
发表于 2020-5-20 09:28:57 | 显示全部楼层
一位大神的作品的连接有么 给的关键字可不好搜
回复

使用道具 举报

103

主题

2899

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11635
金钱
8671
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-20 11:11:09 | 显示全部楼层
linoul 发表于 2020-5-20 09:28
一位大神的作品的连接有么 给的关键字可不好搜

哈哈,必须得有啊!昨天想起来就写了这么一句,没想这么多
https://github.com/andrewjfreyer/monitor
回复

使用道具 举报

103

主题

2899

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11635
金钱
8671
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-20 11:25:12 | 显示全部楼层
showphi 发表于 2020-5-20 09:02
我希望有一个值得这么高智商小偷来偷的豪宅。。。

哈哈,你这么皮,你女朋友知道吗?有了豪宅,还得有这么一套可靠的安防不是么?
回复

使用道具 举报

7

主题

348

帖子

1078

积分

金牌会员

Rank: 6Rank: 6

积分
1078
金钱
730
HASS币
0
发表于 2020-5-21 13:27:40 | 显示全部楼层
学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-19 14:45 , Processed in 0.227161 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表