项目简介
AirBattery 是一款功能强大的 macOS 应用程序,专门设计用于监控和显示您所有苹果设备的电池使用情况。通过创新的"Nearbility Engine"技术,它能够自动搜索并显示周边支持设备的电量信息,无需复杂的配置过程。无论是 iPhone、iPad、Apple Watch 还是其他蓝牙设备,AirBattery 都能在 Dock 栏、状态栏或小组件中实时展示它们的电池状态。
功能特性
- 多设备电池监控:自动检测并显示 iPhone、iPad、Apple Watch 等苹果设备的电池电量
- 多种显示方式:支持在 Dock 栏、状态栏和小组件中显示电池信息
- 智能设备发现:基于"Nearbility Engine"自动搜索周边设备,无需手动配置
- Nearcast 功能:支持在局域网内查看其他 Mac 及其外设的电量信息
- 实时状态栏图标:可配置为实时显示电量图标,类似系统原生风格
- 设备隐藏管理:可根据需要隐藏特定设备,随时恢复显示
- 蓝牙设备支持:通过蓝牙权限获取周边设备数据包并解析电池信息
安装指南
系统要求
- macOS 11.0 及更高版本
安装方法
方法一:直接下载
前往 发布页面 下载最新版安装文件。
方法二:Homebrew 安装
brew install lihaoyun6/tap/airbattery
使用说明
基础使用
- 启动 AirBattery 后,默认会同时显示在 Dock 栏和状态栏上
- 应用程序会自动搜索所有支持隔空电量获取的设备
- 点击 Dock 图标、状态栏图标或添加小组件即可查看设备电量
高级功能
- 在偏好设置中可切换状态栏图标为实时电量显示
- 使用 Dock 栏菜单或状态栏菜单隐藏/显示特定设备
- 利用 Nearcast 功能查看局域网内其他设备的电量状态
核心代码解析
蓝牙设备电池数据解析
# 从系统日志中提取蓝牙设备的电池信息
PRED='subsystem == "com.apple.bluetooth" AND (category == "CBStackDeviceMonitor" OR category == "Server.GATT") AND (eventMessage CONTAINS "Battery" OR eventMessage CONTAINS "statedump: 0x001A" OR eventMessage CONTAINS "statedump: 0x001D")'# 查询系统日志获取蓝牙设备数据
data=$(/usr/bin/nice -n 19 /usr/bin/log show $STYLE $LVL --predicate "$PRED" --last "$WINDOW")# 解析电池信息并生成JSON格式输出
for i in `echo "$data"|grep "Battery"|grep -v "VID 0x004C"`
dotime=`echo $i|awk '{print $1"T"$2}'`name=`echo $i|grep -o ", Nm '.*', PID"|sed "s/, Nm '//g;s/', PID//g"`type=`echo $i|grep -o ", DvT [A-z]*"|sed "s/, DvT //g"`batt=`echo $i|grep -o ", Battery M [+-]*[0-9]*%"|grep -o "\d*"`stat=`echo $i|grep -o ", Battery M [+-]*[0-9]*%"|grep -Eo "\+|\-"`mac=`echo $i|grep -o ", BDA [A-z0-9:]*"|sed "s/, BDA //g"`# 输出格式化JSON数据echo "{\"time\": \"$time\", \"vid\": \"$vid\", \"pid\": \"$pid\", \"type\": \"$type\", \"mac\": \"$mac\", \"name\": \"$name\", \"level\": $batt, \"status\": \"$stat\"}"
done
Apple Pencil 电池监控
# 查询Apple Pencil的电池信息
data=`$syslog $type -u $id --process SpringBoard -m '"Accessory Category" = Pencil;' -T SpringBoard`# 解析电池容量和充电状态
batt=`echo "$data"|grep "Current Capacity"|grep -o "[0-9]*"|sed -n '$p'`
stat=`echo "$data"|grep "Is Charging"|grep -o "[0-9]*"|sed -n '$p'`
model=`echo "$data"|grep "Product ID"|grep -o "[0-9]*"|sed -n '$p'`
vendor=`echo "$data"|grep "Vendor ID"|grep -v Source|grep -o "[0-9]*"|sed -n '$p'`# 输出Pencil设备信息
echo "{\"level\": $batt, \"status\": $stat, \"model\": \"$model\", \"vendor\": \"$vendor\"}"
设备特征值数据解析
# 解析GATT特征值数据获取设备信息
devData=`echo "$data"|grep -E "statedump: 0x001A Characteristic Value|statedump: 0x001D Characteristic Value"|grep -o "\[[A-z0-9 ]*\]"|sed 's/\[ //g;s/ \]//g'|awk '{if (NR%2==1) {line=$0} else {print line, $0}}'|awk 'length($0) == 23'`# 结合系统蓝牙配置信息完善设备数据
btData=`/usr/sbin/system_profiler SPBluetoothDataType`
for i in `paste -d ' ' <(echo "$times") <(echo "$devData")`
do# 提取设备VID、PID并匹配设备名称vid=`echo $i|awk '{print "0x"$4$3}'`pid=`echo $i|awk '{print "0x"$6$5}'`name=`echo "$btData"|grep -B3 $pid|sed -n '1p'|sed 's/^ *//g;s/:$//g'`type=`echo "$btData"|grep -A5 $pid|grep "Minor Type: "|sed 's/^ *Minor Type: //g'`
done
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码
公众号二维码