自制 AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有 iPhone - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
lovelyelfpop
V2EX    分享创造

自制 AirTag,支持安卓/鸿蒙/PC/Home Assistant,无需拥有 iPhone

  lovelyelfpop 229 天前 5912 次点击
这是一个创建于 229 天前的主题,其中的信息可能已经有所发展或是发生改变。

在这里插入图片描述 苹果的 AirTag 很贵,虽然某强北有平价代替品,但是仍需要苹果设备才能绑定,才能查看位置。不支持安卓/鸿蒙/PC ,也不支持集成到 Home Assistant 中。

AirTag 的原理

每个 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/华强北平替/自己制作的定位标签。

下面是我制作的一些成品定位标签 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

安卓 App 界面

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

Web 网站界面

在这里插入图片描述 在这里插入图片描述

Home Assistant 集成截图

在这里插入图片描述 在这里插入图片描述

42 条回复    2025-07-30 11:37:03 +08:00
w568w
    1
w568w  
   229 天前
非常强的折腾,如果有 GitHub 项目我就 star 了
musi
    2
musi  
   229 天前
@w568w 原文中有提到原项目是 http://github.com/dchristl/macless-haystack
coolfan
    3
coolfan  
   229 天前
有意思
killeder
    4
killeder  
   229 天前 via Android
有 uwb 吗
dozer47528
    5
dozer47528  
   229 天前
既然是私有网络,那就不能利用别人手机上报定位了是吗?
neoshui
    6
neoshui  
   229 天前
我也很愿意给 OP 提供一个 GitHub 的(如果有)
lisxour
    7
lisxour  
   229 天前
这么强的项目,华强北居然没出全平台的高仿?
Felldeadbird
    8
Felldeadbird  
   229 天前
卧槽!楼主这是打开了新商业模式啊。
支持楼主的开源。
h4de5
    9
h4de5  
   229 天前
不错,支持一下。
cat
    10
cat  
   229 天前
好家伙,坐在产业园区 突然看到月亮湾的地图…
sparkssssssss
    11
sparkssssssss  
   229 天前
之前在淘宝上搜了下宠物定位器,貌似就是利用这个,请问下,自制的话,成本几何?
macaodoll
    12
macaodoll  
   229 天前
牛逼 6666
lovelyelfpop
    13
lovelyelfpop  
OP
   229 天前
@killeder 没有 UWB 。华强北平替也没有
lovelyelfpop
    14
lovelyelfpop  
OP
   229 天前
@dozer47528 私有后台是给 app 查看位置用的。tag 利用附近苹果手机上传位置,这个还是一样的
lovelyelfpop
    15
lovelyelfpop  
OP
   229 天前
@coolloves 要准备一些工具,电烙铁 编程器啥的。材料成本看你购买的来源。你也可以画板子批量生产
whathappen
    16
whathappen  
   229 天前
@lovelyelfpop

#14

那我直接买原装或者华强北的 Airtag,是否可以用安卓查看它们的定位? 还是只可以查看“自制”的那些?

安装了这个软件的安卓设备会不会参与分享定位的角式?还是只是纯观看的角式?
lovelyelfpop
    17
lovelyelfpop  
OP
   229 天前
@whathappen app 不支持华强北的平替。安卓手机不参与上报 tag 的位置,安卓 app 只用来查看位置
LightofHeven
    18
LightofHeven  
   229 天前
op 动手能力真刚
65r4Zgm364TDg652
    19
65r4Zgm364TDg652  
   229 天前
这,适合整个新的品牌,作为小孩定位器,众筹一轮
weijancc
    20
weijancc  
   229 天前
挺好的, 就是放 gitee 显得 low
ZhLTE
    21
ZhLTE  
   229 天前
@huguadao 不得被苹果告死吗
imyip
    22
imyip  
   229 天前
关键是 黄鱼搜蓝牙信标 可以买到很便宜的 nrf51822
xuromky
    23
xuromky  
   229 天前
成品多少钱一个,我要买
65r4Zgm364TDg652
    24
65r4Zgm364TDg652  
   229 天前
@ZhLTE 平多多一搜一大把的东西,原理不重要,关键就是要品牌要好玩
undefinedsymbol
    25
undefinedsymbol  
   229 天前
不错不错,star 来一个
koast
    26
koast  
   229 天前
