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

 找回密码
 立即注册
楼主: XCray

[进阶教程] 准确、及时、自动判断离家回家--多种方案试用后的最终选择

  [复制链接]

0

主题

23

帖子

176

积分

注册会员

Rank: 2

积分
176
金钱
153
HASS币
0
发表于 2022-10-28 15:16:40 | 显示全部楼层
我编译了这个 https://github.com/RoboMagus/ESP32-MQTT-Bluetooth-Monitor

好像是基于这个monitor项目的ESP32版本, 编译过程也是血泪史

它的master分支一堆报错, 最后选择了0.3.0版本分支, 手动修改了一些bug
回复

使用道具 举报

4

主题

170

帖子

600

积分

高级会员

Rank: 4

积分
600
金钱
430
HASS币
0
发表于 2022-10-30 14:12:39 | 显示全部楼层
回复

使用道具 举报

5

主题

40

帖子

378

积分

论坛分享达人

积分
378
金钱
338
HASS币
0
发表于 2022-11-9 11:25:48 | 显示全部楼层
一定要有树莓派吗??我用的cm-311盒子自带蓝牙,这样的话要如何配置。我看安装都是用树莓派讲解的
回复

使用道具 举报

0

主题

20

帖子

61

积分

注册会员

Rank: 2

积分
61
金钱
41
HASS币
0
发表于 2023-4-13 12:01:58 | 显示全部楼层
感谢,感谢,学习了
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
12119
金钱
9100
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2023-4-13 21:28:44 | 显示全部楼层
hass_ben 发表于 2022-11-9 11:25
一定要有树莓派吗??我用的cm-311盒子自带蓝牙,这样的话要如何配置。我看安装都是用树莓派讲解的 ...

试试呗,基于shell的脚本,理论上盒子也可以
回复

使用道具 举报

0

主题

6

帖子

32

积分

新手上路

Rank: 1

积分
32
金钱
26
HASS币
0
发表于 2023-4-29 18:23:19 | 显示全部楼层
我也一直在苦苦寻找一种理想的方案而不得,直到有一天看到版主的这篇帖子。不过我认为还有一种异曲同工的方法那就是使用OpenWrt路由器脚本(示例脚本请点击查看),自动判断WiFi客户端是否连接上,连上说明主人的手机回到家了,此时openwrt发出mqtt给ha亮灯.



更高级的玩法思路:开源路由固件openwrt组mesh网络,每个路由各自安装hostapd-utils和mqtt,能实现回家自动控制home assistant亮灯,离家自动灭灯,还能实现连一楼的mesh路由自动开一楼灯,连二楼mesh路由自动关一楼灯开二楼灯。
实施:有点难度°,还有点犯困,午睡一下先。。。
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
12119
金钱
9100
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2023-4-29 19:05:59 | 显示全部楼层
e27bbb 发表于 2023-4-29 18:23
我也一直在苦苦寻找一种理想的方案而不得,直到有一天看到版主的这篇帖子。不过我认为还有一种异曲同工的方 ...

这个思路讨论过很多次,最大的问题是回家后手机并不会马上连接WiFi,这个时延是分钟级的,大多数时候是不可接受的。
回复

使用道具 举报

0

主题

6

帖子

32

积分

新手上路

Rank: 1

积分
32
金钱
26
HASS币
0
发表于 2023-4-30 10:46:42 | 显示全部楼层
XCray 发表于 2023-4-29 19:05
这个思路讨论过很多次,最大的问题是回家后手机并不会马上连接WiFi,这个时延是分钟级的,大多数时候是不 ...

这个方式局限在于你的WiFi无线网络必须唯一性,不然你回家路过隔壁老王,你手机先连上了隔壁老王的WiFi,这就尴尬了。当手机遗忘周边邻居的WiFi完之后,经测试手机息屏状态接近家门口,灯就亮了,我个人感觉还是蛮灵敏的。稍后在楼下出教程,整理素材一下。
回复

使用道具 举报

0

主题

6

帖子

32

积分

新手上路

Rank: 1

积分
32
金钱
26
HASS币
0
发表于 2023-4-30 11:09:20 | 显示全部楼层
初始环境:

我的openwrt版本,任意版本应该都可以

我的openwrt版本,任意版本应该都可以

安装hostapd-utils

安装hostapd-utils

安装mqtt客户端

安装mqtt客户端


可选安装ttyd(可在网页上写路由器脚本)或者使用winscp也很方便
ttyd1.png winscp.png


编写脚本:可用ttyd或winscp,二选一
建立脚本.png QQ截图20230430103726.jpg

运行结果,openwrt的系统日志:
QQ截图20230430103550.jpg

具体过程:
使用ttyd或winscp登录路由器,进到bin目录里新建一个名为[size=15.008px]hostapd_eventscript[size=15.008px]的脚本文件,之后为此脚本赋予可执行权限[size=15.008px]
[size=15.008px]hostapd_eventscript[size=15.008px]脚本内容为如下,很多是测试语句,你复制完可删减。
#!/bin/sh
logger -t $0 "hostapd event received $1 $2 $3"
logger $2
logger $3

strA="AP-STA-CONNECTED"
strB="AP-STA-DISCONNECTED"
strC="50:8e:88:88:88:3a"

if [ $2 == "AP-STA-CONNECTED" ]; then
  logger "== logic 1 true"
fi

if [ $2 == AP-STA-CONNECTED ]; then
  logger "== logic 2 true"
fi

if [ $2 == $strA ]; then
  logger "== logic 3 true"
fi

case $2 in
  $strA) logger "logic 4 true";;
  $strB) logger "logic 5 true";;
  *) logger "logic 6 true";;
esac


if [ $strA == $2 ]; then
    logger "connected"
    if [ $strC == $3 ];  then
        logger "mqtt pub start"
        mosquitto_pub  -h 192.168.1.100 -p 1883 -t cmnd/tasmota_F4C176/POWER -m On
        mosquitto_pub  -h 192.168.1.100 -p 1883 -t cmnd/tasmota_95EA2A/POWER -m On
    fi

else
    logger "disconnected"
    mosquitto_pub  -h 192.168.1.100 -p 1883 -t cmnd/tasmota_F4C176/POWER -m OFF
    mosquitto_pub  -h 192.168.1.100 -p 1883 -t cmnd/tasmota_95EA2A/POWER -m Off
fi



[size=15.008px]之后在路由器命令行里执行。
[size=15.008px]root@OpenWrt:~#[size=15.008px]hostapd_cli -a/bin/hostapd_eventscript -B
[size=15.008px]此时该脚本会保持后台一直运行,当有指定手机Mac如50:8e:88:88:88:3a连接上或断开openwrt的WiFi时,都会触发一次mqtt指令。

回复

使用道具 举报

0

主题

6

帖子

32

积分

新手上路

Rank: 1

积分
32
金钱
26
HASS币
0
发表于 2023-4-30 11:36:46 | 显示全部楼层
多试几下,确实达不到秒级,有延时一点点,将就着可以用,主要是买不起树莓派搞.
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-27 03:27 , Processed in 0.080859 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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