苹果的 AirTag 很贵,虽然某强北有平价代替品,但是仍需要苹果设备才能绑定,才能查看位置。不支持安卓/鸿蒙/PC ,也不支持集成到 Home Assistant 中。
每个 AirTag 都会发送一个蓝牙信号,其可以被临近的苹果设备( iPhone 、iPad 、MAC 等)检测到,这些苹果设备会将这些 AirTag 的位置上报到苹果服务器。这个网络就是 Find My 网络。
国外有人逆向了 AirTag 机制 (github 项目 seemoo-lab/openhaystack) 可以让一些蓝牙设备,比如 ESP32 、树莓派、甚至带蓝牙适配器的 Linux ,模拟发出 FindMy 蓝牙广播。
这样制作出的定位标签,不需要苹果手机绑定,支持安卓/鸿蒙/PC/Home Assistant 查看标签的位置。
我在 gitee 上建了一个项目 https://gitee.com/lovelyelfpop/macless-haystack 整合了 github 上一些内容,并做了如下一些事情: 1 、中文翻译 主要翻译的 github 项目 dchristl/macless-haystack 2 、安卓 app 适配国情 界面汉化,并替换为高德地图和定位 3 、硬件准备和刷机方法详细说明 4 、Home Assistant 集成说明
支持 安卓(有app),iOS/鸿蒙/PC等其他系统(用浏览器访问web 网站) 查看定位标签的位置(下面有截图)。 注意:虽然查看标签的位置不需要苹果手机,但是部署服务时需要有 AppleID 账号(需要在苹果手机上注册,可以找朋友借用注册一个。苹果网站上注册的不行)。 另外,标签上报位置仍然依赖苹果的 FindMy 网络,要求标签附近有苹果设备,因此,人少的地方比如农村不适合使用 AirTag/华强北平替/自己制作的定位标签。
下面是我制作的一些成品定位标签
1 w568w 229 天前 非常强的折腾,如果有 GitHub 项目我就 star 了 |
![]() | 2 musi 229 天前 @w568w 原文中有提到原项目是 http://github.com/dchristl/macless-haystack |
![]() | 3 coolfan 229 天前 |
4 killeder 229 天前 via Android 有 uwb 吗 |
5 dozer47528 229 天前 既然是私有网络,那就不能利用别人手机上报定位了是吗? |
![]() | 6 neoshui 229 天前 我也很愿意给 OP 提供一个 GitHub 的(如果有) |
![]() | 7 lisxour 229 天前 这么强的项目,华强北居然没出全平台的高仿? |
![]() | 8 Felldeadbird 229 天前 卧槽!楼主这是打开了新商业模式啊。 支持楼主的开源。 |
9 h4de5 229 天前 不错,支持一下。 |
![]() | 10 cat 229 天前 好家伙,坐在产业园区 突然看到月亮湾的地图… |
![]() | 11 sparkssssssss 229 天前 之前在淘宝上搜了下宠物定位器,貌似就是利用这个,请问下,自制的话,成本几何? |
12 macaodoll 229 天前 牛逼 6666 |
![]() | 13 lovelyelfpop OP @killeder 没有 UWB 。华强北平替也没有 |
![]() | 14 lovelyelfpop OP @dozer47528 私有后台是给 app 查看位置用的。tag 利用附近苹果手机上传位置,这个还是一样的 |
![]() | 15 lovelyelfpop OP @coolloves 要准备一些工具,电烙铁 编程器啥的。材料成本看你购买的来源。你也可以画板子批量生产 |
16 whathappen 229 天前 @lovelyelfpop #14 那我直接买原装或者华强北的 Airtag,是否可以用安卓查看它们的定位? 还是只可以查看“自制”的那些? 安装了这个软件的安卓设备会不会参与分享定位的角式?还是只是纯观看的角式? |
![]() | 17 lovelyelfpop OP @whathappen app 不支持华强北的平替。安卓手机不参与上报 tag 的位置,安卓 app 只用来查看位置 |
![]() | 18 LightofHeven 229 天前 op 动手能力真刚 |
![]() | 19 65r4Zgm364TDg652 229 天前 这,适合整个新的品牌,作为小孩定位器,众筹一轮 |
![]() | 20 weijancc 229 天前 挺好的, 就是放 gitee 显得 low |
22 imyip 229 天前 关键是 黄鱼搜蓝牙信标 可以买到很便宜的 nrf51822 |
![]() | 23 xuromky 229 天前 成品多少钱一个,我要买 |
![]() | 24 65r4Zgm364TDg652 229 天前 @ZhLTE 平多多一搜一大把的东西,原理不重要,关键就是要品牌要好玩 |
25 undefinedsymbol 229 天前 不错不错,star 来一个 |
26 koast 229 天前 主要问题是首次绑定生成的那个密钥不好导出,导出之后应该是和那华强北平替一样用的吧。毕竟 airtag 是绑定在账号上的,那个协商的密钥肯定也是可以从苹果服务器登陆账号获取的吧,不然新设备登录老账号都要重新绑定一遍 airtag 并且导致老设备的绑定失效听起来挺离谱的。 @lovelyelfpop @whathappen |
27 koast 229 天前 苹果设计的这个协议很那啥的点在于信标的 mac 地址也是轮换密钥的一部分(和 generate_key.py 生成的那个主密钥不一样),导致要蹭它这个网络,必须得支持更改 mac 地址可以,这就使一些有意思的应用场景用不了。比如给安卓机写一个内核模块加载上,让它定时更改下蓝牙地址发下广播帧之类的。 |
![]() | 28 lovelyelfpop OP @xuromky 我黄鱼有上架几个自己做的,搜索“自制定位标签” |
29 MacsedProtoss 229 天前 via iPhone 白嫖苹果的定位服务器?那这个是不是其实苹果是有封禁渠道的? & 既然是到苹果服务器意味着这些设备都会是同一个 Apple ID ?虽然没绑定… 但是既然数据在苹果服务器那么必须得有个 ID 才能去取吧? |
![]() | 30 lovelyelfpop OP @MacsedProtoss 自己部署后台服务,使用自己注册的 AppleID 。如果苹果能封这个机制,那就得给以往发售的所有 AirTag 更新固件(显然不可能)。因为是从 AirTag 逆向过来的。 |
31 wanwaneryide 229 天前 @huguadao #19 pdd 就有的,苹果用的大概也就 20 左右吧,如果是安卓用的一个大概在 60 左右的样子,我买了一个放小电驴上,还行,定位误差有个三五十米左右 |
![]() | 32 lovelyelfpop OP @wanwaneryide 没有 UWB 就是这样,误差大概就是蓝牙的广播范围 |
![]() | 33 lovelyelfpop OP 教程已更新,部署后台服务不再需要魔法了 |
![]() | 34 avrillavigne 176 天前 很强 |
35 followad 96 天前 via iPhone 这个小东西在哪买啊老哥 |
![]() | 36 lovelyelfpop OP @followad 我在咸鱼鱼有上架几款自己做的,搜索“自制定位标签”,用户名是 lovelyelfpop |
37 LonelyTravel 88 天前 airtag 的原理我是明白了,自作的 tag 模拟 findmy 广播也能懂,但是自作的 tag 还不需要苹果手机和账号绑定是如何实现能不需要苹果手机也能查看 tag 的位置的呢?还能知道这个 tag 就是我自己的 tag |
![]() | 38 lovelyelfpop OP @LonelyTravel 在后台服务器那边登录了 AppleID 。 其实从苹果那边获取位置报告的 API 接口,任何 AppleID 都能去请求,只要你有合法的密钥即可。 DIY 的 tag 内置了若干公钥(其实还有另一部分:私钥。这个要自己保存好不要泄露)。 每次请求位置报告,都是用公钥去获取其对应的位置报告。 取到的位置报告是加了密的,需要用私钥去解密得到经纬度明文 |
39 LonelyTravel 82 天前 @lovelyelfpop 也就是说 api 接口获取位置时,苹果服务器会根据登录的账号所拥有的公钥去匹配对应的 tag ,然后用私钥去解密位置。tag 广播上传的位置中带有这个公钥信息。是这样理解吗? |
![]() | 40 lovelyelfpop OP @LonelyTravel 调用苹果 API 需要 1 、任意苹果账号 2 、要查询的定位器的广播公钥 1 和 2 没关系,任意 AppleID 都可以获取任意定位器的位置,只要有公钥 |
41 LonelyTravel 82 天前 @lovelyelfpop 明白,感谢解惑 |
![]() | 42 lovelyelfpop OP 小黄鱼账号 lovelyelfpop 卖小型定位芯片被封了,换个黄鱼号"闪电小子"! |