主要问题是首次绑定生成的那个密钥不好导出,导出之后应该是和那华强北平替一样用的吧。毕竟 airtag 是绑定在账号上的,那个协商的密钥肯定也是可以从苹果服务器登陆账号获取的吧,不然新设备登录老账号都要重新绑定一遍 airtag 并且导致老设备的绑定失效听起来挺离谱的。 @lovelyelfpop @whathappen
koast
    27
koast  
   229 天前
苹果设计的这个协议很那啥的点在于信标的 mac 地址也是轮换密钥的一部分(和 generate_key.py 生成的那个主密钥不一样),导致要蹭它这个网络,必须得支持更改 mac 地址可以,这就使一些有意思的应用场景用不了。比如给安卓机写一个内核模块加载上,让它定时更改下蓝牙地址发下广播帧之类的。
lovelyelfpop
    28
lovelyelfpop  
OP
   229 天前
@xuromky 我黄鱼有上架几个自己做的,搜索“自制定位标签”
MacsedProtoss
    29
MacsedProtoss  
   229 天前 via iPhone
白嫖苹果的定位服务器?那这个是不是其实苹果是有封禁渠道的?
& 既然是到苹果服务器意味着这些设备都会是同一个 Apple ID ?虽然没绑定… 但是既然数据在苹果服务器那么必须得有个 ID 才能去取吧?
lovelyelfpop
    30
lovelyelfpop  
OP
   229 天前
@MacsedProtoss 自己部署后台服务,使用自己注册的 AppleID 。如果苹果能封这个机制,那就得给以往发售的所有 AirTag 更新固件(显然不可能)。因为是从 AirTag 逆向过来的。
wanwaneryide
    31
wanwaneryide  
   229 天前
@huguadao #19 pdd 就有的,苹果用的大概也就 20 左右吧,如果是安卓用的一个大概在 60 左右的样子,我买了一个放小电驴上,还行,定位误差有个三五十米左右
lovelyelfpop
    32
lovelyelfpop  
OP
   229 天前
@wanwaneryide 没有 UWB 就是这样,误差大概就是蓝牙的广播范围
lovelyelfpop
    33
lovelyelfpop  
OP
   205 天前
教程已更新,部署后台服务不再需要魔法了
avrillavigne
    34
avrillavigne  
   176 天前
很强
followad
    35
followad  
   96 天前 via iPhone
这个小东西在哪买啊老哥
lovelyelfpop
    36
lovelyelfpop  
OP
   96 天前
@followad 我在咸鱼鱼有上架几款自己做的,搜索“自制定位标签”,用户名是 lovelyelfpop
LonelyTravel
    37
LonelyTravel  
   88 天前
airtag 的原理我是明白了,自作的 tag 模拟 findmy 广播也能懂,但是自作的 tag 还不需要苹果手机和账号绑定是如何实现能不需要苹果手机也能查看 tag 的位置的呢?还能知道这个 tag 就是我自己的 tag
lovelyelfpop
    38
lovelyelfpop  
OP
   86 天前
@LonelyTravel 在后台服务器那边登录了 AppleID 。
其实从苹果那边获取位置报告的 API 接口,任何 AppleID 都能去请求,只要你有合法的密钥即可。
DIY 的 tag 内置了若干公钥(其实还有另一部分:私钥。这个要自己保存好不要泄露)。
每次请求位置报告,都是用公钥去获取其对应的位置报告。
取到的位置报告是加了密的,需要用私钥去解密得到经纬度明文
LonelyTravel
    39
LonelyTravel  
   82 天前
@lovelyelfpop 也就是说 api 接口获取位置时,苹果服务器会根据登录的账号所拥有的公钥去匹配对应的 tag ,然后用私钥去解密位置。tag 广播上传的位置中带有这个公钥信息。是这样理解吗?
lovelyelfpop
    40
lovelyelfpop  
OP
   82 天前
@LonelyTravel 调用苹果 API 需要 1 、任意苹果账号 2 、要查询的定位器的广播公钥
1 和 2 没关系,任意 AppleID 都可以获取任意定位器的位置,只要有公钥
LonelyTravel
    41
LonelyTravel  
   82 天前
@lovelyelfpop 明白,感谢解惑
lovelyelfpop
    42
lovelyelfpop  
OP
   74 天前
小黄鱼账号 lovelyelfpop 卖小型定位芯片被封了,换个黄鱼号"闪电小子"!
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2577 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 23ms UTC 04:57 PVG 12:57 LAX 21:57 JFK 00:57
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86